403Webshell
Server IP : 209.209.40.120  /  Your IP : 216.73.217.112
Web Server : Microsoft-IIS/10.0
System : Windows NT NEWWWW 10.0 build 17763 (Windows Server 2019) i586
User : NEWWWW$ ( 0)
PHP Version : 8.3.30
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/framework7/node_modules/.vite/deps/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/framework7/node_modules/.vite/deps/framework7_lite-bundle.js
import {
  ConstructorMethods,
  ModalMethods,
  app_class_default,
  bindMethods,
  class_default,
  clicks_default,
  colorHexToRgb,
  colorHsbToHsl,
  colorHslToHsb,
  colorHslToRgb,
  colorRgbToHex,
  colorRgbToHsl,
  create_store_default,
  deleteProps,
  device_default,
  dom7_default,
  extend,
  getDevice,
  getDocument,
  getSupport,
  getTranslate,
  getWindow,
  history_default,
  id,
  iosPreloaderContent,
  jsx_default,
  mdPreloaderContent,
  modal_class_default,
  modal_default,
  navbar_default,
  nextFrame,
  nextTick,
  now,
  resize_default,
  router_default,
  serializeObject,
  service_worker_default,
  statusbar_default,
  store_default,
  subnavbar_default,
  support_default,
  toolbar_default,
  touch_default,
  touch_ripple_default,
  utils_default,
  utils_exports,
  view_default
} from "./chunk-YH2ICC64.js";
import "./chunk-PZ5AY32C.js";

// node_modules/framework7/components/dialog/dialog-class.js
var Dialog = class extends modal_class_default {
  constructor(app, params) {
    const extendedParams = extend({
      title: app.params.dialog.title,
      text: void 0,
      content: "",
      buttons: [],
      verticalButtons: false,
      onClick: void 0,
      cssClass: void 0,
      destroyOnClose: false,
      on: {}
    }, params);
    if (typeof extendedParams.closeByBackdropClick === "undefined") {
      extendedParams.closeByBackdropClick = app.params.dialog.closeByBackdropClick;
    }
    if (typeof extendedParams.backdrop === "undefined") {
      extendedParams.backdrop = app.params.dialog.backdrop;
    }
    super(app, extendedParams);
    const dialog = this;
    const device = getDevice();
    const document2 = getDocument();
    const {
      title,
      text,
      content,
      buttons,
      verticalButtons,
      cssClass,
      backdrop
    } = extendedParams;
    dialog.params = extendedParams;
    let $el;
    if (!dialog.params.el) {
      const dialogClasses = ["dialog"];
      if (buttons.length === 0) dialogClasses.push("dialog-no-buttons");
      if (buttons.length > 0) dialogClasses.push(`dialog-buttons-${buttons.length}`);
      if (verticalButtons) dialogClasses.push("dialog-buttons-vertical");
      if (cssClass) dialogClasses.push(cssClass);
      let buttonsHTML = "";
      if (buttons.length > 0) {
        buttonsHTML = jsx_default("div", {
          class: "dialog-buttons"
        }, buttons.map((button) => jsx_default("span", {
          class: `dialog-button${button.strong ? " dialog-button-strong" : ""}${button.color ? ` color-${button.color}` : ""}${button.cssClass ? ` ${button.cssClass}` : ""}`
        }, button.text)));
      }
      const dialogHtml = jsx_default("div", {
        class: dialogClasses.join(" ")
      }, jsx_default("div", {
        class: "dialog-inner"
      }, title && jsx_default("div", {
        class: "dialog-title"
      }, title), text && jsx_default("div", {
        class: "dialog-text"
      }, text), content), buttonsHTML);
      $el = dom7_default(dialogHtml);
    } else {
      $el = dom7_default(dialog.params.el);
    }
    if ($el && $el.length > 0 && $el[0].f7Modal) {
      return $el[0].f7Modal;
    }
    if ($el.length === 0) {
      return dialog.destroy();
    }
    let $backdropEl;
    if (backdrop) {
      $backdropEl = app.$el.children(".dialog-backdrop");
      if ($backdropEl.length === 0) {
        $backdropEl = dom7_default('<div class="dialog-backdrop"></div>');
        app.$el.append($backdropEl);
      }
    }
    function buttonOnClick(e) {
      const buttonEl = this;
      const index = dom7_default(buttonEl).index();
      const button = buttons[index];
      if (button.onClick) button.onClick(dialog, e);
      if (dialog.params.onClick) dialog.params.onClick(dialog, index);
      if (button.close !== false) dialog.close();
    }
    let addKeyboardHander;
    function onKeyDown(e) {
      const keyCode = e.keyCode;
      buttons.forEach((button, index) => {
        if (button.keyCodes && button.keyCodes.indexOf(keyCode) >= 0) {
          if (document2.activeElement) document2.activeElement.blur();
          if (button.onClick) button.onClick(dialog, e);
          if (dialog.params.onClick) dialog.params.onClick(dialog, index);
          if (button.close !== false) dialog.close();
        }
      });
    }
    if (buttons && buttons.length > 0) {
      dialog.on("open", () => {
        $el.find(".dialog-button").each((buttonEl, index) => {
          const button = buttons[index];
          if (button.keyCodes) addKeyboardHander = true;
          dom7_default(buttonEl).on("click", buttonOnClick);
        });
        if (addKeyboardHander && !device.ios && !device.android && !device.cordova && !device.capacitor) {
          dom7_default(document2).on("keydown", onKeyDown);
        }
      });
      dialog.on("close", () => {
        $el.find(".dialog-button").each((buttonEl) => {
          dom7_default(buttonEl).off("click", buttonOnClick);
        });
        if (addKeyboardHander && !device.ios && !device.android && !device.cordova && !device.capacitor) {
          dom7_default(document2).off("keydown", onKeyDown);
        }
        addKeyboardHander = false;
      });
    }
    extend(dialog, {
      app,
      $el,
      el: $el[0],
      $backdropEl,
      backdropEl: $backdropEl && $backdropEl[0],
      type: "dialog",
      setProgress(progress, duration) {
        app.progressbar.set($el.find(".progressbar"), progress, duration);
        return dialog;
      },
      setText(newText) {
        let $textEl = $el.find(".dialog-text");
        if ($textEl.length === 0) {
          $textEl = dom7_default('<div class="dialog-text"></div>');
          if (typeof title !== "undefined") {
            $textEl.insertAfter($el.find(".dialog-title"));
          } else {
            $el.find(".dialog-inner").prepend($textEl);
          }
        }
        $textEl.html(newText);
        dialog.params.text = newText;
        return dialog;
      },
      setTitle(newTitle) {
        let $titleEl = $el.find(".dialog-title");
        if ($titleEl.length === 0) {
          $titleEl = dom7_default('<div class="dialog-title"></div>');
          $el.find(".dialog-inner").prepend($titleEl);
        }
        $titleEl.html(newTitle);
        dialog.params.title = newTitle;
        return dialog;
      }
    });
    function handleClick(e) {
      const target = e.target;
      const $target = dom7_default(target);
      if ($target.closest(dialog.el).length === 0) {
        if (dialog.params.closeByBackdropClick && dialog.backdropEl && dialog.backdropEl === target) {
          dialog.close();
        }
      }
    }
    dialog.on("opened", () => {
      if (dialog.params.closeByBackdropClick) {
        app.on("click", handleClick);
      }
    });
    dialog.on("close", () => {
      if (dialog.params.closeByBackdropClick) {
        app.off("click", handleClick);
      }
    });
    $el[0].f7Modal = dialog;
    if (dialog.params.destroyOnClose) {
      dialog.once("closed", () => {
        setTimeout(() => {
          dialog.destroy();
        }, 0);
      });
    }
    return dialog;
  }
};
var dialog_class_default = Dialog;

// node_modules/framework7/components/dialog/dialog.js
var dialog_default = {
  name: "dialog",
  params: {
    dialog: {
      title: void 0,
      buttonOk: "OK",
      buttonCancel: "Cancel",
      usernamePlaceholder: "Username",
      passwordPlaceholder: "Password",
      preloaderTitle: "Loading... ",
      progressTitle: "Loading... ",
      backdrop: true,
      closeByBackdropClick: false,
      destroyPredefinedDialogs: true,
      keyboardActions: true,
      autoFocus: true
    }
  },
  static: {
    Dialog: dialog_class_default
  },
  create() {
    const app = this;
    function defaultDialogTitle() {
      return app.params.dialog.title || app.name;
    }
    const destroyOnClose = app.params.dialog.destroyPredefinedDialogs;
    const keyboardActions = app.params.dialog.keyboardActions;
    const autoFocus = app.params.dialog.autoFocus;
    const autoFocusHandler = autoFocus ? {
      on: {
        opened(dialog) {
          dialog.$el.find("input").eq(0).focus();
        }
      }
    } : {};
    const isIosTheme = app.theme === "ios";
    app.dialog = extend(ModalMethods({
      app,
      constructor: dialog_class_default,
      defaultSelector: ".dialog.modal-in"
    }), {
      // Shortcuts
      alert() {
        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
          args[_key] = arguments[_key];
        }
        let [text, title, callbackOk] = args;
        if (args.length === 2 && typeof args[1] === "function") {
          [text, callbackOk, title] = args;
        }
        return new dialog_class_default(app, {
          title: typeof title === "undefined" ? defaultDialogTitle() : title,
          text,
          buttons: [{
            text: app.params.dialog.buttonOk,
            strong: isIosTheme,
            onClick: callbackOk,
            keyCodes: keyboardActions ? [13, 27] : null
          }],
          destroyOnClose
        }).open();
      },
      prompt() {
        for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
          args[_key2] = arguments[_key2];
        }
        let [text, title, callbackOk, callbackCancel, defaultValue] = args;
        if (typeof args[1] === "function") {
          [text, callbackOk, callbackCancel, defaultValue, title] = args;
        }
        defaultValue = typeof defaultValue === "undefined" || defaultValue === null ? "" : defaultValue;
        return new dialog_class_default(app, {
          title: typeof title === "undefined" ? defaultDialogTitle() : title,
          text,
          content: `<div class="dialog-input-field input"><input type="text" class="dialog-input" value="${defaultValue}"></div>`,
          buttons: [{
            text: app.params.dialog.buttonCancel,
            keyCodes: keyboardActions ? [27] : null,
            color: null
          }, {
            text: app.params.dialog.buttonOk,
            strong: isIosTheme,
            keyCodes: keyboardActions ? [13] : null
          }],
          onClick(dialog, index) {
            const inputValue = dialog.$el.find(".dialog-input").val();
            if (index === 0 && callbackCancel) callbackCancel(inputValue);
            if (index === 1 && callbackOk) callbackOk(inputValue);
          },
          destroyOnClose,
          ...autoFocusHandler
        }).open();
      },
      confirm() {
        for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
          args[_key3] = arguments[_key3];
        }
        let [text, title, callbackOk, callbackCancel] = args;
        if (typeof args[1] === "function") {
          [text, callbackOk, callbackCancel, title] = args;
        }
        return new dialog_class_default(app, {
          title: typeof title === "undefined" ? defaultDialogTitle() : title,
          text,
          buttons: [{
            text: app.params.dialog.buttonCancel,
            onClick: callbackCancel,
            keyCodes: keyboardActions ? [27] : null,
            color: null
          }, {
            text: app.params.dialog.buttonOk,
            strong: isIosTheme,
            onClick: callbackOk,
            keyCodes: keyboardActions ? [13] : null
          }],
          destroyOnClose
        }).open();
      },
      login() {
        for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
          args[_key4] = arguments[_key4];
        }
        let [text, title, callbackOk, callbackCancel] = args;
        if (typeof args[1] === "function") {
          [text, callbackOk, callbackCancel, title] = args;
        }
        return new dialog_class_default(app, {
          title: typeof title === "undefined" ? defaultDialogTitle() : title,
          text,
          // prettier-ignore
          content: `
              <div class="dialog-input-field dialog-input-double input">
                <input type="text" name="dialog-username" placeholder="${app.params.dialog.usernamePlaceholder}" class="dialog-input">
              </div>
              <div class="dialog-input-field dialog-input-double input">
                <input type="password" name="dialog-password" placeholder="${app.params.dialog.passwordPlaceholder}" class="dialog-input">
              </div>`,
          buttons: [{
            text: app.params.dialog.buttonCancel,
            keyCodes: keyboardActions ? [27] : null,
            color: null
          }, {
            text: app.params.dialog.buttonOk,
            strong: isIosTheme,
            keyCodes: keyboardActions ? [13] : null
          }],
          onClick(dialog, index) {
            const username = dialog.$el.find('[name="dialog-username"]').val();
            const password = dialog.$el.find('[name="dialog-password"]').val();
            if (index === 0 && callbackCancel) callbackCancel(username, password);
            if (index === 1 && callbackOk) callbackOk(username, password);
          },
          destroyOnClose,
          ...autoFocusHandler
        }).open();
      },
      password() {
        for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
          args[_key5] = arguments[_key5];
        }
        let [text, title, callbackOk, callbackCancel] = args;
        if (typeof args[1] === "function") {
          [text, callbackOk, callbackCancel, title] = args;
        }
        return new dialog_class_default(app, {
          title: typeof title === "undefined" ? defaultDialogTitle() : title,
          text,
          // prettier-ignore
          content: `
              <div class="dialog-input-field input">
                <input type="password" name="dialog-password" placeholder="${app.params.dialog.passwordPlaceholder}" class="dialog-input">
              </div>`,
          buttons: [{
            text: app.params.dialog.buttonCancel,
            keyCodes: keyboardActions ? [27] : null,
            color: null
          }, {
            text: app.params.dialog.buttonOk,
            strong: isIosTheme,
            keyCodes: keyboardActions ? [13] : null
          }],
          onClick(dialog, index) {
            const password = dialog.$el.find('[name="dialog-password"]').val();
            if (index === 0 && callbackCancel) callbackCancel(password);
            if (index === 1 && callbackOk) callbackOk(password);
          },
          destroyOnClose,
          ...autoFocusHandler
        }).open();
      },
      preloader(title, color) {
        const preloaders = {
          iosPreloaderContent,
          mdPreloaderContent
        };
        const preloaderInner = preloaders[`${app.theme}PreloaderContent`] || "";
        return new dialog_class_default(app, {
          title: typeof title === "undefined" || title === null ? app.params.dialog.preloaderTitle : title,
          // prettier-ignore
          content: `<div class="preloader${color ? ` color-${color}` : ""}">${preloaderInner}</div>`,
          cssClass: "dialog-preloader",
          destroyOnClose
        }).open();
      },
      progress() {
        for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
          args[_key6] = arguments[_key6];
        }
        let [title, progress, color] = args;
        if (args.length === 2) {
          if (typeof args[0] === "number") {
            [progress, color, title] = args;
          } else if (typeof args[0] === "string" && typeof args[1] === "string") {
            [title, color, progress] = args;
          }
        } else if (args.length === 1) {
          if (typeof args[0] === "number") {
            [progress, title, color] = args;
          }
        }
        const infinite = typeof progress === "undefined";
        const dialog = new dialog_class_default(app, {
          title: typeof title === "undefined" ? app.params.dialog.progressTitle : title,
          cssClass: "dialog-progress",
          // prettier-ignore
          content: `
              <div class="progressbar${infinite ? "-infinite" : ""}${color ? ` color-${color}` : ""}">
                ${!infinite ? "<span></span>" : ""}
              </div>
            `,
          destroyOnClose
        });
        if (!infinite) dialog.setProgress(progress);
        return dialog.open();
      }
    });
  }
};

// node_modules/framework7/components/popup/popup-class.js
var Popup = class extends modal_class_default {
  constructor(app, params) {
    const extendedParams = extend({
      on: {}
    }, app.params.popup, params);
    super(app, extendedParams);
    const popup = this;
    const window2 = getWindow();
    const document2 = getDocument();
    const support2 = getSupport();
    const device = getDevice();
    popup.params = extendedParams;
    let $el;
    if (!popup.params.el) {
      $el = dom7_default(popup.params.content).filter((node) => node.nodeType === 1).eq(0);
    } else {
      $el = dom7_default(popup.params.el).eq(0);
    }
    if ($el && $el.length > 0 && $el[0].f7Modal) {
      return $el[0].f7Modal;
    }
    if ($el.length === 0) {
      return popup.destroy();
    }
    let $backdropEl;
    if (popup.params.backdrop && popup.params.backdropEl) {
      $backdropEl = dom7_default(popup.params.backdropEl);
    } else if (popup.params.backdrop) {
      if (popup.params.backdropUnique) {
        $backdropEl = dom7_default('<div class="popup-backdrop popup-backdrop-unique"></div>');
        popup.$containerEl.append($backdropEl);
      } else {
        $backdropEl = popup.$containerEl.children(".popup-backdrop");
      }
      if ($backdropEl.length === 0) {
        $backdropEl = dom7_default('<div class="popup-backdrop"></div>');
        popup.$containerEl.append($backdropEl);
      }
    }
    extend(popup, {
      app,
      push: $el.hasClass("popup-push") || popup.params.push,
      $el,
      el: $el[0],
      $backdropEl,
      backdropEl: $backdropEl && $backdropEl[0],
      type: "popup",
      $htmlEl: dom7_default("html")
    });
    if (popup.params.push) {
      $el.addClass("popup-push");
    }
    function handleClick(e) {
      const target = e.target;
      const $target = dom7_default(target);
      const keyboardOpened = !device.desktop && device.cordova && (window2.Keyboard && window2.Keyboard.isVisible || window2.cordova.plugins && window2.cordova.plugins.Keyboard && window2.cordova.plugins.Keyboard.isVisible);
      if (keyboardOpened) return;
      if ($target.closest(popup.el).length === 0) {
        if (popup.params && popup.params.closeByBackdropClick && popup.params.backdrop && popup.backdropEl && popup.backdropEl === target) {
          let needToClose = true;
          popup.$el.nextAll(".popup.modal-in").each((popupEl) => {
            const popupInstance = popupEl.f7Modal;
            if (!popupInstance) return;
            if (popupInstance.params.closeByBackdropClick && popupInstance.params.backdrop && popupInstance.backdropEl === popup.backdropEl) {
              needToClose = false;
            }
          });
          if (needToClose) {
            popup.close();
          }
        }
      }
    }
    function onKeyDown(e) {
      const keyCode = e.keyCode;
      if (keyCode === 27 && popup.params.closeOnEscape) {
        popup.close();
      }
    }
    let pushOffset;
    let isPush;
    function pushViewScale(offset) {
      return (app.height - offset * 2) / app.height;
    }
    let allowSwipeToClose = true;
    let isTouched = false;
    let startTouch;
    let currentTouch;
    let isScrolling;
    let touchStartTime;
    let touchesDiff;
    let isMoved = false;
    let pageContentEl;
    let pageContentScrollTop;
    let pageContentOffsetHeight;
    let pageContentScrollHeight;
    let popupHeight;
    let $pushEl;
    function handleTouchStart(e) {
      if (isTouched || !allowSwipeToClose || !popup.params.swipeToClose || !e.isTrusted) return;
      if (popup.params.swipeHandler && dom7_default(e.target).closest(popup.params.swipeHandler).length === 0) {
        return;
      }
      if (dom7_default(e.target).closest(".sortable-handler").length > 0) return;
      isTouched = true;
      isMoved = false;
      startTouch = {
        x: e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX,
        y: e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY
      };
      touchStartTime = now();
      isScrolling = void 0;
      if (!popup.params.swipeHandler && e.type === "touchstart") {
        pageContentEl = dom7_default(e.target).closest(".page-content")[0];
      }
    }
    function handleTouchMove(e) {
      if (!isTouched || !e.isTrusted) return;
      currentTouch = {
        x: e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX,
        y: e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY
      };
      if (typeof isScrolling === "undefined") {
        isScrolling = !!(isScrolling || Math.abs(currentTouch.x - startTouch.x) > Math.abs(currentTouch.y - startTouch.y));
      }
      if (isScrolling) {
        isTouched = false;
        isMoved = false;
        return;
      }
      touchesDiff = startTouch.y - currentTouch.y;
      if (isPush && pushOffset && touchesDiff > 0) {
        touchesDiff = 0;
      }
      const direction = touchesDiff < 0 ? "to-bottom" : "to-top";
      $el.transition(0);
      if (typeof popup.params.swipeToClose === "string" && direction !== popup.params.swipeToClose) {
        $el.transform("");
        $el.transition("");
        return;
      }
      if (!isMoved) {
        if (isPush && pushOffset) {
          popupHeight = $el[0].offsetHeight;
          $pushEl = $el.prevAll(".popup.modal-in").eq(0);
          if ($pushEl.length === 0) {
            $pushEl = app.$el.children(".view, .views");
          }
        }
        if (pageContentEl) {
          pageContentScrollTop = pageContentEl.scrollTop;
          pageContentScrollHeight = pageContentEl.scrollHeight;
          pageContentOffsetHeight = pageContentEl.offsetHeight;
          if (!(pageContentScrollHeight === pageContentOffsetHeight) && !(direction === "to-bottom" && pageContentScrollTop === 0) && !(direction === "to-top" && pageContentScrollTop === pageContentScrollHeight - pageContentOffsetHeight)) {
            $el.transform("");
            $el.transition("");
            isTouched = false;
            isMoved = false;
            return;
          }
        }
        isMoved = true;
        popup.emit("local::swipeStart popupSwipeStart", popup);
        popup.$el.trigger("popup:swipestart");
      } else {
        popup.emit("local::swipeMove popupSwipeMove", popup);
        popup.$el.trigger("popup:swipemove");
      }
      e.preventDefault();
      if (isPush && pushOffset) {
        const pushProgress = 1 - Math.abs(touchesDiff / popupHeight);
        const scale = 1 - (1 - pushViewScale(pushOffset)) * pushProgress;
        if ($pushEl.hasClass("popup")) {
          if ($pushEl.hasClass("popup-push")) {
            $pushEl.transition(0).forEach((el) => {
              el.style.setProperty("transform", `translate3d(0, calc(-1 * ${pushProgress} * (var(--f7-popup-push-offset) + 10px)) , 0px) scale(${scale})`, "important");
            });
          } else {
            $pushEl.transition(0).forEach((el) => {
              el.style.setProperty("transform", `translate3d(0, 0px , 0px) scale(${scale})`, "important");
            });
          }
        } else {
          $pushEl.transition(0).forEach((el) => {
            el.style.setProperty("transform", `translate3d(0,0,0) scale(${scale})`, "important");
          });
        }
      }
      $el.transition(0).transform(`translate3d(0,${-touchesDiff}px,0)`);
    }
    function handleTouchEnd(e) {
      if (!e.isTrusted) return;
      isTouched = false;
      if (!isMoved) {
        return;
      }
      popup.emit("local::swipeEnd popupSwipeEnd", popup);
      popup.$el.trigger("popup:swipeend");
      isMoved = false;
      allowSwipeToClose = false;
      $el.transition("");
      if (isPush && pushOffset) {
        $pushEl.transition("").transform("");
      }
      const direction = touchesDiff <= 0 ? "to-bottom" : "to-top";
      if (typeof popup.params.swipeToClose === "string" && direction !== popup.params.swipeToClose) {
        $el.transform("");
        allowSwipeToClose = true;
        return;
      }
      const diff = Math.abs(touchesDiff);
      const timeDiff = (/* @__PURE__ */ new Date()).getTime() - touchStartTime;
      if (timeDiff < 300 && diff > 20 || timeDiff >= 300 && diff > 100) {
        nextTick(() => {
          if (direction === "to-bottom") {
            $el.addClass("swipe-close-to-bottom");
          } else {
            $el.addClass("swipe-close-to-top");
          }
          $el.transform("");
          popup.emit("local::swipeclose popupSwipeClose", popup);
          popup.$el.trigger("popup:swipeclose");
          popup.close();
          allowSwipeToClose = true;
        });
        return;
      }
      allowSwipeToClose = true;
      $el.transform("");
    }
    const passive = support2.passiveListener ? {
      passive: true
    } : false;
    if (popup.params.swipeToClose) {
      $el.on(app.touchEvents.start, handleTouchStart, passive);
      app.on("touchmove", handleTouchMove);
      app.on("touchend:passive", handleTouchEnd);
      popup.once("popupDestroy", () => {
        $el.off(app.touchEvents.start, handleTouchStart, passive);
        app.off("touchmove", handleTouchMove);
        app.off("touchend:passive", handleTouchEnd);
      });
    }
    let hasPreviousPushPopup;
    const updatePushOffset = () => {
      const wasPush = isPush;
      if (popup.push) {
        isPush = popup.push && (app.width < 630 || app.height < 630 || $el.hasClass("popup-tablet-fullscreen"));
      }
      if (isPush && !wasPush) {
        setPushOffset();
      } else if (isPush && wasPush) {
        popup.$htmlEl[0].style.setProperty("--f7-popup-push-scale", pushViewScale(pushOffset));
      } else if (!isPush && wasPush) {
        popup.$htmlEl.removeClass("with-modal-popup-push");
        popup.$htmlEl[0].style.removeProperty("--f7-popup-push-scale");
      }
    };
    const setPushOffset = () => {
      app.off("resize", updatePushOffset);
      if (popup.push) {
        isPush = popup.push && (app.width < 630 || app.height < 630 || $el.hasClass("popup-tablet-fullscreen"));
      }
      if (isPush) {
        pushOffset = parseInt($el.css("--f7-popup-push-offset"), 10);
        if (Number.isNaN(pushOffset)) {
          pushOffset = 0;
        }
        if (!pushOffset) pushOffset = app.theme === "ios" ? 44 : 48;
        popup.$htmlEl[0].style.setProperty("--f7-popup-push-offset", `${pushOffset}px`);
        $el.addClass("popup-push");
        popup.$htmlEl.addClass("with-modal-popup-push");
        popup.$htmlEl[0].style.setProperty("--f7-popup-push-scale", pushViewScale(pushOffset));
      }
      app.on("resize", updatePushOffset);
    };
    popup.on("open", () => {
      hasPreviousPushPopup = false;
      if (popup.params.closeOnEscape) {
        dom7_default(document2).on("keydown", onKeyDown);
      }
      $el.prevAll(".popup.modal-in").addClass("popup-behind");
      setPushOffset();
    });
    popup.on("opened", () => {
      $el.removeClass("swipe-close-to-bottom swipe-close-to-top");
      if (popup.params.closeByBackdropClick) {
        app.on("click", handleClick);
      }
    });
    popup.on("close", () => {
      hasPreviousPushPopup = popup.$el.prevAll(".popup-push.modal-in").length > 0;
      if (popup.params.closeOnEscape) {
        dom7_default(document2).off("keydown", onKeyDown);
      }
      if (popup.params.closeByBackdropClick) {
        app.off("click", handleClick);
      }
      $el.prevAll(".popup.modal-in").eq(0).removeClass("popup-behind");
      if (isPush && pushOffset && !hasPreviousPushPopup) {
        popup.$htmlEl.removeClass("with-modal-popup-push");
        popup.$htmlEl.addClass("with-modal-popup-push-closing");
      }
      app.off("resize", updatePushOffset);
    });
    popup.on("closed", () => {
      $el.removeClass("popup-behind");
      if (isPush && pushOffset && !hasPreviousPushPopup) {
        popup.$htmlEl.removeClass("with-modal-popup-push-closing");
        popup.$htmlEl[0].style.removeProperty("--f7-popup-push-scale");
        popup.$htmlEl[0].style.removeProperty("--f7-popup-push-offset");
      }
    });
    $el[0].f7Modal = popup;
    return popup;
  }
};
var popup_class_default = Popup;

// node_modules/framework7/components/popup/popup.js
var popup_default = {
  name: "popup",
  params: {
    popup: {
      backdrop: true,
      backdropEl: void 0,
      backdropUnique: false,
      closeByBackdropClick: true,
      closeOnEscape: false,
      swipeToClose: false,
      swipeHandler: null,
      push: false,
      containerEl: null
    }
  },
  static: {
    Popup: popup_class_default
  },
  create() {
    const app = this;
    app.popup = ModalMethods({
      app,
      constructor: popup_class_default,
      defaultSelector: ".popup.modal-in",
      parentSelector: ".popup"
    });
  },
  clicks: {
    ".popup-open": function openPopup($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.popup.open(data.popup, data.animate, $clickedEl);
    },
    ".popup-close": function closePopup($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.popup.close(data.popup, data.animate, $clickedEl);
    }
  }
};

// node_modules/framework7/components/login-screen/login-screen-class.js
var LoginScreen = class extends modal_class_default {
  constructor(app, params) {
    const extendedParams = extend({
      on: {}
    }, params);
    super(app, extendedParams);
    const loginScreen = this;
    loginScreen.params = extendedParams;
    let $el;
    if (!loginScreen.params.el) {
      $el = dom7_default(loginScreen.params.content).filter((node) => node.nodeType === 1).eq(0);
    } else {
      $el = dom7_default(loginScreen.params.el).eq(0);
    }
    if ($el && $el.length > 0 && $el[0].f7Modal) {
      return $el[0].f7Modal;
    }
    if ($el.length === 0) {
      return loginScreen.destroy();
    }
    extend(loginScreen, {
      app,
      $el,
      el: $el[0],
      type: "loginScreen"
    });
    $el[0].f7Modal = loginScreen;
    return loginScreen;
  }
};
var login_screen_class_default = LoginScreen;

// node_modules/framework7/components/login-screen/login-screen.js
var login_screen_default = {
  name: "loginScreen",
  static: {
    LoginScreen: login_screen_class_default
  },
  create() {
    const app = this;
    app.loginScreen = ModalMethods({
      app,
      constructor: login_screen_class_default,
      defaultSelector: ".login-screen.modal-in"
    });
  },
  clicks: {
    ".login-screen-open": function openLoginScreen($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.loginScreen.open(data.loginScreen, data.animate, $clickedEl);
    },
    ".login-screen-close": function closeLoginScreen($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.loginScreen.close(data.loginScreen, data.animate, $clickedEl);
    }
  }
};

// node_modules/framework7/components/popover/popover-class.js
var Popover = class extends modal_class_default {
  constructor(app, params) {
    const extendedParams = extend({
      on: {}
    }, app.params.popover, params);
    super(app, extendedParams);
    const popover = this;
    const device = getDevice();
    const window2 = getWindow();
    const document2 = getDocument();
    popover.params = extendedParams;
    let $el;
    if (!popover.params.el) {
      $el = dom7_default(popover.params.content).filter((node) => node.nodeType === 1).eq(0);
    } else {
      $el = dom7_default(popover.params.el).eq(0);
    }
    if ($el && $el.length > 0 && $el[0].f7Modal) {
      return $el[0].f7Modal;
    }
    const $targetEl = dom7_default(popover.params.targetEl).eq(0);
    if ($el.length === 0) {
      return popover.destroy();
    }
    let $backdropEl;
    const forceBackdropUnique = popover.params.backdrop && app.$el.find(".popover.modal-in").filter((anotherPopoverEl) => anotherPopoverEl !== $el[0]).length > 0;
    if (popover.params.backdrop && popover.params.backdropEl) {
      $backdropEl = dom7_default(popover.params.backdropEl);
    } else if (popover.params.backdrop) {
      if (popover.params.backdropUnique || forceBackdropUnique) {
        $backdropEl = dom7_default('<div class="popover-backdrop popover-backdrop-unique"></div>');
        $backdropEl[0].f7PopoverRef = popover;
        popover.$containerEl.append($backdropEl);
      } else {
        $backdropEl = popover.$containerEl.children(".popover-backdrop");
      }
      if ($backdropEl.length === 0) {
        $backdropEl = dom7_default('<div class="popover-backdrop"></div>');
        popover.$containerEl.append($backdropEl);
      }
    }
    let $arrowEl;
    if ($el.find(".popover-arrow").length === 0 && popover.params.arrow) {
      $arrowEl = dom7_default('<div class="popover-arrow"></div>');
      $el.prepend($arrowEl);
    } else {
      $arrowEl = $el.find(".popover-arrow");
    }
    const originalOpen = popover.open;
    extend(popover, {
      app,
      $el,
      el: $el[0],
      $targetEl,
      targetEl: $targetEl[0],
      $arrowEl,
      arrowEl: $arrowEl[0],
      $backdropEl,
      backdropEl: $backdropEl && $backdropEl[0],
      type: "popover",
      forceBackdropUnique,
      open() {
        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
          args[_key] = arguments[_key];
        }
        let [targetEl, animate] = args;
        if (typeof args[0] === "boolean") [animate, targetEl] = args;
        if (targetEl) {
          popover.$targetEl = dom7_default(targetEl);
          popover.targetEl = popover.$targetEl[0];
        }
        return originalOpen.call(popover, animate);
      }
    });
    function handleResize() {
      popover.resize();
    }
    popover.on("popoverOpen", () => {
      popover.resize();
      app.on("resize", handleResize);
      dom7_default(window2).on("keyboardDidShow keyboardDidHide", handleResize);
      popover.on("popoverClose popoverBeforeDestroy", () => {
        app.off("resize", handleResize);
        dom7_default(window2).off("keyboardDidShow keyboardDidHide", handleResize);
      });
    });
    let touchStartTarget = null;
    function handleTouchStart(e) {
      touchStartTarget = e.target;
    }
    function handleClick(e) {
      const target = e.target;
      const $target = dom7_default(target);
      const keyboardOpened = !device.desktop && device.cordova && (window2.Keyboard && window2.Keyboard.isVisible || window2.cordova.plugins && window2.cordova.plugins.Keyboard && window2.cordova.plugins.Keyboard.isVisible);
      if (keyboardOpened) return;
      if ($target.closest(popover.el).length === 0) {
        if (popover.params.closeByBackdropClick && popover.params.backdrop && popover.backdropEl && popover.backdropEl === target && touchStartTarget === target) {
          popover.close();
        } else if (popover.params.closeByOutsideClick && touchStartTarget === target) {
          const isAnotherPopoverBackdrop = $target.hasClass("popover-backdrop-unique") && target.f7PopoverRef !== popover || $target.hasClass("popover-backdrop") && target !== popover.backdropEl;
          const isAnotherPopoverTarget = target.closest(".popover") && target.closest(".popover") !== popover.$el[0];
          if (!isAnotherPopoverBackdrop && !isAnotherPopoverTarget) {
            popover.close();
          }
        }
      }
    }
    function onKeyDown(e) {
      const keyCode = e.keyCode;
      if (keyCode === 27 && popover.params.closeOnEscape) {
        popover.close();
      }
    }
    if (popover.params.closeOnEscape) {
      popover.on("popoverOpen", () => {
        dom7_default(document2).on("keydown", onKeyDown);
      });
      popover.on("popoverClose", () => {
        dom7_default(document2).off("keydown", onKeyDown);
      });
    }
    popover.on("popoverOpened", () => {
      if (popover.params.closeByOutsideClick || popover.params.closeByBackdropClick) {
        app.on("touchstart", handleTouchStart);
        app.on("click", handleClick);
      }
    });
    popover.on("popoverClose", () => {
      if (popover.params.closeByOutsideClick || popover.params.closeByBackdropClick) {
        app.off("touchstart", handleTouchStart);
        app.off("click", handleClick);
      }
    });
    $el[0].f7Modal = popover;
    return popover;
  }
  resize() {
    const popover = this;
    const {
      app,
      $el,
      $targetEl,
      $arrowEl
    } = popover;
    const {
      targetX,
      targetY,
      verticalPosition
    } = popover.params;
    $el.css({
      left: "",
      top: ""
    });
    const [width, height] = [$el.width(), $el.height()];
    let arrowSize = 0;
    let arrowLeft;
    let arrowTop;
    const hasArrow = $arrowEl.length > 0;
    const arrowMin = app.theme === "ios" ? 13 : 24;
    if (hasArrow) {
      $arrowEl.removeClass("on-left on-right on-top on-bottom").css({
        left: "",
        top: ""
      });
      arrowSize = $arrowEl.width() / 2;
    }
    $el.removeClass("popover-on-left popover-on-right popover-on-top popover-on-bottom popover-on-middle").css({
      left: "",
      top: ""
    });
    let targetWidth;
    let targetHeight;
    let targetOffsetLeft;
    let targetOffsetTop;
    let safeAreaTop = parseInt(dom7_default("html").css("--f7-safe-area-top"), 10);
    let safeAreaLeft = parseInt(dom7_default("html").css("--f7-safe-area-left"), 10);
    let safeAreaRight = parseInt(dom7_default("html").css("--f7-safe-area-right"), 10);
    if (Number.isNaN(safeAreaTop)) safeAreaTop = 0;
    if (Number.isNaN(safeAreaLeft)) safeAreaLeft = 0;
    if (Number.isNaN(safeAreaRight)) safeAreaRight = 0;
    if ($targetEl && $targetEl.length > 0) {
      targetWidth = $targetEl.outerWidth();
      targetHeight = $targetEl.outerHeight();
      const targetOffset = $targetEl.offset();
      targetOffsetLeft = targetOffset.left - app.left;
      targetOffsetTop = targetOffset.top - app.top;
      const targetParentPage = $targetEl.parents(".page");
      if (targetParentPage.length > 0) {
        targetOffsetTop -= targetParentPage[0].scrollTop;
      }
    } else if (typeof targetX !== "undefined" && targetY !== "undefined") {
      targetOffsetLeft = targetX;
      targetOffsetTop = targetY;
      targetWidth = popover.params.targetWidth || 0;
      targetHeight = popover.params.targetHeight || 0;
    }
    let [left, top, diff] = [0, 0, 0];
    const forcedPosition = verticalPosition === "auto" ? false : verticalPosition;
    let position = forcedPosition || "top";
    if (forcedPosition === "top" || !forcedPosition && height + arrowSize < targetOffsetTop - safeAreaTop) {
      top = targetOffsetTop - height - arrowSize;
    } else if (forcedPosition === "bottom" || !forcedPosition && height + arrowSize < app.height - targetOffsetTop - targetHeight) {
      position = "bottom";
      top = targetOffsetTop + targetHeight + arrowSize;
    } else {
      position = "middle";
      top = targetHeight / 2 + targetOffsetTop - height / 2;
      diff = top;
      top = Math.max(5, Math.min(top, app.height - height - 5));
      diff -= top;
    }
    if (position === "top" || position === "bottom") {
      left = targetWidth / 2 + targetOffsetLeft - width / 2;
      diff = left;
      left = Math.max(5, Math.min(left, app.width - width - 5));
      if (safeAreaLeft) {
        left = Math.max(left, safeAreaLeft);
      }
      if (safeAreaRight && left + width > app.width - 5 - safeAreaRight) {
        left = app.width - 5 - safeAreaRight - width;
      }
      diff -= left;
      if (hasArrow) {
        if (position === "top") {
          $arrowEl.addClass("on-bottom");
        }
        if (position === "bottom") {
          $arrowEl.addClass("on-top");
        }
        arrowLeft = width / 2 - arrowSize + diff;
        arrowLeft = Math.max(Math.min(arrowLeft, width - arrowSize * 2 - arrowMin), arrowMin);
        $arrowEl.css({
          left: `${arrowLeft}px`
        });
      }
    } else if (position === "middle") {
      left = targetOffsetLeft - width - arrowSize;
      if (hasArrow) $arrowEl.addClass("on-right");
      if (left < 5 || left + width + safeAreaRight > app.width || left < safeAreaLeft) {
        if (left < 5) left = targetOffsetLeft + targetWidth + arrowSize;
        if (left + width + safeAreaRight > app.width) left = app.width - width - 5 - safeAreaRight;
        if (left < safeAreaLeft) left = safeAreaLeft;
        if (hasArrow) $arrowEl.removeClass("on-right").addClass("on-left");
      }
      if (hasArrow) {
        arrowTop = height / 2 - arrowSize + diff;
        arrowTop = Math.max(Math.min(arrowTop, height - arrowSize * 2 - arrowMin), arrowMin);
        $arrowEl.css({
          top: `${arrowTop}px`
        });
      }
    }
    let hPosition;
    if (targetOffsetLeft < app.width / 2) {
      hPosition = "right";
    } else {
      hPosition = "left";
    }
    $el.addClass(`popover-on-${position} popover-on-${hPosition}`);
    $el.css({
      top: `${top}px`,
      left: `${left}px`
    });
  }
};
var popover_class_default = Popover;

// node_modules/framework7/components/popover/popover.js
var popover_default = {
  name: "popover",
  params: {
    popover: {
      verticalPosition: "auto",
      arrow: true,
      backdrop: true,
      backdropEl: void 0,
      backdropUnique: false,
      closeByBackdropClick: true,
      closeByOutsideClick: true,
      closeOnEscape: false,
      containerEl: null
    }
  },
  static: {
    Popover: popover_class_default
  },
  create() {
    const app = this;
    app.popover = extend(ModalMethods({
      app,
      constructor: popover_class_default,
      defaultSelector: ".popover.modal-in"
    }), {
      open(popoverEl, targetEl, animate) {
        let $popoverEl = dom7_default(popoverEl);
        if ($popoverEl.length > 1) {
          const $targetPage = dom7_default(targetEl).parents(".page");
          if ($targetPage.length) {
            $popoverEl.each((el) => {
              const $el = dom7_default(el);
              if ($el.parents($targetPage)[0] === $targetPage[0]) {
                $popoverEl = $el;
              }
            });
          }
        }
        if ($popoverEl.length > 1) {
          $popoverEl = $popoverEl.eq($popoverEl.length - 1);
        }
        let popover = $popoverEl[0].f7Modal;
        const data = $popoverEl.dataset();
        if (!popover) {
          popover = new popover_class_default(app, Object.assign({
            el: $popoverEl,
            targetEl
          }, data));
        }
        return popover.open(targetEl, animate);
      }
    });
  },
  clicks: {
    ".popover-open": function openPopover($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.popover.open(data.popover, $clickedEl, data.animate);
    },
    ".popover-close": function closePopover($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.popover.close(data.popover, data.animate, $clickedEl);
    }
  }
};

// node_modules/framework7/components/actions/actions-class.js
var Actions = class extends modal_class_default {
  constructor(app, params) {
    const extendedParams = extend({
      on: {}
    }, app.params.actions, params);
    super(app, extendedParams);
    const actions = this;
    const device = getDevice();
    const window2 = getWindow();
    const document2 = getDocument();
    actions.params = extendedParams;
    let groups;
    if (actions.params.buttons) {
      groups = actions.params.buttons;
      if (!Array.isArray(groups[0])) groups = [groups];
    }
    actions.groups = groups;
    let $el;
    if (actions.params.el) {
      $el = dom7_default(actions.params.el).eq(0);
    } else if (actions.params.content) {
      $el = dom7_default(actions.params.content).filter((node) => node.nodeType === 1).eq(0);
    } else if (actions.params.buttons) {
      if (actions.params.convertToPopover) {
        actions.popoverHtml = actions.renderPopover();
      }
      actions.actionsHtml = actions.render();
    }
    if ($el && $el.length > 0 && $el[0].f7Modal) {
      return $el[0].f7Modal;
    }
    if ($el && $el.length === 0 && !(actions.actionsHtml || actions.popoverHtml)) {
      return actions.destroy();
    }
    let $backdropEl;
    if (actions.params.backdrop && actions.params.backdropEl) {
      $backdropEl = dom7_default(actions.params.backdropEl);
    } else if (actions.params.backdrop) {
      if (actions.params.backdropUnique) {
        $backdropEl = dom7_default('<div class="popup-backdrop popup-backdrop-unique"></div>');
        actions.$containerEl.append($backdropEl);
      } else {
        $backdropEl = actions.$containerEl.children(".actions-backdrop");
      }
      if ($backdropEl.length === 0) {
        $backdropEl = dom7_default('<div class="actions-backdrop"></div>');
        actions.$containerEl.append($backdropEl);
      }
    }
    const originalOpen = actions.open;
    const originalClose = actions.close;
    let popover;
    function buttonOnClick(e) {
      const $buttonEl = dom7_default(this);
      let buttonIndex;
      let groupIndex;
      if ($buttonEl.hasClass("list-button") || $buttonEl.hasClass("item-link")) {
        buttonIndex = $buttonEl.parents("li").index();
        groupIndex = $buttonEl.parents(".list").index();
      } else {
        buttonIndex = $buttonEl.index();
        groupIndex = $buttonEl.parents(".actions-group").index();
      }
      if (typeof groups !== "undefined") {
        const button = groups[groupIndex][buttonIndex];
        if (button.onClick) button.onClick(actions, e);
        if (actions.params.onClick) actions.params.onClick(actions, e);
        if (button.close !== false) actions.close();
      }
    }
    actions.open = function open6(animate) {
      let convertToPopover = false;
      const {
        targetEl,
        targetX,
        targetY,
        targetWidth,
        targetHeight
      } = actions.params;
      if (actions.params.convertToPopover && (targetEl || targetX !== void 0 && targetY !== void 0)) {
        if (actions.params.forceToPopover || device.ios && device.ipad || app.width >= 768 || device.desktop) {
          convertToPopover = true;
        }
      }
      if (convertToPopover && actions.popoverHtml) {
        popover = app.popover.create({
          containerEl: actions.params.containerEl,
          content: actions.popoverHtml,
          backdrop: actions.params.backdrop,
          targetEl,
          targetX,
          targetY,
          targetWidth,
          targetHeight,
          on: {
            open() {
              if (!actions.$el) {
                actions.$el = popover.$el;
              }
              actions.$el.trigger(`modal:open ${actions.type.toLowerCase()}:open`);
              actions.emit(`local::open modalOpen ${actions.type}Open`, actions);
            },
            opened() {
              if (!actions.$el) {
                actions.$el = popover.$el;
              }
              actions.$el.trigger(`modal:opened ${actions.type.toLowerCase()}:opened`);
              actions.emit(`local::opened modalOpened ${actions.type}Opened`, actions);
            },
            close() {
              if (!actions.$el) {
                actions.$el = popover.$el;
              }
              actions.$el.trigger(`modal:close ${actions.type.toLowerCase()}:close`);
              actions.emit(`local::close modalClose ${actions.type}Close`, actions);
            },
            closed() {
              if (!actions.$el) {
                actions.$el = popover.$el;
              }
              actions.$el.trigger(`modal:closed ${actions.type.toLowerCase()}:closed`);
              actions.emit(`local::closed modalClosed ${actions.type}Closed`, actions);
            }
          }
        });
        popover.open(animate);
        popover.once("popoverOpened", () => {
          popover.$el.find(".list-button, .item-link").each((buttonEl) => {
            dom7_default(buttonEl).on("click", buttonOnClick);
          });
        });
        popover.once("popoverClosed", () => {
          popover.$el.find(".list-button, .item-link").each((buttonEl) => {
            dom7_default(buttonEl).off("click", buttonOnClick);
          });
          nextTick(() => {
            popover.destroy();
            popover = void 0;
          });
        });
      } else {
        actions.$el = actions.actionsHtml ? dom7_default(actions.actionsHtml) : actions.$el;
        actions.$el[0].f7Modal = actions;
        if (actions.groups) {
          actions.$el.find(".actions-button").each((buttonEl) => {
            dom7_default(buttonEl).on("click", buttonOnClick);
          });
          actions.once("actionsClosed", () => {
            actions.$el.find(".actions-button").each((buttonEl) => {
              dom7_default(buttonEl).off("click", buttonOnClick);
            });
          });
        }
        actions.el = actions.$el[0];
        originalOpen.call(actions, animate);
      }
      return actions;
    };
    actions.close = function close6(animate) {
      if (popover) {
        popover.close(animate);
      } else {
        originalClose.call(actions, animate);
      }
      return actions;
    };
    extend(actions, {
      app,
      $el,
      el: $el ? $el[0] : void 0,
      $backdropEl,
      backdropEl: $backdropEl && $backdropEl[0],
      type: "actions"
    });
    function handleClick(e) {
      const target = e.target;
      const $target = dom7_default(target);
      const keyboardOpened = !device.desktop && device.cordova && (window2.Keyboard && window2.Keyboard.isVisible || window2.cordova.plugins && window2.cordova.plugins.Keyboard && window2.cordova.plugins.Keyboard.isVisible);
      if (keyboardOpened) return;
      if ($target.closest(actions.el).length === 0) {
        if (actions.params.closeByBackdropClick && actions.params.backdrop && actions.backdropEl && actions.backdropEl === target) {
          actions.close();
        } else if (actions.params.closeByOutsideClick) {
          actions.close();
        }
      }
    }
    function onKeyDown(e) {
      const keyCode = e.keyCode;
      if (keyCode === 27 && actions.params.closeOnEscape) {
        actions.close();
      }
    }
    if (actions.params.closeOnEscape) {
      actions.on("open", () => {
        dom7_default(document2).on("keydown", onKeyDown);
      });
      actions.on("close", () => {
        dom7_default(document2).off("keydown", onKeyDown);
      });
    }
    actions.on("opened", () => {
      if (actions.params.closeByBackdropClick || actions.params.closeByOutsideClick) {
        app.on("click", handleClick);
      }
    });
    actions.on("close", () => {
      if (actions.params.closeByBackdropClick || actions.params.closeByOutsideClick) {
        app.off("click", handleClick);
      }
    });
    if ($el) {
      $el[0].f7Modal = actions;
    }
    return actions;
  }
  render() {
    const actions = this;
    if (actions.params.render) return actions.params.render.call(actions, actions);
    const {
      groups
    } = actions;
    const cssClass = actions.params.cssClass;
    return jsx_default("div", {
      class: `actions-modal${actions.params.grid ? " actions-grid" : ""} ${cssClass || ""}`
    }, groups.map((group) => jsx_default("div", {
      class: "actions-group"
    }, group.map((button) => {
      const buttonClasses = [`actions-${button.label ? "label" : "button"}`];
      const {
        color,
        bg,
        strong,
        disabled,
        label,
        text,
        icon
      } = button;
      if (color) buttonClasses.push(`color-${color}`);
      if (bg) buttonClasses.push(`bg-color-${bg}`);
      if (strong) buttonClasses.push("actions-button-strong");
      if (disabled) buttonClasses.push("disabled");
      if (label) {
        return jsx_default("div", {
          class: buttonClasses.join(" ")
        }, text);
      }
      return jsx_default("div", {
        class: buttonClasses.join(" ")
      }, icon && jsx_default("div", {
        class: "actions-button-media"
      }, icon), jsx_default("div", {
        class: "actions-button-text"
      }, text));
    }))));
  }
  renderPopover() {
    const actions = this;
    if (actions.params.renderPopover) return actions.params.renderPopover.call(actions, actions);
    const {
      groups
    } = actions;
    const cssClass = actions.params.cssClass;
    return jsx_default("div", {
      class: `popover popover-from-actions ${cssClass || ""}`
    }, jsx_default("div", {
      class: "popover-inner"
    }, groups.map((group) => jsx_default("div", {
      class: "list"
    }, jsx_default("ul", null, group.map((button) => {
      const itemClasses = [];
      const {
        color,
        bg,
        strong,
        disabled,
        label,
        text,
        icon
      } = button;
      if (color) itemClasses.push(`color-${color}`);
      if (bg) itemClasses.push(`bg-color-${bg}`);
      if (strong) itemClasses.push("popover-from-actions-strong");
      if (disabled) itemClasses.push("disabled");
      if (label) {
        itemClasses.push("popover-from-actions-label");
        return `<li class="${itemClasses.join(" ")}">${text}</li>`;
      }
      if (icon) {
        itemClasses.push("item-link item-content");
        return jsx_default("li", null, jsx_default("a", {
          class: itemClasses.join(" ")
        }, jsx_default("div", {
          class: "item-media"
        }, icon), jsx_default("div", {
          class: "item-inner"
        }, jsx_default("div", {
          class: "item-title"
        }, text))));
      }
      itemClasses.push("list-button");
      return jsx_default("li", null, jsx_default("a", {
        class: itemClasses.join(" ")
      }, text));
    }))))));
  }
};
var actions_class_default = Actions;

// node_modules/framework7/components/actions/actions.js
var actions_default = {
  name: "actions",
  params: {
    actions: {
      convertToPopover: true,
      forceToPopover: false,
      backdrop: true,
      backdropEl: void 0,
      backdropUnique: false,
      cssClass: null,
      closeByBackdropClick: true,
      closeOnEscape: false,
      render: null,
      renderPopover: null,
      containerEl: null
    }
  },
  static: {
    Actions: actions_class_default
  },
  create() {
    const app = this;
    app.actions = ModalMethods({
      app,
      constructor: actions_class_default,
      defaultSelector: ".actions-modal.modal-in"
    });
  },
  clicks: {
    ".actions-open": function openActions($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.actions.open(data.actions, data.animate, $clickedEl);
    },
    ".actions-close": function closeActions($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.actions.close(data.actions, data.animate, $clickedEl);
    }
  }
};

// node_modules/framework7/components/sheet/sheet-class.js
var Sheet = class extends modal_class_default {
  constructor(app, params) {
    const extendedParams = extend({
      on: {}
    }, app.params.sheet, params);
    super(app, extendedParams);
    const sheet = this;
    const window2 = getWindow();
    const document2 = getDocument();
    const support2 = getSupport();
    const device = getDevice();
    sheet.params = extendedParams;
    if (typeof sheet.params.backdrop === "undefined") {
      sheet.params.backdrop = app.theme !== "ios";
    }
    let $el;
    if (!sheet.params.el) {
      $el = dom7_default(sheet.params.content).filter((node) => node.nodeType === 1).eq(0);
    } else {
      $el = dom7_default(sheet.params.el).eq(0);
    }
    if ($el && $el.length > 0 && $el[0].f7Modal) {
      return $el[0].f7Modal;
    }
    if ($el.length === 0) {
      return sheet.destroy();
    }
    let $backdropEl;
    if (sheet.params.backdrop && sheet.params.backdropEl) {
      $backdropEl = dom7_default(sheet.params.backdropEl);
    } else if (sheet.params.backdrop) {
      if (sheet.params.backdropUnique) {
        $backdropEl = dom7_default('<div class="sheet-backdrop sheet-backdrop-unique"></div>');
        sheet.$containerEl.append($backdropEl);
      } else {
        $backdropEl = sheet.$containerEl.children(".sheet-backdrop");
      }
      if ($backdropEl.length === 0) {
        $backdropEl = dom7_default('<div class="sheet-backdrop"></div>');
        sheet.$containerEl.append($backdropEl);
      }
    }
    extend(sheet, {
      app,
      push: $el.hasClass("sheet-modal-push") || sheet.params.push,
      $el,
      el: $el[0],
      $backdropEl,
      backdropEl: $backdropEl && $backdropEl[0],
      type: "sheet",
      $htmlEl: dom7_default("html")
    });
    if (sheet.params.push) {
      $el.addClass("sheet-modal-push");
    }
    let $pageContentEl;
    function scrollToElementOnOpen() {
      const $scrollEl = dom7_default(sheet.params.scrollToEl).eq(0);
      if ($scrollEl.length === 0) return;
      $pageContentEl = $scrollEl.parents(".page-content");
      if ($pageContentEl.length === 0) return;
      const paddingTop = parseInt($pageContentEl.css("padding-top"), 10);
      const paddingBottom = parseInt($pageContentEl.css("padding-bottom"), 10);
      const pageHeight = $pageContentEl[0].offsetHeight - paddingTop - $el.height();
      const pageScrollHeight = $pageContentEl[0].scrollHeight - paddingTop - $el.height();
      const pageScroll = $pageContentEl.scrollTop();
      let newPaddingBottom;
      const scrollElTop = $scrollEl.offset().top - paddingTop + $scrollEl[0].offsetHeight;
      if (scrollElTop > pageHeight) {
        const scrollTop = pageScroll + scrollElTop - pageHeight;
        if (scrollTop + pageHeight > pageScrollHeight) {
          newPaddingBottom = scrollTop + pageHeight - pageScrollHeight + paddingBottom;
          if (pageHeight === pageScrollHeight) {
            newPaddingBottom = $el.height();
          }
          $pageContentEl.css({
            "padding-bottom": `${newPaddingBottom}px`
          });
        }
        $pageContentEl.scrollTop(scrollTop, 300);
      }
    }
    function scrollToElementOnClose() {
      if ($pageContentEl && $pageContentEl.length > 0) {
        $pageContentEl.css({
          "padding-bottom": ""
        });
      }
    }
    function handleClick(e) {
      const target = e.target;
      const $target = dom7_default(target);
      const keyboardOpened = !device.desktop && device.cordova && (window2.Keyboard && window2.Keyboard.isVisible || window2.cordova.plugins && window2.cordova.plugins.Keyboard && window2.cordova.plugins.Keyboard.isVisible);
      if (keyboardOpened) return;
      if ($target.closest(sheet.el).length === 0) {
        if (sheet.params.closeByBackdropClick && sheet.params.backdrop && sheet.backdropEl && sheet.backdropEl === target) {
          sheet.close();
        } else if (sheet.params.closeByOutsideClick) {
          sheet.close();
        }
      }
    }
    function onKeyDown(e) {
      const keyCode = e.keyCode;
      if (keyCode === 27 && sheet.params.closeOnEscape) {
        sheet.close();
      }
    }
    let pushOffset;
    function pushViewScale(offset) {
      return (app.height - offset * 2) / app.height;
    }
    const useBreakpoints = sheet.params.breakpoints && sheet.params.breakpoints.length > 0;
    let isTouched = false;
    let startTouch;
    let currentTouch;
    let isScrolling;
    let touchStartTime;
    let touchesDiff;
    let isMoved = false;
    let isTopSheetModal;
    let swipeStepTranslate;
    let startTranslate;
    let currentTranslate;
    let sheetElOffsetHeight;
    let minTranslate2;
    let maxTranslate2;
    let $pushViewEl;
    let pushBorderRadius;
    let sheetPageContentEl;
    let sheetPageContentScrollTop;
    let sheetPageContentScrollHeight;
    let sheetPageContentOffsetHeight;
    let breakpointsTranslate = [];
    let currentBreakpointIndex;
    let backdropBreakpointSet = true;
    function handleTouchStart(e) {
      if (isTouched || !(sheet.params.swipeToClose || sheet.params.swipeToStep) || !e.isTrusted) return;
      if (sheet.params.swipeHandler && dom7_default(e.target).closest(sheet.params.swipeHandler).length === 0) {
        return;
      }
      if (dom7_default(e.target).closest(".sortable-handler").length > 0) return;
      isTouched = true;
      isMoved = false;
      startTouch = {
        x: e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX,
        y: e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY
      };
      touchStartTime = now();
      isScrolling = void 0;
      isTopSheetModal = $el.hasClass("sheet-modal-top");
      if (!sheet.params.swipeHandler && e.type === "touchstart") {
        sheetPageContentEl = dom7_default(e.target).closest(".page-content")[0];
      }
    }
    function handleTouchMove(e) {
      if (!isTouched || !e.isTrusted) return;
      currentTouch = {
        x: e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX,
        y: e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY
      };
      if (typeof isScrolling === "undefined") {
        isScrolling = !!(isScrolling || Math.abs(currentTouch.x - startTouch.x) > Math.abs(currentTouch.y - startTouch.y));
      }
      if (isScrolling) {
        isTouched = false;
        isMoved = false;
        return;
      }
      touchesDiff = startTouch.y - currentTouch.y;
      const direction = touchesDiff < 0 ? "to-bottom" : "to-top";
      if (!isMoved) {
        if (sheetPageContentEl && !$el.hasClass("modal-in-swipe-step")) {
          sheetPageContentScrollTop = sheetPageContentEl.scrollTop;
          sheetPageContentScrollHeight = sheetPageContentEl.scrollHeight;
          sheetPageContentOffsetHeight = sheetPageContentEl.offsetHeight;
          if (!(sheetPageContentScrollHeight === sheetPageContentOffsetHeight) && !(direction === "to-bottom" && sheetPageContentScrollTop === 0) && !(direction === "to-top" && sheetPageContentScrollTop === sheetPageContentScrollHeight - sheetPageContentOffsetHeight)) {
            $el.transform("");
            isTouched = false;
            isMoved = false;
            return;
          }
        }
        if (sheet.push && pushOffset) {
          $pushViewEl = app.$el.children(".view, .views");
        }
        sheetElOffsetHeight = $el[0].offsetHeight;
        startTranslate = getTranslate($el[0], "y");
        if (isTopSheetModal) {
          minTranslate2 = sheet.params.swipeToClose ? -sheetElOffsetHeight : -swipeStepTranslate;
          maxTranslate2 = 0;
        } else {
          minTranslate2 = 0;
          maxTranslate2 = sheet.params.swipeToClose ? sheetElOffsetHeight : useBreakpoints ? breakpointsTranslate[0] : swipeStepTranslate;
        }
        isMoved = true;
      }
      currentTranslate = startTranslate - touchesDiff;
      currentTranslate = Math.min(Math.max(currentTranslate, minTranslate2), maxTranslate2);
      e.preventDefault();
      if (useBreakpoints) {
        let progress = isTopSheetModal ? 1 + currentTranslate / sheetElOffsetHeight : 1 - currentTranslate / sheetElOffsetHeight;
        progress = Math.abs(progress);
        progress = Math.min(Math.max(progress, 0), 1);
        setBackdropBreakpoint(progress);
        setPushBreakpoint(progress);
      }
      if (sheet.push && pushOffset && !useBreakpoints) {
        let progress = (currentTranslate - startTranslate) / sheetElOffsetHeight;
        if (sheet.params.swipeToStep) {
          if (isTopSheetModal) {
            progress = currentTranslate / swipeStepTranslate;
          } else {
            progress = 1 - (swipeStepTranslate - currentTranslate) / swipeStepTranslate;
          }
        }
        progress = Math.abs(progress);
        progress = Math.min(Math.max(progress, 0), 1);
        const pushProgress = 1 - progress;
        const scale = 1 - (1 - pushViewScale(pushOffset)) * pushProgress;
        $pushViewEl.transition(0).forEach((el) => {
          el.style.setProperty("transform", `translate3d(0,0,0) scale(${scale})`, "important");
        });
        if (sheet.params.swipeToStep) {
          $pushViewEl.css("border-radius", `${pushBorderRadius * pushProgress}px`);
        }
      }
      $el.transition(0).transform(`translate3d(0,${currentTranslate}px,0)`);
      if (sheet.params.swipeToStep) {
        let progress;
        if (isTopSheetModal) {
          progress = 1 - currentTranslate / swipeStepTranslate;
        } else {
          progress = (swipeStepTranslate - currentTranslate) / swipeStepTranslate;
        }
        progress = Math.min(Math.max(progress, 0), 1);
        $el.trigger("sheet:stepprogress", progress);
        sheet.emit("local::stepProgress sheetStepProgress", sheet, progress);
      }
    }
    function handleTouchEnd() {
      isTouched = false;
      if (!isMoved) {
        return;
      }
      isMoved = false;
      $el.transform("").transition("");
      if (sheet.push && pushOffset) {
        $pushViewEl.transition("");
        if (!useBreakpoints) {
          $pushViewEl.transform("");
          $pushViewEl.css("border-radius", "");
        }
      }
      const direction = touchesDiff < 0 ? "to-bottom" : "to-top";
      const diff = Math.abs(touchesDiff);
      if (diff === 0 || currentTranslate === startTranslate) return;
      const timeDiff = (/* @__PURE__ */ new Date()).getTime() - touchStartTime;
      if (!sheet.params.swipeToStep && !useBreakpoints) {
        if (direction !== (isTopSheetModal ? "to-top" : "to-bottom")) {
          return;
        }
        if (timeDiff < 300 && diff > 20 || timeDiff >= 300 && diff > sheetElOffsetHeight / 2) {
          sheet.close();
        }
        return;
      }
      const openDirection = isTopSheetModal ? "to-bottom" : "to-top";
      const closeDirection = isTopSheetModal ? "to-top" : "to-bottom";
      const absCurrentTranslate = Math.abs(currentTranslate);
      const absSwipeStepTranslate = Math.abs(swipeStepTranslate);
      if (timeDiff < 300 && diff > 10 && useBreakpoints) {
        if (direction === openDirection && typeof currentBreakpointIndex !== "undefined") {
          if (currentBreakpointIndex === params.breakpoints.length - 1) {
            sheet.setBreakpoint(1);
          } else {
            currentBreakpointIndex = Math.min(breakpointsTranslate.length - 1, currentBreakpointIndex + 1);
            sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);
          }
        }
        if (direction === closeDirection) {
          if (currentBreakpointIndex === 0) {
            sheet.close();
          } else {
            if (typeof currentBreakpointIndex === "undefined") {
              currentBreakpointIndex = params.breakpoints.length - 1;
            } else {
              currentBreakpointIndex = Math.max(0, currentBreakpointIndex - 1);
            }
            sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);
          }
        }
      } else if (timeDiff < 300 && diff > 10) {
        if (direction === openDirection && absCurrentTranslate < absSwipeStepTranslate) {
          $el.removeClass("modal-in-swipe-step");
          $el.trigger("sheet:stepprogress", 1);
          sheet.emit("local::stepProgress sheetStepProgress", sheet, 1);
          sheet.emit("local::_swipeStep", false);
          $el.trigger("sheet:stepopen");
          sheet.emit("local::stepOpen sheetStepOpen", sheet);
          if (sheet.push && pushOffset) {
            sheet.$htmlEl[0].style.setProperty("--f7-sheet-push-scale", pushViewScale(pushOffset));
            $pushViewEl.css("border-radius", "");
          }
        }
        if (direction === closeDirection && absCurrentTranslate > absSwipeStepTranslate) {
          if (sheet.params.swipeToClose) {
            sheet.close();
          } else {
            $el.addClass("modal-in-swipe-step");
            $el.trigger("sheet:stepprogress", 0);
            sheet.emit("local::stepProgress sheetStepProgress", sheet, 0);
            sheet.emit("local::_swipeStep", true);
            $el.trigger("sheet:stepclose");
            sheet.emit("local::stepClose sheetStepClose", sheet);
            if (sheet.push && pushOffset) {
              sheet.$htmlEl[0].style.removeProperty("--f7-sheet-push-scale");
              $pushViewEl.css("border-radius", "0px");
            }
          }
        }
        if (direction === closeDirection && absCurrentTranslate <= absSwipeStepTranslate) {
          $el.addClass("modal-in-swipe-step");
          $el.trigger("sheet:stepprogress", 0);
          sheet.emit("local::stepProgress sheetStepProgress", sheet, 0);
          sheet.emit("local::_swipeStep", true);
          $el.trigger("sheet:stepclose");
          sheet.emit("local::stepClose sheetStepClose", sheet);
          if (sheet.push && pushOffset) {
            sheet.$htmlEl[0].style.removeProperty("--f7-sheet-push-scale");
            $pushViewEl.css("border-radius", "0px");
          }
        }
        return;
      }
      if (timeDiff >= 300 && useBreakpoints) {
        const allBreakpoints = [sheetElOffsetHeight, ...breakpointsTranslate, 0];
        const closestTranslate = allBreakpoints.reduce((prev, curr) => {
          return Math.abs(curr - currentTranslate) < Math.abs(prev - currentTranslate) ? curr : prev;
        });
        const closestIndex = allBreakpoints.indexOf(closestTranslate);
        if (closestTranslate === 0) {
          sheet.setBreakpoint(1);
        } else if (closestIndex === 0) {
          sheet.close();
        } else {
          currentBreakpointIndex = closestIndex - 1;
          sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);
        }
      } else if (timeDiff >= 300) {
        const stepOpened = !$el.hasClass("modal-in-swipe-step");
        if (!stepOpened) {
          if (absCurrentTranslate < absSwipeStepTranslate / 2) {
            $el.removeClass("modal-in-swipe-step");
            $el.trigger("sheet:stepprogress", 1);
            sheet.emit("local::stepProgress sheetStepProgress", sheet, 1);
            sheet.emit("local::_swipeStep", false);
            $el.trigger("sheet:stepopen");
            sheet.emit("local::stepOpen sheetStepOpen", sheet);
            if (sheet.push && pushOffset) {
              sheet.$htmlEl[0].style.setProperty("--f7-sheet-push-scale", pushViewScale(pushOffset));
              $pushViewEl.css("border-radius", "");
            }
          } else if (absCurrentTranslate - absSwipeStepTranslate > (sheetElOffsetHeight - absSwipeStepTranslate) / 2) {
            if (sheet.params.swipeToClose) sheet.close();
          }
        } else if (stepOpened) {
          if (absCurrentTranslate > absSwipeStepTranslate + (sheetElOffsetHeight - absSwipeStepTranslate) / 2) {
            if (sheet.params.swipeToClose) sheet.close();
          } else if (absCurrentTranslate > absSwipeStepTranslate / 2) {
            $el.addClass("modal-in-swipe-step");
            $el.trigger("sheet:stepprogress", 0);
            sheet.emit("local::stepProgress sheetStepProgress", sheet, 0);
            sheet.emit("local::_swipeStep", true);
            $el.trigger("sheet:stepclose");
            sheet.emit("local::stepClose sheetStepClose", sheet);
            if (sheet.push && pushOffset) {
              sheet.$htmlEl[0].style.removeProperty("--f7-sheet-push-scale");
              $pushViewEl.css("border-radius", "0px");
            }
          }
        }
      }
    }
    const setPushBreakpoint = (breakpoint) => {
      const {
        pushBreakpoint
      } = params;
      if (pushBreakpoint === null || typeof pushBreakpoint === "undefined" || !sheet.push || !pushOffset) return;
      if (breakpoint >= pushBreakpoint) {
        sheet.$htmlEl.addClass("with-modal-sheet-push").removeClass("with-modal-sheet-push-closing");
        $pushViewEl.transition("").forEach((el) => {
          el.style.setProperty("transform", `translate3d(0,0,0) scale(${pushViewScale(pushOffset)})`, "important");
        });
        $pushViewEl.css("border-radius", `${pushBorderRadius * 1}px`);
      } else {
        const pushBreakpoints = [0, ...params.breakpoints, 1];
        const pushTransparentBreakpoint = pushBreakpoints[pushBreakpoints.indexOf(pushBreakpoint) - 1];
        if (breakpoint <= pushTransparentBreakpoint) {
          $pushViewEl.transition("").css("transform", "");
          $pushViewEl.css("border-radius", "");
          sheet.$htmlEl.removeClass("with-modal-sheet-push");
          if (breakpoint === pushTransparentBreakpoint) {
            sheet.$htmlEl.addClass("with-modal-sheet-push-closing");
          }
        } else {
          const progress = (breakpoint - pushTransparentBreakpoint) / (pushBreakpoint - pushTransparentBreakpoint);
          sheet.$htmlEl.addClass("with-modal-sheet-push").removeClass("with-modal-sheet-push-closing");
          $pushViewEl.transition(0).forEach((el) => {
            el.style.setProperty("transform", `translate3d(0,0,0) scale(${1 - (1 - pushViewScale(pushOffset)) * progress})`, "important");
          });
          $pushViewEl.css("border-radius", `${pushBorderRadius * progress}px`);
        }
      }
    };
    const setBackdropBreakpoint = (breakpoint) => {
      const {
        backdrop,
        backdropBreakpoint
      } = params;
      if (!backdropBreakpoint || !backdrop || !$backdropEl.length) return;
      if (breakpoint >= backdropBreakpoint) {
        if (!backdropBreakpointSet) {
          $backdropEl.transition("").css({
            opacity: "",
            pointerEvents: ""
          });
        }
        backdropBreakpointSet = true;
      } else {
        const backdropBreakpoints = [0, ...params.breakpoints, 1];
        const backdropTransparentBreakpoint = backdropBreakpoints[backdropBreakpoints.indexOf(backdropBreakpoint) - 1];
        if (breakpoint <= backdropTransparentBreakpoint) {
          if (backdropBreakpointSet) {
            $backdropEl.transition("").css({
              opacity: 0,
              pointerEvents: "none"
            });
          }
          backdropBreakpointSet = false;
        } else {
          const progress = (breakpoint - backdropTransparentBreakpoint) / (backdropBreakpoint - backdropTransparentBreakpoint);
          $backdropEl.transition(0).css({
            opacity: progress,
            pointerEvents: "auto"
          });
        }
      }
    };
    sheet.calcBreakpoints = () => {
      if (!useBreakpoints) {
        return;
      }
      const fullSize = $el[0].offsetHeight;
      const isTopSheetModal2 = $el.hasClass("sheet-modal-top");
      breakpointsTranslate = [];
      sheet.params.breakpoints.forEach((ratio) => {
        breakpointsTranslate.push((fullSize - fullSize * ratio) * (isTopSheetModal2 ? -1 : 1));
      });
    };
    sheet.setBreakpoint = (value) => {
      if (!useBreakpoints) {
        return sheet;
      }
      if (value === 1) {
        if (!sheet.opened) {
          sheet.open();
        }
        $el.removeClass("modal-in-breakpoint");
        currentBreakpointIndex = void 0;
        setBackdropBreakpoint(value);
        setPushBreakpoint(value);
        $el.trigger("sheet:breakpoint", value);
        sheet.emit("local::breakpoint sheetBreakpoint", sheet, value);
      } else if (value === 0) {
        $el.trigger("sheet:breakpoint", value);
        sheet.emit("local::breakpoint sheetBreakpoint", sheet, value);
        sheet.close();
      } else {
        const index = params.breakpoints.indexOf(value);
        if (index < 0) return sheet;
        if (!sheet.opened) {
          sheet.open();
        }
        setBackdropBreakpoint(value);
        setPushBreakpoint(value);
        $el.trigger("sheet:breakpoint", value);
        sheet.emit("local::breakpoint sheetBreakpoint", sheet, value);
        currentBreakpointIndex = index;
        $el[0].style.setProperty("--f7-sheet-breakpoint", `${breakpointsTranslate[index]}px`);
        $el.addClass("modal-in-breakpoint");
      }
      return sheet;
    };
    const setBreakpointsOnResize = () => {
      sheet.calcBreakpoints();
      if (typeof currentBreakpointIndex !== "undefined") {
        sheet.setBreakpoint(params.breakpoints[currentBreakpointIndex]);
      }
    };
    sheet.setSwipeStep = function setSwipeStep(byResize) {
      if (byResize === void 0) {
        byResize = true;
      }
      const $swipeStepEl = $el.find(".sheet-modal-swipe-step").eq(0);
      if (!$swipeStepEl.length) return;
      if ($el.hasClass("sheet-modal-top")) {
        swipeStepTranslate = -($swipeStepEl.offset().top - $el.offset().top + $swipeStepEl[0].offsetHeight);
      } else {
        swipeStepTranslate = $el[0].offsetHeight - ($swipeStepEl.offset().top - $el.offset().top + $swipeStepEl[0].offsetHeight);
      }
      $el[0].style.setProperty("--f7-sheet-swipe-step", `${swipeStepTranslate}px`);
      if (!byResize) {
        $el.addClass("modal-in-swipe-step");
        sheet.emit("local::_swipeStep", true);
      }
    };
    function onResize2() {
      if (useBreakpoints) {
        setBreakpointsOnResize();
      } else {
        sheet.setSwipeStep(true);
      }
    }
    const passive = support2.passiveListener ? {
      passive: true
    } : false;
    if (sheet.params.swipeToClose || sheet.params.swipeToStep || useBreakpoints) {
      $el.on(app.touchEvents.start, handleTouchStart, passive);
      app.on("touchmove", handleTouchMove);
      app.on("touchend:passive", handleTouchEnd);
      sheet.once("sheetDestroy", () => {
        $el.off(app.touchEvents.start, handleTouchStart, passive);
        app.off("touchmove", handleTouchMove);
        app.off("touchend:passive", handleTouchEnd);
      });
    }
    sheet.on("open", () => {
      if (sheet.params.closeOnEscape) {
        dom7_default(document2).on("keydown", onKeyDown);
      }
      $el.prevAll(".popup.modal-in").addClass("popup-behind");
      app.on("resize", onResize2);
      if (sheet.params.scrollToEl) {
        scrollToElementOnOpen();
      }
      if (sheet.push) {
        pushOffset = parseInt($el.css("--f7-sheet-push-offset"), 10);
        if (Number.isNaN(pushOffset)) pushOffset = 0;
        if (!pushOffset) pushOffset = app.theme === "ios" ? 44 : 48;
        sheet.$htmlEl[0].style.setProperty("--f7-sheet-push-offset", `${pushOffset}px`);
        $el.addClass("sheet-modal-push");
        if (!useBreakpoints) {
          sheet.$htmlEl.addClass("with-modal-sheet-push");
        }
        if (!sheet.params.swipeToStep && !useBreakpoints) {
          sheet.$htmlEl[0].style.setProperty("--f7-sheet-push-scale", pushViewScale(pushOffset));
        } else {
          $pushViewEl = app.$el.children(".view, .views");
          pushBorderRadius = app.theme === "ios" ? 10 : 16;
          $pushViewEl.css("border-radius", "0px");
        }
      }
      if (useBreakpoints) {
        sheet.calcBreakpoints();
        sheet.setBreakpoint(params.breakpoints[0]);
      } else if (sheet.params.swipeToStep) {
        sheet.setSwipeStep(false);
      }
    });
    sheet.on("opened", () => {
      if (sheet.params.closeByOutsideClick || sheet.params.closeByBackdropClick) {
        app.on("click", handleClick);
      }
    });
    sheet.on("close", () => {
      currentBreakpointIndex = void 0;
      if (sheet.params.swipeToStep || useBreakpoints) {
        $el.removeClass("modal-in-swipe-step modal-in-breakpoint");
        sheet.emit("local::_swipeStep", false);
      }
      app.off("resize", onResize2);
      if (sheet.params.closeOnEscape) {
        dom7_default(document2).off("keydown", onKeyDown);
      }
      if (sheet.params.scrollToEl) {
        scrollToElementOnClose();
      }
      if (sheet.params.closeByOutsideClick || sheet.params.closeByBackdropClick) {
        app.off("click", handleClick);
      }
      $el.prevAll(".popup.modal-in").eq(0).removeClass("popup-behind");
      if (sheet.push && pushOffset) {
        sheet.$htmlEl.removeClass("with-modal-sheet-push");
        sheet.$htmlEl.addClass("with-modal-sheet-push-closing");
        if ($pushViewEl) {
          $pushViewEl.transform("");
          $pushViewEl.css("border-radius", "");
        }
      }
    });
    sheet.on("closed", () => {
      if (sheet.push && pushOffset) {
        sheet.$htmlEl.removeClass("with-modal-sheet-push-closing");
        sheet.$htmlEl[0].style.removeProperty("--f7-sheet-push-scale");
        sheet.$htmlEl[0].style.removeProperty("--f7-sheet-push-offset");
      }
    });
    sheet.stepOpen = function stepOpen() {
      $el.removeClass("modal-in-swipe-step");
      sheet.emit("local::_swipeStep", false);
      if (sheet.push) {
        if (!pushOffset) {
          pushOffset = parseInt($el.css("--f7-sheet-push-offset"), 10);
          if (Number.isNaN(pushOffset)) pushOffset = 0;
        }
        if (pushOffset) {
          sheet.$htmlEl[0].style.setProperty("--f7-sheet-push-scale", pushViewScale(pushOffset));
        }
      }
    };
    sheet.stepClose = function stepClose() {
      $el.addClass("modal-in-swipe-step");
      sheet.emit("local::_swipeStep", true);
      if (sheet.push) {
        sheet.$htmlEl[0].style.removeProperty("--f7-sheet-push-scale");
      }
    };
    sheet.stepToggle = function stepToggle() {
      $el.toggleClass("modal-in-swipe-step");
      sheet.emit("local::_swipeStep", $el.hasClass("modal-in-swipe-step"));
    };
    $el[0].f7Modal = sheet;
    return sheet;
  }
};
var sheet_class_default = Sheet;

// node_modules/framework7/components/sheet/sheet.js
var sheet_default = {
  name: "sheet",
  params: {
    sheet: {
      push: false,
      backdrop: void 0,
      backdropEl: void 0,
      backdropUnique: false,
      closeByBackdropClick: true,
      closeByOutsideClick: false,
      closeOnEscape: false,
      swipeToClose: false,
      swipeToStep: false,
      breakpoints: [],
      backdropBreakpoint: 0,
      pushBreakpoint: 0,
      swipeHandler: null,
      containerEl: null
    }
  },
  static: {
    Sheet: sheet_class_default
  },
  create() {
    const app = this;
    app.sheet = extend({}, ModalMethods({
      app,
      constructor: sheet_class_default,
      defaultSelector: ".sheet-modal.modal-in"
    }), {
      stepOpen(sheet) {
        const sheetInstance = app.sheet.get(sheet);
        if (sheetInstance && sheetInstance.stepOpen) return sheetInstance.stepOpen();
        return void 0;
      },
      stepClose(sheet) {
        const sheetInstance = app.sheet.get(sheet);
        if (sheetInstance && sheetInstance.stepClose) return sheetInstance.stepClose();
        return void 0;
      },
      stepToggle(sheet) {
        const sheetInstance = app.sheet.get(sheet);
        if (sheetInstance && sheetInstance.stepToggle) return sheetInstance.stepToggle();
        return void 0;
      },
      setBreakpoint(sheet, breakpoint) {
        const sheetInstance = app.sheet.get(sheet);
        if (sheetInstance && sheetInstance.setBreakpoint) return sheetInstance.setBreakpoint(breakpoint);
        return void 0;
      }
    });
  },
  clicks: {
    ".sheet-open": function openSheet($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      if (dom7_default(".sheet-modal.modal-in").length > 0 && data.sheet && dom7_default(data.sheet)[0] !== dom7_default(".sheet-modal.modal-in")[0]) {
        app.sheet.close(".sheet-modal.modal-in");
      }
      app.sheet.open(data.sheet, data.animate, $clickedEl);
    },
    ".sheet-close": function closeSheet($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.sheet.close(data.sheet, data.animate, $clickedEl);
    }
  }
};

// node_modules/framework7/components/toast/toast-class.js
var Toast = class extends modal_class_default {
  constructor(app, params) {
    const extendedParams = extend({
      on: {}
    }, app.params.toast, params);
    super(app, extendedParams);
    const toast = this;
    const window2 = getWindow();
    toast.app = app;
    toast.params = extendedParams;
    const {
      closeButton,
      closeTimeout
    } = toast.params;
    let $el;
    if (!toast.params.el) {
      const toastHtml = toast.render();
      $el = dom7_default(toastHtml);
    } else {
      $el = dom7_default(toast.params.el);
    }
    if ($el && $el.length > 0 && $el[0].f7Modal) {
      return $el[0].f7Modal;
    }
    if ($el.length === 0) {
      return toast.destroy();
    }
    extend(toast, {
      $el,
      el: $el[0],
      type: "toast"
    });
    $el[0].f7Modal = toast;
    if (closeButton) {
      $el.find(".toast-button").on("click", () => {
        toast.emit("local::closeButtonClick toastCloseButtonClick", toast);
        toast.close();
      });
      toast.on("beforeDestroy", () => {
        $el.find(".toast-button").off("click");
      });
    }
    let timeoutId;
    toast.on("open", () => {
      dom7_default(".toast.modal-in").each((openedEl) => {
        const toastInstance = app.toast.get(openedEl);
        if (openedEl !== toast.el && toastInstance) {
          toastInstance.close();
        }
      });
      if (closeTimeout) {
        timeoutId = nextTick(() => {
          toast.close();
        }, closeTimeout);
      }
    });
    toast.on("close", () => {
      window2.clearTimeout(timeoutId);
    });
    if (toast.params.destroyOnClose) {
      toast.once("closed", () => {
        setTimeout(() => {
          toast.destroy();
        }, 0);
      });
    }
    return toast;
  }
  render() {
    const toast = this;
    if (toast.params.render) return toast.params.render.call(toast, toast);
    const {
      position,
      horizontalPosition,
      cssClass,
      icon,
      text,
      closeButton,
      closeButtonColor,
      closeButtonText
    } = toast.params;
    const horizontalClass = position === "top" || position === "bottom" ? `toast-horizontal-${horizontalPosition}` : "";
    return jsx_default("div", {
      class: `toast toast-${position} ${horizontalClass} ${cssClass || ""} ${icon ? "toast-with-icon" : ""}`
    }, jsx_default("div", {
      class: "toast-content"
    }, icon && jsx_default("div", {
      class: "toast-icon"
    }, icon), jsx_default("div", {
      class: "toast-text"
    }, text), closeButton && !icon && jsx_default("a", {
      class: `toast-button button ${closeButtonColor ? `color-${closeButtonColor}` : ""}`
    }, closeButtonText)));
  }
};
var toast_class_default = Toast;

// node_modules/framework7/components/toast/toast.js
var toast_default = {
  name: "toast",
  static: {
    Toast: toast_class_default
  },
  create() {
    const app = this;
    app.toast = extend({}, ModalMethods({
      app,
      constructor: toast_class_default,
      defaultSelector: ".toast.modal-in"
    }), {
      // Shortcuts
      show(params) {
        extend(params, {
          destroyOnClose: true
        });
        return new toast_class_default(app, params).open();
      }
    });
  },
  params: {
    toast: {
      icon: null,
      text: null,
      position: "bottom",
      horizontalPosition: "left",
      closeButton: false,
      closeButtonColor: null,
      closeButtonText: "Ok",
      closeTimeout: null,
      cssClass: null,
      render: null,
      containerEl: null
    }
  }
};

// node_modules/framework7/components/preloader/preloader.js
var Preloader = {
  init(el) {
    const app = this;
    const preloaders = {
      iosPreloaderContent,
      mdPreloaderContent
    };
    const $el = dom7_default(el);
    if ($el.length === 0 || $el.children(".preloader-inner").length > 0 || $el.children(".preloader-inner-line").length > 0) return;
    $el.append(preloaders[`${app.theme}PreloaderContent`]);
  },
  // Modal
  visible: false,
  show(color) {
    if (color === void 0) {
      color = "white";
    }
    const app = this;
    if (Preloader.visible) return;
    const preloaders = {
      iosPreloaderContent,
      mdPreloaderContent
    };
    const preloaderInner = preloaders[`${app.theme}PreloaderContent`] || "";
    dom7_default("html").addClass("with-modal-preloader");
    app.$el.append(`
      <div class="preloader-backdrop"></div>
      <div class="preloader-modal">
        <div class="preloader color-${color}">${preloaderInner}</div>
      </div>
    `);
    Preloader.visible = true;
  },
  showIn(el, color) {
    if (color === void 0) {
      color = "white";
    }
    const app = this;
    const preloaders = {
      iosPreloaderContent,
      mdPreloaderContent
    };
    const preloaderInner = preloaders[`${app.theme}PreloaderContent`] || "";
    dom7_default(el || "html").addClass("with-modal-preloader");
    dom7_default(el || app.$el).append(`
      <div class="preloader-backdrop"></div>
      <div class="preloader-modal">
        <div class="preloader color-${color}">${preloaderInner}</div>
      </div>
    `);
  },
  hide() {
    const app = this;
    if (!Preloader.visible) return;
    dom7_default("html").removeClass("with-modal-preloader");
    app.$el.find(".preloader-backdrop, .preloader-modal").remove();
    Preloader.visible = false;
  },
  hideIn(el) {
    const app = this;
    dom7_default(el || "html").removeClass("with-modal-preloader");
    dom7_default(el || app.$el).find(".preloader-backdrop, .preloader-modal").remove();
  }
};
var preloader_default = {
  name: "preloader",
  create() {
    const app = this;
    bindMethods(app, {
      preloader: Preloader
    });
  },
  on: {
    photoBrowserOpen(pb) {
      const app = this;
      pb.$el.find(".preloader").each((preloaderEl) => {
        app.preloader.init(preloaderEl);
      });
    },
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".preloader").each((preloaderEl) => {
        app.preloader.init(preloaderEl);
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".preloader").each((preloaderEl) => {
        app.preloader.init(preloaderEl);
      });
    }
  },
  vnode: {
    preloader: {
      insert(vnode) {
        const app = this;
        const preloaderEl = vnode.elm;
        app.preloader.init(preloaderEl);
      }
    }
  }
};

// node_modules/framework7/components/progressbar/progressbar.js
var Progressbar = {
  set() {
    const app = this;
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }
    let [el, progress, duration] = args;
    if (typeof args[0] === "number") {
      [progress, duration] = args;
      el = app.$el;
    }
    if (typeof progress === "undefined" || progress === null) return el;
    if (!progress) progress = 0;
    const $el = dom7_default(el || app.$el);
    if ($el.length === 0) {
      return el;
    }
    const progressNormalized = Math.min(Math.max(progress, 0), 100);
    let $progressbarEl;
    if ($el.hasClass("progressbar")) $progressbarEl = $el.eq(0);
    else {
      $progressbarEl = $el.children(".progressbar");
    }
    if ($progressbarEl.length === 0 || $progressbarEl.hasClass("progressbar-infinite")) {
      return $progressbarEl;
    }
    let $progressbarLine = $progressbarEl.children("span");
    if ($progressbarLine.length === 0) {
      $progressbarLine = dom7_default("<span></span>");
      $progressbarEl.append($progressbarLine);
    }
    $progressbarLine.transition(typeof duration !== "undefined" ? duration : "").transform(`translate3d(${(-100 + progressNormalized) * (app.rtl ? -1 : 1)}%,0,0)`);
    return $progressbarEl[0];
  },
  show() {
    const app = this;
    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
      args[_key2] = arguments[_key2];
    }
    let [el, progress, color] = args;
    let type = "determined";
    if (args.length === 2) {
      if ((typeof args[0] === "string" || typeof args[0] === "object") && typeof args[1] === "string") {
        [el, color, progress] = args;
        type = "infinite";
      } else if (typeof args[0] === "number" && typeof args[1] === "string") {
        [progress, color] = args;
        el = app.$el;
      }
    } else if (args.length === 1) {
      if (typeof args[0] === "number") {
        el = app.$el;
        progress = args[0];
      } else if (typeof args[0] === "string") {
        type = "infinite";
        el = app.$el;
        color = args[0];
      }
    } else if (args.length === 0) {
      type = "infinite";
      el = app.$el;
    }
    const $el = dom7_default(el);
    if ($el.length === 0) return void 0;
    let $progressbarEl;
    if ($el.hasClass("progressbar") || $el.hasClass("progressbar-infinite")) {
      $progressbarEl = $el;
    } else {
      $progressbarEl = $el.children(".progressbar:not(.progressbar-out), .progressbar-infinite:not(.progressbar-out)");
      if ($progressbarEl.length === 0) {
        $progressbarEl = dom7_default(`
          <span class="progressbar${type === "infinite" ? "-infinite" : ""}${color ? ` color-${color}` : ""} progressbar-in">
            ${type === "infinite" ? "" : "<span></span>"}
          </span>`);
        $el.append($progressbarEl);
      }
    }
    if (typeof progress !== "undefined") {
      app.progressbar.set($progressbarEl, progress);
    }
    return $progressbarEl[0];
  },
  hide(el, removeAfterHide) {
    if (removeAfterHide === void 0) {
      removeAfterHide = true;
    }
    const app = this;
    const $el = dom7_default(el || app.$el);
    if ($el.length === 0) return void 0;
    let $progressbarEl;
    if ($el.hasClass("progressbar") || $el.hasClass("progressbar-infinite")) {
      $progressbarEl = $el;
    } else {
      $progressbarEl = $el.children(".progressbar, .progressbar-infinite");
    }
    if ($progressbarEl.length === 0 || !$progressbarEl.hasClass("progressbar-in") || $progressbarEl.hasClass("progressbar-out")) {
      return $progressbarEl;
    }
    $progressbarEl.removeClass("progressbar-in").addClass("progressbar-out").animationEnd(() => {
      if (removeAfterHide) {
        $progressbarEl.remove();
      }
    });
    return $progressbarEl;
  }
};
var progressbar_default = {
  name: "progressbar",
  create() {
    const app = this;
    bindMethods(app, {
      progressbar: Progressbar
    });
  },
  on: {
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".progressbar").each((progressbarEl) => {
        const $progressbarEl = dom7_default(progressbarEl);
        app.progressbar.set($progressbarEl, $progressbarEl.attr("data-progress"));
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".progressbar").each((progressbarEl) => {
        const $progressbarEl = dom7_default(progressbarEl);
        app.progressbar.set($progressbarEl, $progressbarEl.attr("data-progress"));
      });
    }
  },
  vnode: {
    progressbar: {
      insert(vnode) {
        const app = this;
        const el = vnode.elm;
        app.progressbar.set(el, el.getAttribute("data-progress"));
      },
      update(vnode) {
        const app = this;
        const el = vnode.elm;
        app.progressbar.set(el, el.getAttribute("data-progress"));
      }
    }
  }
};

// node_modules/framework7/components/sortable/sortable.js
var Sortable = {
  init() {
    const app = this;
    const document2 = getDocument();
    let isTouched;
    let isMoved;
    let touchStartY;
    let touchesDiff;
    let $sortingEl;
    let $sortingItems;
    let $sortableContainer;
    let sortingElHeight;
    let minTop;
    let maxTop;
    let $insertAfterEl;
    let $insertBeforeEl;
    let indexFrom;
    let $pageEl;
    let $pageContentEl;
    let pageHeight;
    let pageOffset;
    let sortingElOffsetLocal;
    let sortingElOffsetTop;
    let initialScrollTop;
    let wasTapHold;
    function handleTouchStart(e, isTapHold) {
      isMoved = false;
      isTouched = true;
      wasTapHold = false;
      touchStartY = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
      $sortingEl = dom7_default(e.target).closest("li").eq(0);
      indexFrom = $sortingEl.index();
      $sortableContainer = $sortingEl.parents(".sortable");
      const $listGroup = $sortingEl.parents(".list-group");
      if ($listGroup.length && $listGroup.parents($sortableContainer).length) {
        $sortableContainer = $listGroup;
      }
      $sortingItems = $sortableContainer.children("ul").children("li:not(.disallow-sorting):not(.no-sorting)");
      if (app.panel) app.panel.allowOpen = false;
      if (app.swipeout) app.swipeout.allow = false;
      if (isTapHold) {
        $sortingEl.addClass("sorting");
        $sortableContainer.addClass("sortable-sorting");
        wasTapHold = true;
      }
    }
    function handleTouchMove(e) {
      if (!isTouched || !$sortingEl) return;
      const pageY = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
      if (!isMoved) {
        $pageEl = $sortingEl.parents(".page");
        $pageContentEl = $sortingEl.parents(".page-content");
        const paddingTop = parseInt($pageContentEl.css("padding-top"), 10);
        const paddingBottom = parseInt($pageContentEl.css("padding-bottom"), 10);
        initialScrollTop = $pageContentEl[0].scrollTop;
        pageOffset = $pageEl.offset().top + paddingTop;
        pageHeight = $pageEl.height() - paddingTop - paddingBottom;
        $sortingEl.addClass("sorting");
        $sortableContainer.addClass("sortable-sorting");
        sortingElOffsetLocal = $sortingEl[0].offsetTop;
        minTop = $sortingEl[0].offsetTop;
        maxTop = $sortingEl.parent().height() - sortingElOffsetLocal - $sortingEl.height();
        sortingElHeight = $sortingEl[0].offsetHeight;
        sortingElOffsetTop = $sortingEl.offset().top;
      }
      isMoved = true;
      e.preventDefault();
      e.f7PreventSwipePanel = true;
      touchesDiff = pageY - touchStartY;
      const translateScrollOffset = $pageContentEl[0].scrollTop - initialScrollTop;
      const translate2 = Math.min(Math.max(touchesDiff + translateScrollOffset, -minTop), maxTop);
      $sortingEl.transform(`translate3d(0,${translate2}px,0)`);
      const scrollAddition = 44;
      let allowScroll = true;
      if (touchesDiff + translateScrollOffset + scrollAddition < -minTop) {
        allowScroll = false;
      }
      if (touchesDiff + translateScrollOffset - scrollAddition > maxTop) {
        allowScroll = false;
      }
      $insertBeforeEl = void 0;
      $insertAfterEl = void 0;
      let scrollDiff;
      if (allowScroll) {
        if (sortingElOffsetTop + touchesDiff + sortingElHeight + scrollAddition > pageOffset + pageHeight) {
          scrollDiff = sortingElOffsetTop + touchesDiff + sortingElHeight + scrollAddition - (pageOffset + pageHeight);
        }
        if (sortingElOffsetTop + touchesDiff < pageOffset + scrollAddition) {
          scrollDiff = sortingElOffsetTop + touchesDiff - pageOffset - scrollAddition;
        }
        if (scrollDiff) {
          $pageContentEl[0].scrollTop += scrollDiff;
        }
      }
      $sortingItems.each((el) => {
        const $currentEl = dom7_default(el);
        if ($currentEl[0] === $sortingEl[0]) return;
        const currentElOffset = $currentEl[0].offsetTop;
        const currentElHeight = $currentEl.height();
        const sortingElOffset = sortingElOffsetLocal + translate2;
        let currentTranslate;
        const prevTranslate = $currentEl[0].f7Translate;
        if (sortingElOffset >= currentElOffset - currentElHeight / 2 && $sortingEl.index() < $currentEl.index()) {
          currentTranslate = -sortingElHeight;
          $currentEl.transform(`translate3d(0, ${currentTranslate}px,0)`);
          $insertAfterEl = $currentEl;
          $insertBeforeEl = void 0;
        } else if (sortingElOffset <= currentElOffset + currentElHeight / 2 && $sortingEl.index() > $currentEl.index()) {
          currentTranslate = sortingElHeight;
          $currentEl[0].f7Translate = currentTranslate;
          $currentEl.transform(`translate3d(0, ${currentTranslate}px,0)`);
          $insertAfterEl = void 0;
          if (!$insertBeforeEl) $insertBeforeEl = $currentEl;
        } else {
          currentTranslate = void 0;
          $currentEl.transform("translate3d(0, 0%,0)");
        }
        if (prevTranslate !== currentTranslate) {
          $currentEl.trigger("sortable:move");
          app.emit("sortableMove", $currentEl[0], $sortableContainer[0]);
        }
        $currentEl[0].f7Translate = currentTranslate;
      });
    }
    function handleTouchEnd() {
      if (!isTouched || !isMoved) {
        if (isTouched && !isMoved) {
          if (app.panel) app.panel.allowOpen = true;
          if (app.swipeout) app.swipeout.allow = true;
          if (wasTapHold) {
            $sortingEl.removeClass("sorting");
            $sortableContainer.removeClass("sortable-sorting");
          }
        }
        isTouched = false;
        isMoved = false;
        return;
      }
      if (app.panel) app.panel.allowOpen = true;
      if (app.swipeout) app.swipeout.allow = true;
      $sortingItems.transform("");
      $sortingEl.removeClass("sorting");
      $sortableContainer.removeClass("sortable-sorting");
      let indexTo;
      if ($insertAfterEl) indexTo = $insertAfterEl.index();
      else if ($insertBeforeEl) indexTo = $insertBeforeEl.index();
      let moveElements = $sortableContainer.dataset().sortableMoveElements;
      if (typeof moveElements === "undefined") {
        moveElements = app.params.sortable.moveElements;
      }
      if (moveElements) {
        if ($insertAfterEl) {
          $sortingEl.insertAfter($insertAfterEl);
        }
        if ($insertBeforeEl) {
          $sortingEl.insertBefore($insertBeforeEl);
        }
      }
      if (($insertAfterEl || $insertBeforeEl) && $sortableContainer.hasClass("virtual-list")) {
        indexFrom = $sortingEl[0].f7VirtualListIndex;
        if (typeof indexFrom === "undefined") indexFrom = $sortingEl.attr("data-virtual-list-index");
        if ($insertBeforeEl) {
          indexTo = $insertBeforeEl[0].f7VirtualListIndex;
          if (typeof indexTo === "undefined") indexTo = $insertBeforeEl.attr("data-virtual-list-index");
        } else {
          indexTo = $insertAfterEl[0].f7VirtualListIndex;
          if (typeof indexTo === "undefined") indexTo = $insertAfterEl.attr("data-virtual-list-index");
        }
        if (indexTo !== null) indexTo = parseInt(indexTo, 10);
        else indexTo = void 0;
        const virtualList = $sortableContainer[0].f7VirtualList;
        if (indexFrom) indexFrom = parseInt(indexFrom, 10);
        if (indexTo) indexTo = parseInt(indexTo, 10);
        if (virtualList) virtualList.moveItem(indexFrom, indexTo);
      }
      if (typeof indexTo !== "undefined" && !Number.isNaN(indexTo) && indexTo !== indexFrom) {
        $sortingEl.trigger("sortable:sort", {
          from: indexFrom,
          to: indexTo
        });
        app.emit("sortableSort", $sortingEl[0], {
          from: indexFrom,
          to: indexTo,
          el: $sortingEl[0]
        }, $sortableContainer[0]);
      }
      $insertBeforeEl = void 0;
      $insertAfterEl = void 0;
      isTouched = false;
      isMoved = false;
    }
    const activeListener = getSupport().passiveListener ? {
      passive: false,
      capture: false
    } : false;
    dom7_default(document2).on(app.touchEvents.start, ".list.sortable .sortable-handler", handleTouchStart, activeListener);
    app.on("touchmove:active", handleTouchMove);
    app.on("touchend:passive", handleTouchEnd);
    dom7_default(document2).on("taphold", ".sortable-tap-hold", (e, pointerEvent) => {
      handleTouchStart(pointerEvent, true);
    });
  },
  enable(el) {
    if (el === void 0) {
      el = ".list.sortable";
    }
    const app = this;
    const $el = dom7_default(el);
    if ($el.length === 0) return;
    $el.addClass("sortable-enabled");
    $el.trigger("sortable:enable");
    app.emit("sortableEnable", $el[0]);
  },
  disable(el) {
    if (el === void 0) {
      el = ".list.sortable";
    }
    const app = this;
    const $el = dom7_default(el);
    if ($el.length === 0) return;
    $el.removeClass("sortable-enabled");
    $el.trigger("sortable:disable");
    app.emit("sortableDisable", $el[0]);
  },
  toggle(el) {
    if (el === void 0) {
      el = ".list.sortable";
    }
    const app = this;
    const $el = dom7_default(el);
    if ($el.length === 0) return;
    if ($el.hasClass("sortable-enabled")) {
      app.sortable.disable($el);
    } else {
      app.sortable.enable($el);
    }
  }
};
var sortable_default = {
  name: "sortable",
  params: {
    sortable: {
      moveElements: true
    }
  },
  create() {
    const app = this;
    bindMethods(app, {
      sortable: Sortable
    });
  },
  on: {
    init() {
      const app = this;
      if (!app.params.sortable) return;
      app.sortable.init();
    }
  },
  clicks: {
    ".sortable-enable": function enable($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.sortable.enable(data.sortable);
    },
    ".sortable-disable": function disable($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.sortable.disable(data.sortable);
    },
    ".sortable-toggle": function toggle($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.sortable.toggle(data.sortable);
    }
  }
};

// node_modules/framework7/components/swipeout/swipeout.js
var Swipeout = {
  init() {
    const app = this;
    const document2 = getDocument();
    const touchesStart = {};
    let isTouched;
    let isMoved;
    let isScrolling;
    let touchStartTime;
    let touchesDiff;
    let $swipeoutEl;
    let $swipeoutContent;
    let $actionsRight;
    let $actionsLeft;
    let actionsLeftWidth;
    let actionsRightWidth;
    let translate2;
    let opened;
    let openedActionsSide;
    let $leftButtons;
    let $rightButtons;
    let direction;
    let $overswipeLeftButton;
    let $overswipeRightButton;
    let overswipeLeft;
    let overswipeRight;
    function handleTouchStart(e) {
      if (!app.swipeout.allow) return;
      isMoved = false;
      isTouched = true;
      isScrolling = void 0;
      touchesStart.x = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
      touchesStart.y = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
      touchStartTime = (/* @__PURE__ */ new Date()).getTime();
      $swipeoutEl = dom7_default(this);
    }
    function handleTouchMove(e) {
      if (!isTouched) return;
      const pageX = e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX;
      const pageY = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
      if (typeof isScrolling === "undefined") {
        isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));
      }
      if (isScrolling) {
        isTouched = false;
        return;
      }
      if (!isMoved) {
        if (dom7_default(".list.sortable-opened").length > 0) return;
        $swipeoutContent = $swipeoutEl.find(".swipeout-content");
        $actionsRight = $swipeoutEl.find(".swipeout-actions-right");
        $actionsLeft = $swipeoutEl.find(".swipeout-actions-left");
        actionsLeftWidth = null;
        actionsRightWidth = null;
        $leftButtons = null;
        $rightButtons = null;
        $overswipeRightButton = null;
        $overswipeLeftButton = null;
        if ($actionsLeft.length > 0) {
          actionsLeftWidth = $actionsLeft.outerWidth();
          $leftButtons = $actionsLeft.children("a");
          $overswipeLeftButton = $actionsLeft.find(".swipeout-overswipe");
        }
        if ($actionsRight.length > 0) {
          actionsRightWidth = $actionsRight.outerWidth();
          $rightButtons = $actionsRight.children("a");
          $overswipeRightButton = $actionsRight.find(".swipeout-overswipe");
        }
        opened = $swipeoutEl.hasClass("swipeout-opened");
        if (opened) {
          openedActionsSide = $swipeoutEl.find(".swipeout-actions-left.swipeout-actions-opened").length > 0 ? "left" : "right";
        }
        $swipeoutEl.removeClass("swipeout-transitioning");
        if (!app.params.swipeout.noFollow) {
          $swipeoutEl.find(".swipeout-actions-opened").removeClass("swipeout-actions-opened");
          $swipeoutEl.removeClass("swipeout-opened");
        }
      }
      isMoved = true;
      if (e.cancelable) {
        e.preventDefault();
      }
      touchesDiff = pageX - touchesStart.x;
      translate2 = touchesDiff;
      if (opened) {
        if (openedActionsSide === "right") translate2 -= actionsRightWidth;
        else translate2 += actionsLeftWidth;
      }
      if (translate2 > 0 && $actionsLeft.length === 0 || translate2 < 0 && $actionsRight.length === 0) {
        if (!opened) {
          isTouched = false;
          isMoved = false;
          $swipeoutContent.transform("");
          if ($rightButtons && $rightButtons.length > 0) {
            $rightButtons.transform("");
          }
          if ($leftButtons && $leftButtons.length > 0) {
            $leftButtons.transform("");
          }
          return;
        }
        translate2 = 0;
      }
      if (translate2 < 0) direction = "to-left";
      else if (translate2 > 0) direction = "to-right";
      else if (!direction) direction = "to-left";
      let buttonOffset;
      let progress;
      e.f7PreventSwipePanel = true;
      if (app.params.swipeout.noFollow) {
        if (opened) {
          if (openedActionsSide === "right" && touchesDiff > 0) {
            app.swipeout.close($swipeoutEl);
          }
          if (openedActionsSide === "left" && touchesDiff < 0) {
            app.swipeout.close($swipeoutEl);
          }
        } else {
          if (touchesDiff < 0 && $actionsRight.length > 0) {
            app.swipeout.open($swipeoutEl, "right");
          }
          if (touchesDiff > 0 && $actionsLeft.length > 0) {
            app.swipeout.open($swipeoutEl, "left");
          }
        }
        isTouched = false;
        isMoved = false;
        return;
      }
      overswipeLeft = false;
      overswipeRight = false;
      if ($actionsRight.length > 0) {
        let buttonTranslate = translate2;
        progress = buttonTranslate / actionsRightWidth;
        if (buttonTranslate < -actionsRightWidth) {
          const ratio = buttonTranslate / -actionsRightWidth;
          buttonTranslate = -actionsRightWidth - (-buttonTranslate - actionsRightWidth) ** 0.8;
          translate2 = buttonTranslate;
          if ($overswipeRightButton.length > 0 && ratio > app.params.swipeout.overswipeRatio) {
            overswipeRight = true;
          }
        }
        if (direction !== "to-left") {
          progress = 0;
          buttonTranslate = 0;
        }
        $rightButtons.each((buttonEl) => {
          const $buttonEl = dom7_default(buttonEl);
          if (typeof buttonEl.f7SwipeoutButtonOffset === "undefined") {
            $buttonEl[0].f7SwipeoutButtonOffset = buttonEl.offsetLeft;
          }
          buttonOffset = buttonEl.f7SwipeoutButtonOffset;
          if ($overswipeRightButton.length > 0 && $buttonEl.hasClass("swipeout-overswipe") && direction === "to-left") {
            $buttonEl.css({
              left: `${overswipeRight ? -buttonOffset : 0}px`
            });
            if (overswipeRight) {
              if (!$buttonEl.hasClass("swipeout-overswipe-active")) {
                $swipeoutEl.trigger("swipeout:overswipeenter");
                app.emit("swipeoutOverswipeEnter", $swipeoutEl[0]);
              }
              $buttonEl.addClass("swipeout-overswipe-active");
            } else {
              if ($buttonEl.hasClass("swipeout-overswipe-active")) {
                $swipeoutEl.trigger("swipeout:overswipeexit");
                app.emit("swipeoutOverswipeExit", $swipeoutEl[0]);
              }
              $buttonEl.removeClass("swipeout-overswipe-active");
            }
          }
          $buttonEl.transform(`translate3d(${buttonTranslate - buttonOffset * (1 + Math.max(progress, -1))}px,0,0)`);
        });
      }
      if ($actionsLeft.length > 0) {
        let buttonTranslate = translate2;
        progress = buttonTranslate / actionsLeftWidth;
        if (buttonTranslate > actionsLeftWidth) {
          const ratio = buttonTranslate / actionsRightWidth;
          buttonTranslate = actionsLeftWidth + (buttonTranslate - actionsLeftWidth) ** 0.8;
          translate2 = buttonTranslate;
          if ($overswipeLeftButton.length > 0 && ratio > app.params.swipeout.overswipeRatio) {
            overswipeLeft = true;
          }
        }
        if (direction !== "to-right") {
          buttonTranslate = 0;
          progress = 0;
        }
        $leftButtons.each((buttonEl, index) => {
          const $buttonEl = dom7_default(buttonEl);
          if (typeof buttonEl.f7SwipeoutButtonOffset === "undefined") {
            $buttonEl[0].f7SwipeoutButtonOffset = actionsLeftWidth - buttonEl.offsetLeft - buttonEl.offsetWidth;
          }
          buttonOffset = buttonEl.f7SwipeoutButtonOffset;
          if ($overswipeLeftButton.length > 0 && $buttonEl.hasClass("swipeout-overswipe") && direction === "to-right") {
            $buttonEl.css({
              left: `${overswipeLeft ? buttonOffset : 0}px`
            });
            if (overswipeLeft) {
              if (!$buttonEl.hasClass("swipeout-overswipe-active")) {
                $swipeoutEl.trigger("swipeout:overswipeenter");
                app.emit("swipeoutOverswipeEnter", $swipeoutEl[0]);
              }
              $buttonEl.addClass("swipeout-overswipe-active");
            } else {
              if ($buttonEl.hasClass("swipeout-overswipe-active")) {
                $swipeoutEl.trigger("swipeout:overswipeexit");
                app.emit("swipeoutOverswipeExit", $swipeoutEl[0]);
              }
              $buttonEl.removeClass("swipeout-overswipe-active");
            }
          }
          if ($leftButtons.length > 1) {
            $buttonEl.css("z-index", $leftButtons.length - index);
          }
          $buttonEl.transform(`translate3d(${buttonTranslate + buttonOffset * (1 - Math.min(progress, 1))}px,0,0)`);
        });
      }
      $swipeoutEl.trigger("swipeout", progress);
      app.emit("swipeout", $swipeoutEl[0], progress);
      $swipeoutContent.transform(`translate3d(${translate2}px,0,0)`);
    }
    function handleTouchEnd() {
      if (!isTouched || !isMoved) {
        isTouched = false;
        isMoved = false;
        return;
      }
      isTouched = false;
      isMoved = false;
      const timeDiff = (/* @__PURE__ */ new Date()).getTime() - touchStartTime;
      const $actions = direction === "to-left" ? $actionsRight : $actionsLeft;
      const actionsWidth = direction === "to-left" ? actionsRightWidth : actionsLeftWidth;
      let action;
      let $buttons;
      let i;
      if (timeDiff < 300 && (touchesDiff < -10 && direction === "to-left" || touchesDiff > 10 && direction === "to-right") || timeDiff >= 300 && Math.abs(translate2) > actionsWidth / 2) {
        action = "open";
      } else {
        action = "close";
      }
      if (timeDiff < 300) {
        if (Math.abs(translate2) === 0) action = "close";
        if (Math.abs(translate2) === actionsWidth) action = "open";
      }
      if (action === "open") {
        Swipeout.el = $swipeoutEl[0];
        $swipeoutEl.trigger("swipeout:open");
        app.emit("swipeoutOpen", $swipeoutEl[0]);
        $swipeoutEl.addClass("swipeout-opened swipeout-transitioning");
        const newTranslate = direction === "to-left" ? -actionsWidth : actionsWidth;
        $swipeoutContent.transform(`translate3d(${newTranslate}px,0,0)`);
        $actions.addClass("swipeout-actions-opened");
        $buttons = direction === "to-left" ? $rightButtons : $leftButtons;
        if ($buttons) {
          for (i = 0; i < $buttons.length; i += 1) {
            dom7_default($buttons[i]).transform(`translate3d(${newTranslate}px,0,0)`);
          }
        }
        if (overswipeRight) {
          $actionsRight.find(".swipeout-overswipe").trigger("click", "f7Overswipe");
        }
        if (overswipeLeft) {
          $actionsLeft.find(".swipeout-overswipe").trigger("click", "f7Overswipe");
        }
      } else {
        $swipeoutEl.trigger("swipeout:close");
        app.emit("swipeoutClose", $swipeoutEl[0]);
        Swipeout.el = void 0;
        $swipeoutEl.addClass("swipeout-transitioning").removeClass("swipeout-opened");
        $swipeoutContent.transform("");
        $actions.removeClass("swipeout-actions-opened");
      }
      let buttonOffset;
      if ($leftButtons && $leftButtons.length > 0 && $leftButtons !== $buttons) {
        $leftButtons.each((buttonEl) => {
          const $buttonEl = dom7_default(buttonEl);
          buttonOffset = buttonEl.f7SwipeoutButtonOffset;
          if (typeof buttonOffset === "undefined") {
            $buttonEl[0].f7SwipeoutButtonOffset = actionsLeftWidth - buttonEl.offsetLeft - buttonEl.offsetWidth;
          }
          $buttonEl.transform(`translate3d(${buttonOffset}px,0,0)`);
        });
      }
      if ($rightButtons && $rightButtons.length > 0 && $rightButtons !== $buttons) {
        $rightButtons.each((buttonEl) => {
          const $buttonEl = dom7_default(buttonEl);
          buttonOffset = buttonEl.f7SwipeoutButtonOffset;
          if (typeof buttonOffset === "undefined") {
            $buttonEl[0].f7SwipeoutButtonOffset = buttonEl.offsetLeft;
          }
          $buttonEl.transform(`translate3d(${-buttonOffset}px,0,0)`);
        });
      }
      $swipeoutContent.transitionEnd(() => {
        if (opened && action === "open" || !opened && action === "close") return;
        $swipeoutEl.trigger(action === "open" ? "swipeout:opened" : "swipeout:closed");
        app.emit(action === "open" ? "swipeoutOpened" : "swipeoutClosed", $swipeoutEl[0]);
        $swipeoutEl.removeClass("swipeout-transitioning");
        if (opened && action === "close") {
          if ($actionsRight.length > 0) {
            $rightButtons.transform("");
          }
          if ($actionsLeft.length > 0) {
            $leftButtons.transform("");
          }
        }
      });
    }
    const passiveListener = getSupport().passiveListener ? {
      passive: true
    } : false;
    app.on("touchstart", (e) => {
      if (Swipeout.el) {
        const $targetEl = dom7_default(e.target);
        if (!(dom7_default(Swipeout.el).is($targetEl[0]) || $targetEl.parents(".swipeout").is(Swipeout.el) || $targetEl.hasClass("modal-in") || ($targetEl.attr("class") || "").indexOf("-backdrop") > 0 || $targetEl.hasClass("actions-modal") || $targetEl.parents(".actions-modal.modal-in, .dialog.modal-in").length > 0)) {
          app.swipeout.close(Swipeout.el);
        }
      }
    });
    dom7_default(document2).on(app.touchEvents.start, "li.swipeout", handleTouchStart, passiveListener);
    app.on("touchmove:active", handleTouchMove);
    app.on("touchend:passive", handleTouchEnd);
  },
  allow: true,
  el: void 0,
  open() {
    const app = this;
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }
    let [el, side, callback] = args;
    if (typeof args[1] === "function") {
      [el, callback, side] = args;
    }
    const $el = dom7_default(el).eq(0);
    if ($el.length === 0) return;
    if (!$el.hasClass("swipeout") || $el.hasClass("swipeout-opened")) return;
    if (!side) {
      if ($el.find(".swipeout-actions-right").length > 0) side = "right";
      else side = "left";
    }
    const $swipeoutActions = $el.find(`.swipeout-actions-${side}`);
    const $swipeoutContent = $el.find(".swipeout-content");
    if ($swipeoutActions.length === 0) return;
    $el.trigger("swipeout:open").addClass("swipeout-opened").removeClass("swipeout-transitioning");
    app.emit("swipeoutOpen", $el[0]);
    $swipeoutActions.addClass("swipeout-actions-opened");
    const $buttons = $swipeoutActions.children("a");
    const swipeoutActionsWidth = $swipeoutActions.outerWidth();
    const translate2 = side === "right" ? -swipeoutActionsWidth : swipeoutActionsWidth;
    if ($buttons.length > 1) {
      $buttons.each((buttonEl, buttonIndex) => {
        const $buttonEl = dom7_default(buttonEl);
        if (side === "right") {
          $buttonEl.transform(`translate3d(${-buttonEl.offsetLeft}px,0,0)`);
        } else {
          $buttonEl.css("z-index", $buttons.length - buttonIndex).transform(`translate3d(${swipeoutActionsWidth - buttonEl.offsetWidth - buttonEl.offsetLeft}px,0,0)`);
        }
      });
    }
    $el.addClass("swipeout-transitioning");
    $swipeoutContent.transitionEnd(() => {
      $el.trigger("swipeout:opened");
      app.emit("swipeoutOpened", $el[0]);
      if (callback) callback.call($el[0]);
    });
    nextFrame(() => {
      $buttons.transform(`translate3d(${translate2}px,0,0)`);
      $swipeoutContent.transform(`translate3d(${translate2}px,0,0)`);
    });
    Swipeout.el = $el[0];
  },
  close(el, callback) {
    const app = this;
    const $el = dom7_default(el).eq(0);
    if ($el.length === 0) return;
    if (!$el.hasClass("swipeout-opened")) return;
    const side = $el.find(".swipeout-actions-opened").hasClass("swipeout-actions-right") ? "right" : "left";
    const $swipeoutActions = $el.find(".swipeout-actions-opened").removeClass("swipeout-actions-opened");
    const $buttons = $swipeoutActions.children("a");
    const swipeoutActionsWidth = $swipeoutActions.outerWidth();
    app.swipeout.allow = false;
    $el.trigger("swipeout:close");
    app.emit("swipeoutClose", $el[0]);
    $el.removeClass("swipeout-opened").addClass("swipeout-transitioning");
    let closeTimeout;
    function onSwipeoutClose() {
      app.swipeout.allow = true;
      if ($el.hasClass("swipeout-opened")) return;
      $el.removeClass("swipeout-transitioning");
      $buttons.transform("");
      $el.trigger("swipeout:closed");
      app.emit("swipeoutClosed", $el[0]);
      if (callback) callback.call($el[0]);
      if (closeTimeout) clearTimeout(closeTimeout);
    }
    $el.find(".swipeout-content").transform("").transitionEnd(onSwipeoutClose);
    closeTimeout = setTimeout(onSwipeoutClose, 500);
    $buttons.each((buttonEl) => {
      const $buttonEl = dom7_default(buttonEl);
      if (side === "right") {
        $buttonEl.transform(`translate3d(${-buttonEl.offsetLeft}px,0,0)`);
      } else {
        $buttonEl.transform(`translate3d(${swipeoutActionsWidth - buttonEl.offsetWidth - buttonEl.offsetLeft}px,0,0)`);
      }
      $buttonEl.css({
        left: "0px"
      }).removeClass("swipeout-overswipe-active");
    });
    if (Swipeout.el && Swipeout.el === $el[0]) Swipeout.el = void 0;
  },
  delete(el, callback) {
    const app = this;
    const $el = dom7_default(el).eq(0);
    if ($el.length === 0) return;
    Swipeout.el = void 0;
    $el.trigger("swipeout:delete");
    app.emit("swipeoutDelete", $el[0]);
    $el.css({
      height: `${$el.outerHeight()}px`
    });
    $el.transitionEnd(() => {
      $el.trigger("swipeout:deleted");
      app.emit("swipeoutDeleted", $el[0]);
      if (callback) callback.call($el[0]);
      if ($el.parents(".virtual-list").length > 0) {
        const virtualList = $el.parents(".virtual-list")[0].f7VirtualList;
        const virtualIndex = $el[0].f7VirtualListIndex;
        if (virtualList && typeof virtualIndex !== "undefined") virtualList.deleteItem(virtualIndex);
      } else if (app.params.swipeout.removeElements) {
        if (app.params.swipeout.removeElementsWithTimeout) {
          setTimeout(() => {
            $el.remove();
          }, app.params.swipeout.removeElementsTimeout);
        } else {
          $el.remove();
        }
      } else {
        $el.removeClass("swipeout-deleting swipeout-transitioning");
      }
    });
    nextFrame(() => {
      $el.addClass("swipeout-deleting swipeout-transitioning").css({
        height: "0px"
      }).find(".swipeout-content").transform("translate3d(-100%,0,0)");
    });
  }
};
var swipeout_default = {
  name: "swipeout",
  params: {
    swipeout: {
      actionsNoFold: false,
      noFollow: false,
      removeElements: true,
      removeElementsWithTimeout: false,
      removeElementsTimeout: 0,
      overswipeRatio: 1.2
    }
  },
  create() {
    const app = this;
    bindMethods(app, {
      swipeout: Swipeout
    });
  },
  clicks: {
    ".swipeout-open": function openSwipeout($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.swipeout.open(data.swipeout, data.side);
    },
    ".swipeout-close": function closeSwipeout($clickedEl) {
      const app = this;
      const $swipeoutEl = $clickedEl.closest(".swipeout");
      if ($swipeoutEl.length === 0) return;
      app.swipeout.close($swipeoutEl);
    },
    ".swipeout-delete": function deleteSwipeout($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      const $swipeoutEl = $clickedEl.closest(".swipeout");
      if ($swipeoutEl.length === 0) return;
      const {
        confirm,
        confirmTitle
      } = data;
      if (data.confirm) {
        app.dialog.confirm(confirm, confirmTitle, () => {
          app.swipeout.delete($swipeoutEl);
        });
      } else {
        app.swipeout.delete($swipeoutEl);
      }
    }
  },
  on: {
    init() {
      const app = this;
      if (!app.params.swipeout) return;
      app.swipeout.init();
    }
  }
};

// node_modules/framework7/components/accordion/accordion.js
var Accordion = {
  toggleClicked($clickedEl) {
    const app = this;
    let $accordionItemEl = $clickedEl.closest(".accordion-item").eq(0);
    if (!$accordionItemEl.length) $accordionItemEl = $clickedEl.parents("li").eq(0);
    const $accordionContent = $clickedEl.parents(".accordion-item-content").eq(0);
    if ($accordionContent.length) {
      if ($accordionContent.parents($accordionItemEl).length) return;
    }
    if ($clickedEl.parents("li").length > 1 && $clickedEl.parents("li")[0] !== $accordionItemEl[0]) return;
    app.accordion.toggle($accordionItemEl);
  },
  open(el) {
    const app = this;
    const $el = dom7_default(el);
    let prevented = false;
    function prevent() {
      prevented = true;
    }
    $el.trigger("accordion:beforeopen", {
      prevent
    }, prevent);
    app.emit("accordionBeforeOpen", $el[0], prevent);
    if (prevented) return;
    const $list = $el.parents(".accordion-list").eq(0);
    let $contentEl = $el.children(".accordion-item-content");
    $contentEl.removeAttr("aria-hidden");
    if ($contentEl.length === 0) $contentEl = $el.find(".accordion-item-content");
    if ($contentEl.length === 0) return;
    const $openedItem = $list.length > 0 && $el.parent().children(".accordion-item-opened");
    if ($openedItem.length > 0) {
      app.accordion.close($openedItem);
    }
    $contentEl.transitionEnd(() => {
      if ($el.hasClass("accordion-item-opened")) {
        $contentEl.transition(0);
        $contentEl.css("height", "auto");
        nextFrame(() => {
          $contentEl.transition("");
          $el.trigger("accordion:opened");
          app.emit("accordionOpened", $el[0]);
        });
      } else {
        $contentEl.css("height", "");
        $el.trigger("accordion:closed");
        app.emit("accordionClosed", $el[0]);
      }
    });
    $contentEl.css("height", `${$contentEl[0].scrollHeight}px`);
    $el.trigger("accordion:open");
    $el.addClass("accordion-item-opened");
    app.emit("accordionOpen", $el[0]);
  },
  close(el) {
    const app = this;
    const $el = dom7_default(el);
    let prevented = false;
    function prevent() {
      prevented = true;
    }
    $el.trigger("accordion:beforeclose", {
      prevent
    }, prevent);
    app.emit("accordionBeforeClose", $el[0], prevent);
    if (prevented) return;
    let $contentEl = $el.children(".accordion-item-content");
    if ($contentEl.length === 0) $contentEl = $el.find(".accordion-item-content");
    $el.removeClass("accordion-item-opened");
    $contentEl.attr("aria-hidden", true);
    $contentEl.transition(0);
    $contentEl.css("height", `${$contentEl[0].scrollHeight}px`);
    $contentEl.transitionEnd(() => {
      if ($el.hasClass("accordion-item-opened")) {
        $contentEl.transition(0);
        $contentEl.css("height", "auto");
        nextFrame(() => {
          $contentEl.transition("");
          $el.trigger("accordion:opened");
          app.emit("accordionOpened", $el[0]);
        });
      } else {
        $contentEl.css("height", "");
        $el.trigger("accordion:closed");
        app.emit("accordionClosed", $el[0]);
      }
    });
    nextFrame(() => {
      $contentEl.transition("");
      $contentEl.css("height", "");
      $el.trigger("accordion:close");
      app.emit("accordionClose", $el[0]);
    });
  },
  toggle(el) {
    const app = this;
    const $el = dom7_default(el);
    if ($el.length === 0) return;
    if ($el.hasClass("accordion-item-opened")) app.accordion.close(el);
    else app.accordion.open(el);
  }
};
var accordion_default = {
  name: "accordion",
  create() {
    const app = this;
    bindMethods(app, {
      accordion: Accordion
    });
  },
  clicks: {
    ".accordion-item .item-link, .accordion-item-toggle, .links-list.accordion-list > ul > li > a": function open($clickedEl) {
      const app = this;
      Accordion.toggleClicked.call(app, $clickedEl);
    }
  }
};

// node_modules/framework7/components/contacts-list/contacts-list.js
var contacts_list_default = {
  name: "contactsList"
};

// node_modules/framework7/components/virtual-list/virtual-list-class.js
var VirtualList = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const vl = this;
    const device = getDevice();
    const document2 = getDocument();
    let defaultHeight;
    if (app.theme === "md") {
      defaultHeight = 48;
    } else if (app.theme === "ios") {
      defaultHeight = 44;
    }
    const defaults2 = {
      cols: 1,
      height: defaultHeight,
      cache: true,
      dynamicHeightBufferSize: 1,
      showFilteredItemsOnly: false,
      renderExternal: void 0,
      setListHeight: true,
      searchByItem: void 0,
      searchAll: void 0,
      ul: null,
      createUl: true,
      scrollableParentEl: void 0,
      renderItem(item) {
        return `
          <li>
            <div class="item-content">
              <div class="item-inner">
                <div class="item-title">${item}</div>
              </div>
            </div>
          </li>
        `.trim();
      },
      on: {}
    };
    vl.useModulesParams(defaults2);
    vl.params = extend(defaults2, params);
    if (vl.params.height === void 0 || !vl.params.height) {
      vl.params.height = defaultHeight;
    }
    vl.$el = dom7_default(params.el);
    vl.el = vl.$el[0];
    if (vl.$el.length === 0) return void 0;
    vl.$el[0].f7VirtualList = vl;
    vl.items = vl.params.items;
    if (vl.params.showFilteredItemsOnly) {
      vl.filteredItems = [];
    }
    if (vl.params.renderItem) {
      vl.renderItem = vl.params.renderItem;
    }
    vl.$pageContentEl = vl.$el.parents(".page-content");
    vl.pageContentEl = vl.$pageContentEl[0];
    vl.$scrollableParentEl = vl.params.scrollableParentEl ? dom7_default(vl.params.scrollableParentEl).eq(0) : vl.$pageContentEl;
    if (!vl.$scrollableParentEl.length && vl.$pageContentEl.length) {
      vl.$scrollableParentEl = vl.$pageContentEl;
    }
    vl.scrollableParentEl = vl.$scrollableParentEl[0];
    if (typeof vl.params.updatableScroll !== "undefined") {
      vl.updatableScroll = vl.params.updatableScroll;
    } else {
      vl.updatableScroll = true;
      if (device.ios && device.osVersion.split(".")[0] < 8) {
        vl.updatableScroll = false;
      }
    }
    const ul = vl.params.ul;
    vl.$ul = ul ? dom7_default(vl.params.ul) : vl.$el.children("ul");
    if (vl.$ul.length === 0 && vl.params.createUl) {
      vl.$el.append("<ul></ul>");
      vl.$ul = vl.$el.children("ul");
    }
    vl.ul = vl.$ul[0];
    let $itemsWrapEl;
    if (!vl.ul && !vl.params.createUl) $itemsWrapEl = vl.$el;
    else $itemsWrapEl = vl.$ul;
    extend(vl, {
      $itemsWrapEl,
      itemsWrapEl: $itemsWrapEl[0],
      // DOM cached items
      domCache: {},
      // Temporary DOM Element
      tempDomElement: document2.createElement("ul"),
      // Last repain position
      lastRepaintY: null,
      // Fragment
      fragment: document2.createDocumentFragment(),
      // Props
      pageHeight: void 0,
      rowsPerScreen: void 0,
      rowsBefore: void 0,
      rowsAfter: void 0,
      rowsToRender: void 0,
      maxBufferHeight: 0,
      listHeight: void 0,
      dynamicHeight: typeof vl.params.height === "function",
      autoHeight: vl.params.height === "auto"
    });
    vl.useModules();
    const handleScrollBound = vl.handleScroll.bind(vl);
    const handleResizeBound = vl.handleResize.bind(vl);
    let $pageEl;
    let $tabEl;
    let $panelEl;
    let $popupEl;
    vl.attachEvents = function attachEvents2() {
      $pageEl = vl.$el.parents(".page").eq(0);
      $tabEl = vl.$el.parents(".tab").filter((tabEl) => {
        return dom7_default(tabEl).parent(".tabs").parent(".tabs-animated-wrap, swiper-container.tabs").length === 0;
      }).eq(0);
      $panelEl = vl.$el.parents(".panel").eq(0);
      $popupEl = vl.$el.parents(".popup").eq(0);
      vl.$scrollableParentEl.on("scroll", handleScrollBound);
      if ($pageEl.length) $pageEl.on("page:reinit", handleResizeBound);
      if ($tabEl.length) $tabEl.on("tab:show", handleResizeBound);
      if ($panelEl.length) $panelEl.on("panel:open", handleResizeBound);
      if ($popupEl.length) $popupEl.on("popup:open", handleResizeBound);
      app.on("resize", handleResizeBound);
    };
    vl.detachEvents = function attachEvents2() {
      vl.$scrollableParentEl.off("scroll", handleScrollBound);
      if ($pageEl.length) $pageEl.off("page:reinit", handleResizeBound);
      if ($tabEl.length) $tabEl.off("tab:show", handleResizeBound);
      if ($panelEl.length) $panelEl.off("panel:open", handleResizeBound);
      if ($popupEl.length) $popupEl.off("popup:open", handleResizeBound);
      app.off("resize", handleResizeBound);
    };
    vl.init();
    return vl;
  }
  setListSize(autoHeightRerender) {
    const vl = this;
    const items = vl.filteredItems || vl.items;
    if (!autoHeightRerender) {
      vl.pageHeight = vl.$scrollableParentEl[0].offsetHeight;
    }
    if (vl.dynamicHeight) {
      vl.listHeight = 0;
      vl.heights = [];
      for (let i = 0; i < items.length; i += 1) {
        const itemHeight = vl.params.height(items[i]);
        vl.listHeight += itemHeight;
        vl.heights.push(itemHeight);
      }
    } else if (vl.autoHeight) {
      vl.listHeight = 0;
      if (!vl.heights) vl.heights = [];
      if (!vl.heightsCalculated) vl.heightsCalculated = [];
      const renderedItems = {};
      vl.$itemsWrapEl.find(`[data-virtual-list-index]`).forEach((el) => {
        renderedItems[parseInt(el.getAttribute("data-virtual-list-index"), 10)] = el;
      });
      for (let i = 0; i < items.length; i += 1) {
        const itemIndex = vl.items.indexOf(items[i]);
        const renderedItem = renderedItems[itemIndex];
        if (renderedItem) {
          if (!vl.heightsCalculated.includes(itemIndex)) {
            vl.heights[itemIndex] = renderedItem.offsetHeight;
            vl.heightsCalculated.push(itemIndex);
          }
        }
        if (typeof vl.heights[i] === "undefined") {
          vl.heights[itemIndex] = 40;
        }
        vl.listHeight += vl.heights[itemIndex];
      }
    } else {
      vl.listHeight = Math.ceil(items.length / vl.params.cols) * vl.params.height;
      vl.rowsPerScreen = Math.ceil(vl.pageHeight / vl.params.height);
      vl.rowsBefore = vl.params.rowsBefore || vl.rowsPerScreen * 2;
      vl.rowsAfter = vl.params.rowsAfter || vl.rowsPerScreen;
      vl.rowsToRender = vl.rowsPerScreen + vl.rowsBefore + vl.rowsAfter;
      vl.maxBufferHeight = vl.rowsBefore / 2 * vl.params.height;
    }
    if (vl.updatableScroll || vl.params.setListHeight) {
      vl.$itemsWrapEl.css({
        height: `${vl.listHeight}px`
      });
    }
  }
  render(force, forceScrollTop) {
    const vl = this;
    if (force) vl.lastRepaintY = null;
    let scrollTop = -(vl.$el[0].getBoundingClientRect().top - vl.$scrollableParentEl[0].getBoundingClientRect().top);
    if (typeof forceScrollTop !== "undefined") scrollTop = forceScrollTop;
    if (vl.lastRepaintY === null || Math.abs(scrollTop - vl.lastRepaintY) > vl.maxBufferHeight || !vl.updatableScroll && vl.$scrollableParentEl[0].scrollTop + vl.pageHeight >= vl.$scrollableParentEl[0].scrollHeight) {
      vl.lastRepaintY = scrollTop;
    } else {
      return;
    }
    const items = vl.filteredItems || vl.items;
    let fromIndex;
    let toIndex;
    let heightBeforeFirstItem = 0;
    let heightBeforeLastItem = 0;
    if (vl.dynamicHeight || vl.autoHeight) {
      let itemTop = 0;
      let itemHeight;
      vl.maxBufferHeight = vl.pageHeight;
      for (let j = 0; j < vl.heights.length; j += 1) {
        itemHeight = vl.heights[j];
        if (typeof fromIndex === "undefined") {
          if (itemTop + itemHeight >= scrollTop - vl.pageHeight * 2 * vl.params.dynamicHeightBufferSize) fromIndex = j;
          else heightBeforeFirstItem += itemHeight;
        }
        if (typeof toIndex === "undefined") {
          if (itemTop + itemHeight >= scrollTop + vl.pageHeight * 2 * vl.params.dynamicHeightBufferSize || j === vl.heights.length - 1) toIndex = j + 1;
          heightBeforeLastItem += itemHeight;
        }
        itemTop += itemHeight;
      }
      toIndex = Math.min(toIndex, items.length);
    } else {
      fromIndex = (parseInt(scrollTop / vl.params.height, 10) - vl.rowsBefore) * vl.params.cols;
      if (fromIndex < 0) {
        fromIndex = 0;
      }
      toIndex = Math.min(fromIndex + vl.rowsToRender * vl.params.cols, items.length);
    }
    let topPosition;
    const renderExternalItems = [];
    vl.reachEnd = false;
    let i;
    for (i = fromIndex; i < toIndex; i += 1) {
      let itemEl;
      const index = vl.items.indexOf(items[i]);
      if (i === fromIndex) vl.currentFromIndex = index;
      if (i === toIndex - 1) vl.currentToIndex = index;
      if (vl.filteredItems) {
        if (vl.items[index] === vl.filteredItems[vl.filteredItems.length - 1]) vl.reachEnd = true;
      } else if (index === vl.items.length - 1) vl.reachEnd = true;
      if (vl.params.renderExternal) {
        renderExternalItems.push(items[i]);
      } else if (vl.domCache[index]) {
        itemEl = vl.domCache[index];
        itemEl.f7VirtualListIndex = index;
      } else {
        if (vl.renderItem) {
          vl.tempDomElement.innerHTML = vl.renderItem(items[i], index).trim();
        } else {
          vl.tempDomElement.innerHTML = items[i].toString().trim();
        }
        itemEl = vl.tempDomElement.childNodes[0];
        if (vl.params.cache) vl.domCache[index] = itemEl;
        itemEl.f7VirtualListIndex = index;
      }
      if (i === fromIndex) {
        if (vl.dynamicHeight || vl.autoHeight) {
          topPosition = heightBeforeFirstItem;
        } else {
          topPosition = i * vl.params.height / vl.params.cols;
        }
      }
      if (!vl.params.renderExternal) {
        itemEl.style.top = `${topPosition}px`;
        vl.emit("local::itemBeforeInsert vlItemBeforeInsert", vl, itemEl, items[i]);
        vl.fragment.appendChild(itemEl);
      }
    }
    if (!vl.updatableScroll) {
      if (vl.dynamicHeight || vl.autoHeight) {
        vl.itemsWrapEl.style.height = `${heightBeforeLastItem}px`;
      } else {
        vl.itemsWrapEl.style.height = `${i * vl.params.height / vl.params.cols}px`;
      }
    }
    if (vl.params.renderExternal) {
      if (items && items.length === 0) {
        vl.reachEnd = true;
      }
    } else {
      vl.emit("local::beforeClear vlBeforeClear", vl, vl.fragment);
      vl.itemsWrapEl.innerHTML = "";
      vl.emit("local::itemsBeforeInsert vlItemsBeforeInsert", vl, vl.fragment);
      if (items && items.length === 0) {
        vl.reachEnd = true;
        if (vl.params.emptyTemplate) vl.itemsWrapEl.innerHTML = vl.params.emptyTemplate;
      } else {
        vl.itemsWrapEl.appendChild(vl.fragment);
      }
      vl.emit("local::itemsAfterInsert vlItemsAfterInsert", vl, vl.fragment);
    }
    if (typeof forceScrollTop !== "undefined" && force) {
      vl.$scrollableParentEl.scrollTop(forceScrollTop, 0);
    }
    if (vl.params.renderExternal) {
      vl.params.renderExternal(vl, {
        fromIndex,
        toIndex,
        listHeight: vl.listHeight,
        topPosition,
        items: renderExternalItems
      });
    }
    if (vl.autoHeight) {
      requestAnimationFrame(() => {
        vl.setListSize(true);
      });
    }
  }
  // Filter
  filterItems(indexes, resetScrollTop) {
    if (resetScrollTop === void 0) {
      resetScrollTop = true;
    }
    const vl = this;
    vl.filteredItems = [];
    for (let i = 0; i < indexes.length; i += 1) {
      vl.filteredItems.push(vl.items[indexes[i]]);
    }
    if (resetScrollTop) {
      vl.$scrollableParentEl[0].scrollTop = 0;
    }
    vl.update();
  }
  resetFilter() {
    const vl = this;
    if (vl.params.showFilteredItemsOnly) {
      vl.filteredItems = [];
    } else {
      vl.filteredItems = null;
      delete vl.filteredItems;
    }
    vl.update();
  }
  scrollToItem(index) {
    const vl = this;
    if (index > vl.items.length) return false;
    let itemTop = 0;
    if (vl.dynamicHeight || vl.autoHeight) {
      for (let i = 0; i < index; i += 1) {
        itemTop += vl.heights[i];
      }
    } else {
      itemTop = index * vl.params.height;
    }
    const listTop = vl.$el[0].offsetTop;
    vl.render(true, listTop + itemTop - parseInt(vl.$scrollableParentEl.css("padding-top"), 10));
    return true;
  }
  handleScroll() {
    const vl = this;
    vl.render();
  }
  // Handle resize event
  isVisible() {
    const vl = this;
    return !!(vl.el.offsetWidth || vl.el.offsetHeight || vl.el.getClientRects().length);
  }
  handleResize() {
    const vl = this;
    if (vl.isVisible()) {
      vl.heightsCalculated = [];
      vl.setListSize();
      vl.render(true);
    }
  }
  // Append
  appendItems(items) {
    const vl = this;
    for (let i = 0; i < items.length; i += 1) {
      vl.items.push(items[i]);
    }
    vl.update();
  }
  appendItem(item) {
    const vl = this;
    vl.appendItems([item]);
  }
  // Replace
  replaceAllItems(items) {
    const vl = this;
    vl.items = items;
    delete vl.filteredItems;
    vl.domCache = {};
    vl.update();
  }
  replaceItem(index, item) {
    const vl = this;
    vl.items[index] = item;
    if (vl.params.cache) delete vl.domCache[index];
    vl.update();
  }
  // Prepend
  prependItems(items) {
    const vl = this;
    for (let i = items.length - 1; i >= 0; i -= 1) {
      vl.items.unshift(items[i]);
    }
    if (vl.params.cache) {
      const newCache = {};
      Object.keys(vl.domCache).forEach((cached) => {
        newCache[parseInt(cached, 10) + items.length] = vl.domCache[cached];
      });
      vl.domCache = newCache;
    }
    vl.update();
  }
  prependItem(item) {
    const vl = this;
    vl.prependItems([item]);
  }
  // Move
  moveItem(from, to) {
    const vl = this;
    const fromIndex = from;
    let toIndex = to;
    if (fromIndex === toIndex) return;
    const item = vl.items.splice(fromIndex, 1)[0];
    if (toIndex >= vl.items.length) {
      vl.items.push(item);
      toIndex = vl.items.length - 1;
    } else {
      vl.items.splice(toIndex, 0, item);
    }
    if (vl.params.cache) {
      const newCache = {};
      Object.keys(vl.domCache).forEach((cached) => {
        const cachedIndex = parseInt(cached, 10);
        const leftIndex = fromIndex < toIndex ? fromIndex : toIndex;
        const rightIndex = fromIndex < toIndex ? toIndex : fromIndex;
        const indexShift = fromIndex < toIndex ? -1 : 1;
        if (cachedIndex < leftIndex || cachedIndex > rightIndex) newCache[cachedIndex] = vl.domCache[cachedIndex];
        if (cachedIndex === leftIndex) newCache[rightIndex] = vl.domCache[cachedIndex];
        if (cachedIndex > leftIndex && cachedIndex <= rightIndex) newCache[cachedIndex + indexShift] = vl.domCache[cachedIndex];
      });
      vl.domCache = newCache;
    }
    vl.update();
  }
  // Insert before
  insertItemBefore(index, item) {
    const vl = this;
    if (index === 0) {
      vl.prependItem(item);
      return;
    }
    if (index >= vl.items.length) {
      vl.appendItem(item);
      return;
    }
    vl.items.splice(index, 0, item);
    if (vl.params.cache) {
      const newCache = {};
      Object.keys(vl.domCache).forEach((cached) => {
        const cachedIndex = parseInt(cached, 10);
        if (cachedIndex >= index) {
          newCache[cachedIndex + 1] = vl.domCache[cachedIndex];
        }
      });
      vl.domCache = newCache;
    }
    vl.update();
  }
  // Delete
  deleteItems(indexes) {
    const vl = this;
    let prevIndex;
    let indexShift = 0;
    for (let i = 0; i < indexes.length; i += 1) {
      let index = indexes[i];
      if (typeof prevIndex !== "undefined") {
        if (index > prevIndex) {
          indexShift = -i;
        }
      }
      index += indexShift;
      prevIndex = indexes[i];
      const deletedItem = vl.items.splice(index, 1)[0];
      if (vl.filteredItems && vl.filteredItems.indexOf(deletedItem) >= 0) {
        vl.filteredItems.splice(vl.filteredItems.indexOf(deletedItem), 1);
      }
      if (vl.params.cache) {
        const newCache = {};
        Object.keys(vl.domCache).forEach((cached) => {
          const cachedIndex = parseInt(cached, 10);
          if (cachedIndex === index) {
            delete vl.domCache[index];
          } else if (parseInt(cached, 10) > index) {
            newCache[cachedIndex - 1] = vl.domCache[cached];
          } else {
            newCache[cachedIndex] = vl.domCache[cached];
          }
        });
        vl.domCache = newCache;
      }
    }
    vl.update();
  }
  deleteAllItems() {
    const vl = this;
    vl.items = [];
    delete vl.filteredItems;
    if (vl.params.cache) vl.domCache = {};
    vl.update();
  }
  deleteItem(index) {
    const vl = this;
    vl.deleteItems([index]);
  }
  // Clear cache
  clearCache() {
    const vl = this;
    vl.domCache = {};
  }
  // Update Virtual List
  update(deleteCache) {
    const vl = this;
    if (deleteCache && vl.params.cache) {
      vl.domCache = {};
    }
    vl.heightsCalculated = [];
    vl.setListSize();
    vl.render(true);
  }
  init() {
    const vl = this;
    vl.attachEvents();
    vl.setListSize();
    vl.render();
  }
  destroy() {
    let vl = this;
    vl.detachEvents();
    vl.$el[0].f7VirtualList = null;
    delete vl.$el[0].f7VirtualList;
    deleteProps(vl);
    vl = null;
  }
};
var virtual_list_class_default = VirtualList;

// node_modules/framework7/components/virtual-list/virtual-list.js
var virtual_list_default = {
  name: "virtualList",
  static: {
    VirtualList: virtual_list_class_default
  },
  create() {
    const app = this;
    app.virtualList = ConstructorMethods({
      defaultSelector: ".virtual-list",
      constructor: virtual_list_class_default,
      app,
      domProp: "f7VirtualList"
    });
  }
};

// node_modules/framework7/components/list-index/list-index-class.js
var ListIndex = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const index = this;
    const defaults2 = {
      el: null,
      // where to render indexes
      listEl: null,
      // list el to generate indexes
      indexes: "auto",
      // or array of indexes
      iosItemHeight: 14,
      mdItemHeight: 14,
      scrollList: true,
      label: false,
      // eslint-disable-next-line
      renderItem(itemContent, itemIndex) {
        return `
          <li>${itemContent}</li>
        `.trim();
      },
      renderSkipPlaceholder() {
        return '<li class="list-index-skip-placeholder"></li>';
      },
      on: {}
    };
    index.useModulesParams(defaults2);
    index.params = extend(defaults2, params);
    let $el;
    let $listEl;
    let $pageContentEl;
    let $ul;
    if (index.params.el) {
      $el = dom7_default(index.params.el);
    } else {
      return index;
    }
    if ($el[0].f7ListIndex) {
      return $el[0].f7ListIndex;
    }
    $ul = $el.find("ul");
    if ($ul.length === 0) {
      $ul = dom7_default("<ul></ul>");
      $el.append($ul);
    }
    if (index.params.listEl) {
      $listEl = dom7_default(index.params.listEl);
    }
    if (index.params.indexes === "auto" && !$listEl) {
      return index;
    }
    if ($listEl) {
      $pageContentEl = $listEl.parents(".page-content").eq(0);
    } else {
      $pageContentEl = $el.siblings(".page-content").eq(0);
      if ($pageContentEl.length === 0) {
        $pageContentEl = $el.parents(".page").eq(0).find(".page-content").eq(0);
      }
    }
    $el[0].f7ListIndex = index;
    extend(index, {
      app,
      $el,
      el: $el && $el[0],
      $ul,
      ul: $ul && $ul[0],
      $listEl,
      listEl: $listEl && $listEl[0],
      $pageContentEl,
      pageContentEl: $pageContentEl && $pageContentEl[0],
      indexes: params.indexes,
      height: 0,
      skipRate: 0
    });
    index.useModules();
    function handleResize() {
      const height = {
        index
      };
      index.calcSize();
      if (height !== index.height) {
        index.render();
      }
    }
    function handleClick(e) {
      const $clickedLi = dom7_default(e.target).closest("li");
      if (!$clickedLi.length) return;
      let itemIndex = $clickedLi.index();
      if (index.skipRate > 0) {
        const percentage = itemIndex / ($clickedLi.siblings("li").length - 1);
        itemIndex = Math.round((index.indexes.length - 1) * percentage);
      }
      const itemContent = index.indexes[itemIndex];
      index.$el.trigger("listindex:click", {
        content: itemContent,
        index: itemIndex
      });
      index.emit("local::click listIndexClick", index, itemContent, itemIndex);
      index.$el.trigger("listindex:select", {
        content: itemContent,
        index: itemIndex
      });
      index.emit("local::select listIndexSelect", index, itemContent, itemIndex);
      if (index.$listEl && index.params.scrollList) {
        index.scrollListToIndex(itemContent, itemIndex);
      }
    }
    const touchesStart = {};
    let isTouched;
    let isMoved;
    let topPoint;
    let bottomPoint;
    let $labelEl;
    let previousIndex = null;
    function handleTouchStart(e) {
      const $children = $ul.children();
      if (!$children.length) return;
      topPoint = $children[0].getBoundingClientRect().top;
      bottomPoint = $children[$children.length - 1].getBoundingClientRect().top + $children[0].offsetHeight;
      touchesStart.x = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
      touchesStart.y = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
      isTouched = true;
      isMoved = false;
      previousIndex = null;
    }
    function handleTouchMove(e) {
      if (!isTouched) return;
      if (!isMoved && index.params.label) {
        $labelEl = dom7_default('<span class="list-index-label"></span>');
        $el.append($labelEl);
      }
      isMoved = true;
      const pageY = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
      e.preventDefault();
      let percentage = (pageY - topPoint) / (bottomPoint - topPoint);
      percentage = Math.min(Math.max(percentage, 0), 1);
      const itemIndex = Math.round((index.indexes.length - 1) * percentage);
      const itemContent = index.indexes[itemIndex];
      const ulHeight = bottomPoint - topPoint;
      const bubbleBottom = (index.height - ulHeight) / 2 + (1 - percentage) * ulHeight;
      if (itemIndex !== previousIndex) {
        if (index.params.label) {
          $labelEl.html(itemContent).transform(`translateY(-${bubbleBottom}px)`);
        }
        if (index.$listEl && index.params.scrollList) {
          index.scrollListToIndex(itemContent, itemIndex);
        }
      }
      previousIndex = itemIndex;
      index.$el.trigger("listindex:select");
      index.emit("local::select listIndexSelect", index, itemContent, itemIndex);
    }
    function handleTouchEnd() {
      if (!isTouched) return;
      isTouched = false;
      isMoved = false;
      if (index.params.label) {
        if ($labelEl) $labelEl.remove();
        $labelEl = void 0;
      }
    }
    const passiveListener = getSupport().passiveListener ? {
      passive: true
    } : false;
    index.attachEvents = function attachEvents2() {
      $el.parents(".tab").on("tab:show", handleResize);
      $el.parents(".page").on("page:reinit", handleResize);
      $el.parents(".panel").on("panel:open", handleResize);
      $el.parents(".sheet-modal, .actions-modal, .popup, .popover, .login-screen, .dialog, .toast").on("modal:open", handleResize);
      app.on("resize", handleResize);
      $el.on("click", handleClick);
      $el.on(app.touchEvents.start, handleTouchStart, passiveListener);
      app.on("touchmove:active", handleTouchMove);
      app.on("touchend:passive", handleTouchEnd);
    };
    index.detachEvents = function attachEvents2() {
      $el.parents(".tab").off("tab:show", handleResize);
      $el.parents(".page").off("page:reinit", handleResize);
      $el.parents(".panel").off("panel:open", handleResize);
      $el.parents(".sheet-modal, .actions-modal, .popup, .popover, .login-screen, .dialog, .toast").off("modal:open", handleResize);
      app.off("resize", handleResize);
      $el.off("click", handleClick);
      $el.off(app.touchEvents.start, handleTouchStart, passiveListener);
      app.off("touchmove:active", handleTouchMove);
      app.off("touchend:passive", handleTouchEnd);
    };
    index.init();
    return index;
  }
  // eslint-disable-next-line
  scrollListToIndex(itemContent, itemIndex) {
    const index = this;
    const {
      $listEl,
      $pageContentEl,
      app
    } = index;
    if (!$listEl || !$pageContentEl || $pageContentEl.length === 0) return index;
    let $scrollToEl;
    $listEl.find(".list-group-title").each((el) => {
      if ($scrollToEl) return;
      const $el = dom7_default(el);
      if ($el.text() === itemContent) {
        $scrollToEl = $el;
      }
    });
    if (!$scrollToEl || $scrollToEl.length === 0) return index;
    const parentTop = $scrollToEl.parent().offset().top;
    let paddingTop = parseInt($pageContentEl.css("padding-top"), 10);
    const scrollTop = $pageContentEl[0].scrollTop;
    const scrollToElTop = $scrollToEl.offset().top;
    if ($pageContentEl.parents(".page-with-navbar-large").length) {
      const navbarInnerEl = app.navbar.getElByPage($pageContentEl.parents(".page-with-navbar-large").eq(0));
      const $titleLargeEl = dom7_default(navbarInnerEl).find(".title-large");
      if ($titleLargeEl.length) {
        paddingTop -= $titleLargeEl[0].offsetHeight || 0;
      }
    }
    if (parentTop <= paddingTop) {
      $pageContentEl.scrollTop(parentTop + scrollTop - paddingTop);
    } else {
      $pageContentEl.scrollTop(scrollToElTop + scrollTop - paddingTop);
    }
    return index;
  }
  renderSkipPlaceholder() {
    const index = this;
    return index.params.renderSkipPlaceholder.call(index);
  }
  renderItem(itemContent, itemIndex) {
    const index = this;
    return index.params.renderItem.call(index, itemContent, itemIndex);
  }
  render() {
    const index = this;
    const {
      $ul,
      indexes,
      skipRate
    } = index;
    let wasSkipped;
    const html = indexes.map((itemContent, itemIndex) => {
      if (itemIndex % skipRate !== 0 && skipRate > 0) {
        wasSkipped = true;
        return "";
      }
      let itemHtml = index.renderItem(itemContent, itemIndex);
      if (wasSkipped) {
        itemHtml = index.renderSkipPlaceholder() + itemHtml;
      }
      wasSkipped = false;
      return itemHtml;
    }).join("");
    $ul.html(html);
    return index;
  }
  calcSize() {
    const index = this;
    const {
      app,
      params,
      el,
      indexes
    } = index;
    const height = el.offsetHeight;
    const itemHeight = params[`${app.theme}ItemHeight`];
    const maxItems = Math.floor(height / itemHeight);
    const items = indexes.length;
    let skipRate = 0;
    if (items > maxItems) {
      skipRate = Math.ceil((items * 2 - 1) / maxItems);
    }
    index.height = height;
    index.skipRate = skipRate;
    return index;
  }
  calcIndexes() {
    const index = this;
    if (index.params.indexes === "auto") {
      index.indexes = [];
      index.$listEl.find(".list-group-title").each((el) => {
        const elContent = dom7_default(el).text();
        if (index.indexes.indexOf(elContent) < 0) {
          index.indexes.push(elContent);
        }
      });
    } else {
      index.indexes = index.params.indexes;
    }
    return index;
  }
  update() {
    const index = this;
    index.calcIndexes();
    index.calcSize();
    index.render();
    return index;
  }
  init() {
    const index = this;
    index.calcIndexes();
    index.calcSize();
    index.render();
    index.attachEvents();
  }
  destroy() {
    let index = this;
    index.$el.trigger("listindex:beforedestroy", index);
    index.emit("local::beforeDestroy listIndexBeforeDestroy");
    index.detachEvents();
    if (index.$el[0]) {
      index.$el[0].f7ListIndex = null;
      delete index.$el[0].f7ListIndex;
    }
    deleteProps(index);
    index = null;
  }
};
var list_index_class_default = ListIndex;

// node_modules/framework7/components/list-index/list-index.js
var list_index_default = {
  name: "listIndex",
  static: {
    ListIndex: list_index_class_default
  },
  create() {
    const app = this;
    app.listIndex = ConstructorMethods({
      defaultSelector: ".list-index",
      constructor: list_index_class_default,
      app,
      domProp: "f7ListIndex"
    });
  },
  on: {
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".list-index-init").each((listIndexEl) => {
        const params = extend(dom7_default(listIndexEl).dataset(), {
          el: listIndexEl
        });
        app.listIndex.create(params);
      });
    },
    tabBeforeRemove(tabEl) {
      dom7_default(tabEl).find(".list-index-init").each((listIndexEl) => {
        if (listIndexEl.f7ListIndex) listIndexEl.f7ListIndex.destroy();
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".list-index-init").each((listIndexEl) => {
        const params = extend(dom7_default(listIndexEl).dataset(), {
          el: listIndexEl
        });
        app.listIndex.create(params);
      });
    },
    pageBeforeRemove(page) {
      page.$el.find(".list-index-init").each((listIndexEl) => {
        if (listIndexEl.f7ListIndex) listIndexEl.f7ListIndex.destroy();
      });
    }
  },
  vnode: {
    "list-index-init": {
      insert(vnode) {
        const app = this;
        const listIndexEl = vnode.elm;
        const params = extend(dom7_default(listIndexEl).dataset(), {
          el: listIndexEl
        });
        app.listIndex.create(params);
      },
      destroy(vnode) {
        const listIndexEl = vnode.elm;
        if (listIndexEl.f7ListIndex) listIndexEl.f7ListIndex.destroy();
      }
    }
  }
};

// node_modules/framework7/components/timeline/timeline.js
var timeline_default = {
  name: "timeline"
};

// node_modules/framework7/components/tabs/tabs.js
var Tab = {
  show() {
    const app = this;
    let tabEl;
    let tabLinkEl;
    let animate;
    let tabRoute;
    let animatedInit;
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }
    if (args.length === 1 && args[0] && args[0].constructor === Object) {
      tabEl = args[0].tabEl;
      tabLinkEl = args[0].tabLinkEl;
      animate = args[0].animate;
      tabRoute = args[0].tabRoute;
      animatedInit = args[0].animatedInit;
    } else {
      [tabEl, tabLinkEl, animate, tabRoute] = args;
      if (typeof args[1] === "boolean") {
        [tabEl, animate, tabLinkEl, tabRoute] = args;
        if (args.length > 2 && tabLinkEl.constructor === Object) {
          [tabEl, animate, tabRoute, tabLinkEl] = args;
        }
      }
    }
    if (typeof animate === "undefined") animate = true;
    const $newTabEl = dom7_default(tabEl);
    if (tabRoute && $newTabEl[0]) {
      $newTabEl[0].f7TabRoute = tabRoute;
    }
    if (!animatedInit && ($newTabEl.length === 0 || $newTabEl.hasClass("tab-active"))) {
      return {
        $newTabEl,
        newTabEl: $newTabEl[0]
      };
    }
    let $tabLinkEl;
    if (tabLinkEl) $tabLinkEl = dom7_default(tabLinkEl);
    const $tabsEl = $newTabEl.parent(".tabs");
    if ($tabsEl.length === 0) {
      return {
        $newTabEl,
        newTabEl: $newTabEl[0]
      };
    }
    if (app.swipeout) app.swipeout.allowOpen = true;
    const tabsChangedCallbacks = [];
    function onTabsChanged(callback) {
      tabsChangedCallbacks.push(callback);
    }
    function tabsChanged() {
      tabsChangedCallbacks.forEach((callback) => {
        callback();
      });
    }
    let animated = false;
    if ($tabsEl.parent().hasClass("tabs-animated-wrap")) {
      $tabsEl.parent()[animate ? "removeClass" : "addClass"]("not-animated");
      const transitionDuration = parseFloat($tabsEl.css("transition-duration").replace(",", "."));
      if (animate && transitionDuration) {
        $tabsEl.transitionEnd(tabsChanged);
        animated = true;
      }
      const tabsTranslate = (app.rtl ? $newTabEl.index() : -$newTabEl.index()) * 100;
      $tabsEl.transform(`translate3d(${tabsTranslate}%,0,0)`);
    }
    let swiper;
    if ($tabsEl[0].nodeName.toLowerCase() === "swiper-container" && app.swiper) {
      swiper = $tabsEl[0].swiper;
      const newTabIndex = swiper.slides.indexOf($newTabEl[0]);
      if (swiper && swiper.activeIndex !== newTabIndex) {
        animated = true;
        swiper.once("slideChangeTransitionEnd", () => {
          tabsChanged();
        }).slideTo(newTabIndex, animate ? void 0 : 0);
      } else if (swiper && swiper.animating) {
        animated = true;
        swiper.once("slideChangeTransitionEnd", () => {
          tabsChanged();
        });
      }
    }
    const $oldTabEl = $tabsEl.children(".tab-active");
    $oldTabEl.removeClass("tab-active");
    if (!animatedInit && (!swiper || swiper && !swiper.animating || swiper && tabRoute)) {
      if ($oldTabEl.hasClass("view") && $oldTabEl.children(".page").length) {
        $oldTabEl.children(".page").each((pageEl) => {
          dom7_default(pageEl).trigger("page:tabhide");
          app.emit("pageTabHide", pageEl);
        });
      }
      $oldTabEl.trigger("tab:hide");
      app.emit("tabHide", $oldTabEl[0]);
    }
    $newTabEl.addClass("tab-active");
    if (!animatedInit && (!swiper || swiper && !swiper.animating || swiper && tabRoute)) {
      if ($newTabEl.hasClass("view") && $newTabEl.children(".page").length) {
        $newTabEl.children(".page").each((pageEl) => {
          dom7_default(pageEl).trigger("page:tabshow");
          app.emit("pageTabShow", pageEl);
        });
      }
      $newTabEl.trigger("tab:show");
      app.emit("tabShow", $newTabEl[0]);
    }
    if (!$tabLinkEl) {
      if (typeof tabEl === "string") $tabLinkEl = dom7_default(`.tab-link[href="${tabEl}"]`);
      else $tabLinkEl = dom7_default(`.tab-link[href="#${$newTabEl.attr("id")}"]`);
      if (!$tabLinkEl || $tabLinkEl && $tabLinkEl.length === 0) {
        dom7_default("[data-tab]").each((el) => {
          if ($newTabEl.is(dom7_default(el).attr("data-tab"))) $tabLinkEl = dom7_default(el);
        });
      }
      if (tabRoute && (!$tabLinkEl || $tabLinkEl && $tabLinkEl.length === 0)) {
        $tabLinkEl = dom7_default(`[data-route-tab-id="${tabRoute.route.tab.id}"]`);
        if ($tabLinkEl.length === 0) {
          $tabLinkEl = dom7_default(`.tab-link[href="${tabRoute.url}"]`);
        }
      }
      if ($tabLinkEl.length > 1 && $newTabEl.parents(".page").length) {
        $tabLinkEl = $tabLinkEl.filter((tabLinkElement) => {
          return dom7_default(tabLinkElement).parents(".page")[0] === $newTabEl.parents(".page")[0];
        });
        if (app.theme === "ios" && $tabLinkEl.length === 0 && tabRoute) {
          const $pageEl = $newTabEl.parents(".page");
          const $navbarEl = dom7_default(app.navbar.getElByPage($pageEl));
          $tabLinkEl = $navbarEl.find(`[data-route-tab-id="${tabRoute.route.tab.id}"]`);
          if ($tabLinkEl.length === 0) {
            $tabLinkEl = $navbarEl.find(`.tab-link[href="${tabRoute.url}"]`);
          }
        }
      }
    }
    if ($tabLinkEl.length > 0) {
      let $oldTabLinkEl;
      if ($oldTabEl && $oldTabEl.length > 0) {
        const oldTabId = $oldTabEl.attr("id");
        if (oldTabId) {
          $oldTabLinkEl = dom7_default(`.tab-link[href="#${oldTabId}"]`);
          if (!$oldTabLinkEl || $oldTabLinkEl && $oldTabLinkEl.length === 0) {
            $oldTabLinkEl = dom7_default(`.tab-link[data-route-tab-id="${oldTabId}"]`);
          }
        }
        if (!$oldTabLinkEl || $oldTabLinkEl && $oldTabLinkEl.length === 0) {
          dom7_default("[data-tab]").each((tabLinkElement) => {
            if ($oldTabEl.is(dom7_default(tabLinkElement).attr("data-tab"))) $oldTabLinkEl = dom7_default(tabLinkElement);
          });
        }
        if (!$oldTabLinkEl || $oldTabLinkEl && $oldTabLinkEl.length === 0) {
          $oldTabLinkEl = $tabLinkEl.siblings(".tab-link-active");
        }
      } else if (tabRoute) {
        $oldTabLinkEl = $tabLinkEl.siblings(".tab-link-active");
      }
      if ($oldTabLinkEl && $oldTabLinkEl.length > 1 && $oldTabEl && $oldTabEl.parents(".page").length) {
        $oldTabLinkEl = $oldTabLinkEl.filter((tabLinkElement) => {
          return dom7_default(tabLinkElement).parents(".page")[0] === $oldTabEl.parents(".page")[0];
        });
      }
      if ($oldTabLinkEl && $oldTabLinkEl.length > 0) $oldTabLinkEl.removeClass("tab-link-active");
      if ($tabLinkEl && $tabLinkEl.length > 0) {
        $tabLinkEl.addClass("tab-link-active");
        const $tabbarEl = $tabLinkEl.parents(".tabbar, .tabbar-icons");
        const hasHighlight = app.toolbar && $tabbarEl.length > 0 && ($tabbarEl.hasClass("tabbar-highlight") || app.theme !== "ios");
        if (hasHighlight) {
          app.toolbar.setHighlight($tabbarEl);
        }
      }
    }
    return {
      $newTabEl,
      newTabEl: $newTabEl[0],
      $oldTabEl,
      oldTabEl: $oldTabEl[0],
      onTabsChanged,
      animated
    };
  }
};
var tabs_default = {
  name: "tabs",
  create() {
    const app = this;
    extend(app, {
      tab: {
        show: Tab.show.bind(app)
      }
    });
  },
  on: {
    "pageInit tabMounted": function onInit(pageOrTabEl) {
      const $el = dom7_default(pageOrTabEl.el || pageOrTabEl);
      const animatedTabEl = $el.find(".tabs-animated-wrap > .tabs > .tab-active")[0];
      if (!animatedTabEl) return;
      const app = this;
      app.tab.show({
        tabEl: animatedTabEl,
        animatedInit: true,
        animate: false
      });
    }
  },
  clicks: {
    ".tab-link": function tabLinkClick($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      if ($clickedEl.attr("href") && $clickedEl.attr("href").indexOf("#") === 0 || $clickedEl.attr("data-tab")) {
        const app = this;
        app.tab.show({
          tabEl: data.tab || $clickedEl.attr("href"),
          tabLinkEl: $clickedEl,
          animate: data.animate
        });
      }
    }
  }
};

// node_modules/framework7/components/panel/swipe-panel.js
function swipePanel(panel) {
  const app = panel.app;
  if (panel.swipeInitialized) {
    return;
  }
  extend(panel, {
    swipeable: true,
    swipeInitialized: true
  });
  const params = panel.params;
  const {
    $el,
    $backdropEl,
    side,
    effect
  } = panel;
  let otherPanel;
  let isTouched;
  let isGestureStarted;
  let isMoved;
  let isScrolling;
  let isInterrupted;
  const touchesStart = {};
  let touchStartTime;
  let touchesDiff;
  let translate2;
  let backdropOpacity;
  let panelWidth;
  let direction;
  let $viewEl;
  let touchMoves = 0;
  function handleTouchStart(e) {
    if (!panel.swipeable || isGestureStarted) return;
    if (!app.panel.allowOpen || !params.swipe && !params.swipeOnlyClose || isTouched) return;
    if (dom7_default(".modal-in:not(.toast):not(.notification), .photo-browser-in").length > 0) return;
    otherPanel = app.panel.get(side === "left" ? "right" : "left") || {};
    const otherPanelOpened = otherPanel.opened && otherPanel.$el && !otherPanel.$el.hasClass("panel-in-breakpoint");
    if (!panel.opened && otherPanelOpened) {
      return;
    }
    if (!params.swipeOnlyClose) {
      if (otherPanelOpened) return;
    }
    if (e.target && e.target.nodeName.toLowerCase() === "input" && e.target.type === "range") return;
    if (dom7_default(e.target).closest(".range-slider, swiper-container.tabs, .calendar-months, .no-swipe-panel, .card-opened").length > 0) return;
    touchesStart.x = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
    touchesStart.y = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
    if (params.swipeOnlyClose && !panel.opened) {
      return;
    }
    if (params.swipeActiveArea && !panel.opened) {
      if (side === "left") {
        if (touchesStart.x > params.swipeActiveArea) return;
      }
      if (side === "right") {
        if (touchesStart.x < app.width - params.swipeActiveArea) return;
      }
    }
    touchMoves = 0;
    $viewEl = dom7_default(panel.getViewEl());
    isMoved = false;
    isTouched = true;
    isScrolling = void 0;
    isInterrupted = false;
    touchStartTime = now();
    direction = void 0;
  }
  function handleTouchMove(e) {
    if (!isTouched || isGestureStarted || isInterrupted) return;
    touchMoves += 1;
    if (touchMoves < 2) return;
    if (e.f7PreventSwipePanel || app.preventSwipePanelBySwipeBack || app.preventSwipePanel) {
      isTouched = false;
      return;
    }
    const pageX = e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX;
    const pageY = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
    if (typeof isScrolling === "undefined") {
      isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));
    }
    if (isScrolling) {
      isTouched = false;
      return;
    }
    if (!direction) {
      if (pageX > touchesStart.x) {
        direction = "to-right";
      } else {
        direction = "to-left";
      }
      if (params.swipeActiveArea > 0 && !panel.opened) {
        if (side === "left" && touchesStart.x > params.swipeActiveArea) {
          isTouched = false;
          return;
        }
        if (side === "right" && touchesStart.x < app.width - params.swipeActiveArea) {
          isTouched = false;
          return;
        }
      }
      if ($el.hasClass("panel-in-breakpoint")) {
        isTouched = false;
        return;
      }
      if (side === "left" && direction === "to-left" && !$el.hasClass("panel-in") || side === "right" && direction === "to-right" && !$el.hasClass("panel-in")) {
        isTouched = false;
        return;
      }
    }
    let threshold = panel.opened ? 0 : -params.swipeThreshold;
    if (side === "right") threshold = -threshold;
    if (!isMoved) {
      if (!panel.opened) {
        panel.insertToRoot();
        $el.addClass("panel-in-swipe");
        if ($backdropEl) $backdropEl.css("visibility", "visible");
        $el.trigger("panel:swipeopen");
        panel.emit("local::swipeOpen panelSwipeOpen", panel);
      }
      panelWidth = $el[0].offsetWidth;
      if (effect === "reveal" && $el.hasClass("panel-in-collapsed")) {
        panelWidth -= parseFloat($viewEl.css(`margin-${side}`));
      }
      $el.transition(0);
    }
    isMoved = true;
    if (e.cancelable) {
      e.preventDefault();
    }
    touchesDiff = pageX - touchesStart.x + threshold;
    const startTranslate = effect === "floating" ? 8 : 0;
    if (side === "right") {
      if (effect === "cover" || effect === "push" || effect === "floating") {
        translate2 = touchesDiff + (panel.opened ? startTranslate : panelWidth);
        if (translate2 < 0 - startTranslate) translate2 = -startTranslate;
        if (translate2 > panelWidth) {
          translate2 = panelWidth;
        }
      } else {
        translate2 = touchesDiff - (panel.opened ? panelWidth : 0);
        if (translate2 > 0) translate2 = 0;
        if (translate2 < -panelWidth) {
          translate2 = -panelWidth;
        }
      }
    } else {
      translate2 = touchesDiff + (panel.opened ? panelWidth : startTranslate);
      if (translate2 < 0) translate2 = 0;
      if (translate2 > panelWidth + startTranslate) {
        translate2 = panelWidth + startTranslate;
      }
    }
    const noFollowProgress = Math.abs(translate2 / panelWidth);
    if (effect === "reveal") {
      if (!params.swipeNoFollow) {
        $viewEl.transform(`translate3d(${translate2}px,0,0)`).transition(0);
        if ($backdropEl) $backdropEl.transform(`translate3d(${translate2}px,0,0)`).transition(0);
      }
      $el.trigger("panel:swipe", Math.abs(translate2 / panelWidth));
      panel.emit("local::swipe panelSwipe", panel, Math.abs(translate2 / panelWidth));
    } else {
      if (side === "left") translate2 -= panelWidth;
      if (!params.swipeNoFollow) {
        backdropOpacity = 1 - Math.abs(translate2 / panelWidth);
        if ($backdropEl) {
          $backdropEl.transition(0);
          $backdropEl.css({
            opacity: backdropOpacity
          });
        }
        $el.transform(`translate3d(${translate2}px,0,0)`).transition(0);
        if (effect === "push") {
          const viewTranslate = side === "left" ? translate2 + panelWidth : translate2 - panelWidth;
          $viewEl.transform(`translate3d(${viewTranslate}px,0,0)`).transition(0);
          if ($backdropEl) {
            $backdropEl.transform(`translate3d(${viewTranslate}px,0,0)`).transition(0);
          }
        }
      }
      $el.trigger("panel:swipe", Math.abs(translate2 / panelWidth));
      panel.emit("local::swipe panelSwipe", panel, Math.abs(translate2 / panelWidth));
    }
    if (params.swipeNoFollow) {
      const stateChanged = panel.opened && noFollowProgress === 0 || !panel.opened && noFollowProgress === 1;
      if (stateChanged) {
        isInterrupted = true;
        handleTouchEnd(e);
      }
    }
  }
  function handleTouchEnd(e) {
    if (!isTouched || !isMoved) {
      isTouched = false;
      isMoved = false;
      return;
    }
    const isGesture = e.type === "gesturestart" || isGestureStarted;
    isTouched = false;
    isMoved = false;
    const timeDiff = (/* @__PURE__ */ new Date()).getTime() - touchStartTime;
    let action;
    const startTranslate = effect === "floating" ? side === "left" ? 8 : -8 : 0;
    const edge = (translate2 === startTranslate || Math.abs(translate2) === panelWidth) && !params.swipeNoFollow;
    const threshold = params.swipeThreshold || 0;
    if (isGesture) {
      action = "reset";
    } else if (!panel.opened) {
      if (Math.abs(touchesDiff) < threshold) {
        action = "reset";
      } else if (effect === "cover" || effect === "push" || effect === "floating") {
        if (translate2 === 0 + startTranslate) {
          action = "swap";
        } else if (timeDiff < 300 && Math.abs(translate2) > 0) {
          action = "swap";
        } else if (timeDiff >= 300 && Math.abs(translate2) < panelWidth / 2) {
          action = "swap";
        } else {
          action = "reset";
        }
      } else if (translate2 === 0) {
        action = "reset";
      } else if (timeDiff < 300 && Math.abs(translate2) > 0 || timeDiff >= 300 && Math.abs(translate2) >= panelWidth / 2) {
        action = "swap";
      } else {
        action = "reset";
      }
    } else if (effect === "cover" || effect === "push" || effect === "floating") {
      if (translate2 === 0) {
        action = "reset";
      } else if (timeDiff < 300 && Math.abs(translate2) > 0) {
        action = "swap";
      } else if (timeDiff >= 300 && Math.abs(translate2) < panelWidth / 2) {
        action = "reset";
      } else {
        action = "swap";
      }
    } else if (translate2 === -panelWidth) {
      action = "reset";
    } else if (timeDiff < 300 && Math.abs(translate2) >= 0 || timeDiff >= 300 && Math.abs(translate2) <= panelWidth / 2) {
      if (side === "left" && translate2 === panelWidth) action = "reset";
      else action = "swap";
    } else {
      action = "reset";
    }
    if (action === "swap") {
      if (panel.opened) {
        panel.close(!edge);
      } else {
        panel.open(!edge);
      }
    }
    let removePanelInClass = true;
    if (action === "reset") {
      if (!panel.opened) {
        if (edge) {
          $el.removeClass("panel-in-swipe");
        } else {
          removePanelInClass = false;
          const target = effect === "reveal" ? $viewEl : $el;
          panel.setStateClasses("before-closing");
          target.transitionEnd(() => {
            if ($el.hasClass("panel-in")) return;
            $el.removeClass("panel-in-swipe");
            panel.setStateClasses("after-closing");
          });
        }
      }
    }
    if (effect === "reveal" || effect === "push") {
      nextFrame(() => {
        $viewEl.transition("");
        $viewEl.transform("");
      });
    }
    if (removePanelInClass) {
      $el.removeClass("panel-in-swipe");
    }
    $el.transition("").transform("");
    if ($backdropEl) {
      $backdropEl.transform("").transition("").css({
        opacity: "",
        visibility: ""
      });
    }
  }
  function handleGestureStart(e) {
    isGestureStarted = true;
    handleTouchEnd(e);
  }
  function handleGestureEnd() {
    isGestureStarted = false;
  }
  app.on("touchstart:passive", handleTouchStart);
  app.on("touchmove:active", handleTouchMove);
  app.on("touchend:passive", handleTouchEnd);
  app.on("gesturestart", handleGestureStart);
  app.on("gestureend", handleGestureEnd);
  panel.on("panelDestroy", () => {
    app.off("touchstart:passive", handleTouchStart);
    app.off("touchmove:active", handleTouchMove);
    app.off("touchend:passive", handleTouchEnd);
    app.off("gesturestart", handleGestureStart);
    app.off("gestureend", handleGestureEnd);
  });
}
var swipe_panel_default = swipePanel;

// node_modules/framework7/components/panel/resizable-panel.js
function resizablePanel(panel) {
  const app = panel.app;
  const support2 = getSupport();
  if (panel.resizableInitialized) return;
  extend(panel, {
    resizable: true,
    resizableWidth: null,
    resizableInitialized: true
  });
  const $htmlEl = dom7_default("html");
  const {
    $el,
    $backdropEl,
    side,
    effect
  } = panel;
  if (!$el) return;
  let isTouched;
  let isMoved;
  const touchesStart = {};
  let touchesDiff;
  let panelWidth;
  let $viewEl;
  let panelMinWidth;
  let panelMaxWidth;
  let visibleByBreakpoint;
  const isPushingPanel = effect !== "cover" && effect !== "floating";
  function transformCSSWidth(v) {
    if (!v) return null;
    if (v.indexOf("%") >= 0 || v.indexOf("vw") >= 0) {
      return parseInt(v, 10) / 100 * app.width;
    }
    const newV = parseInt(v, 10);
    if (Number.isNaN(newV)) return null;
    return newV;
  }
  function isResizable() {
    return panel.resizable && $el.hasClass("panel-resizable");
  }
  function handleTouchStart(e) {
    if (!isResizable()) return;
    touchesStart.x = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
    touchesStart.y = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
    isMoved = false;
    isTouched = true;
    panelMinWidth = transformCSSWidth($el.css("min-width"));
    panelMaxWidth = transformCSSWidth($el.css("max-width"));
    visibleByBreakpoint = $el.hasClass("panel-in-breakpoint");
  }
  function handleTouchMove(e) {
    if (!isTouched) return;
    const pageX = e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX;
    if (!isMoved) {
      panelWidth = $el[0].offsetWidth;
      $el.transition(0);
      $el.addClass("panel-resizing");
      $htmlEl.css("cursor", "col-resize");
      if (isPushingPanel || visibleByBreakpoint) {
        $viewEl = dom7_default(panel.getViewEl());
        if (panel.$containerEl && panel.$containerEl.hasClass("page")) {
          $viewEl.add(panel.$containerEl.children(".page-content, .tabs, .fab"));
        }
      }
      if (isPushingPanel && !visibleByBreakpoint) {
        $backdropEl.transition(0);
        $viewEl.transition(0);
      }
    }
    isMoved = true;
    e.preventDefault();
    touchesDiff = pageX - touchesStart.x;
    let newPanelWidth = side === "left" ? panelWidth + touchesDiff : panelWidth - touchesDiff;
    if (panelMinWidth && !Number.isNaN(panelMinWidth)) {
      newPanelWidth = Math.max(newPanelWidth, panelMinWidth);
    }
    if (panelMaxWidth && !Number.isNaN(panelMaxWidth)) {
      newPanelWidth = Math.min(newPanelWidth, panelMaxWidth);
    }
    newPanelWidth = Math.min(Math.max(newPanelWidth, 0), app.width);
    panel.resizableWidth = newPanelWidth;
    $el[0].style.width = `${newPanelWidth}px`;
    if (isPushingPanel && !visibleByBreakpoint) {
      if ($viewEl) {
        $viewEl.transform(`translate3d(${side === "left" ? newPanelWidth : -newPanelWidth}px, 0, 0)`);
      }
      if ($backdropEl) {
        $backdropEl.transform(`translate3d(${side === "left" ? newPanelWidth : -newPanelWidth}px, 0, 0)`);
      }
    } else if (visibleByBreakpoint && $viewEl) {
      $viewEl.css(`margin-${side}`, `${newPanelWidth}px`);
    }
    $el.trigger("panel:resize", newPanelWidth);
    panel.emit("local::resize panelResize", panel, newPanelWidth);
  }
  function handleTouchEnd() {
    dom7_default("html").css("cursor", "");
    if (!isTouched || !isMoved) {
      isTouched = false;
      isMoved = false;
      return;
    }
    isTouched = false;
    isMoved = false;
    $htmlEl[0].style.setProperty(`--f7-panel-${side}-width`, `${panel.resizableWidth}px`);
    $el[0].style.width = "";
    if (isPushingPanel && !visibleByBreakpoint) {
      $viewEl.transform("");
      $backdropEl.transform("");
    }
    $el.removeClass("panel-resizing");
    nextFrame(() => {
      $el.transition("");
      if (isPushingPanel) {
        $backdropEl.transition("");
        if ($viewEl) $viewEl.transition("");
      }
    });
  }
  function handleResize() {
    if (!panel.opened || !panel.resizableWidth) return;
    panelMinWidth = transformCSSWidth($el.css("min-width"));
    panelMaxWidth = transformCSSWidth($el.css("max-width"));
    if (panelMinWidth && !Number.isNaN(panelMinWidth) && panel.resizableWidth < panelMinWidth) {
      panel.resizableWidth = Math.max(panel.resizableWidth, panelMinWidth);
    }
    if (panelMaxWidth && !Number.isNaN(panelMaxWidth) && panel.resizableWidth > panelMaxWidth) {
      panel.resizableWidth = Math.min(panel.resizableWidth, panelMaxWidth);
    }
    panel.resizableWidth = Math.min(Math.max(panel.resizableWidth, 0), app.width);
    $htmlEl[0].style.setProperty(`--f7-panel-${side}-width`, `${panel.resizableWidth}px`);
  }
  if (panel.$el.find(".panel-resize-handler").length === 0) {
    panel.$el.append('<div class="panel-resize-handler"></div>');
  }
  panel.$resizeHandlerEl = panel.$el.children(".panel-resize-handler");
  $el.addClass("panel-resizable");
  const passive = support2.passiveListener ? {
    passive: true
  } : false;
  panel.$el.on(app.touchEvents.start, ".panel-resize-handler", handleTouchStart, passive);
  app.on("touchmove:active", handleTouchMove);
  app.on("touchend:passive", handleTouchEnd);
  app.on("resize", handleResize);
  panel.on("beforeOpen", handleResize);
  panel.once("panelDestroy", () => {
    $el.removeClass("panel-resizable");
    panel.$resizeHandlerEl.remove();
    panel.$el.off(app.touchEvents.start, ".panel-resize-handler", handleTouchStart, passive);
    app.off("touchmove:active", handleTouchMove);
    app.off("touchend:passive", handleTouchEnd);
    app.off("resize", handleResize);
    panel.off("beforeOpen", handleResize);
  });
}
var resizable_panel_default = resizablePanel;

// node_modules/framework7/components/panel/panel-class.js
var Panel = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    const extendedParams = extend({
      on: {}
    }, app.params.panel, params);
    super(extendedParams, [app]);
    const panel = this;
    panel.params = extendedParams;
    panel.$containerEl = panel.params.containerEl ? dom7_default(panel.params.containerEl).eq(0) : app.$el;
    panel.containerEl = panel.$containerEl[0];
    if (!panel.containerEl) {
      panel.$containerEl = app.$el;
      panel.containerEl = app.$el[0];
    }
    let $el;
    if (panel.params.el) {
      $el = dom7_default(panel.params.el).eq(0);
    } else if (panel.params.content) {
      $el = dom7_default(panel.params.content).filter((node) => node.nodeType === 1).eq(0);
    }
    if ($el.length === 0) return panel;
    if ($el[0].f7Panel) return $el[0].f7Panel;
    $el[0].f7Panel = panel;
    let {
      side,
      effect,
      resizable
    } = panel.params;
    if (typeof side === "undefined") side = $el.hasClass("panel-left") ? "left" : "right";
    if (typeof effect === "undefined")
      effect = $el.hasClass("panel-cover") ? "cover" : $el.hasClass("panel-push") ? "push" : $el.hasClass("panel-floating") ? "floating" : "reveal";
    if (typeof resizable === "undefined") resizable = $el.hasClass("panel-resizable");
    let $backdropEl;
    if (panel.params.backdrop && panel.params.backdropEl) {
      $backdropEl = dom7_default(panel.params.backdropEl);
    } else if (panel.params.backdrop) {
      $backdropEl = panel.$containerEl.children(".panel-backdrop");
      if ($backdropEl.length === 0) {
        $backdropEl = dom7_default('<div class="panel-backdrop"></div>');
        panel.$containerEl.prepend($backdropEl);
      }
    }
    extend(panel, {
      app,
      side,
      effect,
      resizable,
      $el,
      el: $el[0],
      opened: false,
      $backdropEl,
      backdropEl: $backdropEl && $backdropEl[0]
    });
    panel.useModules();
    panel.init();
    return panel;
  }
  getViewEl() {
    const panel = this;
    let viewEl;
    if (panel.$containerEl.children(".views").length > 0) {
      viewEl = panel.$containerEl.children(".views")[0];
    } else {
      viewEl = panel.$containerEl.children(".view")[0];
    }
    return viewEl;
  }
  setStateClasses(state) {
    const panel = this;
    const {
      side,
      el,
      effect
    } = panel;
    const viewEl = panel.getViewEl();
    const panelInView = viewEl && viewEl.contains(el);
    const $targetEl = !viewEl || panelInView ? panel.$containerEl : dom7_default("html");
    if (state === "open") {
      $targetEl.addClass(`with-panel with-panel-${panel.side}-${panel.effect}`);
    }
    if (state === "before-closing") {
      $targetEl.addClass("with-panel-closing");
    }
    if (state === "closing") {
      $targetEl.addClass("with-panel-closing");
      $targetEl.removeClass(`with-panel with-panel-${panel.side}-${panel.effect}`);
    }
    if (state === "after-closing") {
      $targetEl.removeClass("with-panel-closing");
    }
    if (state === "closed") {
      $targetEl.removeClass(`with-panel-${side}-${effect}`);
    }
  }
  enableVisibleBreakpoint() {
    const panel = this;
    panel.visibleBreakpointDisabled = false;
    panel.setVisibleBreakpoint();
    return panel;
  }
  disableVisibleBreakpoint() {
    const panel = this;
    panel.visibleBreakpointDisabled = true;
    panel.setVisibleBreakpoint();
    return panel;
  }
  toggleVisibleBreakpoint() {
    const panel = this;
    panel.visibleBreakpointDisabled = !panel.visibleBreakpointDisabled;
    panel.setVisibleBreakpoint();
    return panel;
  }
  setVisibleBreakpoint(emitEvents) {
    if (emitEvents === void 0) {
      emitEvents = true;
    }
    const panel = this;
    const app = panel.app;
    if (!panel.visibleBreakpointResizeHandler) {
      panel.visibleBreakpointResizeHandler = function visibleBreakpointResizeHandler() {
        panel.setVisibleBreakpoint();
      };
      app.on("resize", panel.visibleBreakpointResizeHandler);
    }
    const {
      side,
      $el,
      $containerEl,
      params,
      visibleBreakpointDisabled
    } = panel;
    const breakpoint = params.visibleBreakpoint;
    const $viewEl = dom7_default(panel.getViewEl());
    const wasVisible = $el.hasClass("panel-in-breakpoint");
    if ($containerEl && $containerEl.hasClass("page")) {
      $viewEl.add($containerEl.children(".page-content, .tabs, .fab"));
    }
    if (app.width >= breakpoint && typeof breakpoint !== "undefined" && breakpoint !== null && !visibleBreakpointDisabled) {
      if (!wasVisible) {
        panel.setStateClasses("closed");
        $el.addClass("panel-in-breakpoint").removeClass("panel-in panel-in-collapsed");
        panel.onOpen(false);
        panel.onOpened();
        $viewEl.css({
          [`margin-${side}`]: `${$el.width()}px`
        });
        app.allowPanelOpen = true;
        if (emitEvents) {
          panel.emit("local::breakpoint panelBreakpoint", panel);
          panel.$el.trigger("panel:breakpoint");
        }
      } else {
        $viewEl.css({
          [`margin-${side}`]: `${$el.width()}px`
        });
      }
    } else if (wasVisible) {
      $el.removeClass("panel-in-breakpoint panel-in");
      panel.onClose();
      panel.onClosed();
      $viewEl.css({
        [`margin-${side}`]: ""
      });
      if (emitEvents) {
        panel.emit("local::breakpoint panelBreakpoint", panel);
        panel.$el.trigger("panel:breakpoint");
      }
    }
  }
  enableCollapsedBreakpoint() {
    const panel = this;
    panel.collapsedBreakpointDisabled = false;
    panel.setCollapsedBreakpoint();
    return panel;
  }
  disableCollapsedBreakpoint() {
    const panel = this;
    panel.collapsedBreakpointDisabled = true;
    panel.setCollapsedBreakpoint();
    return panel;
  }
  toggleCollapsedBreakpoint() {
    const panel = this;
    panel.collapsedBreakpointDisabled = !panel.collapsedBreakpointDisabled;
    panel.setCollapsedBreakpoint();
    return panel;
  }
  setCollapsedBreakpoint(emitEvents) {
    if (emitEvents === void 0) {
      emitEvents = true;
    }
    const panel = this;
    const app = panel.app;
    if (!panel.collapsedBreakpointResizeHandler) {
      panel.collapsedBreakpointResizeHandler = function collapsedBreakpointResizeHandler() {
        panel.setCollapsedBreakpoint();
      };
      app.on("resize", panel.collapsedBreakpointResizeHandler);
    }
    const {
      $el,
      params,
      collapsedBreakpointDisabled
    } = panel;
    if ($el.hasClass("panel-in-breakpoint")) return;
    const breakpoint = params.collapsedBreakpoint;
    const wasVisible = $el.hasClass("panel-in-collapsed");
    if (app.width >= breakpoint && typeof breakpoint !== "undefined" && breakpoint !== null && !collapsedBreakpointDisabled) {
      if (!wasVisible) {
        panel.setStateClasses("closed");
        $el.addClass("panel-in-collapsed").removeClass("panel-in");
        panel.collapsed = true;
        app.allowPanelOpen = true;
        if (emitEvents) {
          panel.emit("local::collapsedBreakpoint panelCollapsedBreakpoint", panel);
          panel.$el.trigger("panel:collapsedbreakpoint");
        }
      }
    } else if (wasVisible) {
      $el.removeClass("panel-in-collapsed panel-in");
      panel.collapsed = false;
      if (emitEvents) {
        panel.emit("local::collapsedBreakpoint panelCollapsedBreakpoint", panel);
        panel.$el.trigger("panel:collapsedbreakpoint");
      }
    }
  }
  enableResizable() {
    const panel = this;
    if (panel.resizableInitialized) {
      panel.resizable = true;
      panel.$el.addClass("panel-resizable");
    } else {
      resizable_panel_default(panel);
    }
    return panel;
  }
  disableResizable() {
    const panel = this;
    panel.resizable = false;
    panel.$el.removeClass("panel-resizable");
    return panel;
  }
  enableSwipe() {
    const panel = this;
    if (panel.swipeInitialized) {
      panel.swipeable = true;
    } else {
      swipe_panel_default(panel);
    }
    return panel;
  }
  disableSwipe() {
    const panel = this;
    panel.swipeable = false;
    return panel;
  }
  onOpen(modifyHtmlClasses) {
    if (modifyHtmlClasses === void 0) {
      modifyHtmlClasses = true;
    }
    const panel = this;
    panel._openTransitionStarted = false;
    const app = panel.app;
    panel.opened = true;
    app.panel.allowOpen = false;
    panel.$el.trigger("panel:beforeopen");
    panel.emit("local::beforeOpen panelBeforeOpen", panel);
    if (modifyHtmlClasses) {
      panel.setStateClasses("open");
    }
    panel.$el.trigger("panel:open");
    panel.emit("local::open panelOpen", panel);
  }
  onOpened() {
    const panel = this;
    const app = panel.app;
    app.panel.allowOpen = true;
    panel.$el.trigger("panel:opened");
    panel.emit("local::opened panelOpened", panel);
  }
  onClose() {
    const panel = this;
    const app = panel.app;
    panel.opened = false;
    app.panel.allowOpen = false;
    panel.$el.trigger("panel:beforeclose");
    panel.emit("local::beforeClose panelBeforeClose", panel);
    panel.setStateClasses("closing");
    panel.$el.trigger("panel:close");
    panel.emit("local::close panelClose", panel);
  }
  onClosed() {
    const panel = this;
    const app = panel.app;
    app.panel.allowOpen = true;
    panel.setStateClasses("after-closing");
    panel.$el.removeClass("panel-out");
    if (panel.$backdropEl) {
      const otherPanel = app.panel.get(".panel-in");
      const shouldHideBackdrop = !otherPanel || otherPanel && !otherPanel.$backdropEl;
      if (shouldHideBackdrop) {
        panel.$backdropEl.removeClass("panel-backdrop-in");
      }
    }
    panel.$el.trigger("panel:closed");
    panel.emit("local::closed panelClosed", panel);
  }
  toggle(animate) {
    if (animate === void 0) {
      animate = true;
    }
    const panel = this;
    const breakpoint = panel.params.visibleBreakpoint;
    const app = panel.app;
    if (app.width >= breakpoint && typeof breakpoint !== "undefined" && breakpoint !== null) {
      return panel.toggleVisibleBreakpoint();
    }
    if (panel.opened) panel.close(animate);
    else panel.open(animate);
    return panel;
  }
  insertToRoot() {
    const panel = this;
    const document2 = getDocument();
    const {
      $el,
      $backdropEl,
      $containerEl
    } = panel;
    const $panelParentEl = $el.parent();
    const wasInDom = $el.parents(document2).length > 0;
    if (!$panelParentEl.is($containerEl) || $el.prevAll(".views, .view").length) {
      const $insertBeforeEl = $containerEl.children(".panel, .views, .view").eq(0);
      const $insertAfterEl = $containerEl.children(".panel-backdrop").eq(0);
      if ($insertBeforeEl.length) {
        $el.insertBefore($insertBeforeEl);
      } else if ($insertAfterEl) {
        $el.insertBefore($insertAfterEl);
      } else {
        $containerEl.prepend($el);
      }
      if ($backdropEl && $backdropEl.length && (!$backdropEl.parent().is($containerEl) && $backdropEl.nextAll(".panel").length === 0 || $backdropEl.parent().is($containerEl) && $backdropEl.nextAll(".panel").length === 0)) {
        $backdropEl.insertBefore($el);
      }
      panel.once("panelClosed", () => {
        if (wasInDom) {
          $panelParentEl.append($el);
        } else {
          $el.remove();
        }
      });
    }
  }
  open(animate) {
    if (animate === void 0) {
      animate = true;
    }
    const panel = this;
    const app = panel.app;
    if (!app.panel.allowOpen) return false;
    const {
      effect,
      $el,
      $backdropEl,
      opened,
      $containerEl
    } = panel;
    if (!$el || $el.hasClass("panel-in")) {
      return panel;
    }
    panel.insertToRoot();
    if (opened || $el.hasClass("panel-in-breakpoint") || $el.hasClass("panel-in")) return false;
    const otherOpenedPanel = app.panel.get(".panel-in");
    if (otherOpenedPanel && otherOpenedPanel !== panel) {
      otherOpenedPanel.close(animate);
    }
    $el[animate ? "removeClass" : "addClass"]("not-animated");
    $el.addClass("panel-in");
    if ($backdropEl) {
      $backdropEl.addClass("panel-backdrop-in");
      $backdropEl[animate ? "removeClass" : "addClass"]("not-animated");
    }
    if (["cover", "push", "floating"].includes(panel.effect)) {
      panel._clientLeft = $el[0].clientLeft;
    }
    const $viewEl = dom7_default(panel.getViewEl());
    if ($containerEl && $containerEl.hasClass("page")) {
      $viewEl.add($containerEl.children(".page-content, .tabs"));
    }
    const transitionEndTarget = effect === "reveal" ? $viewEl : $el;
    function panelTransitionStart() {
      transitionEndTarget.transitionStart(() => {
        panel._openTransitionStarted = true;
      });
    }
    function panelTransitionEnd() {
      transitionEndTarget.transitionEnd((e) => {
        if (dom7_default(e.target).is(transitionEndTarget)) {
          if ($el.hasClass("panel-out")) {
            panel.onClosed();
          } else {
            panel.onOpened();
          }
        } else panelTransitionEnd();
      });
    }
    if (animate) {
      if ($backdropEl) {
        $backdropEl.removeClass("not-animated");
      }
      panelTransitionStart();
      panelTransitionEnd();
      $el.removeClass("panel-out not-animated").addClass("panel-in");
      panel.onOpen();
    } else {
      if ($backdropEl) {
        $backdropEl.addClass("not-animated");
      }
      $el.removeClass("panel-out").addClass("panel-in not-animated");
      panel.onOpen();
      panel.onOpened();
      panel._openTransitionStarted = true;
    }
    return true;
  }
  close(animate) {
    if (animate === void 0) {
      animate = true;
    }
    const panel = this;
    const {
      effect,
      $el,
      $backdropEl,
      opened,
      $containerEl
    } = panel;
    if (!opened || $el.hasClass("panel-in-breakpoint") || !$el.hasClass("panel-in")) return panel;
    $el[animate ? "removeClass" : "addClass"]("not-animated");
    if ($backdropEl) {
      $backdropEl[animate ? "removeClass" : "addClass"]("not-animated");
    }
    const $viewEl = dom7_default(panel.getViewEl());
    if ($containerEl && $containerEl.hasClass("page")) {
      $viewEl.add($containerEl.children(".page-content, .tabs"));
    }
    const transitionEndTarget = effect === "reveal" ? $viewEl : $el;
    if (!panel._openTransitionStarted) {
      animate = false;
    }
    function transitionEnd2() {
      if ($el.hasClass("panel-out")) {
        panel.onClosed();
      } else if ($el.hasClass("panel-in")) {
        panel.onOpened();
      }
      panel.setStateClasses("after-closing");
    }
    if (animate) {
      transitionEndTarget.transitionEnd(() => {
        transitionEnd2();
      });
      $el.removeClass("panel-in").addClass("panel-out");
      panel.onClose();
    } else {
      $el.addClass("not-animated").removeClass("panel-in").addClass("panel-out");
      panel.onClose();
      panel.onClosed();
    }
    return panel;
  }
  init() {
    const panel = this;
    if (typeof panel.params.visibleBreakpoint !== "undefined") {
      panel.setVisibleBreakpoint();
    }
    if (typeof panel.params.collapsedBreakpoint !== "undefined") {
      panel.setCollapsedBreakpoint();
    }
    if (panel.params.swipe) {
      panel.enableSwipe();
    }
    if (panel.resizable) {
      panel.enableResizable();
    }
  }
  destroy() {
    let panel = this;
    const app = panel.app;
    const {
      $containerEl
    } = panel;
    if (!panel.$el) {
      return;
    }
    panel.emit("local::beforeDestroy panelBeforeDestroy", panel);
    panel.$el.trigger("panel:beforedestroy");
    if (panel.visibleBreakpointResizeHandler) {
      app.off("resize", panel.visibleBreakpointResizeHandler);
    }
    if (panel.collapsedBreakpointResizeHandler) {
      app.off("resize", panel.collapsedBreakpointResizeHandler);
    }
    if (panel.$el.hasClass("panel-in-breakpoint") || panel.$el.hasClass("panel-in-collapsed")) {
      const $viewEl = dom7_default(panel.getViewEl());
      if ($containerEl && $containerEl.hasClass("page")) {
        $viewEl.add($containerEl.children(".page-content, .tabs"));
      }
      panel.$el.removeClass("panel-in-breakpoint panel-in-collapsed panel-in");
      $viewEl.css({
        [`margin-${panel.side}`]: ""
      });
      panel.emit("local::breakpoint panelBreakpoint", panel);
      panel.$el.trigger("panel:breakpoint");
    }
    panel.$el.trigger("panel:destroy");
    panel.emit("local::destroy panelDestroy", panel);
    if (panel.el) {
      panel.el.f7Panel = null;
      delete panel.el.f7Panel;
    }
    deleteProps(panel);
    panel = null;
  }
};
var panel_class_default = Panel;

// node_modules/framework7/components/panel/panel.js
var panel_default = {
  name: "panel",
  params: {
    panel: {
      opened: void 0,
      // default based on panel-in class
      side: void 0,
      // default based on panel class
      effect: void 0,
      // default based on panel class
      resizable: void 0,
      // default based on panel-resizable class
      backdrop: true,
      backdropEl: void 0,
      visibleBreakpoint: void 0,
      collapsedBreakpoint: void 0,
      swipe: false,
      // or true
      swipeNoFollow: false,
      // or true
      swipeOnlyClose: false,
      swipeActiveArea: 0,
      swipeThreshold: 0,
      closeByBackdropClick: true,
      containerEl: void 0
    }
  },
  static: {
    Panel: panel_class_default
  },
  create() {
    const app = this;
    extend(app, {
      panel: {
        allowOpen: true,
        create(params) {
          return new panel_class_default(app, params);
        },
        get(el) {
          if (el === void 0) {
            el = ".panel";
          }
          if (el instanceof panel_class_default) return el;
          if (el === "left" || el === "right") el = `.panel-${el}`;
          const $el = dom7_default(el);
          if ($el.length === 0 || $el.length > 1) return void 0;
          return $el[0].f7Panel;
        },
        destroy(el) {
          if (el === void 0) {
            el = ".panel";
          }
          const panel = app.panel.get(el);
          if (panel && panel.destroy) return panel.destroy();
          return void 0;
        },
        open(el, animate) {
          if (el === void 0) {
            el = ".panel";
          }
          if (el === "left" || el === "right") el = `.panel-${el}`;
          let panel = app.panel.get(el);
          if (panel && panel.open) return panel.open(animate);
          if (!panel) {
            panel = app.panel.create({
              el
            });
            return panel.open(animate);
          }
          return void 0;
        },
        close(el, animate) {
          if (el === void 0) {
            el = ".panel-in";
          }
          if (el === "left" || el === "right") el = `.panel-${el}`;
          let panel = app.panel.get(el);
          if (panel && panel.open) return panel.close(animate);
          if (!panel) {
            panel = app.panel.create({
              el
            });
            return panel.close(animate);
          }
          return void 0;
        },
        toggle(el, animate) {
          if (el === void 0) {
            el = ".panel";
          }
          if (el === "left" || el === "right") el = `.panel-${el}`;
          let panel = app.panel.get(el);
          if (panel && panel.toggle) return panel.toggle(animate);
          if (!panel) {
            panel = app.panel.create({
              el
            });
            return panel.toggle(animate);
          }
          return void 0;
        }
      }
    });
  },
  on: {
    init() {
      const app = this;
      dom7_default(".panel-init").each((panelEl) => {
        const params = Object.assign({
          el: panelEl
        }, dom7_default(panelEl).dataset() || {});
        app.panel.create(params);
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".panel-init").each((panelEl) => {
        const params = Object.assign({
          el: panelEl
        }, dom7_default(panelEl).dataset() || {});
        app.panel.create(params);
      });
    },
    pageBeforeRemove(page) {
      const app = this;
      page.$el.find(".panel-init").each((panelEl) => {
        const panel = app.panel.get(panelEl);
        if (panel && panel.destroy) panel.destroy();
      });
    }
  },
  vnode: {
    "panel-init": {
      insert(vnode) {
        const app = this;
        const panelEl = vnode.elm;
        const params = Object.assign({
          el: panelEl
        }, dom7_default(panelEl).dataset() || {});
        app.panel.create(params);
      },
      destroy(vnode) {
        const app = this;
        const panelEl = vnode.elm;
        const panel = app.panel.get(panelEl);
        if (panel && panel.destroy) panel.destroy();
      }
    }
  },
  clicks: {
    ".panel-open": function open2(clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.panel.open(data.panel, data.animate);
    },
    ".panel-close": function close(clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.panel.close(data.panel, data.animate);
    },
    ".panel-toggle": function close2(clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.panel.toggle(data.panel, data.animate);
    },
    ".panel-backdrop": function close3() {
      const app = this;
      const $panelEl = dom7_default(".panel-in:not(.panel-out)");
      if (!$panelEl.length) return;
      const instance = $panelEl[0] && $panelEl[0].f7Panel;
      $panelEl.trigger("panel:backdrop-click");
      if (instance) {
        instance.emit("backdropClick", instance);
      }
      app.emit("panelBackdropClick", instance || $panelEl[0]);
      if (instance && instance.params.closeByBackdropClick === false) return;
      if (app.params.panel.closeByBackdropClick) app.panel.close();
    }
  }
};

// node_modules/framework7/components/card/card.js
var CardExpandable = {
  open(cardEl, animate) {
    if (cardEl === void 0) {
      cardEl = ".card-expandable";
    }
    if (animate === void 0) {
      animate = true;
    }
    const app = this;
    const device = getDevice();
    const document2 = getDocument();
    const support2 = getSupport();
    const $cardEl = dom7_default(cardEl).eq(0);
    if (!$cardEl || !$cardEl.length) return;
    if ($cardEl.hasClass("card-opened") || $cardEl.hasClass("card-opening") || $cardEl.hasClass("card-closing")) return;
    const $pageEl = $cardEl.parents(".page").eq(0);
    if (!$pageEl.length) return;
    if ($pageEl.find(".card-opened").length) {
      return;
    }
    let prevented;
    function prevent() {
      prevented = true;
    }
    $cardEl.trigger("card:beforeopen", {
      prevent
    });
    app.emit("cardBeforeOpen", $cardEl[0], prevent);
    if (prevented) return;
    const cardParams = Object.assign({
      animate
    }, app.params.card, $cardEl.dataset());
    const $pageContentEl = $cardEl.parents(".page-content");
    let $backdropEl;
    if ($cardEl.attr("data-backdrop-el")) {
      $backdropEl = dom7_default($cardEl.attr("data-backdrop-el"));
    }
    if (!$backdropEl && cardParams.backdrop) {
      $backdropEl = $pageContentEl.find(".card-backdrop");
      if (!$backdropEl.length) {
        $backdropEl = dom7_default('<div class="card-backdrop"></div>');
        $pageContentEl.append($backdropEl);
      }
    }
    let $navbarEl;
    let $toolbarEl;
    if (cardParams.hideNavbarOnOpen) {
      $navbarEl = $pageEl.children(".navbar");
      if (!$navbarEl.length) {
        if ($pageEl[0].f7Page) $navbarEl = $pageEl[0].f7Page.$navbarEl;
      }
    }
    if (cardParams.hideToolbarOnOpen) {
      $toolbarEl = $pageEl.children(".toolbar");
      if (!$toolbarEl.length) {
        $toolbarEl = $pageEl.parents(".view").children(".toolbar");
      }
      if (!$toolbarEl.length) {
        $toolbarEl = $pageEl.parents(".views").children(".toolbar");
      }
    }
    const currTransform = $cardEl.css("transform");
    let hasTransform;
    if (currTransform && currTransform.match(/[2-9]/)) {
      hasTransform = true;
    }
    const $cardContentEl = $cardEl.children(".card-content");
    const $cardSizeEl = dom7_default(document2.createElement("div")).addClass("card-expandable-size");
    $cardEl.append($cardSizeEl);
    let cardWidth = $cardEl[0].offsetWidth;
    let cardHeight = $cardEl[0].offsetHeight;
    let pageWidth = $pageEl[0].offsetWidth;
    let pageHeight = $pageEl[0].offsetHeight;
    let maxWidth = $cardSizeEl[0].offsetWidth || pageWidth;
    let maxHeight = $cardSizeEl[0].offsetHeight || pageHeight;
    let statusbarHeight;
    if ($navbarEl && !cardParams.hideStatusbarOnOpen && maxHeight === pageHeight) {
      statusbarHeight = parseInt($navbarEl.css("--f7-safe-area-top"), 10);
      if (Number.isNaN(statusbarHeight)) statusbarHeight = 0;
    }
    if (statusbarHeight) {
      maxHeight -= statusbarHeight;
    }
    let scaleX = maxWidth / cardWidth;
    let scaleY = maxHeight / cardHeight;
    let offset = $cardEl.offset();
    let pageOffset = $pageEl.offset();
    if (statusbarHeight) {
      pageOffset.top += statusbarHeight / 2;
    }
    offset.left -= pageOffset.left;
    let cardLeftOffset;
    let cardTopOffset;
    if (hasTransform) {
      const transformValues = currTransform.replace(/matrix\(|\)/g, "").split(",").map((el) => el.trim());
      if (transformValues && transformValues.length > 1) {
        const scale = parseFloat(transformValues[0]);
        cardLeftOffset = offset.left - cardWidth * (1 - scale) / 2;
        cardTopOffset = offset.top - pageOffset.top - cardHeight * (1 - scale) / 2;
        if (app.rtl) cardLeftOffset -= $cardEl[0].scrollLeft;
      } else {
        cardLeftOffset = $cardEl[0].offsetLeft;
        cardTopOffset = $cardEl[0].offsetTop - ($pageContentEl.length ? $pageContentEl[0].scrollTop : 0);
      }
    } else {
      cardLeftOffset = offset.left;
      cardTopOffset = offset.top - pageOffset.top;
      if (app.rtl) cardLeftOffset -= $cardEl[0].scrollLeft;
    }
    cardLeftOffset -= (pageWidth - maxWidth) / 2;
    cardTopOffset -= (pageHeight - maxHeight) / 2;
    let cardRightOffset = maxWidth - cardWidth - cardLeftOffset;
    if (app.rtl) {
      [cardLeftOffset, cardRightOffset] = [cardRightOffset, cardLeftOffset];
    }
    let cardBottomOffset = maxHeight - cardHeight - cardTopOffset;
    let translateX = (cardRightOffset - cardLeftOffset) / 2;
    let translateY = (cardBottomOffset - cardTopOffset) / 2;
    if (cardParams.hideNavbarOnOpen && $navbarEl && $navbarEl.length) {
      if ($navbarEl.closest(".navbar-hidden").length) {
        $cardEl[0].f7KeepNavbarOnClose = true;
      } else {
        delete $cardEl[0].f7KeepNavbarOnClose;
        app.navbar.hide($navbarEl, cardParams.animate, cardParams.hideStatusbarOnOpen, true);
      }
    }
    if (cardParams.hideToolbarOnOpen && $toolbarEl && $toolbarEl.length) {
      if ($toolbarEl.closest(".toolbar-hidden").length) {
        $cardEl[0].f7KeepToolbarOnClose = true;
      } else {
        delete $cardEl[0].f7KeepToolbarOnClose;
        app.toolbar.hide($toolbarEl, cardParams.animate);
      }
    }
    if ($backdropEl) {
      $backdropEl.removeClass("card-backdrop-out").addClass("card-backdrop-in");
    }
    $cardEl.removeClass("card-transitioning");
    if (cardParams.animate) {
      $cardEl.addClass("card-opening");
    }
    $cardEl.trigger("card:open");
    app.emit("cardOpen", $cardEl[0]);
    function transitionEnd2() {
      $pageEl.addClass("page-with-card-opened");
      if (device.ios && $pageContentEl.length) {
        $pageContentEl.css("height", `${$pageContentEl[0].offsetHeight + 1}px`);
        setTimeout(() => {
          $pageContentEl.css("height", "");
        });
      }
      $cardEl.addClass("card-opened");
      $cardEl.removeClass("card-opening");
      $cardEl.trigger("card:opened");
      app.emit("cardOpened", $cardEl[0], $pageEl[0]);
    }
    $cardContentEl.css({
      width: `${maxWidth}px`,
      height: `${maxHeight}px`
    }).transform(`translate3d(${app.rtl ? cardLeftOffset + translateX : -cardLeftOffset - translateX}px, 0px, 0) scale(${1 / scaleX}, ${1 / scaleY})`);
    $cardEl.transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX}, ${scaleY})`);
    if (cardParams.animate) {
      $cardEl.transitionEnd(() => {
        transitionEnd2();
      });
    } else {
      transitionEnd2();
    }
    function onResize2() {
      $cardEl.removeClass("card-transitioning");
      cardWidth = $cardEl[0].offsetWidth;
      cardHeight = $cardEl[0].offsetHeight;
      pageWidth = $pageEl[0].offsetWidth;
      pageHeight = $pageEl[0].offsetHeight;
      maxWidth = $cardSizeEl[0].offsetWidth || pageWidth;
      maxHeight = $cardSizeEl[0].offsetHeight || pageHeight;
      statusbarHeight = 0;
      if ($navbarEl && !cardParams.hideStatusbarOnOpen && maxHeight === pageHeight) {
        statusbarHeight = parseInt($navbarEl.css("--f7-safe-area-top"), 10);
        if (Number.isNaN(statusbarHeight)) statusbarHeight = 0;
      }
      if (statusbarHeight) {
        maxHeight -= statusbarHeight;
      }
      scaleX = maxWidth / cardWidth;
      scaleY = maxHeight / cardHeight;
      $cardEl.transform("translate3d(0px, 0px, 0) scale(1)");
      offset = $cardEl.offset();
      pageOffset = $pageEl.offset();
      if (statusbarHeight) {
        pageOffset.top += statusbarHeight / 2;
      }
      offset.left -= pageOffset.left;
      offset.top -= pageOffset.top;
      cardLeftOffset = offset.left - (pageWidth - maxWidth) / 2;
      if (app.rtl) cardLeftOffset -= $cardEl[0].scrollLeft;
      cardTopOffset = offset.top - (pageHeight - maxHeight) / 2;
      cardRightOffset = maxWidth - cardWidth - cardLeftOffset;
      cardBottomOffset = maxHeight - cardHeight - cardTopOffset;
      if (app.rtl) {
        [cardLeftOffset, cardRightOffset] = [cardRightOffset, cardLeftOffset];
      }
      translateX = (cardRightOffset - cardLeftOffset) / 2;
      translateY = (cardBottomOffset - cardTopOffset) / 2;
      $cardEl.transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX}, ${scaleY})`);
      $cardContentEl.css({
        width: `${maxWidth}px`,
        height: `${maxHeight}px`
      }).transform(`translate3d(${app.rtl ? cardLeftOffset + translateX : -cardLeftOffset - translateX}px, 0px, 0) scale(${1 / scaleX}, ${1 / scaleY})`);
    }
    let cardScrollTop;
    let isTouched;
    let isMoved;
    let touchStartX;
    let touchStartY;
    let touchEndX;
    let touchEndY;
    let isScrolling;
    let progress;
    let isV;
    let isH;
    let $cardScrollableEl;
    function onTouchStart2(e) {
      if (!dom7_default(e.target).closest($cardEl).length || !e.isTrusted) return;
      if (!$cardEl.hasClass("card-opened")) return;
      $cardScrollableEl = $cardEl.find(cardParams.scrollableEl);
      if ($cardScrollableEl[0] && $cardScrollableEl[0] !== $cardContentEl[0] && !$cardScrollableEl[0].contains(e.target)) {
        cardScrollTop = 0;
      } else {
        cardScrollTop = $cardScrollableEl.scrollTop();
      }
      isTouched = true;
      touchStartX = e.targetTouches[0].pageX;
      touchStartY = e.targetTouches[0].pageY;
      isScrolling = void 0;
      isV = false;
      isH = false;
    }
    function onTouchMove2(e) {
      if (!isTouched || !e.isTrusted) return;
      touchEndX = e.targetTouches[0].pageX;
      touchEndY = e.targetTouches[0].pageY;
      if (typeof isScrolling === "undefined") {
        isScrolling = !!(isScrolling || Math.abs(touchEndY - touchStartY) > Math.abs(touchEndX - touchStartX));
      }
      if (!isH && !isV) {
        if (!isScrolling && e.targetTouches[0].clientX <= 50) {
          isH = true;
        } else {
          isV = true;
        }
      }
      if (!(isH || isV) || isV && cardScrollTop !== 0) {
        isTouched = true;
        isMoved = true;
        return;
      }
      if (!isMoved) {
        $cardEl.removeClass("card-transitioning");
      }
      isMoved = true;
      progress = isV ? Math.max((touchEndY - touchStartY) / 150, 0) : Math.max((touchEndX - touchStartX) / (cardWidth / 2), 0);
      if (progress > 0 && isV || isH) {
        if (isV && device.ios && $cardScrollableEl[0] === $cardContentEl[0]) {
          $cardScrollableEl.css("-webkit-overflow-scrolling", "auto");
          $cardScrollableEl.scrollTop(0);
        }
        e.preventDefault();
      }
      if (progress > 1) progress **= 0.3;
      if (progress > (isV ? 1.3 : 1.1)) {
        isTouched = false;
        isMoved = false;
        app.card.close($cardEl);
      } else {
        $cardEl.transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX * (1 - progress * 0.2)}, ${scaleY * (1 - progress * 0.2)})`);
      }
    }
    function onTouchEnd2(e) {
      if (!isTouched || !isMoved || !e.isTrusted) return;
      isTouched = false;
      isMoved = false;
      if (device.ios) {
        $cardScrollableEl.css("-webkit-overflow-scrolling", "");
      }
      if (progress >= 0.8) {
        app.card.close($cardEl);
      } else {
        $cardEl.addClass("card-transitioning").transform(`translate3d(${app.rtl ? -translateX : translateX}px, ${translateY}px, 0) scale(${scaleX}, ${scaleY})`);
      }
    }
    $cardEl[0].detachEventHandlers = function detachEventHandlers() {
      app.off("resize", onResize2);
      if (support2.touch && cardParams.swipeToClose) {
        app.off("touchstart:passive", onTouchStart2);
        app.off("touchmove:active", onTouchMove2);
        app.off("touchend:passive", onTouchEnd2);
      }
    };
    app.on("resize", onResize2);
    if (support2.touch && cardParams.swipeToClose) {
      app.on("touchstart:passive", onTouchStart2);
      app.on("touchmove:active", onTouchMove2);
      app.on("touchend:passive", onTouchEnd2);
    }
  },
  close(cardEl, animate) {
    if (cardEl === void 0) {
      cardEl = ".card-expandable.card-opened";
    }
    if (animate === void 0) {
      animate = true;
    }
    const app = this;
    const device = getDevice();
    const $cardEl = dom7_default(cardEl).eq(0);
    if (!$cardEl || !$cardEl.length) return;
    if (!$cardEl.hasClass("card-opened") || $cardEl.hasClass("card-opening") || $cardEl.hasClass("card-closing")) return;
    const $cardContentEl = $cardEl.children(".card-content");
    const $pageContentEl = $cardEl.parents(".page-content");
    const $pageEl = $cardEl.parents(".page").eq(0);
    if (!$pageEl.length) return;
    const cardParams = Object.assign({
      animate
    }, app.params.card, $cardEl.dataset());
    const $cardScrollableEl = $cardEl.find(cardParams.scrollableEl);
    let $navbarEl;
    let $toolbarEl;
    let $backdropEl;
    if ($cardEl.attr("data-backdrop-el")) {
      $backdropEl = dom7_default($cardEl.attr("data-backdrop-el"));
    }
    if (cardParams.backdrop) {
      $backdropEl = $cardEl.parents(".page-content").find(".card-backdrop");
    }
    if (cardParams.hideNavbarOnOpen) {
      $navbarEl = $pageEl.children(".navbar");
      if (!$navbarEl.length) {
        if ($pageEl[0].f7Page) $navbarEl = $pageEl[0].f7Page.$navbarEl;
      }
      if ($navbarEl && $navbarEl.length && !$cardEl[0].f7KeepNavbarOnClose) {
        app.navbar.show($navbarEl, cardParams.animate, true);
      }
    }
    if (cardParams.hideToolbarOnOpen) {
      $toolbarEl = $pageEl.children(".toolbar");
      if (!$toolbarEl.length) {
        $toolbarEl = $pageEl.parents(".view").children(".toolbar");
      }
      if (!$toolbarEl.length) {
        $toolbarEl = $pageEl.parents(".views").children(".toolbar");
      }
      if ($toolbarEl && $toolbarEl.length && !$cardEl[0].f7KeepToolbarOnClose) {
        app.toolbar.show($toolbarEl, cardParams.animate);
      }
    }
    $pageEl.removeClass("page-with-card-opened");
    if (device.ios && $pageContentEl.length) {
      $pageContentEl.css("height", `${$pageContentEl[0].offsetHeight + 1}px`);
      setTimeout(() => {
        $pageContentEl.css("height", "");
      });
    }
    if ($backdropEl && $backdropEl.length) {
      $backdropEl.removeClass("card-backdrop-in").addClass("card-backdrop-out");
    }
    $cardEl.removeClass("card-opened card-transitioning");
    if (cardParams.animate) {
      $cardEl.addClass("card-closing");
    } else {
      $cardEl.addClass("card-no-transition");
    }
    $cardEl.transform("");
    $cardEl.trigger("card:close");
    app.emit("cardClose", $cardEl[0], $pageEl[0]);
    const animateWidth = $cardEl.hasClass("card-expandable-animate-width");
    function transitionEnd2() {
      if (!animateWidth) {
        $cardContentEl.css({
          width: "",
          height: ""
        });
      }
      if ($backdropEl && $backdropEl.length) {
        $backdropEl.removeClass("card-backdrop-in card-backdrop-out");
      }
      $cardEl.removeClass("card-closing card-no-transition");
      $cardEl.trigger("card:closed");
      $cardEl.find(".card-expandable-size").remove();
      app.emit("cardClosed", $cardEl[0], $pageEl[0]);
    }
    if (animateWidth) {
      $cardContentEl.css({
        width: "",
        height: ""
      });
    }
    $cardContentEl.transform("").scrollTop(0, animate ? 300 : 0);
    if ($cardScrollableEl.length && $cardScrollableEl[0] !== $cardContentEl[0]) {
      $cardScrollableEl.scrollTop(0, animate ? 300 : 0);
    }
    if (animate) {
      $cardContentEl.transitionEnd(() => {
        transitionEnd2();
      });
    } else {
      transitionEnd2();
    }
    if ($cardEl[0].detachEventHandlers) {
      $cardEl[0].detachEventHandlers();
      delete $cardEl[0].detachEventHandlers;
    }
  },
  toggle(cardEl, animate) {
    if (cardEl === void 0) {
      cardEl = ".card-expandable";
    }
    const app = this;
    const $cardEl = dom7_default(cardEl).eq(0);
    if (!$cardEl.length) return;
    if ($cardEl.hasClass("card-opened")) {
      app.card.close($cardEl, animate);
    } else {
      app.card.open($cardEl, animate);
    }
  }
};
var card_default = {
  name: "card",
  params: {
    card: {
      hideNavbarOnOpen: true,
      hideStatusbarOnOpen: true,
      hideToolbarOnOpen: true,
      scrollableEl: ".card-content",
      swipeToClose: true,
      closeByBackdropClick: true,
      backdrop: true
    }
  },
  create() {
    const app = this;
    bindMethods(app, {
      card: CardExpandable
    });
  },
  on: {
    pageBeforeIn(page) {
      const app = this;
      if (app.params.card.hideNavbarOnOpen && page.navbarEl && page.$el.find(".card-opened.card-expandable").length) {
        app.navbar.hide(page.navbarEl, true, app.params.card.hideStatusbarOnOpen, true);
      }
      if (app.params.card.hideToolbarOnOpen && page.$el.find(".card-opened.card-expandable").length) {
        let $toolbarEl = page.$el.children(".toolbar");
        if (!$toolbarEl.length) {
          $toolbarEl = page.$el.parents(".view").children(".toolbar");
        }
        if (!$toolbarEl.length) {
          $toolbarEl = page.$el.parents(".views").children(".toolbar");
        }
        if ($toolbarEl && $toolbarEl.length) {
          app.toolbar.hide($toolbarEl);
        }
      }
    }
  },
  clicks: {
    ".card-close": function closeCard($clickedEl, data) {
      const app = this;
      app.card.close(data.card, data.animate);
    },
    ".card-open": function closeCard2($clickedEl, data) {
      const app = this;
      app.card.open(data.card, data.animate);
    },
    ".card-expandable": function toggleExpandableCard($clickedEl, data, e) {
      const app = this;
      if ($clickedEl.hasClass("card-opened") || $clickedEl.hasClass("card-opening") || $clickedEl.hasClass("card-closing")) return;
      if (dom7_default(e.target).closest(".card-prevent-open, .card-close").length) return;
      app.card.open($clickedEl);
    },
    ".card-backdrop-in": function onBackdropClick() {
      const app = this;
      let needToClose = false;
      if (app.params.card.closeByBackdropClick) needToClose = true;
      const $openedCardEl = dom7_default(".card-opened");
      if (!$openedCardEl.length) return;
      if ($openedCardEl.attr("data-close-by-backdrop-click") === "true") {
        needToClose = true;
      } else if ($openedCardEl.attr("data-close-by-backdrop-click") === "false") {
        needToClose = false;
      }
      if (needToClose) app.card.close($openedCardEl);
    }
  }
};

// node_modules/framework7/components/chip/chip.js
var chip_default = {
  name: "chip"
};

// node_modules/framework7/components/form/form.js
var FormData = {
  store(form, data) {
    const app = this;
    const window2 = getWindow();
    let formId = form;
    const $formEl = dom7_default(form);
    if ($formEl.length && $formEl.is("form") && $formEl.attr("id")) {
      formId = $formEl.attr("id");
    }
    app.form.data[`form-${formId}`] = data;
    window2.localStorage[`f7form-${formId}`] = JSON.stringify(data);
  },
  get(form) {
    const app = this;
    const window2 = getWindow();
    let formId = form;
    const $formEl = dom7_default(form);
    if ($formEl.length && $formEl.is("form") && $formEl.attr("id")) {
      formId = $formEl.attr("id");
    }
    if (window2.localStorage[`f7form-${formId}`]) {
      return JSON.parse(window2.localStorage[`f7form-${formId}`]);
    }
    if (app.form.data[`form-${formId}`]) {
      return app.form.data[`form-${formId}`];
    }
    return void 0;
  },
  remove(form) {
    const app = this;
    const window2 = getWindow();
    let formId = form;
    const $formEl = dom7_default(form);
    if ($formEl.length && $formEl.is("form") && $formEl.attr("id")) {
      formId = $formEl.attr("id");
    }
    if (app.form.data[`form-${formId}`]) {
      app.form.data[`form-${formId}`] = "";
      delete app.form.data[`form-${formId}`];
    }
    if (window2.localStorage[`f7form-${formId}`]) {
      window2.localStorage[`f7form-${formId}`] = "";
      window2.localStorage.removeItem(`f7form-${formId}`);
    }
  }
};
var FormStorage = {
  init(formEl) {
    const app = this;
    const $formEl = dom7_default(formEl);
    const formId = $formEl.attr("id");
    if (!formId) return;
    const initialData = app.form.getFormData(formId);
    if (initialData) {
      app.form.fillFromData($formEl, initialData);
    }
    function store() {
      const data = app.form.convertToData($formEl);
      if (!data) return;
      app.form.storeFormData(formId, data);
      $formEl.trigger("form:storedata", data);
      app.emit("formStoreData", $formEl[0], data);
    }
    $formEl.on("change submit", store);
  },
  destroy(formEl) {
    const $formEl = dom7_default(formEl);
    $formEl.off("change submit");
  }
};
function formToData(formEl) {
  const app = this;
  const $formEl = dom7_default(formEl).eq(0);
  if ($formEl.length === 0) return void 0;
  const data = {};
  const skipTypes = ["submit", "image", "button", "file"];
  const skipNames = [];
  $formEl.find("input, select, textarea").each((inputEl) => {
    const $inputEl = dom7_default(inputEl);
    if ($inputEl.hasClass("ignore-store-data") || $inputEl.hasClass("no-store-data")) {
      return;
    }
    const name = $inputEl.attr("name");
    const type = $inputEl.attr("type");
    const tag = inputEl.nodeName.toLowerCase();
    if (skipTypes.indexOf(type) >= 0) return;
    if (skipNames.indexOf(name) >= 0 || !name) return;
    if (tag === "select" && $inputEl.prop("multiple")) {
      skipNames.push(name);
      data[name] = [];
      $formEl.find(`select[name="${name}"] option`).each((el) => {
        if (el.selected) data[name].push(el.value);
      });
    } else {
      switch (type) {
        case "checkbox":
          skipNames.push(name);
          data[name] = [];
          $formEl.find(`input[name="${name}"]`).each((el) => {
            if (el.checked) data[name].push(el.value);
          });
          break;
        case "radio":
          skipNames.push(name);
          $formEl.find(`input[name="${name}"]`).each((el) => {
            if (el.checked) data[name] = el.value;
          });
          break;
        default:
          data[name] = $inputEl.val();
          break;
      }
    }
  });
  $formEl.trigger("form:todata", data);
  app.emit("formToData", $formEl[0], data);
  return data;
}
function formFromData(formEl, formData) {
  const app = this;
  const $formEl = dom7_default(formEl).eq(0);
  if (!$formEl.length) return;
  let data = formData;
  const formId = $formEl.attr("id");
  if (!data && formId) {
    data = app.form.getFormData(formId);
  }
  if (!data) return;
  const skipTypes = ["submit", "image", "button", "file"];
  const skipNames = [];
  $formEl.find("input, select, textarea").each((inputEl) => {
    const $inputEl = dom7_default(inputEl);
    if ($inputEl.hasClass("ignore-store-data") || $inputEl.hasClass("no-store-data")) {
      return;
    }
    const name = $inputEl.attr("name");
    const type = $inputEl.attr("type");
    const tag = inputEl.nodeName.toLowerCase();
    if (typeof data[name] === "undefined" || data[name] === null) return;
    if (skipTypes.indexOf(type) >= 0) return;
    if (skipNames.indexOf(name) >= 0 || !name) return;
    if (tag === "select" && $inputEl.prop("multiple")) {
      skipNames.push(name);
      $formEl.find(`select[name="${name}"] option`).each((el) => {
        const selectEl = el;
        if (data[name].indexOf(el.value) >= 0) selectEl.selected = true;
        else selectEl.selected = false;
      });
    } else {
      switch (type) {
        case "checkbox":
          skipNames.push(name);
          $formEl.find(`input[name="${name}"]`).each((el) => {
            const checkboxEl = el;
            if (data[name].indexOf(el.value) >= 0) checkboxEl.checked = true;
            else checkboxEl.checked = false;
          });
          break;
        case "radio":
          skipNames.push(name);
          $formEl.find(`input[name="${name}"]`).each((el) => {
            const radioEl = el;
            if (data[name] === el.value) radioEl.checked = true;
            else radioEl.checked = false;
          });
          break;
        default:
          $inputEl.val(data[name]);
          break;
      }
    }
    if (tag === "select" || tag === "input" || tag === "textarea") {
      $inputEl.trigger("change", "fromdata");
    }
  });
  $formEl.trigger("form:fromdata", data);
  app.emit("formFromData", $formEl[0], data);
}
function initAjaxForm() {
  const app = this;
  const window2 = getWindow();
  const document2 = getDocument();
  function onSubmitChange(e, fromData) {
    const $formEl = dom7_default(this);
    if (e.type === "change" && !$formEl.hasClass("form-ajax-submit-onchange")) return;
    if (e.type === "submit") e.preventDefault();
    if (e.type === "change" && fromData === "fromdata") return;
    const method = ($formEl.attr("method") || "GET").toUpperCase();
    const contentType = $formEl.attr("enctype") || $formEl.prop("enctype");
    let url = $formEl.attr("action");
    if (!url) return;
    let data;
    if (method === "POST") {
      if (contentType === "application/x-www-form-urlencoded" || contentType === "application/json") {
        data = app.form.convertToData($formEl[0]);
        if (contentType === "application/json") {
          data = JSON.stringify(data);
        }
      } else {
        data = new window2.FormData($formEl[0]);
      }
    } else {
      data = serializeObject(app.form.convertToData($formEl[0]));
      if (url.includes("?")) {
        url += `&${data}`;
      } else {
        url += `?${data}`;
      }
    }
    $formEl.trigger("formajax:beforesend", {
      data
    });
    app.emit("formAjaxBeforeSend", $formEl[0], data);
    fetch(url, {
      method,
      headers: {
        "Content-Type": contentType || "application/x-www-form-urlencoded"
      },
      ...method === "POST" || method === "PUT" ? {
        body: data
      } : {}
    }).then((response) => {
      $formEl.trigger("formajax:complete", {
        data,
        response
      });
      app.emit("formAjaxComplete", $formEl[0], data, response);
      $formEl.trigger("formajax:success", {
        data,
        response
      });
      app.emit("formAjaxSuccess", $formEl[0], data, response);
    }).catch((error) => {
      $formEl.trigger("formajax:error", {
        data,
        error
      });
      app.emit("formAjaxError", $formEl[0], data, error);
    });
  }
  dom7_default(document2).on("submit change", "form.form-ajax-submit, form.form-ajax-submit-onchange", onSubmitChange);
}
var form_default = {
  name: "form",
  create() {
    const app = this;
    extend(app, {
      form: {
        data: {},
        storeFormData: FormData.store.bind(app),
        getFormData: FormData.get.bind(app),
        removeFormData: FormData.remove.bind(app),
        convertToData: formToData.bind(app),
        fillFromData: formFromData.bind(app),
        storage: {
          init: FormStorage.init.bind(app),
          destroy: FormStorage.destroy.bind(app)
        }
      }
    });
  },
  on: {
    init() {
      const app = this;
      initAjaxForm.call(app);
    },
    tabBeforeRemove(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".form-store-data").each((formEl) => {
        app.form.storage.destroy(formEl);
      });
    },
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".form-store-data").each((formEl) => {
        app.form.storage.init(formEl);
      });
    },
    pageBeforeRemove(page) {
      const app = this;
      page.$el.find(".form-store-data").each((formEl) => {
        app.form.storage.destroy(formEl);
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".form-store-data").each((formEl) => {
        app.form.storage.init(formEl);
      });
    }
  }
};

// node_modules/framework7/components/input/input.js
var Input = {
  ignoreTypes: ["checkbox", "button", "submit", "range", "radio", "image"],
  createTextareaResizableShadow() {
    const document2 = getDocument();
    const $shadowEl = dom7_default(document2.createElement("textarea"));
    $shadowEl.addClass("textarea-resizable-shadow");
    $shadowEl.prop({
      disabled: true,
      readonly: true
    });
    Input.textareaResizableShadow = $shadowEl;
  },
  textareaResizableShadow: void 0,
  resizeTextarea(textareaEl) {
    const app = this;
    const window2 = getWindow();
    const $textareaEl = dom7_default(textareaEl);
    if (!Input.textareaResizableShadow) {
      Input.createTextareaResizableShadow();
    }
    const $shadowEl = Input.textareaResizableShadow;
    if (!$textareaEl.length) return;
    if (!$textareaEl.hasClass("resizable")) return;
    if (Input.textareaResizableShadow.parents().length === 0) {
      app.$el.append($shadowEl);
    }
    const styles = window2.getComputedStyle($textareaEl[0]);
    "padding-top padding-bottom padding-left padding-right margin-left margin-right margin-top margin-bottom width font-size font-family font-style font-weight line-height font-variant text-transform letter-spacing border box-sizing display".split(" ").forEach((style) => {
      let styleValue = styles[style];
      if ("font-size line-height letter-spacing width".split(" ").indexOf(style) >= 0) {
        styleValue = styleValue.replace(",", ".");
      }
      $shadowEl.css(style, styleValue);
    });
    const currentHeight = $textareaEl[0].clientHeight;
    $shadowEl.val("");
    const initialHeight = $shadowEl[0].scrollHeight;
    $shadowEl.val($textareaEl.val());
    $shadowEl.css("height", 0);
    const scrollHeight = $shadowEl[0].scrollHeight;
    if (currentHeight !== scrollHeight) {
      if (scrollHeight > initialHeight) {
        $textareaEl.css("height", `${scrollHeight}px`);
      } else if (scrollHeight < currentHeight) {
        $textareaEl.css("height", "");
      }
      if (scrollHeight > initialHeight || scrollHeight < currentHeight) {
        $textareaEl.trigger("textarea:resize", {
          initialHeight,
          currentHeight,
          scrollHeight
        });
        app.emit("textareaResize", {
          initialHeight,
          currentHeight,
          scrollHeight
        });
      }
    }
  },
  validate(inputEl) {
    const $inputEl = dom7_default(inputEl);
    if (!$inputEl.length) return true;
    const $itemInputEl = $inputEl.parents(".item-input");
    const $inputWrapEl = $inputEl.parents(".input");
    function unsetReadonly() {
      if ($inputEl[0].f7ValidateReadonly) {
        $inputEl[0].readOnly = false;
      }
    }
    function setReadonly() {
      if ($inputEl[0].f7ValidateReadonly) {
        $inputEl[0].readOnly = true;
      }
    }
    unsetReadonly();
    const validity = $inputEl[0].validity;
    const validationMessage = $inputEl.dataset().errorMessage || $inputEl[0].validationMessage || "";
    if (!validity) {
      setReadonly();
      return true;
    }
    if (!validity.valid) {
      let $errorEl = $inputEl.nextAll(".item-input-error-message, .input-error-message");
      if (validationMessage) {
        if ($errorEl.length === 0) {
          $errorEl = dom7_default(`<div class="${$inputWrapEl.length ? "input-error-message" : "item-input-error-message"}"></div>`);
          $errorEl.insertAfter($inputEl);
        }
        $errorEl.text(validationMessage);
      }
      if ($errorEl.length > 0) {
        $itemInputEl.addClass("item-input-with-error-message");
        $inputWrapEl.addClass("input-with-error-message");
      }
      $itemInputEl.addClass("item-input-invalid");
      $inputWrapEl.addClass("input-invalid");
      $inputEl.addClass("input-invalid");
      setReadonly();
      return false;
    }
    $itemInputEl.removeClass("item-input-invalid item-input-with-error-message");
    $inputWrapEl.removeClass("input-invalid input-with-error-message");
    $inputEl.removeClass("input-invalid");
    setReadonly();
    return true;
  },
  validateInputs(el) {
    const app = this;
    const validates = dom7_default(el).find("input, textarea, select").map((inputEl) => app.input.validate(inputEl));
    return validates.indexOf(false) < 0;
  },
  focus(inputEl) {
    const $inputEl = dom7_default(inputEl);
    const type = $inputEl.attr("type");
    if (Input.ignoreTypes.indexOf(type) >= 0) return;
    $inputEl.parents(".item-input").addClass("item-input-focused");
    $inputEl.parents(".input").addClass("input-focused");
    $inputEl.addClass("input-focused");
  },
  blur(inputEl) {
    const $inputEl = dom7_default(inputEl);
    $inputEl.parents(".item-input").removeClass("item-input-focused");
    $inputEl.parents(".input").removeClass("input-focused");
    $inputEl.removeClass("input-focused");
  },
  checkEmptyState(inputEl) {
    const app = this;
    let $inputEl = dom7_default(inputEl);
    if (!$inputEl.is("input, select, textarea, .item-input [contenteditable]")) {
      $inputEl = $inputEl.find("input, select, textarea, .item-input [contenteditable]").eq(0);
    }
    if (!$inputEl.length) return;
    const isContentEditable = $inputEl[0].hasAttribute("contenteditable");
    let value;
    if (isContentEditable) {
      if ($inputEl.find(".text-editor-placeholder").length) value = "";
      else value = $inputEl.html();
    } else {
      value = $inputEl.val();
    }
    const $itemInputEl = $inputEl.parents(".item-input");
    const $inputWrapEl = $inputEl.parents(".input");
    if (value && typeof value === "string" && value.trim() !== "" || Array.isArray(value) && value.length > 0) {
      $itemInputEl.addClass("item-input-with-value");
      $inputWrapEl.addClass("input-with-value");
      $inputEl.addClass("input-with-value");
      $inputEl.trigger("input:notempty");
      app.emit("inputNotEmpty", $inputEl[0]);
    } else {
      $itemInputEl.removeClass("item-input-with-value");
      $inputWrapEl.removeClass("input-with-value");
      $inputEl.removeClass("input-with-value");
      $inputEl.trigger("input:empty");
      app.emit("inputEmpty", $inputEl[0]);
    }
  },
  scrollIntoView(inputEl, duration, centered, force) {
    if (duration === void 0) {
      duration = 0;
    }
    const $inputEl = dom7_default(inputEl);
    const $scrollableEl = $inputEl.parents(".page-content, .panel, .card-expandable .card-content").eq(0);
    if (!$scrollableEl.length) {
      return false;
    }
    const contentHeight = $scrollableEl[0].offsetHeight;
    const contentScrollTop = $scrollableEl[0].scrollTop;
    const contentPaddingTop = parseInt($scrollableEl.css("padding-top"), 10);
    const contentPaddingBottom = parseInt($scrollableEl.css("padding-bottom"), 10);
    const contentOffsetTop = $scrollableEl.offset().top - contentScrollTop;
    const inputOffsetTop = $inputEl.offset().top - contentOffsetTop;
    const inputHeight = $inputEl[0].offsetHeight;
    const min = inputOffsetTop + contentScrollTop - contentPaddingTop;
    const max = inputOffsetTop + contentScrollTop - contentHeight + contentPaddingBottom + inputHeight;
    const centeredPosition = min + (max - min) / 2;
    if (contentScrollTop > min) {
      $scrollableEl.scrollTop(centered ? centeredPosition : min, duration);
      return true;
    }
    if (contentScrollTop < max) {
      $scrollableEl.scrollTop(centered ? centeredPosition : max, duration);
      return true;
    }
    if (force) {
      $scrollableEl.scrollTop(centered ? centeredPosition : max, duration);
    }
    return false;
  },
  init() {
    const app = this;
    const device = getDevice();
    const window2 = getWindow();
    const document2 = getDocument();
    Input.createTextareaResizableShadow();
    function onFocus() {
      const inputEl = this;
      if (app.params.input.scrollIntoViewOnFocus) {
        if (device.android) {
          dom7_default(window2).once("resize", () => {
            if (document2 && document2.activeElement === inputEl) {
              app.input.scrollIntoView(inputEl, app.params.input.scrollIntoViewDuration, app.params.input.scrollIntoViewCentered, app.params.input.scrollIntoViewAlways);
            }
          });
        } else {
          app.input.scrollIntoView(inputEl, app.params.input.scrollIntoViewDuration, app.params.input.scrollIntoViewCentered, app.params.input.scrollIntoViewAlways);
        }
      }
      app.input.focus(inputEl);
    }
    function onBlur() {
      const $inputEl = dom7_default(this);
      const tag = $inputEl[0].nodeName.toLowerCase();
      app.input.blur($inputEl);
      if ($inputEl.dataset().validate || $inputEl.attr("validate") !== null || $inputEl.attr("data-validate-on-blur") !== null) {
        app.input.validate($inputEl);
      }
      if (tag === "textarea" && $inputEl.hasClass("resizable")) {
        if (Input.textareaResizableShadow) Input.textareaResizableShadow.remove();
      }
    }
    function onChange() {
      const $inputEl = dom7_default(this);
      const type = $inputEl.attr("type");
      const tag = $inputEl[0].nodeName.toLowerCase();
      const isContentEditable = $inputEl[0].hasAttribute("contenteditable");
      if (Input.ignoreTypes.indexOf(type) >= 0) return;
      app.input.checkEmptyState($inputEl);
      if (isContentEditable) return;
      if ($inputEl.attr("data-validate-on-blur") === null && ($inputEl.dataset().validate || $inputEl.attr("validate") !== null)) {
        app.input.validate($inputEl);
      }
      if (tag === "textarea" && $inputEl.hasClass("resizable")) {
        app.input.resizeTextarea($inputEl);
      }
    }
    function onInvalid(e) {
      const $inputEl = dom7_default(this);
      if ($inputEl.attr("data-validate-on-blur") === null && ($inputEl.dataset().validate || $inputEl.attr("validate") !== null)) {
        e.preventDefault();
        app.input.validate($inputEl);
      }
    }
    function clearInput() {
      const $clicked = dom7_default(this);
      const $inputEl = $clicked.siblings("input, textarea").eq(0);
      const previousValue = $inputEl.val();
      $inputEl.val("").trigger("input change").focus().trigger("input:clear", previousValue);
      app.emit("inputClear", previousValue);
    }
    function preventDefault(e) {
      e.preventDefault();
    }
    dom7_default(document2).on("click", ".input-clear-button", clearInput);
    dom7_default(document2).on("mousedown", ".input-clear-button", preventDefault);
    dom7_default(document2).on("change input", "input, textarea, select, .item-input [contenteditable]", onChange, true);
    dom7_default(document2).on("focus", "input, textarea, select, .item-input [contenteditable]", onFocus, true);
    dom7_default(document2).on("blur", "input, textarea, select, .item-input [contenteditable]", onBlur, true);
    dom7_default(document2).on("invalid", "input, textarea, select", onInvalid, true);
  }
};
var input_default = {
  name: "input",
  params: {
    input: {
      scrollIntoViewOnFocus: void 0,
      scrollIntoViewCentered: false,
      scrollIntoViewDuration: 0,
      scrollIntoViewAlways: false
    }
  },
  create() {
    const app = this;
    if (typeof app.params.input.scrollIntoViewOnFocus === "undefined") {
      app.params.input.scrollIntoViewOnFocus = getDevice().android;
    }
    bindMethods(app, {
      input: Input
    });
  },
  on: {
    init() {
      const app = this;
      app.input.init();
    },
    tabMounted(tabEl) {
      const app = this;
      const $tabEl = dom7_default(tabEl);
      $tabEl.find(".item-input, .input").each((itemInputEl) => {
        const $itemInputEl = dom7_default(itemInputEl);
        $itemInputEl.find("input, select, textarea, [contenteditable]").each((inputEl) => {
          const $inputEl = dom7_default(inputEl);
          if (Input.ignoreTypes.indexOf($inputEl.attr("type")) >= 0) return;
          app.input.checkEmptyState($inputEl);
        });
      });
      $tabEl.find("textarea.resizable").each((textareaEl) => {
        app.input.resizeTextarea(textareaEl);
      });
    },
    pageInit(page) {
      const app = this;
      const $pageEl = page.$el;
      $pageEl.find(".item-input, .input").each((itemInputEl) => {
        const $itemInputEl = dom7_default(itemInputEl);
        $itemInputEl.find("input, select, textarea, [contenteditable]").each((inputEl) => {
          const $inputEl = dom7_default(inputEl);
          if (Input.ignoreTypes.indexOf($inputEl.attr("type")) >= 0) return;
          app.input.checkEmptyState($inputEl);
        });
      });
      $pageEl.find("textarea.resizable").each((textareaEl) => {
        app.input.resizeTextarea(textareaEl);
      });
    },
    "panelBreakpoint panelCollapsedBreakpoint panelResize panelOpen panelSwipeOpen resize viewMasterDetailBreakpoint": function onPanelOpen(instance) {
      const app = this;
      if (instance && instance.$el) {
        instance.$el.find("textarea.resizable").each((textareaEl) => {
          app.input.resizeTextarea(textareaEl);
        });
      } else {
        dom7_default("textarea.resizable").each((textareaEl) => {
          app.input.resizeTextarea(textareaEl);
        });
      }
    }
  }
};

// node_modules/framework7/components/checkbox/checkbox.js
var checkbox_default = {
  name: "checkbox"
};

// node_modules/framework7/components/radio/radio.js
var radio_default = {
  name: "radio"
};

// node_modules/framework7/components/toggle/toggle-class.js
var Toggle = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const toggle5 = this;
    const support2 = getSupport();
    const defaults2 = {};
    toggle5.useModulesParams(defaults2);
    toggle5.params = extend(defaults2, params);
    const el = toggle5.params.el;
    if (!el) return toggle5;
    const $el = dom7_default(el);
    if ($el.length === 0) return toggle5;
    if ($el[0].f7Toggle) return $el[0].f7Toggle;
    const $inputEl = $el.children('input[type="checkbox"]');
    extend(toggle5, {
      app,
      $el,
      el: $el[0],
      $inputEl,
      inputEl: $inputEl[0],
      disabled: $el.hasClass("disabled") || $inputEl.hasClass("disabled") || $inputEl.attr("disabled") || $inputEl[0].disabled
    });
    Object.defineProperty(toggle5, "checked", {
      enumerable: true,
      configurable: true,
      set(checked) {
        if (!toggle5 || typeof toggle5.$inputEl === "undefined") return;
        if (toggle5.checked === checked) return;
        $inputEl[0].checked = checked;
        toggle5.$inputEl.trigger("change");
      },
      get() {
        return $inputEl[0].checked;
      }
    });
    $el[0].f7Toggle = toggle5;
    let isTouched;
    const touchesStart = {};
    let isScrolling;
    let touchesDiff;
    let toggleWidth;
    let touchStartTime;
    let touchStartChecked;
    function handleTouchStart(e) {
      if (isTouched || toggle5.disabled) return;
      touchesStart.x = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
      touchesStart.y = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
      touchesDiff = 0;
      isTouched = true;
      isScrolling = void 0;
      touchStartTime = now();
      touchStartChecked = toggle5.checked;
      toggleWidth = $el[0].offsetWidth;
      nextTick(() => {
        if (isTouched) {
          $el.addClass("toggle-active-state");
        }
      });
    }
    function handleTouchMove(e) {
      if (!isTouched || toggle5.disabled) return;
      const pageX = e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX;
      const pageY = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
      const inverter = app.rtl ? -1 : 1;
      if (typeof isScrolling === "undefined") {
        isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));
      }
      if (isScrolling) {
        isTouched = false;
        return;
      }
      e.preventDefault();
      touchesDiff = pageX - touchesStart.x;
      let changed;
      if (touchesDiff * inverter < 0 && Math.abs(touchesDiff) > toggleWidth / 3 && touchStartChecked) {
        changed = true;
      }
      if (touchesDiff * inverter > 0 && Math.abs(touchesDiff) > toggleWidth / 3 && !touchStartChecked) {
        changed = true;
      }
      if (changed) {
        touchesStart.x = pageX;
        toggle5.checked = !touchStartChecked;
        touchStartChecked = !touchStartChecked;
      }
    }
    function handleTouchEnd() {
      if (!isTouched || toggle5.disabled) {
        if (isScrolling) $el.removeClass("toggle-active-state");
        isTouched = false;
        return;
      }
      const inverter = app.rtl ? -1 : 1;
      isTouched = false;
      $el.removeClass("toggle-active-state");
      let changed;
      if (now() - touchStartTime < 300) {
        if (touchesDiff * inverter < 0 && touchStartChecked) {
          changed = true;
        }
        if (touchesDiff * inverter > 0 && !touchStartChecked) {
          changed = true;
        }
        if (changed) {
          toggle5.checked = !touchStartChecked;
        }
      }
    }
    function handleInputChange() {
      toggle5.$el.trigger("toggle:change");
      toggle5.emit("local::change toggleChange", toggle5);
    }
    toggle5.attachEvents = function attachEvents2() {
      const passive = support2.passiveListener ? {
        passive: true
      } : false;
      $el.on(app.touchEvents.start, handleTouchStart, passive);
      app.on("touchmove", handleTouchMove);
      app.on("touchend:passive", handleTouchEnd);
      toggle5.$inputEl.on("change", handleInputChange);
    };
    toggle5.detachEvents = function detachEvents2() {
      const passive = support2.passiveListener ? {
        passive: true
      } : false;
      $el.off(app.touchEvents.start, handleTouchStart, passive);
      app.off("touchmove", handleTouchMove);
      app.off("touchend:passive", handleTouchEnd);
      toggle5.$inputEl.off("change", handleInputChange);
    };
    toggle5.useModules();
    toggle5.init();
  }
  toggle() {
    const toggle5 = this;
    toggle5.checked = !toggle5.checked;
  }
  init() {
    const toggle5 = this;
    toggle5.attachEvents();
  }
  destroy() {
    let toggle5 = this;
    toggle5.$el.trigger("toggle:beforedestroy");
    toggle5.emit("local::beforeDestroy toggleBeforeDestroy", toggle5);
    delete toggle5.$el[0].f7Toggle;
    toggle5.detachEvents();
    deleteProps(toggle5);
    toggle5 = null;
  }
};
var toggle_class_default = Toggle;

// node_modules/framework7/components/toggle/toggle.js
var toggle_default = {
  name: "toggle",
  create() {
    const app = this;
    app.toggle = ConstructorMethods({
      defaultSelector: ".toggle",
      constructor: toggle_class_default,
      app,
      domProp: "f7Toggle"
    });
  },
  static: {
    Toggle: toggle_class_default
  },
  on: {
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".toggle-init").each((toggleEl) => app.toggle.create({
        el: toggleEl
      }));
    },
    tabBeforeRemove(tabEl) {
      dom7_default(tabEl).find(".toggle-init").each((toggleEl) => {
        if (toggleEl.f7Toggle) toggleEl.f7Toggle.destroy();
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".toggle-init").each((toggleEl) => app.toggle.create({
        el: toggleEl
      }));
    },
    pageBeforeRemove(page) {
      page.$el.find(".toggle-init").each((toggleEl) => {
        if (toggleEl.f7Toggle) toggleEl.f7Toggle.destroy();
      });
    }
  },
  vnode: {
    "toggle-init": {
      insert(vnode) {
        const app = this;
        const toggleEl = vnode.elm;
        app.toggle.create({
          el: toggleEl
        });
      },
      destroy(vnode) {
        const toggleEl = vnode.elm;
        if (toggleEl.f7Toggle) toggleEl.f7Toggle.destroy();
      }
    }
  }
};

// node_modules/framework7/components/range/range-class.js
var Range = class extends class_default {
  constructor(app, params) {
    super(params, [app]);
    const range = this;
    const support2 = getSupport();
    const defaults2 = {
      el: null,
      inputEl: null,
      dual: false,
      step: 1,
      label: false,
      min: 0,
      max: 100,
      value: 0,
      draggableBar: true,
      vertical: false,
      verticalReversed: false,
      formatLabel: null,
      scale: false,
      scaleSteps: 5,
      scaleSubSteps: 0,
      formatScaleLabel: null,
      limitKnobPosition: app.theme === "ios"
    };
    range.useModulesParams(defaults2);
    range.params = extend(defaults2, params);
    const el = range.params.el;
    if (!el) return range;
    const $el = dom7_default(el);
    if ($el.length === 0) return range;
    if ($el[0].f7Range) return $el[0].f7Range;
    const dataset = $el.dataset();
    "step min max value scaleSteps scaleSubSteps".split(" ").forEach((paramName) => {
      if (typeof params[paramName] === "undefined" && typeof dataset[paramName] !== "undefined") {
        range.params[paramName] = parseFloat(dataset[paramName]);
      }
    });
    "dual label vertical verticalReversed scale".split(" ").forEach((paramName) => {
      if (typeof params[paramName] === "undefined" && typeof dataset[paramName] !== "undefined") {
        range.params[paramName] = dataset[paramName];
      }
    });
    if (!range.params.value) {
      if (typeof dataset.value !== "undefined") range.params.value = dataset.value;
      if (typeof dataset.valueLeft !== "undefined" && typeof dataset.valueRight !== "undefined") {
        range.params.value = [parseFloat(dataset.valueLeft), parseFloat(dataset.valueRight)];
      }
    }
    let $inputEl;
    if (!range.params.dual) {
      if (range.params.inputEl) {
        $inputEl = dom7_default(range.params.inputEl);
      } else if ($el.find('input[type="range"]').length) {
        $inputEl = $el.find('input[type="range"]').eq(0);
      }
    }
    const {
      dual,
      step,
      label,
      min,
      max,
      value,
      vertical,
      verticalReversed,
      scale,
      scaleSteps,
      scaleSubSteps,
      limitKnobPosition
    } = range.params;
    extend(range, {
      app,
      $el,
      el: $el[0],
      $inputEl,
      inputEl: $inputEl ? $inputEl[0] : void 0,
      dual,
      step,
      label,
      min,
      max,
      value,
      previousValue: value,
      vertical,
      verticalReversed,
      scale,
      scaleSteps,
      scaleSubSteps,
      limitKnobPosition
    });
    if ($inputEl) {
      "step min max".split(" ").forEach((paramName) => {
        if (!params[paramName] && $inputEl.attr(paramName)) {
          range.params[paramName] = parseFloat($inputEl.attr(paramName));
          range[paramName] = parseFloat($inputEl.attr(paramName));
        }
      });
      if (typeof $inputEl.val() !== "undefined") {
        range.params.value = parseFloat($inputEl.val());
        range.value = parseFloat($inputEl.val());
      }
    }
    if (range.dual) {
      $el.addClass("range-slider-dual");
    }
    if (range.label) {
      $el.addClass("range-slider-label");
    }
    if (range.vertical) {
      $el.addClass("range-slider-vertical");
      if (range.verticalReversed) {
        $el.addClass("range-slider-vertical-reversed");
      }
    } else {
      $el.addClass("range-slider-horizontal");
    }
    const $barEl = dom7_default('<div class="range-bar"></div>');
    const $barActiveEl = dom7_default('<div class="range-bar-active"></div>');
    $barEl.append($barActiveEl);
    const knobHTML = `
      <div class="range-knob-wrap">
        <div class="range-knob"></div>
        ${range.label ? '<div class="range-knob-label"></div>' : ""}
      </div>
    `;
    const knobs = [dom7_default(knobHTML)];
    if (range.dual) {
      knobs.push(dom7_default(knobHTML));
    }
    $el.append($barEl);
    knobs.forEach(($knobEl) => {
      $el.append($knobEl);
    });
    const labels = [];
    if (range.label) {
      labels.push(knobs[0].find(".range-knob-label"));
      if (range.dual) {
        labels.push(knobs[1].find(".range-knob-label"));
      }
    }
    let $scaleEl;
    if (range.scale && range.scaleSteps >= 1) {
      $scaleEl = dom7_default(`
        <div class="range-scale">
          ${range.renderScale()}
        </div>
      `);
      $el.append($scaleEl);
    }
    extend(range, {
      knobs,
      labels,
      $barEl,
      $barActiveEl,
      $scaleEl
    });
    $el[0].f7Range = range;
    let isTouched;
    const touchesStart = {};
    let isScrolling;
    let rangeOffset;
    let rangeOffsetLeft;
    let rangeOffsetTop;
    let $touchedKnobEl;
    let dualValueIndex;
    let valueChangedByTouch;
    let targetTouchIdentifier;
    function onTouchChange() {
      valueChangedByTouch = true;
    }
    function handleTouchStart(e) {
      if (isTouched) return;
      if (!range.params.draggableBar) {
        if (dom7_default(e.target).closest(".range-knob").length === 0) {
          return;
        }
      }
      valueChangedByTouch = false;
      touchesStart.x = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
      touchesStart.y = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
      if (e.type === "touchstart") {
        targetTouchIdentifier = e.targetTouches[0].identifier;
      }
      isTouched = true;
      isScrolling = void 0;
      rangeOffset = $el.offset();
      rangeOffsetLeft = rangeOffset.left;
      rangeOffsetTop = rangeOffset.top;
      let progress;
      if (range.vertical) {
        progress = (touchesStart.y - rangeOffsetTop) / range.rangeHeight;
        if (!range.verticalReversed) progress = 1 - progress;
      } else if (range.app.rtl) {
        progress = (rangeOffsetLeft + range.rangeWidth - touchesStart.x) / range.rangeWidth;
      } else {
        progress = (touchesStart.x - rangeOffsetLeft) / range.rangeWidth;
      }
      let newValue = progress * (range.max - range.min) + range.min;
      if (range.dual) {
        if (Math.abs(range.value[0] - newValue) < Math.abs(range.value[1] - newValue)) {
          dualValueIndex = 0;
          $touchedKnobEl = range.knobs[0];
          newValue = [newValue, range.value[1]];
        } else {
          dualValueIndex = 1;
          $touchedKnobEl = range.knobs[1];
          newValue = [range.value[0], newValue];
        }
      } else {
        $touchedKnobEl = range.knobs[0];
        newValue = progress * (range.max - range.min) + range.min;
      }
      nextTick(() => {
        if (isTouched) $touchedKnobEl.addClass("range-knob-active-state");
      }, 70);
      range.on("change", onTouchChange);
      range.setValue(newValue, true);
    }
    function handleTouchMove(e) {
      if (!isTouched) return;
      let pageX;
      let pageY;
      if (e.type === "touchmove") {
        for (let i = 0; i < e.targetTouches.length; i += 1) {
          if (e.targetTouches[i].identifier === targetTouchIdentifier) {
            pageX = e.targetTouches[i].pageX;
            pageY = e.targetTouches[i].pageY;
          }
        }
      } else {
        pageX = e.pageX;
        pageY = e.pageY;
      }
      if (typeof pageX === "undefined" && typeof pageY === "undefined") return;
      if (typeof isScrolling === "undefined" && !range.vertical) {
        isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));
      }
      if (isScrolling) {
        isTouched = false;
        return;
      }
      e.preventDefault();
      let progress;
      if (range.vertical) {
        progress = (pageY - rangeOffsetTop) / range.rangeHeight;
        if (!range.verticalReversed) progress = 1 - progress;
      } else if (range.app.rtl) {
        progress = (rangeOffsetLeft + range.rangeWidth - pageX) / range.rangeWidth;
      } else {
        progress = (pageX - rangeOffsetLeft) / range.rangeWidth;
      }
      let newValue = progress * (range.max - range.min) + range.min;
      if (range.dual) {
        let leftValue;
        let rightValue;
        if (dualValueIndex === 0) {
          leftValue = newValue;
          rightValue = range.value[1];
          if (leftValue > rightValue) {
            rightValue = leftValue;
          }
        } else {
          leftValue = range.value[0];
          rightValue = newValue;
          if (rightValue < leftValue) {
            leftValue = rightValue;
          }
        }
        newValue = [leftValue, rightValue];
      }
      range.setValue(newValue, true);
    }
    function handleTouchEnd(e) {
      if (e.type === "touchend") {
        let touchEnded;
        for (let i = 0; i < e.changedTouches.length; i += 1) {
          if (e.changedTouches[i].identifier === targetTouchIdentifier) touchEnded = true;
        }
        if (!touchEnded) return;
      }
      if (!isTouched) {
        if (isScrolling) $touchedKnobEl.removeClass("range-knob-active-state");
        isTouched = false;
        return;
      }
      range.off("change", onTouchChange);
      isTouched = false;
      $touchedKnobEl.removeClass("range-knob-active-state");
      if (valueChangedByTouch && range.$inputEl && !range.dual) {
        range.$inputEl.trigger("change");
      }
      valueChangedByTouch = false;
      if (typeof range.previousValue !== "undefined") {
        if (range.dual && (range.previousValue[0] !== range.value[0] || range.previousValue[1] !== range.value[1]) || !range.dual && range.previousValue !== range.value) {
          range.$el.trigger("range:changed", range.value);
          range.emit("local::changed rangeChanged", range, range.value);
        }
      }
    }
    function handleResize() {
      range.calcSize();
      range.layout();
    }
    let parentModals;
    let parentPanel;
    let parentPage;
    range.attachEvents = function attachEvents2() {
      const passive = support2.passiveListener ? {
        passive: true
      } : false;
      range.$el.on(app.touchEvents.start, handleTouchStart, passive);
      app.on("touchmove", handleTouchMove);
      app.on("touchend:passive", handleTouchEnd);
      app.on("tabShow", handleResize);
      app.on("resize", handleResize);
      parentModals = range.$el.parents(".sheet-modal, .actions-modal, .popup, .popover, .login-screen, .dialog, .toast");
      parentModals.on("modal:open", handleResize);
      parentPanel = range.$el.parents(".panel");
      parentPanel.on("panel:open panel:resize", handleResize);
      parentPage = range.$el.parents(".page").eq(0);
      parentPage.on("page:reinit", handleResize);
    };
    range.detachEvents = function detachEvents2() {
      const passive = support2.passiveListener ? {
        passive: true
      } : false;
      range.$el.off(app.touchEvents.start, handleTouchStart, passive);
      app.off("touchmove", handleTouchMove);
      app.off("touchend:passive", handleTouchEnd);
      app.off("tabShow", handleResize);
      app.off("resize", handleResize);
      if (parentModals) {
        parentModals.off("modal:open", handleResize);
      }
      if (parentPanel) {
        parentPanel.off("panel:open panel:resize", handleResize);
      }
      if (parentPage) {
        parentPage.off("page:reinit", handleResize);
      }
      parentModals = null;
      parentPanel = null;
      parentPage = null;
    };
    range.useModules();
    range.init();
    return range;
  }
  calcSize() {
    const range = this;
    if (range.vertical) {
      const height = range.$el.outerHeight();
      if (height === 0) return;
      range.rangeHeight = height;
      range.knobHeight = range.knobs[0].outerHeight();
    } else {
      const width = range.$el.outerWidth();
      if (width === 0) return;
      range.rangeWidth = width;
      range.knobWidth = range.knobs[0].outerWidth();
    }
  }
  layout() {
    const range = this;
    const {
      app,
      knobWidth,
      knobHeight,
      rangeWidth,
      rangeHeight,
      min,
      max,
      knobs,
      $barActiveEl,
      value,
      label,
      labels,
      vertical,
      verticalReversed,
      limitKnobPosition
    } = range;
    const knobSize = vertical ? knobHeight : knobWidth;
    const rangeSize = vertical ? rangeHeight : rangeWidth;
    const positionProperty = vertical ? verticalReversed ? "top" : "bottom" : app.rtl ? "right" : "left";
    if (range.dual) {
      const progress = [(value[0] - min) / (max - min), (value[1] - min) / (max - min)];
      $barActiveEl.css({
        [positionProperty]: `${progress[0] * 100}%`,
        [vertical ? "height" : "width"]: `${(progress[1] - progress[0]) * 100}%`
      });
      knobs.forEach(($knobEl, knobIndex) => {
        let startPos = rangeSize * progress[knobIndex];
        if (limitKnobPosition) {
          const realStartPos = rangeSize * progress[knobIndex] - knobSize / 2;
          if (realStartPos < 0) startPos = knobSize / 2;
          if (realStartPos + knobSize > rangeSize) startPos = rangeSize - knobSize / 2;
        }
        $knobEl.css(positionProperty, `${startPos}px`);
        if (label) labels[knobIndex].text(range.formatLabel(value[knobIndex], labels[knobIndex][0]));
      });
    } else {
      const progress = (value - min) / (max - min);
      $barActiveEl.css(vertical ? "height" : "width", `${progress * 100}%`);
      let startPos = rangeSize * progress;
      if (limitKnobPosition) {
        const realStartPos = rangeSize * progress - knobSize / 2;
        if (realStartPos < 0) startPos = knobSize / 2;
        if (realStartPos + knobSize > rangeSize) startPos = rangeSize - knobSize / 2;
      }
      knobs[0].css(positionProperty, `${startPos}px`);
      if (label) labels[0].text(range.formatLabel(value, labels[0][0]));
    }
    if (range.dual && value.indexOf(min) >= 0 || !range.dual && value === min) {
      range.$el.addClass("range-slider-min");
    } else {
      range.$el.removeClass("range-slider-min");
    }
    if (range.dual && value.indexOf(max) >= 0 || !range.dual && value === max) {
      range.$el.addClass("range-slider-max");
    } else {
      range.$el.removeClass("range-slider-max");
    }
  }
  setValue(newValue, byTouchMove) {
    const range = this;
    const {
      step,
      min,
      max
    } = range;
    let valueChanged;
    let oldValue;
    if (range.dual) {
      oldValue = [range.value[0], range.value[1]];
      let newValues = newValue;
      if (!Array.isArray(newValues)) newValues = [newValue, newValue];
      if (newValue[0] > newValue[1]) {
        newValues = [newValues[0], newValues[0]];
      }
      newValues = newValues.map((value) => Math.max(Math.min(Math.round(value / step) * step, max), min));
      if (newValues[0] === range.value[0] && newValues[1] === range.value[1]) {
        return range;
      }
      newValues.forEach((value, valueIndex) => {
        range.value[valueIndex] = value;
      });
      valueChanged = oldValue[0] !== newValues[0] || oldValue[1] !== newValues[1];
      range.layout();
    } else {
      oldValue = range.value;
      const value = Math.max(Math.min(Math.round(newValue / step) * step, max), min);
      range.value = value;
      range.layout();
      valueChanged = oldValue !== value;
    }
    if (valueChanged) {
      range.previousValue = oldValue;
    }
    if (!valueChanged) return range;
    range.$el.trigger("range:change", range.value);
    if (range.$inputEl && !range.dual) {
      range.$inputEl.val(range.value);
      if (!byTouchMove) {
        range.$inputEl.trigger("input change");
      } else {
        range.$inputEl.trigger("input");
      }
    }
    if (!byTouchMove) {
      range.$el.trigger("range:changed", range.value);
      range.emit("local::changed rangeChanged", range, range.value);
    }
    range.emit("local::change rangeChange", range, range.value);
    return range;
  }
  getValue() {
    return this.value;
  }
  formatLabel(value, labelEl) {
    const range = this;
    if (range.params.formatLabel) return range.params.formatLabel.call(range, value, labelEl);
    return value;
  }
  formatScaleLabel(value) {
    const range = this;
    if (range.params.formatScaleLabel) return range.params.formatScaleLabel.call(range, value);
    return value;
  }
  renderScale() {
    const range = this;
    const {
      app,
      verticalReversed,
      vertical
    } = range;
    const positionProperty = vertical ? verticalReversed ? "top" : "bottom" : app.rtl ? "right" : "left";
    let html = "";
    Array.from({
      length: range.scaleSteps + 1
    }).forEach((scaleEl, index) => {
      const scaleStepValue = (range.max - range.min) / range.scaleSteps;
      const scaleValue = range.min + scaleStepValue * index;
      const progress = (scaleValue - range.min) / (range.max - range.min);
      html += `<div class="range-scale-step" style="${positionProperty}: ${progress * 100}%">${range.formatScaleLabel(scaleValue)}</div>`;
      if (range.scaleSubSteps && range.scaleSubSteps > 1 && index < range.scaleSteps) {
        Array.from({
          length: range.scaleSubSteps - 1
        }).forEach((subStepEl, subIndex) => {
          const subStep = scaleStepValue / range.scaleSubSteps;
          const scaleSubValue = scaleValue + subStep * (subIndex + 1);
          const subProgress = (scaleSubValue - range.min) / (range.max - range.min);
          html += `<div class="range-scale-step range-scale-substep" style="${positionProperty}: ${subProgress * 100}%"></div>`;
        });
      }
    });
    return html;
  }
  updateScale() {
    const range = this;
    if (!range.scale || range.scaleSteps < 1) {
      if (range.$scaleEl) range.$scaleEl.remove();
      delete range.$scaleEl;
      return;
    }
    if (!range.$scaleEl) {
      range.$scaleEl = dom7_default('<div class="range-scale"></div>');
      range.$el.append(range.$scaleEl);
    }
    range.$scaleEl.html(range.renderScale());
  }
  init() {
    const range = this;
    range.calcSize();
    range.layout();
    range.attachEvents();
    return range;
  }
  destroy() {
    let range = this;
    range.$el.trigger("range:beforedestroy");
    range.emit("local::beforeDestroy rangeBeforeDestroy", range);
    delete range.$el[0].f7Range;
    range.detachEvents();
    deleteProps(range);
    range = null;
  }
};
var range_class_default = Range;

// node_modules/framework7/components/range/range.js
var range_default = {
  name: "range",
  create() {
    const app = this;
    app.range = extend(ConstructorMethods({
      defaultSelector: ".range-slider",
      constructor: range_class_default,
      app,
      domProp: "f7Range"
    }), {
      getValue(el) {
        if (el === void 0) {
          el = ".range-slider";
        }
        const range = app.range.get(el);
        if (range) return range.getValue();
        return void 0;
      },
      setValue(el, value) {
        if (el === void 0) {
          el = ".range-slider";
        }
        const range = app.range.get(el);
        if (range) return range.setValue(value);
        return void 0;
      }
    });
  },
  static: {
    Range: range_class_default
  },
  on: {
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".range-slider-init").each((rangeEl) => new range_class_default(app, {
        el: rangeEl
      }));
    },
    tabBeforeRemove(tabEl) {
      dom7_default(tabEl).find(".range-slider-init").each((rangeEl) => {
        if (rangeEl.f7Range) rangeEl.f7Range.destroy();
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".range-slider-init").each((rangeEl) => new range_class_default(app, {
        el: rangeEl
      }));
    },
    pageBeforeRemove(page) {
      page.$el.find(".range-slider-init").each((rangeEl) => {
        if (rangeEl.f7Range) rangeEl.f7Range.destroy();
      });
    }
  },
  vnode: {
    "range-slider-init": {
      insert(vnode) {
        const rangeEl = vnode.elm;
        const app = this;
        app.range.create({
          el: rangeEl
        });
      },
      destroy(vnode) {
        const rangeEl = vnode.elm;
        if (rangeEl.f7Range) rangeEl.f7Range.destroy();
      }
    }
  }
};

// node_modules/framework7/components/stepper/stepper-class.js
var Stepper = class extends class_default {
  constructor(app, params) {
    super(params, [app]);
    const stepper = this;
    const defaults2 = {
      el: null,
      inputEl: null,
      valueEl: null,
      value: 0,
      formatValue: null,
      step: 1,
      min: 0,
      max: 100,
      watchInput: true,
      autorepeat: false,
      autorepeatDynamic: false,
      wraps: false,
      manualInputMode: false,
      decimalPoint: 4,
      buttonsEndInputMode: true
    };
    stepper.useModulesParams(defaults2);
    stepper.params = extend(defaults2, params);
    if (stepper.params.value < stepper.params.min) {
      stepper.params.value = stepper.params.min;
    }
    if (stepper.params.value > stepper.params.max) {
      stepper.params.value = stepper.params.max;
    }
    const el = stepper.params.el;
    if (!el) return stepper;
    const $el = dom7_default(el);
    if ($el.length === 0) return stepper;
    if ($el[0].f7Stepper) return $el[0].f7Stepper;
    let $inputEl;
    if (stepper.params.inputEl) {
      $inputEl = dom7_default(stepper.params.inputEl);
    } else if ($el.find(".stepper-input-wrap").find("input, textarea").length) {
      $inputEl = $el.find(".stepper-input-wrap").find("input, textarea").eq(0);
    }
    if ($inputEl && $inputEl.length) {
      "step min max".split(" ").forEach((paramName) => {
        if (!params[paramName] && $inputEl.attr(paramName)) {
          stepper.params[paramName] = parseFloat($inputEl.attr(paramName));
        }
      });
      const decimalPoint2 = parseInt(stepper.params.decimalPoint, 10);
      if (Number.isNaN(decimalPoint2)) {
        stepper.params.decimalPoint = 0;
      } else {
        stepper.params.decimalPoint = decimalPoint2;
      }
      const inputValue = parseFloat($inputEl.val());
      if (typeof params.value === "undefined" && !Number.isNaN(inputValue) && (inputValue || inputValue === 0)) {
        stepper.params.value = inputValue;
      }
    }
    let $valueEl;
    if (stepper.params.valueEl) {
      $valueEl = dom7_default(stepper.params.valueEl);
    } else if ($el.find(".stepper-value").length) {
      $valueEl = $el.find(".stepper-value").eq(0);
    }
    const $buttonPlusEl = $el.find(".stepper-button-plus");
    const $buttonMinusEl = $el.find(".stepper-button-minus");
    const {
      step,
      min,
      max,
      value,
      decimalPoint
    } = stepper.params;
    extend(stepper, {
      app,
      $el,
      el: $el[0],
      $buttonPlusEl,
      buttonPlusEl: $buttonPlusEl[0],
      $buttonMinusEl,
      buttonMinusEl: $buttonMinusEl[0],
      $inputEl,
      inputEl: $inputEl ? $inputEl[0] : void 0,
      $valueEl,
      valueEl: $valueEl ? $valueEl[0] : void 0,
      step,
      min,
      max,
      value,
      decimalPoint,
      typeModeChanged: false
    });
    $el[0].f7Stepper = stepper;
    const touchesStart = {};
    let isTouched;
    let isScrolling;
    let preventButtonClick;
    let intervalId;
    let timeoutId;
    let autorepeatAction = null;
    let autorepeatInAction = false;
    let manualInput = false;
    function dynamicRepeat(current, progressions, startsIn, progressionStep, repeatEvery, action) {
      clearTimeout(timeoutId);
      timeoutId = setTimeout(() => {
        if (current === 1) {
          preventButtonClick = true;
          autorepeatInAction = true;
        }
        clearInterval(intervalId);
        action();
        intervalId = setInterval(() => {
          action();
        }, repeatEvery);
        if (current < progressions) {
          dynamicRepeat(current + 1, progressions, startsIn, progressionStep, repeatEvery / 2, action);
        }
      }, current === 1 ? startsIn : progressionStep);
    }
    function onTouchStart2(e) {
      if (isTouched) return;
      if (manualInput) {
        return;
      }
      if (dom7_default(e.target).closest($buttonPlusEl).length) {
        autorepeatAction = "increment";
      } else if (dom7_default(e.target).closest($buttonMinusEl).length) {
        autorepeatAction = "decrement";
      }
      if (!autorepeatAction) return;
      touchesStart.x = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
      touchesStart.y = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
      isTouched = true;
      isScrolling = void 0;
      const progressions = stepper.params.autorepeatDynamic ? 4 : 1;
      dynamicRepeat(1, progressions, 500, 1e3, 300, () => {
        stepper[autorepeatAction]();
      });
    }
    function onTouchMove2(e) {
      if (!isTouched) return;
      if (manualInput) {
        return;
      }
      const pageX = e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX;
      const pageY = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
      if (typeof isScrolling === "undefined" && !autorepeatInAction) {
        isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));
      }
      const distance = ((pageX - touchesStart.x) ** 2 + (pageY - touchesStart.y) ** 2) ** 0.5;
      if (isScrolling || distance > 20) {
        isTouched = false;
        clearTimeout(timeoutId);
        clearInterval(intervalId);
      }
    }
    function onTouchEnd2() {
      clearTimeout(timeoutId);
      clearInterval(intervalId);
      autorepeatAction = null;
      autorepeatInAction = false;
      isTouched = false;
    }
    function onMinusClick() {
      if (manualInput) {
        if (stepper.params.buttonsEndInputMode) {
          manualInput = false;
          stepper.endTypeMode(true);
        }
        return;
      }
      if (preventButtonClick) {
        preventButtonClick = false;
        return;
      }
      stepper.decrement(true);
    }
    function onPlusClick() {
      if (manualInput) {
        if (stepper.params.buttonsEndInputMode) {
          manualInput = false;
          stepper.endTypeMode(true);
        }
        return;
      }
      if (preventButtonClick) {
        preventButtonClick = false;
        return;
      }
      stepper.increment(true);
    }
    function onInputClick(e) {
      if (!e.target.readOnly && stepper.params.manualInputMode) {
        manualInput = true;
        if (typeof e.target.selectionStart === "number") {
          e.target.selectionStart = e.target.value.length;
          e.target.selectionEnd = e.target.value.length;
        }
      }
    }
    function onInputKey(e) {
      if (e.keyCode === 13 || e.which === 13) {
        e.preventDefault();
        manualInput = false;
        stepper.endTypeMode();
      }
    }
    function onInputBlur() {
      manualInput = false;
      stepper.endTypeMode(true);
    }
    function onInput(e) {
      if (manualInput) {
        stepper.typeValue(e.target.value);
        return;
      }
      if (e.detail && e.detail.sentByF7Stepper) return;
      stepper.setValue(e.target.value, true);
    }
    stepper.attachEvents = function attachEvents2() {
      $buttonMinusEl.on("click", onMinusClick);
      $buttonPlusEl.on("click", onPlusClick);
      if (stepper.params.watchInput && $inputEl && $inputEl.length) {
        $inputEl.on("input", onInput);
        $inputEl.on("click", onInputClick);
        $inputEl.on("blur", onInputBlur);
        $inputEl.on("keyup", onInputKey);
      }
      if (stepper.params.autorepeat) {
        app.on("touchstart:passive", onTouchStart2);
        app.on("touchmove:active", onTouchMove2);
        app.on("touchend:passive", onTouchEnd2);
      }
    };
    stepper.detachEvents = function detachEvents2() {
      $buttonMinusEl.off("click", onMinusClick);
      $buttonPlusEl.off("click", onPlusClick);
      if (stepper.params.watchInput && $inputEl && $inputEl.length) {
        $inputEl.off("input", onInput);
        $inputEl.off("click", onInputClick);
        $inputEl.off("blur", onInputBlur);
        $inputEl.off("keyup", onInputKey);
      }
    };
    stepper.useModules();
    stepper.init();
    return stepper;
  }
  minus() {
    return this.decrement();
  }
  plus() {
    return this.increment();
  }
  decrement() {
    const stepper = this;
    return stepper.setValue(stepper.value - stepper.step, false, true);
  }
  increment() {
    const stepper = this;
    return stepper.setValue(stepper.value + stepper.step, false, true);
  }
  setValue(newValue, forceUpdate, withWraps) {
    const stepper = this;
    const {
      step,
      min,
      max
    } = stepper;
    const oldValue = stepper.value;
    let value = Math.round(newValue / step) * step;
    if (stepper.params.wraps && withWraps) {
      if (value > max) value = min;
      if (value < min) value = max;
    } else {
      value = Math.max(Math.min(value, max), min);
    }
    if (Number.isNaN(value)) {
      value = oldValue;
    }
    stepper.value = value;
    const valueChanged = oldValue !== value;
    if (!valueChanged && !forceUpdate) return stepper;
    stepper.$el.trigger("stepper:change", stepper.value);
    const formattedValue = stepper.formatValue(stepper.value);
    if (stepper.$inputEl && stepper.$inputEl.length) {
      stepper.$inputEl.val(formattedValue);
      stepper.$inputEl.trigger("input change", {
        sentByF7Stepper: true
      });
    }
    if (stepper.$valueEl && stepper.$valueEl.length) {
      stepper.$valueEl.html(formattedValue);
    }
    stepper.emit("local::change stepperChange", stepper, stepper.value);
    return stepper;
  }
  endTypeMode(noBlur) {
    const stepper = this;
    const {
      min,
      max
    } = stepper;
    let value = parseFloat(stepper.value);
    if (Number.isNaN(value)) value = 0;
    value = Math.max(Math.min(value, max), min);
    stepper.value = value;
    if (!stepper.typeModeChanged) {
      if (stepper.$inputEl && stepper.$inputEl.length && !noBlur) {
        stepper.$inputEl.blur();
      }
      return stepper;
    }
    stepper.typeModeChanged = false;
    stepper.$el.trigger("stepper:change", stepper.value);
    const formattedValue = stepper.formatValue(stepper.value);
    if (stepper.$inputEl && stepper.$inputEl.length) {
      stepper.$inputEl.val(formattedValue);
      stepper.$inputEl.trigger("input change", {
        sentByF7Stepper: true
      });
      if (!noBlur) stepper.$inputEl.blur();
    }
    if (stepper.$valueEl && stepper.$valueEl.length) {
      stepper.$valueEl.html(formattedValue);
    }
    stepper.emit("local::change stepperChange", stepper, stepper.value);
    return stepper;
  }
  typeValue(value) {
    const stepper = this;
    stepper.typeModeChanged = true;
    let inputTxt = String(value);
    if (inputTxt.length === 1 && inputTxt === "-") return stepper;
    if (inputTxt.lastIndexOf(".") + 1 === inputTxt.length || inputTxt.lastIndexOf(",") + 1 === inputTxt.length) {
      if (inputTxt.lastIndexOf(".") !== inputTxt.indexOf(".") || inputTxt.lastIndexOf(",") !== inputTxt.indexOf(",")) {
        inputTxt = inputTxt.slice(0, -1);
        stepper.value = inputTxt;
        stepper.$inputEl.val(stepper.value);
        return stepper;
      }
    } else {
      let newValue = parseFloat(inputTxt.replace(",", "."));
      if (newValue === 0) {
        stepper.value = inputTxt.replace(",", ".");
        stepper.$inputEl.val(stepper.value);
        return stepper;
      }
      if (Number.isNaN(newValue)) {
        stepper.value = 0;
        stepper.$inputEl.val(stepper.value);
        return stepper;
      }
      const powVal = 10 ** stepper.params.decimalPoint;
      newValue = Math.round(newValue * powVal).toFixed(stepper.params.decimalPoint + 1) / powVal;
      stepper.value = parseFloat(String(newValue).replace(",", "."));
      stepper.$inputEl.val(stepper.value);
      return stepper;
    }
    stepper.value = inputTxt;
    stepper.$inputEl.val(inputTxt);
    return stepper;
  }
  getValue() {
    return this.value;
  }
  formatValue(value) {
    const stepper = this;
    if (!stepper.params.formatValue) return value;
    return stepper.params.formatValue.call(stepper, value);
  }
  init() {
    const stepper = this;
    stepper.attachEvents();
    if (stepper.$valueEl && stepper.$valueEl.length) {
      const formattedValue = stepper.formatValue(stepper.value);
      stepper.$valueEl.html(formattedValue);
    }
    return stepper;
  }
  destroy() {
    let stepper = this;
    stepper.$el.trigger("stepper:beforedestroy");
    stepper.emit("local::beforeDestroy stepperBeforeDestroy", stepper);
    delete stepper.$el[0].f7Stepper;
    stepper.detachEvents();
    deleteProps(stepper);
    stepper = null;
  }
};
var stepper_class_default = Stepper;

// node_modules/framework7/components/stepper/stepper.js
var stepper_default = {
  name: "stepper",
  create() {
    const app = this;
    app.stepper = extend(ConstructorMethods({
      defaultSelector: ".stepper",
      constructor: stepper_class_default,
      app,
      domProp: "f7Stepper"
    }), {
      getValue(el) {
        if (el === void 0) {
          el = ".stepper";
        }
        const stepper = app.stepper.get(el);
        if (stepper) return stepper.getValue();
        return void 0;
      },
      setValue(el, value) {
        if (el === void 0) {
          el = ".stepper";
        }
        const stepper = app.stepper.get(el);
        if (stepper) return stepper.setValue(value);
        return void 0;
      }
    });
  },
  static: {
    Stepper: stepper_class_default
  },
  on: {
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".stepper-init").each((stepperEl) => {
        const dataset = dom7_default(stepperEl).dataset();
        app.stepper.create(extend({
          el: stepperEl
        }, dataset || {}));
      });
    },
    tabBeforeRemove(tabEl) {
      dom7_default(tabEl).find(".stepper-init").each((stepperEl) => {
        if (stepperEl.f7Stepper) stepperEl.f7Stepper.destroy();
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".stepper-init").each((stepperEl) => {
        const dataset = dom7_default(stepperEl).dataset();
        app.stepper.create(extend({
          el: stepperEl
        }, dataset || {}));
      });
    },
    pageBeforeRemove(page) {
      page.$el.find(".stepper-init").each((stepperEl) => {
        if (stepperEl.f7Stepper) stepperEl.f7Stepper.destroy();
      });
    }
  },
  vnode: {
    "stepper-init": {
      insert(vnode) {
        const app = this;
        const stepperEl = vnode.elm;
        const dataset = dom7_default(stepperEl).dataset();
        app.stepper.create(extend({
          el: stepperEl
        }, dataset || {}));
      },
      destroy(vnode) {
        const stepperEl = vnode.elm;
        if (stepperEl.f7Stepper) stepperEl.f7Stepper.destroy();
      }
    }
  }
};

// node_modules/framework7/components/searchbar/remove-diacritics.js
var defaultDiacriticsRemovalap = [{
  base: "A",
  letters: "AⒶAÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"
}, {
  base: "AA",
  letters: "Ꜳ"
}, {
  base: "AE",
  letters: "ÆǼǢ"
}, {
  base: "AO",
  letters: "Ꜵ"
}, {
  base: "AU",
  letters: "Ꜷ"
}, {
  base: "AV",
  letters: "ꜸꜺ"
}, {
  base: "AY",
  letters: "Ꜽ"
}, {
  base: "B",
  letters: "BⒷBḂḄḆɃƂƁ"
}, {
  base: "C",
  letters: "CⒸCĆĈĊČÇḈƇȻꜾ"
}, {
  base: "D",
  letters: "DⒹDḊĎḌḐḒḎĐƋƊƉꝹ"
}, {
  base: "DZ",
  letters: "DZDŽ"
}, {
  base: "Dz",
  letters: "DzDž"
}, {
  base: "E",
  letters: "EⒺEÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"
}, {
  base: "F",
  letters: "FⒻFḞƑꝻ"
}, {
  base: "G",
  letters: "GⒼGǴĜḠĞĠǦĢǤƓꞠꝽꝾ"
}, {
  base: "H",
  letters: "HⒽHĤḢḦȞḤḨḪĦⱧⱵꞍ"
}, {
  base: "I",
  letters: "IⒾIÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"
}, {
  base: "J",
  letters: "JⒿJĴɈ"
}, {
  base: "K",
  letters: "KⓀKḰǨḲĶḴƘⱩꝀꝂꝄꞢ"
}, {
  base: "L",
  letters: "LⓁLĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"
}, {
  base: "LJ",
  letters: "LJ"
}, {
  base: "Lj",
  letters: "Lj"
}, {
  base: "M",
  letters: "MⓂMḾṀṂⱮƜ"
}, {
  base: "N",
  letters: "NⓃNǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"
}, {
  base: "NJ",
  letters: "NJ"
}, {
  base: "Nj",
  letters: "Nj"
}, {
  base: "O",
  letters: "OⓄOÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"
}, {
  base: "OI",
  letters: "Ƣ"
}, {
  base: "OO",
  letters: "Ꝏ"
}, {
  base: "OU",
  letters: "Ȣ"
}, {
  base: "OE",
  letters: "ŒŒ"
}, {
  base: "oe",
  letters: "œœ"
}, {
  base: "P",
  letters: "PⓅPṔṖƤⱣꝐꝒꝔ"
}, {
  base: "Q",
  letters: "QⓆQꝖꝘɊ"
}, {
  base: "R",
  letters: "RⓇRŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"
}, {
  base: "S",
  letters: "SⓈSẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"
}, {
  base: "T",
  letters: "TⓉTṪŤṬȚŢṰṮŦƬƮȾꞆ"
}, {
  base: "TZ",
  letters: "Ꜩ"
}, {
  base: "U",
  letters: "UⓊUÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"
}, {
  base: "V",
  letters: "VⓋVṼṾƲꝞɅ"
}, {
  base: "VY",
  letters: "Ꝡ"
}, {
  base: "W",
  letters: "WⓌWẀẂŴẆẄẈⱲ"
}, {
  base: "X",
  letters: "XⓍXẊẌ"
}, {
  base: "Y",
  letters: "YⓎYỲÝŶỸȲẎŸỶỴƳɎỾ"
}, {
  base: "Z",
  letters: "ZⓏZŹẐŻŽẒẔƵȤⱿⱫꝢ"
}, {
  base: "a",
  letters: "aⓐaẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"
}, {
  base: "aa",
  letters: "ꜳ"
}, {
  base: "ae",
  letters: "æǽǣ"
}, {
  base: "ao",
  letters: "ꜵ"
}, {
  base: "au",
  letters: "ꜷ"
}, {
  base: "av",
  letters: "ꜹꜻ"
}, {
  base: "ay",
  letters: "ꜽ"
}, {
  base: "b",
  letters: "bⓑbḃḅḇƀƃɓ"
}, {
  base: "c",
  letters: "cⓒcćĉċčçḉƈȼꜿↄ"
}, {
  base: "d",
  letters: "dⓓdḋďḍḑḓḏđƌɖɗꝺ"
}, {
  base: "dz",
  letters: "dzdž"
}, {
  base: "e",
  letters: "eⓔeèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"
}, {
  base: "f",
  letters: "fⓕfḟƒꝼ"
}, {
  base: "g",
  letters: "gⓖgǵĝḡğġǧģǥɠꞡᵹꝿ"
}, {
  base: "h",
  letters: "hⓗhĥḣḧȟḥḩḫẖħⱨⱶɥ"
}, {
  base: "hv",
  letters: "ƕ"
}, {
  base: "i",
  letters: "iⓘiìíîĩīĭïḯỉǐȉȋịįḭɨı"
}, {
  base: "j",
  letters: "jⓙjĵǰɉ"
}, {
  base: "k",
  letters: "kⓚkḱǩḳķḵƙⱪꝁꝃꝅꞣ"
}, {
  base: "l",
  letters: "lⓛlŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"
}, {
  base: "lj",
  letters: "lj"
}, {
  base: "m",
  letters: "mⓜmḿṁṃɱɯ"
}, {
  base: "n",
  letters: "nⓝnǹńñṅňṇņṋṉƞɲʼnꞑꞥ"
}, {
  base: "nj",
  letters: "nj"
}, {
  base: "o",
  letters: "oⓞoòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"
}, {
  base: "oi",
  letters: "ƣ"
}, {
  base: "ou",
  letters: "ȣ"
}, {
  base: "oo",
  letters: "ꝏ"
}, {
  base: "p",
  letters: "pⓟpṕṗƥᵽꝑꝓꝕ"
}, {
  base: "q",
  letters: "qⓠqɋꝗꝙ"
}, {
  base: "r",
  letters: "rⓡrŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"
}, {
  base: "s",
  letters: "sⓢsßśṥŝṡšṧṣṩșşȿꞩꞅẛ"
}, {
  base: "t",
  letters: "tⓣtṫẗťṭțţṱṯŧƭʈⱦꞇ"
}, {
  base: "tz",
  letters: "ꜩ"
}, {
  base: "u",
  letters: "uⓤuùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"
}, {
  base: "v",
  letters: "vⓥvṽṿʋꝟʌ"
}, {
  base: "vy",
  letters: "ꝡ"
}, {
  base: "w",
  letters: "wⓦwẁẃŵẇẅẘẉⱳ"
}, {
  base: "x",
  letters: "xⓧxẋẍ"
}, {
  base: "y",
  letters: "yⓨyỳýŷỹȳẏÿỷẙỵƴɏỿ"
}, {
  base: "z",
  letters: "zⓩzźẑżžẓẕƶȥɀⱬꝣ"
}];
var diacriticsMap = {};
for (let i = 0; i < defaultDiacriticsRemovalap.length; i += 1) {
  const letters = defaultDiacriticsRemovalap[i].letters;
  for (let j = 0; j < letters.length; j += 1) {
    diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base;
  }
}
function removeDiacritics(str) {
  return str.replace(/[^\u0000-\u007E]/g, (a) => diacriticsMap[a] || a);
}
var remove_diacritics_default = removeDiacritics;

// node_modules/framework7/components/smart-select/smart-select-class.js
var SmartSelect = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const ss = this;
    const defaults2 = extend({
      on: {}
    }, app.params.smartSelect);
    ss.useModulesParams(defaults2);
    ss.params = extend({}, defaults2, params);
    ss.app = app;
    const $el = dom7_default(ss.params.el).eq(0);
    if ($el.length === 0) return ss;
    if ($el[0].f7SmartSelect) return $el[0].f7SmartSelect;
    const $selectEl = $el.find("select").eq(0);
    if ($selectEl.length === 0) return ss;
    let $valueEl;
    if (ss.params.setValueText) {
      $valueEl = dom7_default(ss.params.valueEl);
      if ($valueEl.length === 0) {
        $valueEl = $el.find(".item-after");
      }
      if ($valueEl.length === 0) {
        $valueEl = dom7_default('<div class="item-after"></div>');
        $valueEl.insertAfter($el.find(".item-title"));
      }
    }
    let url = params.url;
    if (!url) {
      if ($el.attr("href") && $el.attr("href") !== "#") url = $el.attr("href");
      else if ($selectEl.attr("name")) url = `${$selectEl.attr("name").toLowerCase()}-select/`;
    }
    if (!url) url = ss.params.url;
    const multiple = $selectEl[0].multiple;
    const inputType = multiple ? "checkbox" : "radio";
    const selectId = id();
    extend(ss, {
      $el,
      el: $el[0],
      $selectEl,
      selectEl: $selectEl[0],
      $valueEl,
      valueEl: $valueEl && $valueEl[0],
      url,
      multiple,
      inputType,
      id: selectId,
      inputName: `${inputType}-${selectId}`,
      selectName: $selectEl.attr("name"),
      maxLength: $selectEl.attr("maxlength") || params.maxLength
    });
    $el[0].f7SmartSelect = ss;
    function onClick2() {
      ss.open();
    }
    function onChange() {
      const value = ss.$selectEl.val();
      ss.$el.trigger("smartselect:change", value);
      ss.emit("local::change smartSelectChange", ss, value);
      if (ss.vl) {
        ss.vl.clearCache();
      }
      ss.setValueText();
    }
    ss.attachEvents = function attachEvents2() {
      $el.on("click", onClick2);
      $el.on("change", "select", onChange);
    };
    ss.detachEvents = function detachEvents2() {
      $el.off("click", onClick2);
      $el.off("change", "select", onChange);
    };
    function handleInputChange() {
      let optionEl;
      let text;
      const inputEl = this;
      const value = inputEl.value;
      let optionText = [];
      let displayAs;
      if (inputEl.type === "checkbox") {
        for (let i = 0; i < ss.selectEl.options.length; i += 1) {
          optionEl = ss.selectEl.options[i];
          if (optionEl.value === value) {
            optionEl.selected = inputEl.checked;
          }
          if (optionEl.selected) {
            displayAs = optionEl.dataset ? optionEl.dataset.displayAs : dom7_default(optionEl).data("display-value-as");
            text = displayAs && typeof displayAs !== "undefined" ? displayAs : optionEl.textContent;
            optionText.push(text.trim());
          }
        }
        if (ss.maxLength) {
          ss.checkMaxLength();
        }
      } else {
        optionEl = ss.$selectEl.find(`option[value="${value}"]`)[0];
        if (!optionEl) {
          optionEl = ss.$selectEl.find("option").filter((optEl) => optEl.value === value)[0];
        }
        displayAs = optionEl.dataset ? optionEl.dataset.displayAs : dom7_default(optionEl).data("display-as");
        text = displayAs && typeof displayAs !== "undefined" ? displayAs : optionEl.textContent;
        optionText = [text];
        ss.selectEl.value = value;
      }
      ss.$selectEl.trigger("change");
      if (ss.params.setValueText) {
        ss.formatValueTextContent(optionText);
      }
      if (ss.params.closeOnSelect && ss.inputType === "radio") {
        ss.close();
      }
    }
    ss.attachInputsEvents = function attachInputsEvents() {
      ss.$containerEl.on("change", 'input[type="checkbox"], input[type="radio"]', handleInputChange);
    };
    ss.detachInputsEvents = function detachInputsEvents() {
      ss.$containerEl.off("change", 'input[type="checkbox"], input[type="radio"]', handleInputChange);
    };
    ss.useModules();
    ss.init();
    return ss;
  }
  setValue(value) {
    const ss = this;
    let newValue = value;
    let optionText = [];
    let optionEl;
    let displayAs;
    let text;
    if (ss.multiple) {
      if (!Array.isArray(newValue)) newValue = [newValue];
      for (let i = 0; i < ss.selectEl.options.length; i += 1) {
        optionEl = ss.selectEl.options[i];
        if (newValue.indexOf(optionEl.value) >= 0) {
          optionEl.selected = true;
        } else {
          optionEl.selected = false;
        }
        if (optionEl.selected) {
          displayAs = optionEl.dataset ? optionEl.dataset.displayAs : dom7_default(optionEl).data("display-value-as");
          text = displayAs && typeof displayAs !== "undefined" ? displayAs : optionEl.textContent;
          optionText.push(text.trim());
        }
      }
    } else {
      optionEl = ss.$selectEl.find(`option[value="${newValue}"]`)[0];
      if (optionEl) {
        displayAs = optionEl.dataset ? optionEl.dataset.displayAs : dom7_default(optionEl).data("display-as");
        text = displayAs && typeof displayAs !== "undefined" ? displayAs : optionEl.textContent;
        optionText = [text];
      }
      ss.selectEl.value = newValue;
    }
    if (ss.params.setValueText) {
      ss.formatValueTextContent(optionText);
    }
    ss.$selectEl.trigger("change");
    return ss;
  }
  unsetValue() {
    const ss = this;
    if (ss.params.setValueText) {
      ss.formatValueTextContent([]);
    }
    ss.$selectEl.find("option").each((optionEl) => {
      optionEl.selected = false;
      optionEl.checked = false;
    });
    ss.$selectEl[0].value = null;
    if (ss.$containerEl) {
      ss.$containerEl.find(`input[name="${ss.inputName}"][type="checkbox"], input[name="${ss.inputName}"][type="radio"]`).prop("checked", false);
    }
    ss.$selectEl.trigger("change");
  }
  getValue() {
    const ss = this;
    return ss.$selectEl.val();
  }
  get view() {
    const {
      params,
      $el
    } = this;
    let view;
    if (params.view) {
      view = params.view;
    }
    if (!view) {
      view = $el.parents(".view").length && $el.parents(".view")[0].f7View;
    }
    if (!view && params.openIn === "page") {
      throw Error("Smart Select requires initialized View");
    }
    return view;
  }
  checkMaxLength() {
    const ss = this;
    const $containerEl = ss.$containerEl;
    if (ss.selectEl.selectedOptions.length >= ss.maxLength) {
      $containerEl.find('input[type="checkbox"]').each((inputEl) => {
        if (!inputEl.checked) {
          dom7_default(inputEl).parents("li").addClass("disabled");
        } else {
          dom7_default(inputEl).parents("li").removeClass("disabled");
        }
      });
    } else {
      $containerEl.find(".disabled").removeClass("disabled");
    }
  }
  formatValueTextContent(values) {
    const ss = this;
    const valueFormatted = ss.formatValueText(values);
    if (valueFormatted.includes("<") && valueFormatted.includes(">")) {
      ss.$valueEl.html(valueFormatted);
    } else {
      ss.$valueEl.text(valueFormatted);
    }
  }
  formatValueText(values) {
    const ss = this;
    let textValue;
    if (ss.params.formatValueText) {
      textValue = ss.params.formatValueText.call(ss, values, ss);
    } else {
      textValue = values.join(", ");
    }
    return textValue;
  }
  setValueText(value) {
    const ss = this;
    let valueArray = [];
    if (typeof value !== "undefined") {
      if (Array.isArray(value)) {
        valueArray = value;
      } else {
        valueArray = [value];
      }
    } else {
      ss.$selectEl.find("option").each((optionEl) => {
        const $optionEl = dom7_default(optionEl);
        if (optionEl.selected) {
          const displayAs = optionEl.dataset ? optionEl.dataset.displayAs : $optionEl.data("display-value-as");
          if (displayAs && typeof displayAs !== "undefined") {
            valueArray.push(displayAs);
          } else {
            valueArray.push(optionEl.textContent.trim());
          }
        }
      });
    }
    if (ss.params.setValueText) {
      ss.formatValueTextContent(valueArray);
    }
  }
  getItemsData() {
    const ss = this;
    const theme = ss.app.theme;
    const items = [];
    let previousGroupEl;
    ss.$selectEl.find("option").each((optionEl) => {
      const $optionEl = dom7_default(optionEl);
      const optionData = $optionEl.dataset();
      const optionImage = optionData.optionImage || ss.params.optionImage;
      const optionIcon = optionData.optionIcon || ss.params.optionIcon;
      const optionIconIos = theme === "ios" && (optionData.optionIconIos || ss.params.optionIconIos);
      const optionIconMd = theme === "md" && (optionData.optionIconMd || ss.params.optionIconMd);
      const optionInputIconPosition = optionData.inputIconPosition || ss.params.inputIconPosition || "";
      const optionHasMedia = optionImage || optionIcon || optionIconIos || optionIconMd;
      const optionColor = optionData.optionColor;
      let optionClassName = optionData.optionClass || "";
      if ($optionEl[0].disabled) optionClassName += " disabled";
      const optionGroupEl = $optionEl.parent("optgroup")[0];
      const optionGroupLabel = optionGroupEl && optionGroupEl.label;
      let optionIsLabel = false;
      if (optionGroupEl && optionGroupEl !== previousGroupEl) {
        optionIsLabel = true;
        previousGroupEl = optionGroupEl;
        items.push({
          groupLabel: optionGroupLabel,
          isLabel: optionIsLabel
        });
      }
      items.push({
        value: $optionEl[0].value,
        text: $optionEl[0].textContent.trim(),
        selected: $optionEl[0].selected,
        groupEl: optionGroupEl,
        groupLabel: optionGroupLabel,
        image: optionImage,
        icon: optionIcon,
        iconIos: optionIconIos,
        iconMd: optionIconMd,
        inputIconPosition: optionInputIconPosition,
        color: optionColor,
        className: optionClassName,
        disabled: $optionEl[0].disabled,
        id: ss.id,
        hasMedia: optionHasMedia,
        checkbox: ss.inputType === "checkbox",
        radio: ss.inputType === "radio",
        inputName: ss.inputName,
        inputType: ss.inputType
      });
    });
    ss.items = items;
    return items;
  }
  renderSearchbar() {
    const ss = this;
    if (ss.params.renderSearchbar) return ss.params.renderSearchbar.call(ss);
    return jsx_default("form", {
      class: "searchbar"
    }, jsx_default("div", {
      class: "searchbar-inner"
    }, jsx_default("div", {
      class: "searchbar-input-wrap"
    }, jsx_default("input", {
      type: "search",
      spellcheck: ss.params.searchbarSpellcheck || "false",
      placeholder: ss.params.searchbarPlaceholder
    }), jsx_default("i", {
      class: "searchbar-icon"
    }), jsx_default("span", {
      class: "input-clear-button"
    })), ss.params.searchbarDisableButton && jsx_default("span", {
      class: "searchbar-disable-button"
    }, ss.params.searchbarDisableText)));
  }
  renderItem(item, index) {
    const ss = this;
    if (ss.params.renderItem) return ss.params.renderItem.call(ss, item, index);
    function getIconContent(iconValue) {
      if (iconValue === void 0) {
        iconValue = "";
      }
      if (iconValue.indexOf(":") >= 0) {
        return iconValue.split(":")[1];
      }
      return "";
    }
    function getIconClass(iconValue) {
      if (iconValue === void 0) {
        iconValue = "";
      }
      if (iconValue.indexOf(":") >= 0) {
        let className = iconValue.split(":")[0];
        if (className === "f7") className = "f7-icons";
        if (className === "material") className = "material-icons";
        return className;
      }
      return iconValue;
    }
    let itemHtml;
    if (item.isLabel) {
      itemHtml = `<li class="list-group-title">${item.groupLabel}</li>`;
    } else {
      let selected = item.selected;
      let disabled;
      if (ss.params.virtualList) {
        const ssValue = ss.getValue();
        selected = ss.multiple ? ssValue.indexOf(item.value) >= 0 : ssValue === item.value;
        if (ss.multiple) {
          disabled = ss.multiple && !selected && ssValue.length === parseInt(ss.maxLength, 10);
        }
      }
      const {
        icon,
        iconIos,
        iconMd
      } = item;
      const hasIcon = icon || iconIos || iconMd;
      const iconContent = getIconContent(icon || iconIos || iconMd || "");
      const iconClass = getIconClass(icon || iconIos || iconMd || "");
      itemHtml = jsx_default("li", {
        class: `${item.className || ""}${disabled ? " disabled" : ""}`
      }, jsx_default("label", {
        class: `item-${item.inputType} ${item.inputIconPosition ? `item-${item.inputType}-icon-${item.inputIconPosition}` : ""} item-content`
      }, jsx_default("input", {
        type: item.inputType,
        name: item.inputName,
        value: item.value,
        _checked: selected
      }), jsx_default("i", {
        class: `icon icon-${item.inputType}`
      }), item.hasMedia && jsx_default("div", {
        class: "item-media"
      }, hasIcon && jsx_default("i", {
        class: `icon ${iconClass}`
      }, iconContent), item.image && jsx_default("img", {
        src: item.image
      })), jsx_default("div", {
        class: "item-inner"
      }, jsx_default("div", {
        class: `item-title${item.color ? ` text-color-${item.color}` : ""}`
      }, item.text))));
    }
    return itemHtml;
  }
  renderItems() {
    const ss = this;
    if (ss.params.renderItems) return ss.params.renderItems.call(ss, ss.items);
    const itemsHtml = `
      ${ss.items.map((item, index) => `${ss.renderItem(item, index)}`).join("")}
    `;
    return itemsHtml;
  }
  renderPage() {
    const ss = this;
    if (ss.params.renderPage) return ss.params.renderPage.call(ss, ss.items);
    let pageTitle = ss.params.pageTitle;
    if (typeof pageTitle === "undefined") {
      const $itemTitleEl = ss.$el.find(".item-title");
      pageTitle = $itemTitleEl.length ? $itemTitleEl.text().trim() : "";
    }
    const cssClass = ss.params.cssClass;
    return jsx_default("div", {
      class: `page smart-select-page ${cssClass}`,
      "data-name": "smart-select-page",
      "data-select-name": ss.selectName
    }, jsx_default("div", {
      class: `navbar ${ss.params.navbarColorTheme ? `color-${ss.params.navbarColorTheme}` : ""}`
    }, jsx_default("div", {
      class: "navbar-bg"
    }), jsx_default("div", {
      class: `navbar-inner sliding ${ss.params.navbarColorTheme ? `color-${ss.params.navbarColorTheme}` : ""}`
    }, jsx_default("div", {
      class: "left"
    }, jsx_default("a", {
      class: "link back"
    }, jsx_default("i", {
      class: "icon icon-back"
    }), jsx_default("span", {
      class: "if-not-md"
    }, ss.params.pageBackLinkText))), pageTitle && jsx_default("div", {
      class: "title"
    }, pageTitle), ss.params.searchbar && jsx_default("div", {
      class: "subnavbar"
    }, ss.renderSearchbar()))), ss.params.searchbar && jsx_default("div", {
      class: "searchbar-backdrop"
    }), jsx_default("div", {
      class: "page-content"
    }, jsx_default("div", {
      class: `list list-outline-ios list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? " virtual-list" : ""} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ""}`
    }, jsx_default("ul", null, !ss.params.virtualList && ss.renderItems(ss.items)))));
  }
  renderPopup() {
    const ss = this;
    if (ss.params.renderPopup) return ss.params.renderPopup.call(ss, ss.items);
    let pageTitle = ss.params.pageTitle;
    if (typeof pageTitle === "undefined") {
      const $itemTitleEl = ss.$el.find(".item-title");
      pageTitle = $itemTitleEl.length ? $itemTitleEl.text().trim() : "";
    }
    const cssClass = ss.params.cssClass || "";
    return jsx_default("div", {
      class: `popup smart-select-popup ${cssClass} ${ss.params.popupTabletFullscreen ? "popup-tablet-fullscreen" : ""}`,
      "data-select-name": ss.selectName
    }, jsx_default("div", {
      class: "view"
    }, jsx_default("div", {
      class: `page smart-select-page ${ss.params.searchbar ? "page-with-subnavbar" : ""}`,
      "data-name": "smart-select-page"
    }, jsx_default("div", {
      class: `navbar ${ss.params.navbarColorTheme ? `color-${ss.params.navbarColorTheme}` : ""}`
    }, jsx_default("div", {
      class: "navbar-bg"
    }), jsx_default("div", {
      class: "navbar-inner sliding"
    }, pageTitle && jsx_default("div", {
      class: "title"
    }, pageTitle), jsx_default("div", {
      class: "right"
    }, jsx_default("a", {
      class: "link popup-close",
      "data-popup": `.smart-select-popup[data-select-name='${ss.selectName}']`
    }, ss.params.popupCloseLinkText)), ss.params.searchbar && jsx_default("div", {
      class: "subnavbar"
    }, ss.renderSearchbar()))), ss.params.searchbar && jsx_default("div", {
      class: "searchbar-backdrop"
    }), jsx_default("div", {
      class: "page-content"
    }, jsx_default("div", {
      class: `list list-outline-ios list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? " virtual-list" : ""} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ""}`
    }, jsx_default("ul", null, !ss.params.virtualList && ss.renderItems(ss.items)))))));
  }
  renderSheet() {
    const ss = this;
    if (ss.params.renderSheet) return ss.params.renderSheet.call(ss, ss.items);
    const cssClass = ss.params.cssClass;
    return jsx_default("div", {
      class: `sheet-modal smart-select-sheet ${cssClass}`,
      "data-select-name": ss.selectName
    }, jsx_default("div", {
      class: `toolbar toolbar-top ${ss.params.toolbarColorTheme ? `color-${ss.params.toolbarColorTheme}` : ""}`
    }, jsx_default("div", {
      class: "toolbar-inner"
    }, jsx_default("div", {
      class: "left"
    }), jsx_default("div", {
      class: "right"
    }, jsx_default("a", {
      class: "link sheet-close"
    }, ss.params.sheetCloseLinkText)))), jsx_default("div", {
      class: "sheet-modal-inner"
    }, jsx_default("div", {
      class: "page-content"
    }, jsx_default("div", {
      class: `list list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? " virtual-list" : ""} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ""}`
    }, jsx_default("ul", null, !ss.params.virtualList && ss.renderItems(ss.items))))));
  }
  renderPopover() {
    const ss = this;
    if (ss.params.renderPopover) return ss.params.renderPopover.call(ss, ss.items);
    const cssClass = ss.params.cssClass;
    return jsx_default("div", {
      class: `popover smart-select-popover ${cssClass}`,
      "data-select-name": ss.selectName
    }, jsx_default("div", {
      class: "popover-inner"
    }, jsx_default("div", {
      class: `list list-strong-ios list-dividers-ios smart-select-list-${ss.id} ${ss.params.virtualList ? " virtual-list" : ""} ${ss.params.formColorTheme ? `color-${ss.params.formColorTheme}` : ""}`
    }, jsx_default("ul", null, !ss.params.virtualList && ss.renderItems(ss.items)))));
  }
  scrollToSelectedItem() {
    const ss = this;
    const {
      params,
      $containerEl
    } = ss;
    if (!ss.opened) return ss;
    if (params.virtualList) {
      let selectedIndex;
      ss.vl.items.forEach((item, index) => {
        if (typeof selectedIndex === "undefined" && item.selected) {
          selectedIndex = index;
        }
      });
      if (typeof selectedIndex !== "undefined") {
        ss.vl.scrollToItem(selectedIndex);
      }
    } else {
      const $selectedItemEl = $containerEl.find("input:checked").parents("li");
      if (!$selectedItemEl.length) return ss;
      const $scrollableEl = $containerEl.find(".page-content, .popover-inner");
      if (!$scrollableEl.length) return ss;
      $scrollableEl.scrollTop($selectedItemEl.offset().top - $scrollableEl.offset().top - parseInt($scrollableEl.css("padding-top"), 10));
    }
    return ss;
  }
  onOpen(type, containerEl) {
    const ss = this;
    const app = ss.app;
    const $containerEl = dom7_default(containerEl);
    ss.$containerEl = $containerEl;
    ss.openedIn = type;
    ss.opened = true;
    if (ss.params.virtualList) {
      ss.vl = app.virtualList.create({
        el: $containerEl.find(".virtual-list"),
        items: ss.items,
        renderItem: ss.renderItem.bind(ss),
        height: ss.params.virtualListHeight,
        searchByItem(query, item) {
          if (item.text && remove_diacritics_default(item.text).toLowerCase().indexOf(query.trim().toLowerCase()) >= 0) return true;
          return false;
        }
      });
    }
    if (ss.params.scrollToSelectedItem) {
      ss.scrollToSelectedItem();
    }
    if (ss.params.searchbar) {
      let $searchbarEl = $containerEl.find(".searchbar");
      if (type === "page" && app.theme === "ios") {
        $searchbarEl = dom7_default(app.navbar.getElByPage($containerEl)).find(".searchbar");
      }
      if (ss.params.appendSearchbarNotFound && (type === "page" || type === "popup")) {
        let $notFoundEl = null;
        if (typeof ss.params.appendSearchbarNotFound === "string") {
          $notFoundEl = dom7_default(`<div class="block searchbar-not-found">${ss.params.appendSearchbarNotFound}</div>`);
        } else if (typeof ss.params.appendSearchbarNotFound === "boolean") {
          $notFoundEl = dom7_default('<div class="block searchbar-not-found">Nothing found</div>');
        } else {
          $notFoundEl = ss.params.appendSearchbarNotFound;
        }
        if ($notFoundEl) {
          $containerEl.find(".page-content").append($notFoundEl[0]);
        }
      }
      const searchbarParams = extend({
        el: $searchbarEl,
        backdropEl: $containerEl.find(".searchbar-backdrop"),
        searchContainer: `.smart-select-list-${ss.id}`,
        searchIn: ".item-title"
      }, typeof ss.params.searchbar === "object" ? ss.params.searchbar : {});
      ss.searchbar = app.searchbar.create(searchbarParams);
    }
    if (ss.maxLength) {
      ss.checkMaxLength();
    }
    if (ss.params.closeOnSelect) {
      ss.$containerEl.find(`input[type="radio"][name="${ss.inputName}"]:checked`).parents("label").once("click", () => {
        ss.close();
      });
    }
    ss.attachInputsEvents();
    ss.$el.trigger("smartselect:open");
    ss.emit("local::open smartSelectOpen", ss);
  }
  onOpened() {
    const ss = this;
    ss.$el.trigger("smartselect:opened");
    ss.emit("local::opened smartSelectOpened", ss);
  }
  onClose() {
    const ss = this;
    if (ss.destroyed) return;
    if (ss.vl && ss.vl.destroy) {
      ss.vl.destroy();
      ss.vl = null;
      delete ss.vl;
    }
    if (ss.searchbar && ss.searchbar.destroy) {
      ss.searchbar.destroy();
      ss.searchbar = null;
      delete ss.searchbar;
    }
    ss.detachInputsEvents();
    ss.$el.trigger("smartselect:close");
    ss.emit("local::close smartSelectClose", ss);
  }
  onClosed() {
    const ss = this;
    if (ss.destroyed) return;
    ss.opened = false;
    ss.$containerEl = null;
    delete ss.$containerEl;
    ss.$el.trigger("smartselect:closed");
    ss.emit("local::closed smartSelectClosed", ss);
  }
  openPage() {
    const ss = this;
    if (ss.opened) return ss;
    ss.getItemsData();
    const pageHtml = ss.renderPage(ss.items);
    ss.view.router.navigate({
      url: ss.url,
      route: {
        content: pageHtml,
        path: ss.url,
        on: {
          pageBeforeIn(e, page) {
            ss.onOpen("page", page.el);
          },
          pageAfterIn(e, page) {
            ss.onOpened("page", page.el);
          },
          pageBeforeOut(e, page) {
            ss.onClose("page", page.el);
          },
          pageAfterOut(e, page) {
            ss.onClosed("page", page.el);
          }
        }
      }
    });
    return ss;
  }
  openPopup() {
    const ss = this;
    if (ss.opened) return ss;
    ss.getItemsData();
    const popupHtml = ss.renderPopup(ss.items);
    const popupParams = {
      content: popupHtml,
      push: ss.params.popupPush,
      swipeToClose: ss.params.popupSwipeToClose,
      closeByBackdropClick: ss.params.closeByBackdropClick,
      on: {
        popupOpen(popup) {
          ss.onOpen("popup", popup.el);
        },
        popupOpened(popup) {
          ss.onOpened("popup", popup.el);
        },
        popupClose(popup) {
          ss.onClose("popup", popup.el);
        },
        popupClosed(popup) {
          ss.onClosed("popup", popup.el);
        }
      }
    };
    if (ss.params.routableModals && ss.view) {
      ss.view.router.navigate({
        url: ss.url,
        route: {
          path: ss.url,
          popup: popupParams
        }
      });
    } else {
      ss.modal = ss.app.popup.create(popupParams).open();
    }
    return ss;
  }
  openSheet() {
    const ss = this;
    if (ss.opened) return ss;
    ss.getItemsData();
    const sheetHtml = ss.renderSheet(ss.items);
    const sheetParams = {
      content: sheetHtml,
      backdrop: ss.params.sheetBackdrop,
      scrollToEl: ss.$el,
      closeByOutsideClick: true,
      push: ss.params.sheetPush,
      swipeToClose: ss.params.sheetSwipeToClose,
      closeByBackdropClick: ss.params.closeByBackdropClick,
      on: {
        sheetOpen(sheet) {
          ss.onOpen("sheet", sheet.el);
        },
        sheetOpened(sheet) {
          ss.onOpened("sheet", sheet.el);
        },
        sheetClose(sheet) {
          ss.onClose("sheet", sheet.el);
        },
        sheetClosed(sheet) {
          ss.onClosed("sheet", sheet.el);
        }
      }
    };
    if (ss.params.routableModals && ss.view) {
      ss.view.router.navigate({
        url: ss.url,
        route: {
          path: ss.url,
          sheet: sheetParams
        }
      });
    } else {
      ss.modal = ss.app.sheet.create(sheetParams).open();
    }
    return ss;
  }
  openPopover() {
    const ss = this;
    if (ss.opened) return ss;
    ss.getItemsData();
    const popoverHtml = ss.renderPopover(ss.items);
    const popoverParams = {
      content: popoverHtml,
      targetEl: ss.$el,
      closeByBackdropClick: ss.params.closeByBackdropClick,
      on: {
        popoverOpen(popover) {
          ss.onOpen("popover", popover.el);
        },
        popoverOpened(popover) {
          ss.onOpened("popover", popover.el);
        },
        popoverClose(popover) {
          ss.onClose("popover", popover.el);
        },
        popoverClosed(popover) {
          ss.onClosed("popover", popover.el);
        }
      }
    };
    if (ss.params.routableModals && ss.view) {
      ss.view.router.navigate({
        url: ss.url,
        route: {
          path: ss.url,
          popover: popoverParams
        }
      });
    } else {
      ss.modal = ss.app.popover.create(popoverParams).open();
    }
    return ss;
  }
  open(type) {
    const ss = this;
    if (ss.opened) return ss;
    let prevented = false;
    function prevent() {
      prevented = true;
    }
    if (ss.$el) {
      ss.$el.trigger("smartselect:beforeopen", {
        prevent
      });
    }
    ss.emit("local::beforeOpen smartSelectBeforeOpen", ss, prevent);
    if (prevented) return ss;
    const openIn = type || ss.params.openIn;
    ss[`open${openIn.split("").map((el, index) => {
      if (index === 0) return el.toUpperCase();
      return el;
    }).join("")}`]();
    return ss;
  }
  close() {
    const ss = this;
    if (!ss.opened) return ss;
    if (ss.params.routableModals && ss.view || ss.openedIn === "page") {
      ss.view.router.back();
    } else {
      ss.modal.once("modalClosed", () => {
        nextTick(() => {
          if (ss.destroyed) return;
          ss.modal.destroy();
          delete ss.modal;
        });
      });
      ss.modal.close();
    }
    return ss;
  }
  init() {
    const ss = this;
    ss.attachEvents();
    ss.setValueText();
  }
  destroy() {
    const ss = this;
    ss.emit("local::beforeDestroy smartSelectBeforeDestroy", ss);
    ss.$el.trigger("smartselect:beforedestroy");
    ss.detachEvents();
    delete ss.$el[0].f7SmartSelect;
    deleteProps(ss);
    ss.destroyed = true;
  }
};
var smart_select_class_default = SmartSelect;

// node_modules/framework7/components/smart-select/smart-select.js
var smart_select_default = {
  name: "smartSelect",
  params: {
    smartSelect: {
      el: void 0,
      valueEl: void 0,
      setValueText: true,
      formatValueText: null,
      openIn: "page",
      // or 'popup' or 'sheet' or 'popover'
      popupPush: false,
      popupSwipeToClose: void 0,
      // defaults to app
      sheetPush: false,
      sheetSwipeToClose: void 0,
      // defaults to app
      sheetBackdrop: false,
      pageTitle: void 0,
      pageBackLinkText: "Back",
      popupCloseLinkText: "Close",
      popupTabletFullscreen: false,
      closeByBackdropClick: true,
      sheetCloseLinkText: "Done",
      searchbar: false,
      searchbarPlaceholder: "Search",
      searchbarDisableText: "Cancel",
      searchbarDisableButton: true,
      searchbarSpellcheck: false,
      closeOnSelect: false,
      virtualList: false,
      virtualListHeight: void 0,
      scrollToSelectedItem: false,
      formColorTheme: void 0,
      navbarColorTheme: void 0,
      routableModals: false,
      url: "select/",
      inputIconPosition: "start",
      cssClass: "",
      /*
        Custom render functions
      */
      renderPage: void 0,
      renderPopup: void 0,
      renderSheet: void 0,
      renderPopover: void 0,
      renderItems: void 0,
      renderItem: void 0,
      renderSearchbar: void 0
    }
  },
  static: {
    SmartSelect: smart_select_class_default
  },
  create() {
    const app = this;
    app.smartSelect = extend(ConstructorMethods({
      defaultSelector: ".smart-select",
      constructor: smart_select_class_default,
      app,
      domProp: "f7SmartSelect"
    }), {
      open(smartSelectEl) {
        const ss = app.smartSelect.get(smartSelectEl);
        if (ss && ss.open) return ss.open();
        return void 0;
      },
      close(smartSelectEl) {
        const ss = app.smartSelect.get(smartSelectEl);
        if (ss && ss.close) return ss.close();
        return void 0;
      }
    });
  },
  on: {
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".smart-select-init").each((smartSelectEl) => {
        app.smartSelect.create(extend({
          el: smartSelectEl
        }, dom7_default(smartSelectEl).dataset()));
      });
    },
    tabBeforeRemove(tabEl) {
      dom7_default(tabEl).find(".smart-select-init").each((smartSelectEl) => {
        if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {
          smartSelectEl.f7SmartSelect.destroy();
        }
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".smart-select-init").each((smartSelectEl) => {
        app.smartSelect.create(extend({
          el: smartSelectEl
        }, dom7_default(smartSelectEl).dataset()));
      });
    },
    pageBeforeRemove(page) {
      page.$el.find(".smart-select-init").each((smartSelectEl) => {
        if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {
          smartSelectEl.f7SmartSelect.destroy();
        }
      });
    }
  },
  clicks: {
    ".smart-select": function open3($clickedEl, data) {
      const app = this;
      if (!$clickedEl[0].f7SmartSelect) {
        const ss = app.smartSelect.create(extend({
          el: $clickedEl
        }, data));
        ss.open();
      }
    }
  },
  vnode: {
    "smart-select-init": {
      insert(vnode) {
        const app = this;
        const smartSelectEl = vnode.elm;
        app.smartSelect.create(extend({
          el: smartSelectEl
        }, dom7_default(smartSelectEl).dataset()));
      },
      destroy(vnode) {
        const smartSelectEl = vnode.elm;
        if (smartSelectEl.f7SmartSelect && smartSelectEl.f7SmartSelect.destroy) {
          smartSelectEl.f7SmartSelect.destroy();
        }
      }
    }
  }
};

// node_modules/framework7/components/grid/grid.js
var grid_default = {
  name: "grid"
};

// node_modules/framework7/components/calendar/calendar-class.js
var Calendar = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const calendar = this;
    calendar.params = extend({}, app.params.calendar, params);
    let $containerEl;
    if (calendar.params.containerEl) {
      $containerEl = dom7_default(calendar.params.containerEl);
      if ($containerEl.length === 0) return calendar;
    }
    let $inputEl;
    if (calendar.params.inputEl) {
      $inputEl = dom7_default(calendar.params.inputEl);
    }
    const isHorizontal = calendar.params.direction === "horizontal";
    let inverter = 1;
    if (isHorizontal) {
      inverter = app.rtl ? -1 : 1;
    }
    extend(calendar, {
      app,
      $containerEl,
      containerEl: $containerEl && $containerEl[0],
      inline: $containerEl && $containerEl.length > 0,
      $inputEl,
      inputEl: $inputEl && $inputEl[0],
      initialized: false,
      opened: false,
      url: calendar.params.url,
      isHorizontal,
      inverter,
      animating: false,
      allowTouchMove: true,
      hasTimePicker: calendar.params.timePicker && !calendar.params.rangePicker && !calendar.params.multiple
    });
    calendar.dayFormatter = (date) => {
      const formatter = new Intl.DateTimeFormat(calendar.params.locale, {
        day: "numeric"
      });
      return formatter.format(date).replace(/日/, "");
    };
    calendar.monthFormatter = (date) => {
      const formatter = new Intl.DateTimeFormat(calendar.params.locale, {
        month: "long"
      });
      return formatter.format(date);
    };
    calendar.yearFormatter = (date) => {
      const formatter = new Intl.DateTimeFormat(calendar.params.locale, {
        year: "numeric"
      });
      return formatter.format(date);
    };
    calendar.timeSelectorFormatter = (date) => {
      const formatter = new Intl.DateTimeFormat(calendar.params.locale, calendar.params.timePickerFormat);
      return formatter.format(date);
    };
    const timeFormatCheckDate = calendar.timeSelectorFormatter(/* @__PURE__ */ new Date()).toLowerCase();
    calendar.is12HoursFormat = timeFormatCheckDate.indexOf("pm") >= 0 || timeFormatCheckDate.indexOf("am") >= 0;
    let {
      monthNames,
      monthNamesShort,
      dayNames,
      dayNamesShort
    } = calendar.params;
    const {
      monthNamesIntl,
      monthNamesShortIntl,
      dayNamesIntl,
      dayNamesShortIntl
    } = calendar.getIntlNames();
    if (monthNames === "auto") monthNames = monthNamesIntl;
    if (monthNamesShort === "auto") monthNamesShort = monthNamesShortIntl;
    if (dayNames === "auto") dayNames = dayNamesIntl;
    if (dayNamesShort === "auto") dayNamesShort = dayNamesShortIntl;
    extend(calendar, {
      monthNames,
      monthNamesShort,
      dayNames,
      dayNamesShort
    });
    function onInputClick() {
      calendar.open();
    }
    function onInputFocus(e) {
      e.preventDefault();
    }
    function onInputClear() {
      calendar.setValue([]);
      if (calendar.opened) {
        calendar.update();
      }
    }
    function onHtmlClick(e) {
      const $targetEl = dom7_default(e.target);
      if (calendar.destroyed || !calendar.params) return;
      if (calendar.isPopover()) return;
      if (!calendar.opened || calendar.closing) return;
      if ($targetEl.closest('[class*="backdrop"]').length) return;
      if (calendar.monthPickerPopover || calendar.yearPickerPopover || calendar.timePickerPopover) return;
      if ($inputEl && $inputEl.length > 0) {
        if ($targetEl[0] !== $inputEl[0] && $targetEl.closest(".sheet-modal, .calendar-modal").length === 0) {
          calendar.close();
        }
      } else if (dom7_default(e.target).closest(".sheet-modal, .calendar-modal").length === 0) {
        calendar.close();
      }
    }
    extend(calendar, {
      attachInputEvents() {
        calendar.$inputEl.on("click", onInputClick);
        calendar.$inputEl.on("input:clear", onInputClear);
        if (calendar.params.inputReadOnly) {
          calendar.$inputEl.on("focus mousedown", onInputFocus);
          if (calendar.$inputEl[0]) {
            calendar.$inputEl[0].f7ValidateReadonly = true;
          }
        }
      },
      detachInputEvents() {
        calendar.$inputEl.off("click", onInputClick);
        calendar.$inputEl.off("input:clear", onInputClear);
        if (calendar.params.inputReadOnly) {
          calendar.$inputEl.off("focus mousedown", onInputFocus);
          if (calendar.$inputEl[0]) {
            delete calendar.$inputEl[0].f7ValidateReadonly;
          }
        }
      },
      attachHtmlEvents() {
        app.on("click", onHtmlClick);
      },
      detachHtmlEvents() {
        app.off("click", onHtmlClick);
      }
    });
    calendar.attachCalendarEvents = function attachCalendarEvents() {
      let allowItemClick = true;
      let isTouched;
      let isMoved;
      let touchStartX;
      let touchStartY;
      let touchCurrentX;
      let touchCurrentY;
      let touchStartTime;
      let touchEndTime;
      let currentTranslate;
      let wrapperWidth;
      let wrapperHeight;
      let percentage;
      let touchesDiff;
      let isScrolling;
      const {
        $el,
        $wrapperEl
      } = calendar;
      function handleTouchStart(e) {
        if (isMoved || isTouched || !e.isTrusted) return;
        isTouched = true;
        touchStartX = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
        touchCurrentX = touchStartX;
        touchStartY = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
        touchCurrentY = touchStartY;
        touchStartTime = (/* @__PURE__ */ new Date()).getTime();
        percentage = 0;
        allowItemClick = true;
        isScrolling = void 0;
        currentTranslate = calendar.monthsTranslate;
      }
      function handleTouchMove(e) {
        if (!isTouched || !e.isTrusted) return;
        const {
          isHorizontal: isH
        } = calendar;
        touchCurrentX = e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX;
        touchCurrentY = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
        if (typeof isScrolling === "undefined") {
          isScrolling = !!(isScrolling || Math.abs(touchCurrentY - touchStartY) > Math.abs(touchCurrentX - touchStartX));
        }
        if (isH && isScrolling || !calendar.allowTouchMove) {
          isTouched = false;
          return;
        }
        e.preventDefault();
        if (calendar.animating) {
          isTouched = false;
          return;
        }
        allowItemClick = false;
        if (!isMoved) {
          isMoved = true;
          wrapperWidth = $wrapperEl[0].offsetWidth;
          wrapperHeight = $wrapperEl[0].offsetHeight;
          $wrapperEl.transition(0);
        }
        touchesDiff = isH ? touchCurrentX - touchStartX : touchCurrentY - touchStartY;
        percentage = touchesDiff / (isH ? wrapperWidth : wrapperHeight);
        currentTranslate = (calendar.monthsTranslate * calendar.inverter + percentage) * 100;
        $wrapperEl.transform(`translate3d(${isH ? currentTranslate : 0}%, ${isH ? 0 : currentTranslate}%, 0)`);
      }
      function handleTouchEnd(e) {
        if (!isTouched || !isMoved || !e.isTrusted) {
          isTouched = false;
          isMoved = false;
          return;
        }
        isTouched = false;
        isMoved = false;
        touchEndTime = (/* @__PURE__ */ new Date()).getTime();
        if (touchEndTime - touchStartTime < 300) {
          if (Math.abs(touchesDiff) < 10) {
            calendar.resetMonth();
          } else if (touchesDiff >= 10) {
            if (app.rtl) calendar.nextMonth();
            else calendar.prevMonth();
          } else if (app.rtl) calendar.prevMonth();
          else calendar.nextMonth();
        } else if (percentage <= -0.5) {
          if (app.rtl) calendar.prevMonth();
          else calendar.nextMonth();
        } else if (percentage >= 0.5) {
          if (app.rtl) calendar.nextMonth();
          else calendar.prevMonth();
        } else {
          calendar.resetMonth();
        }
        setTimeout(() => {
          allowItemClick = true;
        }, 100);
      }
      function handleDayClick(e) {
        if (!allowItemClick) return;
        let $dayEl = dom7_default(e.target).parents(".calendar-day");
        if ($dayEl.length === 0 && dom7_default(e.target).hasClass("calendar-day")) {
          $dayEl = dom7_default(e.target);
        }
        if ($dayEl.length === 0) return;
        if ($dayEl.hasClass("calendar-day-disabled")) return;
        if (!calendar.params.rangePicker) {
          if ($dayEl.hasClass("calendar-day-next")) calendar.nextMonth();
          if ($dayEl.hasClass("calendar-day-prev")) calendar.prevMonth();
        }
        const dateYear = parseInt($dayEl.attr("data-year"), 10);
        const dateMonth = parseInt($dayEl.attr("data-month"), 10);
        const dateDay = parseInt($dayEl.attr("data-day"), 10);
        calendar.emit("local::dayClick calendarDayClick", calendar, $dayEl[0], dateYear, dateMonth, dateDay);
        if (!$dayEl.hasClass("calendar-day-selected") || calendar.params.multiple || calendar.params.rangePicker) {
          const valueToAdd = new Date(dateYear, dateMonth, dateDay, 0, 0, 0);
          if (calendar.hasTimePicker) {
            if (calendar.value && calendar.value[0]) {
              valueToAdd.setHours(calendar.value[0].getHours(), calendar.value[0].getMinutes());
            } else {
              valueToAdd.setHours((/* @__PURE__ */ new Date()).getHours(), (/* @__PURE__ */ new Date()).getMinutes());
            }
          }
          calendar.addValue(valueToAdd);
        }
        if (calendar.params.closeOnSelect) {
          if (calendar.params.rangePicker && calendar.value.length === 2 || !calendar.params.rangePicker) {
            calendar.close();
          }
        }
      }
      function onNextMonthClick() {
        calendar.nextMonth();
      }
      function onPrevMonthClick() {
        calendar.prevMonth();
      }
      function onNextYearClick() {
        calendar.nextYear();
      }
      function onPrevYearClick() {
        calendar.prevYear();
      }
      function onMonthSelectorClick() {
        calendar.openMonthPicker();
      }
      function onYearSelectorClick() {
        calendar.openYearPicker();
      }
      function onTimeSelectorClick() {
        calendar.openTimePicker();
      }
      const passiveListener = app.touchEvents.start === "touchstart" && getSupport().passiveListener ? {
        passive: true,
        capture: false
      } : false;
      $el.find(".calendar-prev-month-button").on("click", onPrevMonthClick);
      $el.find(".calendar-next-month-button").on("click", onNextMonthClick);
      $el.find(".calendar-prev-year-button").on("click", onPrevYearClick);
      $el.find(".calendar-next-year-button").on("click", onNextYearClick);
      if (calendar.params.monthPicker) {
        $el.find(".current-month-value").on("click", onMonthSelectorClick);
      }
      if (calendar.params.yearPicker) {
        $el.find(".current-year-value").on("click", onYearSelectorClick);
      }
      if (calendar.hasTimePicker) {
        $el.find(".calendar-time-selector a").on("click", onTimeSelectorClick);
      }
      $wrapperEl.on("click", handleDayClick);
      if (calendar.params.touchMove) {
        $wrapperEl.on(app.touchEvents.start, handleTouchStart, passiveListener);
        app.on("touchmove:active", handleTouchMove);
        app.on("touchend:passive", handleTouchEnd);
      }
      calendar.detachCalendarEvents = function detachCalendarEvents() {
        $el.find(".calendar-prev-month-button").off("click", onPrevMonthClick);
        $el.find(".calendar-next-month-button").off("click", onNextMonthClick);
        $el.find(".calendar-prev-year-button").off("click", onPrevYearClick);
        $el.find(".calendar-next-year-button").off("click", onNextYearClick);
        if (calendar.params.monthPicker) {
          $el.find(".current-month-value").off("click", onMonthSelectorClick);
        }
        if (calendar.params.yearPicker) {
          $el.find(".current-year-value").off("click", onYearSelectorClick);
        }
        if (calendar.hasTimePicker) {
          $el.find(".calendar-time-selector a").off("click", onTimeSelectorClick);
        }
        $wrapperEl.off("click", handleDayClick);
        if (calendar.params.touchMove) {
          $wrapperEl.off(app.touchEvents.start, handleTouchStart, passiveListener);
          app.off("touchmove:active", handleTouchMove);
          app.off("touchend:passive", handleTouchEnd);
        }
      };
    };
    calendar.init();
    return calendar;
  }
  get view() {
    const {
      $inputEl,
      app,
      params
    } = this;
    let view;
    if (params.view) {
      view = params.view;
    } else if ($inputEl) {
      view = $inputEl.parents(".view").length && $inputEl.parents(".view")[0].f7View;
    }
    if (!view) view = app.views.main;
    return view;
  }
  getIntlNames() {
    const calendar = this;
    const locale = calendar.params.locale;
    const monthNamesIntl = [];
    const monthNamesShortIntl = [];
    const dayNamesIntl = [];
    const dayNamesShortIntl = [];
    const formatterMonthNames = new Intl.DateTimeFormat(locale, {
      month: "long"
    });
    const formatterMonthNamesShort = new Intl.DateTimeFormat(locale, {
      month: "short"
    });
    const formatterDayNames = new Intl.DateTimeFormat(locale, {
      weekday: "long"
    });
    const formatterDayNamesShort = new Intl.DateTimeFormat(locale, {
      weekday: "short"
    });
    let year;
    let yearStarted;
    let yearEnded;
    for (let i = 0; i < 24; i += 1) {
      const date = (/* @__PURE__ */ new Date()).setMonth(i, 1);
      const currentYear = calendar.yearFormatter(date);
      if (year && currentYear !== year) {
        if (yearStarted) yearEnded = true;
        yearStarted = true;
        year = currentYear;
      }
      if (!year) {
        year = currentYear;
      }
      if (yearStarted && year === currentYear && !yearEnded) {
        monthNamesIntl.push(formatterMonthNames.format(date));
        monthNamesShortIntl.push(formatterMonthNamesShort.format(date));
      }
    }
    const weekDay = (/* @__PURE__ */ new Date()).getDay();
    for (let i = 0; i < 7; i += 1) {
      const date = (/* @__PURE__ */ new Date()).getTime() + (i - weekDay) * 24 * 60 * 60 * 1e3;
      dayNamesIntl.push(formatterDayNames.format(date));
      dayNamesShortIntl.push(formatterDayNamesShort.format(date));
    }
    return {
      monthNamesIntl,
      monthNamesShortIntl,
      dayNamesIntl,
      dayNamesShortIntl
    };
  }
  normalizeDate(date) {
    const calendar = this;
    const d = new Date(date);
    if (calendar.hasTimePicker) {
      return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes());
    }
    return new Date(d.getFullYear(), d.getMonth(), d.getDate());
  }
  normalizeValues(values) {
    const calendar = this;
    let newValues = [];
    if (values && Array.isArray(values)) {
      newValues = values.map((val) => calendar.normalizeDate(val));
    }
    return newValues;
  }
  initInput() {
    const calendar = this;
    if (!calendar.$inputEl) return;
    if (calendar.params.inputReadOnly) calendar.$inputEl.prop("readOnly", true);
  }
  isPopover() {
    const calendar = this;
    const {
      app,
      modal,
      params
    } = calendar;
    const device = getDevice();
    if (params.openIn === "sheet") return false;
    if (modal && modal.type !== "popover") return false;
    if (!calendar.inline && calendar.inputEl) {
      if (params.openIn === "popover") return true;
      if (device.ios) {
        return !!device.ipad;
      }
      if (app.width >= 768) {
        return true;
      }
    }
    return false;
  }
  formatDate(d) {
    const calendar = this;
    const date = new Date(d);
    const year = date.getFullYear();
    const month = date.getMonth();
    const month1 = month + 1;
    const day = date.getDate();
    const weekDay = date.getDay();
    const {
      monthNames,
      monthNamesShort,
      dayNames,
      dayNamesShort
    } = calendar;
    const {
      dateFormat,
      locale
    } = calendar.params;
    function twoDigits(number) {
      return number < 10 ? `0${number}` : number;
    }
    if (typeof dateFormat === "string") {
      const tokens = {
        yyyy: year,
        yy: String(year).substring(2),
        mm: twoDigits(month1),
        m: month1,
        MM: monthNames[month],
        M: monthNamesShort[month],
        dd: twoDigits(day),
        d: day,
        DD: dayNames[weekDay],
        D: dayNamesShort[weekDay]
      };
      if (calendar.params.timePicker) {
        const hours = date.getHours();
        const minutes = date.getMinutes();
        const seconds = date.getSeconds();
        let hours12 = hours;
        if (hours > 12) hours12 = hours - 12;
        if (hours === 0) hours12 = 12;
        const a = hours >= 12 && hours !== 0 ? "pm" : "am";
        Object.assign(tokens, {
          HH: twoDigits(hours),
          H: hours,
          hh: twoDigits(hours12),
          h: hours12,
          ss: twoDigits(seconds),
          s: seconds,
          ":mm": twoDigits(minutes),
          ":m": minutes,
          a,
          A: a.toUpperCase()
        });
      }
      const regexp = new RegExp(Object.keys(tokens).map((t) => `(${t})`).join("|"), "g");
      return dateFormat.replace(regexp, (token) => {
        if (token in tokens) return tokens[token];
        return token;
      });
    }
    if (typeof dateFormat === "function") {
      return dateFormat(date);
    }
    const formatter = new Intl.DateTimeFormat(locale, dateFormat);
    return formatter.format(date);
  }
  formatValue() {
    const calendar = this;
    const {
      value
    } = calendar;
    if (calendar.params.formatValue) {
      return calendar.params.formatValue.call(calendar, value);
    }
    return value.map((v) => calendar.formatDate(v)).join(calendar.params.rangePicker ? " - " : ", ");
  }
  addValue(newValue) {
    const calendar = this;
    const {
      multiple,
      rangePicker,
      rangePickerMinDays,
      rangePickerMaxDays
    } = calendar.params;
    if (multiple) {
      if (!calendar.value) calendar.value = [];
      let inValuesIndex;
      for (let i = 0; i < calendar.value.length; i += 1) {
        if (new Date(newValue).getTime() === new Date(calendar.value[i]).getTime()) {
          inValuesIndex = i;
        }
      }
      if (typeof inValuesIndex === "undefined") {
        calendar.value.push(newValue);
      } else {
        calendar.value.splice(inValuesIndex, 1);
      }
      calendar.updateValue();
    } else if (rangePicker) {
      if (!calendar.value) calendar.value = [];
      if (calendar.value.length === 2 || calendar.value.length === 0) {
        calendar.value = [];
      }
      if (calendar.value.length === 0 || Math.abs(calendar.value[0].getTime() - newValue.getTime()) >= (rangePickerMinDays - 1) * 60 * 60 * 24 * 1e3 && (rangePickerMaxDays === 0 || Math.abs(calendar.value[0].getTime() - newValue.getTime()) <= (rangePickerMaxDays - 1) * 60 * 60 * 24 * 1e3)) calendar.value.push(newValue);
      else calendar.value = [];
      calendar.value.sort((a, b) => a - b);
      calendar.updateValue();
    } else {
      calendar.value = [newValue];
      calendar.updateValue();
    }
  }
  setValue(values) {
    const calendar = this;
    const currentValue = calendar.value;
    if (Array.isArray(currentValue) && Array.isArray(values) && currentValue.length === values.length) {
      let equal = true;
      currentValue.forEach((v, index) => {
        if (v !== values[index]) equal = false;
      });
      if (equal) return;
    }
    calendar.value = values;
    calendar.updateValue();
  }
  getValue() {
    const calendar = this;
    return calendar.value;
  }
  updateValue(onlyHeader) {
    const calendar = this;
    const {
      $el,
      $wrapperEl,
      $inputEl,
      value,
      params
    } = calendar;
    let i;
    if ($el && $el.length > 0) {
      $wrapperEl.find(".calendar-day-selected").removeClass("calendar-day-selected calendar-day-selected-range calendar-day-selected-left calendar-day-selected-right");
      let valueDate;
      if (params.rangePicker && value.length === 2) {
        const leftDate = new Date(value[0]).getTime();
        const rightDate = new Date(value[1]).getTime();
        for (i = leftDate; i <= rightDate; i += 24 * 60 * 60 * 1e3) {
          valueDate = new Date(i);
          let addClass = "calendar-day-selected";
          if (leftDate !== rightDate) {
            if (i !== leftDate && i !== rightDate) {
              addClass += " calendar-day-selected-range";
            }
            if (i === leftDate) {
              addClass += " calendar-day-selected-left";
            }
            if (i === rightDate) {
              addClass += " calendar-day-selected-right";
            }
          }
          $wrapperEl.find(`.calendar-day[data-date="${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}"]`).addClass(addClass);
        }
        valueDate = new Date(leftDate);
        $wrapperEl.find(`.calendar-day[data-date="${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}"]`).removeClass("calendar-day-selected-range").addClass("calendar-day-selected calendar-day-selected-left");
        valueDate = new Date(rightDate);
        $wrapperEl.find(`.calendar-day[data-date="${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}"]`).removeClass("calendar-day-selected-range").addClass("calendar-day-selected calendar-day-selected-right");
      } else {
        for (i = 0; i < calendar.value.length; i += 1) {
          valueDate = new Date(value[i]);
          $wrapperEl.find(`.calendar-day[data-date="${valueDate.getFullYear()}-${valueDate.getMonth()}-${valueDate.getDate()}"]`).addClass("calendar-day-selected");
        }
      }
    }
    if (!onlyHeader) {
      calendar.emit("local::change calendarChange", calendar, value);
    }
    if ($el && $el.length > 0 && calendar.hasTimePicker) {
      $el.find(".calendar-time-selector a").text(value && value.length ? calendar.timeSelectorFormatter(value[0]) : calendar.params.timePickerPlaceholder);
    }
    if ($inputEl && $inputEl.length || params.header) {
      const inputValue = calendar.formatValue(value);
      if (params.header && $el && $el.length) {
        $el.find(".calendar-selected-date").text(inputValue);
      }
      if ($inputEl && $inputEl.length && !onlyHeader) {
        $inputEl.val(inputValue);
        $inputEl.trigger("change");
      }
    }
  }
  updateCurrentMonthYear(dir) {
    const calendar = this;
    const {
      $months,
      $el,
      monthNames
    } = calendar;
    let currentLocaleMonth;
    let currentLocaleYear;
    if (typeof dir === "undefined") {
      calendar.currentMonth = parseInt($months.eq(1).attr("data-month"), 10);
      calendar.currentYear = parseInt($months.eq(1).attr("data-year"), 10);
      currentLocaleMonth = $months.eq(1).attr("data-locale-month");
      currentLocaleYear = $months.eq(1).attr("data-locale-year");
    } else {
      calendar.currentMonth = parseInt($months.eq(dir === "next" ? $months.length - 1 : 0).attr("data-month"), 10);
      calendar.currentYear = parseInt($months.eq(dir === "next" ? $months.length - 1 : 0).attr("data-year"), 10);
      currentLocaleMonth = $months.eq(dir === "next" ? $months.length - 1 : 0).attr("data-locale-month");
      currentLocaleYear = $months.eq(dir === "next" ? $months.length - 1 : 0).attr("data-locale-year");
    }
    $el.find(".current-month-value").text(monthNames[currentLocaleMonth]);
    $el.find(".current-year-value").text(currentLocaleYear);
  }
  update() {
    const calendar = this;
    const {
      currentYear,
      currentMonth,
      $wrapperEl
    } = calendar;
    const currentDate = new Date(currentYear, currentMonth);
    const prevMonthHtml = calendar.renderMonth(currentDate, "prev");
    const currentMonthHtml = calendar.renderMonth(currentDate);
    const nextMonthHtml = calendar.renderMonth(currentDate, "next");
    $wrapperEl.transition(0).html(`${prevMonthHtml}${currentMonthHtml}${nextMonthHtml}`).transform("translate3d(0,0,0)");
    calendar.$months = $wrapperEl.find(".calendar-month");
    calendar.monthsTranslate = 0;
    calendar.setMonthsTranslate();
    calendar.$months.each((monthEl) => {
      calendar.emit("local::monthAdd calendarMonthAdd", monthEl);
    });
  }
  onMonthChangeStart(dir) {
    const calendar = this;
    const {
      $months,
      currentYear,
      currentMonth
    } = calendar;
    calendar.updateCurrentMonthYear(dir);
    $months.removeClass("calendar-month-current calendar-month-prev calendar-month-next");
    const currentIndex = dir === "next" ? $months.length - 1 : 0;
    $months.eq(currentIndex).addClass("calendar-month-current");
    $months.eq(dir === "next" ? currentIndex - 1 : currentIndex + 1).addClass(dir === "next" ? "calendar-month-prev" : "calendar-month-next");
    calendar.emit("local::monthYearChangeStart calendarMonthYearChangeStart", calendar, currentYear, currentMonth);
  }
  onMonthChangeEnd(dir, rebuildBoth) {
    const calendar = this;
    const {
      currentYear,
      currentMonth,
      $wrapperEl,
      monthsTranslate
    } = calendar;
    calendar.animating = false;
    let nextMonthHtml;
    let prevMonthHtml;
    let currentMonthHtml;
    $wrapperEl.find(".calendar-month:not(.calendar-month-prev):not(.calendar-month-current):not(.calendar-month-next)").remove();
    if (typeof dir === "undefined") {
      dir = "next";
      rebuildBoth = true;
    }
    if (!rebuildBoth) {
      currentMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), dir);
    } else {
      $wrapperEl.find(".calendar-month-next, .calendar-month-prev").remove();
      prevMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), "prev");
      nextMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), "next");
    }
    if (dir === "next" || rebuildBoth) {
      $wrapperEl.append(currentMonthHtml || nextMonthHtml);
    }
    if (dir === "prev" || rebuildBoth) {
      $wrapperEl.prepend(currentMonthHtml || prevMonthHtml);
    }
    const $months = $wrapperEl.find(".calendar-month");
    calendar.$months = $months;
    calendar.setMonthsTranslate(monthsTranslate);
    calendar.emit("local::monthAdd calendarMonthAdd", calendar, dir === "next" ? $months.eq($months.length - 1)[0] : $months.eq(0)[0]);
    calendar.emit("local::monthYearChangeEnd calendarMonthYearChangeEnd", calendar, currentYear, currentMonth);
  }
  setMonthsTranslate(translate2) {
    const calendar = this;
    const {
      $months,
      isHorizontal: isH,
      inverter
    } = calendar;
    translate2 = translate2 || calendar.monthsTranslate || 0;
    if (typeof calendar.monthsTranslate === "undefined") {
      calendar.monthsTranslate = translate2;
    }
    $months.removeClass("calendar-month-current calendar-month-prev calendar-month-next");
    const prevMonthTranslate = -(translate2 + 1) * 100 * inverter;
    const currentMonthTranslate = -translate2 * 100 * inverter;
    const nextMonthTranslate = -(translate2 - 1) * 100 * inverter;
    $months.eq(0).transform(`translate3d(${isH ? prevMonthTranslate : 0}%, ${isH ? 0 : prevMonthTranslate}%, 0)`).addClass("calendar-month-prev");
    $months.eq(1).transform(`translate3d(${isH ? currentMonthTranslate : 0}%, ${isH ? 0 : currentMonthTranslate}%, 0)`).addClass("calendar-month-current");
    $months.eq(2).transform(`translate3d(${isH ? nextMonthTranslate : 0}%, ${isH ? 0 : nextMonthTranslate}%, 0)`).addClass("calendar-month-next");
  }
  nextMonth(transition2) {
    const calendar = this;
    const {
      params,
      $wrapperEl,
      inverter,
      isHorizontal: isH
    } = calendar;
    if (typeof transition2 === "undefined" || typeof transition2 === "object") {
      transition2 = "";
      if (!params.animate) transition2 = 0;
    }
    const nextMonth = parseInt(calendar.$months.eq(calendar.$months.length - 1).attr("data-month"), 10);
    const nextYear = parseInt(calendar.$months.eq(calendar.$months.length - 1).attr("data-year"), 10);
    const nextDate = new Date(nextYear, nextMonth);
    const nextDateTime = nextDate.getTime();
    const transitionEndCallback = !calendar.animating;
    if (params.maxDate) {
      if (nextDateTime > new Date(params.maxDate).getTime()) {
        calendar.resetMonth();
        return;
      }
    }
    calendar.monthsTranslate -= 1;
    if (nextMonth === calendar.currentMonth) {
      const nextMonthTranslate = -calendar.monthsTranslate * 100 * inverter;
      const nextMonthHtml = dom7_default(calendar.renderMonth(nextDateTime, "next")).transform(`translate3d(${isH ? nextMonthTranslate : 0}%, ${isH ? 0 : nextMonthTranslate}%, 0)`).addClass("calendar-month-next");
      $wrapperEl.append(nextMonthHtml[0]);
      calendar.$months = $wrapperEl.find(".calendar-month");
      calendar.emit("local::monthAdd calendarMonthAdd", calendar.$months.eq(calendar.$months.length - 1)[0]);
    }
    calendar.animating = true;
    calendar.onMonthChangeStart("next");
    const translate2 = calendar.monthsTranslate * 100 * inverter;
    $wrapperEl.transition(transition2).transform(`translate3d(${isH ? translate2 : 0}%, ${isH ? 0 : translate2}%, 0)`);
    if (transitionEndCallback) {
      $wrapperEl.transitionEnd(() => {
        calendar.onMonthChangeEnd("next");
      });
    }
    if (!params.animate) {
      calendar.onMonthChangeEnd("next");
    }
  }
  prevMonth(transition2) {
    const calendar = this;
    const {
      params,
      $wrapperEl,
      inverter,
      isHorizontal: isH
    } = calendar;
    if (typeof transition2 === "undefined" || typeof transition2 === "object") {
      transition2 = "";
      if (!params.animate) transition2 = 0;
    }
    const prevMonth = parseInt(calendar.$months.eq(0).attr("data-month"), 10);
    const prevYear = parseInt(calendar.$months.eq(0).attr("data-year"), 10);
    const prevDate = new Date(prevYear, prevMonth + 1, -1);
    const prevDateTime = prevDate.getTime();
    const transitionEndCallback = !calendar.animating;
    if (params.minDate) {
      let minDate = new Date(params.minDate);
      minDate = new Date(minDate.getFullYear(), minDate.getMonth(), 1);
      if (prevDateTime < minDate.getTime()) {
        calendar.resetMonth();
        return;
      }
    }
    calendar.monthsTranslate += 1;
    if (prevMonth === calendar.currentMonth) {
      const prevMonthTranslate = -calendar.monthsTranslate * 100 * inverter;
      const prevMonthHtml = dom7_default(calendar.renderMonth(prevDateTime, "prev")).transform(`translate3d(${isH ? prevMonthTranslate : 0}%, ${isH ? 0 : prevMonthTranslate}%, 0)`).addClass("calendar-month-prev");
      $wrapperEl.prepend(prevMonthHtml[0]);
      calendar.$months = $wrapperEl.find(".calendar-month");
      calendar.emit("local::monthAdd calendarMonthAdd", calendar.$months.eq(0)[0]);
    }
    calendar.animating = true;
    calendar.onMonthChangeStart("prev");
    const translate2 = calendar.monthsTranslate * 100 * inverter;
    $wrapperEl.transition(transition2).transform(`translate3d(${isH ? translate2 : 0}%, ${isH ? 0 : translate2}%, 0)`);
    if (transitionEndCallback) {
      $wrapperEl.transitionEnd(() => {
        calendar.onMonthChangeEnd("prev");
      });
    }
    if (!params.animate) {
      calendar.onMonthChangeEnd("prev");
    }
  }
  resetMonth(transition2) {
    if (transition2 === void 0) {
      transition2 = "";
    }
    const calendar = this;
    const {
      $wrapperEl,
      inverter,
      isHorizontal: isH,
      monthsTranslate
    } = calendar;
    const translate2 = monthsTranslate * 100 * inverter;
    $wrapperEl.transition(transition2).transform(`translate3d(${isH ? translate2 : 0}%, ${isH ? 0 : translate2}%, 0)`);
  }
  // eslint-disable-next-line
  setYearMonth(year, month, transition2) {
    const calendar = this;
    const {
      params,
      isHorizontal: isH,
      $wrapperEl,
      inverter
    } = calendar;
    if (typeof year === "undefined") year = calendar.currentYear;
    if (typeof month === "undefined") month = calendar.currentMonth;
    if (typeof transition2 === "undefined" || typeof transition2 === "object") {
      transition2 = "";
      if (!params.animate) transition2 = 0;
    }
    let targetDate;
    if (year < calendar.currentYear) {
      targetDate = new Date(year, month + 1, -1).getTime();
    } else {
      targetDate = new Date(year, month).getTime();
    }
    if (params.maxDate && targetDate > new Date(params.maxDate).getTime()) {
      return false;
    }
    if (params.minDate) {
      let minDate = new Date(params.minDate);
      minDate = new Date(minDate.getFullYear(), minDate.getMonth(), 1);
      if (targetDate < minDate.getTime()) {
        return false;
      }
    }
    const currentDate = new Date(calendar.currentYear, calendar.currentMonth).getTime();
    const dir = targetDate > currentDate ? "next" : "prev";
    const newMonthHTML = calendar.renderMonth(new Date(year, month));
    calendar.monthsTranslate = calendar.monthsTranslate || 0;
    const prevTranslate = calendar.monthsTranslate;
    let monthTranslate;
    const transitionEndCallback = !calendar.animating && transition2 !== 0;
    if (targetDate > currentDate) {
      calendar.monthsTranslate -= 1;
      if (!calendar.animating) calendar.$months.eq(calendar.$months.length - 1).remove();
      $wrapperEl.append(newMonthHTML);
      calendar.$months = $wrapperEl.find(".calendar-month");
      monthTranslate = -(prevTranslate - 1) * 100 * inverter;
      calendar.$months.eq(calendar.$months.length - 1).transform(`translate3d(${isH ? monthTranslate : 0}%, ${isH ? 0 : monthTranslate}%, 0)`).addClass("calendar-month-next");
    } else {
      calendar.monthsTranslate += 1;
      if (!calendar.animating) calendar.$months.eq(0).remove();
      $wrapperEl.prepend(newMonthHTML);
      calendar.$months = $wrapperEl.find(".calendar-month");
      monthTranslate = -(prevTranslate + 1) * 100 * inverter;
      calendar.$months.eq(0).transform(`translate3d(${isH ? monthTranslate : 0}%, ${isH ? 0 : monthTranslate}%, 0)`).addClass("calendar-month-prev");
    }
    calendar.emit("local::monthAdd calendarMonthAdd", dir === "next" ? calendar.$months.eq(calendar.$months.length - 1)[0] : calendar.$months.eq(0)[0]);
    calendar.animating = true;
    calendar.onMonthChangeStart(dir);
    const wrapperTranslate = calendar.monthsTranslate * 100 * inverter;
    $wrapperEl.transition(transition2).transform(`translate3d(${isH ? wrapperTranslate : 0}%, ${isH ? 0 : wrapperTranslate}%, 0)`);
    if (transitionEndCallback) {
      $wrapperEl.transitionEnd(() => {
        calendar.onMonthChangeEnd(dir, true);
      });
    }
    if (!params.animate || transition2 === 0) {
      calendar.onMonthChangeEnd(dir, true);
    }
  }
  nextYear() {
    const calendar = this;
    calendar.setYearMonth(calendar.currentYear + 1);
  }
  prevYear() {
    const calendar = this;
    calendar.setYearMonth(calendar.currentYear - 1);
  }
  // eslint-disable-next-line
  dateInRange(dayDate, range) {
    let match = false;
    let i;
    if (!range) return false;
    if (Array.isArray(range)) {
      for (i = 0; i < range.length; i += 1) {
        if (range[i].from || range[i].to) {
          if (range[i].from && range[i].to) {
            if (dayDate <= new Date(range[i].to).getTime() && dayDate >= new Date(range[i].from).getTime()) {
              match = true;
            }
          } else if (range[i].from) {
            if (dayDate >= new Date(range[i].from).getTime()) {
              match = true;
            }
          } else if (range[i].to) {
            if (dayDate <= new Date(range[i].to).getTime()) {
              match = true;
            }
          }
        } else if (range[i].date) {
          if (dayDate === new Date(range[i].date).getTime()) {
            match = true;
          }
        } else if (dayDate === new Date(range[i]).getTime()) {
          match = true;
        }
      }
    } else if (range.from || range.to) {
      if (range.from && range.to) {
        if (dayDate <= new Date(range.to).getTime() && dayDate >= new Date(range.from).getTime()) {
          match = true;
        }
      } else if (range.from) {
        if (dayDate >= new Date(range.from).getTime()) {
          match = true;
        }
      } else if (range.to) {
        if (dayDate <= new Date(range.to).getTime()) {
          match = true;
        }
      }
    } else if (range.date) {
      match = dayDate === new Date(range.date).getTime();
    } else if (typeof range === "function") {
      match = range(new Date(dayDate));
    }
    return match;
  }
  // eslint-disable-next-line
  daysInMonth(date) {
    const d = new Date(date);
    return new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();
  }
  renderMonths(date) {
    const calendar = this;
    if (calendar.params.renderMonths) {
      return calendar.params.renderMonths.call(calendar, date);
    }
    return jsx_default("div", {
      class: "calendar-months-wrapper"
    }, calendar.renderMonth(date, "prev"), calendar.renderMonth(date), calendar.renderMonth(date, "next"));
  }
  renderMonth(d, offset) {
    const calendar = this;
    const {
      params,
      value
    } = calendar;
    if (params.renderMonth) {
      return params.renderMonth.call(calendar, d, offset);
    }
    let date = new Date(d);
    let year = date.getFullYear();
    let month = date.getMonth();
    let localeMonth = calendar.monthNames.indexOf(calendar.monthFormatter(date));
    if (localeMonth < 0) localeMonth = month;
    let localeYear = calendar.yearFormatter(date);
    if (offset === "next") {
      if (month === 11) date = new Date(year + 1, 0);
      else date = new Date(year, month + 1, 1);
    }
    if (offset === "prev") {
      if (month === 0) date = new Date(year - 1, 11);
      else date = new Date(year, month - 1, 1);
    }
    if (offset === "next" || offset === "prev") {
      month = date.getMonth();
      year = date.getFullYear();
      localeMonth = calendar.monthNames.indexOf(calendar.monthFormatter(date));
      if (localeMonth < 0) localeMonth = month;
      localeYear = calendar.yearFormatter(date);
    }
    const currentValues = [];
    const today = (/* @__PURE__ */ new Date()).setHours(0, 0, 0, 0);
    const minDate = params.minDate ? new Date(params.minDate).getTime() : null;
    const maxDate = params.maxDate ? new Date(params.maxDate).getTime() : null;
    const rows = 6;
    const cols = 7;
    const daysInPrevMonth = calendar.daysInMonth(new Date(date.getFullYear(), date.getMonth()).getTime() - 10 * 24 * 60 * 60 * 1e3);
    const daysInMonth = calendar.daysInMonth(date);
    const minDayNumber = params.firstDay === 6 ? 0 : 1;
    let monthHtml = "";
    let dayIndex = 0 + (params.firstDay - 1);
    let disabled;
    let hasEvents;
    let firstDayOfMonthIndex = new Date(date.getFullYear(), date.getMonth()).getDay();
    if (firstDayOfMonthIndex === 0) firstDayOfMonthIndex = 7;
    if (value && value.length) {
      for (let i = 0; i < value.length; i += 1) {
        currentValues.push(new Date(value[i]).setHours(0, 0, 0, 0));
      }
    }
    for (let row = 1; row <= rows; row += 1) {
      let rowHtml = "";
      for (let col = 1; col <= cols; col += 1) {
        dayIndex += 1;
        let dayDate;
        let dayNumber = dayIndex - firstDayOfMonthIndex;
        let addClass = "";
        if (row === 1 && col === 1 && dayNumber > minDayNumber && params.firstDay !== 1) {
          dayIndex -= 7;
          dayNumber = dayIndex - firstDayOfMonthIndex;
        }
        const weekDayIndex = col - 1 + params.firstDay > 6 ? col - 1 - 7 + params.firstDay : col - 1 + params.firstDay;
        if (dayNumber < 0) {
          dayNumber = daysInPrevMonth + dayNumber + 1;
          addClass += " calendar-day-prev";
          dayDate = new Date(month - 1 < 0 ? year - 1 : year, month - 1 < 0 ? 11 : month - 1, dayNumber).getTime();
        } else {
          dayNumber += 1;
          if (dayNumber > daysInMonth) {
            dayNumber -= daysInMonth;
            addClass += " calendar-day-next";
            dayDate = new Date(month + 1 > 11 ? year + 1 : year, month + 1 > 11 ? 0 : month + 1, dayNumber).getTime();
          } else {
            dayDate = new Date(year, month, dayNumber).getTime();
          }
        }
        if (dayDate === today) addClass += " calendar-day-today";
        if (params.rangePicker && currentValues.length === 2) {
          if (dayDate >= currentValues[0] && dayDate <= currentValues[1]) {
            addClass += " calendar-day-selected";
          }
          if (currentValues[0] !== currentValues[1]) {
            if (dayDate > currentValues[0] && dayDate < currentValues[1]) {
              addClass += " calendar-day-selected-range";
            }
            if (dayDate === currentValues[0]) {
              addClass += " calendar-day-selected-left";
            }
            if (dayDate === currentValues[1]) {
              addClass += " calendar-day-selected-right";
            }
          }
        } else if (currentValues.indexOf(dayDate) >= 0) addClass += " calendar-day-selected";
        if (params.weekendDays.indexOf(weekDayIndex) >= 0) {
          addClass += " calendar-day-weekend";
        }
        let eventsHtml = "";
        hasEvents = false;
        if (params.events) {
          if (calendar.dateInRange(dayDate, params.events)) {
            hasEvents = true;
          }
        }
        if (hasEvents) {
          addClass += " calendar-day-has-events";
          eventsHtml = `
            <span class="calendar-day-events">
              <span class="calendar-day-event"></span>
            </span>
          `;
          if (Array.isArray(params.events)) {
            const eventDots = [];
            params.events.forEach((ev) => {
              const color = ev.color || "";
              if (eventDots.indexOf(color) < 0 && calendar.dateInRange(dayDate, ev)) {
                eventDots.push(color);
              }
            });
            eventsHtml = `
              <span class="calendar-day-events">
                ${eventDots.map((color) => `
                  <span class="calendar-day-event" style="${color ? `background-color: ${color}` : ""}"></span>
                `.trim()).join("")}
              </span>
            `;
          }
        }
        if (params.rangesClasses) {
          for (let k = 0; k < params.rangesClasses.length; k += 1) {
            if (calendar.dateInRange(dayDate, params.rangesClasses[k].range)) {
              addClass += ` ${params.rangesClasses[k].cssClass}`;
            }
          }
        }
        disabled = false;
        if (minDate && dayDate < minDate || maxDate && dayDate > maxDate) {
          disabled = true;
        }
        if (params.disabled) {
          if (calendar.dateInRange(dayDate, params.disabled)) {
            disabled = true;
          }
        }
        if (disabled) {
          addClass += " calendar-day-disabled";
        }
        dayDate = new Date(dayDate);
        const dayYear = dayDate.getFullYear();
        const dayMonth = dayDate.getMonth();
        const dayNumberDisplay = calendar.dayFormatter(dayDate);
        rowHtml += `
          <div data-year="${dayYear}" data-month="${dayMonth}" data-day="${dayNumber}" class="calendar-day${addClass}" data-date="${dayYear}-${dayMonth}-${dayNumber}">
            <span class="calendar-day-number">${dayNumberDisplay}${eventsHtml}</span>
          </div>`.trim();
      }
      monthHtml += `<div class="calendar-row">${rowHtml}</div>`;
    }
    monthHtml = `<div class="calendar-month" data-year="${year}" data-month="${month}" data-locale-year="${localeYear}" data-locale-month="${localeMonth}">${monthHtml}</div>`;
    return monthHtml;
  }
  renderWeekHeader() {
    const calendar = this;
    if (calendar.params.renderWeekHeader) {
      return calendar.params.renderWeekHeader.call(calendar);
    }
    const {
      params
    } = calendar;
    let weekDaysHtml = "";
    for (let i = 0; i < 7; i += 1) {
      const dayIndex = i + params.firstDay > 6 ? i - 7 + params.firstDay : i + params.firstDay;
      const dayName = calendar.dayNamesShort[dayIndex];
      weekDaysHtml += `<div class="calendar-week-day">${dayName}</div>`;
    }
    return jsx_default("div", {
      class: "calendar-week-header"
    }, weekDaysHtml);
  }
  renderMonthSelector() {
    const calendar = this;
    if (calendar.params.renderMonthSelector) {
      return calendar.params.renderMonthSelector.call(calendar);
    }
    return jsx_default("div", {
      class: "calendar-month-selector"
    }, jsx_default("a", {
      class: "link icon-only calendar-prev-month-button"
    }, jsx_default("i", {
      class: "icon icon-prev"
    })), calendar.params.monthPicker ? jsx_default("a", {
      class: "current-month-value link"
    }) : jsx_default("span", {
      class: "current-month-value"
    }), jsx_default("a", {
      class: "link icon-only calendar-next-month-button"
    }, jsx_default("i", {
      class: "icon icon-next"
    })));
  }
  renderYearSelector() {
    const calendar = this;
    if (calendar.params.renderYearSelector) {
      return calendar.params.renderYearSelector.call(calendar);
    }
    return jsx_default("div", {
      class: "calendar-year-selector"
    }, jsx_default("a", {
      class: "link icon-only calendar-prev-year-button"
    }, jsx_default("i", {
      class: "icon icon-prev"
    })), calendar.params.yearPicker ? jsx_default("a", {
      class: "current-year-value link"
    }) : jsx_default("span", {
      class: "current-year-value"
    }), jsx_default("a", {
      class: "link icon-only calendar-next-year-button"
    }, jsx_default("i", {
      class: "icon icon-next"
    })));
  }
  // eslint-disable-next-line
  renderTimeSelector() {
    const calendar = this;
    const value = calendar.value && calendar.value[0];
    let timeString;
    if (value) timeString = calendar.timeSelectorFormatter(value);
    return jsx_default("div", {
      class: "calendar-time-selector"
    }, jsx_default("span", null, calendar.params.timePickerLabel), jsx_default("a", {
      class: "link"
    }, timeString || calendar.params.timePickerPlaceholder));
  }
  renderHeader() {
    const calendar = this;
    if (calendar.params.renderHeader) {
      return calendar.params.renderHeader.call(calendar);
    }
    return jsx_default("div", {
      class: "calendar-header"
    }, jsx_default("div", {
      class: "calendar-selected-date"
    }, calendar.params.headerPlaceholder));
  }
  renderFooter() {
    const calendar = this;
    const app = calendar.app;
    if (calendar.params.renderFooter) {
      return calendar.params.renderFooter.call(calendar);
    }
    return jsx_default("div", {
      class: "calendar-footer"
    }, jsx_default("a", {
      class: `${app.theme === "md" ? "button button-round" : "link"} calendar-close sheet-close popover-close`
    }, calendar.params.toolbarCloseText));
  }
  renderToolbar() {
    const calendar = this;
    if (calendar.params.renderToolbar) {
      return calendar.params.renderToolbar.call(calendar, calendar);
    }
    return jsx_default("div", {
      class: "toolbar toolbar-top"
    }, jsx_default("div", {
      class: "toolbar-inner"
    }, calendar.params.monthSelector ? calendar.renderMonthSelector() : "", calendar.params.yearSelector ? calendar.renderYearSelector() : ""));
  }
  // eslint-disable-next-line
  renderInline() {
    const calendar = this;
    const {
      cssClass,
      toolbar,
      header,
      footer,
      rangePicker,
      weekHeader
    } = calendar.params;
    const {
      value,
      hasTimePicker
    } = calendar;
    const date = value && value.length ? value[0] : (/* @__PURE__ */ new Date()).setHours(0, 0, 0);
    return jsx_default("div", {
      class: `calendar calendar-inline ${rangePicker ? "calendar-range" : ""} ${cssClass || ""}`
    }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), jsx_default("div", {
      class: "calendar-months"
    }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter());
  }
  renderCustomModal() {
    const calendar = this;
    const {
      cssClass,
      toolbar,
      header,
      footer,
      rangePicker,
      weekHeader
    } = calendar.params;
    const {
      value,
      hasTimePicker
    } = calendar;
    const date = value && value.length ? value[0] : (/* @__PURE__ */ new Date()).setHours(0, 0, 0);
    return jsx_default("div", {
      class: `calendar calendar-modal ${rangePicker ? "calendar-range" : ""} ${cssClass || ""}`
    }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), jsx_default("div", {
      class: "calendar-months"
    }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter());
  }
  renderSheet() {
    const calendar = this;
    const {
      cssClass,
      toolbar,
      header,
      footer,
      rangePicker,
      weekHeader
    } = calendar.params;
    const {
      value,
      hasTimePicker
    } = calendar;
    const date = value && value.length ? value[0] : (/* @__PURE__ */ new Date()).setHours(0, 0, 0);
    return jsx_default("div", {
      class: `sheet-modal calendar calendar-sheet ${rangePicker ? "calendar-range" : ""} ${cssClass || ""}`
    }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), jsx_default("div", {
      class: "sheet-modal-inner calendar-months"
    }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter());
  }
  renderPopover() {
    const calendar = this;
    const {
      cssClass,
      toolbar,
      header,
      footer,
      rangePicker,
      weekHeader
    } = calendar.params;
    const {
      value,
      hasTimePicker
    } = calendar;
    const date = value && value.length ? value[0] : (/* @__PURE__ */ new Date()).setHours(0, 0, 0);
    return jsx_default("div", {
      class: "popover calendar-popover"
    }, jsx_default("div", {
      class: "popover-inner"
    }, jsx_default("div", {
      class: `calendar ${rangePicker ? "calendar-range" : ""} ${cssClass || ""}`
    }, header && calendar.renderHeader(), toolbar && calendar.renderToolbar(), weekHeader && calendar.renderWeekHeader(), jsx_default("div", {
      class: "calendar-months"
    }, calendar.renderMonths(date)), hasTimePicker && calendar.renderTimeSelector(), footer && calendar.renderFooter())));
  }
  render() {
    const calendar = this;
    const {
      params
    } = calendar;
    if (params.render) return params.render.call(calendar);
    if (!calendar.inline) {
      let modalType = params.openIn;
      if (modalType === "auto") modalType = calendar.isPopover() ? "popover" : "sheet";
      if (modalType === "popover") return calendar.renderPopover();
      if (modalType === "sheet") return calendar.renderSheet();
      return calendar.renderCustomModal();
    }
    return calendar.renderInline();
  }
  openMonthPicker() {
    const calendar = this;
    const {
      $el,
      app
    } = calendar;
    if (!$el || !$el.length) return;
    $el.append('<div class="popover calendar-popover calendar-month-picker-popover"><div class="popover-inner"><div class="calendar-month-picker"></div></div></div>');
    calendar.monthPickerPopover = app.popover.create({
      el: $el.find(".calendar-month-picker-popover"),
      targetEl: $el.find(".calendar-month-selector"),
      backdrop: true,
      backdropUnique: true,
      on: {
        close() {
          calendar.closeMonthPicker();
        },
        closed() {
          if (calendar.monthPickerPopover.$el) calendar.monthPickerPopover.$el.remove();
          calendar.monthPickerPopover.destroy();
          if (calendar.monthPickerInstance) {
            calendar.monthPickerInstance.close();
            calendar.monthPickerInstance.destroy();
          }
          delete calendar.monthPickerInstance;
          delete calendar.monthPickerPopover;
        }
      }
    });
    calendar.monthPickerPopover.open();
    const localeMonth = parseInt(calendar.$el.find(".calendar-month-current").attr("data-locale-month"), 10);
    const values = [];
    const displayValues = [];
    calendar.monthNames.forEach((m, index) => {
      values.push(index);
      displayValues.push(m);
    });
    calendar.monthPickerInstance = app.picker.create({
      containerEl: calendar.monthPickerPopover.$el.find(".calendar-month-picker"),
      value: [localeMonth],
      toolbar: calendar.params.monthPickerToolbar,
      rotateEffect: false,
      toolbarCloseText: calendar.params.monthPickerCloseText,
      cols: [{
        values,
        displayValues
      }]
    });
  }
  closeMonthPicker() {
    const calendar = this;
    if (calendar.monthPickerPopover && calendar.monthPickerPopover.opened) calendar.monthPickerPopover.close();
    const index = calendar.monthPickerInstance.value[0];
    const localeMonthIndex = parseInt(calendar.$el.find(".calendar-month-current").attr("data-locale-month"), 10);
    const monthIndex = calendar.currentMonth;
    const diff = localeMonthIndex - monthIndex;
    const diffIndex = index - diff;
    calendar.setYearMonth(calendar.currentYear, diffIndex, 0);
  }
  openYearPicker() {
    const calendar = this;
    const {
      $el,
      app
    } = calendar;
    if (!$el || !$el.length) return;
    $el.append('<div class="popover calendar-popover calendar-year-picker-popover"><div class="popover-inner"><div class="calendar-year-picker"></div></div></div>');
    calendar.yearPickerPopover = app.popover.create({
      el: $el.find(".calendar-year-picker-popover"),
      targetEl: $el.find(".calendar-year-selector"),
      backdrop: true,
      backdropUnique: true,
      on: {
        close() {
          calendar.closeYearPicker();
        },
        closed() {
          if (calendar.yearPickerPopover.$el) calendar.yearPickerPopover.$el.remove();
          calendar.yearPickerPopover.destroy();
          if (calendar.yearPickerInstance) {
            calendar.yearPickerInstance.close();
            calendar.yearPickerInstance.destroy();
          }
          delete calendar.yearPickerInstance;
          delete calendar.yearPickerPopover;
        }
      }
    });
    calendar.yearPickerPopover.open();
    const currentYear = calendar.currentYear;
    let yearMin = calendar.params.yearPickerMin || (/* @__PURE__ */ new Date()).getFullYear() - 100;
    if (calendar.params.minDate) {
      yearMin = Math.max(yearMin, new Date(calendar.params.minDate).getFullYear());
    }
    let yearMax = calendar.params.yearPickerMax || (/* @__PURE__ */ new Date()).getFullYear() + 100;
    if (calendar.params.maxDate) {
      yearMax = Math.min(yearMax, new Date(calendar.params.maxDate).getFullYear());
    }
    const years = [];
    for (let i = yearMin; i <= yearMax; i += 1) {
      years.push(i);
    }
    calendar.yearPickerInstance = app.picker.create({
      containerEl: calendar.yearPickerPopover.$el.find(".calendar-year-picker"),
      value: [currentYear],
      toolbar: calendar.params.yearPickerToolbar,
      rotateEffect: false,
      toolbarCloseText: calendar.params.yearPickerCloseText,
      cols: [{
        values: years
      }]
    });
  }
  closeYearPicker() {
    const calendar = this;
    if (calendar.yearPickerPopover && calendar.yearPickerPopover.opened) calendar.yearPickerPopover.close();
    calendar.setYearMonth(calendar.yearPickerInstance.value[0], void 0, 0);
  }
  openTimePicker() {
    const calendar = this;
    const {
      $el,
      app,
      is12HoursFormat
    } = calendar;
    if (!$el || !$el.length) return;
    $el.append('<div class="popover calendar-popover calendar-time-picker-popover"><div class="popover-inner"><div class="calendar-time-picker"></div></div></div>');
    const hoursArr = [];
    const minutesArr = [];
    const hoursMin = is12HoursFormat ? 1 : 0;
    const hoursMax = is12HoursFormat ? 12 : 23;
    for (let i = hoursMin; i <= hoursMax; i += 1) {
      hoursArr.push(i);
    }
    for (let i = 0; i <= 59; i += 1) {
      minutesArr.push(i);
    }
    let value;
    if (calendar.value && calendar.value.length) {
      value = [calendar.value[0].getHours(), calendar.value[0].getMinutes()];
    } else {
      value = [(/* @__PURE__ */ new Date()).getHours(), (/* @__PURE__ */ new Date()).getMinutes()];
    }
    if (is12HoursFormat) {
      value.push(value[0] < 12 ? "AM" : "PM");
      if (value[0] > 12) value[0] -= 12;
      if (value[0] === 0) value[0] = 12;
    }
    calendar.timePickerPopover = app.popover.create({
      el: $el.find(".calendar-time-picker-popover"),
      targetEl: $el.find(".calendar-time-selector .link"),
      backdrop: true,
      backdropUnique: true,
      on: {
        close() {
          calendar.closeTimePicker();
        },
        closed() {
          if (calendar.timePickerPopover.$el) calendar.timePickerPopover.$el.remove();
          calendar.timePickerPopover.destroy();
          if (calendar.timePickerInstance) {
            calendar.timePickerInstance.close();
            calendar.timePickerInstance.destroy();
          }
          delete calendar.timePickerInstance;
          delete calendar.timePickerPopover;
        }
      }
    });
    calendar.timePickerPopover.open();
    calendar.timePickerInstance = app.picker.create({
      containerEl: calendar.timePickerPopover.$el.find(".calendar-time-picker"),
      value,
      toolbar: calendar.params.timePickerToolbar,
      rotateEffect: false,
      toolbarCloseText: calendar.params.timePickerCloseText,
      cols: [{
        values: hoursArr
      }, {
        divider: true,
        content: ":"
      }, {
        values: minutesArr,
        displayValues: minutesArr.map((m) => m < 10 ? `0${m}` : m)
      }, ...is12HoursFormat ? [{
        values: ["AM", "PM"]
      }] : []]
    });
  }
  closeTimePicker() {
    const calendar = this;
    const {
      is12HoursFormat
    } = calendar;
    if (calendar.timePickerInstance) {
      const timePickerValue = calendar.timePickerInstance.value;
      let hours = parseInt(timePickerValue[0], 10);
      const minutes = parseInt(timePickerValue[1], 10);
      const period = calendar.timePickerInstance.value[2];
      if (is12HoursFormat) {
        if (period === "AM" && hours === 12) {
          hours = 0;
        } else if (period === "PM" && hours !== 12) {
          hours += 12;
        }
      }
      let value = calendar.value && calendar.value.length && calendar.value[0];
      if (!value) {
        value = /* @__PURE__ */ new Date();
        value.setHours(hours, minutes, 0, 0);
      } else {
        value = new Date(value);
        value.setHours(hours, minutes);
      }
      calendar.setValue([value]);
      if (calendar.timePickerPopover && calendar.timePickerPopover.opened) calendar.timePickerPopover.close();
    }
  }
  onOpen() {
    const calendar = this;
    const {
      initialized,
      $el,
      app,
      $inputEl,
      inline,
      value,
      params
    } = calendar;
    calendar.closing = false;
    calendar.opened = true;
    calendar.opening = true;
    calendar.attachCalendarEvents();
    const updateValue = !value && params.value;
    if (!initialized) {
      if (value) calendar.setValue(value, 0);
      else if (params.value) {
        calendar.setValue(calendar.normalizeValues(params.value), 0);
      }
    } else if (value) {
      calendar.setValue(value, 0);
    }
    calendar.updateCurrentMonthYear();
    calendar.monthsTranslate = 0;
    calendar.setMonthsTranslate();
    if (updateValue) calendar.updateValue();
    else if (params.header && value) {
      calendar.updateValue(true);
    }
    if (!inline && $inputEl && $inputEl.length && app.theme === "md") {
      $inputEl.trigger("focus");
    }
    calendar.initialized = true;
    calendar.$months.each((monthEl) => {
      calendar.emit("local::monthAdd calendarMonthAdd", monthEl);
    });
    if ($el) {
      $el.trigger("calendar:open");
    }
    if ($inputEl) {
      $inputEl.trigger("calendar:open");
    }
    calendar.emit("local::open calendarOpen", calendar);
  }
  onOpened() {
    const calendar = this;
    calendar.opening = false;
    if (calendar.$el) {
      calendar.$el.trigger("calendar:opened");
    }
    if (calendar.$inputEl) {
      calendar.$inputEl.trigger("calendar:opened");
    }
    calendar.emit("local::opened calendarOpened", calendar);
  }
  onClose() {
    const calendar = this;
    const app = calendar.app;
    calendar.opening = false;
    calendar.closing = true;
    if (calendar.$inputEl) {
      if (app.theme === "md") {
        calendar.$inputEl.trigger("blur");
      } else {
        const validate = calendar.$inputEl.attr("validate");
        const required = calendar.$inputEl.attr("required");
        if (validate && required) {
          app.input.validate(calendar.$inputEl);
        }
      }
    }
    if (calendar.detachCalendarEvents) {
      calendar.detachCalendarEvents();
    }
    if (calendar.$el) {
      calendar.$el.trigger("calendar:close");
    }
    if (calendar.$inputEl) {
      calendar.$inputEl.trigger("calendar:close");
    }
    calendar.emit("local::close calendarClose", calendar);
  }
  onClosed() {
    const calendar = this;
    calendar.opened = false;
    calendar.closing = false;
    if (!calendar.inline) {
      nextTick(() => {
        if (calendar.modal && calendar.modal.el && calendar.modal.destroy) {
          if (!calendar.params.routableModals) {
            calendar.modal.destroy();
          }
        }
        delete calendar.modal;
      });
    }
    if (calendar.timePickerInstance) {
      if (calendar.timePickerInstance.destroy) calendar.timePickerInstance.destroy();
      delete calendar.timePickerInstance;
    }
    if (calendar.$el) {
      calendar.$el.trigger("calendar:closed");
    }
    if (calendar.$inputEl) {
      calendar.$inputEl.trigger("calendar:closed");
    }
    calendar.emit("local::closed calendarClosed", calendar);
  }
  open() {
    const calendar = this;
    const {
      app,
      opened,
      inline,
      $inputEl,
      params
    } = calendar;
    if (opened) return;
    if (inline) {
      calendar.$el = dom7_default(calendar.render());
      calendar.$el[0].f7Calendar = calendar;
      calendar.$wrapperEl = calendar.$el.find(".calendar-months-wrapper");
      calendar.$months = calendar.$wrapperEl.find(".calendar-month");
      calendar.$containerEl.append(calendar.$el);
      calendar.onOpen();
      calendar.onOpened();
      return;
    }
    let modalType = params.openIn;
    if (modalType === "auto") {
      modalType = calendar.isPopover() ? "popover" : "sheet";
    }
    const modalContent = calendar.render();
    const modalParams = {
      targetEl: $inputEl,
      scrollToEl: params.scrollToInput ? $inputEl : void 0,
      content: modalContent,
      backdrop: params.backdrop === true || (modalType === "popover" || modalType === "customModal") && app.params.popover.backdrop !== false && params.backdrop !== false,
      closeByBackdropClick: params.closeByBackdropClick,
      on: {
        open() {
          const modal = this;
          calendar.modal = modal;
          calendar.$el = modalType === "popover" ? modal.$el.find(".calendar") : modal.$el;
          calendar.$wrapperEl = calendar.$el.find(".calendar-months-wrapper");
          calendar.$months = calendar.$wrapperEl.find(".calendar-month");
          calendar.$el[0].f7Calendar = calendar;
          if (modalType === "customModal") {
            dom7_default(calendar.$el).find(".calendar-close").once("click", () => {
              calendar.close();
            });
          }
          calendar.onOpen();
        },
        opened() {
          calendar.onOpened();
        },
        close() {
          calendar.onClose();
        },
        closed() {
          calendar.onClosed();
        }
      }
    };
    if (modalType === "sheet") {
      modalParams.push = params.sheetPush;
      modalParams.swipeToClose = params.sheetSwipeToClose;
    }
    if (params.routableModals && calendar.view) {
      calendar.view.router.navigate({
        url: calendar.url,
        route: {
          path: calendar.url,
          [modalType]: modalParams
        }
      });
    } else {
      calendar.modal = app[modalType].create(modalParams);
      calendar.modal.open();
    }
  }
  close() {
    const calendar = this;
    const {
      opened,
      inline
    } = calendar;
    if (!opened) return;
    if (inline) {
      calendar.onClose();
      calendar.onClosed();
      return;
    }
    if (calendar.params.routableModals && calendar.view) {
      calendar.view.router.back();
    } else {
      calendar.modal.close();
    }
  }
  init() {
    const calendar = this;
    calendar.initInput();
    if (calendar.inline) {
      calendar.open();
      calendar.emit("local::init calendarInit", calendar);
      return;
    }
    if (!calendar.initialized && calendar.params.value) {
      calendar.setValue(calendar.normalizeValues(calendar.params.value));
    }
    if (calendar.$inputEl) {
      calendar.attachInputEvents();
    }
    if (calendar.params.closeByOutsideClick) {
      calendar.attachHtmlEvents();
    }
    calendar.emit("local::init calendarInit", calendar);
  }
  destroy() {
    const calendar = this;
    if (calendar.destroyed) return;
    const {
      $el
    } = calendar;
    calendar.emit("local::beforeDestroy calendarBeforeDestroy", calendar);
    if ($el) $el.trigger("calendar:beforedestroy");
    calendar.close();
    if (calendar.$inputEl) {
      calendar.detachInputEvents();
    }
    if (calendar.params.closeByOutsideClick) {
      calendar.detachHtmlEvents();
    }
    if (calendar.timePickerInstance) {
      if (calendar.timePickerInstance.destroy) calendar.timePickerInstance.destroy();
      delete calendar.timePickerInstance;
    }
    if ($el && $el.length) delete calendar.$el[0].f7Calendar;
    deleteProps(calendar);
    calendar.destroyed = true;
  }
};
var calendar_class_default = Calendar;

// node_modules/framework7/components/calendar/calendar.js
var calendar_default = {
  name: "calendar",
  static: {
    Calendar: calendar_class_default
  },
  create() {
    const app = this;
    app.calendar = ConstructorMethods({
      defaultSelector: ".calendar",
      constructor: calendar_class_default,
      app,
      domProp: "f7Calendar"
    });
    app.calendar.close = function close6(el) {
      if (el === void 0) {
        el = ".calendar";
      }
      const $el = dom7_default(el);
      if ($el.length === 0) return;
      const calendar = $el[0].f7Calendar;
      if (!calendar || calendar && !calendar.opened) return;
      calendar.close();
    };
  },
  params: {
    calendar: {
      // Calendar settings
      dateFormat: void 0,
      monthNames: "auto",
      monthNamesShort: "auto",
      dayNames: "auto",
      dayNamesShort: "auto",
      locale: void 0,
      firstDay: 1,
      // First day of the week, Monday
      weekendDays: [0, 6],
      // Sunday and Saturday
      multiple: false,
      rangePicker: false,
      rangePickerMinDays: 1,
      // when calendar is used as rangePicker
      rangePickerMaxDays: 0,
      // when calendar is used as rangePicker, 0 means unlimited
      direction: "horizontal",
      // or 'vertical'
      minDate: null,
      maxDate: null,
      disabled: null,
      // dates range of disabled days
      events: null,
      // dates range of days with events
      rangesClasses: null,
      // array with custom classes date ranges
      touchMove: true,
      animate: true,
      closeOnSelect: false,
      monthSelector: true,
      monthPicker: true,
      monthPickerToolbar: true,
      monthPickerCloseText: "Done",
      yearSelector: true,
      yearPicker: true,
      yearPickerToolbar: true,
      yearPickerMin: void 0,
      yearPickerMax: void 0,
      yearPickerCloseText: "Done",
      timePicker: false,
      timePickerToolbar: true,
      timePickerLabel: "Time",
      timePickerFormat: {
        hour: "numeric",
        minute: "numeric"
      },
      timePickerPlaceholder: "Select time",
      timePickerCloseText: "Done",
      weekHeader: true,
      value: null,
      // Common opener settings
      containerEl: null,
      openIn: "auto",
      // or 'popover' or 'sheet' or 'customModal'
      sheetPush: false,
      sheetSwipeToClose: void 0,
      formatValue: null,
      inputEl: null,
      inputReadOnly: true,
      closeByOutsideClick: true,
      scrollToInput: true,
      header: false,
      headerPlaceholder: "Select date",
      toolbar: true,
      toolbarCloseText: "Done",
      footer: false,
      cssClass: null,
      routableModals: false,
      view: null,
      url: "date/",
      backdrop: null,
      closeByBackdropClick: true,
      // Render functions
      renderWeekHeader: null,
      renderMonths: null,
      renderMonth: null,
      renderMonthSelector: null,
      renderYearSelector: null,
      renderHeader: null,
      renderFooter: null,
      renderToolbar: null,
      renderInline: null,
      renderPopover: null,
      renderSheet: null,
      render: null
    }
  }
};

// node_modules/framework7/components/picker/picker-column.js
function pickerColumn(colEl, updateItems) {
  const picker = this;
  const $colEl = dom7_default(colEl);
  const colIndex = $colEl.index();
  const col = picker.cols[colIndex];
  if (col.divider) return;
  col.$el = $colEl;
  col.el = $colEl[0];
  col.$itemsEl = col.$el.find(".picker-items");
  col.items = col.$itemsEl.find(".picker-item");
  let itemHeight;
  let colHeight;
  col.replaceValues = function replaceColValues(values, displayValues) {
    col.detachEvents();
    col.values = values;
    col.displayValues = displayValues;
    col.$itemsEl.html(picker.renderColumn(col, true));
    col.items = col.$itemsEl.find(".picker-item");
    col.calcSize();
    col.setValue(col.values[0], true);
    col.attachEvents();
  };
  col.calcSize = function calcColSize() {
    colHeight = col.$el[0].offsetHeight;
    itemHeight = col.items[0].offsetHeight;
    const hadPadding = col.el.style.getPropertyValue("--f7-picker-scroll-padding");
    col.el.style.setProperty("--f7-picker-scroll-padding", `${(colHeight - itemHeight) / 2}px`);
    if (!hadPadding) {
      col.$itemsEl[0].scrollTop = 0;
    }
  };
  col.setValue = function setColValue(newValue, valueCallbacks) {
    const newActiveIndex = col.$itemsEl.find(`.picker-item[data-picker-value="${newValue}"]`).index();
    if (typeof newActiveIndex === "undefined" || newActiveIndex === -1) {
      return;
    }
    const newScrollTop = newActiveIndex * itemHeight;
    col.$itemsEl[0].scrollTop = newScrollTop;
    col.updateItems(newActiveIndex, newScrollTop, valueCallbacks);
  };
  col.updateItems = function updateColItems(activeIndex, scrollTop, valueCallbacks) {
    if (typeof scrollTop === "undefined") {
      scrollTop = col.$itemsEl[0].scrollTop;
    }
    if (typeof activeIndex === "undefined") {
      activeIndex = Math.round(scrollTop / itemHeight);
    }
    if (activeIndex < 0) activeIndex = 0;
    if (activeIndex >= col.items.length) activeIndex = col.items.length - 1;
    const previousActiveIndex = col.activeIndex;
    col.activeIndex = activeIndex;
    col.$itemsEl.find(".picker-item-selected").removeClass("picker-item-selected");
    const selectedItem = col.items.eq(activeIndex);
    selectedItem.addClass("picker-item-selected").children().transform("");
    if (picker.params.rotateEffect) {
      col.items.each((itemEl) => {
        const $itemEl = dom7_default(itemEl);
        const itemOffset = itemEl.offsetTop - (colHeight - itemHeight) / 2 - scrollTop;
        const percentage = itemOffset / itemHeight;
        const itemsFit = Math.ceil(col.height / itemHeight / 2) + 1;
        let angle = -24 * percentage;
        if (angle > 180) angle = 180;
        if (angle < -180) angle = -180;
        if (Math.abs(percentage) > itemsFit) {
          $itemEl.addClass("picker-item-far");
        } else {
          $itemEl.removeClass("picker-item-far");
        }
        $itemEl.children("span").transform(`translate3d(0, ${-percentage * itemHeight}px, -100px) rotateX(${angle}deg)`);
      });
    }
    if (valueCallbacks || typeof valueCallbacks === "undefined") {
      col.value = selectedItem.attr("data-picker-value");
      col.displayValue = col.displayValues ? col.displayValues[activeIndex] : col.value;
      if (previousActiveIndex !== activeIndex) {
        if (col.onChange) {
          col.onChange(picker, col.value, col.displayValue);
        }
        picker.updateValue();
      }
    }
  };
  function handleScroll() {
    col.updateItems();
  }
  function handleClick() {
    const value = dom7_default(this).attr("data-picker-value");
    col.setValue(value);
  }
  col.attachEvents = function attachColEvents() {
    col.$itemsEl.on("scroll", handleScroll);
    col.items.on("click", handleClick);
  };
  col.detachEvents = function detachColEvents() {
    col.items.off("click", handleClick);
  };
  col.init = function initCol() {
    col.calcSize();
    if (colIndex === 0) col.$el.addClass("picker-column-first");
    if (colIndex === picker.cols.length - 1) col.$el.addClass("picker-column-last");
    if (picker.params.freeMode) col.$el.addClass("picker-column-free-mode");
    if (updateItems) col.updateItems(0);
    col.attachEvents();
  };
  col.destroy = function destroyCol() {
    col.detachEvents();
  };
  col.init();
}

// node_modules/framework7/components/picker/picker-class.js
var Picker = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const picker = this;
    const device = getDevice();
    const window2 = getWindow();
    picker.params = extend({}, app.params.picker, params);
    let $containerEl;
    if (picker.params.containerEl) {
      $containerEl = dom7_default(picker.params.containerEl);
      if ($containerEl.length === 0) return picker;
    }
    let $inputEl;
    if (picker.params.inputEl) {
      $inputEl = dom7_default(picker.params.inputEl);
    }
    let $scrollToEl = picker.params.scrollToInput ? $inputEl : void 0;
    if (picker.params.scrollToEl) {
      const scrollToEl = dom7_default(picker.params.scrollToEl);
      if (scrollToEl.length > 0) {
        $scrollToEl = scrollToEl;
      }
    }
    extend(picker, {
      app,
      $containerEl,
      containerEl: $containerEl && $containerEl[0],
      inline: $containerEl && $containerEl.length > 0,
      needsOriginFix: device.ios || window2.navigator.userAgent.toLowerCase().indexOf("safari") >= 0 && window2.navigator.userAgent.toLowerCase().indexOf("chrome") < 0 && !device.android,
      cols: [],
      $inputEl,
      inputEl: $inputEl && $inputEl[0],
      $scrollToEl,
      initialized: false,
      opened: false,
      url: picker.params.url
    });
    function onResize2() {
      picker.resizeCols();
    }
    function onInputClick() {
      picker.open();
    }
    function onInputFocus(e) {
      e.preventDefault();
    }
    let htmlTouchStartTarget = null;
    function onHtmlTouchStart(e) {
      htmlTouchStartTarget = e.target;
    }
    function onHtmlClick(e) {
      if (picker.destroyed || !picker.params) return;
      const $targetEl = dom7_default(e.target);
      if (picker.isPopover()) return;
      if (!picker.opened || picker.closing) return;
      if ($targetEl.closest('[class*="backdrop"]').length) return;
      if ($inputEl && $inputEl.length > 0) {
        if (htmlTouchStartTarget === e.target && $targetEl[0] !== $inputEl[0] && $targetEl.closest(".sheet-modal").length === 0) {
          picker.close();
        }
      } else if (dom7_default(e.target).closest(".sheet-modal").length === 0) {
        picker.close();
      }
    }
    extend(picker, {
      attachResizeEvent() {
        app.on("resize", onResize2);
      },
      detachResizeEvent() {
        app.off("resize", onResize2);
      },
      attachInputEvents() {
        picker.$inputEl.on("click", onInputClick);
        if (picker.params.inputReadOnly) {
          picker.$inputEl.on("focus mousedown", onInputFocus);
          if (picker.$inputEl[0]) {
            picker.$inputEl[0].f7ValidateReadonly = true;
          }
        }
      },
      detachInputEvents() {
        picker.$inputEl.off("click", onInputClick);
        if (picker.params.inputReadOnly) {
          picker.$inputEl.off("focus mousedown", onInputFocus);
          if (picker.$inputEl[0]) {
            delete picker.$inputEl[0].f7ValidateReadonly;
          }
        }
      },
      attachHtmlEvents() {
        app.on("click", onHtmlClick);
        app.on("touchstart", onHtmlTouchStart);
      },
      detachHtmlEvents() {
        app.off("click", onHtmlClick);
        app.off("touchstart", onHtmlTouchStart);
      }
    });
    picker.init();
    return picker;
  }
  get view() {
    const {
      app,
      params,
      $inputEl
    } = this;
    let view;
    if (params.view) {
      view = params.view;
    } else if ($inputEl) {
      view = $inputEl.parents(".view").length && $inputEl.parents(".view")[0].f7View;
    }
    if (!view) view = app.views.main;
    return view;
  }
  initInput() {
    const picker = this;
    if (!picker.$inputEl) return;
    if (picker.params.inputReadOnly) picker.$inputEl.prop("readOnly", true);
  }
  resizeCols() {
    const picker = this;
    if (!picker.opened) return;
    for (let i = 0; i < picker.cols.length; i += 1) {
      if (!picker.cols[i].divider) {
        picker.cols[i].calcSize();
        picker.cols[i].setValue(picker.cols[i].value, false);
      }
    }
  }
  isPopover() {
    const picker = this;
    const {
      app,
      modal,
      params
    } = picker;
    const device = getDevice();
    if (params.openIn === "sheet") return false;
    if (modal && modal.type !== "popover") return false;
    if (!picker.inline && picker.inputEl) {
      if (params.openIn === "popover") return true;
      if (device.ios) {
        return !!device.ipad;
      }
      if (app.width >= 768) {
        return true;
      }
    }
    return false;
  }
  formatValue() {
    const picker = this;
    const {
      value,
      displayValue
    } = picker;
    if (picker.params.formatValue) {
      return picker.params.formatValue.call(picker, value, displayValue);
    }
    return value.join(" ");
  }
  setValue(values) {
    const picker = this;
    let valueIndex = 0;
    if (picker.cols.length === 0) {
      picker.value = values;
      picker.updateValue(values);
      return;
    }
    for (let i = 0; i < picker.cols.length; i += 1) {
      if (picker.cols[i] && !picker.cols[i].divider) {
        picker.cols[i].setValue(values[valueIndex]);
        valueIndex += 1;
      }
    }
  }
  getValue() {
    const picker = this;
    return picker.value;
  }
  updateValue(forceValues) {
    const picker = this;
    const newValue = forceValues || [];
    const newDisplayValue = [];
    let column;
    if (picker.cols.length === 0) {
      const noDividerColumns = picker.params.cols.filter((c) => !c.divider);
      for (let i = 0; i < noDividerColumns.length; i += 1) {
        column = noDividerColumns[i];
        if (column.displayValues !== void 0 && column.values !== void 0 && column.values.indexOf(newValue[i]) !== -1) {
          newDisplayValue.push(column.displayValues[column.values.indexOf(newValue[i])]);
        } else {
          newDisplayValue.push(newValue[i]);
        }
      }
    } else {
      for (let i = 0; i < picker.cols.length; i += 1) {
        if (!picker.cols[i].divider) {
          newValue.push(picker.cols[i].value);
          newDisplayValue.push(picker.cols[i].displayValue);
        }
      }
    }
    if (newValue.indexOf(void 0) >= 0) {
      return;
    }
    picker.value = newValue;
    picker.displayValue = newDisplayValue;
    picker.emit("local::change pickerChange", picker, picker.value, picker.displayValue);
    if (picker.inputEl) {
      picker.$inputEl.val(picker.formatValue());
      picker.$inputEl.trigger("change");
    }
  }
  initColumn(colEl, updateItems) {
    const picker = this;
    pickerColumn.call(picker, colEl, updateItems);
  }
  // eslint-disable-next-line
  destroyColumn(colEl) {
    const picker = this;
    const $colEl = dom7_default(colEl);
    const index = $colEl.index();
    if (picker.cols[index] && picker.cols[index].destroy) {
      picker.cols[index].destroy();
    }
  }
  renderToolbar() {
    const picker = this;
    if (picker.params.renderToolbar) return picker.params.renderToolbar.call(picker, picker);
    return jsx_default("div", {
      class: "toolbar toolbar-top"
    }, jsx_default("div", {
      class: "toolbar-inner"
    }, jsx_default("div", {
      class: "left"
    }), jsx_default("div", {
      class: "right"
    }, jsx_default("a", {
      class: "link sheet-close popover-close"
    }, picker.params.toolbarCloseText))));
  }
  // eslint-disable-next-line
  renderColumn(col, onlyItems) {
    const colClasses = `picker-column ${col.textAlign ? `picker-column-${col.textAlign}` : ""} ${col.cssClass || ""}`;
    let columnHtml;
    let columnItemsHtml;
    if (col.divider) {
      columnHtml = `
        <div class="${colClasses} picker-column-divider">${col.content}</div>
      `;
    } else {
      columnItemsHtml = col.values.map((value, index) => `
        <div class="picker-item" data-picker-value="${value}">
          <span>${col.displayValues ? col.displayValues[index] : value}</span>
        </div>
      `).join("");
      columnHtml = `
        <div class="${colClasses}">
          <div class="picker-items">${columnItemsHtml}</div>
        </div>
      `;
    }
    return onlyItems ? columnItemsHtml.trim() : columnHtml.trim();
  }
  renderInline() {
    const picker = this;
    const {
      rotateEffect,
      cssClass,
      toolbar
    } = picker.params;
    const inlineHtml = jsx_default("div", {
      class: `picker picker-inline ${rotateEffect ? "picker-3d" : ""} ${cssClass || ""}`
    }, toolbar && picker.renderToolbar(), jsx_default("div", {
      class: "picker-columns"
    }, picker.cols.map((col) => picker.renderColumn(col)), jsx_default("div", {
      class: "picker-center-highlight"
    })));
    return inlineHtml;
  }
  renderSheet() {
    const picker = this;
    const {
      rotateEffect,
      cssClass,
      toolbar
    } = picker.params;
    const sheetHtml = jsx_default("div", {
      class: `sheet-modal picker picker-sheet ${rotateEffect ? "picker-3d" : ""} ${cssClass || ""}`
    }, toolbar && picker.renderToolbar(), jsx_default("div", {
      class: "sheet-modal-inner picker-columns"
    }, picker.cols.map((col) => picker.renderColumn(col)), jsx_default("div", {
      class: "picker-center-highlight"
    })));
    return sheetHtml;
  }
  renderPopover() {
    const picker = this;
    const {
      rotateEffect,
      cssClass,
      toolbar
    } = picker.params;
    const popoverHtml = jsx_default("div", {
      class: "popover picker-popover"
    }, jsx_default("div", {
      class: "popover-inner"
    }, jsx_default("div", {
      class: `picker ${rotateEffect ? "picker-3d" : ""} ${cssClass || ""}`
    }, toolbar && picker.renderToolbar(), jsx_default("div", {
      class: "picker-columns"
    }, picker.cols.map((col) => picker.renderColumn(col)), jsx_default("div", {
      class: "picker-center-highlight"
    })))));
    return popoverHtml;
  }
  render() {
    const picker = this;
    if (picker.params.render) return picker.params.render.call(picker);
    if (!picker.inline) {
      if (picker.isPopover()) return picker.renderPopover();
      return picker.renderSheet();
    }
    return picker.renderInline();
  }
  onOpen() {
    const picker = this;
    const {
      initialized,
      $el,
      app,
      $inputEl,
      inline,
      value,
      params
    } = picker;
    picker.opened = true;
    picker.closing = false;
    picker.opening = true;
    picker.attachResizeEvent();
    $el.find(".picker-column").each((colEl) => {
      let updateItems = true;
      if (!initialized && params.value || initialized && value) {
        updateItems = false;
      }
      picker.initColumn(colEl, updateItems);
    });
    if (!initialized) {
      if (value) picker.setValue(value);
      else if (params.value) {
        picker.setValue(params.value);
      }
    } else if (value) {
      picker.setValue(value);
    }
    if (!inline && $inputEl && $inputEl.length && app.theme === "md") {
      $inputEl.trigger("focus");
    }
    picker.initialized = true;
    if ($el) {
      $el.trigger("picker:open");
    }
    if ($inputEl) {
      $inputEl.trigger("picker:open");
    }
    picker.emit("local::open pickerOpen", picker);
  }
  onOpened() {
    const picker = this;
    picker.opening = false;
    if (picker.$el) {
      picker.$el.trigger("picker:opened");
    }
    if (picker.$inputEl) {
      picker.$inputEl.trigger("picker:opened");
    }
    picker.emit("local::opened pickerOpened", picker);
  }
  onClose() {
    const picker = this;
    const app = picker.app;
    picker.opening = false;
    picker.closing = true;
    picker.detachResizeEvent();
    picker.cols.forEach((col) => {
      if (col.destroy) col.destroy();
    });
    if (picker.$inputEl) {
      if (app.theme === "md") {
        picker.$inputEl.trigger("blur");
      } else {
        const validate = picker.$inputEl.attr("validate");
        const required = picker.$inputEl.attr("required");
        if (validate && required) {
          app.input.validate(picker.$inputEl);
        }
      }
    }
    if (picker.$el) {
      picker.$el.trigger("picker:close");
    }
    if (picker.$inputEl) {
      picker.$inputEl.trigger("picker:close");
    }
    picker.emit("local::close pickerClose", picker);
  }
  onClosed() {
    const picker = this;
    picker.opened = false;
    picker.closing = false;
    if (!picker.inline) {
      nextTick(() => {
        if (picker.modal && picker.modal.el && picker.modal.destroy) {
          if (!picker.params.routableModals) {
            picker.modal.destroy();
          }
        }
        delete picker.modal;
      });
    }
    if (picker.$el) {
      picker.$el.trigger("picker:closed");
    }
    if (picker.$inputEl) {
      picker.$inputEl.trigger("picker:closed");
    }
    picker.emit("local::closed pickerClosed", picker);
  }
  open() {
    const picker = this;
    const {
      app,
      opened,
      inline,
      $inputEl,
      $scrollToEl,
      params
    } = picker;
    if (opened) return;
    if (picker.cols.length === 0 && params.cols.length) {
      params.cols.forEach((col) => {
        picker.cols.push(col);
      });
    }
    if (inline) {
      picker.$el = dom7_default(picker.render());
      picker.$el[0].f7Picker = picker;
      picker.$containerEl.append(picker.$el);
      picker.onOpen();
      picker.onOpened();
      return;
    }
    const isPopover = picker.isPopover();
    const modalType = isPopover ? "popover" : "sheet";
    const modalParams = {
      targetEl: $inputEl,
      scrollToEl: $scrollToEl,
      content: picker.render(),
      backdrop: typeof params.backdrop !== "undefined" ? params.backdrop : isPopover,
      on: {
        open() {
          const modal = this;
          picker.modal = modal;
          picker.$el = isPopover ? modal.$el.find(".picker") : modal.$el;
          picker.$el[0].f7Picker = picker;
          picker.onOpen();
        },
        opened() {
          picker.onOpened();
        },
        close() {
          picker.onClose();
        },
        closed() {
          picker.onClosed();
        }
      }
    };
    if (modalType === "sheet") {
      modalParams.push = params.sheetPush;
      modalParams.swipeToClose = params.sheetSwipeToClose;
    }
    if (params.routableModals && picker.view) {
      picker.view.router.navigate({
        url: picker.url,
        route: {
          path: picker.url,
          [modalType]: modalParams
        }
      });
    } else {
      picker.modal = app[modalType].create(modalParams);
      picker.modal.open();
    }
  }
  close() {
    const picker = this;
    const {
      opened,
      inline
    } = picker;
    if (!opened) return;
    if (inline) {
      picker.onClose();
      picker.onClosed();
      return;
    }
    if (picker.params.routableModals && picker.view) {
      picker.view.router.back();
    } else {
      picker.modal.close();
    }
  }
  init() {
    const picker = this;
    picker.initInput();
    if (picker.inline) {
      picker.open();
      picker.emit("local::init pickerInit", picker);
      return;
    }
    if (!picker.initialized && picker.params.value) {
      picker.setValue(picker.params.value);
    }
    if (picker.$inputEl) {
      picker.attachInputEvents();
    }
    if (picker.params.closeByOutsideClick) {
      picker.attachHtmlEvents();
    }
    picker.emit("local::init pickerInit", picker);
  }
  destroy() {
    const picker = this;
    if (picker.destroyed) return;
    const {
      $el
    } = picker;
    picker.emit("local::beforeDestroy pickerBeforeDestroy", picker);
    if ($el) $el.trigger("picker:beforedestroy");
    picker.close();
    if (picker.$inputEl) {
      picker.detachInputEvents();
    }
    if (picker.params.closeByOutsideClick) {
      picker.detachHtmlEvents();
    }
    if ($el && $el.length) delete picker.$el[0].f7Picker;
    deleteProps(picker);
    picker.destroyed = true;
  }
};
var picker_class_default = Picker;

// node_modules/framework7/components/picker/picker.js
var picker_default = {
  name: "picker",
  static: {
    Picker: picker_class_default
  },
  create() {
    const app = this;
    app.picker = ConstructorMethods({
      defaultSelector: ".picker",
      constructor: picker_class_default,
      app,
      domProp: "f7Picker"
    });
    app.picker.close = function close6(el) {
      if (el === void 0) {
        el = ".picker";
      }
      const $el = dom7_default(el);
      if ($el.length === 0) return;
      const picker = $el[0].f7Picker;
      if (!picker || picker && !picker.opened) return;
      picker.close();
    };
  },
  params: {
    picker: {
      // Picker settings
      rotateEffect: false,
      freeMode: false,
      cols: [],
      // Common opener settings
      containerEl: null,
      openIn: "auto",
      // or 'popover' or 'sheet'
      sheetPush: false,
      sheetSwipeToClose: void 0,
      backdrop: void 0,
      // uses Popover or Sheet defaults
      formatValue: null,
      inputEl: null,
      inputReadOnly: true,
      closeByOutsideClick: true,
      scrollToInput: true,
      scrollToEl: void 0,
      toolbar: true,
      toolbarCloseText: "Done",
      cssClass: null,
      routableModals: false,
      view: null,
      url: "select/",
      // Render functions
      renderToolbar: null,
      render: null
    }
  }
};

// node_modules/framework7/components/infinite-scroll/infinite-scroll.js
var InfiniteScroll = {
  handle(el, e) {
    const app = this;
    const $el = dom7_default(el);
    const scrollTop = $el[0].scrollTop;
    const scrollHeight = $el[0].scrollHeight;
    const height = $el[0].offsetHeight;
    let distance = $el[0].getAttribute("data-infinite-distance");
    const virtualListContainer = $el.find(".virtual-list");
    let virtualList;
    const onTop = $el.hasClass("infinite-scroll-top");
    if (!distance) distance = 50;
    if (typeof distance === "string" && distance.indexOf("%") >= 0) {
      distance = parseInt(distance, 10) / 100 * height;
    }
    if (distance > height) distance = height;
    if (onTop) {
      if (scrollTop < distance) {
        $el.trigger("infinite", e);
        app.emit("infinite", $el[0], e);
      }
    } else if (scrollTop + height >= scrollHeight - distance) {
      if (virtualListContainer.length > 0) {
        virtualList = virtualListContainer.eq(-1)[0].f7VirtualList;
        if (virtualList && !virtualList.reachEnd && !virtualList.params.updatableScroll) {
          return;
        }
      }
      $el.trigger("infinite", e);
      app.emit("infinite", $el[0], e);
    }
  },
  create(el) {
    const $el = dom7_default(el);
    const app = this;
    function scrollHandler(e) {
      app.infiniteScroll.handle(this, e);
    }
    $el.each((element) => {
      element.f7InfiniteScrollHandler = scrollHandler;
      element.addEventListener("scroll", element.f7InfiniteScrollHandler);
    });
  },
  destroy(el) {
    const $el = dom7_default(el);
    $el.each((element) => {
      element.removeEventListener("scroll", element.f7InfiniteScrollHandler);
      delete element.f7InfiniteScrollHandler;
    });
  }
};
var infinite_scroll_default = {
  name: "infiniteScroll",
  create() {
    const app = this;
    bindMethods(app, {
      infiniteScroll: InfiniteScroll
    });
  },
  on: {
    tabMounted(tabEl) {
      const app = this;
      const $tabEl = dom7_default(tabEl);
      const $isEls = $tabEl.find(".infinite-scroll-content");
      if ($tabEl.is(".infinite-scroll-content")) $isEls.add($tabEl);
      $isEls.each((el) => {
        app.infiniteScroll.create(el);
      });
    },
    tabBeforeRemove(tabEl) {
      const $tabEl = dom7_default(tabEl);
      const app = this;
      const $isEls = $tabEl.find(".infinite-scroll-content");
      if ($tabEl.is(".infinite-scroll-content")) $isEls.add($tabEl);
      $isEls.each((el) => {
        app.infiniteScroll.destroy(el);
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".infinite-scroll-content").each((el) => {
        app.infiniteScroll.create(el);
      });
    },
    pageBeforeRemove(page) {
      const app = this;
      page.$el.find(".infinite-scroll-content").each((el) => {
        app.infiniteScroll.destroy(el);
      });
    }
  }
};

// node_modules/framework7/components/pull-to-refresh/pull-to-refresh-class.js
var PullToRefresh = class extends class_default {
  constructor(app, el) {
    super({}, [app]);
    const ptr = this;
    const device = getDevice();
    const support2 = getSupport();
    const $el = dom7_default(el);
    const $preloaderEl = $el.find(".ptr-preloader");
    ptr.$el = $el;
    ptr.el = $el[0];
    ptr.app = app;
    ptr.bottom = ptr.$el.hasClass("ptr-bottom");
    ptr.useModulesParams({});
    const isMaterial = app.theme === "md";
    const isIos = app.theme === "ios";
    ptr.done = function done() {
      const $transitionTarget = isMaterial ? $preloaderEl : $el;
      const onTranstionEnd = (e) => {
        if (dom7_default(e.target).closest($preloaderEl).length) return;
        $el.removeClass("ptr-transitioning ptr-pull-up ptr-pull-down ptr-closing");
        $el.trigger("ptr:done");
        ptr.emit("local::done ptrDone", $el[0]);
        $transitionTarget.off("transitionend", onTranstionEnd);
      };
      $transitionTarget.on("transitionend", onTranstionEnd);
      $el.removeClass("ptr-refreshing").addClass("ptr-transitioning ptr-closing");
      return ptr;
    };
    ptr.refresh = function refresh2() {
      if ($el.hasClass("ptr-refreshing")) return ptr;
      $el.addClass("ptr-transitioning ptr-refreshing");
      $el.trigger("ptr:refresh", ptr.done);
      ptr.emit("local::refresh ptrRefresh", $el[0], ptr.done);
      return ptr;
    };
    ptr.mousewheel = $el.attr("data-ptr-mousewheel") === "true";
    let touchId;
    let isTouched;
    let isMoved;
    const touchesStart = {};
    let isScrolling;
    let touchesDiff;
    let refresh = false;
    let useTranslate = false;
    let forceUseTranslate = false;
    let startTranslate = 0;
    let translate2;
    let scrollTop;
    let wasScrolled;
    let triggerDistance;
    let dynamicTriggerDistance;
    let pullStarted;
    let hasNavbar = false;
    let scrollHeight;
    let offsetHeight;
    let maxScrollTop;
    const $pageEl = $el.parents(".page");
    if ($pageEl.find(".navbar").length > 0 || $pageEl.parents(".view").children(".navbars").length > 0) hasNavbar = true;
    if ($pageEl.hasClass("no-navbar")) hasNavbar = false;
    if (!ptr.bottom) {
      const pageNavbarEl = app.navbar.getElByPage($pageEl[0]);
      if (pageNavbarEl) {
        const $pageNavbarEl = dom7_default(pageNavbarEl);
        const isLargeTransparent = $pageNavbarEl.hasClass("navbar-large-transparent") || $pageNavbarEl.hasClass("navbar-large") && $pageNavbarEl.hasClass("navbar-transparent");
        const isTransparent = $pageNavbarEl.hasClass("navbar-transparent") && !$pageNavbarEl.hasClass("navbar-large");
        if (isLargeTransparent) {
          $el.addClass("ptr-with-navbar-large-transparent");
        } else if (isTransparent) {
          $el.addClass("ptr-with-navbar-transparent");
        }
      }
    }
    if (!hasNavbar && !ptr.bottom) $el.addClass("ptr-no-navbar");
    if ($el.attr("data-ptr-distance")) {
      dynamicTriggerDistance = true;
    } else if (isMaterial) {
      triggerDistance = 66;
    } else if (isIos) {
      triggerDistance = 44;
    }
    function setPreloaderProgress(progress) {
      if (progress === void 0) {
        progress = 0;
      }
      const $bars = $preloaderEl.find(".preloader-inner-line");
      const perBarProgress = 1 / $bars.length;
      $bars.forEach((barEl, barIndex) => {
        const barProgress = (progress - barIndex * perBarProgress) / perBarProgress;
        barEl.style.opacity = Math.max(Math.min(barProgress, 1), 0) * 0.27;
      });
    }
    function unsetPreloaderProgress() {
      $preloaderEl.find(".preloader-inner-line").css("opacity", "");
    }
    function handleTouchStart(e) {
      if (!e.isTrusted) return;
      if (isTouched) {
        if (device.os === "android") {
          if ("targetTouches" in e && e.targetTouches.length > 1) return;
        } else return;
      }
      if ($el.hasClass("ptr-refreshing")) {
        return;
      }
      if (dom7_default(e.target).closest(".sortable-handler, .ptr-ignore, .card-expandable.card-opened").length) return;
      isMoved = false;
      pullStarted = false;
      isTouched = true;
      isScrolling = void 0;
      wasScrolled = void 0;
      if (e.type === "touchstart") touchId = e.targetTouches[0].identifier;
      touchesStart.x = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
      touchesStart.y = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
    }
    function handleTouchMove(e) {
      if (!isTouched || !e.isTrusted) return;
      let pageX;
      let pageY;
      let touch;
      if (e.type === "touchmove") {
        if (touchId && e.touches) {
          for (let i = 0; i < e.touches.length; i += 1) {
            if (e.touches[i].identifier === touchId) {
              touch = e.touches[i];
            }
          }
        }
        if (!touch) touch = e.targetTouches[0];
        pageX = touch.pageX;
        pageY = touch.pageY;
      } else {
        pageX = e.pageX;
        pageY = e.pageY;
      }
      if (!pageX || !pageY) return;
      if (typeof isScrolling === "undefined") {
        isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) > Math.abs(pageX - touchesStart.x));
      }
      if (!isScrolling) {
        isTouched = false;
        return;
      }
      scrollTop = $el[0].scrollTop;
      if (!isMoved) {
        $el.removeClass("ptr-transitioning");
        if (isIos) {
          setPreloaderProgress(0);
        }
        let targetIsScrollable;
        scrollHeight = $el[0].scrollHeight;
        offsetHeight = $el[0].offsetHeight;
        if (ptr.bottom) {
          maxScrollTop = scrollHeight - offsetHeight;
        }
        if (scrollTop > scrollHeight) {
          isTouched = false;
          return;
        }
        const $ptrWatchScrollable = dom7_default(e.target).closest(".ptr-watch-scroll");
        if ($ptrWatchScrollable.length) {
          $ptrWatchScrollable.each((ptrScrollableEl) => {
            if (ptrScrollableEl === el) return;
            if (ptrScrollableEl.scrollHeight > ptrScrollableEl.offsetHeight && dom7_default(ptrScrollableEl).css("overflow") === "auto" && (!ptr.bottom && ptrScrollableEl.scrollTop > 0 || ptr.bottom && ptrScrollableEl.scrollTop < ptrScrollableEl.scrollHeight - ptrScrollableEl.offsetHeight)) {
              targetIsScrollable = true;
            }
          });
        }
        if (targetIsScrollable) {
          isTouched = false;
          return;
        }
        if (dynamicTriggerDistance) {
          triggerDistance = $el.attr("data-ptr-distance");
          if (triggerDistance.indexOf("%") >= 0) triggerDistance = scrollHeight * parseInt(triggerDistance, 10) / 100;
        }
        startTranslate = $el.hasClass("ptr-refreshing") ? triggerDistance : 0;
        if (scrollHeight === offsetHeight || device.os !== "ios" || isMaterial) {
          useTranslate = true;
        } else {
          useTranslate = false;
        }
        forceUseTranslate = false;
      }
      isMoved = true;
      touchesDiff = pageY - touchesStart.y;
      if (typeof wasScrolled === "undefined" && (ptr.bottom ? scrollTop !== maxScrollTop : scrollTop !== 0)) wasScrolled = true;
      const ptrStarted = ptr.bottom ? touchesDiff < 0 && scrollTop >= maxScrollTop || scrollTop > maxScrollTop : touchesDiff > 0 && scrollTop <= 0 || scrollTop < 0;
      if (ptrStarted) {
        if (device.os === "ios" && parseInt(device.osVersion.split(".")[0], 10) > 7) {
          if (!ptr.bottom && scrollTop === 0 && !wasScrolled) useTranslate = true;
          if (ptr.bottom && scrollTop === maxScrollTop && !wasScrolled) useTranslate = true;
        }
        if (!useTranslate && ptr.bottom && !isMaterial) {
          $el.css("-webkit-overflow-scrolling", "auto");
          $el.scrollTop(maxScrollTop);
          forceUseTranslate = true;
        }
        if (useTranslate || forceUseTranslate) {
          if (e.cancelable) {
            e.preventDefault();
          }
          translate2 = (ptr.bottom ? -1 * Math.abs(touchesDiff) ** 0.85 : touchesDiff ** 0.85) + startTranslate;
          if (isMaterial) {
            $preloaderEl.transform(`translate3d(0,${translate2}px,0)`).find(".ptr-arrow").transform(`rotate(${180 * (Math.abs(touchesDiff) / 66) + 100}deg)`);
          } else {
            if (ptr.bottom || isIos) {
              $el.children().transform(`translate3d(0,${translate2}px,0)`);
            } else {
              $el.transform(`translate3d(0,${translate2}px,0)`);
            }
            if (isIos) {
              $preloaderEl.transform(`translate3d(0,0px,0)`);
            }
          }
        } else if (isIos && !ptr.bottom) {
          $preloaderEl.transform(`translate3d(0,${scrollTop}px,0)`);
        }
        let progress;
        if (isIos && !refresh) {
          progress = useTranslate || forceUseTranslate ? Math.abs(touchesDiff) ** 0.85 / triggerDistance : Math.abs(touchesDiff) / (triggerDistance * 2);
          setPreloaderProgress(progress);
        }
        if ((useTranslate || forceUseTranslate) && Math.abs(touchesDiff) ** 0.85 > triggerDistance || !useTranslate && Math.abs(touchesDiff) >= triggerDistance * 2) {
          refresh = true;
          $el.addClass("ptr-pull-up").removeClass("ptr-pull-down");
          unsetPreloaderProgress();
        } else {
          refresh = false;
          $el.removeClass("ptr-pull-up").addClass("ptr-pull-down");
        }
        if (!pullStarted) {
          $el.trigger("ptr:pullstart");
          ptr.emit("local::pullStart ptrPullStart", $el[0]);
          pullStarted = true;
        }
        $el.trigger("ptr:pullmove", {
          event: e,
          scrollTop,
          translate: translate2,
          touchesDiff
        });
        ptr.emit("local::pullMove ptrPullMove", $el[0], {
          event: e,
          scrollTop,
          translate: translate2,
          touchesDiff
        });
      } else {
        pullStarted = false;
        $el.removeClass("ptr-pull-up ptr-pull-down");
        refresh = false;
      }
    }
    function handleTouchEnd(e) {
      if (!e.isTrusted) return;
      if (e.type === "touchend" && e.changedTouches && e.changedTouches.length > 0 && touchId) {
        if (e.changedTouches[0].identifier !== touchId) {
          isTouched = false;
          isScrolling = false;
          isMoved = false;
          touchId = null;
          return;
        }
      }
      if (!isTouched || !isMoved) {
        isTouched = false;
        isMoved = false;
        return;
      }
      if (translate2) {
        $el.addClass("ptr-transitioning");
        translate2 = 0;
      }
      if (isMaterial) {
        $preloaderEl.transform("").find(".ptr-arrow").transform("");
      } else {
        $preloaderEl.transform("");
        if (ptr.bottom || isIos) {
          $el.children().transform("");
        } else {
          $el.transform("");
        }
      }
      if (!useTranslate && ptr.bottom && !isMaterial) {
        $el.css("-webkit-overflow-scrolling", "");
      }
      if (refresh) {
        $el.addClass("ptr-refreshing");
        $el.trigger("ptr:refresh", ptr.done);
        ptr.emit("local::refresh ptrRefresh", $el[0], ptr.done);
      } else {
        $el.removeClass("ptr-pull-down");
      }
      isTouched = false;
      isMoved = false;
      if (pullStarted) {
        $el.trigger("ptr:pullend");
        ptr.emit("local::pullEnd ptrPullEnd", $el[0]);
      }
    }
    let mousewheelTimeout;
    let mousewheelMoved;
    let mousewheelAllow = true;
    let mousewheelTranslate = 0;
    function handleMouseWheelRelease() {
      mousewheelAllow = true;
      mousewheelMoved = false;
      mousewheelTranslate = 0;
      if (translate2) {
        $el.addClass("ptr-transitioning");
        translate2 = 0;
      }
      if (isMaterial) {
        $preloaderEl.transform("").find(".ptr-arrow").transform("");
      } else {
        $preloaderEl.transform("");
        if (ptr.bottom) {
          $el.children().transform("");
        } else {
          $el.transform("");
        }
      }
      if (refresh) {
        $el.addClass("ptr-refreshing");
        $el.trigger("ptr:refresh", ptr.done);
        ptr.emit("local::refresh ptrRefresh", $el[0], ptr.done);
      } else {
        $el.removeClass("ptr-pull-down");
      }
      if (pullStarted) {
        $el.trigger("ptr:pullend");
        ptr.emit("local::pullEnd ptrPullEnd", $el[0]);
      }
    }
    function handleMouseWheel(e) {
      if (!mousewheelAllow) return;
      const {
        deltaX,
        deltaY
      } = e;
      if (Math.abs(deltaX) > Math.abs(deltaY)) return;
      if ($el.hasClass("ptr-refreshing")) {
        return;
      }
      if (dom7_default(e.target).closest(".sortable-handler, .ptr-ignore, .card-expandable.card-opened").length) return;
      clearTimeout(mousewheelTimeout);
      scrollTop = $el[0].scrollTop;
      if (!mousewheelMoved) {
        $el.removeClass("ptr-transitioning");
        if (isIos) {
          setPreloaderProgress(0);
        }
        let targetIsScrollable;
        scrollHeight = $el[0].scrollHeight;
        offsetHeight = $el[0].offsetHeight;
        if (ptr.bottom) {
          maxScrollTop = scrollHeight - offsetHeight;
        }
        if (scrollTop > scrollHeight) {
          mousewheelAllow = false;
          return;
        }
        const $ptrWatchScrollable = dom7_default(e.target).closest(".ptr-watch-scroll");
        if ($ptrWatchScrollable.length) {
          $ptrWatchScrollable.each((ptrScrollableEl) => {
            if (ptrScrollableEl === el) return;
            if (ptrScrollableEl.scrollHeight > ptrScrollableEl.offsetHeight && dom7_default(ptrScrollableEl).css("overflow") === "auto" && (!ptr.bottom && ptrScrollableEl.scrollTop > 0 || ptr.bottom && ptrScrollableEl.scrollTop < ptrScrollableEl.scrollHeight - ptrScrollableEl.offsetHeight)) {
              targetIsScrollable = true;
            }
          });
        }
        if (targetIsScrollable) {
          mousewheelAllow = false;
          return;
        }
        if (dynamicTriggerDistance) {
          triggerDistance = $el.attr("data-ptr-distance");
          if (triggerDistance.indexOf("%") >= 0) triggerDistance = scrollHeight * parseInt(triggerDistance, 10) / 100;
        }
      }
      isMoved = true;
      mousewheelTranslate -= deltaY;
      touchesDiff = mousewheelTranslate;
      if (typeof wasScrolled === "undefined" && (ptr.bottom ? scrollTop !== maxScrollTop : scrollTop !== 0)) wasScrolled = true;
      const ptrStarted = ptr.bottom ? touchesDiff < 0 && scrollTop >= maxScrollTop || scrollTop > maxScrollTop : touchesDiff > 0 && scrollTop <= 0 || scrollTop < 0;
      if (ptrStarted) {
        if (e.cancelable) {
          e.preventDefault();
        }
        translate2 = touchesDiff;
        if (Math.abs(translate2) > triggerDistance) {
          translate2 = triggerDistance + (Math.abs(translate2) - triggerDistance) ** 0.7;
          if (ptr.bottom) translate2 = -translate2;
        }
        if (isMaterial) {
          $preloaderEl.transform(`translate3d(0,${translate2}px,0)`).find(".ptr-arrow").transform(`rotate(${180 * (Math.abs(touchesDiff) / 66) + 100}deg)`);
        } else {
          if (ptr.bottom) {
            $el.children().transform(`translate3d(0,${translate2}px,0)`);
          } else {
            $el.transform(`translate3d(0,${translate2}px,0)`);
            if (isIos) {
              $preloaderEl.transform(`translate3d(0,${-translate2}px,0)`);
            }
          }
        }
        let progress;
        if (isIos && !refresh) {
          progress = Math.abs(translate2) / triggerDistance;
          setPreloaderProgress(progress);
        }
        if (Math.abs(translate2) > triggerDistance) {
          refresh = true;
          $el.addClass("ptr-pull-up").removeClass("ptr-pull-down");
          unsetPreloaderProgress();
        } else {
          refresh = false;
          $el.removeClass("ptr-pull-up").addClass("ptr-pull-down");
        }
        if (!pullStarted) {
          $el.trigger("ptr:pullstart");
          ptr.emit("local::pullStart ptrPullStart", $el[0]);
          pullStarted = true;
        }
        $el.trigger("ptr:pullmove", {
          event: e,
          scrollTop,
          translate: translate2,
          touchesDiff
        });
        ptr.emit("local::pullMove ptrPullMove", $el[0], {
          event: e,
          scrollTop,
          translate: translate2,
          touchesDiff
        });
      } else {
        pullStarted = false;
        $el.removeClass("ptr-pull-up ptr-pull-down");
        refresh = false;
      }
      mousewheelTimeout = setTimeout(handleMouseWheelRelease, 300);
    }
    if (!$pageEl.length || !$el.length) return ptr;
    $el[0].f7PullToRefresh = ptr;
    ptr.attachEvents = function attachEvents2() {
      const passive = support2.passiveListener ? {
        passive: true
      } : false;
      $el.on(app.touchEvents.start, handleTouchStart, passive);
      app.on("touchmove:active", handleTouchMove);
      app.on("touchend:passive", handleTouchEnd);
      if (ptr.mousewheel && !ptr.bottom) {
        $el.on("wheel", handleMouseWheel);
      }
    };
    ptr.detachEvents = function detachEvents2() {
      const passive = support2.passiveListener ? {
        passive: true
      } : false;
      $el.off(app.touchEvents.start, handleTouchStart, passive);
      app.off("touchmove:active", handleTouchMove);
      app.off("touchend:passive", handleTouchEnd);
      if (ptr.mousewheel && !ptr.bottom) {
        $el.off("wheel", handleMouseWheel);
      }
    };
    ptr.useModules();
    ptr.init();
    return ptr;
  }
  init() {
    const ptr = this;
    ptr.attachEvents();
  }
  destroy() {
    let ptr = this;
    ptr.emit("local::beforeDestroy ptrBeforeDestroy", ptr);
    ptr.$el.trigger("ptr:beforedestroy");
    delete ptr.el.f7PullToRefresh;
    ptr.detachEvents();
    deleteProps(ptr);
    ptr = null;
  }
};
var pull_to_refresh_class_default = PullToRefresh;

// node_modules/framework7/components/pull-to-refresh/pull-to-refresh.js
var pull_to_refresh_default = {
  name: "pullToRefresh",
  create() {
    const app = this;
    app.ptr = extend(ConstructorMethods({
      defaultSelector: ".ptr-content",
      constructor: pull_to_refresh_class_default,
      app,
      domProp: "f7PullToRefresh"
    }), {
      done(el) {
        const ptr = app.ptr.get(el);
        if (ptr) return ptr.done();
        return void 0;
      },
      refresh(el) {
        const ptr = app.ptr.get(el);
        if (ptr) return ptr.refresh();
        return void 0;
      }
    });
  },
  static: {
    PullToRefresh: pull_to_refresh_class_default
  },
  on: {
    tabMounted(tabEl) {
      const app = this;
      const $tabEl = dom7_default(tabEl);
      const $ptrEls = $tabEl.find(".ptr-content");
      if ($tabEl.is(".ptr-content")) $ptrEls.add($tabEl);
      $ptrEls.each((el) => {
        app.ptr.create(el);
      });
    },
    tabBeforeRemove(tabEl) {
      const $tabEl = dom7_default(tabEl);
      const app = this;
      const $ptrEls = $tabEl.find(".ptr-content");
      if ($tabEl.is(".ptr-content")) $ptrEls.add($tabEl);
      $ptrEls.each((el) => {
        app.ptr.destroy(el);
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".ptr-content").each((el) => {
        app.ptr.create(el);
      });
    },
    pageBeforeRemove(page) {
      const app = this;
      page.$el.find(".ptr-content").each((el) => {
        app.ptr.destroy(el);
      });
    }
  }
};

// node_modules/framework7/components/data-table/data-table-class.js
var DataTable = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const table = this;
    const defaults2 = {};
    table.useModulesParams(defaults2);
    table.params = extend(defaults2, params);
    const $el = dom7_default(table.params.el);
    if ($el.length === 0) return void 0;
    table.$el = $el;
    table.el = $el[0];
    if (table.$el[0].f7DataTable) {
      const instance = table.$el[0].f7DataTable;
      table.destroy();
      return instance;
    }
    table.$el[0].f7DataTable = table;
    extend(table, {
      collapsible: $el.hasClass("data-table-collapsible"),
      // Headers
      $headerEl: $el.find(".data-table-header"),
      $headerSelectedEl: $el.find(".data-table-header-selected")
    });
    function handleChange(e) {
      if (e.detail && e.detail.sentByF7DataTable) {
        return;
      }
      const $inputEl = dom7_default(this);
      const checked = $inputEl[0].checked;
      const columnIndex = $inputEl.parents("td,th").index();
      if ($inputEl.parents("thead").length > 0) {
        if (columnIndex === 0) {
          $el.find("tbody tr")[checked ? "addClass" : "removeClass"]("data-table-row-selected");
        }
        $el.find(`tbody tr td:nth-child(${columnIndex + 1}) input`).prop("checked", checked).trigger("change", {
          sentByF7DataTable: true
        });
        $inputEl.prop("indeterminate", false);
      } else {
        if (columnIndex === 0) {
          $inputEl.parents("tr")[checked ? "addClass" : "removeClass"]("data-table-row-selected");
        }
        const checkedRows = $el.find(`tbody .checkbox-cell:nth-child(${columnIndex + 1}) input[type="checkbox"]:checked`).length;
        const totalRows = $el.find("tbody tr").length;
        const $headCheckboxEl = $el.find(`thead .checkbox-cell:nth-child(${columnIndex + 1}) input[type="checkbox"]`);
        if (!checked) {
          $headCheckboxEl.prop("checked", false);
        } else if (checkedRows === totalRows) {
          $headCheckboxEl.prop("checked", true).trigger("change", {
            sentByF7DataTable: true
          });
        }
        $headCheckboxEl.prop("indeterminate", checkedRows > 0 && checkedRows < totalRows);
      }
      table.checkSelectedHeader();
    }
    function handleSortableClick() {
      const $cellEl = dom7_default(this);
      const isActive = $cellEl.hasClass("sortable-cell-active");
      const currentSort = $cellEl.hasClass("sortable-desc") ? "desc" : "asc";
      let newSort;
      if (isActive) {
        newSort = currentSort === "desc" ? "asc" : "desc";
        $cellEl.removeClass("sortable-desc sortable-asc").addClass(`sortable-${newSort}`);
      } else {
        $el.find("thead .sortable-cell-active").removeClass("sortable-cell-active");
        $cellEl.addClass("sortable-cell-active");
        newSort = currentSort;
      }
      $cellEl.trigger("datatable:sort", newSort);
      table.emit("local::sort dataTableSort", table, newSort);
    }
    table.attachEvents = function attachEvents2() {
      table.$el.on("change", '.checkbox-cell input[type="checkbox"]', handleChange);
      table.$el.find("thead .sortable-cell").on("click", handleSortableClick);
    };
    table.detachEvents = function detachEvents2() {
      table.$el.off("change", '.checkbox-cell input[type="checkbox"]', handleChange);
      table.$el.find("thead .sortable-cell").off("click", handleSortableClick);
    };
    table.useModules();
    table.init();
    return table;
  }
  setCollapsibleLabels() {
    const table = this;
    if (!table.collapsible) return;
    table.$el.find("tbody td:not(.checkbox-cell)").each((el) => {
      const $el = dom7_default(el);
      const elIndex = $el.index();
      const collapsibleTitle = $el.attr("data-collapsible-title");
      if (!collapsibleTitle && collapsibleTitle !== "") {
        $el.attr("data-collapsible-title", table.$el.find("thead th").eq(elIndex).text());
      }
    });
  }
  checkSelectedHeader() {
    const table = this;
    if (table.$headerEl.length > 0 && table.$headerSelectedEl.length > 0) {
      const checkedItems = table.$el.find("tbody .checkbox-cell input:checked").length;
      table.$el[checkedItems > 0 ? "addClass" : "removeClass"]("data-table-has-checked");
      table.$headerSelectedEl.find(".data-table-selected-count").text(checkedItems);
    }
  }
  init() {
    const table = this;
    table.attachEvents();
    table.setCollapsibleLabels();
    table.checkSelectedHeader();
  }
  destroy() {
    let table = this;
    table.$el.trigger("datatable:beforedestroy");
    table.emit("local::beforeDestroy dataTableBeforeDestroy", table);
    table.detachEvents();
    if (table.$el[0]) {
      table.$el[0].f7DataTable = null;
      delete table.$el[0].f7DataTable;
    }
    deleteProps(table);
    table = null;
  }
};
var data_table_class_default = DataTable;

// node_modules/framework7/components/data-table/data-table.js
var data_table_default = {
  name: "dataTable",
  static: {
    DataTable: data_table_class_default
  },
  create() {
    const app = this;
    app.dataTable = ConstructorMethods({
      defaultSelector: ".data-table",
      constructor: data_table_class_default,
      app,
      domProp: "f7DataTable"
    });
  },
  on: {
    tabBeforeRemove(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".data-table-init").each((tableEl) => {
        app.dataTable.destroy(tableEl);
      });
    },
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".data-table-init").each((tableEl) => {
        app.dataTable.create({
          el: tableEl
        });
      });
    },
    pageBeforeRemove(page) {
      const app = this;
      page.$el.find(".data-table-init").each((tableEl) => {
        app.dataTable.destroy(tableEl);
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".data-table-init").each((tableEl) => {
        app.dataTable.create({
          el: tableEl
        });
      });
    }
  },
  vnode: {
    "data-table-init": {
      insert(vnode) {
        const app = this;
        const tableEl = vnode.elm;
        app.dataTable.create({
          el: tableEl
        });
      },
      destroy(vnode) {
        const app = this;
        const tableEl = vnode.elm;
        app.dataTable.destroy(tableEl);
      }
    }
  }
};

// node_modules/framework7/components/fab/fab.js
var Fab = {
  morphOpen(fabEl, targetEl) {
    const app = this;
    const $fabEl = dom7_default(fabEl);
    const $targetEl = dom7_default(targetEl);
    if ($targetEl.length === 0) return;
    $targetEl.transition(0).addClass("fab-morph-target-visible");
    const target = {
      width: $targetEl[0].offsetWidth,
      height: $targetEl[0].offsetHeight,
      offset: $targetEl.offset(),
      borderRadius: $targetEl.css("border-radius"),
      zIndex: $targetEl.css("z-index")
    };
    const fab = {
      width: $fabEl[0].offsetWidth,
      height: $fabEl[0].offsetHeight,
      offset: $fabEl.offset(),
      translateX: getTranslate($fabEl[0], "x"),
      translateY: getTranslate($fabEl[0], "y")
    };
    $fabEl[0].f7FabMorphData = {
      $targetEl,
      target,
      fab
    };
    const diffX = fab.offset.left + fab.width / 2 - (target.offset.left + target.width / 2) - fab.translateX;
    const diffY = fab.offset.top + fab.height / 2 - (target.offset.top + target.height / 2) - fab.translateY;
    const scaleX = target.width / fab.width;
    const scaleY = target.height / fab.height;
    let borderRadius = Math.ceil(parseInt(target.borderRadius, 10) / Math.max(scaleX, scaleY));
    if (borderRadius > 0) borderRadius += 2;
    $fabEl[0].f7FabMorphResizeHandler = function resizeHandler() {
      $fabEl.transition(0).transform("");
      $targetEl.transition(0);
      target.width = $targetEl[0].offsetWidth;
      target.height = $targetEl[0].offsetHeight;
      target.offset = $targetEl.offset();
      fab.offset = $fabEl.offset();
      const diffXNew = fab.offset.left + fab.width / 2 - (target.offset.left + target.width / 2) - fab.translateX;
      const diffYNew = fab.offset.top + fab.height / 2 - (target.offset.top + target.height / 2) - fab.translateY;
      const scaleXNew = target.width / fab.width;
      const scaleYNew = target.height / fab.height;
      $fabEl.transform(`translate3d(${-diffXNew}px, ${-diffYNew}px, 0) scale(${scaleXNew}, ${scaleYNew})`);
    };
    $targetEl.css("opacity", 0).transform(`scale(${1 / scaleX}, ${1 / scaleY})`);
    $fabEl.addClass("fab-opened").css("z-index", target.zIndex - 1).transform(`translate3d(${-diffX}px, ${-diffY}px, 0)`);
    $fabEl.transitionEnd(() => {
      $targetEl.transition("");
      nextFrame(() => {
        $targetEl.css("opacity", 1).transform("scale(1,1)");
        $fabEl.transform(`translate3d(${-diffX}px, ${-diffY}px, 0) scale(${scaleX}, ${scaleY})`).css("border-radius", `${borderRadius}px`).css("box-shadow", "none").css("opacity", "0");
      });
      app.on("resize", $fabEl[0].f7FabMorphResizeHandler);
      if ($targetEl.parents(".page-content").length > 0) {
        $targetEl.parents(".page-content").on("scroll", $fabEl[0].f7FabMorphResizeHandler);
      }
    });
  },
  morphClose(fabEl) {
    const app = this;
    const $fabEl = dom7_default(fabEl);
    const morphData = $fabEl[0].f7FabMorphData;
    if (!morphData) return;
    const {
      $targetEl,
      target,
      fab
    } = morphData;
    if ($targetEl.length === 0) return;
    const diffX = fab.offset.left + fab.width / 2 - (target.offset.left + target.width / 2) - fab.translateX;
    const diffY = fab.offset.top + fab.height / 2 - (target.offset.top + target.height / 2) - fab.translateY;
    const scaleX = target.width / fab.width;
    const scaleY = target.height / fab.height;
    app.off("resize", $fabEl[0].f7FabMorphResizeHandler);
    if ($targetEl.parents(".page-content").length > 0) {
      $targetEl.parents(".page-content").off("scroll", $fabEl[0].f7FabMorphResizeHandler);
    }
    $targetEl.css("opacity", 0).transform(`scale(${1 / scaleX}, ${1 / scaleY})`);
    $fabEl.transition("").css("box-shadow", "").css("border-radius", "").css("opacity", "1").transform(`translate3d(${-diffX}px, ${-diffY}px, 0)`);
    $fabEl.transitionEnd(() => {
      $fabEl.css("z-index", "").removeClass("fab-opened").transform("");
      nextFrame(() => {
        $fabEl.transitionEnd(() => {
          $targetEl.removeClass("fab-morph-target-visible").css("opacity", "").transform("").transition("");
        });
      });
    });
  },
  open(fabEl, targetEl) {
    const app = this;
    const $fabEl = dom7_default(fabEl).eq(0);
    const $buttonsEl = $fabEl.find(".fab-buttons");
    if (!$fabEl.length) return;
    if ($fabEl.hasClass("fab-opened")) return;
    if (!$buttonsEl.length && !$fabEl.hasClass("fab-morph")) return;
    if (app.fab.openedEl) {
      if (app.fab.openedEl === $fabEl[0]) return;
      app.fab.close(app.fab.openedEl);
    }
    app.fab.openedEl = $fabEl[0];
    if ($fabEl.hasClass("fab-morph")) {
      app.fab.morphOpen($fabEl, targetEl || $fabEl.attr("data-morph-to"));
    } else {
      $fabEl.addClass("fab-opened");
    }
    $fabEl.siblings(".fab-backdrop").addClass("backdrop-in");
    $fabEl.trigger("fab:open");
  },
  close(fabEl) {
    if (fabEl === void 0) {
      fabEl = ".fab-opened";
    }
    const app = this;
    const $fabEl = dom7_default(fabEl).eq(0);
    const $buttonsEl = $fabEl.find(".fab-buttons");
    if (!$fabEl.length) return;
    if (!$fabEl.hasClass("fab-opened")) return;
    if (!$buttonsEl.length && !$fabEl.hasClass("fab-morph")) return;
    app.fab.openedEl = null;
    if ($fabEl.hasClass("fab-morph")) {
      app.fab.morphClose($fabEl);
    } else {
      $fabEl.removeClass("fab-opened");
    }
    $fabEl.siblings(".fab-backdrop").removeClass("backdrop-in");
    $fabEl.trigger("fab:close");
  },
  toggle(fabEl) {
    const app = this;
    const $fabEl = dom7_default(fabEl);
    if (!$fabEl.hasClass("fab-opened")) app.fab.open(fabEl);
    else app.fab.close(fabEl);
  }
};
var fab_default = {
  name: "fab",
  create() {
    const app = this;
    bindMethods(app, {
      fab: {
        openedEl: null,
        ...Fab
      }
    });
  },
  clicks: {
    ".fab > a": function open4($clickedEl) {
      const app = this;
      app.fab.toggle($clickedEl.parents(".fab"));
    },
    ".fab-open": function open5($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.fab.open(data.fab);
    },
    ".fab-close": function close4($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      app.fab.close(data.fab);
    },
    ".fab-backdrop": function close5() {
      const app = this;
      app.fab.close();
    }
  }
};

// node_modules/framework7/components/searchbar/searchbar-class.js
var Searchbar = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const sb = this;
    const defaults2 = {
      el: void 0,
      inputEl: void 0,
      inputEvents: "change input compositionend",
      disableButton: true,
      disableButtonEl: void 0,
      backdropEl: void 0,
      searchContainer: void 0,
      // container to search, HTMLElement or CSS selector
      searchItem: "li",
      // single item selector, CSS selector
      searchIn: void 0,
      // where to search in item, CSS selector
      searchGroup: ".list-group",
      searchGroupTitle: ".list-group-title",
      ignore: ".searchbar-ignore",
      foundEl: ".searchbar-found",
      notFoundEl: ".searchbar-not-found",
      hideOnEnableEl: ".searchbar-hide-on-enable",
      hideOnSearchEl: ".searchbar-hide-on-search",
      backdrop: true,
      removeDiacritics: true,
      customSearch: false,
      hideGroupTitles: true,
      hideGroups: true,
      disableOnBackdropClick: true,
      expandable: false,
      inline: false
    };
    sb.useModulesParams(defaults2);
    sb.params = extend(defaults2, params);
    const $el = dom7_default(sb.params.el);
    if ($el.length === 0) return sb;
    if ($el[0].f7Searchbar) return $el[0].f7Searchbar;
    $el[0].f7Searchbar = sb;
    let $pageEl;
    const $navbarEl = $el.parents(".navbar");
    if ($el.parents(".page").length > 0) {
      $pageEl = $el.parents(".page");
    } else if ($navbarEl.length > 0) {
      $pageEl = dom7_default(app.navbar.getPageByEl($navbarEl[0]));
      if (!$pageEl.length) {
        const $currentPageEl = $el.parents(".view").find(".page-current");
        if ($currentPageEl[0] && $currentPageEl[0].f7Page && $currentPageEl[0].f7Page.navbarEl === $navbarEl[0]) {
          $pageEl = $currentPageEl;
        }
      }
    }
    let $foundEl;
    if (params.foundEl) {
      $foundEl = dom7_default(params.foundEl);
    } else if (typeof sb.params.foundEl === "string" && $pageEl) {
      $foundEl = $pageEl.find(sb.params.foundEl);
    }
    let $notFoundEl;
    if (params.notFoundEl) {
      $notFoundEl = dom7_default(params.notFoundEl);
    } else if (typeof sb.params.notFoundEl === "string" && $pageEl) {
      $notFoundEl = $pageEl.find(sb.params.notFoundEl);
    }
    let $hideOnEnableEl;
    if (params.hideOnEnableEl) {
      $hideOnEnableEl = dom7_default(params.hideOnEnableEl);
    } else if (typeof sb.params.hideOnEnableEl === "string" && $pageEl) {
      $hideOnEnableEl = $pageEl.find(sb.params.hideOnEnableEl);
    }
    let $hideOnSearchEl;
    if (params.hideOnSearchEl) {
      $hideOnSearchEl = dom7_default(params.hideOnSearchEl);
    } else if (typeof sb.params.hideOnSearchEl === "string" && $pageEl) {
      $hideOnSearchEl = $pageEl.find(sb.params.hideOnSearchEl);
    }
    const expandable = sb.params.expandable || $el.hasClass("searchbar-expandable");
    const inline = sb.params.inline || $el.hasClass("searchbar-inline");
    if (typeof sb.params.backdrop === "undefined") {
      sb.params.backdrop = !inline;
    }
    let $backdropEl;
    if (sb.params.backdrop) {
      if (sb.params.backdropEl) {
        $backdropEl = dom7_default(sb.params.backdropEl);
      } else if ($pageEl && $pageEl.length > 0) {
        $backdropEl = $pageEl.find(".searchbar-backdrop");
      } else {
        $backdropEl = $el.siblings(".searchbar-backdrop");
      }
      if ($backdropEl.length === 0) {
        $backdropEl = dom7_default('<div class="searchbar-backdrop"></div>');
        if ($pageEl && $pageEl.length) {
          if ($el.parents($pageEl).length > 0 && $navbarEl && $el.parents($navbarEl).length === 0) {
            $backdropEl.insertBefore($el);
          } else {
            $backdropEl.insertBefore($pageEl.find(".page-content").eq(0));
          }
        } else {
          $backdropEl.insertBefore($el);
        }
      }
    }
    let $searchContainer;
    if (sb.params.searchContainer) {
      $searchContainer = dom7_default(sb.params.searchContainer);
    }
    let $inputEl;
    if (sb.params.inputEl) {
      $inputEl = dom7_default(sb.params.inputEl);
    } else {
      $inputEl = $el.find('input[type="search"]').eq(0);
    }
    let $disableButtonEl;
    if (sb.params.disableButton) {
      if (sb.params.disableButtonEl) {
        $disableButtonEl = dom7_default(sb.params.disableButtonEl);
      } else {
        $disableButtonEl = $el.find(".searchbar-disable-button");
      }
    }
    extend(sb, {
      app,
      view: app.views.get($el.parents(".view")),
      $el,
      el: $el[0],
      $backdropEl,
      backdropEl: $backdropEl && $backdropEl[0],
      $searchContainer,
      searchContainer: $searchContainer && $searchContainer[0],
      $inputEl,
      inputEl: $inputEl[0],
      $disableButtonEl,
      disableButtonEl: $disableButtonEl && $disableButtonEl[0],
      disableButtonHasMargin: false,
      $pageEl,
      pageEl: $pageEl && $pageEl[0],
      $navbarEl,
      navbarEl: $navbarEl && $navbarEl[0],
      $foundEl,
      foundEl: $foundEl && $foundEl[0],
      $notFoundEl,
      notFoundEl: $notFoundEl && $notFoundEl[0],
      $hideOnEnableEl,
      hideOnEnableEl: $hideOnEnableEl && $hideOnEnableEl[0],
      $hideOnSearchEl,
      hideOnSearchEl: $hideOnSearchEl && $hideOnSearchEl[0],
      previousQuery: "",
      query: "",
      isVirtualList: $searchContainer && $searchContainer.hasClass("virtual-list"),
      virtualList: void 0,
      enabled: false,
      expandable,
      inline
    });
    function preventSubmit(e) {
      e.preventDefault();
    }
    function onInputFocus(e) {
      sb.enable(e);
      sb.$el.addClass("searchbar-focused");
    }
    function onInputBlur() {
      sb.$el.removeClass("searchbar-focused");
    }
    function onInputChange() {
      const value = sb.$inputEl.val().trim();
      if (sb.$searchContainer && sb.$searchContainer.length > 0 && (sb.params.searchIn || sb.isVirtualList || sb.params.searchIn === sb.params.searchItem) || sb.params.customSearch) {
        sb.search(value, true);
      }
    }
    function onInputClear(e, previousValue) {
      sb.$el.trigger("searchbar:clear", previousValue);
      sb.emit("local::clear searchbarClear", sb, previousValue);
    }
    function disableOnClick(e) {
      sb.disable(e);
    }
    function onPageBeforeOut() {
      if (!sb || sb && !sb.$el) return;
      if (sb.enabled) {
        sb.$el.removeClass("searchbar-enabled");
        if (sb.expandable) {
          sb.$el.parents(".navbar").removeClass("with-searchbar-expandable-enabled with-searchbar-expandable-enabled-no-transition");
        }
      }
    }
    function onPageBeforeIn() {
      if (!sb || sb && !sb.$el) return;
      if (sb.enabled) {
        sb.$el.addClass("searchbar-enabled");
        if (sb.expandable) {
          sb.$el.parents(".navbar").addClass("with-searchbar-expandable-enabled-no-transition");
        }
      }
    }
    sb.attachEvents = function attachEvents2() {
      $el.on("submit", preventSubmit);
      if (sb.params.disableButton) {
        sb.$disableButtonEl.on("click", disableOnClick);
      }
      if (sb.params.disableOnBackdropClick && sb.$backdropEl) {
        sb.$backdropEl.on("click", disableOnClick);
      }
      if (sb.expandable && app.theme === "ios" && sb.view && $navbarEl.length && sb.$pageEl) {
        sb.$pageEl.on("page:beforeout", onPageBeforeOut);
        sb.$pageEl.on("page:beforein", onPageBeforeIn);
      }
      sb.$inputEl.on("focus", onInputFocus);
      sb.$inputEl.on("blur", onInputBlur);
      sb.$inputEl.on(sb.params.inputEvents, onInputChange);
      sb.$inputEl.on("input:clear", onInputClear);
    };
    sb.detachEvents = function detachEvents2() {
      $el.off("submit", preventSubmit);
      if (sb.params.disableButton) {
        sb.$disableButtonEl.off("click", disableOnClick);
      }
      if (sb.params.disableOnBackdropClick && sb.$backdropEl) {
        sb.$backdropEl.off("click", disableOnClick);
      }
      if (sb.expandable && app.theme === "ios" && sb.view && $navbarEl.length && sb.$pageEl) {
        sb.$pageEl.off("page:beforeout", onPageBeforeOut);
        sb.$pageEl.off("page:beforein", onPageBeforeIn);
      }
      sb.$inputEl.off("focus", onInputFocus);
      sb.$inputEl.off("blur", onInputBlur);
      sb.$inputEl.off(sb.params.inputEvents, onInputChange);
      sb.$inputEl.off("input:clear", onInputClear);
    };
    sb.useModules();
    sb.init();
    return sb;
  }
  clear(e) {
    const sb = this;
    if (!sb.query && e && dom7_default(e.target).hasClass("searchbar-clear")) {
      sb.disable();
      return sb;
    }
    const previousQuery = sb.value;
    sb.$inputEl.val("").trigger("change").focus();
    sb.$el.trigger("searchbar:clear", previousQuery);
    sb.emit("local::clear searchbarClear", sb, previousQuery);
    return sb;
  }
  setDisableButtonMargin() {
    const sb = this;
    if (sb.expandable) return;
    const app = sb.app;
    sb.$disableButtonEl.transition(0).show();
    sb.$disableButtonEl.css(`margin-${app.rtl ? "left" : "right"}`, `${-sb.disableButtonEl.offsetWidth}px`);
    sb._clientLeft = sb.$disableButtonEl[0].clientLeft;
    sb.$disableButtonEl.transition("");
    sb.disableButtonHasMargin = true;
  }
  enable(setFocus) {
    const sb = this;
    if (sb.enabled) return sb;
    const app = sb.app;
    const document2 = getDocument();
    const device = getDevice();
    sb.enabled = true;
    function enable3() {
      if (sb.$backdropEl && (sb.$searchContainer && sb.$searchContainer.length || sb.params.customSearch) && !sb.$el.hasClass("searchbar-enabled") && !sb.query) {
        sb.backdropShow();
      }
      sb.$el.addClass("searchbar-enabled");
      if (!sb.$disableButtonEl || sb.$disableButtonEl && sb.$disableButtonEl.length === 0) {
        sb.$el.addClass("searchbar-enabled-no-disable-button");
      }
      if (!sb.expandable && sb.$disableButtonEl && sb.$disableButtonEl.length > 0 && app.theme !== "md") {
        if (!sb.disableButtonHasMargin) {
          sb.setDisableButtonMargin();
        }
        sb.$disableButtonEl.css(`margin-${app.rtl ? "left" : "right"}`, "0px");
      }
      if (sb.expandable) {
        const $navbarEl = sb.$el.parents(".navbar");
        if ($navbarEl.hasClass("navbar-large") && sb.$pageEl) {
          const $pageContentEl = sb.$pageEl.find(".page-content");
          const $titleLargeEl = $navbarEl.find(".title-large");
          $pageContentEl.addClass("with-searchbar-expandable-enabled");
          if ($navbarEl.hasClass("navbar-large") && $navbarEl.hasClass("navbar-large-collapsed") && $titleLargeEl.length && $pageContentEl.length) {
            $pageContentEl.transition(0);
            $pageContentEl[0].scrollTop -= $titleLargeEl[0].offsetHeight;
            setTimeout(() => {
              $pageContentEl.transition("");
            }, 200);
          }
        }
        if (app.theme === "md" && $navbarEl.length) {
          $navbarEl.addClass("with-searchbar-expandable-enabled");
        } else {
          $navbarEl.addClass("with-searchbar-expandable-enabled");
          if ($navbarEl.hasClass("navbar-large")) {
            $navbarEl.addClass("navbar-large-collapsed");
          }
        }
      }
      if (sb.$hideOnEnableEl) sb.$hideOnEnableEl.addClass("hidden-by-searchbar");
      sb.$el.trigger("searchbar:enable");
      sb.emit("local::enable searchbarEnable", sb);
    }
    let needsFocus = false;
    if (setFocus === true) {
      if (document2.activeElement !== sb.inputEl) {
        needsFocus = true;
      }
    }
    const isIos = device.ios && app.theme === "ios";
    if (isIos) {
      if (sb.expandable) {
        if (needsFocus) sb.$inputEl.focus();
        enable3();
      } else {
        if (needsFocus) sb.$inputEl.focus();
        if (setFocus && (setFocus.type === "focus" || setFocus === true)) {
          nextTick(() => {
            enable3();
          }, 400);
        } else {
          enable3();
        }
      }
    } else {
      if (needsFocus) sb.$inputEl.focus();
      if (app.theme === "md" && sb.expandable) {
        sb.$el.parents(".page, .view, .navbar-inner, .navbar").scrollLeft(app.rtl ? 100 : 0);
      }
      enable3();
    }
    return sb;
  }
  disable() {
    const sb = this;
    if (!sb.enabled) return sb;
    const app = sb.app;
    sb.$inputEl.val("").trigger("change");
    sb.$el.removeClass("searchbar-enabled searchbar-focused searchbar-enabled-no-disable-button");
    if (sb.expandable) {
      const $navbarEl = sb.$el.parents(".navbar");
      const $pageContentEl = sb.$pageEl && sb.$pageEl.find(".page-content");
      if ($navbarEl.hasClass("navbar-large") && $pageContentEl.length) {
        const $titleLargeEl = $navbarEl.find(".title-large");
        sb.$el.transitionEnd(() => {
          $pageContentEl.removeClass("with-searchbar-expandable-closing");
        });
        if ($navbarEl.hasClass("navbar-large") && $navbarEl.hasClass("navbar-large-collapsed") && $titleLargeEl.length) {
          const scrollTop = $pageContentEl[0].scrollTop;
          const titleLargeHeight = $titleLargeEl[0].offsetHeight;
          if (scrollTop > titleLargeHeight) {
            $pageContentEl.transition(0);
            $pageContentEl[0].scrollTop = scrollTop + titleLargeHeight;
            setTimeout(() => {
              $pageContentEl.transition("");
            }, 200);
          }
        }
        $pageContentEl.removeClass("with-searchbar-expandable-enabled").addClass("with-searchbar-expandable-closing");
      }
      if (app.theme === "md" && $navbarEl.length) {
        $navbarEl.removeClass("with-searchbar-expandable-enabled with-searchbar-expandable-enabled-no-transition").addClass("with-searchbar-expandable-closing");
        sb.$el.transitionEnd(() => {
          $navbarEl.removeClass("with-searchbar-expandable-closing");
        });
      } else {
        $navbarEl.removeClass("with-searchbar-expandable-enabled with-searchbar-expandable-enabled-no-transition").addClass("with-searchbar-expandable-closing");
        sb.$el.transitionEnd(() => {
          $navbarEl.removeClass("with-searchbar-expandable-closing");
        });
        if (sb.$pageEl) {
          sb.$pageEl.find(".page-content").trigger("scroll");
        }
      }
    }
    if (!sb.expandable && sb.$disableButtonEl && sb.$disableButtonEl.length > 0 && app.theme !== "md") {
      sb.$disableButtonEl.css(`margin-${app.rtl ? "left" : "right"}`, `${-sb.disableButtonEl.offsetWidth}px`);
    }
    if (sb.$backdropEl && (sb.$searchContainer && sb.$searchContainer.length || sb.params.customSearch)) {
      sb.backdropHide();
    }
    sb.enabled = false;
    sb.$inputEl.blur();
    if (sb.$hideOnEnableEl) sb.$hideOnEnableEl.removeClass("hidden-by-searchbar");
    sb.$el.trigger("searchbar:disable");
    sb.emit("local::disable searchbarDisable", sb);
    return sb;
  }
  toggle() {
    const sb = this;
    if (sb.enabled) sb.disable();
    else sb.enable(true);
    return sb;
  }
  backdropShow() {
    const sb = this;
    if (sb.$backdropEl) {
      sb.$backdropEl.addClass("searchbar-backdrop-in");
    }
    return sb;
  }
  backdropHide() {
    const sb = this;
    if (sb.$backdropEl) {
      sb.$backdropEl.removeClass("searchbar-backdrop-in");
    }
    return sb;
  }
  search(query, internal) {
    const sb = this;
    sb.previousQuery = sb.query || "";
    if (query === sb.previousQuery) return sb;
    if (!internal) {
      if (!sb.enabled) {
        sb.enable();
      }
      sb.$inputEl.val(query);
      sb.$inputEl.trigger("input");
    }
    sb.query = query;
    sb.value = query;
    const {
      $searchContainer,
      $el,
      $foundEl,
      $notFoundEl,
      $hideOnSearchEl,
      isVirtualList
    } = sb;
    if (query.length > 0 && $hideOnSearchEl) {
      $hideOnSearchEl.addClass("hidden-by-searchbar");
    } else if ($hideOnSearchEl) {
      $hideOnSearchEl.removeClass("hidden-by-searchbar");
    }
    if ($searchContainer && $searchContainer.length && $el.hasClass("searchbar-enabled") || sb.params.customSearch && $el.hasClass("searchbar-enabled")) {
      if (query.length === 0) {
        sb.backdropShow();
      } else {
        sb.backdropHide();
      }
    }
    if (sb.params.customSearch) {
      $el.trigger("searchbar:search", {
        query,
        previousQuery: sb.previousQuery
      });
      sb.emit("local::search searchbarSearch", sb, query, sb.previousQuery);
      return sb;
    }
    let foundItems = [];
    let vlQuery;
    if (isVirtualList) {
      sb.virtualList = $searchContainer[0].f7VirtualList;
      if (query.trim() === "") {
        sb.virtualList.resetFilter();
        if ($notFoundEl) $notFoundEl.hide();
        if ($foundEl) $foundEl.show();
        $el.trigger("searchbar:search", {
          query,
          previousQuery: sb.previousQuery
        });
        sb.emit("local::search searchbarSearch", sb, query, sb.previousQuery);
        return sb;
      }
      vlQuery = sb.params.removeDiacritics ? remove_diacritics_default(query) : query;
      if (sb.virtualList.params.searchAll) {
        foundItems = sb.virtualList.params.searchAll(vlQuery, sb.virtualList.items) || [];
      } else if (sb.virtualList.params.searchByItem) {
        for (let i = 0; i < sb.virtualList.items.length; i += 1) {
          if (sb.virtualList.params.searchByItem(vlQuery, sb.virtualList.items[i], i)) {
            foundItems.push(i);
          }
        }
      }
    } else {
      let values;
      if (sb.params.removeDiacritics) values = remove_diacritics_default(query.trim().toLowerCase()).split(" ");
      else {
        values = query.trim().toLowerCase().split(" ");
      }
      $searchContainer.find(sb.params.searchItem).removeClass("hidden-by-searchbar").each((itemEl) => {
        const $itemEl = dom7_default(itemEl);
        let compareWithText = [];
        let $searchIn = sb.params.searchIn ? $itemEl.find(sb.params.searchIn) : $itemEl;
        if (sb.params.searchIn === sb.params.searchItem) {
          $searchIn = $itemEl;
        }
        $searchIn.each((searchInEl) => {
          let itemText = dom7_default(searchInEl).text().trim().toLowerCase();
          if (sb.params.removeDiacritics) itemText = remove_diacritics_default(itemText);
          compareWithText.push(itemText);
        });
        compareWithText = compareWithText.join(" ");
        let wordsMatch = 0;
        for (let i = 0; i < values.length; i += 1) {
          if (compareWithText.indexOf(values[i]) >= 0) wordsMatch += 1;
        }
        if (wordsMatch !== values.length && !(sb.params.ignore && $itemEl.is(sb.params.ignore))) {
          $itemEl.addClass("hidden-by-searchbar");
        } else {
          foundItems.push($itemEl[0]);
        }
      });
      if (sb.params.hideGroupTitles) {
        $searchContainer.find(sb.params.searchGroupTitle).each((titleEl) => {
          const $titleEl = dom7_default(titleEl);
          const $nextElements = $titleEl.nextAll(sb.params.searchItem);
          let hide = true;
          for (let i = 0; i < $nextElements.length; i += 1) {
            const $nextEl = $nextElements.eq(i);
            if ($nextEl.is(sb.params.searchGroupTitle)) break;
            if (!$nextEl.hasClass("hidden-by-searchbar")) {
              hide = false;
            }
          }
          const ignore = sb.params.ignore && $titleEl.is(sb.params.ignore);
          if (hide && !ignore) $titleEl.addClass("hidden-by-searchbar");
          else $titleEl.removeClass("hidden-by-searchbar");
        });
      }
      if (sb.params.hideGroups) {
        $searchContainer.find(sb.params.searchGroup).each((groupEl) => {
          const $groupEl = dom7_default(groupEl);
          const ignore = sb.params.ignore && $groupEl.is(sb.params.ignore);
          const notHidden = $groupEl.find(sb.params.searchItem).filter((el) => {
            return !dom7_default(el).hasClass("hidden-by-searchbar");
          });
          if (notHidden.length === 0 && !ignore) {
            $groupEl.addClass("hidden-by-searchbar");
          } else {
            $groupEl.removeClass("hidden-by-searchbar");
          }
        });
      }
    }
    if (foundItems.length === 0) {
      if ($notFoundEl) $notFoundEl.show();
      if ($foundEl) $foundEl.hide();
    } else {
      if ($notFoundEl) $notFoundEl.hide();
      if ($foundEl) $foundEl.show();
    }
    if (isVirtualList && sb.virtualList) {
      sb.virtualList.filterItems(foundItems);
    }
    $el.trigger("searchbar:search", {
      query,
      previousQuery: sb.previousQuery,
      foundItems
    });
    sb.emit("local::search searchbarSearch", sb, query, sb.previousQuery, foundItems);
    return sb;
  }
  init() {
    const sb = this;
    if (sb.expandable && sb.$el) sb.$el.addClass("searchbar-expandable");
    if (sb.inline && sb.$el) sb.$el.addClass("searchbar-inline");
    sb.attachEvents();
  }
  destroy() {
    const sb = this;
    sb.emit("local::beforeDestroy searchbarBeforeDestroy", sb);
    sb.$el.trigger("searchbar:beforedestroy");
    sb.detachEvents();
    if (sb.$el[0]) {
      sb.$el[0].f7Searchbar = null;
      delete sb.$el[0].f7Searchbar;
    }
    deleteProps(sb);
  }
};
var searchbar_class_default = Searchbar;

// node_modules/framework7/components/searchbar/searchbar.js
var searchbar_default = {
  name: "searchbar",
  static: {
    Searchbar: searchbar_class_default
  },
  create() {
    const app = this;
    app.searchbar = ConstructorMethods({
      defaultSelector: ".searchbar",
      constructor: searchbar_class_default,
      app,
      domProp: "f7Searchbar",
      addMethods: "clear enable disable toggle search".split(" ")
    });
  },
  on: {
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".searchbar-init").each((searchbarEl) => {
        const $searchbarEl = dom7_default(searchbarEl);
        app.searchbar.create(extend($searchbarEl.dataset(), {
          el: searchbarEl
        }));
      });
    },
    tabBeforeRemove(tabEl) {
      dom7_default(tabEl).find(".searchbar-init").each((searchbarEl) => {
        if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {
          searchbarEl.f7Searchbar.destroy();
        }
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".searchbar-init").each((searchbarEl) => {
        const $searchbarEl = dom7_default(searchbarEl);
        app.searchbar.create(extend($searchbarEl.dataset(), {
          el: searchbarEl
        }));
      });
      if (app.theme === "ios" && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {
        page.$navbarEl.find(".searchbar-init").each((searchbarEl) => {
          const $searchbarEl = dom7_default(searchbarEl);
          app.searchbar.create(extend($searchbarEl.dataset(), {
            el: searchbarEl
          }));
        });
      }
    },
    pageBeforeRemove(page) {
      const app = this;
      page.$el.find(".searchbar-init").each((searchbarEl) => {
        if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {
          searchbarEl.f7Searchbar.destroy();
        }
      });
      if (app.theme === "ios" && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {
        page.$navbarEl.find(".searchbar-init").each((searchbarEl) => {
          if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {
            searchbarEl.f7Searchbar.destroy();
          }
        });
      }
    }
  },
  clicks: {
    ".searchbar-clear": function clear($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      const sb = app.searchbar.get(data.searchbar);
      if (sb) sb.clear();
    },
    ".searchbar-enable": function enable2($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      const sb = app.searchbar.get(data.searchbar);
      if (sb) sb.enable(true);
    },
    ".searchbar-disable": function disable2($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      const sb = app.searchbar.get(data.searchbar);
      if (sb) sb.disable();
    },
    ".searchbar-toggle": function toggle2($clickedEl, data) {
      if (data === void 0) {
        data = {};
      }
      const app = this;
      const sb = app.searchbar.get(data.searchbar);
      if (sb) sb.toggle();
    }
  },
  vnode: {
    "searchbar-init": {
      insert(vnode) {
        const app = this;
        const searchbarEl = vnode.elm;
        const $searchbarEl = dom7_default(searchbarEl);
        app.searchbar.create(extend($searchbarEl.dataset(), {
          el: searchbarEl
        }));
      },
      destroy(vnode) {
        const searchbarEl = vnode.elm;
        if (searchbarEl.f7Searchbar && searchbarEl.f7Searchbar.destroy) {
          searchbarEl.f7Searchbar.destroy();
        }
      }
    }
  }
};

// node_modules/framework7/components/messages/messages-class.js
function _extends() {
  _extends = Object.assign ? Object.assign.bind() : function(target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i];
      for (var key in source) {
        if (Object.prototype.hasOwnProperty.call(source, key)) {
          target[key] = source[key];
        }
      }
    }
    return target;
  };
  return _extends.apply(this, arguments);
}
var Messages = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const m = this;
    const defaults2 = {
      autoLayout: true,
      messages: [],
      newMessagesFirst: false,
      scrollMessages: true,
      scrollMessagesOnEdge: true,
      firstMessageRule: void 0,
      lastMessageRule: void 0,
      tailMessageRule: void 0,
      sameNameMessageRule: void 0,
      sameHeaderMessageRule: void 0,
      sameFooterMessageRule: void 0,
      sameAvatarMessageRule: void 0,
      customClassMessageRule: void 0,
      renderMessage: void 0
    };
    m.useModulesParams(defaults2);
    m.params = extend(defaults2, params);
    const $el = dom7_default(params.el).eq(0);
    if ($el.length === 0) return m;
    if ($el[0].f7Messages) return $el[0].f7Messages;
    $el[0].f7Messages = m;
    const $pageContentEl = $el.closest(".page-content").eq(0);
    extend(m, {
      messages: m.params.messages,
      $el,
      el: $el[0],
      $pageContentEl,
      pageContentEl: $pageContentEl[0]
    });
    m.useModules();
    m.init();
    return m;
  }
  // eslint-disable-next-line
  getMessageData(messageEl) {
    const $messageEl = dom7_default(messageEl);
    const data = {
      name: $messageEl.find(".message-name").html(),
      header: $messageEl.find(".message-header").html(),
      textHeader: $messageEl.find(".message-text-header").html(),
      textFooter: $messageEl.find(".message-text-footer").html(),
      footer: $messageEl.find(".message-footer").html(),
      isTitle: $messageEl.hasClass("messages-title"),
      type: $messageEl.hasClass("message-sent") ? "sent" : "received",
      text: $messageEl.find(".message-text").html(),
      image: $messageEl.find(".message-image").html(),
      imageSrc: $messageEl.find(".message-image img").attr("src"),
      typing: $messageEl.hasClass("message-typing")
    };
    if (data.isTitle) {
      data.text = $messageEl.html();
    }
    if (data.text && data.textHeader) {
      data.text = data.text.replace(`<div class="message-text-header">${data.textHeader}</div>`, "");
    }
    if (data.text && data.textFooter) {
      data.text = data.text.replace(`<div class="message-text-footer">${data.textFooter}</div>`, "");
    }
    let avatar = $messageEl.find(".message-avatar").css("background-image");
    if (avatar === "none" || avatar === "") avatar = void 0;
    if (avatar && typeof avatar === "string") {
      avatar = avatar.replace("url(", "").replace(")", "").replace(/"/g, "").replace(/'/g, "");
    } else {
      avatar = void 0;
    }
    data.avatar = avatar;
    return data;
  }
  getMessagesData() {
    const m = this;
    const data = [];
    m.$el.find(".message, .messages-title").each((messageEl) => {
      data.push(m.getMessageData(messageEl));
    });
    return data;
  }
  renderMessage(messageToRender) {
    const m = this;
    const message = extend({
      type: "sent",
      attrs: {}
    }, messageToRender);
    if (m.params.renderMessage) {
      return m.params.renderMessage.call(m, message);
    }
    if (message.isTitle) {
      return `<div class="messages-title">${message.text}</div>`;
    }
    return jsx_default("div", _extends({
      class: `message message-${message.type} ${message.isTyping ? "message-typing" : ""} ${message.cssClass || ""}`
    }, message.attrs), message.avatar && jsx_default("div", {
      class: "message-avatar",
      style: `background-image:url(${message.avatar})`
    }), jsx_default("div", {
      class: "message-content"
    }, message.name && jsx_default("div", {
      class: "message-name"
    }, message.name), message.header && jsx_default("div", {
      class: "message-header"
    }, message.header), jsx_default("div", {
      class: "message-bubble"
    }, message.textHeader && jsx_default("div", {
      class: "message-text-header"
    }, message.textHeader), message.image && jsx_default("div", {
      class: "message-image"
    }, message.image), message.imageSrc && !message.image && jsx_default("div", {
      class: "message-image"
    }, jsx_default("img", {
      src: message.imageSrc
    })), (message.text || message.isTyping) && jsx_default("div", {
      class: "message-text"
    }, message.text || "", message.isTyping && jsx_default("div", {
      class: "message-typing-indicator"
    }, jsx_default("div", null), jsx_default("div", null), jsx_default("div", null))), message.textFooter && jsx_default("div", {
      class: "message-text-footer"
    }, message.textFooter)), message.footer && jsx_default("div", {
      class: "message-footer"
    }, message.footer)));
  }
  renderMessages(messagesToRender, method) {
    if (messagesToRender === void 0) {
      messagesToRender = this.messages;
    }
    if (method === void 0) {
      method = this.params.newMessagesFirst ? "prepend" : "append";
    }
    const m = this;
    const html = messagesToRender.map((message) => m.renderMessage(message)).join("");
    m.$el[method](html);
  }
  isFirstMessage() {
    const m = this;
    if (m.params.firstMessageRule) return m.params.firstMessageRule(...arguments);
    return false;
  }
  isLastMessage() {
    const m = this;
    if (m.params.lastMessageRule) return m.params.lastMessageRule(...arguments);
    return false;
  }
  isTailMessage() {
    const m = this;
    if (m.params.tailMessageRule) return m.params.tailMessageRule(...arguments);
    return false;
  }
  isSameNameMessage() {
    const m = this;
    if (m.params.sameNameMessageRule) return m.params.sameNameMessageRule(...arguments);
    return false;
  }
  isSameHeaderMessage() {
    const m = this;
    if (m.params.sameHeaderMessageRule) return m.params.sameHeaderMessageRule(...arguments);
    return false;
  }
  isSameFooterMessage() {
    const m = this;
    if (m.params.sameFooterMessageRule) return m.params.sameFooterMessageRule(...arguments);
    return false;
  }
  isSameAvatarMessage() {
    const m = this;
    if (m.params.sameAvatarMessageRule) return m.params.sameAvatarMessageRule(...arguments);
    return false;
  }
  isCustomClassMessage() {
    const m = this;
    if (m.params.customClassMessageRule) return m.params.customClassMessageRule(...arguments);
    return void 0;
  }
  layout() {
    const m = this;
    m.$el.find(".message, .messages-title").each((messageEl, index) => {
      const $messageEl = dom7_default(messageEl);
      if (!m.messages) {
        m.messages = m.getMessagesData();
      }
      const classes2 = [];
      const message = m.messages[index];
      const previousMessage = m.messages[index - 1];
      const nextMessage = m.messages[index + 1];
      if (m.isFirstMessage(message, previousMessage, nextMessage)) {
        classes2.push("message-first");
      }
      if (m.isLastMessage(message, previousMessage, nextMessage)) {
        classes2.push("message-last");
      }
      if (m.isTailMessage(message, previousMessage, nextMessage)) {
        classes2.push("message-tail");
      }
      if (m.isSameNameMessage(message, previousMessage, nextMessage)) {
        classes2.push("message-same-name");
      }
      if (m.isSameHeaderMessage(message, previousMessage, nextMessage)) {
        classes2.push("message-same-header");
      }
      if (m.isSameFooterMessage(message, previousMessage, nextMessage)) {
        classes2.push("message-same-footer");
      }
      if (m.isSameAvatarMessage(message, previousMessage, nextMessage)) {
        classes2.push("message-same-avatar");
      }
      let customMessageClasses = m.isCustomClassMessage(message, previousMessage, nextMessage);
      if (customMessageClasses && customMessageClasses.length) {
        if (typeof customMessageClasses === "string") {
          customMessageClasses = customMessageClasses.split(" ");
        }
        customMessageClasses.forEach((customClass) => {
          classes2.push(customClass);
        });
      }
      $messageEl.removeClass("message-first message-last message-tail message-same-name message-same-header message-same-footer message-same-avatar");
      classes2.forEach((className) => {
        $messageEl.addClass(className);
      });
    });
  }
  clear() {
    const m = this;
    m.messages = [];
    m.$el.html("");
  }
  removeMessage(messageToRemove, layout) {
    if (layout === void 0) {
      layout = true;
    }
    const m = this;
    let index;
    let $el;
    if (typeof messageToRemove === "number") {
      index = messageToRemove;
      $el = m.$el.find(".message, .messages-title").eq(index);
    } else if (m.messages && m.messages.indexOf(messageToRemove) >= 0) {
      index = m.messages.indexOf(messageToRemove);
      $el = m.$el.children().eq(index);
    } else {
      $el = dom7_default(messageToRemove);
      index = $el.index();
    }
    if ($el.length === 0) {
      return m;
    }
    $el.remove();
    m.messages.splice(index, 1);
    if (m.params.autoLayout && layout) m.layout();
    return m;
  }
  removeMessages(messagesToRemove, layout) {
    if (layout === void 0) {
      layout = true;
    }
    const m = this;
    if (Array.isArray(messagesToRemove)) {
      const messagesToRemoveEls = [];
      messagesToRemove.forEach((messageToRemoveIndex) => {
        messagesToRemoveEls.push(m.$el.find(".message, .messages-title").eq(messageToRemoveIndex));
      });
      messagesToRemoveEls.forEach((messageToRemove) => {
        m.removeMessage(messageToRemove, false);
      });
    } else {
      dom7_default(messagesToRemove).each((messageToRemove) => {
        m.removeMessage(messageToRemove, false);
      });
    }
    if (m.params.autoLayout && layout) m.layout();
    return m;
  }
  addMessage() {
    const m = this;
    let messageToAdd;
    let animate;
    let method;
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }
    if (typeof args[1] === "boolean") {
      [messageToAdd, animate, method] = args;
    } else {
      [messageToAdd, method, animate] = args;
    }
    if (typeof animate === "undefined") {
      animate = true;
    }
    if (typeof method === "undefined") {
      method = m.params.newMessagesFirst ? "prepend" : "append";
    }
    return m.addMessages([messageToAdd], animate, method);
  }
  setScrollData() {
    const m = this;
    const scrollHeightBefore = m.pageContentEl.scrollHeight;
    const heightBefore = m.pageContentEl.offsetHeight;
    const scrollBefore = m.pageContentEl.scrollTop;
    m.scrollData = {
      scrollHeightBefore,
      heightBefore,
      scrollBefore
    };
    return {
      scrollHeightBefore,
      heightBefore,
      scrollBefore
    };
  }
  addMessages() {
    const m = this;
    let messagesToAdd;
    let animate;
    let method;
    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
      args[_key2] = arguments[_key2];
    }
    if (typeof args[1] === "boolean") {
      [messagesToAdd, animate, method] = args;
    } else {
      [messagesToAdd, method, animate] = args;
    }
    if (typeof animate === "undefined") {
      animate = true;
    }
    if (typeof method === "undefined") {
      method = m.params.newMessagesFirst ? "prepend" : "append";
    }
    const {
      scrollHeightBefore,
      scrollBefore
    } = m.setScrollData();
    let messagesHTML = "";
    const typingMessage = m.messages.filter((el) => el.isTyping)[0];
    messagesToAdd.forEach((messageToAdd) => {
      if (typingMessage) {
        if (method === "append") {
          m.messages.splice(m.messages.indexOf(typingMessage), 0, messageToAdd);
        } else {
          m.messages.splice(m.messages.indexOf(typingMessage) + 1, 0, messageToAdd);
        }
      } else {
        m.messages[method === "append" ? "push" : "unshift"](messageToAdd);
      }
      messagesHTML += m.renderMessage(messageToAdd);
    });
    const $messagesEls = dom7_default(messagesHTML);
    if (animate) {
      if (method === "append" && !m.params.newMessagesFirst) {
        $messagesEls.addClass("message-appear-from-bottom");
      }
      if (method === "prepend" && m.params.newMessagesFirst) {
        $messagesEls.addClass("message-appear-from-top");
      }
    }
    if (typingMessage) {
      if (method === "append") {
        $messagesEls.insertBefore(m.$el.find(".message-typing"));
      } else {
        $messagesEls.insertAfter(m.$el.find(".message-typing"));
      }
    } else {
      m.$el[method]($messagesEls);
    }
    if (m.params.autoLayout) m.layout();
    if (method === "prepend" && !typingMessage) {
      m.pageContentEl.scrollTop = scrollBefore + (m.pageContentEl.scrollHeight - scrollHeightBefore);
    }
    if (m.params.scrollMessages && (method === "append" && !m.params.newMessagesFirst || method === "prepend" && m.params.newMessagesFirst && !typingMessage)) {
      m.scrollWithEdgeCheck(animate);
    }
    return m;
  }
  showTyping(message) {
    if (message === void 0) {
      message = {};
    }
    const m = this;
    const typingMessage = m.messages.filter((el) => el.isTyping)[0];
    if (typingMessage) {
      m.removeMessage(m.messages.indexOf(typingMessage));
    }
    m.addMessage(extend({
      type: "received",
      isTyping: true
    }, message));
    return m;
  }
  hideTyping() {
    const m = this;
    let typingMessageIndex;
    let typingFound;
    m.messages.forEach((message, index) => {
      if (message.isTyping) typingMessageIndex = index;
    });
    if (typeof typingMessageIndex !== "undefined") {
      if (m.$el.find(".message").eq(typingMessageIndex).hasClass("message-typing")) {
        typingFound = true;
        m.removeMessage(typingMessageIndex);
      }
    }
    if (!typingFound) {
      const $typingMessageEl = m.$el.find(".message-typing");
      if ($typingMessageEl.length) {
        m.removeMessage($typingMessageEl);
      }
    }
    return m;
  }
  scrollWithEdgeCheck(animate) {
    const m = this;
    const {
      scrollBefore,
      scrollHeightBefore,
      heightBefore
    } = m.scrollData;
    if (m.params.scrollMessagesOnEdge) {
      let onEdge = false;
      if (m.params.newMessagesFirst && scrollBefore === 0) {
        onEdge = true;
      }
      if (!m.params.newMessagesFirst && scrollBefore - (scrollHeightBefore - heightBefore) >= -10) {
        onEdge = true;
      }
      if (onEdge) m.scroll(animate ? void 0 : 0);
    } else {
      m.scroll(animate ? void 0 : 0);
    }
  }
  scroll(duration, scrollTop) {
    if (duration === void 0) {
      duration = 300;
    }
    const m = this;
    const currentScroll = m.pageContentEl.scrollTop;
    let newScrollTop;
    if (typeof scrollTop !== "undefined") newScrollTop = scrollTop;
    else {
      newScrollTop = m.params.newMessagesFirst ? 0 : m.pageContentEl.scrollHeight - m.pageContentEl.offsetHeight;
      if (newScrollTop === currentScroll) return m;
    }
    m.$pageContentEl.scrollTop(newScrollTop, duration);
    return m;
  }
  init() {
    const m = this;
    if (!m.messages || m.messages.length === 0) {
      m.messages = m.getMessagesData();
    }
    if (m.params.messages && m.params.messages.length) {
      m.renderMessages();
    }
    if (m.params.autoLayout) m.layout();
    if (m.params.scrollMessages) m.scroll(0);
  }
  destroy() {
    const m = this;
    m.emit("local::beforeDestroy messagesBeforeDestroy", m);
    m.$el.trigger("messages:beforedestroy");
    if (m.$el[0]) {
      m.$el[0].f7Messages = null;
      delete m.$el[0].f7Messages;
    }
    deleteProps(m);
  }
};
var messages_class_default = Messages;

// node_modules/framework7/components/messages/messages.js
var messages_default = {
  name: "messages",
  static: {
    Messages: messages_class_default
  },
  create() {
    const app = this;
    app.messages = ConstructorMethods({
      defaultSelector: ".messages",
      constructor: messages_class_default,
      app,
      domProp: "f7Messages",
      addMethods: "renderMessages layout scroll clear removeMessage removeMessages addMessage addMessages".split(" ")
    });
  },
  on: {
    tabBeforeRemove(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".messages-init").each((messagesEl) => {
        app.messages.destroy(messagesEl);
      });
    },
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".messages-init").each((messagesEl) => {
        app.messages.create({
          el: messagesEl
        });
      });
    },
    pageBeforeRemove(page) {
      const app = this;
      page.$el.find(".messages-init").each((messagesEl) => {
        app.messages.destroy(messagesEl);
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".messages-init").each((messagesEl) => {
        app.messages.create({
          el: messagesEl
        });
      });
    }
  },
  vnode: {
    "messages-init": {
      insert(vnode) {
        const app = this;
        const messagesEl = vnode.elm;
        app.messages.create({
          el: messagesEl
        });
      },
      destroy(vnode) {
        const app = this;
        const messagesEl = vnode.elm;
        app.messages.destroy(messagesEl);
      }
    }
  }
};

// node_modules/framework7/components/messagebar/messagebar-class.js
var Messagebar = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const messagebar = this;
    const defaults2 = {
      top: false,
      topOffset: 0,
      bottomOffset: 0,
      attachments: [],
      renderAttachments: void 0,
      renderAttachment: void 0,
      maxHeight: null,
      resizePage: true
    };
    messagebar.useModulesParams(defaults2);
    messagebar.params = extend(defaults2, params);
    const $el = dom7_default(messagebar.params.el);
    if ($el.length === 0) return messagebar;
    if ($el[0].f7Messagebar) return $el[0].f7Messagebar;
    $el[0].f7Messagebar = messagebar;
    const $pageEl = $el.parents(".page").eq(0);
    const $pageContentEl = $pageEl.find(".page-content").eq(0);
    const $areaEl = $el.find(".messagebar-area");
    let $textareaEl;
    if (messagebar.params.textareaEl) {
      $textareaEl = dom7_default(messagebar.params.textareaEl);
    } else {
      $textareaEl = $el.find("textarea");
    }
    const $attachmentsEl = $el.find(".messagebar-attachments");
    const $sheetEl = $el.find(".messagebar-sheet");
    if (messagebar.params.top) {
      $el.addClass("messagebar-top");
    }
    extend(messagebar, {
      $el,
      el: $el[0],
      $areaEl,
      areaEl: $areaEl[0],
      $textareaEl,
      textareaEl: $textareaEl[0],
      $attachmentsEl,
      attachmentsEl: $attachmentsEl[0],
      attachmentsVisible: $attachmentsEl.hasClass("messagebar-attachments-visible"),
      $sheetEl,
      sheetEl: $sheetEl[0],
      sheetVisible: $sheetEl.hasClass("messagebar-sheet-visible"),
      $pageEl,
      pageEl: $pageEl[0],
      $pageContentEl,
      pageContentEl: $pageContentEl,
      top: $el.hasClass("messagebar-top") || messagebar.params.top,
      attachments: []
    });
    function onAppResize() {
      if (messagebar.params.resizePage) {
        messagebar.resizePage();
      }
    }
    function onSubmit(e) {
      e.preventDefault();
    }
    function onAttachmentClick(e) {
      const index = dom7_default(this).index();
      if (dom7_default(e.target).closest(".messagebar-attachment-delete").length) {
        dom7_default(this).trigger("messagebar:attachmentdelete", index);
        messagebar.emit("local::attachmentDelete messagebarAttachmentDelete", messagebar, this, index);
      } else {
        dom7_default(this).trigger("messagebar:attachmentclick", index);
        messagebar.emit("local::attachmentClick messagebarAttachmentClick", messagebar, this, index);
      }
    }
    function onTextareaChange() {
      messagebar.checkEmptyState();
      messagebar.$el.trigger("messagebar:change");
      messagebar.emit("local::change messagebarChange", messagebar);
    }
    function onTextareaFocus() {
      messagebar.sheetHide();
      messagebar.$el.addClass("messagebar-focused");
      messagebar.$el.trigger("messagebar:focus");
      messagebar.emit("local::focus messagebarFocus", messagebar);
    }
    function onTextareaBlur() {
      messagebar.$el.removeClass("messagebar-focused");
      messagebar.$el.trigger("messagebar:blur");
      messagebar.emit("local::blur messagebarBlur", messagebar);
    }
    messagebar.attachEvents = function attachEvents2() {
      $el.on("textarea:resize", onAppResize);
      $el.on("submit", onSubmit);
      $el.on("click", ".messagebar-attachment", onAttachmentClick);
      $textareaEl.on("change input", onTextareaChange);
      $textareaEl.on("focus", onTextareaFocus);
      $textareaEl.on("blur", onTextareaBlur);
      app.on("resize", onAppResize);
    };
    messagebar.detachEvents = function detachEvents2() {
      $el.off("textarea:resize", onAppResize);
      $el.off("submit", onSubmit);
      $el.off("click", ".messagebar-attachment", onAttachmentClick);
      $textareaEl.off("change input", onTextareaChange);
      $textareaEl.off("focus", onTextareaFocus);
      $textareaEl.off("blur", onTextareaBlur);
      app.off("resize", onAppResize);
    };
    messagebar.useModules();
    messagebar.init();
    return messagebar;
  }
  focus() {
    const messagebar = this;
    messagebar.$textareaEl.focus();
    return messagebar;
  }
  blur() {
    const messagebar = this;
    messagebar.$textareaEl.blur();
    return messagebar;
  }
  clear() {
    const messagebar = this;
    messagebar.$textareaEl.val("").trigger("change");
    return messagebar;
  }
  getValue() {
    const messagebar = this;
    return messagebar.$textareaEl.val().trim();
  }
  setValue(value) {
    const messagebar = this;
    messagebar.$textareaEl.val(value).trigger("change");
    return messagebar;
  }
  setPlaceholder(placeholder) {
    const messagebar = this;
    messagebar.$textareaEl.attr("placeholder", placeholder);
    return messagebar;
  }
  resizePage() {
    const messagebar = this;
    const {
      params,
      $el,
      top,
      $pageEl,
      $pageContentEl,
      $areaEl,
      $textareaEl,
      $sheetEl,
      $attachmentsEl
    } = messagebar;
    const elHeight = $el[0].offsetHeight;
    let maxHeight = params.maxHeight;
    if (top) {
    } else {
      const currentPaddingBottom = parseInt($pageContentEl.css("padding-bottom"), 10);
      const requiredPaddingBottom = elHeight + params.bottomOffset;
      if (requiredPaddingBottom !== currentPaddingBottom && $pageContentEl.length) {
        const currentPaddingTop = parseInt($pageContentEl.css("padding-top"), 10);
        const pageScrollHeight = $pageContentEl[0].scrollHeight;
        const pageOffsetHeight = $pageContentEl[0].offsetHeight;
        const pageScrollTop = $pageContentEl[0].scrollTop;
        const scrollOnBottom = pageScrollTop === pageScrollHeight - pageOffsetHeight;
        if (!maxHeight) {
          maxHeight = $pageEl[0].offsetHeight - currentPaddingTop - $sheetEl.outerHeight() - $attachmentsEl.outerHeight() - parseInt($areaEl.css("margin-top"), 10) - parseInt($areaEl.css("margin-bottom"), 10);
        }
        $textareaEl.css("max-height", `${maxHeight}px`);
        $pageContentEl.css("padding-bottom", `${requiredPaddingBottom}px`);
        if (scrollOnBottom) {
          $pageContentEl.scrollTop($pageContentEl[0].scrollHeight - pageOffsetHeight);
        }
        $el.trigger("messagebar:resizepage");
        messagebar.emit("local::resizePage messagebarResizePage", messagebar);
      }
    }
  }
  checkEmptyState() {
    const messagebar = this;
    const {
      $el,
      $textareaEl
    } = messagebar;
    const value = $textareaEl.val().trim();
    if (value && value.length) {
      $el.addClass("messagebar-with-value");
    } else {
      $el.removeClass("messagebar-with-value");
    }
  }
  attachmentsCreate(innerHTML) {
    if (innerHTML === void 0) {
      innerHTML = "";
    }
    const messagebar = this;
    const $attachmentsEl = dom7_default(`<div class="messagebar-attachments">${innerHTML}</div>`);
    $attachmentsEl.insertBefore(messagebar.$textareaEl);
    extend(messagebar, {
      $attachmentsEl,
      attachmentsEl: $attachmentsEl[0]
    });
    return messagebar;
  }
  attachmentsShow(innerHTML) {
    if (innerHTML === void 0) {
      innerHTML = "";
    }
    const messagebar = this;
    messagebar.$attachmentsEl = messagebar.$el.find(".messagebar-attachments");
    if (messagebar.$attachmentsEl.length === 0) {
      messagebar.attachmentsCreate(innerHTML);
    }
    messagebar.$el.addClass("messagebar-attachments-visible");
    messagebar.attachmentsVisible = true;
    if (messagebar.params.resizePage) {
      messagebar.resizePage();
    }
    return messagebar;
  }
  attachmentsHide() {
    const messagebar = this;
    messagebar.$el.removeClass("messagebar-attachments-visible");
    messagebar.attachmentsVisible = false;
    if (messagebar.params.resizePage) {
      messagebar.resizePage();
    }
    return messagebar;
  }
  attachmentsToggle() {
    const messagebar = this;
    if (messagebar.attachmentsVisible) {
      messagebar.attachmentsHide();
    } else {
      messagebar.attachmentsShow();
    }
    return messagebar;
  }
  renderAttachment(attachment) {
    const messagebar = this;
    if (messagebar.params.renderAttachment) {
      return messagebar.params.renderAttachment.call(messagebar, attachment);
    }
    return `
      <div class="messagebar-attachment">
        <img src="${attachment}">
        <span class="messagebar-attachment-delete"></span>
      </div>
    `;
  }
  renderAttachments() {
    const messagebar = this;
    let html;
    if (messagebar.params.renderAttachments) {
      html = messagebar.params.renderAttachments.call(messagebar, messagebar.attachments);
    } else {
      html = `${messagebar.attachments.map((attachment) => messagebar.renderAttachment(attachment)).join("")}`;
    }
    if (messagebar.$attachmentsEl.length === 0) {
      messagebar.attachmentsCreate(html);
    } else {
      messagebar.$attachmentsEl.html(html);
    }
  }
  sheetCreate(innerHTML) {
    if (innerHTML === void 0) {
      innerHTML = "";
    }
    const messagebar = this;
    const $sheetEl = dom7_default(`<div class="messagebar-sheet">${innerHTML}</div>`);
    messagebar.$el.append($sheetEl);
    extend(messagebar, {
      $sheetEl,
      sheetEl: $sheetEl[0]
    });
    return messagebar;
  }
  sheetShow(innerHTML) {
    if (innerHTML === void 0) {
      innerHTML = "";
    }
    const messagebar = this;
    messagebar.$sheetEl = messagebar.$el.find(".messagebar-sheet");
    if (messagebar.$sheetEl.length === 0) {
      messagebar.sheetCreate(innerHTML);
    }
    messagebar.$el.addClass("messagebar-sheet-visible");
    messagebar.sheetVisible = true;
    if (messagebar.params.resizePage) {
      messagebar.resizePage();
    }
    return messagebar;
  }
  sheetHide() {
    const messagebar = this;
    messagebar.$el.removeClass("messagebar-sheet-visible");
    messagebar.sheetVisible = false;
    if (messagebar.params.resizePage) {
      messagebar.resizePage();
    }
    return messagebar;
  }
  sheetToggle() {
    const messagebar = this;
    if (messagebar.sheetVisible) {
      messagebar.sheetHide();
    } else {
      messagebar.sheetShow();
    }
    return messagebar;
  }
  init() {
    const messagebar = this;
    messagebar.attachEvents();
    messagebar.checkEmptyState();
    return messagebar;
  }
  destroy() {
    const messagebar = this;
    messagebar.emit("local::beforeDestroy messagebarBeforeDestroy", messagebar);
    messagebar.$el.trigger("messagebar:beforedestroy");
    messagebar.detachEvents();
    if (messagebar.$el[0]) {
      messagebar.$el[0].f7Messagebar = null;
      delete messagebar.$el[0].f7Messagebar;
    }
    deleteProps(messagebar);
  }
};
var messagebar_class_default = Messagebar;

// node_modules/framework7/components/messagebar/messagebar.js
var messagebar_default = {
  name: "messagebar",
  static: {
    Messagebar: messagebar_class_default
  },
  create() {
    const app = this;
    app.messagebar = ConstructorMethods({
      defaultSelector: ".messagebar",
      constructor: messagebar_class_default,
      app,
      domProp: "f7Messagebar",
      addMethods: "clear getValue setValue setPlaceholder resizePage focus blur attachmentsCreate attachmentsShow attachmentsHide attachmentsToggle renderAttachments sheetCreate sheetShow sheetHide sheetToggle".split(" ")
    });
  },
  on: {
    tabBeforeRemove(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".messagebar-init").each((messagebarEl) => {
        app.messagebar.destroy(messagebarEl);
      });
    },
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".messagebar-init").each((messagebarEl) => {
        app.messagebar.create(extend({
          el: messagebarEl
        }, dom7_default(messagebarEl).dataset()));
      });
    },
    pageBeforeRemove(page) {
      const app = this;
      page.$el.find(".messagebar-init").each((messagebarEl) => {
        app.messagebar.destroy(messagebarEl);
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".messagebar-init").each((messagebarEl) => {
        app.messagebar.create(extend({
          el: messagebarEl
        }, dom7_default(messagebarEl).dataset()));
      });
    }
  },
  vnode: {
    "messagebar-init": {
      insert(vnode) {
        const app = this;
        const messagebarEl = vnode.elm;
        app.messagebar.create(extend({
          el: messagebarEl
        }, dom7_default(messagebarEl).dataset()));
      },
      destroy(vnode) {
        const app = this;
        const messagebarEl = vnode.elm;
        app.messagebar.destroy(messagebarEl);
      }
    }
  }
};

// node_modules/framework7/node_modules/swiper/shared/ssr-window.esm.mjs
function isObject(obj) {
  return obj !== null && typeof obj === "object" && "constructor" in obj && obj.constructor === Object;
}
function extend2(target, src) {
  if (target === void 0) {
    target = {};
  }
  if (src === void 0) {
    src = {};
  }
  Object.keys(src).forEach((key) => {
    if (typeof target[key] === "undefined") target[key] = src[key];
    else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {
      extend2(target[key], src[key]);
    }
  });
}
var ssrDocument = {
  body: {},
  addEventListener() {
  },
  removeEventListener() {
  },
  activeElement: {
    blur() {
    },
    nodeName: ""
  },
  querySelector() {
    return null;
  },
  querySelectorAll() {
    return [];
  },
  getElementById() {
    return null;
  },
  createEvent() {
    return {
      initEvent() {
      }
    };
  },
  createElement() {
    return {
      children: [],
      childNodes: [],
      style: {},
      setAttribute() {
      },
      getElementsByTagName() {
        return [];
      }
    };
  },
  createElementNS() {
    return {};
  },
  importNode() {
    return null;
  },
  location: {
    hash: "",
    host: "",
    hostname: "",
    href: "",
    origin: "",
    pathname: "",
    protocol: "",
    search: ""
  }
};
function getDocument2() {
  const doc = typeof document !== "undefined" ? document : {};
  extend2(doc, ssrDocument);
  return doc;
}
var ssrWindow = {
  document: ssrDocument,
  navigator: {
    userAgent: ""
  },
  location: {
    hash: "",
    host: "",
    hostname: "",
    href: "",
    origin: "",
    pathname: "",
    protocol: "",
    search: ""
  },
  history: {
    replaceState() {
    },
    pushState() {
    },
    go() {
    },
    back() {
    }
  },
  CustomEvent: function CustomEvent2() {
    return this;
  },
  addEventListener() {
  },
  removeEventListener() {
  },
  getComputedStyle() {
    return {
      getPropertyValue() {
        return "";
      }
    };
  },
  Image() {
  },
  Date() {
  },
  screen: {},
  setTimeout() {
  },
  clearTimeout() {
  },
  matchMedia() {
    return {};
  },
  requestAnimationFrame(callback) {
    if (typeof setTimeout === "undefined") {
      callback();
      return null;
    }
    return setTimeout(callback, 0);
  },
  cancelAnimationFrame(id2) {
    if (typeof setTimeout === "undefined") {
      return;
    }
    clearTimeout(id2);
  }
};
function getWindow2() {
  const win = typeof window !== "undefined" ? window : {};
  extend2(win, ssrWindow);
  return win;
}

// node_modules/framework7/node_modules/swiper/shared/utils.mjs
function deleteProps2(obj) {
  const object = obj;
  Object.keys(object).forEach((key) => {
    try {
      object[key] = null;
    } catch (e) {
    }
    try {
      delete object[key];
    } catch (e) {
    }
  });
}
function nextTick2(callback, delay) {
  if (delay === void 0) {
    delay = 0;
  }
  return setTimeout(callback, delay);
}
function now2() {
  return Date.now();
}
function getComputedStyle2(el) {
  const window2 = getWindow2();
  let style;
  if (window2.getComputedStyle) {
    style = window2.getComputedStyle(el, null);
  }
  if (!style && el.currentStyle) {
    style = el.currentStyle;
  }
  if (!style) {
    style = el.style;
  }
  return style;
}
function getTranslate2(el, axis) {
  if (axis === void 0) {
    axis = "x";
  }
  const window2 = getWindow2();
  let matrix;
  let curTransform;
  let transformMatrix;
  const curStyle = getComputedStyle2(el);
  if (window2.WebKitCSSMatrix) {
    curTransform = curStyle.transform || curStyle.webkitTransform;
    if (curTransform.split(",").length > 6) {
      curTransform = curTransform.split(", ").map((a) => a.replace(",", ".")).join(", ");
    }
    transformMatrix = new window2.WebKitCSSMatrix(curTransform === "none" ? "" : curTransform);
  } else {
    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue("transform").replace("translate(", "matrix(1, 0, 0, 1,");
    matrix = transformMatrix.toString().split(",");
  }
  if (axis === "x") {
    if (window2.WebKitCSSMatrix) curTransform = transformMatrix.m41;
    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
    else curTransform = parseFloat(matrix[4]);
  }
  if (axis === "y") {
    if (window2.WebKitCSSMatrix) curTransform = transformMatrix.m42;
    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
    else curTransform = parseFloat(matrix[5]);
  }
  return curTransform || 0;
}
function isObject2(o) {
  return typeof o === "object" && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === "Object";
}
function isNode(node) {
  if (typeof window !== "undefined" && typeof window.HTMLElement !== "undefined") {
    return node instanceof HTMLElement;
  }
  return node && (node.nodeType === 1 || node.nodeType === 11);
}
function extend3() {
  const to = Object(arguments.length <= 0 ? void 0 : arguments[0]);
  const noExtend = ["__proto__", "constructor", "prototype"];
  for (let i = 1; i < arguments.length; i += 1) {
    const nextSource = i < 0 || arguments.length <= i ? void 0 : arguments[i];
    if (nextSource !== void 0 && nextSource !== null && !isNode(nextSource)) {
      const keysArray = Object.keys(Object(nextSource)).filter((key) => noExtend.indexOf(key) < 0);
      for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
        const nextKey = keysArray[nextIndex];
        const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
        if (desc !== void 0 && desc.enumerable) {
          if (isObject2(to[nextKey]) && isObject2(nextSource[nextKey])) {
            if (nextSource[nextKey].__swiper__) {
              to[nextKey] = nextSource[nextKey];
            } else {
              extend3(to[nextKey], nextSource[nextKey]);
            }
          } else if (!isObject2(to[nextKey]) && isObject2(nextSource[nextKey])) {
            to[nextKey] = {};
            if (nextSource[nextKey].__swiper__) {
              to[nextKey] = nextSource[nextKey];
            } else {
              extend3(to[nextKey], nextSource[nextKey]);
            }
          } else {
            to[nextKey] = nextSource[nextKey];
          }
        }
      }
    }
  }
  return to;
}
function setCSSProperty(el, varName, varValue) {
  el.style.setProperty(varName, varValue);
}
function animateCSSModeScroll(_ref) {
  let {
    swiper,
    targetPosition,
    side
  } = _ref;
  const window2 = getWindow2();
  const startPosition = -swiper.translate;
  let startTime = null;
  let time;
  const duration = swiper.params.speed;
  swiper.wrapperEl.style.scrollSnapType = "none";
  window2.cancelAnimationFrame(swiper.cssModeFrameID);
  const dir = targetPosition > startPosition ? "next" : "prev";
  const isOutOfBound = (current, target) => {
    return dir === "next" && current >= target || dir === "prev" && current <= target;
  };
  const animate = () => {
    time = (/* @__PURE__ */ new Date()).getTime();
    if (startTime === null) {
      startTime = time;
    }
    const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);
    const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;
    let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);
    if (isOutOfBound(currentPosition, targetPosition)) {
      currentPosition = targetPosition;
    }
    swiper.wrapperEl.scrollTo({
      [side]: currentPosition
    });
    if (isOutOfBound(currentPosition, targetPosition)) {
      swiper.wrapperEl.style.overflow = "hidden";
      swiper.wrapperEl.style.scrollSnapType = "";
      setTimeout(() => {
        swiper.wrapperEl.style.overflow = "";
        swiper.wrapperEl.scrollTo({
          [side]: currentPosition
        });
      });
      window2.cancelAnimationFrame(swiper.cssModeFrameID);
      return;
    }
    swiper.cssModeFrameID = window2.requestAnimationFrame(animate);
  };
  animate();
}
function getSlideTransformEl(slideEl) {
  return slideEl.querySelector(".swiper-slide-transform") || slideEl.shadowRoot && slideEl.shadowRoot.querySelector(".swiper-slide-transform") || slideEl;
}
function elementChildren(element, selector) {
  if (selector === void 0) {
    selector = "";
  }
  return [...element.children].filter((el) => el.matches(selector));
}
function createElement(tag, classes2) {
  if (classes2 === void 0) {
    classes2 = [];
  }
  const el = document.createElement(tag);
  el.classList.add(...Array.isArray(classes2) ? classes2 : [classes2]);
  return el;
}
function elementOffset(el) {
  const window2 = getWindow2();
  const document2 = getDocument2();
  const box = el.getBoundingClientRect();
  const body = document2.body;
  const clientTop = el.clientTop || body.clientTop || 0;
  const clientLeft = el.clientLeft || body.clientLeft || 0;
  const scrollTop = el === window2 ? window2.scrollY : el.scrollTop;
  const scrollLeft = el === window2 ? window2.scrollX : el.scrollLeft;
  return {
    top: box.top + scrollTop - clientTop,
    left: box.left + scrollLeft - clientLeft
  };
}
function elementPrevAll(el, selector) {
  const prevEls = [];
  while (el.previousElementSibling) {
    const prev = el.previousElementSibling;
    if (selector) {
      if (prev.matches(selector)) prevEls.push(prev);
    } else prevEls.push(prev);
    el = prev;
  }
  return prevEls;
}
function elementNextAll(el, selector) {
  const nextEls = [];
  while (el.nextElementSibling) {
    const next = el.nextElementSibling;
    if (selector) {
      if (next.matches(selector)) nextEls.push(next);
    } else nextEls.push(next);
    el = next;
  }
  return nextEls;
}
function elementStyle(el, prop) {
  const window2 = getWindow2();
  return window2.getComputedStyle(el, null).getPropertyValue(prop);
}
function elementIndex(el) {
  let child = el;
  let i;
  if (child) {
    i = 0;
    while ((child = child.previousSibling) !== null) {
      if (child.nodeType === 1) i += 1;
    }
    return i;
  }
  return void 0;
}
function elementParents(el, selector) {
  const parents = [];
  let parent = el.parentElement;
  while (parent) {
    if (selector) {
      if (parent.matches(selector)) parents.push(parent);
    } else {
      parents.push(parent);
    }
    parent = parent.parentElement;
  }
  return parents;
}
function elementTransitionEnd(el, callback) {
  function fireCallBack(e) {
    if (e.target !== el) return;
    callback.call(el, e);
    el.removeEventListener("transitionend", fireCallBack);
  }
  if (callback) {
    el.addEventListener("transitionend", fireCallBack);
  }
}
function elementOuterSize(el, size, includeMargins) {
  const window2 = getWindow2();
  if (includeMargins) {
    return el[size === "width" ? "offsetWidth" : "offsetHeight"] + parseFloat(window2.getComputedStyle(el, null).getPropertyValue(size === "width" ? "margin-right" : "margin-top")) + parseFloat(window2.getComputedStyle(el, null).getPropertyValue(size === "width" ? "margin-left" : "margin-bottom"));
  }
  return el.offsetWidth;
}

// node_modules/framework7/node_modules/swiper/shared/swiper-core.mjs
var support;
function calcSupport() {
  const window2 = getWindow2();
  const document2 = getDocument2();
  return {
    smoothScroll: document2.documentElement && document2.documentElement.style && "scrollBehavior" in document2.documentElement.style,
    touch: !!("ontouchstart" in window2 || window2.DocumentTouch && document2 instanceof window2.DocumentTouch)
  };
}
function getSupport2() {
  if (!support) {
    support = calcSupport();
  }
  return support;
}
var deviceCached;
function calcDevice(_temp) {
  let {
    userAgent
  } = _temp === void 0 ? {} : _temp;
  const support2 = getSupport2();
  const window2 = getWindow2();
  const platform = window2.navigator.platform;
  const ua = userAgent || window2.navigator.userAgent;
  const device = {
    ios: false,
    android: false
  };
  const screenWidth = window2.screen.width;
  const screenHeight = window2.screen.height;
  const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
  let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
  const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
  const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
  const windows = platform === "Win32";
  let macos = platform === "MacIntel";
  const iPadScreens = ["1024x1366", "1366x1024", "834x1194", "1194x834", "834x1112", "1112x834", "768x1024", "1024x768", "820x1180", "1180x820", "810x1080", "1080x810"];
  if (!ipad && macos && support2.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {
    ipad = ua.match(/(Version)\/([\d.]+)/);
    if (!ipad) ipad = [0, 1, "13_0_0"];
    macos = false;
  }
  if (android && !windows) {
    device.os = "android";
    device.android = true;
  }
  if (ipad || iphone || ipod) {
    device.os = "ios";
    device.ios = true;
  }
  return device;
}
function getDevice2(overrides) {
  if (overrides === void 0) {
    overrides = {};
  }
  if (!deviceCached) {
    deviceCached = calcDevice(overrides);
  }
  return deviceCached;
}
var browser;
function calcBrowser() {
  const window2 = getWindow2();
  let needPerspectiveFix = false;
  function isSafari() {
    const ua = window2.navigator.userAgent.toLowerCase();
    return ua.indexOf("safari") >= 0 && ua.indexOf("chrome") < 0 && ua.indexOf("android") < 0;
  }
  if (isSafari()) {
    const ua = String(window2.navigator.userAgent);
    if (ua.includes("Version/")) {
      const [major, minor] = ua.split("Version/")[1].split(" ")[0].split(".").map((num) => Number(num));
      needPerspectiveFix = major < 16 || major === 16 && minor < 2;
    }
  }
  return {
    isSafari: needPerspectiveFix || isSafari(),
    needPerspectiveFix,
    isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window2.navigator.userAgent)
  };
}
function getBrowser() {
  if (!browser) {
    browser = calcBrowser();
  }
  return browser;
}
function Resize(_ref) {
  let {
    swiper,
    on,
    emit
  } = _ref;
  const window2 = getWindow2();
  let observer = null;
  let animationFrame = null;
  const resizeHandler = () => {
    if (!swiper || swiper.destroyed || !swiper.initialized) return;
    emit("beforeResize");
    emit("resize");
  };
  const createObserver = () => {
    if (!swiper || swiper.destroyed || !swiper.initialized) return;
    observer = new ResizeObserver((entries) => {
      animationFrame = window2.requestAnimationFrame(() => {
        const {
          width,
          height
        } = swiper;
        let newWidth = width;
        let newHeight = height;
        entries.forEach((_ref2) => {
          let {
            contentBoxSize,
            contentRect,
            target
          } = _ref2;
          if (target && target !== swiper.el) return;
          newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;
          newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;
        });
        if (newWidth !== width || newHeight !== height) {
          resizeHandler();
        }
      });
    });
    observer.observe(swiper.el);
  };
  const removeObserver = () => {
    if (animationFrame) {
      window2.cancelAnimationFrame(animationFrame);
    }
    if (observer && observer.unobserve && swiper.el) {
      observer.unobserve(swiper.el);
      observer = null;
    }
  };
  const orientationChangeHandler = () => {
    if (!swiper || swiper.destroyed || !swiper.initialized) return;
    emit("orientationchange");
  };
  on("init", () => {
    if (swiper.params.resizeObserver && typeof window2.ResizeObserver !== "undefined") {
      createObserver();
      return;
    }
    window2.addEventListener("resize", resizeHandler);
    window2.addEventListener("orientationchange", orientationChangeHandler);
  });
  on("destroy", () => {
    removeObserver();
    window2.removeEventListener("resize", resizeHandler);
    window2.removeEventListener("orientationchange", orientationChangeHandler);
  });
}
function Observer(_ref) {
  let {
    swiper,
    extendParams,
    on,
    emit
  } = _ref;
  const observers = [];
  const window2 = getWindow2();
  const attach = function(target, options) {
    if (options === void 0) {
      options = {};
    }
    const ObserverFunc = window2.MutationObserver || window2.WebkitMutationObserver;
    const observer = new ObserverFunc((mutations) => {
      if (swiper.__preventObserver__) return;
      if (mutations.length === 1) {
        emit("observerUpdate", mutations[0]);
        return;
      }
      const observerUpdate = function observerUpdate2() {
        emit("observerUpdate", mutations[0]);
      };
      if (window2.requestAnimationFrame) {
        window2.requestAnimationFrame(observerUpdate);
      } else {
        window2.setTimeout(observerUpdate, 0);
      }
    });
    observer.observe(target, {
      attributes: typeof options.attributes === "undefined" ? true : options.attributes,
      childList: typeof options.childList === "undefined" ? true : options.childList,
      characterData: typeof options.characterData === "undefined" ? true : options.characterData
    });
    observers.push(observer);
  };
  const init = () => {
    if (!swiper.params.observer) return;
    if (swiper.params.observeParents) {
      const containerParents = elementParents(swiper.hostEl);
      for (let i = 0; i < containerParents.length; i += 1) {
        attach(containerParents[i]);
      }
    }
    attach(swiper.hostEl, {
      childList: swiper.params.observeSlideChildren
    });
    attach(swiper.wrapperEl, {
      attributes: false
    });
  };
  const destroy = () => {
    observers.forEach((observer) => {
      observer.disconnect();
    });
    observers.splice(0, observers.length);
  };
  extendParams({
    observer: false,
    observeParents: false,
    observeSlideChildren: false
  });
  on("init", init);
  on("destroy", destroy);
}
var eventsEmitter = {
  on(events2, handler, priority) {
    const self = this;
    if (!self.eventsListeners || self.destroyed) return self;
    if (typeof handler !== "function") return self;
    const method = priority ? "unshift" : "push";
    events2.split(" ").forEach((event2) => {
      if (!self.eventsListeners[event2]) self.eventsListeners[event2] = [];
      self.eventsListeners[event2][method](handler);
    });
    return self;
  },
  once(events2, handler, priority) {
    const self = this;
    if (!self.eventsListeners || self.destroyed) return self;
    if (typeof handler !== "function") return self;
    function onceHandler() {
      self.off(events2, onceHandler);
      if (onceHandler.__emitterProxy) {
        delete onceHandler.__emitterProxy;
      }
      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }
      handler.apply(self, args);
    }
    onceHandler.__emitterProxy = handler;
    return self.on(events2, onceHandler, priority);
  },
  onAny(handler, priority) {
    const self = this;
    if (!self.eventsListeners || self.destroyed) return self;
    if (typeof handler !== "function") return self;
    const method = priority ? "unshift" : "push";
    if (self.eventsAnyListeners.indexOf(handler) < 0) {
      self.eventsAnyListeners[method](handler);
    }
    return self;
  },
  offAny(handler) {
    const self = this;
    if (!self.eventsListeners || self.destroyed) return self;
    if (!self.eventsAnyListeners) return self;
    const index = self.eventsAnyListeners.indexOf(handler);
    if (index >= 0) {
      self.eventsAnyListeners.splice(index, 1);
    }
    return self;
  },
  off(events2, handler) {
    const self = this;
    if (!self.eventsListeners || self.destroyed) return self;
    if (!self.eventsListeners) return self;
    events2.split(" ").forEach((event2) => {
      if (typeof handler === "undefined") {
        self.eventsListeners[event2] = [];
      } else if (self.eventsListeners[event2]) {
        self.eventsListeners[event2].forEach((eventHandler, index) => {
          if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {
            self.eventsListeners[event2].splice(index, 1);
          }
        });
      }
    });
    return self;
  },
  emit() {
    const self = this;
    if (!self.eventsListeners || self.destroyed) return self;
    if (!self.eventsListeners) return self;
    let events2;
    let data;
    let context;
    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
      args[_key2] = arguments[_key2];
    }
    if (typeof args[0] === "string" || Array.isArray(args[0])) {
      events2 = args[0];
      data = args.slice(1, args.length);
      context = self;
    } else {
      events2 = args[0].events;
      data = args[0].data;
      context = args[0].context || self;
    }
    data.unshift(context);
    const eventsArray = Array.isArray(events2) ? events2 : events2.split(" ");
    eventsArray.forEach((event2) => {
      if (self.eventsAnyListeners && self.eventsAnyListeners.length) {
        self.eventsAnyListeners.forEach((eventHandler) => {
          eventHandler.apply(context, [event2, ...data]);
        });
      }
      if (self.eventsListeners && self.eventsListeners[event2]) {
        self.eventsListeners[event2].forEach((eventHandler) => {
          eventHandler.apply(context, data);
        });
      }
    });
    return self;
  }
};
function updateSize() {
  const swiper = this;
  let width;
  let height;
  const el = swiper.el;
  if (typeof swiper.params.width !== "undefined" && swiper.params.width !== null) {
    width = swiper.params.width;
  } else {
    width = el.clientWidth;
  }
  if (typeof swiper.params.height !== "undefined" && swiper.params.height !== null) {
    height = swiper.params.height;
  } else {
    height = el.clientHeight;
  }
  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
    return;
  }
  width = width - parseInt(elementStyle(el, "padding-left") || 0, 10) - parseInt(elementStyle(el, "padding-right") || 0, 10);
  height = height - parseInt(elementStyle(el, "padding-top") || 0, 10) - parseInt(elementStyle(el, "padding-bottom") || 0, 10);
  if (Number.isNaN(width)) width = 0;
  if (Number.isNaN(height)) height = 0;
  Object.assign(swiper, {
    width,
    height,
    size: swiper.isHorizontal() ? width : height
  });
}
function updateSlides() {
  const swiper = this;
  function getDirectionLabel(property) {
    if (swiper.isHorizontal()) {
      return property;
    }
    return {
      "width": "height",
      "margin-top": "margin-left",
      "margin-bottom ": "margin-right",
      "margin-left": "margin-top",
      "margin-right": "margin-bottom",
      "padding-left": "padding-top",
      "padding-right": "padding-bottom",
      "marginRight": "marginBottom"
    }[property];
  }
  function getDirectionPropertyValue(node, label) {
    return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);
  }
  const params = swiper.params;
  const {
    wrapperEl,
    slidesEl,
    size: swiperSize,
    rtlTranslate: rtl,
    wrongRTL
  } = swiper;
  const isVirtual = swiper.virtual && params.virtual.enabled;
  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
  const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);
  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
  let snapGrid = [];
  const slidesGrid = [];
  const slidesSizesGrid = [];
  let offsetBefore = params.slidesOffsetBefore;
  if (typeof offsetBefore === "function") {
    offsetBefore = params.slidesOffsetBefore.call(swiper);
  }
  let offsetAfter = params.slidesOffsetAfter;
  if (typeof offsetAfter === "function") {
    offsetAfter = params.slidesOffsetAfter.call(swiper);
  }
  const previousSnapGridLength = swiper.snapGrid.length;
  const previousSlidesGridLength = swiper.slidesGrid.length;
  let spaceBetween = params.spaceBetween;
  let slidePosition = -offsetBefore;
  let prevSlideSize = 0;
  let index = 0;
  if (typeof swiperSize === "undefined") {
    return;
  }
  if (typeof spaceBetween === "string" && spaceBetween.indexOf("%") >= 0) {
    spaceBetween = parseFloat(spaceBetween.replace("%", "")) / 100 * swiperSize;
  } else if (typeof spaceBetween === "string") {
    spaceBetween = parseFloat(spaceBetween);
  }
  swiper.virtualSize = -spaceBetween;
  slides.forEach((slideEl) => {
    if (rtl) {
      slideEl.style.marginLeft = "";
    } else {
      slideEl.style.marginRight = "";
    }
    slideEl.style.marginBottom = "";
    slideEl.style.marginTop = "";
  });
  if (params.centeredSlides && params.cssMode) {
    setCSSProperty(wrapperEl, "--swiper-centered-offset-before", "");
    setCSSProperty(wrapperEl, "--swiper-centered-offset-after", "");
  }
  const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;
  if (gridEnabled) {
    swiper.grid.initSlides(slidesLength);
  }
  let slideSize;
  const shouldResetSlideSize = params.slidesPerView === "auto" && params.breakpoints && Object.keys(params.breakpoints).filter((key) => {
    return typeof params.breakpoints[key].slidesPerView !== "undefined";
  }).length > 0;
  for (let i = 0; i < slidesLength; i += 1) {
    slideSize = 0;
    let slide2;
    if (slides[i]) slide2 = slides[i];
    if (gridEnabled) {
      swiper.grid.updateSlide(i, slide2, slidesLength, getDirectionLabel);
    }
    if (slides[i] && elementStyle(slide2, "display") === "none") continue;
    if (params.slidesPerView === "auto") {
      if (shouldResetSlideSize) {
        slides[i].style[getDirectionLabel("width")] = ``;
      }
      const slideStyles = getComputedStyle(slide2);
      const currentTransform = slide2.style.transform;
      const currentWebKitTransform = slide2.style.webkitTransform;
      if (currentTransform) {
        slide2.style.transform = "none";
      }
      if (currentWebKitTransform) {
        slide2.style.webkitTransform = "none";
      }
      if (params.roundLengths) {
        slideSize = swiper.isHorizontal() ? elementOuterSize(slide2, "width", true) : elementOuterSize(slide2, "height", true);
      } else {
        const width = getDirectionPropertyValue(slideStyles, "width");
        const paddingLeft = getDirectionPropertyValue(slideStyles, "padding-left");
        const paddingRight = getDirectionPropertyValue(slideStyles, "padding-right");
        const marginLeft = getDirectionPropertyValue(slideStyles, "margin-left");
        const marginRight = getDirectionPropertyValue(slideStyles, "margin-right");
        const boxSizing = slideStyles.getPropertyValue("box-sizing");
        if (boxSizing && boxSizing === "border-box") {
          slideSize = width + marginLeft + marginRight;
        } else {
          const {
            clientWidth,
            offsetWidth
          } = slide2;
          slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);
        }
      }
      if (currentTransform) {
        slide2.style.transform = currentTransform;
      }
      if (currentWebKitTransform) {
        slide2.style.webkitTransform = currentWebKitTransform;
      }
      if (params.roundLengths) slideSize = Math.floor(slideSize);
    } else {
      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
      if (params.roundLengths) slideSize = Math.floor(slideSize);
      if (slides[i]) {
        slides[i].style[getDirectionLabel("width")] = `${slideSize}px`;
      }
    }
    if (slides[i]) {
      slides[i].swiperSlideSize = slideSize;
    }
    slidesSizesGrid.push(slideSize);
    if (params.centeredSlides) {
      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
      if (Math.abs(slidePosition) < 1 / 1e3) slidePosition = 0;
      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
      slidesGrid.push(slidePosition);
    } else {
      if (params.roundLengths) slidePosition = Math.floor(slidePosition);
      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
      slidesGrid.push(slidePosition);
      slidePosition = slidePosition + slideSize + spaceBetween;
    }
    swiper.virtualSize += slideSize + spaceBetween;
    prevSlideSize = slideSize;
    index += 1;
  }
  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
  if (rtl && wrongRTL && (params.effect === "slide" || params.effect === "coverflow")) {
    wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;
  }
  if (params.setWrapperSize) {
    wrapperEl.style[getDirectionLabel("width")] = `${swiper.virtualSize + spaceBetween}px`;
  }
  if (gridEnabled) {
    swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);
  }
  if (!params.centeredSlides) {
    const newSlidesGrid = [];
    for (let i = 0; i < snapGrid.length; i += 1) {
      let slidesGridItem = snapGrid[i];
      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
        newSlidesGrid.push(slidesGridItem);
      }
    }
    snapGrid = newSlidesGrid;
    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
      snapGrid.push(swiper.virtualSize - swiperSize);
    }
  }
  if (isVirtual && params.loop) {
    const size = slidesSizesGrid[0] + spaceBetween;
    if (params.slidesPerGroup > 1) {
      const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);
      const groupSize = size * params.slidesPerGroup;
      for (let i = 0; i < groups; i += 1) {
        snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);
      }
    }
    for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {
      if (params.slidesPerGroup === 1) {
        snapGrid.push(snapGrid[snapGrid.length - 1] + size);
      }
      slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);
      swiper.virtualSize += size;
    }
  }
  if (snapGrid.length === 0) snapGrid = [0];
  if (spaceBetween !== 0) {
    const key = swiper.isHorizontal() && rtl ? "marginLeft" : getDirectionLabel("marginRight");
    slides.filter((_, slideIndex) => {
      if (!params.cssMode || params.loop) return true;
      if (slideIndex === slides.length - 1) {
        return false;
      }
      return true;
    }).forEach((slideEl) => {
      slideEl.style[key] = `${spaceBetween}px`;
    });
  }
  if (params.centeredSlides && params.centeredSlidesBounds) {
    let allSlidesSize = 0;
    slidesSizesGrid.forEach((slideSizeValue) => {
      allSlidesSize += slideSizeValue + (spaceBetween || 0);
    });
    allSlidesSize -= spaceBetween;
    const maxSnap = allSlidesSize - swiperSize;
    snapGrid = snapGrid.map((snap) => {
      if (snap <= 0) return -offsetBefore;
      if (snap > maxSnap) return maxSnap + offsetAfter;
      return snap;
    });
  }
  if (params.centerInsufficientSlides) {
    let allSlidesSize = 0;
    slidesSizesGrid.forEach((slideSizeValue) => {
      allSlidesSize += slideSizeValue + (spaceBetween || 0);
    });
    allSlidesSize -= spaceBetween;
    if (allSlidesSize < swiperSize) {
      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;
      snapGrid.forEach((snap, snapIndex) => {
        snapGrid[snapIndex] = snap - allSlidesOffset;
      });
      slidesGrid.forEach((snap, snapIndex) => {
        slidesGrid[snapIndex] = snap + allSlidesOffset;
      });
    }
  }
  Object.assign(swiper, {
    slides,
    snapGrid,
    slidesGrid,
    slidesSizesGrid
  });
  if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {
    setCSSProperty(wrapperEl, "--swiper-centered-offset-before", `${-snapGrid[0]}px`);
    setCSSProperty(wrapperEl, "--swiper-centered-offset-after", `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);
    const addToSnapGrid = -swiper.snapGrid[0];
    const addToSlidesGrid = -swiper.slidesGrid[0];
    swiper.snapGrid = swiper.snapGrid.map((v) => v + addToSnapGrid);
    swiper.slidesGrid = swiper.slidesGrid.map((v) => v + addToSlidesGrid);
  }
  if (slidesLength !== previousSlidesLength) {
    swiper.emit("slidesLengthChange");
  }
  if (snapGrid.length !== previousSnapGridLength) {
    if (swiper.params.watchOverflow) swiper.checkOverflow();
    swiper.emit("snapGridLengthChange");
  }
  if (slidesGrid.length !== previousSlidesGridLength) {
    swiper.emit("slidesGridLengthChange");
  }
  if (params.watchSlidesProgress) {
    swiper.updateSlidesOffset();
  }
  if (!isVirtual && !params.cssMode && (params.effect === "slide" || params.effect === "fade")) {
    const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;
    const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);
    if (slidesLength <= params.maxBackfaceHiddenSlides) {
      if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);
    } else if (hasClassBackfaceClassAdded) {
      swiper.el.classList.remove(backFaceHiddenClass);
    }
  }
}
function updateAutoHeight(speed) {
  const swiper = this;
  const activeSlides = [];
  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
  let newHeight = 0;
  let i;
  if (typeof speed === "number") {
    swiper.setTransition(speed);
  } else if (speed === true) {
    swiper.setTransition(swiper.params.speed);
  }
  const getSlideByIndex = (index) => {
    if (isVirtual) {
      return swiper.slides[swiper.getSlideIndexByData(index)];
    }
    return swiper.slides[index];
  };
  if (swiper.params.slidesPerView !== "auto" && swiper.params.slidesPerView > 1) {
    if (swiper.params.centeredSlides) {
      (swiper.visibleSlides || []).forEach((slide2) => {
        activeSlides.push(slide2);
      });
    } else {
      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
        const index = swiper.activeIndex + i;
        if (index > swiper.slides.length && !isVirtual) break;
        activeSlides.push(getSlideByIndex(index));
      }
    }
  } else {
    activeSlides.push(getSlideByIndex(swiper.activeIndex));
  }
  for (i = 0; i < activeSlides.length; i += 1) {
    if (typeof activeSlides[i] !== "undefined") {
      const height = activeSlides[i].offsetHeight;
      newHeight = height > newHeight ? height : newHeight;
    }
  }
  if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;
}
function updateSlidesOffset() {
  const swiper = this;
  const slides = swiper.slides;
  const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;
  for (let i = 0; i < slides.length; i += 1) {
    slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();
  }
}
function updateSlidesProgress(translate2) {
  if (translate2 === void 0) {
    translate2 = this && this.translate || 0;
  }
  const swiper = this;
  const params = swiper.params;
  const {
    slides,
    rtlTranslate: rtl,
    snapGrid
  } = swiper;
  if (slides.length === 0) return;
  if (typeof slides[0].swiperSlideOffset === "undefined") swiper.updateSlidesOffset();
  let offsetCenter = -translate2;
  if (rtl) offsetCenter = translate2;
  slides.forEach((slideEl) => {
    slideEl.classList.remove(params.slideVisibleClass);
  });
  swiper.visibleSlidesIndexes = [];
  swiper.visibleSlides = [];
  let spaceBetween = params.spaceBetween;
  if (typeof spaceBetween === "string" && spaceBetween.indexOf("%") >= 0) {
    spaceBetween = parseFloat(spaceBetween.replace("%", "")) / 100 * swiper.size;
  } else if (typeof spaceBetween === "string") {
    spaceBetween = parseFloat(spaceBetween);
  }
  for (let i = 0; i < slides.length; i += 1) {
    const slide2 = slides[i];
    let slideOffset = slide2.swiperSlideOffset;
    if (params.cssMode && params.centeredSlides) {
      slideOffset -= slides[0].swiperSlideOffset;
    }
    const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide2.swiperSlideSize + spaceBetween);
    const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide2.swiperSlideSize + spaceBetween);
    const slideBefore = -(offsetCenter - slideOffset);
    const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
    const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
    if (isVisible) {
      swiper.visibleSlides.push(slide2);
      swiper.visibleSlidesIndexes.push(i);
      slides[i].classList.add(params.slideVisibleClass);
    }
    slide2.progress = rtl ? -slideProgress : slideProgress;
    slide2.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;
  }
}
function updateProgress(translate2) {
  const swiper = this;
  if (typeof translate2 === "undefined") {
    const multiplier = swiper.rtlTranslate ? -1 : 1;
    translate2 = swiper && swiper.translate && swiper.translate * multiplier || 0;
  }
  const params = swiper.params;
  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
  let {
    progress,
    isBeginning,
    isEnd,
    progressLoop
  } = swiper;
  const wasBeginning = isBeginning;
  const wasEnd = isEnd;
  if (translatesDiff === 0) {
    progress = 0;
    isBeginning = true;
    isEnd = true;
  } else {
    progress = (translate2 - swiper.minTranslate()) / translatesDiff;
    const isBeginningRounded = Math.abs(translate2 - swiper.minTranslate()) < 1;
    const isEndRounded = Math.abs(translate2 - swiper.maxTranslate()) < 1;
    isBeginning = isBeginningRounded || progress <= 0;
    isEnd = isEndRounded || progress >= 1;
    if (isBeginningRounded) progress = 0;
    if (isEndRounded) progress = 1;
  }
  if (params.loop) {
    const firstSlideIndex = swiper.getSlideIndexByData(0);
    const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);
    const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];
    const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];
    const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];
    const translateAbs = Math.abs(translate2);
    if (translateAbs >= firstSlideTranslate) {
      progressLoop = (translateAbs - firstSlideTranslate) / translateMax;
    } else {
      progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;
    }
    if (progressLoop > 1) progressLoop -= 1;
  }
  Object.assign(swiper, {
    progress,
    progressLoop,
    isBeginning,
    isEnd
  });
  if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate2);
  if (isBeginning && !wasBeginning) {
    swiper.emit("reachBeginning toEdge");
  }
  if (isEnd && !wasEnd) {
    swiper.emit("reachEnd toEdge");
  }
  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
    swiper.emit("fromEdge");
  }
  swiper.emit("progress", progress);
}
function updateSlidesClasses() {
  const swiper = this;
  const {
    slides,
    params,
    slidesEl,
    activeIndex
  } = swiper;
  const isVirtual = swiper.virtual && params.virtual.enabled;
  const getFilteredSlide = (selector) => {
    return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];
  };
  slides.forEach((slideEl) => {
    slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
  });
  let activeSlide;
  if (isVirtual) {
    if (params.loop) {
      let slideIndex = activeIndex - swiper.virtual.slidesBefore;
      if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;
      if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;
      activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`);
    } else {
      activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`);
    }
  } else {
    activeSlide = slides[activeIndex];
  }
  if (activeSlide) {
    activeSlide.classList.add(params.slideActiveClass);
    let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
    if (params.loop && !nextSlide) {
      nextSlide = slides[0];
    }
    if (nextSlide) {
      nextSlide.classList.add(params.slideNextClass);
    }
    let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
    if (params.loop && !prevSlide === 0) {
      prevSlide = slides[slides.length - 1];
    }
    if (prevSlide) {
      prevSlide.classList.add(params.slidePrevClass);
    }
  }
  swiper.emitSlidesClasses();
}
var processLazyPreloader = (swiper, imageEl) => {
  if (!swiper || swiper.destroyed || !swiper.params) return;
  const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;
  const slideEl = imageEl.closest(slideSelector());
  if (slideEl) {
    let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);
    if (!lazyEl && swiper.isElement) {
      if (slideEl.shadowRoot) {
        lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
      } else {
        requestAnimationFrame(() => {
          if (slideEl.shadowRoot) {
            lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
            if (lazyEl) lazyEl.remove();
          }
        });
      }
    }
    if (lazyEl) lazyEl.remove();
  }
};
var unlazy = (swiper, index) => {
  if (!swiper.slides[index]) return;
  const imageEl = swiper.slides[index].querySelector('[loading="lazy"]');
  if (imageEl) imageEl.removeAttribute("loading");
};
var preload = (swiper) => {
  if (!swiper || swiper.destroyed || !swiper.params) return;
  let amount = swiper.params.lazyPreloadPrevNext;
  const len = swiper.slides.length;
  if (!len || !amount || amount < 0) return;
  amount = Math.min(amount, len);
  const slidesPerView = swiper.params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);
  const activeIndex = swiper.activeIndex;
  if (swiper.params.grid && swiper.params.grid.rows > 1) {
    const activeColumn = activeIndex;
    const preloadColumns = [activeColumn - amount];
    preloadColumns.push(...Array.from({
      length: amount
    }).map((_, i) => {
      return activeColumn + slidesPerView + i;
    }));
    swiper.slides.forEach((slideEl, i) => {
      if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);
    });
    return;
  }
  const slideIndexLastInView = activeIndex + slidesPerView - 1;
  if (swiper.params.rewind || swiper.params.loop) {
    for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {
      const realIndex = (i % len + len) % len;
      if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);
    }
  } else {
    for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {
      if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {
        unlazy(swiper, i);
      }
    }
  }
};
function getActiveIndexByTranslate(swiper) {
  const {
    slidesGrid,
    params
  } = swiper;
  const translate2 = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
  let activeIndex;
  for (let i = 0; i < slidesGrid.length; i += 1) {
    if (typeof slidesGrid[i + 1] !== "undefined") {
      if (translate2 >= slidesGrid[i] && translate2 < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
        activeIndex = i;
      } else if (translate2 >= slidesGrid[i] && translate2 < slidesGrid[i + 1]) {
        activeIndex = i + 1;
      }
    } else if (translate2 >= slidesGrid[i]) {
      activeIndex = i;
    }
  }
  if (params.normalizeSlideIndex) {
    if (activeIndex < 0 || typeof activeIndex === "undefined") activeIndex = 0;
  }
  return activeIndex;
}
function updateActiveIndex(newActiveIndex) {
  const swiper = this;
  const translate2 = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
  const {
    snapGrid,
    params,
    activeIndex: previousIndex,
    realIndex: previousRealIndex,
    snapIndex: previousSnapIndex
  } = swiper;
  let activeIndex = newActiveIndex;
  let snapIndex;
  const getVirtualRealIndex = (aIndex) => {
    let realIndex2 = aIndex - swiper.virtual.slidesBefore;
    if (realIndex2 < 0) {
      realIndex2 = swiper.virtual.slides.length + realIndex2;
    }
    if (realIndex2 >= swiper.virtual.slides.length) {
      realIndex2 -= swiper.virtual.slides.length;
    }
    return realIndex2;
  };
  if (typeof activeIndex === "undefined") {
    activeIndex = getActiveIndexByTranslate(swiper);
  }
  if (snapGrid.indexOf(translate2) >= 0) {
    snapIndex = snapGrid.indexOf(translate2);
  } else {
    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
  }
  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
  if (activeIndex === previousIndex) {
    if (snapIndex !== previousSnapIndex) {
      swiper.snapIndex = snapIndex;
      swiper.emit("snapIndexChange");
    }
    if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
      swiper.realIndex = getVirtualRealIndex(activeIndex);
    }
    return;
  }
  let realIndex;
  if (swiper.virtual && params.virtual.enabled && params.loop) {
    realIndex = getVirtualRealIndex(activeIndex);
  } else if (swiper.slides[activeIndex]) {
    realIndex = parseInt(swiper.slides[activeIndex].getAttribute("data-swiper-slide-index") || activeIndex, 10);
  } else {
    realIndex = activeIndex;
  }
  Object.assign(swiper, {
    previousSnapIndex,
    snapIndex,
    previousRealIndex,
    realIndex,
    previousIndex,
    activeIndex
  });
  if (swiper.initialized) {
    preload(swiper);
  }
  swiper.emit("activeIndexChange");
  swiper.emit("snapIndexChange");
  if (swiper.initialized || swiper.params.runCallbacksOnInit) {
    if (previousRealIndex !== realIndex) {
      swiper.emit("realIndexChange");
    }
    swiper.emit("slideChange");
  }
}
function updateClickedSlide(el, path) {
  const swiper = this;
  const params = swiper.params;
  let slide2 = el.closest(`.${params.slideClass}, swiper-slide`);
  if (!slide2 && swiper.isElement && path && path.length > 1 && path.includes(el)) {
    [...path.slice(path.indexOf(el) + 1, path.length)].forEach((pathEl) => {
      if (!slide2 && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {
        slide2 = pathEl;
      }
    });
  }
  let slideFound = false;
  let slideIndex;
  if (slide2) {
    for (let i = 0; i < swiper.slides.length; i += 1) {
      if (swiper.slides[i] === slide2) {
        slideFound = true;
        slideIndex = i;
        break;
      }
    }
  }
  if (slide2 && slideFound) {
    swiper.clickedSlide = slide2;
    if (swiper.virtual && swiper.params.virtual.enabled) {
      swiper.clickedIndex = parseInt(slide2.getAttribute("data-swiper-slide-index"), 10);
    } else {
      swiper.clickedIndex = slideIndex;
    }
  } else {
    swiper.clickedSlide = void 0;
    swiper.clickedIndex = void 0;
    return;
  }
  if (params.slideToClickedSlide && swiper.clickedIndex !== void 0 && swiper.clickedIndex !== swiper.activeIndex) {
    swiper.slideToClickedSlide();
  }
}
var update = {
  updateSize,
  updateSlides,
  updateAutoHeight,
  updateSlidesOffset,
  updateSlidesProgress,
  updateProgress,
  updateSlidesClasses,
  updateActiveIndex,
  updateClickedSlide
};
function getSwiperTranslate(axis) {
  if (axis === void 0) {
    axis = this.isHorizontal() ? "x" : "y";
  }
  const swiper = this;
  const {
    params,
    rtlTranslate: rtl,
    translate: translate2,
    wrapperEl
  } = swiper;
  if (params.virtualTranslate) {
    return rtl ? -translate2 : translate2;
  }
  if (params.cssMode) {
    return translate2;
  }
  let currentTranslate = getTranslate2(wrapperEl, axis);
  currentTranslate += swiper.cssOverflowAdjustment();
  if (rtl) currentTranslate = -currentTranslate;
  return currentTranslate || 0;
}
function setTranslate(translate2, byController) {
  const swiper = this;
  const {
    rtlTranslate: rtl,
    params,
    wrapperEl,
    progress
  } = swiper;
  let x = 0;
  let y = 0;
  const z = 0;
  if (swiper.isHorizontal()) {
    x = rtl ? -translate2 : translate2;
  } else {
    y = translate2;
  }
  if (params.roundLengths) {
    x = Math.floor(x);
    y = Math.floor(y);
  }
  swiper.previousTranslate = swiper.translate;
  swiper.translate = swiper.isHorizontal() ? x : y;
  if (params.cssMode) {
    wrapperEl[swiper.isHorizontal() ? "scrollLeft" : "scrollTop"] = swiper.isHorizontal() ? -x : -y;
  } else if (!params.virtualTranslate) {
    if (swiper.isHorizontal()) {
      x -= swiper.cssOverflowAdjustment();
    } else {
      y -= swiper.cssOverflowAdjustment();
    }
    wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;
  }
  let newProgress;
  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
  if (translatesDiff === 0) {
    newProgress = 0;
  } else {
    newProgress = (translate2 - swiper.minTranslate()) / translatesDiff;
  }
  if (newProgress !== progress) {
    swiper.updateProgress(translate2);
  }
  swiper.emit("setTranslate", swiper.translate, byController);
}
function minTranslate() {
  return -this.snapGrid[0];
}
function maxTranslate() {
  return -this.snapGrid[this.snapGrid.length - 1];
}
function translateTo(translate2, speed, runCallbacks, translateBounds, internal) {
  if (translate2 === void 0) {
    translate2 = 0;
  }
  if (speed === void 0) {
    speed = this.params.speed;
  }
  if (runCallbacks === void 0) {
    runCallbacks = true;
  }
  if (translateBounds === void 0) {
    translateBounds = true;
  }
  const swiper = this;
  const {
    params,
    wrapperEl
  } = swiper;
  if (swiper.animating && params.preventInteractionOnTransition) {
    return false;
  }
  const minTranslate2 = swiper.minTranslate();
  const maxTranslate2 = swiper.maxTranslate();
  let newTranslate;
  if (translateBounds && translate2 > minTranslate2) newTranslate = minTranslate2;
  else if (translateBounds && translate2 < maxTranslate2) newTranslate = maxTranslate2;
  else newTranslate = translate2;
  swiper.updateProgress(newTranslate);
  if (params.cssMode) {
    const isH = swiper.isHorizontal();
    if (speed === 0) {
      wrapperEl[isH ? "scrollLeft" : "scrollTop"] = -newTranslate;
    } else {
      if (!swiper.support.smoothScroll) {
        animateCSSModeScroll({
          swiper,
          targetPosition: -newTranslate,
          side: isH ? "left" : "top"
        });
        return true;
      }
      wrapperEl.scrollTo({
        [isH ? "left" : "top"]: -newTranslate,
        behavior: "smooth"
      });
    }
    return true;
  }
  if (speed === 0) {
    swiper.setTransition(0);
    swiper.setTranslate(newTranslate);
    if (runCallbacks) {
      swiper.emit("beforeTransitionStart", speed, internal);
      swiper.emit("transitionEnd");
    }
  } else {
    swiper.setTransition(speed);
    swiper.setTranslate(newTranslate);
    if (runCallbacks) {
      swiper.emit("beforeTransitionStart", speed, internal);
      swiper.emit("transitionStart");
    }
    if (!swiper.animating) {
      swiper.animating = true;
      if (!swiper.onTranslateToWrapperTransitionEnd) {
        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd2(e) {
          if (!swiper || swiper.destroyed) return;
          if (e.target !== this) return;
          swiper.wrapperEl.removeEventListener("transitionend", swiper.onTranslateToWrapperTransitionEnd);
          swiper.onTranslateToWrapperTransitionEnd = null;
          delete swiper.onTranslateToWrapperTransitionEnd;
          if (runCallbacks) {
            swiper.emit("transitionEnd");
          }
        };
      }
      swiper.wrapperEl.addEventListener("transitionend", swiper.onTranslateToWrapperTransitionEnd);
    }
  }
  return true;
}
var translate = {
  getTranslate: getSwiperTranslate,
  setTranslate,
  minTranslate,
  maxTranslate,
  translateTo
};
function setTransition(duration, byController) {
  const swiper = this;
  if (!swiper.params.cssMode) {
    swiper.wrapperEl.style.transitionDuration = `${duration}ms`;
    swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : "";
  }
  swiper.emit("setTransition", duration, byController);
}
function transitionEmit(_ref) {
  let {
    swiper,
    runCallbacks,
    direction,
    step
  } = _ref;
  const {
    activeIndex,
    previousIndex
  } = swiper;
  let dir = direction;
  if (!dir) {
    if (activeIndex > previousIndex) dir = "next";
    else if (activeIndex < previousIndex) dir = "prev";
    else dir = "reset";
  }
  swiper.emit(`transition${step}`);
  if (runCallbacks && activeIndex !== previousIndex) {
    if (dir === "reset") {
      swiper.emit(`slideResetTransition${step}`);
      return;
    }
    swiper.emit(`slideChangeTransition${step}`);
    if (dir === "next") {
      swiper.emit(`slideNextTransition${step}`);
    } else {
      swiper.emit(`slidePrevTransition${step}`);
    }
  }
}
function transitionStart(runCallbacks, direction) {
  if (runCallbacks === void 0) {
    runCallbacks = true;
  }
  const swiper = this;
  const {
    params
  } = swiper;
  if (params.cssMode) return;
  if (params.autoHeight) {
    swiper.updateAutoHeight();
  }
  transitionEmit({
    swiper,
    runCallbacks,
    direction,
    step: "Start"
  });
}
function transitionEnd(runCallbacks, direction) {
  if (runCallbacks === void 0) {
    runCallbacks = true;
  }
  const swiper = this;
  const {
    params
  } = swiper;
  swiper.animating = false;
  if (params.cssMode) return;
  swiper.setTransition(0);
  transitionEmit({
    swiper,
    runCallbacks,
    direction,
    step: "End"
  });
}
var transition = {
  setTransition,
  transitionStart,
  transitionEnd
};
function slideTo(index, speed, runCallbacks, internal, initial) {
  if (index === void 0) {
    index = 0;
  }
  if (speed === void 0) {
    speed = this.params.speed;
  }
  if (runCallbacks === void 0) {
    runCallbacks = true;
  }
  if (typeof index === "string") {
    index = parseInt(index, 10);
  }
  const swiper = this;
  let slideIndex = index;
  if (slideIndex < 0) slideIndex = 0;
  const {
    params,
    snapGrid,
    slidesGrid,
    previousIndex,
    activeIndex,
    rtlTranslate: rtl,
    wrapperEl,
    enabled
  } = swiper;
  if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {
    return false;
  }
  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
  const translate2 = -snapGrid[snapIndex];
  if (params.normalizeSlideIndex) {
    for (let i = 0; i < slidesGrid.length; i += 1) {
      const normalizedTranslate = -Math.floor(translate2 * 100);
      const normalizedGrid = Math.floor(slidesGrid[i] * 100);
      const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);
      if (typeof slidesGrid[i + 1] !== "undefined") {
        if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {
          slideIndex = i;
        } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {
          slideIndex = i + 1;
        }
      } else if (normalizedTranslate >= normalizedGrid) {
        slideIndex = i;
      }
    }
  }
  if (swiper.initialized && slideIndex !== activeIndex) {
    if (!swiper.allowSlideNext && (rtl ? translate2 > swiper.translate && translate2 > swiper.minTranslate() : translate2 < swiper.translate && translate2 < swiper.minTranslate())) {
      return false;
    }
    if (!swiper.allowSlidePrev && translate2 > swiper.translate && translate2 > swiper.maxTranslate()) {
      if ((activeIndex || 0) !== slideIndex) {
        return false;
      }
    }
  }
  if (slideIndex !== (previousIndex || 0) && runCallbacks) {
    swiper.emit("beforeSlideChangeStart");
  }
  swiper.updateProgress(translate2);
  let direction;
  if (slideIndex > activeIndex) direction = "next";
  else if (slideIndex < activeIndex) direction = "prev";
  else direction = "reset";
  if (rtl && -translate2 === swiper.translate || !rtl && translate2 === swiper.translate) {
    swiper.updateActiveIndex(slideIndex);
    if (params.autoHeight) {
      swiper.updateAutoHeight();
    }
    swiper.updateSlidesClasses();
    if (params.effect !== "slide") {
      swiper.setTranslate(translate2);
    }
    if (direction !== "reset") {
      swiper.transitionStart(runCallbacks, direction);
      swiper.transitionEnd(runCallbacks, direction);
    }
    return false;
  }
  if (params.cssMode) {
    const isH = swiper.isHorizontal();
    const t = rtl ? translate2 : -translate2;
    if (speed === 0) {
      const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
      if (isVirtual) {
        swiper.wrapperEl.style.scrollSnapType = "none";
        swiper._immediateVirtual = true;
      }
      if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {
        swiper._cssModeVirtualInitialSet = true;
        requestAnimationFrame(() => {
          wrapperEl[isH ? "scrollLeft" : "scrollTop"] = t;
        });
      } else {
        wrapperEl[isH ? "scrollLeft" : "scrollTop"] = t;
      }
      if (isVirtual) {
        requestAnimationFrame(() => {
          swiper.wrapperEl.style.scrollSnapType = "";
          swiper._immediateVirtual = false;
        });
      }
    } else {
      if (!swiper.support.smoothScroll) {
        animateCSSModeScroll({
          swiper,
          targetPosition: t,
          side: isH ? "left" : "top"
        });
        return true;
      }
      wrapperEl.scrollTo({
        [isH ? "left" : "top"]: t,
        behavior: "smooth"
      });
    }
    return true;
  }
  swiper.setTransition(speed);
  swiper.setTranslate(translate2);
  swiper.updateActiveIndex(slideIndex);
  swiper.updateSlidesClasses();
  swiper.emit("beforeTransitionStart", speed, internal);
  swiper.transitionStart(runCallbacks, direction);
  if (speed === 0) {
    swiper.transitionEnd(runCallbacks, direction);
  } else if (!swiper.animating) {
    swiper.animating = true;
    if (!swiper.onSlideToWrapperTransitionEnd) {
      swiper.onSlideToWrapperTransitionEnd = function transitionEnd2(e) {
        if (!swiper || swiper.destroyed) return;
        if (e.target !== this) return;
        swiper.wrapperEl.removeEventListener("transitionend", swiper.onSlideToWrapperTransitionEnd);
        swiper.onSlideToWrapperTransitionEnd = null;
        delete swiper.onSlideToWrapperTransitionEnd;
        swiper.transitionEnd(runCallbacks, direction);
      };
    }
    swiper.wrapperEl.addEventListener("transitionend", swiper.onSlideToWrapperTransitionEnd);
  }
  return true;
}
function slideToLoop(index, speed, runCallbacks, internal) {
  if (index === void 0) {
    index = 0;
  }
  if (speed === void 0) {
    speed = this.params.speed;
  }
  if (runCallbacks === void 0) {
    runCallbacks = true;
  }
  if (typeof index === "string") {
    const indexAsNumber = parseInt(index, 10);
    index = indexAsNumber;
  }
  const swiper = this;
  let newIndex = index;
  if (swiper.params.loop) {
    if (swiper.virtual && swiper.params.virtual.enabled) {
      newIndex = newIndex + swiper.virtual.slidesBefore;
    } else {
      newIndex = swiper.getSlideIndexByData(newIndex);
    }
  }
  return swiper.slideTo(newIndex, speed, runCallbacks, internal);
}
function slideNext(speed, runCallbacks, internal) {
  if (speed === void 0) {
    speed = this.params.speed;
  }
  if (runCallbacks === void 0) {
    runCallbacks = true;
  }
  const swiper = this;
  const {
    enabled,
    params,
    animating
  } = swiper;
  if (!enabled) return swiper;
  let perGroup = params.slidesPerGroup;
  if (params.slidesPerView === "auto" && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
    perGroup = Math.max(swiper.slidesPerViewDynamic("current", true), 1);
  }
  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;
  const isVirtual = swiper.virtual && params.virtual.enabled;
  if (params.loop) {
    if (animating && !isVirtual && params.loopPreventsSliding) return false;
    swiper.loopFix({
      direction: "next"
    });
    swiper._clientLeft = swiper.wrapperEl.clientLeft;
    if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {
      requestAnimationFrame(() => {
        swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
      });
      return true;
    }
  }
  if (params.rewind && swiper.isEnd) {
    return swiper.slideTo(0, speed, runCallbacks, internal);
  }
  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
}
function slidePrev(speed, runCallbacks, internal) {
  if (speed === void 0) {
    speed = this.params.speed;
  }
  if (runCallbacks === void 0) {
    runCallbacks = true;
  }
  const swiper = this;
  const {
    params,
    snapGrid,
    slidesGrid,
    rtlTranslate,
    enabled,
    animating
  } = swiper;
  if (!enabled) return swiper;
  const isVirtual = swiper.virtual && params.virtual.enabled;
  if (params.loop) {
    if (animating && !isVirtual && params.loopPreventsSliding) return false;
    swiper.loopFix({
      direction: "prev"
    });
    swiper._clientLeft = swiper.wrapperEl.clientLeft;
  }
  const translate2 = rtlTranslate ? swiper.translate : -swiper.translate;
  function normalize(val) {
    if (val < 0) return -Math.floor(Math.abs(val));
    return Math.floor(val);
  }
  const normalizedTranslate = normalize(translate2);
  const normalizedSnapGrid = snapGrid.map((val) => normalize(val));
  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
  if (typeof prevSnap === "undefined" && params.cssMode) {
    let prevSnapIndex;
    snapGrid.forEach((snap, snapIndex) => {
      if (normalizedTranslate >= snap) {
        prevSnapIndex = snapIndex;
      }
    });
    if (typeof prevSnapIndex !== "undefined") {
      prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];
    }
  }
  let prevIndex = 0;
  if (typeof prevSnap !== "undefined") {
    prevIndex = slidesGrid.indexOf(prevSnap);
    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
    if (params.slidesPerView === "auto" && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
      prevIndex = prevIndex - swiper.slidesPerViewDynamic("previous", true) + 1;
      prevIndex = Math.max(prevIndex, 0);
    }
  }
  if (params.rewind && swiper.isBeginning) {
    const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
    return swiper.slideTo(lastIndex, speed, runCallbacks, internal);
  } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {
    requestAnimationFrame(() => {
      swiper.slideTo(prevIndex, speed, runCallbacks, internal);
    });
    return true;
  }
  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
}
function slideReset(speed, runCallbacks, internal) {
  if (speed === void 0) {
    speed = this.params.speed;
  }
  if (runCallbacks === void 0) {
    runCallbacks = true;
  }
  const swiper = this;
  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
}
function slideToClosest(speed, runCallbacks, internal, threshold) {
  if (speed === void 0) {
    speed = this.params.speed;
  }
  if (runCallbacks === void 0) {
    runCallbacks = true;
  }
  if (threshold === void 0) {
    threshold = 0.5;
  }
  const swiper = this;
  let index = swiper.activeIndex;
  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
  const translate2 = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
  if (translate2 >= swiper.snapGrid[snapIndex]) {
    const currentSnap = swiper.snapGrid[snapIndex];
    const nextSnap = swiper.snapGrid[snapIndex + 1];
    if (translate2 - currentSnap > (nextSnap - currentSnap) * threshold) {
      index += swiper.params.slidesPerGroup;
    }
  } else {
    const prevSnap = swiper.snapGrid[snapIndex - 1];
    const currentSnap = swiper.snapGrid[snapIndex];
    if (translate2 - prevSnap <= (currentSnap - prevSnap) * threshold) {
      index -= swiper.params.slidesPerGroup;
    }
  }
  index = Math.max(index, 0);
  index = Math.min(index, swiper.slidesGrid.length - 1);
  return swiper.slideTo(index, speed, runCallbacks, internal);
}
function slideToClickedSlide() {
  const swiper = this;
  const {
    params,
    slidesEl
  } = swiper;
  const slidesPerView = params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : params.slidesPerView;
  let slideToIndex = swiper.clickedIndex;
  let realIndex;
  const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;
  if (params.loop) {
    if (swiper.animating) return;
    realIndex = parseInt(swiper.clickedSlide.getAttribute("data-swiper-slide-index"), 10);
    if (params.centeredSlides) {
      if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
        swiper.loopFix();
        slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
        nextTick2(() => {
          swiper.slideTo(slideToIndex);
        });
      } else {
        swiper.slideTo(slideToIndex);
      }
    } else if (slideToIndex > swiper.slides.length - slidesPerView) {
      swiper.loopFix();
      slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
      nextTick2(() => {
        swiper.slideTo(slideToIndex);
      });
    } else {
      swiper.slideTo(slideToIndex);
    }
  } else {
    swiper.slideTo(slideToIndex);
  }
}
var slide = {
  slideTo,
  slideToLoop,
  slideNext,
  slidePrev,
  slideReset,
  slideToClosest,
  slideToClickedSlide
};
function loopCreate(slideRealIndex) {
  const swiper = this;
  const {
    params,
    slidesEl
  } = swiper;
  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;
  const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
  slides.forEach((el, index) => {
    el.setAttribute("data-swiper-slide-index", index);
  });
  swiper.loopFix({
    slideRealIndex,
    direction: params.centeredSlides ? void 0 : "next"
  });
}
function loopFix(_temp) {
  let {
    slideRealIndex,
    slideTo: slideTo2 = true,
    direction,
    setTranslate: setTranslate2,
    activeSlideIndex,
    byController,
    byMousewheel
  } = _temp === void 0 ? {} : _temp;
  const swiper = this;
  if (!swiper.params.loop) return;
  swiper.emit("beforeLoopFix");
  const {
    slides,
    allowSlidePrev,
    allowSlideNext,
    slidesEl,
    params
  } = swiper;
  swiper.allowSlidePrev = true;
  swiper.allowSlideNext = true;
  if (swiper.virtual && params.virtual.enabled) {
    if (slideTo2) {
      if (!params.centeredSlides && swiper.snapIndex === 0) {
        swiper.slideTo(swiper.virtual.slides.length, 0, false, true);
      } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {
        swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);
      } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {
        swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);
      }
    }
    swiper.allowSlidePrev = allowSlidePrev;
    swiper.allowSlideNext = allowSlideNext;
    swiper.emit("loopFix");
    return;
  }
  const slidesPerView = params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));
  let loopedSlides = params.loopedSlides || slidesPerView;
  if (loopedSlides % params.slidesPerGroup !== 0) {
    loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;
  }
  swiper.loopedSlides = loopedSlides;
  const prependSlidesIndexes = [];
  const appendSlidesIndexes = [];
  let activeIndex = swiper.activeIndex;
  if (typeof activeSlideIndex === "undefined") {
    activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter((el) => el.classList.contains(params.slideActiveClass))[0]);
  } else {
    activeIndex = activeSlideIndex;
  }
  const isNext = direction === "next" || !direction;
  const isPrev = direction === "prev" || !direction;
  let slidesPrepended = 0;
  let slidesAppended = 0;
  if (activeSlideIndex < loopedSlides) {
    slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);
    for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {
      const index = i - Math.floor(i / slides.length) * slides.length;
      prependSlidesIndexes.push(slides.length - index - 1);
    }
  } else if (activeSlideIndex > swiper.slides.length - loopedSlides * 2) {
    slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup);
    for (let i = 0; i < slidesAppended; i += 1) {
      const index = i - Math.floor(i / slides.length) * slides.length;
      appendSlidesIndexes.push(index);
    }
  }
  if (isPrev) {
    prependSlidesIndexes.forEach((index) => {
      swiper.slides[index].swiperLoopMoveDOM = true;
      slidesEl.prepend(swiper.slides[index]);
      swiper.slides[index].swiperLoopMoveDOM = false;
    });
  }
  if (isNext) {
    appendSlidesIndexes.forEach((index) => {
      swiper.slides[index].swiperLoopMoveDOM = true;
      slidesEl.append(swiper.slides[index]);
      swiper.slides[index].swiperLoopMoveDOM = false;
    });
  }
  swiper.recalcSlides();
  if (params.slidesPerView === "auto") {
    swiper.updateSlides();
  }
  if (params.watchSlidesProgress) {
    swiper.updateSlidesOffset();
  }
  if (slideTo2) {
    if (prependSlidesIndexes.length > 0 && isPrev) {
      if (typeof slideRealIndex === "undefined") {
        const currentSlideTranslate = swiper.slidesGrid[activeIndex];
        const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];
        const diff = newSlideTranslate - currentSlideTranslate;
        if (byMousewheel) {
          swiper.setTranslate(swiper.translate - diff);
        } else {
          swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);
          if (setTranslate2) {
            swiper.touches[swiper.isHorizontal() ? "startX" : "startY"] += diff;
            swiper.touchEventsData.currentTranslate = swiper.translate;
          }
        }
      } else {
        if (setTranslate2) {
          swiper.slideToLoop(slideRealIndex, 0, false, true);
          swiper.touchEventsData.currentTranslate = swiper.translate;
        }
      }
    } else if (appendSlidesIndexes.length > 0 && isNext) {
      if (typeof slideRealIndex === "undefined") {
        const currentSlideTranslate = swiper.slidesGrid[activeIndex];
        const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];
        const diff = newSlideTranslate - currentSlideTranslate;
        if (byMousewheel) {
          swiper.setTranslate(swiper.translate - diff);
        } else {
          swiper.slideTo(activeIndex - slidesAppended, 0, false, true);
          if (setTranslate2) {
            swiper.touches[swiper.isHorizontal() ? "startX" : "startY"] += diff;
            swiper.touchEventsData.currentTranslate = swiper.translate;
          }
        }
      } else {
        swiper.slideToLoop(slideRealIndex, 0, false, true);
      }
    }
  }
  swiper.allowSlidePrev = allowSlidePrev;
  swiper.allowSlideNext = allowSlideNext;
  if (swiper.controller && swiper.controller.control && !byController) {
    const loopParams = {
      slideRealIndex,
      direction,
      setTranslate: setTranslate2,
      activeSlideIndex,
      byController: true
    };
    if (Array.isArray(swiper.controller.control)) {
      swiper.controller.control.forEach((c) => {
        if (!c.destroyed && c.params.loop) c.loopFix({
          ...loopParams,
          slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo2 : false
        });
      });
    } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {
      swiper.controller.control.loopFix({
        ...loopParams,
        slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo2 : false
      });
    }
  }
  swiper.emit("loopFix");
}
function loopDestroy() {
  const swiper = this;
  const {
    params,
    slidesEl
  } = swiper;
  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;
  swiper.recalcSlides();
  const newSlidesOrder = [];
  swiper.slides.forEach((slideEl) => {
    const index = typeof slideEl.swiperSlideIndex === "undefined" ? slideEl.getAttribute("data-swiper-slide-index") * 1 : slideEl.swiperSlideIndex;
    newSlidesOrder[index] = slideEl;
  });
  swiper.slides.forEach((slideEl) => {
    slideEl.removeAttribute("data-swiper-slide-index");
  });
  newSlidesOrder.forEach((slideEl) => {
    slidesEl.append(slideEl);
  });
  swiper.recalcSlides();
  swiper.slideTo(swiper.realIndex, 0);
}
var loop = {
  loopCreate,
  loopFix,
  loopDestroy
};
function setGrabCursor(moving) {
  const swiper = this;
  if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;
  const el = swiper.params.touchEventsTarget === "container" ? swiper.el : swiper.wrapperEl;
  if (swiper.isElement) {
    swiper.__preventObserver__ = true;
  }
  el.style.cursor = "move";
  el.style.cursor = moving ? "grabbing" : "grab";
  if (swiper.isElement) {
    requestAnimationFrame(() => {
      swiper.__preventObserver__ = false;
    });
  }
}
function unsetGrabCursor() {
  const swiper = this;
  if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {
    return;
  }
  if (swiper.isElement) {
    swiper.__preventObserver__ = true;
  }
  swiper[swiper.params.touchEventsTarget === "container" ? "el" : "wrapperEl"].style.cursor = "";
  if (swiper.isElement) {
    requestAnimationFrame(() => {
      swiper.__preventObserver__ = false;
    });
  }
}
var grabCursor = {
  setGrabCursor,
  unsetGrabCursor
};
function closestElement(selector, base) {
  if (base === void 0) {
    base = this;
  }
  function __closestFrom(el) {
    if (!el || el === getDocument2() || el === getWindow2()) return null;
    if (el.assignedSlot) el = el.assignedSlot;
    const found = el.closest(selector);
    if (!found && !el.getRootNode) {
      return null;
    }
    return found || __closestFrom(el.getRootNode().host);
  }
  return __closestFrom(base);
}
function onTouchStart(event2) {
  const swiper = this;
  const document2 = getDocument2();
  const window2 = getWindow2();
  const data = swiper.touchEventsData;
  data.evCache.push(event2);
  const {
    params,
    touches,
    enabled
  } = swiper;
  if (!enabled) return;
  if (!params.simulateTouch && event2.pointerType === "mouse") return;
  if (swiper.animating && params.preventInteractionOnTransition) {
    return;
  }
  if (!swiper.animating && params.cssMode && params.loop) {
    swiper.loopFix();
  }
  let e = event2;
  if (e.originalEvent) e = e.originalEvent;
  let targetEl = e.target;
  if (params.touchEventsTarget === "wrapper") {
    if (!swiper.wrapperEl.contains(targetEl)) return;
  }
  if ("which" in e && e.which === 3) return;
  if ("button" in e && e.button > 0) return;
  if (data.isTouched && data.isMoved) return;
  const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== "";
  const eventPath = event2.composedPath ? event2.composedPath() : event2.path;
  if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {
    targetEl = eventPath[0];
  }
  const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;
  const isTargetShadow = !!(e.target && e.target.shadowRoot);
  if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {
    swiper.allowClick = true;
    return;
  }
  if (params.swipeHandler) {
    if (!targetEl.closest(params.swipeHandler)) return;
  }
  touches.currentX = e.pageX;
  touches.currentY = e.pageY;
  const startX = touches.currentX;
  const startY = touches.currentY;
  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window2.innerWidth - edgeSwipeThreshold)) {
    if (edgeSwipeDetection === "prevent") {
      event2.preventDefault();
    } else {
      return;
    }
  }
  Object.assign(data, {
    isTouched: true,
    isMoved: false,
    allowTouchCallbacks: true,
    isScrolling: void 0,
    startMoving: void 0
  });
  touches.startX = startX;
  touches.startY = startY;
  data.touchStartTime = now2();
  swiper.allowClick = true;
  swiper.updateSize();
  swiper.swipeDirection = void 0;
  if (params.threshold > 0) data.allowThresholdMove = false;
  let preventDefault = true;
  if (targetEl.matches(data.focusableElements)) {
    preventDefault = false;
    if (targetEl.nodeName === "SELECT") {
      data.isTouched = false;
    }
  }
  if (document2.activeElement && document2.activeElement.matches(data.focusableElements) && document2.activeElement !== targetEl) {
    document2.activeElement.blur();
  }
  const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
  if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {
    e.preventDefault();
  }
  if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {
    swiper.freeMode.onTouchStart();
  }
  swiper.emit("touchStart", e);
}
function onTouchMove(event2) {
  const document2 = getDocument2();
  const swiper = this;
  const data = swiper.touchEventsData;
  const {
    params,
    touches,
    rtlTranslate: rtl,
    enabled
  } = swiper;
  if (!enabled) return;
  if (!params.simulateTouch && event2.pointerType === "mouse") return;
  let e = event2;
  if (e.originalEvent) e = e.originalEvent;
  if (!data.isTouched) {
    if (data.startMoving && data.isScrolling) {
      swiper.emit("touchMoveOpposite", e);
    }
    return;
  }
  const pointerIndex = data.evCache.findIndex((cachedEv) => cachedEv.pointerId === e.pointerId);
  if (pointerIndex >= 0) data.evCache[pointerIndex] = e;
  const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;
  const pageX = targetTouch.pageX;
  const pageY = targetTouch.pageY;
  if (e.preventedByNestedSwiper) {
    touches.startX = pageX;
    touches.startY = pageY;
    return;
  }
  if (!swiper.allowTouchMove) {
    if (!e.target.matches(data.focusableElements)) {
      swiper.allowClick = false;
    }
    if (data.isTouched) {
      Object.assign(touches, {
        startX: pageX,
        startY: pageY,
        prevX: swiper.touches.currentX,
        prevY: swiper.touches.currentY,
        currentX: pageX,
        currentY: pageY
      });
      data.touchStartTime = now2();
    }
    return;
  }
  if (params.touchReleaseOnEdges && !params.loop) {
    if (swiper.isVertical()) {
      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
        data.isTouched = false;
        data.isMoved = false;
        return;
      }
    } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {
      return;
    }
  }
  if (document2.activeElement) {
    if (e.target === document2.activeElement && e.target.matches(data.focusableElements)) {
      data.isMoved = true;
      swiper.allowClick = false;
      return;
    }
  }
  if (data.allowTouchCallbacks) {
    swiper.emit("touchMove", e);
  }
  if (e.targetTouches && e.targetTouches.length > 1) return;
  touches.currentX = pageX;
  touches.currentY = pageY;
  const diffX = touches.currentX - touches.startX;
  const diffY = touches.currentY - touches.startY;
  if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;
  if (typeof data.isScrolling === "undefined") {
    let touchAngle;
    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
      data.isScrolling = false;
    } else {
      if (diffX * diffX + diffY * diffY >= 25) {
        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;
      }
    }
  }
  if (data.isScrolling) {
    swiper.emit("touchMoveOpposite", e);
  }
  if (typeof data.startMoving === "undefined") {
    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
      data.startMoving = true;
    }
  }
  if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {
    data.isTouched = false;
    return;
  }
  if (!data.startMoving) {
    return;
  }
  swiper.allowClick = false;
  if (!params.cssMode && e.cancelable) {
    e.preventDefault();
  }
  if (params.touchMoveStopPropagation && !params.nested) {
    e.stopPropagation();
  }
  let diff = swiper.isHorizontal() ? diffX : diffY;
  let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;
  if (params.oneWayMovement) {
    diff = Math.abs(diff) * (rtl ? 1 : -1);
    touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);
  }
  touches.diff = diff;
  diff *= params.touchRatio;
  if (rtl) {
    diff = -diff;
    touchesDiff = -touchesDiff;
  }
  const prevTouchesDirection = swiper.touchesDirection;
  swiper.swipeDirection = diff > 0 ? "prev" : "next";
  swiper.touchesDirection = touchesDiff > 0 ? "prev" : "next";
  const isLoop = swiper.params.loop && !params.cssMode;
  const allowLoopFix = swiper.swipeDirection === "next" && swiper.allowSlideNext || swiper.swipeDirection === "prev" && swiper.allowSlidePrev;
  if (!data.isMoved) {
    if (isLoop && allowLoopFix) {
      swiper.loopFix({
        direction: swiper.swipeDirection
      });
    }
    data.startTranslate = swiper.getTranslate();
    swiper.setTransition(0);
    if (swiper.animating) {
      const evt = new window.CustomEvent("transitionend", {
        bubbles: true,
        cancelable: true
      });
      swiper.wrapperEl.dispatchEvent(evt);
    }
    data.allowMomentumBounce = false;
    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
      swiper.setGrabCursor(true);
    }
    swiper.emit("sliderFirstMove", e);
  }
  let loopFixed;
  if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {
    swiper.loopFix({
      direction: swiper.swipeDirection,
      setTranslate: true
    });
    loopFixed = true;
  }
  swiper.emit("sliderMove", e);
  data.isMoved = true;
  data.currentTranslate = diff + data.startTranslate;
  let disableParentSwiper = true;
  let resistanceRatio = params.resistanceRatio;
  if (params.touchReleaseOnEdges) {
    resistanceRatio = 0;
  }
  if (diff > 0) {
    if (isLoop && allowLoopFix && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {
      swiper.loopFix({
        direction: "prev",
        setTranslate: true,
        activeSlideIndex: 0
      });
    }
    if (data.currentTranslate > swiper.minTranslate()) {
      disableParentSwiper = false;
      if (params.resistance) {
        data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;
      }
    }
  } else if (diff < 0) {
    if (isLoop && allowLoopFix && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {
      swiper.loopFix({
        direction: "next",
        setTranslate: true,
        activeSlideIndex: swiper.slides.length - (params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))
      });
    }
    if (data.currentTranslate < swiper.maxTranslate()) {
      disableParentSwiper = false;
      if (params.resistance) {
        data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;
      }
    }
  }
  if (disableParentSwiper) {
    e.preventedByNestedSwiper = true;
  }
  if (!swiper.allowSlideNext && swiper.swipeDirection === "next" && data.currentTranslate < data.startTranslate) {
    data.currentTranslate = data.startTranslate;
  }
  if (!swiper.allowSlidePrev && swiper.swipeDirection === "prev" && data.currentTranslate > data.startTranslate) {
    data.currentTranslate = data.startTranslate;
  }
  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {
    data.currentTranslate = data.startTranslate;
  }
  if (params.threshold > 0) {
    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
      if (!data.allowThresholdMove) {
        data.allowThresholdMove = true;
        touches.startX = touches.currentX;
        touches.startY = touches.currentY;
        data.currentTranslate = data.startTranslate;
        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
        return;
      }
    } else {
      data.currentTranslate = data.startTranslate;
      return;
    }
  }
  if (!params.followFinger || params.cssMode) return;
  if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {
    swiper.updateActiveIndex();
    swiper.updateSlidesClasses();
  }
  if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {
    swiper.freeMode.onTouchMove();
  }
  swiper.updateProgress(data.currentTranslate);
  swiper.setTranslate(data.currentTranslate);
}
function onTouchEnd(event2) {
  const swiper = this;
  const data = swiper.touchEventsData;
  const pointerIndex = data.evCache.findIndex((cachedEv) => cachedEv.pointerId === event2.pointerId);
  if (pointerIndex >= 0) {
    data.evCache.splice(pointerIndex, 1);
  }
  if (["pointercancel", "pointerout", "pointerleave", "contextmenu"].includes(event2.type)) {
    const proceed = ["pointercancel", "contextmenu"].includes(event2.type) && (swiper.browser.isSafari || swiper.browser.isWebView);
    if (!proceed) {
      return;
    }
  }
  const {
    params,
    touches,
    rtlTranslate: rtl,
    slidesGrid,
    enabled
  } = swiper;
  if (!enabled) return;
  if (!params.simulateTouch && event2.pointerType === "mouse") return;
  let e = event2;
  if (e.originalEvent) e = e.originalEvent;
  if (data.allowTouchCallbacks) {
    swiper.emit("touchEnd", e);
  }
  data.allowTouchCallbacks = false;
  if (!data.isTouched) {
    if (data.isMoved && params.grabCursor) {
      swiper.setGrabCursor(false);
    }
    data.isMoved = false;
    data.startMoving = false;
    return;
  }
  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
    swiper.setGrabCursor(false);
  }
  const touchEndTime = now2();
  const timeDiff = touchEndTime - data.touchStartTime;
  if (swiper.allowClick) {
    const pathTree = e.path || e.composedPath && e.composedPath();
    swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);
    swiper.emit("tap click", e);
    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
      swiper.emit("doubleTap doubleClick", e);
    }
  }
  data.lastClickTime = now2();
  nextTick2(() => {
    if (!swiper.destroyed) swiper.allowClick = true;
  });
  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
    data.isTouched = false;
    data.isMoved = false;
    data.startMoving = false;
    return;
  }
  data.isTouched = false;
  data.isMoved = false;
  data.startMoving = false;
  let currentPos;
  if (params.followFinger) {
    currentPos = rtl ? swiper.translate : -swiper.translate;
  } else {
    currentPos = -data.currentTranslate;
  }
  if (params.cssMode) {
    return;
  }
  if (params.freeMode && params.freeMode.enabled) {
    swiper.freeMode.onTouchEnd({
      currentPos
    });
    return;
  }
  let stopIndex = 0;
  let groupSize = swiper.slidesSizesGrid[0];
  for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {
    const increment2 = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
    if (typeof slidesGrid[i + increment2] !== "undefined") {
      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment2]) {
        stopIndex = i;
        groupSize = slidesGrid[i + increment2] - slidesGrid[i];
      }
    } else if (currentPos >= slidesGrid[i]) {
      stopIndex = i;
      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
    }
  }
  let rewindFirstIndex = null;
  let rewindLastIndex = null;
  if (params.rewind) {
    if (swiper.isBeginning) {
      rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
    } else if (swiper.isEnd) {
      rewindFirstIndex = 0;
    }
  }
  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
  const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
  if (timeDiff > params.longSwipesMs) {
    if (!params.longSwipes) {
      swiper.slideTo(swiper.activeIndex);
      return;
    }
    if (swiper.swipeDirection === "next") {
      if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);
      else swiper.slideTo(stopIndex);
    }
    if (swiper.swipeDirection === "prev") {
      if (ratio > 1 - params.longSwipesRatio) {
        swiper.slideTo(stopIndex + increment);
      } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {
        swiper.slideTo(rewindLastIndex);
      } else {
        swiper.slideTo(stopIndex);
      }
    }
  } else {
    if (!params.shortSwipes) {
      swiper.slideTo(swiper.activeIndex);
      return;
    }
    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
    if (!isNavButtonTarget) {
      if (swiper.swipeDirection === "next") {
        swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);
      }
      if (swiper.swipeDirection === "prev") {
        swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);
      }
    } else if (e.target === swiper.navigation.nextEl) {
      swiper.slideTo(stopIndex + increment);
    } else {
      swiper.slideTo(stopIndex);
    }
  }
}
function onResize() {
  const swiper = this;
  const {
    params,
    el
  } = swiper;
  if (el && el.offsetWidth === 0) return;
  if (params.breakpoints) {
    swiper.setBreakpoint();
  }
  const {
    allowSlideNext,
    allowSlidePrev,
    snapGrid
  } = swiper;
  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
  swiper.allowSlideNext = true;
  swiper.allowSlidePrev = true;
  swiper.updateSize();
  swiper.updateSlides();
  swiper.updateSlidesClasses();
  const isVirtualLoop = isVirtual && params.loop;
  if ((params.slidesPerView === "auto" || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {
    swiper.slideTo(swiper.slides.length - 1, 0, false, true);
  } else {
    if (swiper.params.loop && !isVirtual) {
      swiper.slideToLoop(swiper.realIndex, 0, false, true);
    } else {
      swiper.slideTo(swiper.activeIndex, 0, false, true);
    }
  }
  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
    clearTimeout(swiper.autoplay.resizeTimeout);
    swiper.autoplay.resizeTimeout = setTimeout(() => {
      if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
        swiper.autoplay.resume();
      }
    }, 500);
  }
  swiper.allowSlidePrev = allowSlidePrev;
  swiper.allowSlideNext = allowSlideNext;
  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
    swiper.checkOverflow();
  }
}
function onClick(e) {
  const swiper = this;
  if (!swiper.enabled) return;
  if (!swiper.allowClick) {
    if (swiper.params.preventClicks) e.preventDefault();
    if (swiper.params.preventClicksPropagation && swiper.animating) {
      e.stopPropagation();
      e.stopImmediatePropagation();
    }
  }
}
function onScroll() {
  const swiper = this;
  const {
    wrapperEl,
    rtlTranslate,
    enabled
  } = swiper;
  if (!enabled) return;
  swiper.previousTranslate = swiper.translate;
  if (swiper.isHorizontal()) {
    swiper.translate = -wrapperEl.scrollLeft;
  } else {
    swiper.translate = -wrapperEl.scrollTop;
  }
  if (swiper.translate === 0) swiper.translate = 0;
  swiper.updateActiveIndex();
  swiper.updateSlidesClasses();
  let newProgress;
  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
  if (translatesDiff === 0) {
    newProgress = 0;
  } else {
    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;
  }
  if (newProgress !== swiper.progress) {
    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
  }
  swiper.emit("setTranslate", swiper.translate, false);
}
function onLoad(e) {
  const swiper = this;
  processLazyPreloader(swiper, e.target);
  if (swiper.params.cssMode || swiper.params.slidesPerView !== "auto" && !swiper.params.autoHeight) {
    return;
  }
  swiper.update();
}
var dummyEventAttached = false;
function dummyEventListener() {
}
var events = (swiper, method) => {
  const document2 = getDocument2();
  const {
    params,
    el,
    wrapperEl,
    device
  } = swiper;
  const capture = !!params.nested;
  const domMethod = method === "on" ? "addEventListener" : "removeEventListener";
  const swiperMethod = method;
  el[domMethod]("pointerdown", swiper.onTouchStart, {
    passive: false
  });
  document2[domMethod]("pointermove", swiper.onTouchMove, {
    passive: false,
    capture
  });
  document2[domMethod]("pointerup", swiper.onTouchEnd, {
    passive: true
  });
  document2[domMethod]("pointercancel", swiper.onTouchEnd, {
    passive: true
  });
  document2[domMethod]("pointerout", swiper.onTouchEnd, {
    passive: true
  });
  document2[domMethod]("pointerleave", swiper.onTouchEnd, {
    passive: true
  });
  document2[domMethod]("contextmenu", swiper.onTouchEnd, {
    passive: true
  });
  if (params.preventClicks || params.preventClicksPropagation) {
    el[domMethod]("click", swiper.onClick, true);
  }
  if (params.cssMode) {
    wrapperEl[domMethod]("scroll", swiper.onScroll);
  }
  if (params.updateOnWindowResize) {
    swiper[swiperMethod](device.ios || device.android ? "resize orientationchange observerUpdate" : "resize observerUpdate", onResize, true);
  } else {
    swiper[swiperMethod]("observerUpdate", onResize, true);
  }
  el[domMethod]("load", swiper.onLoad, {
    capture: true
  });
};
function attachEvents() {
  const swiper = this;
  const document2 = getDocument2();
  const {
    params
  } = swiper;
  swiper.onTouchStart = onTouchStart.bind(swiper);
  swiper.onTouchMove = onTouchMove.bind(swiper);
  swiper.onTouchEnd = onTouchEnd.bind(swiper);
  if (params.cssMode) {
    swiper.onScroll = onScroll.bind(swiper);
  }
  swiper.onClick = onClick.bind(swiper);
  swiper.onLoad = onLoad.bind(swiper);
  if (!dummyEventAttached) {
    document2.addEventListener("touchstart", dummyEventListener);
    dummyEventAttached = true;
  }
  events(swiper, "on");
}
function detachEvents() {
  const swiper = this;
  events(swiper, "off");
}
var events$1 = {
  attachEvents,
  detachEvents
};
var isGridEnabled = (swiper, params) => {
  return swiper.grid && params.grid && params.grid.rows > 1;
};
function setBreakpoint() {
  const swiper = this;
  const {
    realIndex,
    initialized,
    params,
    el
  } = swiper;
  const breakpoints2 = params.breakpoints;
  if (!breakpoints2 || breakpoints2 && Object.keys(breakpoints2).length === 0) return;
  const breakpoint = swiper.getBreakpoint(breakpoints2, swiper.params.breakpointsBase, swiper.el);
  if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;
  const breakpointOnlyParams = breakpoint in breakpoints2 ? breakpoints2[breakpoint] : void 0;
  const breakpointParams = breakpointOnlyParams || swiper.originalParams;
  const wasMultiRow = isGridEnabled(swiper, params);
  const isMultiRow = isGridEnabled(swiper, breakpointParams);
  const wasEnabled = params.enabled;
  if (wasMultiRow && !isMultiRow) {
    el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);
    swiper.emitContainerClasses();
  } else if (!wasMultiRow && isMultiRow) {
    el.classList.add(`${params.containerModifierClass}grid`);
    if (breakpointParams.grid.fill && breakpointParams.grid.fill === "column" || !breakpointParams.grid.fill && params.grid.fill === "column") {
      el.classList.add(`${params.containerModifierClass}grid-column`);
    }
    swiper.emitContainerClasses();
  }
  ["navigation", "pagination", "scrollbar"].forEach((prop) => {
    if (typeof breakpointParams[prop] === "undefined") return;
    const wasModuleEnabled = params[prop] && params[prop].enabled;
    const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;
    if (wasModuleEnabled && !isModuleEnabled) {
      swiper[prop].disable();
    }
    if (!wasModuleEnabled && isModuleEnabled) {
      swiper[prop].enable();
    }
  });
  const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
  const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
  const wasLoop = params.loop;
  if (directionChanged && initialized) {
    swiper.changeDirection();
  }
  extend3(swiper.params, breakpointParams);
  const isEnabled = swiper.params.enabled;
  const hasLoop = swiper.params.loop;
  Object.assign(swiper, {
    allowTouchMove: swiper.params.allowTouchMove,
    allowSlideNext: swiper.params.allowSlideNext,
    allowSlidePrev: swiper.params.allowSlidePrev
  });
  if (wasEnabled && !isEnabled) {
    swiper.disable();
  } else if (!wasEnabled && isEnabled) {
    swiper.enable();
  }
  swiper.currentBreakpoint = breakpoint;
  swiper.emit("_beforeBreakpoint", breakpointParams);
  if (initialized) {
    if (needsReLoop) {
      swiper.loopDestroy();
      swiper.loopCreate(realIndex);
      swiper.updateSlides();
    } else if (!wasLoop && hasLoop) {
      swiper.loopCreate(realIndex);
      swiper.updateSlides();
    } else if (wasLoop && !hasLoop) {
      swiper.loopDestroy();
    }
  }
  swiper.emit("breakpoint", breakpointParams);
}
function getBreakpoint(breakpoints2, base, containerEl) {
  if (base === void 0) {
    base = "window";
  }
  if (!breakpoints2 || base === "container" && !containerEl) return void 0;
  let breakpoint = false;
  const window2 = getWindow2();
  const currentHeight = base === "window" ? window2.innerHeight : containerEl.clientHeight;
  const points = Object.keys(breakpoints2).map((point) => {
    if (typeof point === "string" && point.indexOf("@") === 0) {
      const minRatio = parseFloat(point.substr(1));
      const value = currentHeight * minRatio;
      return {
        value,
        point
      };
    }
    return {
      value: point,
      point
    };
  });
  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
  for (let i = 0; i < points.length; i += 1) {
    const {
      point,
      value
    } = points[i];
    if (base === "window") {
      if (window2.matchMedia(`(min-width: ${value}px)`).matches) {
        breakpoint = point;
      }
    } else if (value <= containerEl.clientWidth) {
      breakpoint = point;
    }
  }
  return breakpoint || "max";
}
var breakpoints = {
  setBreakpoint,
  getBreakpoint
};
function prepareClasses(entries, prefix) {
  const resultClasses = [];
  entries.forEach((item) => {
    if (typeof item === "object") {
      Object.keys(item).forEach((classNames) => {
        if (item[classNames]) {
          resultClasses.push(prefix + classNames);
        }
      });
    } else if (typeof item === "string") {
      resultClasses.push(prefix + item);
    }
  });
  return resultClasses;
}
function addClasses() {
  const swiper = this;
  const {
    classNames,
    params,
    rtl,
    el,
    device
  } = swiper;
  const suffixes = prepareClasses(["initialized", params.direction, {
    "free-mode": swiper.params.freeMode && params.freeMode.enabled
  }, {
    "autoheight": params.autoHeight
  }, {
    "rtl": rtl
  }, {
    "grid": params.grid && params.grid.rows > 1
  }, {
    "grid-column": params.grid && params.grid.rows > 1 && params.grid.fill === "column"
  }, {
    "android": device.android
  }, {
    "ios": device.ios
  }, {
    "css-mode": params.cssMode
  }, {
    "centered": params.cssMode && params.centeredSlides
  }, {
    "watch-progress": params.watchSlidesProgress
  }], params.containerModifierClass);
  classNames.push(...suffixes);
  el.classList.add(...classNames);
  swiper.emitContainerClasses();
}
function removeClasses() {
  const swiper = this;
  const {
    el,
    classNames
  } = swiper;
  el.classList.remove(...classNames);
  swiper.emitContainerClasses();
}
var classes = {
  addClasses,
  removeClasses
};
function checkOverflow() {
  const swiper = this;
  const {
    isLocked: wasLocked,
    params
  } = swiper;
  const {
    slidesOffsetBefore
  } = params;
  if (slidesOffsetBefore) {
    const lastSlideIndex = swiper.slides.length - 1;
    const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;
    swiper.isLocked = swiper.size > lastSlideRightEdge;
  } else {
    swiper.isLocked = swiper.snapGrid.length === 1;
  }
  if (params.allowSlideNext === true) {
    swiper.allowSlideNext = !swiper.isLocked;
  }
  if (params.allowSlidePrev === true) {
    swiper.allowSlidePrev = !swiper.isLocked;
  }
  if (wasLocked && wasLocked !== swiper.isLocked) {
    swiper.isEnd = false;
  }
  if (wasLocked !== swiper.isLocked) {
    swiper.emit(swiper.isLocked ? "lock" : "unlock");
  }
}
var checkOverflow$1 = {
  checkOverflow
};
var defaults = {
  init: true,
  direction: "horizontal",
  oneWayMovement: false,
  touchEventsTarget: "wrapper",
  initialSlide: 0,
  speed: 300,
  cssMode: false,
  updateOnWindowResize: true,
  resizeObserver: true,
  nested: false,
  createElements: false,
  enabled: true,
  focusableElements: "input, select, option, textarea, button, video, label",
  // Overrides
  width: null,
  height: null,
  //
  preventInteractionOnTransition: false,
  // ssr
  userAgent: null,
  url: null,
  // To support iOS's swipe-to-go-back gesture (when being used in-app).
  edgeSwipeDetection: false,
  edgeSwipeThreshold: 20,
  // Autoheight
  autoHeight: false,
  // Set wrapper width
  setWrapperSize: false,
  // Virtual Translate
  virtualTranslate: false,
  // Effects
  effect: "slide",
  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
  // Breakpoints
  breakpoints: void 0,
  breakpointsBase: "window",
  // Slides grid
  spaceBetween: 0,
  slidesPerView: 1,
  slidesPerGroup: 1,
  slidesPerGroupSkip: 0,
  slidesPerGroupAuto: false,
  centeredSlides: false,
  centeredSlidesBounds: false,
  slidesOffsetBefore: 0,
  // in px
  slidesOffsetAfter: 0,
  // in px
  normalizeSlideIndex: true,
  centerInsufficientSlides: false,
  // Disable swiper and hide navigation when container not overflow
  watchOverflow: true,
  // Round length
  roundLengths: false,
  // Touches
  touchRatio: 1,
  touchAngle: 45,
  simulateTouch: true,
  shortSwipes: true,
  longSwipes: true,
  longSwipesRatio: 0.5,
  longSwipesMs: 300,
  followFinger: true,
  allowTouchMove: true,
  threshold: 5,
  touchMoveStopPropagation: false,
  touchStartPreventDefault: true,
  touchStartForcePreventDefault: false,
  touchReleaseOnEdges: false,
  // Unique Navigation Elements
  uniqueNavElements: true,
  // Resistance
  resistance: true,
  resistanceRatio: 0.85,
  // Progress
  watchSlidesProgress: false,
  // Cursor
  grabCursor: false,
  // Clicks
  preventClicks: true,
  preventClicksPropagation: true,
  slideToClickedSlide: false,
  // loop
  loop: false,
  loopedSlides: null,
  loopPreventsSliding: true,
  // rewind
  rewind: false,
  // Swiping/no swiping
  allowSlidePrev: true,
  allowSlideNext: true,
  swipeHandler: null,
  // '.swipe-handler',
  noSwiping: true,
  noSwipingClass: "swiper-no-swiping",
  noSwipingSelector: null,
  // Passive Listeners
  passiveListeners: true,
  maxBackfaceHiddenSlides: 10,
  // NS
  containerModifierClass: "swiper-",
  // NEW
  slideClass: "swiper-slide",
  slideActiveClass: "swiper-slide-active",
  slideVisibleClass: "swiper-slide-visible",
  slideNextClass: "swiper-slide-next",
  slidePrevClass: "swiper-slide-prev",
  wrapperClass: "swiper-wrapper",
  lazyPreloaderClass: "swiper-lazy-preloader",
  lazyPreloadPrevNext: 0,
  // Callbacks
  runCallbacksOnInit: true,
  // Internals
  _emitClasses: false
};
function moduleExtendParams(params, allModulesParams) {
  return function extendParams(obj) {
    if (obj === void 0) {
      obj = {};
    }
    const moduleParamName = Object.keys(obj)[0];
    const moduleParams = obj[moduleParamName];
    if (typeof moduleParams !== "object" || moduleParams === null) {
      extend3(allModulesParams, obj);
      return;
    }
    if (params[moduleParamName] === true) {
      params[moduleParamName] = {
        enabled: true
      };
    }
    if (moduleParamName === "navigation" && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {
      params[moduleParamName].auto = true;
    }
    if (["pagination", "scrollbar"].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {
      params[moduleParamName].auto = true;
    }
    if (!(moduleParamName in params && "enabled" in moduleParams)) {
      extend3(allModulesParams, obj);
      return;
    }
    if (typeof params[moduleParamName] === "object" && !("enabled" in params[moduleParamName])) {
      params[moduleParamName].enabled = true;
    }
    if (!params[moduleParamName]) params[moduleParamName] = {
      enabled: false
    };
    extend3(allModulesParams, obj);
  };
}
var prototypes = {
  eventsEmitter,
  update,
  translate,
  transition,
  slide,
  loop,
  grabCursor,
  events: events$1,
  breakpoints,
  checkOverflow: checkOverflow$1,
  classes
};
var extendedDefaults = {};
var Swiper = class _Swiper {
  constructor() {
    let el;
    let params;
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }
    if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === "Object") {
      params = args[0];
    } else {
      [el, params] = args;
    }
    if (!params) params = {};
    params = extend3({}, params);
    if (el && !params.el) params.el = el;
    const document2 = getDocument2();
    if (params.el && typeof params.el === "string" && document2.querySelectorAll(params.el).length > 1) {
      const swipers = [];
      document2.querySelectorAll(params.el).forEach((containerEl) => {
        const newParams = extend3({}, params, {
          el: containerEl
        });
        swipers.push(new _Swiper(newParams));
      });
      return swipers;
    }
    const swiper = this;
    swiper.__swiper__ = true;
    swiper.support = getSupport2();
    swiper.device = getDevice2({
      userAgent: params.userAgent
    });
    swiper.browser = getBrowser();
    swiper.eventsListeners = {};
    swiper.eventsAnyListeners = [];
    swiper.modules = [...swiper.__modules__];
    if (params.modules && Array.isArray(params.modules)) {
      swiper.modules.push(...params.modules);
    }
    const allModulesParams = {};
    swiper.modules.forEach((mod) => {
      mod({
        params,
        swiper,
        extendParams: moduleExtendParams(params, allModulesParams),
        on: swiper.on.bind(swiper),
        once: swiper.once.bind(swiper),
        off: swiper.off.bind(swiper),
        emit: swiper.emit.bind(swiper)
      });
    });
    const swiperParams = extend3({}, defaults, allModulesParams);
    swiper.params = extend3({}, swiperParams, extendedDefaults, params);
    swiper.originalParams = extend3({}, swiper.params);
    swiper.passedParams = extend3({}, params);
    if (swiper.params && swiper.params.on) {
      Object.keys(swiper.params.on).forEach((eventName) => {
        swiper.on(eventName, swiper.params.on[eventName]);
      });
    }
    if (swiper.params && swiper.params.onAny) {
      swiper.onAny(swiper.params.onAny);
    }
    Object.assign(swiper, {
      enabled: swiper.params.enabled,
      el,
      // Classes
      classNames: [],
      // Slides
      slides: [],
      slidesGrid: [],
      snapGrid: [],
      slidesSizesGrid: [],
      // isDirection
      isHorizontal() {
        return swiper.params.direction === "horizontal";
      },
      isVertical() {
        return swiper.params.direction === "vertical";
      },
      // Indexes
      activeIndex: 0,
      realIndex: 0,
      //
      isBeginning: true,
      isEnd: false,
      // Props
      translate: 0,
      previousTranslate: 0,
      progress: 0,
      velocity: 0,
      animating: false,
      cssOverflowAdjustment() {
        return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;
      },
      // Locks
      allowSlideNext: swiper.params.allowSlideNext,
      allowSlidePrev: swiper.params.allowSlidePrev,
      // Touch Events
      touchEventsData: {
        isTouched: void 0,
        isMoved: void 0,
        allowTouchCallbacks: void 0,
        touchStartTime: void 0,
        isScrolling: void 0,
        currentTranslate: void 0,
        startTranslate: void 0,
        allowThresholdMove: void 0,
        // Form elements to match
        focusableElements: swiper.params.focusableElements,
        // Last click time
        lastClickTime: 0,
        clickTimeout: void 0,
        // Velocities
        velocities: [],
        allowMomentumBounce: void 0,
        startMoving: void 0,
        evCache: []
      },
      // Clicks
      allowClick: true,
      // Touches
      allowTouchMove: swiper.params.allowTouchMove,
      touches: {
        startX: 0,
        startY: 0,
        currentX: 0,
        currentY: 0,
        diff: 0
      },
      // Images
      imagesToLoad: [],
      imagesLoaded: 0
    });
    swiper.emit("_swiper");
    if (swiper.params.init) {
      swiper.init();
    }
    return swiper;
  }
  getSlideIndex(slideEl) {
    const {
      slidesEl,
      params
    } = this;
    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
    const firstSlideIndex = elementIndex(slides[0]);
    return elementIndex(slideEl) - firstSlideIndex;
  }
  getSlideIndexByData(index) {
    return this.getSlideIndex(this.slides.filter((slideEl) => slideEl.getAttribute("data-swiper-slide-index") * 1 === index)[0]);
  }
  recalcSlides() {
    const swiper = this;
    const {
      slidesEl,
      params
    } = swiper;
    swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
  }
  enable() {
    const swiper = this;
    if (swiper.enabled) return;
    swiper.enabled = true;
    if (swiper.params.grabCursor) {
      swiper.setGrabCursor();
    }
    swiper.emit("enable");
  }
  disable() {
    const swiper = this;
    if (!swiper.enabled) return;
    swiper.enabled = false;
    if (swiper.params.grabCursor) {
      swiper.unsetGrabCursor();
    }
    swiper.emit("disable");
  }
  setProgress(progress, speed) {
    const swiper = this;
    progress = Math.min(Math.max(progress, 0), 1);
    const min = swiper.minTranslate();
    const max = swiper.maxTranslate();
    const current = (max - min) * progress + min;
    swiper.translateTo(current, typeof speed === "undefined" ? 0 : speed);
    swiper.updateActiveIndex();
    swiper.updateSlidesClasses();
  }
  emitContainerClasses() {
    const swiper = this;
    if (!swiper.params._emitClasses || !swiper.el) return;
    const cls = swiper.el.className.split(" ").filter((className) => {
      return className.indexOf("swiper") === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;
    });
    swiper.emit("_containerClasses", cls.join(" "));
  }
  getSlideClasses(slideEl) {
    const swiper = this;
    if (swiper.destroyed) return "";
    return slideEl.className.split(" ").filter((className) => {
      return className.indexOf("swiper-slide") === 0 || className.indexOf(swiper.params.slideClass) === 0;
    }).join(" ");
  }
  emitSlidesClasses() {
    const swiper = this;
    if (!swiper.params._emitClasses || !swiper.el) return;
    const updates = [];
    swiper.slides.forEach((slideEl) => {
      const classNames = swiper.getSlideClasses(slideEl);
      updates.push({
        slideEl,
        classNames
      });
      swiper.emit("_slideClass", slideEl, classNames);
    });
    swiper.emit("_slideClasses", updates);
  }
  slidesPerViewDynamic(view, exact) {
    if (view === void 0) {
      view = "current";
    }
    if (exact === void 0) {
      exact = false;
    }
    const swiper = this;
    const {
      params,
      slides,
      slidesGrid,
      slidesSizesGrid,
      size: swiperSize,
      activeIndex
    } = swiper;
    let spv = 1;
    if (typeof params.slidesPerView === "number") return params.slidesPerView;
    if (params.centeredSlides) {
      let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;
      let breakLoop;
      for (let i = activeIndex + 1; i < slides.length; i += 1) {
        if (slides[i] && !breakLoop) {
          slideSize += slides[i].swiperSlideSize;
          spv += 1;
          if (slideSize > swiperSize) breakLoop = true;
        }
      }
      for (let i = activeIndex - 1; i >= 0; i -= 1) {
        if (slides[i] && !breakLoop) {
          slideSize += slides[i].swiperSlideSize;
          spv += 1;
          if (slideSize > swiperSize) breakLoop = true;
        }
      }
    } else {
      if (view === "current") {
        for (let i = activeIndex + 1; i < slides.length; i += 1) {
          const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;
          if (slideInView) {
            spv += 1;
          }
        }
      } else {
        for (let i = activeIndex - 1; i >= 0; i -= 1) {
          const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;
          if (slideInView) {
            spv += 1;
          }
        }
      }
    }
    return spv;
  }
  update() {
    const swiper = this;
    if (!swiper || swiper.destroyed) return;
    const {
      snapGrid,
      params
    } = swiper;
    if (params.breakpoints) {
      swiper.setBreakpoint();
    }
    [...swiper.el.querySelectorAll('[loading="lazy"]')].forEach((imageEl) => {
      if (imageEl.complete) {
        processLazyPreloader(swiper, imageEl);
      }
    });
    swiper.updateSize();
    swiper.updateSlides();
    swiper.updateProgress();
    swiper.updateSlidesClasses();
    function setTranslate2() {
      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
      swiper.setTranslate(newTranslate);
      swiper.updateActiveIndex();
      swiper.updateSlidesClasses();
    }
    let translated;
    if (params.freeMode && params.freeMode.enabled && !params.cssMode) {
      setTranslate2();
      if (params.autoHeight) {
        swiper.updateAutoHeight();
      }
    } else {
      if ((params.slidesPerView === "auto" || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {
        const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;
        translated = swiper.slideTo(slides.length - 1, 0, false, true);
      } else {
        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
      }
      if (!translated) {
        setTranslate2();
      }
    }
    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
      swiper.checkOverflow();
    }
    swiper.emit("update");
  }
  changeDirection(newDirection, needUpdate) {
    if (needUpdate === void 0) {
      needUpdate = true;
    }
    const swiper = this;
    const currentDirection = swiper.params.direction;
    if (!newDirection) {
      newDirection = currentDirection === "horizontal" ? "vertical" : "horizontal";
    }
    if (newDirection === currentDirection || newDirection !== "horizontal" && newDirection !== "vertical") {
      return swiper;
    }
    swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);
    swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);
    swiper.emitContainerClasses();
    swiper.params.direction = newDirection;
    swiper.slides.forEach((slideEl) => {
      if (newDirection === "vertical") {
        slideEl.style.width = "";
      } else {
        slideEl.style.height = "";
      }
    });
    swiper.emit("changeDirection");
    if (needUpdate) swiper.update();
    return swiper;
  }
  changeLanguageDirection(direction) {
    const swiper = this;
    if (swiper.rtl && direction === "rtl" || !swiper.rtl && direction === "ltr") return;
    swiper.rtl = direction === "rtl";
    swiper.rtlTranslate = swiper.params.direction === "horizontal" && swiper.rtl;
    if (swiper.rtl) {
      swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);
      swiper.el.dir = "rtl";
    } else {
      swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);
      swiper.el.dir = "ltr";
    }
    swiper.update();
  }
  mount(element) {
    const swiper = this;
    if (swiper.mounted) return true;
    let el = element || swiper.params.el;
    if (typeof el === "string") {
      el = document.querySelector(el);
    }
    if (!el) {
      return false;
    }
    el.swiper = swiper;
    if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === "SWIPER-CONTAINER") {
      swiper.isElement = true;
    }
    const getWrapperSelector = () => {
      return `.${(swiper.params.wrapperClass || "").trim().split(" ").join(".")}`;
    };
    const getWrapper = () => {
      if (el && el.shadowRoot && el.shadowRoot.querySelector) {
        const res = el.shadowRoot.querySelector(getWrapperSelector());
        return res;
      }
      return elementChildren(el, getWrapperSelector())[0];
    };
    let wrapperEl = getWrapper();
    if (!wrapperEl && swiper.params.createElements) {
      wrapperEl = createElement("div", swiper.params.wrapperClass);
      el.append(wrapperEl);
      elementChildren(el, `.${swiper.params.slideClass}`).forEach((slideEl) => {
        wrapperEl.append(slideEl);
      });
    }
    Object.assign(swiper, {
      el,
      wrapperEl,
      slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,
      hostEl: swiper.isElement ? el.parentNode.host : el,
      mounted: true,
      // RTL
      rtl: el.dir.toLowerCase() === "rtl" || elementStyle(el, "direction") === "rtl",
      rtlTranslate: swiper.params.direction === "horizontal" && (el.dir.toLowerCase() === "rtl" || elementStyle(el, "direction") === "rtl"),
      wrongRTL: elementStyle(wrapperEl, "display") === "-webkit-box"
    });
    return true;
  }
  init(el) {
    const swiper = this;
    if (swiper.initialized) return swiper;
    const mounted = swiper.mount(el);
    if (mounted === false) return swiper;
    swiper.emit("beforeInit");
    if (swiper.params.breakpoints) {
      swiper.setBreakpoint();
    }
    swiper.addClasses();
    swiper.updateSize();
    swiper.updateSlides();
    if (swiper.params.watchOverflow) {
      swiper.checkOverflow();
    }
    if (swiper.params.grabCursor && swiper.enabled) {
      swiper.setGrabCursor();
    }
    if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
      swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);
    } else {
      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);
    }
    if (swiper.params.loop) {
      swiper.loopCreate();
    }
    swiper.attachEvents();
    const lazyElements = [...swiper.el.querySelectorAll('[loading="lazy"]')];
    if (swiper.isElement) {
      lazyElements.push(...swiper.hostEl.querySelectorAll('[loading="lazy"]'));
    }
    lazyElements.forEach((imageEl) => {
      if (imageEl.complete) {
        processLazyPreloader(swiper, imageEl);
      } else {
        imageEl.addEventListener("load", (e) => {
          processLazyPreloader(swiper, e.target);
        });
      }
    });
    preload(swiper);
    swiper.initialized = true;
    preload(swiper);
    swiper.emit("init");
    swiper.emit("afterInit");
    return swiper;
  }
  destroy(deleteInstance, cleanStyles) {
    if (deleteInstance === void 0) {
      deleteInstance = true;
    }
    if (cleanStyles === void 0) {
      cleanStyles = true;
    }
    const swiper = this;
    const {
      params,
      el,
      wrapperEl,
      slides
    } = swiper;
    if (typeof swiper.params === "undefined" || swiper.destroyed) {
      return null;
    }
    swiper.emit("beforeDestroy");
    swiper.initialized = false;
    swiper.detachEvents();
    if (params.loop) {
      swiper.loopDestroy();
    }
    if (cleanStyles) {
      swiper.removeClasses();
      el.removeAttribute("style");
      wrapperEl.removeAttribute("style");
      if (slides && slides.length) {
        slides.forEach((slideEl) => {
          slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
          slideEl.removeAttribute("style");
          slideEl.removeAttribute("data-swiper-slide-index");
        });
      }
    }
    swiper.emit("destroy");
    Object.keys(swiper.eventsListeners).forEach((eventName) => {
      swiper.off(eventName);
    });
    if (deleteInstance !== false) {
      swiper.el.swiper = null;
      deleteProps2(swiper);
    }
    swiper.destroyed = true;
    return null;
  }
  static extendDefaults(newDefaults) {
    extend3(extendedDefaults, newDefaults);
  }
  static get extendedDefaults() {
    return extendedDefaults;
  }
  static get defaults() {
    return defaults;
  }
  static installModule(mod) {
    if (!_Swiper.prototype.__modules__) _Swiper.prototype.__modules__ = [];
    const modules2 = _Swiper.prototype.__modules__;
    if (typeof mod === "function" && modules2.indexOf(mod) < 0) {
      modules2.push(mod);
    }
  }
  static use(module) {
    if (Array.isArray(module)) {
      module.forEach((m) => _Swiper.installModule(m));
      return _Swiper;
    }
    _Swiper.installModule(module);
    return _Swiper;
  }
};
Object.keys(prototypes).forEach((prototypeGroup) => {
  Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {
    Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
  });
});
Swiper.use([Resize, Observer]);

// node_modules/framework7/node_modules/swiper/modules/virtual.mjs
function Virtual(_ref) {
  let {
    swiper,
    extendParams,
    on,
    emit
  } = _ref;
  extendParams({
    virtual: {
      enabled: false,
      slides: [],
      cache: true,
      renderSlide: null,
      renderExternal: null,
      renderExternalUpdate: true,
      addSlidesBefore: 0,
      addSlidesAfter: 0
    }
  });
  let cssModeTimeout;
  const document2 = getDocument2();
  swiper.virtual = {
    cache: {},
    from: void 0,
    to: void 0,
    slides: [],
    offset: 0,
    slidesGrid: []
  };
  const tempDOM = document2.createElement("div");
  function renderSlide(slide2, index) {
    const params = swiper.params.virtual;
    if (params.cache && swiper.virtual.cache[index]) {
      return swiper.virtual.cache[index];
    }
    let slideEl;
    if (params.renderSlide) {
      slideEl = params.renderSlide.call(swiper, slide2, index);
      if (typeof slideEl === "string") {
        tempDOM.innerHTML = slideEl;
        slideEl = tempDOM.children[0];
      }
    } else if (swiper.isElement) {
      slideEl = createElement("swiper-slide");
    } else {
      slideEl = createElement("div", swiper.params.slideClass);
    }
    slideEl.setAttribute("data-swiper-slide-index", index);
    if (!params.renderSlide) {
      slideEl.innerHTML = slide2;
    }
    if (params.cache) {
      swiper.virtual.cache[index] = slideEl;
    }
    return slideEl;
  }
  function update2(force) {
    const {
      slidesPerView,
      slidesPerGroup,
      centeredSlides,
      loop: isLoop
    } = swiper.params;
    const {
      addSlidesBefore,
      addSlidesAfter
    } = swiper.params.virtual;
    const {
      from: previousFrom,
      to: previousTo,
      slides,
      slidesGrid: previousSlidesGrid,
      offset: previousOffset
    } = swiper.virtual;
    if (!swiper.params.cssMode) {
      swiper.updateActiveIndex();
    }
    const activeIndex = swiper.activeIndex || 0;
    let offsetProp;
    if (swiper.rtlTranslate) offsetProp = "right";
    else offsetProp = swiper.isHorizontal() ? "left" : "top";
    let slidesAfter;
    let slidesBefore;
    if (centeredSlides) {
      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
    } else {
      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;
      slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;
    }
    let from = activeIndex - slidesBefore;
    let to = activeIndex + slidesAfter;
    if (!isLoop) {
      from = Math.max(from, 0);
      to = Math.min(to, slides.length - 1);
    }
    let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
    if (isLoop && activeIndex >= slidesBefore) {
      from -= slidesBefore;
      if (!centeredSlides) offset += swiper.slidesGrid[0];
    } else if (isLoop && activeIndex < slidesBefore) {
      from = -slidesBefore;
      if (centeredSlides) offset += swiper.slidesGrid[0];
    }
    Object.assign(swiper.virtual, {
      from,
      to,
      offset,
      slidesGrid: swiper.slidesGrid,
      slidesBefore,
      slidesAfter
    });
    function onRendered() {
      swiper.updateSlides();
      swiper.updateProgress();
      swiper.updateSlidesClasses();
      emit("virtualUpdate");
    }
    if (previousFrom === from && previousTo === to && !force) {
      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
        swiper.slides.forEach((slideEl) => {
          slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
        });
      }
      swiper.updateProgress();
      emit("virtualUpdate");
      return;
    }
    if (swiper.params.virtual.renderExternal) {
      swiper.params.virtual.renderExternal.call(swiper, {
        offset,
        from,
        to,
        slides: function getSlides() {
          const slidesToRender = [];
          for (let i = from; i <= to; i += 1) {
            slidesToRender.push(slides[i]);
          }
          return slidesToRender;
        }()
      });
      if (swiper.params.virtual.renderExternalUpdate) {
        onRendered();
      } else {
        emit("virtualUpdate");
      }
      return;
    }
    const prependIndexes = [];
    const appendIndexes = [];
    const getSlideIndex = (index) => {
      let slideIndex = index;
      if (index < 0) {
        slideIndex = slides.length + index;
      } else if (slideIndex >= slides.length) {
        slideIndex = slideIndex - slides.length;
      }
      return slideIndex;
    };
    if (force) {
      swiper.slides.filter((el) => el.matches(`.${swiper.params.slideClass}, swiper-slide`)).forEach((slideEl) => {
        slideEl.remove();
      });
    } else {
      for (let i = previousFrom; i <= previousTo; i += 1) {
        if (i < from || i > to) {
          const slideIndex = getSlideIndex(i);
          swiper.slides.filter((el) => el.matches(`.${swiper.params.slideClass}[data-swiper-slide-index="${slideIndex}"], swiper-slide[data-swiper-slide-index="${slideIndex}"]`)).forEach((slideEl) => {
            slideEl.remove();
          });
        }
      }
    }
    const loopFrom = isLoop ? -slides.length : 0;
    const loopTo = isLoop ? slides.length * 2 : slides.length;
    for (let i = loopFrom; i < loopTo; i += 1) {
      if (i >= from && i <= to) {
        const slideIndex = getSlideIndex(i);
        if (typeof previousTo === "undefined" || force) {
          appendIndexes.push(slideIndex);
        } else {
          if (i > previousTo) appendIndexes.push(slideIndex);
          if (i < previousFrom) prependIndexes.push(slideIndex);
        }
      }
    }
    appendIndexes.forEach((index) => {
      swiper.slidesEl.append(renderSlide(slides[index], index));
    });
    if (isLoop) {
      for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {
        const index = prependIndexes[i];
        swiper.slidesEl.prepend(renderSlide(slides[index], index));
      }
    } else {
      prependIndexes.sort((a, b) => b - a);
      prependIndexes.forEach((index) => {
        swiper.slidesEl.prepend(renderSlide(slides[index], index));
      });
    }
    elementChildren(swiper.slidesEl, ".swiper-slide, swiper-slide").forEach((slideEl) => {
      slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;
    });
    onRendered();
  }
  function appendSlide2(slides) {
    if (typeof slides === "object" && "length" in slides) {
      for (let i = 0; i < slides.length; i += 1) {
        if (slides[i]) swiper.virtual.slides.push(slides[i]);
      }
    } else {
      swiper.virtual.slides.push(slides);
    }
    update2(true);
  }
  function prependSlide2(slides) {
    const activeIndex = swiper.activeIndex;
    let newActiveIndex = activeIndex + 1;
    let numberOfNewSlides = 1;
    if (Array.isArray(slides)) {
      for (let i = 0; i < slides.length; i += 1) {
        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
      }
      newActiveIndex = activeIndex + slides.length;
      numberOfNewSlides = slides.length;
    } else {
      swiper.virtual.slides.unshift(slides);
    }
    if (swiper.params.virtual.cache) {
      const cache = swiper.virtual.cache;
      const newCache = {};
      Object.keys(cache).forEach((cachedIndex) => {
        const cachedEl = cache[cachedIndex];
        const cachedElIndex = cachedEl.getAttribute("data-swiper-slide-index");
        if (cachedElIndex) {
          cachedEl.setAttribute("data-swiper-slide-index", parseInt(cachedElIndex, 10) + numberOfNewSlides);
        }
        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;
      });
      swiper.virtual.cache = newCache;
    }
    update2(true);
    swiper.slideTo(newActiveIndex, 0);
  }
  function removeSlide2(slidesIndexes) {
    if (typeof slidesIndexes === "undefined" || slidesIndexes === null) return;
    let activeIndex = swiper.activeIndex;
    if (Array.isArray(slidesIndexes)) {
      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {
        if (swiper.params.virtual.cache) {
          delete swiper.virtual.cache[slidesIndexes[i]];
          Object.keys(swiper.virtual.cache).forEach((key) => {
            if (key > slidesIndexes) {
              swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];
              swiper.virtual.cache[key - 1].setAttribute("data-swiper-slide-index", key - 1);
              delete swiper.virtual.cache[key];
            }
          });
        }
        swiper.virtual.slides.splice(slidesIndexes[i], 1);
        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
        activeIndex = Math.max(activeIndex, 0);
      }
    } else {
      if (swiper.params.virtual.cache) {
        delete swiper.virtual.cache[slidesIndexes];
        Object.keys(swiper.virtual.cache).forEach((key) => {
          if (key > slidesIndexes) {
            swiper.virtual.cache[key - 1] = swiper.virtual.cache[key];
            swiper.virtual.cache[key - 1].setAttribute("data-swiper-slide-index", key - 1);
            delete swiper.virtual.cache[key];
          }
        });
      }
      swiper.virtual.slides.splice(slidesIndexes, 1);
      if (slidesIndexes < activeIndex) activeIndex -= 1;
      activeIndex = Math.max(activeIndex, 0);
    }
    update2(true);
    swiper.slideTo(activeIndex, 0);
  }
  function removeAllSlides2() {
    swiper.virtual.slides = [];
    if (swiper.params.virtual.cache) {
      swiper.virtual.cache = {};
    }
    update2(true);
    swiper.slideTo(0, 0);
  }
  on("beforeInit", () => {
    if (!swiper.params.virtual.enabled) return;
    let domSlidesAssigned;
    if (typeof swiper.passedParams.virtual.slides === "undefined") {
      const slides = [...swiper.slidesEl.children].filter((el) => el.matches(`.${swiper.params.slideClass}, swiper-slide`));
      if (slides && slides.length) {
        swiper.virtual.slides = [...slides];
        domSlidesAssigned = true;
        slides.forEach((slideEl, slideIndex) => {
          slideEl.setAttribute("data-swiper-slide-index", slideIndex);
          swiper.virtual.cache[slideIndex] = slideEl;
          slideEl.remove();
        });
      }
    }
    if (!domSlidesAssigned) {
      swiper.virtual.slides = swiper.params.virtual.slides;
    }
    swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);
    swiper.params.watchSlidesProgress = true;
    swiper.originalParams.watchSlidesProgress = true;
    update2();
  });
  on("setTranslate", () => {
    if (!swiper.params.virtual.enabled) return;
    if (swiper.params.cssMode && !swiper._immediateVirtual) {
      clearTimeout(cssModeTimeout);
      cssModeTimeout = setTimeout(() => {
        update2();
      }, 100);
    } else {
      update2();
    }
  });
  on("init update resize", () => {
    if (!swiper.params.virtual.enabled) return;
    if (swiper.params.cssMode) {
      setCSSProperty(swiper.wrapperEl, "--swiper-virtual-size", `${swiper.virtualSize}px`);
    }
  });
  Object.assign(swiper.virtual, {
    appendSlide: appendSlide2,
    prependSlide: prependSlide2,
    removeSlide: removeSlide2,
    removeAllSlides: removeAllSlides2,
    update: update2
  });
}

// node_modules/framework7/node_modules/swiper/modules/keyboard.mjs
function Keyboard(_ref) {
  let {
    swiper,
    extendParams,
    on,
    emit
  } = _ref;
  const document2 = getDocument2();
  const window2 = getWindow2();
  swiper.keyboard = {
    enabled: false
  };
  extendParams({
    keyboard: {
      enabled: false,
      onlyInViewport: true,
      pageUpDown: true
    }
  });
  function handle(event2) {
    if (!swiper.enabled) return;
    const {
      rtlTranslate: rtl
    } = swiper;
    let e = event2;
    if (e.originalEvent) e = e.originalEvent;
    const kc = e.keyCode || e.charCode;
    const pageUpDown = swiper.params.keyboard.pageUpDown;
    const isPageUp = pageUpDown && kc === 33;
    const isPageDown = pageUpDown && kc === 34;
    const isArrowLeft = kc === 37;
    const isArrowRight = kc === 39;
    const isArrowUp = kc === 38;
    const isArrowDown = kc === 40;
    if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {
      return false;
    }
    if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {
      return false;
    }
    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
      return void 0;
    }
    if (document2.activeElement && document2.activeElement.nodeName && (document2.activeElement.nodeName.toLowerCase() === "input" || document2.activeElement.nodeName.toLowerCase() === "textarea")) {
      return void 0;
    }
    if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {
      let inView = false;
      if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {
        return void 0;
      }
      const el = swiper.el;
      const swiperWidth = el.clientWidth;
      const swiperHeight = el.clientHeight;
      const windowWidth = window2.innerWidth;
      const windowHeight = window2.innerHeight;
      const swiperOffset = elementOffset(el);
      if (rtl) swiperOffset.left -= el.scrollLeft;
      const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];
      for (let i = 0; i < swiperCoord.length; i += 1) {
        const point = swiperCoord[i];
        if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {
          if (point[0] === 0 && point[1] === 0) continue;
          inView = true;
        }
      }
      if (!inView) return void 0;
    }
    if (swiper.isHorizontal()) {
      if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {
        if (e.preventDefault) e.preventDefault();
        else e.returnValue = false;
      }
      if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();
      if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();
    } else {
      if (isPageUp || isPageDown || isArrowUp || isArrowDown) {
        if (e.preventDefault) e.preventDefault();
        else e.returnValue = false;
      }
      if (isPageDown || isArrowDown) swiper.slideNext();
      if (isPageUp || isArrowUp) swiper.slidePrev();
    }
    emit("keyPress", kc);
    return void 0;
  }
  function enable3() {
    if (swiper.keyboard.enabled) return;
    document2.addEventListener("keydown", handle);
    swiper.keyboard.enabled = true;
  }
  function disable3() {
    if (!swiper.keyboard.enabled) return;
    document2.removeEventListener("keydown", handle);
    swiper.keyboard.enabled = false;
  }
  on("init", () => {
    if (swiper.params.keyboard.enabled) {
      enable3();
    }
  });
  on("destroy", () => {
    if (swiper.keyboard.enabled) {
      disable3();
    }
  });
  Object.assign(swiper.keyboard, {
    enable: enable3,
    disable: disable3
  });
}

// node_modules/framework7/node_modules/swiper/modules/mousewheel.mjs
function Mousewheel(_ref) {
  let {
    swiper,
    extendParams,
    on,
    emit
  } = _ref;
  const window2 = getWindow2();
  extendParams({
    mousewheel: {
      enabled: false,
      releaseOnEdges: false,
      invert: false,
      forceToAxis: false,
      sensitivity: 1,
      eventsTarget: "container",
      thresholdDelta: null,
      thresholdTime: null,
      noMousewheelClass: "swiper-no-mousewheel"
    }
  });
  swiper.mousewheel = {
    enabled: false
  };
  let timeout;
  let lastScrollTime = now2();
  let lastEventBeforeSnap;
  const recentWheelEvents = [];
  function normalize(e) {
    const PIXEL_STEP = 10;
    const LINE_HEIGHT = 40;
    const PAGE_HEIGHT = 800;
    let sX = 0;
    let sY = 0;
    let pX = 0;
    let pY = 0;
    if ("detail" in e) {
      sY = e.detail;
    }
    if ("wheelDelta" in e) {
      sY = -e.wheelDelta / 120;
    }
    if ("wheelDeltaY" in e) {
      sY = -e.wheelDeltaY / 120;
    }
    if ("wheelDeltaX" in e) {
      sX = -e.wheelDeltaX / 120;
    }
    if ("axis" in e && e.axis === e.HORIZONTAL_AXIS) {
      sX = sY;
      sY = 0;
    }
    pX = sX * PIXEL_STEP;
    pY = sY * PIXEL_STEP;
    if ("deltaY" in e) {
      pY = e.deltaY;
    }
    if ("deltaX" in e) {
      pX = e.deltaX;
    }
    if (e.shiftKey && !pX) {
      pX = pY;
      pY = 0;
    }
    if ((pX || pY) && e.deltaMode) {
      if (e.deltaMode === 1) {
        pX *= LINE_HEIGHT;
        pY *= LINE_HEIGHT;
      } else {
        pX *= PAGE_HEIGHT;
        pY *= PAGE_HEIGHT;
      }
    }
    if (pX && !sX) {
      sX = pX < 1 ? -1 : 1;
    }
    if (pY && !sY) {
      sY = pY < 1 ? -1 : 1;
    }
    return {
      spinX: sX,
      spinY: sY,
      pixelX: pX,
      pixelY: pY
    };
  }
  function handleMouseEnter() {
    if (!swiper.enabled) return;
    swiper.mouseEntered = true;
  }
  function handleMouseLeave() {
    if (!swiper.enabled) return;
    swiper.mouseEntered = false;
  }
  function animateSlider(newEvent) {
    if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {
      return false;
    }
    if (swiper.params.mousewheel.thresholdTime && now2() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {
      return false;
    }
    if (newEvent.delta >= 6 && now2() - lastScrollTime < 60) {
      return true;
    }
    if (newEvent.direction < 0) {
      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
        swiper.slideNext();
        emit("scroll", newEvent.raw);
      }
    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
      swiper.slidePrev();
      emit("scroll", newEvent.raw);
    }
    lastScrollTime = new window2.Date().getTime();
    return false;
  }
  function releaseScroll(newEvent) {
    const params = swiper.params.mousewheel;
    if (newEvent.direction < 0) {
      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {
        return true;
      }
    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {
      return true;
    }
    return false;
  }
  function handle(event2) {
    let e = event2;
    let disableParentSwiper = true;
    if (!swiper.enabled) return;
    if (event2.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;
    const params = swiper.params.mousewheel;
    if (swiper.params.cssMode) {
      e.preventDefault();
    }
    let targetEl = swiper.el;
    if (swiper.params.mousewheel.eventsTarget !== "container") {
      targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);
    }
    const targetElContainsTarget = targetEl && targetEl.contains(e.target);
    if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;
    if (e.originalEvent) e = e.originalEvent;
    let delta = 0;
    const rtlFactor = swiper.rtlTranslate ? -1 : 1;
    const data = normalize(e);
    if (params.forceToAxis) {
      if (swiper.isHorizontal()) {
        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;
        else return true;
      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;
      else return true;
    } else {
      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
    }
    if (delta === 0) return true;
    if (params.invert) delta = -delta;
    let positions = swiper.getTranslate() + delta * params.sensitivity;
    if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();
    if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();
    disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());
    if (disableParentSwiper && swiper.params.nested) e.stopPropagation();
    if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {
      const newEvent = {
        time: now2(),
        delta: Math.abs(delta),
        direction: Math.sign(delta),
        raw: event2
      };
      if (recentWheelEvents.length >= 2) {
        recentWheelEvents.shift();
      }
      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : void 0;
      recentWheelEvents.push(newEvent);
      if (prevEvent) {
        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {
          animateSlider(newEvent);
        }
      } else {
        animateSlider(newEvent);
      }
      if (releaseScroll(newEvent)) {
        return true;
      }
    } else {
      const newEvent = {
        time: now2(),
        delta: Math.abs(delta),
        direction: Math.sign(delta)
      };
      const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;
      if (!ignoreWheelEvents) {
        lastEventBeforeSnap = void 0;
        let position = swiper.getTranslate() + delta * params.sensitivity;
        const wasBeginning = swiper.isBeginning;
        const wasEnd = swiper.isEnd;
        if (position >= swiper.minTranslate()) position = swiper.minTranslate();
        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
        swiper.setTransition(0);
        swiper.setTranslate(position);
        swiper.updateProgress();
        swiper.updateActiveIndex();
        swiper.updateSlidesClasses();
        if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {
          swiper.updateSlidesClasses();
        }
        if (swiper.params.loop) {
          swiper.loopFix({
            direction: newEvent.direction < 0 ? "next" : "prev",
            byMousewheel: true
          });
        }
        if (swiper.params.freeMode.sticky) {
          clearTimeout(timeout);
          timeout = void 0;
          if (recentWheelEvents.length >= 15) {
            recentWheelEvents.shift();
          }
          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : void 0;
          const firstEvent = recentWheelEvents[0];
          recentWheelEvents.push(newEvent);
          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {
            recentWheelEvents.splice(0);
          } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {
            const snapToThreshold = delta > 0 ? 0.8 : 0.2;
            lastEventBeforeSnap = newEvent;
            recentWheelEvents.splice(0);
            timeout = nextTick2(() => {
              swiper.slideToClosest(swiper.params.speed, true, void 0, snapToThreshold);
            }, 0);
          }
          if (!timeout) {
            timeout = nextTick2(() => {
              const snapToThreshold = 0.5;
              lastEventBeforeSnap = newEvent;
              recentWheelEvents.splice(0);
              swiper.slideToClosest(swiper.params.speed, true, void 0, snapToThreshold);
            }, 500);
          }
        }
        if (!ignoreWheelEvents) emit("scroll", e);
        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();
        if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) {
          return true;
        }
      }
    }
    if (e.preventDefault) e.preventDefault();
    else e.returnValue = false;
    return false;
  }
  function events2(method) {
    let targetEl = swiper.el;
    if (swiper.params.mousewheel.eventsTarget !== "container") {
      targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);
    }
    targetEl[method]("mouseenter", handleMouseEnter);
    targetEl[method]("mouseleave", handleMouseLeave);
    targetEl[method]("wheel", handle);
  }
  function enable3() {
    if (swiper.params.cssMode) {
      swiper.wrapperEl.removeEventListener("wheel", handle);
      return true;
    }
    if (swiper.mousewheel.enabled) return false;
    events2("addEventListener");
    swiper.mousewheel.enabled = true;
    return true;
  }
  function disable3() {
    if (swiper.params.cssMode) {
      swiper.wrapperEl.addEventListener(event, handle);
      return true;
    }
    if (!swiper.mousewheel.enabled) return false;
    events2("removeEventListener");
    swiper.mousewheel.enabled = false;
    return true;
  }
  on("init", () => {
    if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {
      disable3();
    }
    if (swiper.params.mousewheel.enabled) enable3();
  });
  on("destroy", () => {
    if (swiper.params.cssMode) {
      enable3();
    }
    if (swiper.mousewheel.enabled) disable3();
  });
  Object.assign(swiper.mousewheel, {
    enable: enable3,
    disable: disable3
  });
}

// node_modules/framework7/node_modules/swiper/shared/create-element-if-not-defined.mjs
function createElementIfNotDefined(swiper, originalParams, params, checkProps) {
  if (swiper.params.createElements) {
    Object.keys(checkProps).forEach((key) => {
      if (!params[key] && params.auto === true) {
        let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];
        if (!element) {
          element = createElement("div", checkProps[key]);
          element.className = checkProps[key];
          swiper.el.append(element);
        }
        params[key] = element;
        originalParams[key] = element;
      }
    });
  }
  return params;
}

// node_modules/framework7/node_modules/swiper/modules/navigation.mjs
function Navigation(_ref) {
  let {
    swiper,
    extendParams,
    on,
    emit
  } = _ref;
  extendParams({
    navigation: {
      nextEl: null,
      prevEl: null,
      hideOnClick: false,
      disabledClass: "swiper-button-disabled",
      hiddenClass: "swiper-button-hidden",
      lockClass: "swiper-button-lock",
      navigationDisabledClass: "swiper-navigation-disabled"
    }
  });
  swiper.navigation = {
    nextEl: null,
    prevEl: null
  };
  const makeElementsArray = (el) => (Array.isArray(el) ? el : [el]).filter((e) => !!e);
  function getEl(el) {
    let res;
    if (el && typeof el === "string" && swiper.isElement) {
      res = swiper.el.querySelector(el);
      if (res) return res;
    }
    if (el) {
      if (typeof el === "string") res = [...document.querySelectorAll(el)];
      if (swiper.params.uniqueNavElements && typeof el === "string" && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {
        res = swiper.el.querySelector(el);
      }
    }
    if (el && !res) return el;
    return res;
  }
  function toggleEl(el, disabled) {
    const params = swiper.params.navigation;
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      if (subEl) {
        subEl.classList[disabled ? "add" : "remove"](...params.disabledClass.split(" "));
        if (subEl.tagName === "BUTTON") subEl.disabled = disabled;
        if (swiper.params.watchOverflow && swiper.enabled) {
          subEl.classList[swiper.isLocked ? "add" : "remove"](params.lockClass);
        }
      }
    });
  }
  function update2() {
    const {
      nextEl,
      prevEl
    } = swiper.navigation;
    if (swiper.params.loop) {
      toggleEl(prevEl, false);
      toggleEl(nextEl, false);
      return;
    }
    toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);
    toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);
  }
  function onPrevClick(e) {
    e.preventDefault();
    if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;
    swiper.slidePrev();
    emit("navigationPrev");
  }
  function onNextClick(e) {
    e.preventDefault();
    if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;
    swiper.slideNext();
    emit("navigationNext");
  }
  function init() {
    const params = swiper.params.navigation;
    swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {
      nextEl: "swiper-button-next",
      prevEl: "swiper-button-prev"
    });
    if (!(params.nextEl || params.prevEl)) return;
    let nextEl = getEl(params.nextEl);
    let prevEl = getEl(params.prevEl);
    Object.assign(swiper.navigation, {
      nextEl,
      prevEl
    });
    nextEl = makeElementsArray(nextEl);
    prevEl = makeElementsArray(prevEl);
    const initButton = (el, dir) => {
      if (el) {
        el.addEventListener("click", dir === "next" ? onNextClick : onPrevClick);
      }
      if (!swiper.enabled && el) {
        el.classList.add(...params.lockClass.split(" "));
      }
    };
    nextEl.forEach((el) => initButton(el, "next"));
    prevEl.forEach((el) => initButton(el, "prev"));
  }
  function destroy() {
    let {
      nextEl,
      prevEl
    } = swiper.navigation;
    nextEl = makeElementsArray(nextEl);
    prevEl = makeElementsArray(prevEl);
    const destroyButton = (el, dir) => {
      el.removeEventListener("click", dir === "next" ? onNextClick : onPrevClick);
      el.classList.remove(...swiper.params.navigation.disabledClass.split(" "));
    };
    nextEl.forEach((el) => destroyButton(el, "next"));
    prevEl.forEach((el) => destroyButton(el, "prev"));
  }
  on("init", () => {
    if (swiper.params.navigation.enabled === false) {
      disable3();
    } else {
      init();
      update2();
    }
  });
  on("toEdge fromEdge lock unlock", () => {
    update2();
  });
  on("destroy", () => {
    destroy();
  });
  on("enable disable", () => {
    let {
      nextEl,
      prevEl
    } = swiper.navigation;
    nextEl = makeElementsArray(nextEl);
    prevEl = makeElementsArray(prevEl);
    if (swiper.enabled) {
      update2();
      return;
    }
    [...nextEl, ...prevEl].filter((el) => !!el).forEach((el) => el.classList.add(swiper.params.navigation.lockClass));
  });
  on("click", (_s, e) => {
    let {
      nextEl,
      prevEl
    } = swiper.navigation;
    nextEl = makeElementsArray(nextEl);
    prevEl = makeElementsArray(prevEl);
    const targetEl = e.target;
    if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {
      if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;
      let isHidden;
      if (nextEl.length) {
        isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);
      } else if (prevEl.length) {
        isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);
      }
      if (isHidden === true) {
        emit("navigationShow");
      } else {
        emit("navigationHide");
      }
      [...nextEl, ...prevEl].filter((el) => !!el).forEach((el) => el.classList.toggle(swiper.params.navigation.hiddenClass));
    }
  });
  const enable3 = () => {
    swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(" "));
    init();
    update2();
  };
  const disable3 = () => {
    swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(" "));
    destroy();
  };
  Object.assign(swiper.navigation, {
    enable: enable3,
    disable: disable3,
    update: update2,
    init,
    destroy
  });
}

// node_modules/framework7/node_modules/swiper/shared/classes-to-selector.mjs
function classesToSelector(classes2) {
  if (classes2 === void 0) {
    classes2 = "";
  }
  return `.${classes2.trim().replace(/([\.:!+\/])/g, "\\$1").replace(/ /g, ".")}`;
}

// node_modules/framework7/node_modules/swiper/modules/pagination.mjs
function Pagination(_ref) {
  let {
    swiper,
    extendParams,
    on,
    emit
  } = _ref;
  const pfx = "swiper-pagination";
  extendParams({
    pagination: {
      el: null,
      bulletElement: "span",
      clickable: false,
      hideOnClick: false,
      renderBullet: null,
      renderProgressbar: null,
      renderFraction: null,
      renderCustom: null,
      progressbarOpposite: false,
      type: "bullets",
      // 'bullets' or 'progressbar' or 'fraction' or 'custom'
      dynamicBullets: false,
      dynamicMainBullets: 1,
      formatFractionCurrent: (number) => number,
      formatFractionTotal: (number) => number,
      bulletClass: `${pfx}-bullet`,
      bulletActiveClass: `${pfx}-bullet-active`,
      modifierClass: `${pfx}-`,
      currentClass: `${pfx}-current`,
      totalClass: `${pfx}-total`,
      hiddenClass: `${pfx}-hidden`,
      progressbarFillClass: `${pfx}-progressbar-fill`,
      progressbarOppositeClass: `${pfx}-progressbar-opposite`,
      clickableClass: `${pfx}-clickable`,
      lockClass: `${pfx}-lock`,
      horizontalClass: `${pfx}-horizontal`,
      verticalClass: `${pfx}-vertical`,
      paginationDisabledClass: `${pfx}-disabled`
    }
  });
  swiper.pagination = {
    el: null,
    bullets: []
  };
  let bulletSize;
  let dynamicBulletIndex = 0;
  const makeElementsArray = (el) => (Array.isArray(el) ? el : [el]).filter((e) => !!e);
  function isPaginationDisabled() {
    return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;
  }
  function setSideBullets(bulletEl, position) {
    const {
      bulletActiveClass
    } = swiper.params.pagination;
    if (!bulletEl) return;
    bulletEl = bulletEl[`${position === "prev" ? "previous" : "next"}ElementSibling`];
    if (bulletEl) {
      bulletEl.classList.add(`${bulletActiveClass}-${position}`);
      bulletEl = bulletEl[`${position === "prev" ? "previous" : "next"}ElementSibling`];
      if (bulletEl) {
        bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);
      }
    }
  }
  function onBulletClick(e) {
    const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));
    if (!bulletEl) {
      return;
    }
    e.preventDefault();
    const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;
    if (swiper.params.loop) {
      if (swiper.realIndex === index) return;
      const realIndex = swiper.realIndex;
      const newSlideIndex = swiper.getSlideIndexByData(index);
      const currentSlideIndex = swiper.getSlideIndexByData(swiper.realIndex);
      const loopFix2 = (dir) => {
        const indexBeforeLoopFix = swiper.activeIndex;
        swiper.loopFix({
          direction: dir,
          activeSlideIndex: newSlideIndex,
          slideTo: false
        });
        const indexAfterFix = swiper.activeIndex;
        if (indexBeforeLoopFix === indexAfterFix) {
          swiper.slideToLoop(realIndex, 0, false, true);
        }
      };
      if (newSlideIndex > swiper.slides.length - swiper.loopedSlides) {
        loopFix2(newSlideIndex > currentSlideIndex ? "next" : "prev");
      } else if (swiper.params.centeredSlides) {
        const slidesPerView = swiper.params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(swiper.params.slidesPerView, 10));
        if (newSlideIndex < Math.floor(slidesPerView / 2)) {
          loopFix2("prev");
        }
      }
      swiper.slideToLoop(index);
    } else {
      swiper.slideTo(index);
    }
  }
  function update2() {
    const rtl = swiper.rtl;
    const params = swiper.params.pagination;
    if (isPaginationDisabled()) return;
    let el = swiper.pagination.el;
    el = makeElementsArray(el);
    let current;
    let previousIndex;
    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
    const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
    if (swiper.params.loop) {
      previousIndex = swiper.previousRealIndex || 0;
      current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;
    } else if (typeof swiper.snapIndex !== "undefined") {
      current = swiper.snapIndex;
      previousIndex = swiper.previousSnapIndex;
    } else {
      previousIndex = swiper.previousIndex || 0;
      current = swiper.activeIndex || 0;
    }
    if (params.type === "bullets" && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
      const bullets = swiper.pagination.bullets;
      let firstIndex;
      let lastIndex;
      let midIndex;
      if (params.dynamicBullets) {
        bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? "width" : "height", true);
        el.forEach((subEl) => {
          subEl.style[swiper.isHorizontal() ? "width" : "height"] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;
        });
        if (params.dynamicMainBullets > 1 && previousIndex !== void 0) {
          dynamicBulletIndex += current - (previousIndex || 0);
          if (dynamicBulletIndex > params.dynamicMainBullets - 1) {
            dynamicBulletIndex = params.dynamicMainBullets - 1;
          } else if (dynamicBulletIndex < 0) {
            dynamicBulletIndex = 0;
          }
        }
        firstIndex = Math.max(current - dynamicBulletIndex, 0);
        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
        midIndex = (lastIndex + firstIndex) / 2;
      }
      bullets.forEach((bulletEl) => {
        const classesToRemove = [...["", "-next", "-next-next", "-prev", "-prev-prev", "-main"].map((suffix) => `${params.bulletActiveClass}${suffix}`)].map((s) => typeof s === "string" && s.includes(" ") ? s.split(" ") : s).flat();
        bulletEl.classList.remove(...classesToRemove);
      });
      if (el.length > 1) {
        bullets.forEach((bullet) => {
          const bulletIndex = elementIndex(bullet);
          if (bulletIndex === current) {
            bullet.classList.add(...params.bulletActiveClass.split(" "));
          } else if (swiper.isElement) {
            bullet.setAttribute("part", "bullet");
          }
          if (params.dynamicBullets) {
            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
              bullet.classList.add(...`${params.bulletActiveClass}-main`.split(" "));
            }
            if (bulletIndex === firstIndex) {
              setSideBullets(bullet, "prev");
            }
            if (bulletIndex === lastIndex) {
              setSideBullets(bullet, "next");
            }
          }
        });
      } else {
        const bullet = bullets[current];
        if (bullet) {
          bullet.classList.add(...params.bulletActiveClass.split(" "));
        }
        if (swiper.isElement) {
          bullets.forEach((bulletEl, bulletIndex) => {
            bulletEl.setAttribute("part", bulletIndex === current ? "bullet-active" : "bullet");
          });
        }
        if (params.dynamicBullets) {
          const firstDisplayedBullet = bullets[firstIndex];
          const lastDisplayedBullet = bullets[lastIndex];
          for (let i = firstIndex; i <= lastIndex; i += 1) {
            if (bullets[i]) {
              bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(" "));
            }
          }
          setSideBullets(firstDisplayedBullet, "prev");
          setSideBullets(lastDisplayedBullet, "next");
        }
      }
      if (params.dynamicBullets) {
        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
        const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;
        const offsetProp = rtl ? "right" : "left";
        bullets.forEach((bullet) => {
          bullet.style[swiper.isHorizontal() ? offsetProp : "top"] = `${bulletsOffset}px`;
        });
      }
    }
    el.forEach((subEl, subElIndex) => {
      if (params.type === "fraction") {
        subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach((fractionEl) => {
          fractionEl.textContent = params.formatFractionCurrent(current + 1);
        });
        subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach((totalEl) => {
          totalEl.textContent = params.formatFractionTotal(total);
        });
      }
      if (params.type === "progressbar") {
        let progressbarDirection;
        if (params.progressbarOpposite) {
          progressbarDirection = swiper.isHorizontal() ? "vertical" : "horizontal";
        } else {
          progressbarDirection = swiper.isHorizontal() ? "horizontal" : "vertical";
        }
        const scale = (current + 1) / total;
        let scaleX = 1;
        let scaleY = 1;
        if (progressbarDirection === "horizontal") {
          scaleX = scale;
        } else {
          scaleY = scale;
        }
        subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach((progressEl) => {
          progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;
          progressEl.style.transitionDuration = `${swiper.params.speed}ms`;
        });
      }
      if (params.type === "custom" && params.renderCustom) {
        subEl.innerHTML = params.renderCustom(swiper, current + 1, total);
        if (subElIndex === 0) emit("paginationRender", subEl);
      } else {
        if (subElIndex === 0) emit("paginationRender", subEl);
        emit("paginationUpdate", subEl);
      }
      if (swiper.params.watchOverflow && swiper.enabled) {
        subEl.classList[swiper.isLocked ? "add" : "remove"](params.lockClass);
      }
    });
  }
  function render() {
    const params = swiper.params.pagination;
    if (isPaginationDisabled()) return;
    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
    let el = swiper.pagination.el;
    el = makeElementsArray(el);
    let paginationHTML = "";
    if (params.type === "bullets") {
      let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
      if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {
        numberOfBullets = slidesLength;
      }
      for (let i = 0; i < numberOfBullets; i += 1) {
        if (params.renderBullet) {
          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
        } else {
          paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part="bullet"' : ""} class="${params.bulletClass}"></${params.bulletElement}>`;
        }
      }
    }
    if (params.type === "fraction") {
      if (params.renderFraction) {
        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
      } else {
        paginationHTML = `<span class="${params.currentClass}"></span> / <span class="${params.totalClass}"></span>`;
      }
    }
    if (params.type === "progressbar") {
      if (params.renderProgressbar) {
        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
      } else {
        paginationHTML = `<span class="${params.progressbarFillClass}"></span>`;
      }
    }
    swiper.pagination.bullets = [];
    el.forEach((subEl) => {
      if (params.type !== "custom") {
        subEl.innerHTML = paginationHTML || "";
      }
      if (params.type === "bullets") {
        swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));
      }
    });
    if (params.type !== "custom") {
      emit("paginationRender", el[0]);
    }
  }
  function init() {
    swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {
      el: "swiper-pagination"
    });
    const params = swiper.params.pagination;
    if (!params.el) return;
    let el;
    if (typeof params.el === "string" && swiper.isElement) {
      el = swiper.el.querySelector(params.el);
    }
    if (!el && typeof params.el === "string") {
      el = [...document.querySelectorAll(params.el)];
    }
    if (!el) {
      el = params.el;
    }
    if (!el || el.length === 0) return;
    if (swiper.params.uniqueNavElements && typeof params.el === "string" && Array.isArray(el) && el.length > 1) {
      el = [...swiper.el.querySelectorAll(params.el)];
      if (el.length > 1) {
        el = el.filter((subEl) => {
          if (elementParents(subEl, ".swiper")[0] !== swiper.el) return false;
          return true;
        })[0];
      }
    }
    if (Array.isArray(el) && el.length === 1) el = el[0];
    Object.assign(swiper.pagination, {
      el
    });
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      if (params.type === "bullets" && params.clickable) {
        subEl.classList.add(...(params.clickableClass || "").split(" "));
      }
      subEl.classList.add(params.modifierClass + params.type);
      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
      if (params.type === "bullets" && params.dynamicBullets) {
        subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);
        dynamicBulletIndex = 0;
        if (params.dynamicMainBullets < 1) {
          params.dynamicMainBullets = 1;
        }
      }
      if (params.type === "progressbar" && params.progressbarOpposite) {
        subEl.classList.add(params.progressbarOppositeClass);
      }
      if (params.clickable) {
        subEl.addEventListener("click", onBulletClick);
      }
      if (!swiper.enabled) {
        subEl.classList.add(params.lockClass);
      }
    });
  }
  function destroy() {
    const params = swiper.params.pagination;
    if (isPaginationDisabled()) return;
    let el = swiper.pagination.el;
    if (el) {
      el = makeElementsArray(el);
      el.forEach((subEl) => {
        subEl.classList.remove(params.hiddenClass);
        subEl.classList.remove(params.modifierClass + params.type);
        subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
        if (params.clickable) {
          subEl.classList.remove(...(params.clickableClass || "").split(" "));
          subEl.removeEventListener("click", onBulletClick);
        }
      });
    }
    if (swiper.pagination.bullets) swiper.pagination.bullets.forEach((subEl) => subEl.classList.remove(...params.bulletActiveClass.split(" ")));
  }
  on("changeDirection", () => {
    if (!swiper.pagination || !swiper.pagination.el) return;
    const params = swiper.params.pagination;
    let {
      el
    } = swiper.pagination;
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      subEl.classList.remove(params.horizontalClass, params.verticalClass);
      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
    });
  });
  on("init", () => {
    if (swiper.params.pagination.enabled === false) {
      disable3();
    } else {
      init();
      render();
      update2();
    }
  });
  on("activeIndexChange", () => {
    if (typeof swiper.snapIndex === "undefined") {
      update2();
    }
  });
  on("snapIndexChange", () => {
    update2();
  });
  on("snapGridLengthChange", () => {
    render();
    update2();
  });
  on("destroy", () => {
    destroy();
  });
  on("enable disable", () => {
    let {
      el
    } = swiper.pagination;
    if (el) {
      el = makeElementsArray(el);
      el.forEach((subEl) => subEl.classList[swiper.enabled ? "remove" : "add"](swiper.params.pagination.lockClass));
    }
  });
  on("lock unlock", () => {
    update2();
  });
  on("click", (_s, e) => {
    const targetEl = e.target;
    const el = makeElementsArray(swiper.pagination.el);
    if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {
      if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;
      const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);
      if (isHidden === true) {
        emit("paginationShow");
      } else {
        emit("paginationHide");
      }
      el.forEach((subEl) => subEl.classList.toggle(swiper.params.pagination.hiddenClass));
    }
  });
  const enable3 = () => {
    swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);
    let {
      el
    } = swiper.pagination;
    if (el) {
      el = makeElementsArray(el);
      el.forEach((subEl) => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));
    }
    init();
    render();
    update2();
  };
  const disable3 = () => {
    swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);
    let {
      el
    } = swiper.pagination;
    if (el) {
      el = makeElementsArray(el);
      el.forEach((subEl) => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));
    }
    destroy();
  };
  Object.assign(swiper.pagination, {
    enable: enable3,
    disable: disable3,
    render,
    update: update2,
    init,
    destroy
  });
}

// node_modules/framework7/node_modules/swiper/modules/scrollbar.mjs
function Scrollbar(_ref) {
  let {
    swiper,
    extendParams,
    on,
    emit
  } = _ref;
  const document2 = getDocument2();
  let isTouched = false;
  let timeout = null;
  let dragTimeout = null;
  let dragStartPos;
  let dragSize;
  let trackSize;
  let divider;
  extendParams({
    scrollbar: {
      el: null,
      dragSize: "auto",
      hide: false,
      draggable: false,
      snapOnRelease: true,
      lockClass: "swiper-scrollbar-lock",
      dragClass: "swiper-scrollbar-drag",
      scrollbarDisabledClass: "swiper-scrollbar-disabled",
      horizontalClass: `swiper-scrollbar-horizontal`,
      verticalClass: `swiper-scrollbar-vertical`
    }
  });
  swiper.scrollbar = {
    el: null,
    dragEl: null
  };
  function setTranslate2() {
    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
    const {
      scrollbar,
      rtlTranslate: rtl
    } = swiper;
    const {
      dragEl,
      el
    } = scrollbar;
    const params = swiper.params.scrollbar;
    const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;
    let newSize = dragSize;
    let newPos = (trackSize - dragSize) * progress;
    if (rtl) {
      newPos = -newPos;
      if (newPos > 0) {
        newSize = dragSize - newPos;
        newPos = 0;
      } else if (-newPos + dragSize > trackSize) {
        newSize = trackSize + newPos;
      }
    } else if (newPos < 0) {
      newSize = dragSize + newPos;
      newPos = 0;
    } else if (newPos + dragSize > trackSize) {
      newSize = trackSize - newPos;
    }
    if (swiper.isHorizontal()) {
      dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;
      dragEl.style.width = `${newSize}px`;
    } else {
      dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;
      dragEl.style.height = `${newSize}px`;
    }
    if (params.hide) {
      clearTimeout(timeout);
      el.style.opacity = 1;
      timeout = setTimeout(() => {
        el.style.opacity = 0;
        el.style.transitionDuration = "400ms";
      }, 1e3);
    }
  }
  function setTransition2(duration) {
    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
    swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;
  }
  function updateSize2() {
    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
    const {
      scrollbar
    } = swiper;
    const {
      dragEl,
      el
    } = scrollbar;
    dragEl.style.width = "";
    dragEl.style.height = "";
    trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;
    divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));
    if (swiper.params.scrollbar.dragSize === "auto") {
      dragSize = trackSize * divider;
    } else {
      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
    }
    if (swiper.isHorizontal()) {
      dragEl.style.width = `${dragSize}px`;
    } else {
      dragEl.style.height = `${dragSize}px`;
    }
    if (divider >= 1) {
      el.style.display = "none";
    } else {
      el.style.display = "";
    }
    if (swiper.params.scrollbar.hide) {
      el.style.opacity = 0;
    }
    if (swiper.params.watchOverflow && swiper.enabled) {
      scrollbar.el.classList[swiper.isLocked ? "add" : "remove"](swiper.params.scrollbar.lockClass);
    }
  }
  function getPointerPosition(e) {
    return swiper.isHorizontal() ? e.clientX : e.clientY;
  }
  function setDragPosition(e) {
    const {
      scrollbar,
      rtlTranslate: rtl
    } = swiper;
    const {
      el
    } = scrollbar;
    let positionRatio;
    positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? "left" : "top"] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
    positionRatio = Math.max(Math.min(positionRatio, 1), 0);
    if (rtl) {
      positionRatio = 1 - positionRatio;
    }
    const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;
    swiper.updateProgress(position);
    swiper.setTranslate(position);
    swiper.updateActiveIndex();
    swiper.updateSlidesClasses();
  }
  function onDragStart(e) {
    const params = swiper.params.scrollbar;
    const {
      scrollbar,
      wrapperEl
    } = swiper;
    const {
      el,
      dragEl
    } = scrollbar;
    isTouched = true;
    dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? "left" : "top"] : null;
    e.preventDefault();
    e.stopPropagation();
    wrapperEl.style.transitionDuration = "100ms";
    dragEl.style.transitionDuration = "100ms";
    setDragPosition(e);
    clearTimeout(dragTimeout);
    el.style.transitionDuration = "0ms";
    if (params.hide) {
      el.style.opacity = 1;
    }
    if (swiper.params.cssMode) {
      swiper.wrapperEl.style["scroll-snap-type"] = "none";
    }
    emit("scrollbarDragStart", e);
  }
  function onDragMove(e) {
    const {
      scrollbar,
      wrapperEl
    } = swiper;
    const {
      el,
      dragEl
    } = scrollbar;
    if (!isTouched) return;
    if (e.preventDefault) e.preventDefault();
    else e.returnValue = false;
    setDragPosition(e);
    wrapperEl.style.transitionDuration = "0ms";
    el.style.transitionDuration = "0ms";
    dragEl.style.transitionDuration = "0ms";
    emit("scrollbarDragMove", e);
  }
  function onDragEnd(e) {
    const params = swiper.params.scrollbar;
    const {
      scrollbar,
      wrapperEl
    } = swiper;
    const {
      el
    } = scrollbar;
    if (!isTouched) return;
    isTouched = false;
    if (swiper.params.cssMode) {
      swiper.wrapperEl.style["scroll-snap-type"] = "";
      wrapperEl.style.transitionDuration = "";
    }
    if (params.hide) {
      clearTimeout(dragTimeout);
      dragTimeout = nextTick2(() => {
        el.style.opacity = 0;
        el.style.transitionDuration = "400ms";
      }, 1e3);
    }
    emit("scrollbarDragEnd", e);
    if (params.snapOnRelease) {
      swiper.slideToClosest();
    }
  }
  function events2(method) {
    const {
      scrollbar,
      params
    } = swiper;
    const el = scrollbar.el;
    if (!el) return;
    const target = el;
    const activeListener = params.passiveListeners ? {
      passive: false,
      capture: false
    } : false;
    const passiveListener = params.passiveListeners ? {
      passive: true,
      capture: false
    } : false;
    if (!target) return;
    const eventMethod = method === "on" ? "addEventListener" : "removeEventListener";
    target[eventMethod]("pointerdown", onDragStart, activeListener);
    document2[eventMethod]("pointermove", onDragMove, activeListener);
    document2[eventMethod]("pointerup", onDragEnd, passiveListener);
  }
  function enableDraggable() {
    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
    events2("on");
  }
  function disableDraggable() {
    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
    events2("off");
  }
  function init() {
    const {
      scrollbar,
      el: swiperEl
    } = swiper;
    swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {
      el: "swiper-scrollbar"
    });
    const params = swiper.params.scrollbar;
    if (!params.el) return;
    let el;
    if (typeof params.el === "string" && swiper.isElement) {
      el = swiper.el.querySelector(params.el);
    }
    if (!el && typeof params.el === "string") {
      el = document2.querySelectorAll(params.el);
    } else if (!el) {
      el = params.el;
    }
    if (swiper.params.uniqueNavElements && typeof params.el === "string" && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {
      el = swiperEl.querySelector(params.el);
    }
    if (el.length > 0) el = el[0];
    el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
    let dragEl;
    if (el) {
      dragEl = el.querySelector(`.${swiper.params.scrollbar.dragClass}`);
      if (!dragEl) {
        dragEl = createElement("div", swiper.params.scrollbar.dragClass);
        el.append(dragEl);
      }
    }
    Object.assign(scrollbar, {
      el,
      dragEl
    });
    if (params.draggable) {
      enableDraggable();
    }
    if (el) {
      el.classList[swiper.enabled ? "remove" : "add"](swiper.params.scrollbar.lockClass);
    }
  }
  function destroy() {
    const params = swiper.params.scrollbar;
    const el = swiper.scrollbar.el;
    if (el) {
      el.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
    }
    disableDraggable();
  }
  on("init", () => {
    if (swiper.params.scrollbar.enabled === false) {
      disable3();
    } else {
      init();
      updateSize2();
      setTranslate2();
    }
  });
  on("update resize observerUpdate lock unlock", () => {
    updateSize2();
  });
  on("setTranslate", () => {
    setTranslate2();
  });
  on("setTransition", (_s, duration) => {
    setTransition2(duration);
  });
  on("enable disable", () => {
    const {
      el
    } = swiper.scrollbar;
    if (el) {
      el.classList[swiper.enabled ? "remove" : "add"](swiper.params.scrollbar.lockClass);
    }
  });
  on("destroy", () => {
    destroy();
  });
  const enable3 = () => {
    swiper.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);
    if (swiper.scrollbar.el) {
      swiper.scrollbar.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);
    }
    init();
    updateSize2();
    setTranslate2();
  };
  const disable3 = () => {
    swiper.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);
    if (swiper.scrollbar.el) {
      swiper.scrollbar.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);
    }
    destroy();
  };
  Object.assign(swiper.scrollbar, {
    enable: enable3,
    disable: disable3,
    updateSize: updateSize2,
    setTranslate: setTranslate2,
    init,
    destroy
  });
}

// node_modules/framework7/node_modules/swiper/modules/parallax.mjs
function Parallax(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    parallax: {
      enabled: false
    }
  });
  const elementsSelector = "[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]";
  const setTransform = (el, progress) => {
    const {
      rtl
    } = swiper;
    const rtlFactor = rtl ? -1 : 1;
    const p = el.getAttribute("data-swiper-parallax") || "0";
    let x = el.getAttribute("data-swiper-parallax-x");
    let y = el.getAttribute("data-swiper-parallax-y");
    const scale = el.getAttribute("data-swiper-parallax-scale");
    const opacity = el.getAttribute("data-swiper-parallax-opacity");
    const rotate = el.getAttribute("data-swiper-parallax-rotate");
    if (x || y) {
      x = x || "0";
      y = y || "0";
    } else if (swiper.isHorizontal()) {
      x = p;
      y = "0";
    } else {
      y = p;
      x = "0";
    }
    if (x.indexOf("%") >= 0) {
      x = `${parseInt(x, 10) * progress * rtlFactor}%`;
    } else {
      x = `${x * progress * rtlFactor}px`;
    }
    if (y.indexOf("%") >= 0) {
      y = `${parseInt(y, 10) * progress}%`;
    } else {
      y = `${y * progress}px`;
    }
    if (typeof opacity !== "undefined" && opacity !== null) {
      const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));
      el.style.opacity = currentOpacity;
    }
    let transform = `translate3d(${x}, ${y}, 0px)`;
    if (typeof scale !== "undefined" && scale !== null) {
      const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));
      transform += ` scale(${currentScale})`;
    }
    if (rotate && typeof rotate !== "undefined" && rotate !== null) {
      const currentRotate = rotate * progress * -1;
      transform += ` rotate(${currentRotate}deg)`;
    }
    el.style.transform = transform;
  };
  const setTranslate2 = () => {
    const {
      el,
      slides,
      progress,
      snapGrid,
      isElement
    } = swiper;
    const elements = elementChildren(el, elementsSelector);
    if (swiper.isElement) {
      elements.push(...elementChildren(swiper.hostEl, elementsSelector));
    }
    elements.forEach((subEl) => {
      setTransform(subEl, progress);
    });
    slides.forEach((slideEl, slideIndex) => {
      let slideProgress = slideEl.progress;
      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== "auto") {
        slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);
      }
      slideProgress = Math.min(Math.max(slideProgress, -1), 1);
      slideEl.querySelectorAll(`${elementsSelector}, [data-swiper-parallax-rotate]`).forEach((subEl) => {
        setTransform(subEl, slideProgress);
      });
    });
  };
  const setTransition2 = function(duration) {
    if (duration === void 0) {
      duration = swiper.params.speed;
    }
    const {
      el,
      hostEl
    } = swiper;
    const elements = [...el.querySelectorAll(elementsSelector)];
    if (swiper.isElement) {
      elements.push(...hostEl.querySelectorAll(elementsSelector));
    }
    elements.forEach((parallaxEl) => {
      let parallaxDuration = parseInt(parallaxEl.getAttribute("data-swiper-parallax-duration"), 10) || duration;
      if (duration === 0) parallaxDuration = 0;
      parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;
    });
  };
  on("beforeInit", () => {
    if (!swiper.params.parallax.enabled) return;
    swiper.params.watchSlidesProgress = true;
    swiper.originalParams.watchSlidesProgress = true;
  });
  on("init", () => {
    if (!swiper.params.parallax.enabled) return;
    setTranslate2();
  });
  on("setTranslate", () => {
    if (!swiper.params.parallax.enabled) return;
    setTranslate2();
  });
  on("setTransition", (_swiper, duration) => {
    if (!swiper.params.parallax.enabled) return;
    setTransition2(duration);
  });
}

// node_modules/framework7/node_modules/swiper/modules/zoom.mjs
function Zoom(_ref) {
  let {
    swiper,
    extendParams,
    on,
    emit
  } = _ref;
  const window2 = getWindow2();
  extendParams({
    zoom: {
      enabled: false,
      maxRatio: 3,
      minRatio: 1,
      toggle: true,
      containerClass: "swiper-zoom-container",
      zoomedSlideClass: "swiper-slide-zoomed"
    }
  });
  swiper.zoom = {
    enabled: false
  };
  let currentScale = 1;
  let isScaling = false;
  let fakeGestureTouched;
  let fakeGestureMoved;
  const evCache = [];
  const gesture = {
    originX: 0,
    originY: 0,
    slideEl: void 0,
    slideWidth: void 0,
    slideHeight: void 0,
    imageEl: void 0,
    imageWrapEl: void 0,
    maxRatio: 3
  };
  const image = {
    isTouched: void 0,
    isMoved: void 0,
    currentX: void 0,
    currentY: void 0,
    minX: void 0,
    minY: void 0,
    maxX: void 0,
    maxY: void 0,
    width: void 0,
    height: void 0,
    startX: void 0,
    startY: void 0,
    touchesStart: {},
    touchesCurrent: {}
  };
  const velocity = {
    x: void 0,
    y: void 0,
    prevPositionX: void 0,
    prevPositionY: void 0,
    prevTime: void 0
  };
  let scale = 1;
  Object.defineProperty(swiper.zoom, "scale", {
    get() {
      return scale;
    },
    set(value) {
      if (scale !== value) {
        const imageEl = gesture.imageEl;
        const slideEl = gesture.slideEl;
        emit("zoomChange", value, imageEl, slideEl);
      }
      scale = value;
    }
  });
  function getDistanceBetweenTouches() {
    if (evCache.length < 2) return 1;
    const x1 = evCache[0].pageX;
    const y1 = evCache[0].pageY;
    const x2 = evCache[1].pageX;
    const y2 = evCache[1].pageY;
    const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
    return distance;
  }
  function getScaleOrigin() {
    if (evCache.length < 2) return {
      x: null,
      y: null
    };
    const box = gesture.imageEl.getBoundingClientRect();
    return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window2.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window2.scrollY) / currentScale];
  }
  function getSlideSelector() {
    return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;
  }
  function eventWithinSlide(e) {
    const slideSelector = getSlideSelector();
    if (e.target.matches(slideSelector)) return true;
    if (swiper.slides.filter((slideEl) => slideEl.contains(e.target)).length > 0) return true;
    return false;
  }
  function eventWithinZoomContainer(e) {
    const selector = `.${swiper.params.zoom.containerClass}`;
    if (e.target.matches(selector)) return true;
    if ([...swiper.hostEl.querySelectorAll(selector)].filter((containerEl) => containerEl.contains(e.target)).length > 0) return true;
    return false;
  }
  function onGestureStart(e) {
    if (e.pointerType === "mouse") {
      evCache.splice(0, evCache.length);
    }
    if (!eventWithinSlide(e)) return;
    const params = swiper.params.zoom;
    fakeGestureTouched = false;
    fakeGestureMoved = false;
    evCache.push(e);
    if (evCache.length < 2) {
      return;
    }
    fakeGestureTouched = true;
    gesture.scaleStart = getDistanceBetweenTouches();
    if (!gesture.slideEl) {
      gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
      if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];
      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
      if (imageEl) {
        imageEl = imageEl.querySelectorAll("picture, img, svg, canvas, .swiper-zoom-target")[0];
      }
      gesture.imageEl = imageEl;
      if (imageEl) {
        gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
      } else {
        gesture.imageWrapEl = void 0;
      }
      if (!gesture.imageWrapEl) {
        gesture.imageEl = void 0;
        return;
      }
      gesture.maxRatio = gesture.imageWrapEl.getAttribute("data-swiper-zoom") || params.maxRatio;
    }
    if (gesture.imageEl) {
      const [originX, originY] = getScaleOrigin();
      gesture.originX = originX;
      gesture.originY = originY;
      gesture.imageEl.style.transitionDuration = "0ms";
    }
    isScaling = true;
  }
  function onGestureChange(e) {
    if (!eventWithinSlide(e)) return;
    const params = swiper.params.zoom;
    const zoom = swiper.zoom;
    const pointerIndex = evCache.findIndex((cachedEv) => cachedEv.pointerId === e.pointerId);
    if (pointerIndex >= 0) evCache[pointerIndex] = e;
    if (evCache.length < 2) {
      return;
    }
    fakeGestureMoved = true;
    gesture.scaleMove = getDistanceBetweenTouches();
    if (!gesture.imageEl) {
      return;
    }
    zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;
    if (zoom.scale > gesture.maxRatio) {
      zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;
    }
    if (zoom.scale < params.minRatio) {
      zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;
    }
    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
  }
  function onGestureEnd(e) {
    if (!eventWithinSlide(e)) return;
    if (e.pointerType === "mouse" && e.type === "pointerout") return;
    const params = swiper.params.zoom;
    const zoom = swiper.zoom;
    const pointerIndex = evCache.findIndex((cachedEv) => cachedEv.pointerId === e.pointerId);
    if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);
    if (!fakeGestureTouched || !fakeGestureMoved) {
      return;
    }
    fakeGestureTouched = false;
    fakeGestureMoved = false;
    if (!gesture.imageEl) return;
    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
    gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;
    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
    currentScale = zoom.scale;
    isScaling = false;
    if (zoom.scale > 1 && gesture.slideEl) {
      gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);
    } else if (zoom.scale <= 1 && gesture.slideEl) {
      gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
    }
    if (zoom.scale === 1) {
      gesture.originX = 0;
      gesture.originY = 0;
      gesture.slideEl = void 0;
    }
  }
  function onTouchStart2(e) {
    const device = swiper.device;
    if (!gesture.imageEl) return;
    if (image.isTouched) return;
    if (device.android && e.cancelable) e.preventDefault();
    image.isTouched = true;
    const event2 = evCache.length > 0 ? evCache[0] : e;
    image.touchesStart.x = event2.pageX;
    image.touchesStart.y = event2.pageY;
  }
  function onTouchMove2(e) {
    if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;
    const zoom = swiper.zoom;
    if (!gesture.imageEl) return;
    if (!image.isTouched || !gesture.slideEl) return;
    if (!image.isMoved) {
      image.width = gesture.imageEl.offsetWidth;
      image.height = gesture.imageEl.offsetHeight;
      image.startX = getTranslate2(gesture.imageWrapEl, "x") || 0;
      image.startY = getTranslate2(gesture.imageWrapEl, "y") || 0;
      gesture.slideWidth = gesture.slideEl.offsetWidth;
      gesture.slideHeight = gesture.slideEl.offsetHeight;
      gesture.imageWrapEl.style.transitionDuration = "0ms";
    }
    const scaledWidth = image.width * zoom.scale;
    const scaledHeight = image.height * zoom.scale;
    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
    image.maxX = -image.minX;
    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
    image.maxY = -image.minY;
    image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;
    image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;
    const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));
    if (touchesDiff > 5) {
      swiper.allowClick = false;
    }
    if (!image.isMoved && !isScaling) {
      if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {
        image.isTouched = false;
        return;
      }
      if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {
        image.isTouched = false;
        return;
      }
    }
    if (e.cancelable) {
      e.preventDefault();
    }
    e.stopPropagation();
    image.isMoved = true;
    const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);
    const {
      originX,
      originY
    } = gesture;
    image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);
    image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);
    if (image.currentX < image.minX) {
      image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;
    }
    if (image.currentX > image.maxX) {
      image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;
    }
    if (image.currentY < image.minY) {
      image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;
    }
    if (image.currentY > image.maxY) {
      image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;
    }
    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
    if (!velocity.prevTime) velocity.prevTime = Date.now();
    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
    velocity.prevPositionX = image.touchesCurrent.x;
    velocity.prevPositionY = image.touchesCurrent.y;
    velocity.prevTime = Date.now();
    gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;
  }
  function onTouchEnd2() {
    const zoom = swiper.zoom;
    if (!gesture.imageEl) return;
    if (!image.isTouched || !image.isMoved) {
      image.isTouched = false;
      image.isMoved = false;
      return;
    }
    image.isTouched = false;
    image.isMoved = false;
    let momentumDurationX = 300;
    let momentumDurationY = 300;
    const momentumDistanceX = velocity.x * momentumDurationX;
    const newPositionX = image.currentX + momentumDistanceX;
    const momentumDistanceY = velocity.y * momentumDurationY;
    const newPositionY = image.currentY + momentumDistanceY;
    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);
    image.currentX = newPositionX;
    image.currentY = newPositionY;
    const scaledWidth = image.width * zoom.scale;
    const scaledHeight = image.height * zoom.scale;
    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
    image.maxX = -image.minX;
    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
    image.maxY = -image.minY;
    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
    gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;
    gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;
  }
  function onTransitionEnd() {
    const zoom = swiper.zoom;
    if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {
      if (gesture.imageEl) {
        gesture.imageEl.style.transform = "translate3d(0,0,0) scale(1)";
      }
      if (gesture.imageWrapEl) {
        gesture.imageWrapEl.style.transform = "translate3d(0,0,0)";
      }
      gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);
      zoom.scale = 1;
      currentScale = 1;
      gesture.slideEl = void 0;
      gesture.imageEl = void 0;
      gesture.imageWrapEl = void 0;
      gesture.originX = 0;
      gesture.originY = 0;
    }
  }
  function zoomIn(e) {
    const zoom = swiper.zoom;
    const params = swiper.params.zoom;
    if (!gesture.slideEl) {
      if (e && e.target) {
        gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
      }
      if (!gesture.slideEl) {
        if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
          gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];
        } else {
          gesture.slideEl = swiper.slides[swiper.activeIndex];
        }
      }
      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
      if (imageEl) {
        imageEl = imageEl.querySelectorAll("picture, img, svg, canvas, .swiper-zoom-target")[0];
      }
      gesture.imageEl = imageEl;
      if (imageEl) {
        gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
      } else {
        gesture.imageWrapEl = void 0;
      }
    }
    if (!gesture.imageEl || !gesture.imageWrapEl) return;
    if (swiper.params.cssMode) {
      swiper.wrapperEl.style.overflow = "hidden";
      swiper.wrapperEl.style.touchAction = "none";
    }
    gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);
    let touchX;
    let touchY;
    let offsetX;
    let offsetY;
    let diffX;
    let diffY;
    let translateX;
    let translateY;
    let imageWidth;
    let imageHeight;
    let scaledWidth;
    let scaledHeight;
    let translateMinX;
    let translateMinY;
    let translateMaxX;
    let translateMaxY;
    let slideWidth;
    let slideHeight;
    if (typeof image.touchesStart.x === "undefined" && e) {
      touchX = e.pageX;
      touchY = e.pageY;
    } else {
      touchX = image.touchesStart.x;
      touchY = image.touchesStart.y;
    }
    const forceZoomRatio = typeof e === "number" ? e : null;
    if (currentScale === 1 && forceZoomRatio) {
      touchX = void 0;
      touchY = void 0;
    }
    zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute("data-swiper-zoom") || params.maxRatio;
    currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute("data-swiper-zoom") || params.maxRatio;
    if (e && !(currentScale === 1 && forceZoomRatio)) {
      slideWidth = gesture.slideEl.offsetWidth;
      slideHeight = gesture.slideEl.offsetHeight;
      offsetX = elementOffset(gesture.slideEl).left + window2.scrollX;
      offsetY = elementOffset(gesture.slideEl).top + window2.scrollY;
      diffX = offsetX + slideWidth / 2 - touchX;
      diffY = offsetY + slideHeight / 2 - touchY;
      imageWidth = gesture.imageEl.offsetWidth;
      imageHeight = gesture.imageEl.offsetHeight;
      scaledWidth = imageWidth * zoom.scale;
      scaledHeight = imageHeight * zoom.scale;
      translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);
      translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);
      translateMaxX = -translateMinX;
      translateMaxY = -translateMinY;
      translateX = diffX * zoom.scale;
      translateY = diffY * zoom.scale;
      if (translateX < translateMinX) {
        translateX = translateMinX;
      }
      if (translateX > translateMaxX) {
        translateX = translateMaxX;
      }
      if (translateY < translateMinY) {
        translateY = translateMinY;
      }
      if (translateY > translateMaxY) {
        translateY = translateMaxY;
      }
    } else {
      translateX = 0;
      translateY = 0;
    }
    if (forceZoomRatio && zoom.scale === 1) {
      gesture.originX = 0;
      gesture.originY = 0;
    }
    gesture.imageWrapEl.style.transitionDuration = "300ms";
    gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;
    gesture.imageEl.style.transitionDuration = "300ms";
    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
  }
  function zoomOut() {
    const zoom = swiper.zoom;
    const params = swiper.params.zoom;
    if (!gesture.slideEl) {
      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
        gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];
      } else {
        gesture.slideEl = swiper.slides[swiper.activeIndex];
      }
      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
      if (imageEl) {
        imageEl = imageEl.querySelectorAll("picture, img, svg, canvas, .swiper-zoom-target")[0];
      }
      gesture.imageEl = imageEl;
      if (imageEl) {
        gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
      } else {
        gesture.imageWrapEl = void 0;
      }
    }
    if (!gesture.imageEl || !gesture.imageWrapEl) return;
    if (swiper.params.cssMode) {
      swiper.wrapperEl.style.overflow = "";
      swiper.wrapperEl.style.touchAction = "";
    }
    zoom.scale = 1;
    currentScale = 1;
    gesture.imageWrapEl.style.transitionDuration = "300ms";
    gesture.imageWrapEl.style.transform = "translate3d(0,0,0)";
    gesture.imageEl.style.transitionDuration = "300ms";
    gesture.imageEl.style.transform = "translate3d(0,0,0) scale(1)";
    gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
    gesture.slideEl = void 0;
    gesture.originX = 0;
    gesture.originY = 0;
  }
  function zoomToggle(e) {
    const zoom = swiper.zoom;
    if (zoom.scale && zoom.scale !== 1) {
      zoomOut();
    } else {
      zoomIn(e);
    }
  }
  function getListeners() {
    const passiveListener = swiper.params.passiveListeners ? {
      passive: true,
      capture: false
    } : false;
    const activeListenerWithCapture = swiper.params.passiveListeners ? {
      passive: false,
      capture: true
    } : true;
    return {
      passiveListener,
      activeListenerWithCapture
    };
  }
  function enable3() {
    const zoom = swiper.zoom;
    if (zoom.enabled) return;
    zoom.enabled = true;
    const {
      passiveListener,
      activeListenerWithCapture
    } = getListeners();
    swiper.wrapperEl.addEventListener("pointerdown", onGestureStart, passiveListener);
    swiper.wrapperEl.addEventListener("pointermove", onGestureChange, activeListenerWithCapture);
    ["pointerup", "pointercancel", "pointerout"].forEach((eventName) => {
      swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);
    });
    swiper.wrapperEl.addEventListener("pointermove", onTouchMove2, activeListenerWithCapture);
  }
  function disable3() {
    const zoom = swiper.zoom;
    if (!zoom.enabled) return;
    zoom.enabled = false;
    const {
      passiveListener,
      activeListenerWithCapture
    } = getListeners();
    swiper.wrapperEl.removeEventListener("pointerdown", onGestureStart, passiveListener);
    swiper.wrapperEl.removeEventListener("pointermove", onGestureChange, activeListenerWithCapture);
    ["pointerup", "pointercancel", "pointerout"].forEach((eventName) => {
      swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);
    });
    swiper.wrapperEl.removeEventListener("pointermove", onTouchMove2, activeListenerWithCapture);
  }
  on("init", () => {
    if (swiper.params.zoom.enabled) {
      enable3();
    }
  });
  on("destroy", () => {
    disable3();
  });
  on("touchStart", (_s, e) => {
    if (!swiper.zoom.enabled) return;
    onTouchStart2(e);
  });
  on("touchEnd", (_s, e) => {
    if (!swiper.zoom.enabled) return;
    onTouchEnd2();
  });
  on("doubleTap", (_s, e) => {
    if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
      zoomToggle(e);
    }
  });
  on("transitionEnd", () => {
    if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
      onTransitionEnd();
    }
  });
  on("slideChange", () => {
    if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
      onTransitionEnd();
    }
  });
  Object.assign(swiper.zoom, {
    enable: enable3,
    disable: disable3,
    in: zoomIn,
    out: zoomOut,
    toggle: zoomToggle
  });
}

// node_modules/framework7/node_modules/swiper/modules/controller.mjs
function Controller(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    controller: {
      control: void 0,
      inverse: false,
      by: "slide"
      // or 'container'
    }
  });
  swiper.controller = {
    control: void 0
  };
  function LinearSpline(x, y) {
    const binarySearch = /* @__PURE__ */ function search() {
      let maxIndex;
      let minIndex;
      let guess;
      return (array, val) => {
        minIndex = -1;
        maxIndex = array.length;
        while (maxIndex - minIndex > 1) {
          guess = maxIndex + minIndex >> 1;
          if (array[guess] <= val) {
            minIndex = guess;
          } else {
            maxIndex = guess;
          }
        }
        return maxIndex;
      };
    }();
    this.x = x;
    this.y = y;
    this.lastIndex = x.length - 1;
    let i1;
    let i3;
    this.interpolate = function interpolate(x2) {
      if (!x2) return 0;
      i3 = binarySearch(this.x, x2);
      i1 = i3 - 1;
      return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];
    };
    return this;
  }
  function getInterpolateFunction(c) {
    swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);
  }
  function setTranslate2(_t, byController) {
    const controlled = swiper.controller.control;
    let multiplier;
    let controlledTranslate;
    const Swiper2 = swiper.constructor;
    function setControlledTranslate(c) {
      if (c.destroyed) return;
      const translate2 = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
      if (swiper.params.controller.by === "slide") {
        getInterpolateFunction(c);
        controlledTranslate = -swiper.controller.spline.interpolate(-translate2);
      }
      if (!controlledTranslate || swiper.params.controller.by === "container") {
        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
        if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) {
          multiplier = 1;
        }
        controlledTranslate = (translate2 - swiper.minTranslate()) * multiplier + c.minTranslate();
      }
      if (swiper.params.controller.inverse) {
        controlledTranslate = c.maxTranslate() - controlledTranslate;
      }
      c.updateProgress(controlledTranslate);
      c.setTranslate(controlledTranslate, swiper);
      c.updateActiveIndex();
      c.updateSlidesClasses();
    }
    if (Array.isArray(controlled)) {
      for (let i = 0; i < controlled.length; i += 1) {
        if (controlled[i] !== byController && controlled[i] instanceof Swiper2) {
          setControlledTranslate(controlled[i]);
        }
      }
    } else if (controlled instanceof Swiper2 && byController !== controlled) {
      setControlledTranslate(controlled);
    }
  }
  function setTransition2(duration, byController) {
    const Swiper2 = swiper.constructor;
    const controlled = swiper.controller.control;
    let i;
    function setControlledTransition(c) {
      if (c.destroyed) return;
      c.setTransition(duration, swiper);
      if (duration !== 0) {
        c.transitionStart();
        if (c.params.autoHeight) {
          nextTick2(() => {
            c.updateAutoHeight();
          });
        }
        elementTransitionEnd(c.wrapperEl, () => {
          if (!controlled) return;
          c.transitionEnd();
        });
      }
    }
    if (Array.isArray(controlled)) {
      for (i = 0; i < controlled.length; i += 1) {
        if (controlled[i] !== byController && controlled[i] instanceof Swiper2) {
          setControlledTransition(controlled[i]);
        }
      }
    } else if (controlled instanceof Swiper2 && byController !== controlled) {
      setControlledTransition(controlled);
    }
  }
  function removeSpline() {
    if (!swiper.controller.control) return;
    if (swiper.controller.spline) {
      swiper.controller.spline = void 0;
      delete swiper.controller.spline;
    }
  }
  on("beforeInit", () => {
    if (typeof window !== "undefined" && // eslint-disable-line
    (typeof swiper.params.controller.control === "string" || swiper.params.controller.control instanceof HTMLElement)) {
      const controlElement = document.querySelector(swiper.params.controller.control);
      if (controlElement && controlElement.swiper) {
        swiper.controller.control = controlElement.swiper;
      } else if (controlElement) {
        const onControllerSwiper = (e) => {
          swiper.controller.control = e.detail[0];
          swiper.update();
          controlElement.removeEventListener("init", onControllerSwiper);
        };
        controlElement.addEventListener("init", onControllerSwiper);
      }
      return;
    }
    swiper.controller.control = swiper.params.controller.control;
  });
  on("update", () => {
    removeSpline();
  });
  on("resize", () => {
    removeSpline();
  });
  on("observerUpdate", () => {
    removeSpline();
  });
  on("setTranslate", (_s, translate2, byController) => {
    if (!swiper.controller.control || swiper.controller.control.destroyed) return;
    swiper.controller.setTranslate(translate2, byController);
  });
  on("setTransition", (_s, duration, byController) => {
    if (!swiper.controller.control || swiper.controller.control.destroyed) return;
    swiper.controller.setTransition(duration, byController);
  });
  Object.assign(swiper.controller, {
    setTranslate: setTranslate2,
    setTransition: setTransition2
  });
}

// node_modules/framework7/node_modules/swiper/modules/a11y.mjs
function A11y(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    a11y: {
      enabled: true,
      notificationClass: "swiper-notification",
      prevSlideMessage: "Previous slide",
      nextSlideMessage: "Next slide",
      firstSlideMessage: "This is the first slide",
      lastSlideMessage: "This is the last slide",
      paginationBulletMessage: "Go to slide {{index}}",
      slideLabelMessage: "{{index}} / {{slidesLength}}",
      containerMessage: null,
      containerRoleDescriptionMessage: null,
      itemRoleDescriptionMessage: null,
      slideRole: "group",
      id: null
    }
  });
  swiper.a11y = {
    clicked: false
  };
  let liveRegion = null;
  function notify(message) {
    const notification = liveRegion;
    if (notification.length === 0) return;
    notification.innerHTML = "";
    notification.innerHTML = message;
  }
  const makeElementsArray = (el) => (Array.isArray(el) ? el : [el]).filter((e) => !!e);
  function getRandomNumber(size) {
    if (size === void 0) {
      size = 16;
    }
    const randomChar = () => Math.round(16 * Math.random()).toString(16);
    return "x".repeat(size).replace(/x/g, randomChar);
  }
  function makeElFocusable(el) {
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      subEl.setAttribute("tabIndex", "0");
    });
  }
  function makeElNotFocusable(el) {
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      subEl.setAttribute("tabIndex", "-1");
    });
  }
  function addElRole(el, role) {
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      subEl.setAttribute("role", role);
    });
  }
  function addElRoleDescription(el, description) {
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      subEl.setAttribute("aria-roledescription", description);
    });
  }
  function addElControls(el, controls) {
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      subEl.setAttribute("aria-controls", controls);
    });
  }
  function addElLabel(el, label) {
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      subEl.setAttribute("aria-label", label);
    });
  }
  function addElId(el, id2) {
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      subEl.setAttribute("id", id2);
    });
  }
  function addElLive(el, live) {
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      subEl.setAttribute("aria-live", live);
    });
  }
  function disableEl(el) {
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      subEl.setAttribute("aria-disabled", true);
    });
  }
  function enableEl(el) {
    el = makeElementsArray(el);
    el.forEach((subEl) => {
      subEl.setAttribute("aria-disabled", false);
    });
  }
  function onEnterOrSpaceKey(e) {
    if (e.keyCode !== 13 && e.keyCode !== 32) return;
    const params = swiper.params.a11y;
    const targetEl = e.target;
    if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {
      if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;
    }
    if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) {
      if (!(swiper.isEnd && !swiper.params.loop)) {
        swiper.slideNext();
      }
      if (swiper.isEnd) {
        notify(params.lastSlideMessage);
      } else {
        notify(params.nextSlideMessage);
      }
    }
    if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) {
      if (!(swiper.isBeginning && !swiper.params.loop)) {
        swiper.slidePrev();
      }
      if (swiper.isBeginning) {
        notify(params.firstSlideMessage);
      } else {
        notify(params.prevSlideMessage);
      }
    }
    if (swiper.pagination && targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))) {
      targetEl.click();
    }
  }
  function updateNavigation() {
    if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;
    const {
      nextEl,
      prevEl
    } = swiper.navigation;
    if (prevEl) {
      if (swiper.isBeginning) {
        disableEl(prevEl);
        makeElNotFocusable(prevEl);
      } else {
        enableEl(prevEl);
        makeElFocusable(prevEl);
      }
    }
    if (nextEl) {
      if (swiper.isEnd) {
        disableEl(nextEl);
        makeElNotFocusable(nextEl);
      } else {
        enableEl(nextEl);
        makeElFocusable(nextEl);
      }
    }
  }
  function hasPagination() {
    return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;
  }
  function hasClickablePagination() {
    return hasPagination() && swiper.params.pagination.clickable;
  }
  function updatePagination() {
    const params = swiper.params.a11y;
    if (!hasPagination()) return;
    swiper.pagination.bullets.forEach((bulletEl) => {
      if (swiper.params.pagination.clickable) {
        makeElFocusable(bulletEl);
        if (!swiper.params.pagination.renderBullet) {
          addElRole(bulletEl, "button");
          addElLabel(bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, elementIndex(bulletEl) + 1));
        }
      }
      if (bulletEl.matches(classesToSelector(swiper.params.pagination.bulletActiveClass))) {
        bulletEl.setAttribute("aria-current", "true");
      } else {
        bulletEl.removeAttribute("aria-current");
      }
    });
  }
  const initNavEl = (el, wrapperId, message) => {
    makeElFocusable(el);
    if (el.tagName !== "BUTTON") {
      addElRole(el, "button");
      el.addEventListener("keydown", onEnterOrSpaceKey);
    }
    addElLabel(el, message);
    addElControls(el, wrapperId);
  };
  const handlePointerDown = () => {
    swiper.a11y.clicked = true;
  };
  const handlePointerUp = () => {
    requestAnimationFrame(() => {
      requestAnimationFrame(() => {
        if (!swiper.destroyed) {
          swiper.a11y.clicked = false;
        }
      });
    });
  };
  const handleFocus = (e) => {
    if (swiper.a11y.clicked) return;
    const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
    if (!slideEl || !swiper.slides.includes(slideEl)) return;
    const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;
    const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);
    if (isActive || isVisible) return;
    if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;
    if (swiper.isHorizontal()) {
      swiper.el.scrollLeft = 0;
    } else {
      swiper.el.scrollTop = 0;
    }
    swiper.slideTo(swiper.slides.indexOf(slideEl), 0);
  };
  const initSlides = () => {
    const params = swiper.params.a11y;
    if (params.itemRoleDescriptionMessage) {
      addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);
    }
    if (params.slideRole) {
      addElRole(swiper.slides, params.slideRole);
    }
    const slidesLength = swiper.slides.length;
    if (params.slideLabelMessage) {
      swiper.slides.forEach((slideEl, index) => {
        const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute("data-swiper-slide-index"), 10) : index;
        const ariaLabelMessage = params.slideLabelMessage.replace(/\{\{index\}\}/, slideIndex + 1).replace(/\{\{slidesLength\}\}/, slidesLength);
        addElLabel(slideEl, ariaLabelMessage);
      });
    }
  };
  const init = () => {
    const params = swiper.params.a11y;
    swiper.el.append(liveRegion);
    const containerEl = swiper.el;
    if (params.containerRoleDescriptionMessage) {
      addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);
    }
    if (params.containerMessage) {
      addElLabel(containerEl, params.containerMessage);
    }
    const wrapperEl = swiper.wrapperEl;
    const wrapperId = params.id || wrapperEl.getAttribute("id") || `swiper-wrapper-${getRandomNumber(16)}`;
    const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? "off" : "polite";
    addElId(wrapperEl, wrapperId);
    addElLive(wrapperEl, live);
    initSlides();
    let {
      nextEl,
      prevEl
    } = swiper.navigation ? swiper.navigation : {};
    nextEl = makeElementsArray(nextEl);
    prevEl = makeElementsArray(prevEl);
    if (nextEl) {
      nextEl.forEach((el) => initNavEl(el, wrapperId, params.nextSlideMessage));
    }
    if (prevEl) {
      prevEl.forEach((el) => initNavEl(el, wrapperId, params.prevSlideMessage));
    }
    if (hasClickablePagination()) {
      const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];
      paginationEl.forEach((el) => {
        el.addEventListener("keydown", onEnterOrSpaceKey);
      });
    }
    swiper.el.addEventListener("focus", handleFocus, true);
    swiper.el.addEventListener("pointerdown", handlePointerDown, true);
    swiper.el.addEventListener("pointerup", handlePointerUp, true);
  };
  function destroy() {
    if (liveRegion) liveRegion.remove();
    let {
      nextEl,
      prevEl
    } = swiper.navigation ? swiper.navigation : {};
    nextEl = makeElementsArray(nextEl);
    prevEl = makeElementsArray(prevEl);
    if (nextEl) {
      nextEl.forEach((el) => el.removeEventListener("keydown", onEnterOrSpaceKey));
    }
    if (prevEl) {
      prevEl.forEach((el) => el.removeEventListener("keydown", onEnterOrSpaceKey));
    }
    if (hasClickablePagination()) {
      const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];
      paginationEl.forEach((el) => {
        el.removeEventListener("keydown", onEnterOrSpaceKey);
      });
    }
    swiper.el.removeEventListener("focus", handleFocus, true);
    swiper.el.removeEventListener("pointerdown", handlePointerDown, true);
    swiper.el.removeEventListener("pointerup", handlePointerUp, true);
  }
  on("beforeInit", () => {
    liveRegion = createElement("span", swiper.params.a11y.notificationClass);
    liveRegion.setAttribute("aria-live", "assertive");
    liveRegion.setAttribute("aria-atomic", "true");
  });
  on("afterInit", () => {
    if (!swiper.params.a11y.enabled) return;
    init();
  });
  on("slidesLengthChange snapGridLengthChange slidesGridLengthChange", () => {
    if (!swiper.params.a11y.enabled) return;
    initSlides();
  });
  on("fromEdge toEdge afterInit lock unlock", () => {
    if (!swiper.params.a11y.enabled) return;
    updateNavigation();
  });
  on("paginationUpdate", () => {
    if (!swiper.params.a11y.enabled) return;
    updatePagination();
  });
  on("destroy", () => {
    if (!swiper.params.a11y.enabled) return;
    destroy();
  });
}

// node_modules/framework7/node_modules/swiper/modules/history.mjs
function History(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    history: {
      enabled: false,
      root: "",
      replaceState: false,
      key: "slides",
      keepQuery: false
    }
  });
  let initialized = false;
  let paths = {};
  const slugify = (text) => {
    return text.toString().replace(/\s+/g, "-").replace(/[^\w-]+/g, "").replace(/--+/g, "-").replace(/^-+/, "").replace(/-+$/, "");
  };
  const getPathValues = (urlOverride) => {
    const window2 = getWindow2();
    let location;
    if (urlOverride) {
      location = new URL(urlOverride);
    } else {
      location = window2.location;
    }
    const pathArray = location.pathname.slice(1).split("/").filter((part) => part !== "");
    const total = pathArray.length;
    const key = pathArray[total - 2];
    const value = pathArray[total - 1];
    return {
      key,
      value
    };
  };
  const setHistory = (key, index) => {
    const window2 = getWindow2();
    if (!initialized || !swiper.params.history.enabled) return;
    let location;
    if (swiper.params.url) {
      location = new URL(swiper.params.url);
    } else {
      location = window2.location;
    }
    const slide2 = swiper.slides[index];
    let value = slugify(slide2.getAttribute("data-history"));
    if (swiper.params.history.root.length > 0) {
      let root = swiper.params.history.root;
      if (root[root.length - 1] === "/") root = root.slice(0, root.length - 1);
      value = `${root}/${key ? `${key}/` : ""}${value}`;
    } else if (!location.pathname.includes(key)) {
      value = `${key ? `${key}/` : ""}${value}`;
    }
    if (swiper.params.history.keepQuery) {
      value += location.search;
    }
    const currentState = window2.history.state;
    if (currentState && currentState.value === value) {
      return;
    }
    if (swiper.params.history.replaceState) {
      window2.history.replaceState({
        value
      }, null, value);
    } else {
      window2.history.pushState({
        value
      }, null, value);
    }
  };
  const scrollToSlide = (speed, value, runCallbacks) => {
    if (value) {
      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {
        const slide2 = swiper.slides[i];
        const slideHistory = slugify(slide2.getAttribute("data-history"));
        if (slideHistory === value) {
          const index = swiper.getSlideIndex(slide2);
          swiper.slideTo(index, speed, runCallbacks);
        }
      }
    } else {
      swiper.slideTo(0, speed, runCallbacks);
    }
  };
  const setHistoryPopState = () => {
    paths = getPathValues(swiper.params.url);
    scrollToSlide(swiper.params.speed, paths.value, false);
  };
  const init = () => {
    const window2 = getWindow2();
    if (!swiper.params.history) return;
    if (!window2.history || !window2.history.pushState) {
      swiper.params.history.enabled = false;
      swiper.params.hashNavigation.enabled = true;
      return;
    }
    initialized = true;
    paths = getPathValues(swiper.params.url);
    if (!paths.key && !paths.value) {
      if (!swiper.params.history.replaceState) {
        window2.addEventListener("popstate", setHistoryPopState);
      }
      return;
    }
    scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);
    if (!swiper.params.history.replaceState) {
      window2.addEventListener("popstate", setHistoryPopState);
    }
  };
  const destroy = () => {
    const window2 = getWindow2();
    if (!swiper.params.history.replaceState) {
      window2.removeEventListener("popstate", setHistoryPopState);
    }
  };
  on("init", () => {
    if (swiper.params.history.enabled) {
      init();
    }
  });
  on("destroy", () => {
    if (swiper.params.history.enabled) {
      destroy();
    }
  });
  on("transitionEnd _freeModeNoMomentumRelease", () => {
    if (initialized) {
      setHistory(swiper.params.history.key, swiper.activeIndex);
    }
  });
  on("slideChange", () => {
    if (initialized && swiper.params.cssMode) {
      setHistory(swiper.params.history.key, swiper.activeIndex);
    }
  });
}

// node_modules/framework7/node_modules/swiper/modules/hash-navigation.mjs
function HashNavigation(_ref) {
  let {
    swiper,
    extendParams,
    emit,
    on
  } = _ref;
  let initialized = false;
  const document2 = getDocument2();
  const window2 = getWindow2();
  extendParams({
    hashNavigation: {
      enabled: false,
      replaceState: false,
      watchState: false,
      getSlideIndex(_s, hash) {
        if (swiper.virtual && swiper.params.virtual.enabled) {
          const slideWithHash = swiper.slides.filter((slideEl) => slideEl.getAttribute("data-hash") === hash)[0];
          if (!slideWithHash) return 0;
          const index = parseInt(slideWithHash.getAttribute("data-swiper-slide-index"), 10);
          return index;
        }
        return swiper.getSlideIndex(elementChildren(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash="${hash}"], swiper-slide[data-hash="${hash}"]`)[0]);
      }
    }
  });
  const onHashChange = () => {
    emit("hashChange");
    const newHash = document2.location.hash.replace("#", "");
    const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex];
    const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute("data-hash") : "";
    if (newHash !== activeSlideHash) {
      const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash);
      if (typeof newIndex === "undefined" || Number.isNaN(newIndex)) return;
      swiper.slideTo(newIndex);
    }
  };
  const setHash = () => {
    if (!initialized || !swiper.params.hashNavigation.enabled) return;
    const activeSlideEl = swiper.virtual && swiper.params.virtual.enabled ? swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`) : swiper.slides[swiper.activeIndex];
    const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute("data-hash") || activeSlideEl.getAttribute("data-history") : "";
    if (swiper.params.hashNavigation.replaceState && window2.history && window2.history.replaceState) {
      window2.history.replaceState(null, null, `#${activeSlideHash}` || "");
      emit("hashSet");
    } else {
      document2.location.hash = activeSlideHash || "";
      emit("hashSet");
    }
  };
  const init = () => {
    if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;
    initialized = true;
    const hash = document2.location.hash.replace("#", "");
    if (hash) {
      const speed = 0;
      const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash);
      swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true);
    }
    if (swiper.params.hashNavigation.watchState) {
      window2.addEventListener("hashchange", onHashChange);
    }
  };
  const destroy = () => {
    if (swiper.params.hashNavigation.watchState) {
      window2.removeEventListener("hashchange", onHashChange);
    }
  };
  on("init", () => {
    if (swiper.params.hashNavigation.enabled) {
      init();
    }
  });
  on("destroy", () => {
    if (swiper.params.hashNavigation.enabled) {
      destroy();
    }
  });
  on("transitionEnd _freeModeNoMomentumRelease", () => {
    if (initialized) {
      setHash();
    }
  });
  on("slideChange", () => {
    if (initialized && swiper.params.cssMode) {
      setHash();
    }
  });
}

// node_modules/framework7/node_modules/swiper/modules/autoplay.mjs
function Autoplay(_ref) {
  let {
    swiper,
    extendParams,
    on,
    emit,
    params
  } = _ref;
  swiper.autoplay = {
    running: false,
    paused: false,
    timeLeft: 0
  };
  extendParams({
    autoplay: {
      enabled: false,
      delay: 3e3,
      waitForTransition: true,
      disableOnInteraction: true,
      stopOnLastSlide: false,
      reverseDirection: false,
      pauseOnMouseEnter: false
    }
  });
  let timeout;
  let raf;
  let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3e3;
  let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3e3;
  let autoplayTimeLeft;
  let autoplayStartTime = (/* @__PURE__ */ new Date()).getTime;
  let wasPaused;
  let isTouched;
  let pausedByTouch;
  let touchStartTimeout;
  let slideChanged;
  let pausedByInteraction;
  function onTransitionEnd(e) {
    if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;
    if (e.target !== swiper.wrapperEl) return;
    swiper.wrapperEl.removeEventListener("transitionend", onTransitionEnd);
    resume();
  }
  const calcTimeLeft = () => {
    if (swiper.destroyed || !swiper.autoplay.running) return;
    if (swiper.autoplay.paused) {
      wasPaused = true;
    } else if (wasPaused) {
      autoplayDelayCurrent = autoplayTimeLeft;
      wasPaused = false;
    }
    const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - (/* @__PURE__ */ new Date()).getTime();
    swiper.autoplay.timeLeft = timeLeft;
    emit("autoplayTimeLeft", timeLeft, timeLeft / autoplayDelayTotal);
    raf = requestAnimationFrame(() => {
      calcTimeLeft();
    });
  };
  const getSlideDelay = () => {
    let activeSlideEl;
    if (swiper.virtual && swiper.params.virtual.enabled) {
      activeSlideEl = swiper.slides.filter((slideEl) => slideEl.classList.contains("swiper-slide-active"))[0];
    } else {
      activeSlideEl = swiper.slides[swiper.activeIndex];
    }
    if (!activeSlideEl) return void 0;
    const currentSlideDelay = parseInt(activeSlideEl.getAttribute("data-swiper-autoplay"), 10);
    return currentSlideDelay;
  };
  const run = (delayForce) => {
    if (swiper.destroyed || !swiper.autoplay.running) return;
    cancelAnimationFrame(raf);
    calcTimeLeft();
    let delay = typeof delayForce === "undefined" ? swiper.params.autoplay.delay : delayForce;
    autoplayDelayTotal = swiper.params.autoplay.delay;
    autoplayDelayCurrent = swiper.params.autoplay.delay;
    const currentSlideDelay = getSlideDelay();
    if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === "undefined") {
      delay = currentSlideDelay;
      autoplayDelayTotal = currentSlideDelay;
      autoplayDelayCurrent = currentSlideDelay;
    }
    autoplayTimeLeft = delay;
    const speed = swiper.params.speed;
    const proceed = () => {
      if (!swiper || swiper.destroyed) return;
      if (swiper.params.autoplay.reverseDirection) {
        if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {
          swiper.slidePrev(speed, true, true);
          emit("autoplay");
        } else if (!swiper.params.autoplay.stopOnLastSlide) {
          swiper.slideTo(swiper.slides.length - 1, speed, true, true);
          emit("autoplay");
        }
      } else {
        if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {
          swiper.slideNext(speed, true, true);
          emit("autoplay");
        } else if (!swiper.params.autoplay.stopOnLastSlide) {
          swiper.slideTo(0, speed, true, true);
          emit("autoplay");
        }
      }
      if (swiper.params.cssMode) {
        autoplayStartTime = (/* @__PURE__ */ new Date()).getTime();
        requestAnimationFrame(() => {
          run();
        });
      }
    };
    if (delay > 0) {
      clearTimeout(timeout);
      timeout = setTimeout(() => {
        proceed();
      }, delay);
    } else {
      requestAnimationFrame(() => {
        proceed();
      });
    }
    return delay;
  };
  const start = () => {
    swiper.autoplay.running = true;
    run();
    emit("autoplayStart");
  };
  const stop = () => {
    swiper.autoplay.running = false;
    clearTimeout(timeout);
    cancelAnimationFrame(raf);
    emit("autoplayStop");
  };
  const pause = (internal, reset) => {
    if (swiper.destroyed || !swiper.autoplay.running) return;
    clearTimeout(timeout);
    if (!internal) {
      pausedByInteraction = true;
    }
    const proceed = () => {
      emit("autoplayPause");
      if (swiper.params.autoplay.waitForTransition) {
        swiper.wrapperEl.addEventListener("transitionend", onTransitionEnd);
      } else {
        resume();
      }
    };
    swiper.autoplay.paused = true;
    if (reset) {
      if (slideChanged) {
        autoplayTimeLeft = swiper.params.autoplay.delay;
      }
      slideChanged = false;
      proceed();
      return;
    }
    const delay = autoplayTimeLeft || swiper.params.autoplay.delay;
    autoplayTimeLeft = delay - ((/* @__PURE__ */ new Date()).getTime() - autoplayStartTime);
    if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;
    if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;
    proceed();
  };
  const resume = () => {
    if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;
    autoplayStartTime = (/* @__PURE__ */ new Date()).getTime();
    if (pausedByInteraction) {
      pausedByInteraction = false;
      run(autoplayTimeLeft);
    } else {
      run();
    }
    swiper.autoplay.paused = false;
    emit("autoplayResume");
  };
  const onVisibilityChange = () => {
    if (swiper.destroyed || !swiper.autoplay.running) return;
    const document2 = getDocument2();
    if (document2.visibilityState === "hidden") {
      pausedByInteraction = true;
      pause(true);
    }
    if (document2.visibilityState === "visible") {
      resume();
    }
  };
  const onPointerEnter = (e) => {
    if (e.pointerType !== "mouse") return;
    pausedByInteraction = true;
    if (swiper.animating || swiper.autoplay.paused) return;
    pause(true);
  };
  const onPointerLeave = (e) => {
    if (e.pointerType !== "mouse") return;
    if (swiper.autoplay.paused) {
      resume();
    }
  };
  const attachMouseEvents = () => {
    if (swiper.params.autoplay.pauseOnMouseEnter) {
      swiper.el.addEventListener("pointerenter", onPointerEnter);
      swiper.el.addEventListener("pointerleave", onPointerLeave);
    }
  };
  const detachMouseEvents = () => {
    swiper.el.removeEventListener("pointerenter", onPointerEnter);
    swiper.el.removeEventListener("pointerleave", onPointerLeave);
  };
  const attachDocumentEvents = () => {
    const document2 = getDocument2();
    document2.addEventListener("visibilitychange", onVisibilityChange);
  };
  const detachDocumentEvents = () => {
    const document2 = getDocument2();
    document2.removeEventListener("visibilitychange", onVisibilityChange);
  };
  on("init", () => {
    if (swiper.params.autoplay.enabled) {
      attachMouseEvents();
      attachDocumentEvents();
      autoplayStartTime = (/* @__PURE__ */ new Date()).getTime();
      start();
    }
  });
  on("destroy", () => {
    detachMouseEvents();
    detachDocumentEvents();
    if (swiper.autoplay.running) {
      stop();
    }
  });
  on("beforeTransitionStart", (_s, speed, internal) => {
    if (swiper.destroyed || !swiper.autoplay.running) return;
    if (internal || !swiper.params.autoplay.disableOnInteraction) {
      pause(true, true);
    } else {
      stop();
    }
  });
  on("sliderFirstMove", () => {
    if (swiper.destroyed || !swiper.autoplay.running) return;
    if (swiper.params.autoplay.disableOnInteraction) {
      stop();
      return;
    }
    isTouched = true;
    pausedByTouch = false;
    pausedByInteraction = false;
    touchStartTimeout = setTimeout(() => {
      pausedByInteraction = true;
      pausedByTouch = true;
      pause(true);
    }, 200);
  });
  on("touchEnd", () => {
    if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;
    clearTimeout(touchStartTimeout);
    clearTimeout(timeout);
    if (swiper.params.autoplay.disableOnInteraction) {
      pausedByTouch = false;
      isTouched = false;
      return;
    }
    if (pausedByTouch && swiper.params.cssMode) resume();
    pausedByTouch = false;
    isTouched = false;
  });
  on("slideChange", () => {
    if (swiper.destroyed || !swiper.autoplay.running) return;
    slideChanged = true;
  });
  Object.assign(swiper.autoplay, {
    start,
    stop,
    pause,
    resume
  });
}

// node_modules/framework7/node_modules/swiper/modules/thumbs.mjs
function Thumb(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    thumbs: {
      swiper: null,
      multipleActiveThumbs: true,
      autoScrollOffset: 0,
      slideThumbActiveClass: "swiper-slide-thumb-active",
      thumbsContainerClass: "swiper-thumbs"
    }
  });
  let initialized = false;
  let swiperCreated = false;
  swiper.thumbs = {
    swiper: null
  };
  function onThumbClick() {
    const thumbsSwiper = swiper.thumbs.swiper;
    if (!thumbsSwiper || thumbsSwiper.destroyed) return;
    const clickedIndex = thumbsSwiper.clickedIndex;
    const clickedSlide = thumbsSwiper.clickedSlide;
    if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;
    if (typeof clickedIndex === "undefined" || clickedIndex === null) return;
    let slideToIndex;
    if (thumbsSwiper.params.loop) {
      slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute("data-swiper-slide-index"), 10);
    } else {
      slideToIndex = clickedIndex;
    }
    if (swiper.params.loop) {
      swiper.slideToLoop(slideToIndex);
    } else {
      swiper.slideTo(slideToIndex);
    }
  }
  function init() {
    const {
      thumbs: thumbsParams
    } = swiper.params;
    if (initialized) return false;
    initialized = true;
    const SwiperClass = swiper.constructor;
    if (thumbsParams.swiper instanceof SwiperClass) {
      swiper.thumbs.swiper = thumbsParams.swiper;
      Object.assign(swiper.thumbs.swiper.originalParams, {
        watchSlidesProgress: true,
        slideToClickedSlide: false
      });
      Object.assign(swiper.thumbs.swiper.params, {
        watchSlidesProgress: true,
        slideToClickedSlide: false
      });
      swiper.thumbs.swiper.update();
    } else if (isObject2(thumbsParams.swiper)) {
      const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);
      Object.assign(thumbsSwiperParams, {
        watchSlidesProgress: true,
        slideToClickedSlide: false
      });
      swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);
      swiperCreated = true;
    }
    swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);
    swiper.thumbs.swiper.on("tap", onThumbClick);
    return true;
  }
  function update2(initial) {
    const thumbsSwiper = swiper.thumbs.swiper;
    if (!thumbsSwiper || thumbsSwiper.destroyed) return;
    const slidesPerView = thumbsSwiper.params.slidesPerView === "auto" ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;
    let thumbsToActivate = 1;
    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
      thumbsToActivate = swiper.params.slidesPerView;
    }
    if (!swiper.params.thumbs.multipleActiveThumbs) {
      thumbsToActivate = 1;
    }
    thumbsToActivate = Math.floor(thumbsToActivate);
    thumbsSwiper.slides.forEach((slideEl) => slideEl.classList.remove(thumbActiveClass));
    if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {
      for (let i = 0; i < thumbsToActivate; i += 1) {
        elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index="${swiper.realIndex + i}"]`).forEach((slideEl) => {
          slideEl.classList.add(thumbActiveClass);
        });
      }
    } else {
      for (let i = 0; i < thumbsToActivate; i += 1) {
        if (thumbsSwiper.slides[swiper.realIndex + i]) {
          thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);
        }
      }
    }
    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;
    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;
    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {
      const currentThumbsIndex = thumbsSwiper.activeIndex;
      let newThumbsIndex;
      let direction;
      if (thumbsSwiper.params.loop) {
        const newThumbsSlide = thumbsSwiper.slides.filter((slideEl) => slideEl.getAttribute("data-swiper-slide-index") === `${swiper.realIndex}`)[0];
        newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);
        direction = swiper.activeIndex > swiper.previousIndex ? "next" : "prev";
      } else {
        newThumbsIndex = swiper.realIndex;
        direction = newThumbsIndex > swiper.previousIndex ? "next" : "prev";
      }
      if (useOffset) {
        newThumbsIndex += direction === "next" ? autoScrollOffset : -1 * autoScrollOffset;
      }
      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
        if (thumbsSwiper.params.centeredSlides) {
          if (newThumbsIndex > currentThumbsIndex) {
            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
          } else {
            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
          }
        } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) ;
        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : void 0);
      }
    }
  }
  on("beforeInit", () => {
    const {
      thumbs
    } = swiper.params;
    if (!thumbs || !thumbs.swiper) return;
    if (typeof thumbs.swiper === "string" || thumbs.swiper instanceof HTMLElement) {
      const document2 = getDocument2();
      const getThumbsElementAndInit = () => {
        const thumbsElement = typeof thumbs.swiper === "string" ? document2.querySelector(thumbs.swiper) : thumbs.swiper;
        if (thumbsElement && thumbsElement.swiper) {
          thumbs.swiper = thumbsElement.swiper;
          init();
          update2(true);
        } else if (thumbsElement) {
          const onThumbsSwiper = (e) => {
            thumbs.swiper = e.detail[0];
            thumbsElement.removeEventListener("init", onThumbsSwiper);
            init();
            update2(true);
            thumbs.swiper.update();
            swiper.update();
          };
          thumbsElement.addEventListener("init", onThumbsSwiper);
        }
        return thumbsElement;
      };
      const watchForThumbsToAppear = () => {
        if (swiper.destroyed) return;
        const thumbsElement = getThumbsElementAndInit();
        if (!thumbsElement) {
          requestAnimationFrame(watchForThumbsToAppear);
        }
      };
      requestAnimationFrame(watchForThumbsToAppear);
    } else {
      init();
      update2(true);
    }
  });
  on("slideChange update resize observerUpdate", () => {
    update2();
  });
  on("setTransition", (_s, duration) => {
    const thumbsSwiper = swiper.thumbs.swiper;
    if (!thumbsSwiper || thumbsSwiper.destroyed) return;
    thumbsSwiper.setTransition(duration);
  });
  on("beforeDestroy", () => {
    const thumbsSwiper = swiper.thumbs.swiper;
    if (!thumbsSwiper || thumbsSwiper.destroyed) return;
    if (swiperCreated) {
      thumbsSwiper.destroy();
    }
  });
  Object.assign(swiper.thumbs, {
    init,
    update: update2
  });
}

// node_modules/framework7/node_modules/swiper/modules/free-mode.mjs
function freeMode(_ref) {
  let {
    swiper,
    extendParams,
    emit,
    once
  } = _ref;
  extendParams({
    freeMode: {
      enabled: false,
      momentum: true,
      momentumRatio: 1,
      momentumBounce: true,
      momentumBounceRatio: 1,
      momentumVelocityRatio: 1,
      sticky: false,
      minimumVelocity: 0.02
    }
  });
  function onTouchStart2() {
    if (swiper.params.cssMode) return;
    const translate2 = swiper.getTranslate();
    swiper.setTranslate(translate2);
    swiper.setTransition(0);
    swiper.touchEventsData.velocities.length = 0;
    swiper.freeMode.onTouchEnd({
      currentPos: swiper.rtl ? swiper.translate : -swiper.translate
    });
  }
  function onTouchMove2() {
    if (swiper.params.cssMode) return;
    const {
      touchEventsData: data,
      touches
    } = swiper;
    if (data.velocities.length === 0) {
      data.velocities.push({
        position: touches[swiper.isHorizontal() ? "startX" : "startY"],
        time: data.touchStartTime
      });
    }
    data.velocities.push({
      position: touches[swiper.isHorizontal() ? "currentX" : "currentY"],
      time: now2()
    });
  }
  function onTouchEnd2(_ref2) {
    let {
      currentPos
    } = _ref2;
    if (swiper.params.cssMode) return;
    const {
      params,
      wrapperEl,
      rtlTranslate: rtl,
      snapGrid,
      touchEventsData: data
    } = swiper;
    const touchEndTime = now2();
    const timeDiff = touchEndTime - data.touchStartTime;
    if (currentPos < -swiper.minTranslate()) {
      swiper.slideTo(swiper.activeIndex);
      return;
    }
    if (currentPos > -swiper.maxTranslate()) {
      if (swiper.slides.length < snapGrid.length) {
        swiper.slideTo(snapGrid.length - 1);
      } else {
        swiper.slideTo(swiper.slides.length - 1);
      }
      return;
    }
    if (params.freeMode.momentum) {
      if (data.velocities.length > 1) {
        const lastMoveEvent = data.velocities.pop();
        const velocityEvent = data.velocities.pop();
        const distance = lastMoveEvent.position - velocityEvent.position;
        const time = lastMoveEvent.time - velocityEvent.time;
        swiper.velocity = distance / time;
        swiper.velocity /= 2;
        if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {
          swiper.velocity = 0;
        }
        if (time > 150 || now2() - lastMoveEvent.time > 300) {
          swiper.velocity = 0;
        }
      } else {
        swiper.velocity = 0;
      }
      swiper.velocity *= params.freeMode.momentumVelocityRatio;
      data.velocities.length = 0;
      let momentumDuration = 1e3 * params.freeMode.momentumRatio;
      const momentumDistance = swiper.velocity * momentumDuration;
      let newPosition = swiper.translate + momentumDistance;
      if (rtl) newPosition = -newPosition;
      let doBounce = false;
      let afterBouncePosition;
      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;
      let needsLoopFix;
      if (newPosition < swiper.maxTranslate()) {
        if (params.freeMode.momentumBounce) {
          if (newPosition + swiper.maxTranslate() < -bounceAmount) {
            newPosition = swiper.maxTranslate() - bounceAmount;
          }
          afterBouncePosition = swiper.maxTranslate();
          doBounce = true;
          data.allowMomentumBounce = true;
        } else {
          newPosition = swiper.maxTranslate();
        }
        if (params.loop && params.centeredSlides) needsLoopFix = true;
      } else if (newPosition > swiper.minTranslate()) {
        if (params.freeMode.momentumBounce) {
          if (newPosition - swiper.minTranslate() > bounceAmount) {
            newPosition = swiper.minTranslate() + bounceAmount;
          }
          afterBouncePosition = swiper.minTranslate();
          doBounce = true;
          data.allowMomentumBounce = true;
        } else {
          newPosition = swiper.minTranslate();
        }
        if (params.loop && params.centeredSlides) needsLoopFix = true;
      } else if (params.freeMode.sticky) {
        let nextSlide;
        for (let j = 0; j < snapGrid.length; j += 1) {
          if (snapGrid[j] > -newPosition) {
            nextSlide = j;
            break;
          }
        }
        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === "next") {
          newPosition = snapGrid[nextSlide];
        } else {
          newPosition = snapGrid[nextSlide - 1];
        }
        newPosition = -newPosition;
      }
      if (needsLoopFix) {
        once("transitionEnd", () => {
          swiper.loopFix();
        });
      }
      if (swiper.velocity !== 0) {
        if (rtl) {
          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
        } else {
          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
        }
        if (params.freeMode.sticky) {
          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);
          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];
          if (moveDistance < currentSlideSize) {
            momentumDuration = params.speed;
          } else if (moveDistance < 2 * currentSlideSize) {
            momentumDuration = params.speed * 1.5;
          } else {
            momentumDuration = params.speed * 2.5;
          }
        }
      } else if (params.freeMode.sticky) {
        swiper.slideToClosest();
        return;
      }
      if (params.freeMode.momentumBounce && doBounce) {
        swiper.updateProgress(afterBouncePosition);
        swiper.setTransition(momentumDuration);
        swiper.setTranslate(newPosition);
        swiper.transitionStart(true, swiper.swipeDirection);
        swiper.animating = true;
        elementTransitionEnd(wrapperEl, () => {
          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
          emit("momentumBounce");
          swiper.setTransition(params.speed);
          setTimeout(() => {
            swiper.setTranslate(afterBouncePosition);
            elementTransitionEnd(wrapperEl, () => {
              if (!swiper || swiper.destroyed) return;
              swiper.transitionEnd();
            });
          }, 0);
        });
      } else if (swiper.velocity) {
        emit("_freeModeNoMomentumRelease");
        swiper.updateProgress(newPosition);
        swiper.setTransition(momentumDuration);
        swiper.setTranslate(newPosition);
        swiper.transitionStart(true, swiper.swipeDirection);
        if (!swiper.animating) {
          swiper.animating = true;
          elementTransitionEnd(wrapperEl, () => {
            if (!swiper || swiper.destroyed) return;
            swiper.transitionEnd();
          });
        }
      } else {
        swiper.updateProgress(newPosition);
      }
      swiper.updateActiveIndex();
      swiper.updateSlidesClasses();
    } else if (params.freeMode.sticky) {
      swiper.slideToClosest();
      return;
    } else if (params.freeMode) {
      emit("_freeModeNoMomentumRelease");
    }
    if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {
      swiper.updateProgress();
      swiper.updateActiveIndex();
      swiper.updateSlidesClasses();
    }
  }
  Object.assign(swiper, {
    freeMode: {
      onTouchStart: onTouchStart2,
      onTouchMove: onTouchMove2,
      onTouchEnd: onTouchEnd2
    }
  });
}

// node_modules/framework7/node_modules/swiper/modules/grid.mjs
function Grid(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    grid: {
      rows: 1,
      fill: "column"
    }
  });
  let slidesNumberEvenToRows;
  let slidesPerRow;
  let numFullColumns;
  let wasMultiRow;
  const getSpaceBetween = () => {
    let spaceBetween = swiper.params.spaceBetween;
    if (typeof spaceBetween === "string" && spaceBetween.indexOf("%") >= 0) {
      spaceBetween = parseFloat(spaceBetween.replace("%", "")) / 100 * swiper.size;
    } else if (typeof spaceBetween === "string") {
      spaceBetween = parseFloat(spaceBetween);
    }
    return spaceBetween;
  };
  const initSlides = (slidesLength) => {
    const {
      slidesPerView
    } = swiper.params;
    const {
      rows,
      fill
    } = swiper.params.grid;
    numFullColumns = Math.floor(slidesLength / rows);
    if (Math.floor(slidesLength / rows) === slidesLength / rows) {
      slidesNumberEvenToRows = slidesLength;
    } else {
      slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;
    }
    if (slidesPerView !== "auto" && fill === "row") {
      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);
    }
    slidesPerRow = slidesNumberEvenToRows / rows;
  };
  const updateSlide = (i, slide2, slidesLength, getDirectionLabel) => {
    const {
      slidesPerGroup
    } = swiper.params;
    const spaceBetween = getSpaceBetween();
    const {
      rows,
      fill
    } = swiper.params.grid;
    let newSlideOrderIndex;
    let column;
    let row;
    if (fill === "row" && slidesPerGroup > 1) {
      const groupIndex = Math.floor(i / (slidesPerGroup * rows));
      const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;
      const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);
      row = Math.floor(slideIndexInGroup / columnsInGroup);
      column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;
      newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;
      slide2.style.order = newSlideOrderIndex;
    } else if (fill === "column") {
      column = Math.floor(i / rows);
      row = i - column * rows;
      if (column > numFullColumns || column === numFullColumns && row === rows - 1) {
        row += 1;
        if (row >= rows) {
          row = 0;
          column += 1;
        }
      }
    } else {
      row = Math.floor(i / slidesPerRow);
      column = i - row * slidesPerRow;
    }
    slide2.row = row;
    slide2.column = column;
    slide2.style[getDirectionLabel("margin-top")] = row !== 0 ? spaceBetween && `${spaceBetween}px` : "";
  };
  const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {
    const {
      centeredSlides,
      roundLengths
    } = swiper.params;
    const spaceBetween = getSpaceBetween();
    const {
      rows
    } = swiper.params.grid;
    swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;
    swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;
    swiper.wrapperEl.style[getDirectionLabel("width")] = `${swiper.virtualSize + spaceBetween}px`;
    if (centeredSlides) {
      const newSlidesGrid = [];
      for (let i = 0; i < snapGrid.length; i += 1) {
        let slidesGridItem = snapGrid[i];
        if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);
        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
      }
      snapGrid.splice(0, snapGrid.length);
      snapGrid.push(...newSlidesGrid);
    }
  };
  const onInit2 = () => {
    wasMultiRow = swiper.params.grid && swiper.params.grid.rows > 1;
  };
  const onUpdate = () => {
    const {
      params,
      el
    } = swiper;
    const isMultiRow = params.grid && params.grid.rows > 1;
    if (wasMultiRow && !isMultiRow) {
      el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);
      numFullColumns = 1;
      swiper.emitContainerClasses();
    } else if (!wasMultiRow && isMultiRow) {
      el.classList.add(`${params.containerModifierClass}grid`);
      if (params.grid.fill === "column") {
        el.classList.add(`${params.containerModifierClass}grid-column`);
      }
      swiper.emitContainerClasses();
    }
    wasMultiRow = isMultiRow;
  };
  on("init", onInit2);
  on("update", onUpdate);
  swiper.grid = {
    initSlides,
    updateSlide,
    updateWrapperSize
  };
}

// node_modules/framework7/node_modules/swiper/modules/manipulation.mjs
function appendSlide(slides) {
  const swiper = this;
  const {
    params,
    slidesEl
  } = swiper;
  if (params.loop) {
    swiper.loopDestroy();
  }
  const appendElement = (slideEl) => {
    if (typeof slideEl === "string") {
      const tempDOM = document.createElement("div");
      tempDOM.innerHTML = slideEl;
      slidesEl.append(tempDOM.children[0]);
      tempDOM.innerHTML = "";
    } else {
      slidesEl.append(slideEl);
    }
  };
  if (typeof slides === "object" && "length" in slides) {
    for (let i = 0; i < slides.length; i += 1) {
      if (slides[i]) appendElement(slides[i]);
    }
  } else {
    appendElement(slides);
  }
  swiper.recalcSlides();
  if (params.loop) {
    swiper.loopCreate();
  }
  if (!params.observer || swiper.isElement) {
    swiper.update();
  }
}
function prependSlide(slides) {
  const swiper = this;
  const {
    params,
    activeIndex,
    slidesEl
  } = swiper;
  if (params.loop) {
    swiper.loopDestroy();
  }
  let newActiveIndex = activeIndex + 1;
  const prependElement = (slideEl) => {
    if (typeof slideEl === "string") {
      const tempDOM = document.createElement("div");
      tempDOM.innerHTML = slideEl;
      slidesEl.prepend(tempDOM.children[0]);
      tempDOM.innerHTML = "";
    } else {
      slidesEl.prepend(slideEl);
    }
  };
  if (typeof slides === "object" && "length" in slides) {
    for (let i = 0; i < slides.length; i += 1) {
      if (slides[i]) prependElement(slides[i]);
    }
    newActiveIndex = activeIndex + slides.length;
  } else {
    prependElement(slides);
  }
  swiper.recalcSlides();
  if (params.loop) {
    swiper.loopCreate();
  }
  if (!params.observer || swiper.isElement) {
    swiper.update();
  }
  swiper.slideTo(newActiveIndex, 0, false);
}
function addSlide(index, slides) {
  const swiper = this;
  const {
    params,
    activeIndex,
    slidesEl
  } = swiper;
  let activeIndexBuffer = activeIndex;
  if (params.loop) {
    activeIndexBuffer -= swiper.loopedSlides;
    swiper.loopDestroy();
    swiper.recalcSlides();
  }
  const baseLength = swiper.slides.length;
  if (index <= 0) {
    swiper.prependSlide(slides);
    return;
  }
  if (index >= baseLength) {
    swiper.appendSlide(slides);
    return;
  }
  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
  const slidesBuffer = [];
  for (let i = baseLength - 1; i >= index; i -= 1) {
    const currentSlide = swiper.slides[i];
    currentSlide.remove();
    slidesBuffer.unshift(currentSlide);
  }
  if (typeof slides === "object" && "length" in slides) {
    for (let i = 0; i < slides.length; i += 1) {
      if (slides[i]) slidesEl.append(slides[i]);
    }
    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
  } else {
    slidesEl.append(slides);
  }
  for (let i = 0; i < slidesBuffer.length; i += 1) {
    slidesEl.append(slidesBuffer[i]);
  }
  swiper.recalcSlides();
  if (params.loop) {
    swiper.loopCreate();
  }
  if (!params.observer || swiper.isElement) {
    swiper.update();
  }
  if (params.loop) {
    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
  } else {
    swiper.slideTo(newActiveIndex, 0, false);
  }
}
function removeSlide(slidesIndexes) {
  const swiper = this;
  const {
    params,
    activeIndex
  } = swiper;
  let activeIndexBuffer = activeIndex;
  if (params.loop) {
    activeIndexBuffer -= swiper.loopedSlides;
    swiper.loopDestroy();
  }
  let newActiveIndex = activeIndexBuffer;
  let indexToRemove;
  if (typeof slidesIndexes === "object" && "length" in slidesIndexes) {
    for (let i = 0; i < slidesIndexes.length; i += 1) {
      indexToRemove = slidesIndexes[i];
      if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();
      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
    }
    newActiveIndex = Math.max(newActiveIndex, 0);
  } else {
    indexToRemove = slidesIndexes;
    if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();
    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
    newActiveIndex = Math.max(newActiveIndex, 0);
  }
  swiper.recalcSlides();
  if (params.loop) {
    swiper.loopCreate();
  }
  if (!params.observer || swiper.isElement) {
    swiper.update();
  }
  if (params.loop) {
    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
  } else {
    swiper.slideTo(newActiveIndex, 0, false);
  }
}
function removeAllSlides() {
  const swiper = this;
  const slidesIndexes = [];
  for (let i = 0; i < swiper.slides.length; i += 1) {
    slidesIndexes.push(i);
  }
  swiper.removeSlide(slidesIndexes);
}
function Manipulation(_ref) {
  let {
    swiper
  } = _ref;
  Object.assign(swiper, {
    appendSlide: appendSlide.bind(swiper),
    prependSlide: prependSlide.bind(swiper),
    addSlide: addSlide.bind(swiper),
    removeSlide: removeSlide.bind(swiper),
    removeAllSlides: removeAllSlides.bind(swiper)
  });
}

// node_modules/framework7/node_modules/swiper/shared/effect-init.mjs
function effectInit(params) {
  const {
    effect,
    swiper,
    on,
    setTranslate: setTranslate2,
    setTransition: setTransition2,
    overwriteParams,
    perspective,
    recreateShadows,
    getEffectParams
  } = params;
  on("beforeInit", () => {
    if (swiper.params.effect !== effect) return;
    swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);
    if (perspective && perspective()) {
      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
    }
    const overwriteParamsResult = overwriteParams ? overwriteParams() : {};
    Object.assign(swiper.params, overwriteParamsResult);
    Object.assign(swiper.originalParams, overwriteParamsResult);
  });
  on("setTranslate", () => {
    if (swiper.params.effect !== effect) return;
    setTranslate2();
  });
  on("setTransition", (_s, duration) => {
    if (swiper.params.effect !== effect) return;
    setTransition2(duration);
  });
  on("transitionEnd", () => {
    if (swiper.params.effect !== effect) return;
    if (recreateShadows) {
      if (!getEffectParams || !getEffectParams().slideShadows) return;
      swiper.slides.forEach((slideEl) => {
        slideEl.querySelectorAll(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").forEach((shadowEl) => shadowEl.remove());
      });
      recreateShadows();
    }
  });
  let requireUpdateOnVirtual;
  on("virtualUpdate", () => {
    if (swiper.params.effect !== effect) return;
    if (!swiper.slides.length) {
      requireUpdateOnVirtual = true;
    }
    requestAnimationFrame(() => {
      if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {
        setTranslate2();
        requireUpdateOnVirtual = false;
      }
    });
  });
}

// node_modules/framework7/node_modules/swiper/shared/effect-target.mjs
function effectTarget(effectParams, slideEl) {
  const transformEl = getSlideTransformEl(slideEl);
  if (transformEl !== slideEl) {
    transformEl.style.backfaceVisibility = "hidden";
    transformEl.style["-webkit-backface-visibility"] = "hidden";
  }
  return transformEl;
}

// node_modules/framework7/node_modules/swiper/shared/effect-virtual-transition-end.mjs
function effectVirtualTransitionEnd(_ref) {
  let {
    swiper,
    duration,
    transformElements,
    allSlides
  } = _ref;
  const {
    activeIndex
  } = swiper;
  const getSlide = (el) => {
    if (!el.parentElement) {
      const slide2 = swiper.slides.filter((slideEl) => slideEl.shadowRoot && slideEl.shadowRoot === el.parentNode)[0];
      return slide2;
    }
    return el.parentElement;
  };
  if (swiper.params.virtualTranslate && duration !== 0) {
    let eventTriggered = false;
    let transitionEndTarget;
    if (allSlides) {
      transitionEndTarget = transformElements;
    } else {
      transitionEndTarget = transformElements.filter((transformEl) => {
        const el = transformEl.classList.contains("swiper-slide-transform") ? getSlide(transformEl) : transformEl;
        return swiper.getSlideIndex(el) === activeIndex;
      });
    }
    transitionEndTarget.forEach((el) => {
      elementTransitionEnd(el, () => {
        if (eventTriggered) return;
        if (!swiper || swiper.destroyed) return;
        eventTriggered = true;
        swiper.animating = false;
        const evt = new window.CustomEvent("transitionend", {
          bubbles: true,
          cancelable: true
        });
        swiper.wrapperEl.dispatchEvent(evt);
      });
    });
  }
}

// node_modules/framework7/node_modules/swiper/modules/effect-fade.mjs
function EffectFade(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    fadeEffect: {
      crossFade: false
    }
  });
  const setTranslate2 = () => {
    const {
      slides
    } = swiper;
    const params = swiper.params.fadeEffect;
    for (let i = 0; i < slides.length; i += 1) {
      const slideEl = swiper.slides[i];
      const offset = slideEl.swiperSlideOffset;
      let tx = -offset;
      if (!swiper.params.virtualTranslate) tx -= swiper.translate;
      let ty = 0;
      if (!swiper.isHorizontal()) {
        ty = tx;
        tx = 0;
      }
      const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0);
      const targetEl = effectTarget(params, slideEl);
      targetEl.style.opacity = slideOpacity;
      targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;
    }
  };
  const setTransition2 = (duration) => {
    const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));
    transformElements.forEach((el) => {
      el.style.transitionDuration = `${duration}ms`;
    });
    effectVirtualTransitionEnd({
      swiper,
      duration,
      transformElements,
      allSlides: true
    });
  };
  effectInit({
    effect: "fade",
    swiper,
    on,
    setTranslate: setTranslate2,
    setTransition: setTransition2,
    overwriteParams: () => ({
      slidesPerView: 1,
      slidesPerGroup: 1,
      watchSlidesProgress: true,
      spaceBetween: 0,
      virtualTranslate: !swiper.params.cssMode
    })
  });
}

// node_modules/framework7/node_modules/swiper/modules/effect-cube.mjs
function EffectCube(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    cubeEffect: {
      slideShadows: true,
      shadow: true,
      shadowOffset: 20,
      shadowScale: 0.94
    }
  });
  const createSlideShadows = (slideEl, progress, isHorizontal) => {
    let shadowBefore = isHorizontal ? slideEl.querySelector(".swiper-slide-shadow-left") : slideEl.querySelector(".swiper-slide-shadow-top");
    let shadowAfter = isHorizontal ? slideEl.querySelector(".swiper-slide-shadow-right") : slideEl.querySelector(".swiper-slide-shadow-bottom");
    if (!shadowBefore) {
      shadowBefore = createElement("div", `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? "left" : "top"}`.split(" "));
      slideEl.append(shadowBefore);
    }
    if (!shadowAfter) {
      shadowAfter = createElement("div", `swiper-slide-shadow-cube swiper-slide-shadow-${isHorizontal ? "right" : "bottom"}`.split(" "));
      slideEl.append(shadowAfter);
    }
    if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);
    if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);
  };
  const recreateShadows = () => {
    const isHorizontal = swiper.isHorizontal();
    swiper.slides.forEach((slideEl) => {
      const progress = Math.max(Math.min(slideEl.progress, 1), -1);
      createSlideShadows(slideEl, progress, isHorizontal);
    });
  };
  const setTranslate2 = () => {
    const {
      el,
      wrapperEl,
      slides,
      width: swiperWidth,
      height: swiperHeight,
      rtlTranslate: rtl,
      size: swiperSize,
      browser: browser2
    } = swiper;
    const params = swiper.params.cubeEffect;
    const isHorizontal = swiper.isHorizontal();
    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
    let wrapperRotate = 0;
    let cubeShadowEl;
    if (params.shadow) {
      if (isHorizontal) {
        cubeShadowEl = swiper.wrapperEl.querySelector(".swiper-cube-shadow");
        if (!cubeShadowEl) {
          cubeShadowEl = createElement("div", "swiper-cube-shadow");
          swiper.wrapperEl.append(cubeShadowEl);
        }
        cubeShadowEl.style.height = `${swiperWidth}px`;
      } else {
        cubeShadowEl = el.querySelector(".swiper-cube-shadow");
        if (!cubeShadowEl) {
          cubeShadowEl = createElement("div", "swiper-cube-shadow");
          el.append(cubeShadowEl);
        }
      }
    }
    for (let i = 0; i < slides.length; i += 1) {
      const slideEl = slides[i];
      let slideIndex = i;
      if (isVirtual) {
        slideIndex = parseInt(slideEl.getAttribute("data-swiper-slide-index"), 10);
      }
      let slideAngle = slideIndex * 90;
      let round = Math.floor(slideAngle / 360);
      if (rtl) {
        slideAngle = -slideAngle;
        round = Math.floor(-slideAngle / 360);
      }
      const progress = Math.max(Math.min(slideEl.progress, 1), -1);
      let tx = 0;
      let ty = 0;
      let tz = 0;
      if (slideIndex % 4 === 0) {
        tx = -round * 4 * swiperSize;
        tz = 0;
      } else if ((slideIndex - 1) % 4 === 0) {
        tx = 0;
        tz = -round * 4 * swiperSize;
      } else if ((slideIndex - 2) % 4 === 0) {
        tx = swiperSize + round * 4 * swiperSize;
        tz = swiperSize;
      } else if ((slideIndex - 3) % 4 === 0) {
        tx = -swiperSize;
        tz = 3 * swiperSize + swiperSize * 4 * round;
      }
      if (rtl) {
        tx = -tx;
      }
      if (!isHorizontal) {
        ty = tx;
        tx = 0;
      }
      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;
      if (progress <= 1 && progress > -1) {
        wrapperRotate = slideIndex * 90 + progress * 90;
        if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;
      }
      slideEl.style.transform = transform;
      if (params.slideShadows) {
        createSlideShadows(slideEl, progress, isHorizontal);
      }
    }
    wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;
    wrapperEl.style["-webkit-transform-origin"] = `50% 50% -${swiperSize / 2}px`;
    if (params.shadow) {
      if (isHorizontal) {
        cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`;
      } else {
        const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
        const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
        const scale1 = params.shadowScale;
        const scale2 = params.shadowScale / multiplier;
        const offset = params.shadowOffset;
        cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`;
      }
    }
    const zFactor = (browser2.isSafari || browser2.isWebView) && browser2.needPerspectiveFix ? -swiperSize / 2 : 0;
    wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`;
    wrapperEl.style.setProperty("--swiper-cube-translate-z", `${zFactor}px`);
  };
  const setTransition2 = (duration) => {
    const {
      el,
      slides
    } = swiper;
    slides.forEach((slideEl) => {
      slideEl.style.transitionDuration = `${duration}ms`;
      slideEl.querySelectorAll(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").forEach((subEl) => {
        subEl.style.transitionDuration = `${duration}ms`;
      });
    });
    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
      const shadowEl = el.querySelector(".swiper-cube-shadow");
      if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;
    }
  };
  effectInit({
    effect: "cube",
    swiper,
    on,
    setTranslate: setTranslate2,
    setTransition: setTransition2,
    recreateShadows,
    getEffectParams: () => swiper.params.cubeEffect,
    perspective: () => true,
    overwriteParams: () => ({
      slidesPerView: 1,
      slidesPerGroup: 1,
      watchSlidesProgress: true,
      resistanceRatio: 0,
      spaceBetween: 0,
      centeredSlides: false,
      virtualTranslate: true
    })
  });
}

// node_modules/framework7/node_modules/swiper/shared/create-shadow.mjs
function createShadow(suffix, slideEl, side) {
  const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ""}${suffix ? ` swiper-slide-shadow-${suffix}` : ""}`;
  const shadowContainer = getSlideTransformEl(slideEl);
  let shadowEl = shadowContainer.querySelector(`.${shadowClass.split(" ").join(".")}`);
  if (!shadowEl) {
    shadowEl = createElement("div", shadowClass.split(" "));
    shadowContainer.append(shadowEl);
  }
  return shadowEl;
}

// node_modules/framework7/node_modules/swiper/modules/effect-flip.mjs
function EffectFlip(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    flipEffect: {
      slideShadows: true,
      limitRotation: true
    }
  });
  const createSlideShadows = (slideEl, progress) => {
    let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector(".swiper-slide-shadow-left") : slideEl.querySelector(".swiper-slide-shadow-top");
    let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector(".swiper-slide-shadow-right") : slideEl.querySelector(".swiper-slide-shadow-bottom");
    if (!shadowBefore) {
      shadowBefore = createShadow("flip", slideEl, swiper.isHorizontal() ? "left" : "top");
    }
    if (!shadowAfter) {
      shadowAfter = createShadow("flip", slideEl, swiper.isHorizontal() ? "right" : "bottom");
    }
    if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);
    if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);
  };
  const recreateShadows = () => {
    swiper.params.flipEffect;
    swiper.slides.forEach((slideEl) => {
      let progress = slideEl.progress;
      if (swiper.params.flipEffect.limitRotation) {
        progress = Math.max(Math.min(slideEl.progress, 1), -1);
      }
      createSlideShadows(slideEl, progress);
    });
  };
  const setTranslate2 = () => {
    const {
      slides,
      rtlTranslate: rtl
    } = swiper;
    const params = swiper.params.flipEffect;
    for (let i = 0; i < slides.length; i += 1) {
      const slideEl = slides[i];
      let progress = slideEl.progress;
      if (swiper.params.flipEffect.limitRotation) {
        progress = Math.max(Math.min(slideEl.progress, 1), -1);
      }
      const offset = slideEl.swiperSlideOffset;
      const rotate = -180 * progress;
      let rotateY = rotate;
      let rotateX = 0;
      let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;
      let ty = 0;
      if (!swiper.isHorizontal()) {
        ty = tx;
        tx = 0;
        rotateX = -rotateY;
        rotateY = 0;
      } else if (rtl) {
        rotateY = -rotateY;
      }
      slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
      if (params.slideShadows) {
        createSlideShadows(slideEl, progress);
      }
      const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;
      const targetEl = effectTarget(params, slideEl);
      targetEl.style.transform = transform;
    }
  };
  const setTransition2 = (duration) => {
    const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));
    transformElements.forEach((el) => {
      el.style.transitionDuration = `${duration}ms`;
      el.querySelectorAll(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").forEach((shadowEl) => {
        shadowEl.style.transitionDuration = `${duration}ms`;
      });
    });
    effectVirtualTransitionEnd({
      swiper,
      duration,
      transformElements
    });
  };
  effectInit({
    effect: "flip",
    swiper,
    on,
    setTranslate: setTranslate2,
    setTransition: setTransition2,
    recreateShadows,
    getEffectParams: () => swiper.params.flipEffect,
    perspective: () => true,
    overwriteParams: () => ({
      slidesPerView: 1,
      slidesPerGroup: 1,
      watchSlidesProgress: true,
      spaceBetween: 0,
      virtualTranslate: !swiper.params.cssMode
    })
  });
}

// node_modules/framework7/node_modules/swiper/modules/effect-coverflow.mjs
function EffectCoverflow(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    coverflowEffect: {
      rotate: 50,
      stretch: 0,
      depth: 100,
      scale: 1,
      modifier: 1,
      slideShadows: true
    }
  });
  const setTranslate2 = () => {
    const {
      width: swiperWidth,
      height: swiperHeight,
      slides,
      slidesSizesGrid
    } = swiper;
    const params = swiper.params.coverflowEffect;
    const isHorizontal = swiper.isHorizontal();
    const transform = swiper.translate;
    const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;
    const rotate = isHorizontal ? params.rotate : -params.rotate;
    const translate2 = params.depth;
    for (let i = 0, length = slides.length; i < length; i += 1) {
      const slideEl = slides[i];
      const slideSize = slidesSizesGrid[i];
      const slideOffset = slideEl.swiperSlideOffset;
      const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;
      const offsetMultiplier = typeof params.modifier === "function" ? params.modifier(centerOffset) : centerOffset * params.modifier;
      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
      let translateZ = -translate2 * Math.abs(offsetMultiplier);
      let stretch = params.stretch;
      if (typeof stretch === "string" && stretch.indexOf("%") !== -1) {
        stretch = parseFloat(params.stretch) / 100 * slideSize;
      }
      let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;
      let translateX = isHorizontal ? stretch * offsetMultiplier : 0;
      let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);
      if (Math.abs(translateX) < 1e-3) translateX = 0;
      if (Math.abs(translateY) < 1e-3) translateY = 0;
      if (Math.abs(translateZ) < 1e-3) translateZ = 0;
      if (Math.abs(rotateY) < 1e-3) rotateY = 0;
      if (Math.abs(rotateX) < 1e-3) rotateX = 0;
      if (Math.abs(scale) < 1e-3) scale = 0;
      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;
      const targetEl = effectTarget(params, slideEl);
      targetEl.style.transform = slideTransform;
      slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
      if (params.slideShadows) {
        let shadowBeforeEl = isHorizontal ? slideEl.querySelector(".swiper-slide-shadow-left") : slideEl.querySelector(".swiper-slide-shadow-top");
        let shadowAfterEl = isHorizontal ? slideEl.querySelector(".swiper-slide-shadow-right") : slideEl.querySelector(".swiper-slide-shadow-bottom");
        if (!shadowBeforeEl) {
          shadowBeforeEl = createShadow("coverflow", slideEl, isHorizontal ? "left" : "top");
        }
        if (!shadowAfterEl) {
          shadowAfterEl = createShadow("coverflow", slideEl, isHorizontal ? "right" : "bottom");
        }
        if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
        if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;
      }
    }
  };
  const setTransition2 = (duration) => {
    const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));
    transformElements.forEach((el) => {
      el.style.transitionDuration = `${duration}ms`;
      el.querySelectorAll(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").forEach((shadowEl) => {
        shadowEl.style.transitionDuration = `${duration}ms`;
      });
    });
  };
  effectInit({
    effect: "coverflow",
    swiper,
    on,
    setTranslate: setTranslate2,
    setTransition: setTransition2,
    perspective: () => true,
    overwriteParams: () => ({
      watchSlidesProgress: true
    })
  });
}

// node_modules/framework7/node_modules/swiper/modules/effect-creative.mjs
function EffectCreative(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    creativeEffect: {
      limitProgress: 1,
      shadowPerProgress: false,
      progressMultiplier: 1,
      perspective: true,
      prev: {
        translate: [0, 0, 0],
        rotate: [0, 0, 0],
        opacity: 1,
        scale: 1
      },
      next: {
        translate: [0, 0, 0],
        rotate: [0, 0, 0],
        opacity: 1,
        scale: 1
      }
    }
  });
  const getTranslateValue = (value) => {
    if (typeof value === "string") return value;
    return `${value}px`;
  };
  const setTranslate2 = () => {
    const {
      slides,
      wrapperEl,
      slidesSizesGrid
    } = swiper;
    const params = swiper.params.creativeEffect;
    const {
      progressMultiplier: multiplier
    } = params;
    const isCenteredSlides = swiper.params.centeredSlides;
    if (isCenteredSlides) {
      const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;
      wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;
    }
    for (let i = 0; i < slides.length; i += 1) {
      const slideEl = slides[i];
      const slideProgress = slideEl.progress;
      const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress);
      let originalProgress = progress;
      if (!isCenteredSlides) {
        originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress);
      }
      const offset = slideEl.swiperSlideOffset;
      const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];
      const r = [0, 0, 0];
      let custom = false;
      if (!swiper.isHorizontal()) {
        t[1] = t[0];
        t[0] = 0;
      }
      let data = {
        translate: [0, 0, 0],
        rotate: [0, 0, 0],
        scale: 1,
        opacity: 1
      };
      if (progress < 0) {
        data = params.next;
        custom = true;
      } else if (progress > 0) {
        data = params.prev;
        custom = true;
      }
      t.forEach((value, index) => {
        t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;
      });
      r.forEach((value, index) => {
        r[index] = data.rotate[index] * Math.abs(progress * multiplier);
      });
      slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;
      const translateString = t.join(", ");
      const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;
      const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;
      const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;
      const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;
      if (custom && data.shadow || !custom) {
        let shadowEl = slideEl.querySelector(".swiper-slide-shadow");
        if (!shadowEl && data.shadow) {
          shadowEl = createShadow("creative", slideEl);
        }
        if (shadowEl) {
          const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;
          shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);
        }
      }
      const targetEl = effectTarget(params, slideEl);
      targetEl.style.transform = transform;
      targetEl.style.opacity = opacityString;
      if (data.origin) {
        targetEl.style.transformOrigin = data.origin;
      }
    }
  };
  const setTransition2 = (duration) => {
    const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));
    transformElements.forEach((el) => {
      el.style.transitionDuration = `${duration}ms`;
      el.querySelectorAll(".swiper-slide-shadow").forEach((shadowEl) => {
        shadowEl.style.transitionDuration = `${duration}ms`;
      });
    });
    effectVirtualTransitionEnd({
      swiper,
      duration,
      transformElements,
      allSlides: true
    });
  };
  effectInit({
    effect: "creative",
    swiper,
    on,
    setTranslate: setTranslate2,
    setTransition: setTransition2,
    perspective: () => swiper.params.creativeEffect.perspective,
    overwriteParams: () => ({
      watchSlidesProgress: true,
      virtualTranslate: !swiper.params.cssMode
    })
  });
}

// node_modules/framework7/node_modules/swiper/modules/effect-cards.mjs
function EffectCards(_ref) {
  let {
    swiper,
    extendParams,
    on
  } = _ref;
  extendParams({
    cardsEffect: {
      slideShadows: true,
      rotate: true,
      perSlideRotate: 2,
      perSlideOffset: 8
    }
  });
  const setTranslate2 = () => {
    const {
      slides,
      activeIndex,
      rtlTranslate: rtl
    } = swiper;
    const params = swiper.params.cardsEffect;
    const {
      startTranslate,
      isTouched
    } = swiper.touchEventsData;
    const currentTranslate = rtl ? -swiper.translate : swiper.translate;
    for (let i = 0; i < slides.length; i += 1) {
      const slideEl = slides[i];
      const slideProgress = slideEl.progress;
      const progress = Math.min(Math.max(slideProgress, -4), 4);
      let offset = slideEl.swiperSlideOffset;
      if (swiper.params.centeredSlides && !swiper.params.cssMode) {
        swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;
      }
      if (swiper.params.centeredSlides && swiper.params.cssMode) {
        offset -= slides[0].swiperSlideOffset;
      }
      let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;
      let tY = 0;
      const tZ = -100 * Math.abs(progress);
      let scale = 1;
      let rotate = -params.perSlideRotate * progress;
      let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;
      const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;
      const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;
      const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;
      if (isSwipeToNext || isSwipeToPrev) {
        const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;
        rotate += -28 * progress * subProgress;
        scale += -0.5 * subProgress;
        tXAdd += 96 * subProgress;
        tY = `${-25 * subProgress * Math.abs(progress)}%`;
      }
      if (progress < 0) {
        tX = `calc(${tX}px ${rtl ? "-" : "+"} (${tXAdd * Math.abs(progress)}%))`;
      } else if (progress > 0) {
        tX = `calc(${tX}px ${rtl ? "-" : "+"} (-${tXAdd * Math.abs(progress)}%))`;
      } else {
        tX = `${tX}px`;
      }
      if (!swiper.isHorizontal()) {
        const prevY = tY;
        tY = tX;
        tX = prevY;
      }
      const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;
      const transform = `
        translate3d(${tX}, ${tY}, ${tZ}px)
        rotateZ(${params.rotate ? rtl ? -rotate : rotate : 0}deg)
        scale(${scaleString})
      `;
      if (params.slideShadows) {
        let shadowEl = slideEl.querySelector(".swiper-slide-shadow");
        if (!shadowEl) {
          shadowEl = createShadow("cards", slideEl);
        }
        if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);
      }
      slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;
      const targetEl = effectTarget(params, slideEl);
      targetEl.style.transform = transform;
    }
  };
  const setTransition2 = (duration) => {
    const transformElements = swiper.slides.map((slideEl) => getSlideTransformEl(slideEl));
    transformElements.forEach((el) => {
      el.style.transitionDuration = `${duration}ms`;
      el.querySelectorAll(".swiper-slide-shadow").forEach((shadowEl) => {
        shadowEl.style.transitionDuration = `${duration}ms`;
      });
    });
    effectVirtualTransitionEnd({
      swiper,
      duration,
      transformElements
    });
  };
  effectInit({
    effect: "cards",
    swiper,
    on,
    setTranslate: setTranslate2,
    setTransition: setTransition2,
    perspective: () => true,
    overwriteParams: () => ({
      watchSlidesProgress: true,
      virtualTranslate: !swiper.params.cssMode
    })
  });
}

// node_modules/framework7/node_modules/swiper/swiper-bundle.mjs
var modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Controller, A11y, History, HashNavigation, Autoplay, Thumb, freeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];
Swiper.use(modules);

// node_modules/framework7/node_modules/swiper/shared/update-swiper.mjs
var paramsList = [
  "eventsPrefix",
  "injectStyles",
  "injectStylesUrls",
  "modules",
  "init",
  "_direction",
  "oneWayMovement",
  "touchEventsTarget",
  "initialSlide",
  "_speed",
  "cssMode",
  "updateOnWindowResize",
  "resizeObserver",
  "nested",
  "focusableElements",
  "_enabled",
  "_width",
  "_height",
  "preventInteractionOnTransition",
  "userAgent",
  "url",
  "_edgeSwipeDetection",
  "_edgeSwipeThreshold",
  "_freeMode",
  "_autoHeight",
  "setWrapperSize",
  "virtualTranslate",
  "_effect",
  "breakpoints",
  "breakpointsBase",
  "_spaceBetween",
  "_slidesPerView",
  "maxBackfaceHiddenSlides",
  "_grid",
  "_slidesPerGroup",
  "_slidesPerGroupSkip",
  "_slidesPerGroupAuto",
  "_centeredSlides",
  "_centeredSlidesBounds",
  "_slidesOffsetBefore",
  "_slidesOffsetAfter",
  "normalizeSlideIndex",
  "_centerInsufficientSlides",
  "_watchOverflow",
  "roundLengths",
  "touchRatio",
  "touchAngle",
  "simulateTouch",
  "_shortSwipes",
  "_longSwipes",
  "longSwipesRatio",
  "longSwipesMs",
  "_followFinger",
  "allowTouchMove",
  "_threshold",
  "touchMoveStopPropagation",
  "touchStartPreventDefault",
  "touchStartForcePreventDefault",
  "touchReleaseOnEdges",
  "uniqueNavElements",
  "_resistance",
  "_resistanceRatio",
  "_watchSlidesProgress",
  "_grabCursor",
  "preventClicks",
  "preventClicksPropagation",
  "_slideToClickedSlide",
  "_loop",
  "loopedSlides",
  "loopPreventsSliding",
  "_rewind",
  "_allowSlidePrev",
  "_allowSlideNext",
  "_swipeHandler",
  "_noSwiping",
  "noSwipingClass",
  "noSwipingSelector",
  "passiveListeners",
  "containerModifierClass",
  "slideClass",
  "slideActiveClass",
  "slideVisibleClass",
  "slideNextClass",
  "slidePrevClass",
  "wrapperClass",
  "lazyPreloaderClass",
  "lazyPreloadPrevNext",
  "runCallbacksOnInit",
  "observer",
  "observeParents",
  "observeSlideChildren",
  // modules
  "a11y",
  "_autoplay",
  "_controller",
  "coverflowEffect",
  "cubeEffect",
  "fadeEffect",
  "flipEffect",
  "creativeEffect",
  "cardsEffect",
  "hashNavigation",
  "history",
  "keyboard",
  "mousewheel",
  "_navigation",
  "_pagination",
  "parallax",
  "_scrollbar",
  "_thumbs",
  "virtual",
  "zoom",
  "control"
];
function isObject3(o) {
  return typeof o === "object" && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === "Object" && !o.__swiper__;
}
function extend4(target, src) {
  const noExtend = ["__proto__", "constructor", "prototype"];
  Object.keys(src).filter((key) => noExtend.indexOf(key) < 0).forEach((key) => {
    if (typeof target[key] === "undefined") target[key] = src[key];
    else if (isObject3(src[key]) && isObject3(target[key]) && Object.keys(src[key]).length > 0) {
      if (src[key].__swiper__) target[key] = src[key];
      else extend4(target[key], src[key]);
    } else {
      target[key] = src[key];
    }
  });
}
function needsNavigation(params) {
  if (params === void 0) {
    params = {};
  }
  return params.navigation && typeof params.navigation.nextEl === "undefined" && typeof params.navigation.prevEl === "undefined";
}
function needsPagination(params) {
  if (params === void 0) {
    params = {};
  }
  return params.pagination && typeof params.pagination.el === "undefined";
}
function needsScrollbar(params) {
  if (params === void 0) {
    params = {};
  }
  return params.scrollbar && typeof params.scrollbar.el === "undefined";
}
function attrToProp(attrName) {
  if (attrName === void 0) {
    attrName = "";
  }
  return attrName.replace(/-[a-z]/g, (l) => l.toUpperCase().replace("-", ""));
}
function updateSwiper(_ref) {
  let {
    swiper,
    slides,
    passedParams,
    changedParams,
    nextEl,
    prevEl,
    scrollbarEl,
    paginationEl
  } = _ref;
  const updateParams = changedParams.filter((key) => key !== "children" && key !== "direction" && key !== "wrapperClass");
  const {
    params: currentParams,
    pagination,
    navigation,
    scrollbar,
    virtual,
    thumbs
  } = swiper;
  let needThumbsInit;
  let needControllerInit;
  let needPaginationInit;
  let needScrollbarInit;
  let needNavigationInit;
  let loopNeedDestroy;
  let loopNeedEnable;
  let loopNeedReloop;
  if (changedParams.includes("thumbs") && passedParams.thumbs && passedParams.thumbs.swiper && currentParams.thumbs && !currentParams.thumbs.swiper) {
    needThumbsInit = true;
  }
  if (changedParams.includes("controller") && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {
    needControllerInit = true;
  }
  if (changedParams.includes("pagination") && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {
    needPaginationInit = true;
  }
  if (changedParams.includes("scrollbar") && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {
    needScrollbarInit = true;
  }
  if (changedParams.includes("navigation") && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {
    needNavigationInit = true;
  }
  const destroyModule = (mod) => {
    if (!swiper[mod]) return;
    swiper[mod].destroy();
    if (mod === "navigation") {
      if (swiper.isElement) {
        swiper[mod].prevEl.remove();
        swiper[mod].nextEl.remove();
      }
      currentParams[mod].prevEl = void 0;
      currentParams[mod].nextEl = void 0;
      swiper[mod].prevEl = void 0;
      swiper[mod].nextEl = void 0;
    } else {
      if (swiper.isElement) {
        swiper[mod].el.remove();
      }
      currentParams[mod].el = void 0;
      swiper[mod].el = void 0;
    }
  };
  if (changedParams.includes("loop") && swiper.isElement) {
    if (currentParams.loop && !passedParams.loop) {
      loopNeedDestroy = true;
    } else if (!currentParams.loop && passedParams.loop) {
      loopNeedEnable = true;
    } else {
      loopNeedReloop = true;
    }
  }
  updateParams.forEach((key) => {
    if (isObject3(currentParams[key]) && isObject3(passedParams[key])) {
      extend4(currentParams[key], passedParams[key]);
      if ((key === "navigation" || key === "pagination" || key === "scrollbar") && "enabled" in passedParams[key] && !passedParams[key].enabled) {
        destroyModule(key);
      }
    } else {
      const newValue = passedParams[key];
      if ((newValue === true || newValue === false) && (key === "navigation" || key === "pagination" || key === "scrollbar")) {
        if (newValue === false) {
          destroyModule(key);
        }
      } else {
        currentParams[key] = passedParams[key];
      }
    }
  });
  if (updateParams.includes("controller") && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {
    swiper.controller.control = currentParams.controller.control;
  }
  if (changedParams.includes("children") && slides && virtual && currentParams.virtual.enabled) {
    virtual.slides = slides;
    virtual.update(true);
  }
  if (changedParams.includes("children") && slides && currentParams.loop) {
    loopNeedReloop = true;
  }
  if (needThumbsInit) {
    const initialized = thumbs.init();
    if (initialized) thumbs.update(true);
  }
  if (needControllerInit) {
    swiper.controller.control = currentParams.controller.control;
  }
  if (needPaginationInit) {
    if (swiper.isElement && (!paginationEl || typeof paginationEl === "string")) {
      paginationEl = document.createElement("div");
      paginationEl.classList.add("swiper-pagination");
      paginationEl.part.add("pagination");
      swiper.el.appendChild(paginationEl);
    }
    if (paginationEl) currentParams.pagination.el = paginationEl;
    pagination.init();
    pagination.render();
    pagination.update();
  }
  if (needScrollbarInit) {
    if (swiper.isElement && (!scrollbarEl || typeof scrollbarEl === "string")) {
      scrollbarEl = document.createElement("div");
      scrollbarEl.classList.add("swiper-scrollbar");
      scrollbarEl.part.add("scrollbar");
      swiper.el.appendChild(scrollbarEl);
    }
    if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;
    scrollbar.init();
    scrollbar.updateSize();
    scrollbar.setTranslate();
  }
  if (needNavigationInit) {
    if (swiper.isElement) {
      if (!nextEl || typeof nextEl === "string") {
        nextEl = document.createElement("div");
        nextEl.classList.add("swiper-button-next");
        nextEl.innerHTML = swiper.hostEl.constructor.nextButtonSvg;
        nextEl.part.add("button-next");
        swiper.el.appendChild(nextEl);
      }
      if (!prevEl || typeof prevEl === "string") {
        prevEl = document.createElement("div");
        prevEl.classList.add("swiper-button-prev");
        prevEl.innerHTML = swiper.hostEl.constructor.prevButtonSvg;
        prevEl.part.add("button-prev");
        swiper.el.appendChild(prevEl);
      }
    }
    if (nextEl) currentParams.navigation.nextEl = nextEl;
    if (prevEl) currentParams.navigation.prevEl = prevEl;
    navigation.init();
    navigation.update();
  }
  if (changedParams.includes("allowSlideNext")) {
    swiper.allowSlideNext = passedParams.allowSlideNext;
  }
  if (changedParams.includes("allowSlidePrev")) {
    swiper.allowSlidePrev = passedParams.allowSlidePrev;
  }
  if (changedParams.includes("direction")) {
    swiper.changeDirection(passedParams.direction, false);
  }
  if (loopNeedDestroy || loopNeedReloop) {
    swiper.loopDestroy();
  }
  if (loopNeedEnable || loopNeedReloop) {
    swiper.loopCreate();
  }
  swiper.update();
}

// node_modules/framework7/node_modules/swiper/shared/get-element-params.mjs
var formatValue = (val) => {
  if (parseFloat(val) === Number(val)) return Number(val);
  if (val === "true") return true;
  if (val === "") return true;
  if (val === "false") return false;
  if (val === "null") return null;
  if (val === "undefined") return void 0;
  if (typeof val === "string" && val.includes("{") && val.includes("}") && val.includes('"')) {
    let v;
    try {
      v = JSON.parse(val);
    } catch (err) {
      v = val;
    }
    return v;
  }
  return val;
};
var modulesParamsList = ["a11y", "autoplay", "controller", "cards-effect", "coverflow-effect", "creative-effect", "cube-effect", "fade-effect", "flip-effect", "free-mode", "grid", "hash-navigation", "history", "keyboard", "mousewheel", "navigation", "pagination", "parallax", "scrollbar", "thumbs", "virtual", "zoom"];
function getParams(element, propName, propValue) {
  const params = {};
  const passedParams = {};
  extend4(params, defaults);
  const localParamsList = [...paramsList, "on"];
  const allowedParams = localParamsList.map((key) => key.replace(/_/, ""));
  localParamsList.forEach((paramName) => {
    paramName = paramName.replace("_", "");
    if (typeof element[paramName] !== "undefined") {
      passedParams[paramName] = element[paramName];
    }
  });
  const attrsList = [...element.attributes];
  if (typeof propName === "string" && typeof propValue !== "undefined") {
    attrsList.push({
      name: propName,
      value: isObject3(propValue) ? {
        ...propValue
      } : propValue
    });
  }
  attrsList.forEach((attr) => {
    const moduleParam = modulesParamsList.filter((mParam) => attr.name.indexOf(`${mParam}-`) === 0)[0];
    if (moduleParam) {
      const parentObjName = attrToProp(moduleParam);
      const subObjName = attrToProp(attr.name.split(`${moduleParam}-`)[1]);
      if (typeof passedParams[parentObjName] === "undefined") passedParams[parentObjName] = {};
      if (passedParams[parentObjName] === true) {
        passedParams[parentObjName] = {
          enabled: true
        };
      }
      passedParams[parentObjName][subObjName] = formatValue(attr.value);
    } else {
      const name = attrToProp(attr.name);
      if (!allowedParams.includes(name)) return;
      const value = formatValue(attr.value);
      if (passedParams[name] && modulesParamsList.includes(attr.name) && !isObject3(value)) {
        if (passedParams[name].constructor !== Object) {
          passedParams[name] = {};
        }
        passedParams[name].enabled = !!value;
      } else {
        passedParams[name] = value;
      }
    }
  });
  extend4(params, passedParams);
  if (params.navigation) {
    params.navigation = {
      prevEl: ".swiper-button-prev",
      nextEl: ".swiper-button-next",
      ...params.navigation !== true ? params.navigation : {}
    };
  } else if (params.navigation === false) {
    delete params.navigation;
  }
  if (params.scrollbar) {
    params.scrollbar = {
      el: ".swiper-scrollbar",
      ...params.scrollbar !== true ? params.scrollbar : {}
    };
  } else if (params.scrollbar === false) {
    delete params.scrollbar;
  }
  if (params.pagination) {
    params.pagination = {
      el: ".swiper-pagination",
      ...params.pagination !== true ? params.pagination : {}
    };
  } else if (params.pagination === false) {
    delete params.pagination;
  }
  return {
    params,
    passedParams
  };
}

// node_modules/framework7/node_modules/swiper/swiper-element-bundle.mjs
var SwiperCSS = `:host{--swiper-theme-color:#007aff}:host{position:relative;display:block;margin-left:auto;margin-right:auto;z-index:1}.swiper{width:100%;height:100%;margin-left:auto;margin-right:auto;position:relative;overflow:hidden;overflow:clip;list-style:none;padding:0;z-index:1;display:block}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;transition-timing-function:var(--swiper-wrapper-transition-timing-function,initial);box-sizing:content-box}.swiper-android ::slotted(swiper-slide),.swiper-ios ::slotted(swiper-slide),.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}::slotted(swiper-slide){flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform;display:block}::slotted(.swiper-slide-invisible-blank){visibility:hidden}.swiper-autoheight,.swiper-autoheight ::slotted(swiper-slide){height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden ::slotted(swiper-slide){transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d ::slotted(swiper-slide){transform-style:preserve-3d}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode ::slotted(swiper-slide){scroll-snap-align:start start}.swiper-css-mode.swiper-horizontal>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-css-mode.swiper-vertical>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-css-mode.swiper-free-mode>.swiper-wrapper{scroll-snap-type:none}.swiper-css-mode.swiper-free-mode ::slotted(swiper-slide){scroll-snap-align:none}.swiper-css-mode.swiper-centered>.swiper-wrapper::before{content:'';flex-shrink:0;order:9999}.swiper-css-mode.swiper-centered ::slotted(swiper-slide){scroll-snap-align:center center;scroll-snap-stop:always}.swiper-css-mode.swiper-centered.swiper-horizontal ::slotted(swiper-slide):first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper::before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-css-mode.swiper-centered.swiper-vertical ::slotted(swiper-slide):first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper::before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-virtual ::slotted(swiper-slide){-webkit-backface-visibility:hidden;transform:translateZ(0)}.swiper-virtual.swiper-css-mode .swiper-wrapper::after{content:'';position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after{width:1px;height:var(--swiper-virtual-size)}:host{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:var(--swiper-navigation-top-offset,50%);width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size)/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next.swiper-button-hidden,.swiper-button-prev.swiper-button-hidden{opacity:0;cursor:auto;pointer-events:none}.swiper-navigation-disabled .swiper-button-next,.swiper-navigation-disabled .swiper-button-prev{display:none!important}.swiper-button-next svg,.swiper-button-prev svg{width:100%;height:100%;object-fit:contain;transform-origin:center}.swiper-rtl .swiper-button-next svg,.swiper-rtl .swiper-button-prev svg{transform:rotate(180deg)}.swiper-button-prev,.swiper-rtl .swiper-button-next{left:var(--swiper-navigation-sides-offset,10px);right:auto}.swiper-button-next,.swiper-rtl .swiper-button-prev{right:var(--swiper-navigation-sides-offset,10px);left:auto}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-disabled>.swiper-pagination,.swiper-pagination.swiper-pagination-disabled{display:none!important}.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:var(--swiper-pagination-bottom,8px);top:var(--swiper-pagination-top,auto);left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width,var(--swiper-pagination-bullet-size,8px));height:var(--swiper-pagination-bullet-height,var(--swiper-pagination-bullet-size,8px));display:inline-block;border-radius:var(--swiper-pagination-bullet-border-radius,50%);background:var(--swiper-pagination-bullet-inactive-color,#000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-pagination-vertical.swiper-pagination-bullets,.swiper-vertical>.swiper-pagination-bullets{right:var(--swiper-pagination-right,8px);left:var(--swiper-pagination-left,auto);top:50%;transform:translate3d(0px,-50%,0)}.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap,6px) 0;display:block}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap,4px)}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet,.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-fraction{color:var(--swiper-pagination-fraction-color,inherit)}.swiper-pagination-progressbar{background:var(--swiper-pagination-progressbar-bg-color,rgba(0,0,0,.25));position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:var(--swiper-pagination-progressbar-size,4px);left:0;top:0}.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-vertical>.swiper-pagination-progressbar{width:var(--swiper-pagination-progressbar-size,4px);height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:var(--swiper-scrollbar-border-radius,10px);position:relative;touch-action:none;background:var(--swiper-scrollbar-bg-color,rgba(0,0,0,.1))}.swiper-scrollbar-disabled>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-disabled{display:none!important}.swiper-horizontal>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-horizontal{position:absolute;left:var(--swiper-scrollbar-sides-offset,1%);bottom:var(--swiper-scrollbar-bottom,4px);top:var(--swiper-scrollbar-top,auto);z-index:50;height:var(--swiper-scrollbar-size,4px);width:calc(100% - 2 * var(--swiper-scrollbar-sides-offset,1%))}.swiper-scrollbar.swiper-scrollbar-vertical,.swiper-vertical>.swiper-scrollbar{position:absolute;left:var(--swiper-scrollbar-left,auto);right:var(--swiper-scrollbar-right,4px);top:var(--swiper-scrollbar-sides-offset,1%);z-index:50;width:var(--swiper-scrollbar-size,4px);height:calc(100% - 2 * var(--swiper-scrollbar-sides-offset,1%))}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:var(--swiper-scrollbar-drag-bg-color,rgba(0,0,0,.5));border-radius:var(--swiper-scrollbar-border-radius,10px);left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}::slotted(.swiper-slide-zoomed){cursor:move;touch-action:none}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode ::slotted(swiper-slide){transition-timing-function:ease-out}.swiper-fade ::slotted(swiper-slide){pointer-events:none;transition-property:opacity}.swiper-fade ::slotted(swiper-slide) ::slotted(swiper-slide){pointer-events:none}.swiper-fade ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-fade ::slotted(.swiper-slide-active) ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-cube{overflow:visible}.swiper-cube ::slotted(swiper-slide){pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube ::slotted(swiper-slide) ::slotted(swiper-slide){pointer-events:none}.swiper-cube.swiper-rtl ::slotted(swiper-slide){transform-origin:100% 0}.swiper-cube ::slotted(.swiper-slide-active),.swiper-cube ::slotted(.swiper-slide-active) ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-cube ::slotted(.swiper-slide-active),.swiper-cube ::slotted(.swiper-slide-next),.swiper-cube ::slotted(.swiper-slide-prev){pointer-events:auto;visibility:visible}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;filter:blur(50px)}.swiper-cube ::slotted(.swiper-slide-next)+::slotted(swiper-slide){pointer-events:auto;visibility:visible}.swiper-flip{overflow:visible}.swiper-flip ::slotted(swiper-slide){pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-flip ::slotted(swiper-slide) ::slotted(swiper-slide){pointer-events:none}.swiper-flip ::slotted(.swiper-slide-active),.swiper-flip ::slotted(.swiper-slide-active) ::slotted(.swiper-slide-active){pointer-events:auto}.swiper-creative ::slotted(swiper-slide){-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper-cards{overflow:visible}.swiper-cards ::slotted(swiper-slide){transform-origin:center bottom;-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden}`;
var SwiperSlideCSS = `::slotted(.swiper-slide-shadow),::slotted(.swiper-slide-shadow-bottom),::slotted(.swiper-slide-shadow-left),::slotted(.swiper-slide-shadow-right),::slotted(.swiper-slide-shadow-top){position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}::slotted(.swiper-slide-shadow){background:rgba(0,0,0,.15)}::slotted(.swiper-slide-shadow-left){background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}::slotted(.swiper-slide-shadow-right){background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}::slotted(.swiper-slide-shadow-top){background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}::slotted(.swiper-slide-shadow-bottom){background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear;width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}@keyframes swiper-preloader-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-bottom),::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-left),::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-right),::slotted(.swiper-slide-shadow-cube.swiper-slide-shadow-top){z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-bottom),::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-left),::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-right),::slotted(.swiper-slide-shadow-flip.swiper-slide-shadow-top){z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}::slotted(.swiper-zoom-container){width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}::slotted(.swiper-zoom-container)>canvas,::slotted(.swiper-zoom-container)>img,::slotted(.swiper-zoom-container)>svg{max-width:100%;max-height:100%;object-fit:contain}`;
var DummyHTMLElement = class {
};
var ClassToExtend = typeof window === "undefined" || typeof HTMLElement === "undefined" ? DummyHTMLElement : HTMLElement;
var arrowSvg = `<svg width="11" height="20" viewBox="0 0 11 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0.38296 20.0762C0.111788 19.805 0.111788 19.3654 0.38296 19.0942L9.19758 10.2796L0.38296 1.46497C0.111788 1.19379 0.111788 0.754138 0.38296 0.482966C0.654131 0.211794 1.09379 0.211794 1.36496 0.482966L10.4341 9.55214C10.8359 9.9539 10.8359 10.6053 10.4341 11.007L1.36496 20.0762C1.09379 20.3474 0.654131 20.3474 0.38296 20.0762Z" fill="currentColor"/></svg>
    `;
var addStyle = (shadowRoot, styles) => {
  if (typeof CSSStyleSheet !== "undefined" && shadowRoot.adoptedStyleSheets) {
    const styleSheet = new CSSStyleSheet();
    styleSheet.replaceSync(styles);
    shadowRoot.adoptedStyleSheets = [styleSheet];
  } else {
    const style = document.createElement("style");
    style.rel = "stylesheet";
    style.textContent = styles;
    shadowRoot.appendChild(style);
  }
};
var SwiperContainer = class extends ClassToExtend {
  constructor() {
    super();
    this.attachShadow({
      mode: "open"
    });
  }
  static get nextButtonSvg() {
    return arrowSvg;
  }
  static get prevButtonSvg() {
    return arrowSvg.replace("/></svg>", ' transform-origin="center" transform="rotate(180)"/></svg>');
  }
  cssStyles() {
    return [
      SwiperCSS,
      // eslint-disable-line
      ...this.injectStyles && Array.isArray(this.injectStyles) ? this.injectStyles : []
    ].join("\n");
  }
  cssLinks() {
    return this.injectStylesUrls || [];
  }
  calcSlideSlots() {
    const currentSideSlots = this.slideSlots || 0;
    const slideSlotChildren = [...this.querySelectorAll(`[slot^=slide-]`)].map((child) => {
      return parseInt(child.getAttribute("slot").split("slide-")[1], 10);
    });
    this.slideSlots = slideSlotChildren.length ? Math.max(...slideSlotChildren) + 1 : 0;
    if (!this.rendered) return;
    if (this.slideSlots > currentSideSlots) {
      for (let i = currentSideSlots; i < this.slideSlots; i += 1) {
        const slideEl = document.createElement("swiper-slide");
        slideEl.setAttribute("part", `slide slide-${i + 1}`);
        const slotEl = document.createElement("slot");
        slotEl.setAttribute("name", `slide-${i + 1}`);
        slideEl.appendChild(slotEl);
        this.shadowRoot.querySelector(".swiper-wrapper").appendChild(slideEl);
      }
    } else if (this.slideSlots < currentSideSlots) {
      const slides = this.swiper.slides;
      for (let i = slides.length - 1; i >= 0; i -= 1) {
        if (i > this.slideSlots) {
          slides[i].remove();
        }
      }
    }
  }
  render() {
    if (this.rendered) return;
    this.calcSlideSlots();
    let localStyles = this.cssStyles();
    if (this.slideSlots > 0) {
      localStyles = localStyles.replace(/::slotted\(([a-z-0-9.]*)\)/g, "$1");
    }
    if (localStyles.length) {
      addStyle(this.shadowRoot, localStyles);
    }
    this.cssLinks().forEach((url) => {
      const linkExists = this.shadowRoot.querySelector(`link[href="${url}"]`);
      if (linkExists) return;
      const linkEl = document.createElement("link");
      linkEl.rel = "stylesheet";
      linkEl.href = url;
      this.shadowRoot.appendChild(linkEl);
    });
    const el = document.createElement("div");
    el.classList.add("swiper");
    el.part = "container";
    el.innerHTML = `
      <slot name="container-start"></slot>
      <div class="swiper-wrapper" part="wrapper">
        <slot></slot>
        ${Array.from({
      length: this.slideSlots
    }).map((_, index) => `
        <swiper-slide part="slide slide-${index}">
          <slot name="slide-${index}"></slot>
        </swiper-slide>
        `).join("")}
      </div>
      <slot name="container-end"></slot>
      ${needsNavigation(this.passedParams) ? `
        <div part="button-prev" class="swiper-button-prev">${this.constructor.prevButtonSvg}</div>
        <div part="button-next" class="swiper-button-next">${this.constructor.nextButtonSvg}</div>
      ` : ""}
      ${needsPagination(this.passedParams) ? `
        <div part="pagination" class="swiper-pagination"></div>
      ` : ""}
      ${needsScrollbar(this.passedParams) ? `
        <div part="scrollbar" class="swiper-scrollbar"></div>
      ` : ""}
    `;
    this.shadowRoot.appendChild(el);
    this.rendered = true;
  }
  initialize() {
    var _this = this;
    if (this.initialized) return;
    this.initialized = true;
    const {
      params: swiperParams,
      passedParams
    } = getParams(this);
    this.swiperParams = swiperParams;
    this.passedParams = passedParams;
    delete this.swiperParams.init;
    this.render();
    this.swiper = new Swiper(this.shadowRoot.querySelector(".swiper"), {
      ...swiperParams.virtual ? {} : {
        observer: true,
        observeSlideChildren: this.slideSlots > 0
      },
      ...swiperParams,
      touchEventsTarget: "container",
      onAny: function(name) {
        if (name === "observerUpdate") {
          _this.calcSlideSlots();
        }
        const eventName = swiperParams.eventsPrefix ? `${swiperParams.eventsPrefix}${name.toLowerCase()}` : name.toLowerCase();
        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
          args[_key - 1] = arguments[_key];
        }
        const event2 = new CustomEvent(eventName, {
          detail: args,
          bubbles: name !== "hashChange",
          cancelable: true
        });
        _this.dispatchEvent(event2);
      }
    });
  }
  connectedCallback() {
    if (this.initialized && this.nested && this.closest("swiper-slide") && this.closest("swiper-slide").swiperLoopMoveDOM) {
      return;
    }
    if (this.init === false || this.getAttribute("init") === "false") {
      return;
    }
    this.initialize();
  }
  disconnectedCallback() {
    if (this.nested && this.closest("swiper-slide") && this.closest("swiper-slide").swiperLoopMoveDOM) {
      return;
    }
    if (this.swiper && this.swiper.destroy) {
      this.swiper.destroy();
    }
    this.initialized = false;
  }
  updateSwiperOnPropChange(propName, propValue) {
    const {
      params: swiperParams,
      passedParams
    } = getParams(this, propName, propValue);
    this.passedParams = passedParams;
    this.swiperParams = swiperParams;
    updateSwiper({
      swiper: this.swiper,
      passedParams: this.passedParams,
      changedParams: [attrToProp(propName)],
      ...propName === "navigation" && passedParams[propName] ? {
        prevEl: ".swiper-button-prev",
        nextEl: ".swiper-button-next"
      } : {},
      ...propName === "pagination" && passedParams[propName] ? {
        paginationEl: ".swiper-pagination"
      } : {},
      ...propName === "scrollbar" && passedParams[propName] ? {
        scrollbarEl: ".swiper-scrollbar"
      } : {}
    });
  }
  attributeChangedCallback(attr, prevValue, newValue) {
    if (!this.initialized) return;
    if (prevValue === "true" && newValue === null) {
      newValue = false;
    }
    this.updateSwiperOnPropChange(attr, newValue);
  }
  static get observedAttributes() {
    const attrs = paramsList.filter((param) => param.includes("_")).map((param) => param.replace(/[A-Z]/g, (v) => `-${v}`).replace("_", "").toLowerCase());
    return attrs;
  }
};
paramsList.forEach((paramName) => {
  if (paramName === "init") return;
  paramName = paramName.replace("_", "");
  Object.defineProperty(SwiperContainer.prototype, paramName, {
    configurable: true,
    get() {
      return (this.passedParams || {})[paramName];
    },
    set(value) {
      if (!this.passedParams) this.passedParams = {};
      this.passedParams[paramName] = value;
      if (!this.initialized) return;
      this.updateSwiperOnPropChange(paramName, value);
    }
  });
});
var SwiperSlide = class extends ClassToExtend {
  constructor() {
    super();
    this.attachShadow({
      mode: "open"
    });
  }
  render() {
    const lazy = this.lazy || this.getAttribute("lazy") === "" || this.getAttribute("lazy") === "true";
    addStyle(this.shadowRoot, SwiperSlideCSS);
    this.shadowRoot.appendChild(document.createElement("slot"));
    if (lazy) {
      const lazyDiv = document.createElement("div");
      lazyDiv.classList.add("swiper-lazy-preloader");
      lazyDiv.part.add("preloader");
      this.shadowRoot.appendChild(lazyDiv);
    }
  }
  initialize() {
    this.render();
  }
  connectedCallback() {
    this.initialize();
  }
};
var register = () => {
  if (typeof window === "undefined") return;
  if (!window.customElements.get("swiper-container")) window.customElements.define("swiper-container", SwiperContainer);
  if (!window.customElements.get("swiper-slide")) window.customElements.define("swiper-slide", SwiperSlide);
};
if (typeof window !== "undefined") {
  window.SwiperElementRegisterParams = (params) => {
    paramsList.push(...params);
  };
}

// node_modules/framework7/components/swiper/swiper.js
register();
function initSwiper(swiperEl) {
  const app = this;
  const $swiperEl = dom7_default(swiperEl);
  if ($swiperEl.length === 0) return;
  const isElement = $swiperEl[0].swiper && $swiperEl[0].swiper.isElement;
  if ($swiperEl[0].swiper && !$swiperEl[0].swiper.isElement) return;
  let initialSlide;
  let params = {};
  let isTabs;
  let isRoutableTabs;
  if ($swiperEl.hasClass("tabs")) {
    initialSlide = $swiperEl.children("swiper-slide").indexOf($swiperEl.children(".tab-active")[0]);
    isTabs = true;
    isRoutableTabs = $swiperEl.find(".tabs-routable").length > 0;
  }
  if ($swiperEl.attr("data-swiper")) {
    params = JSON.parse($swiperEl.attr("data-swiper"));
  } else if ($swiperEl[0].f7SwiperParams) {
    params = $swiperEl[0].f7SwiperParams;
  } else {
    params = $swiperEl.dataset();
    Object.keys(params).forEach((key) => {
      const value = params[key];
      if (typeof value === "string" && value.indexOf("{") === 0 && value.indexOf("}") > 0) {
        try {
          params[key] = JSON.parse(value);
        } catch (e) {
        }
      }
    });
  }
  if (typeof params.initialSlide === "undefined" && typeof initialSlide !== "undefined") {
    params.initialSlide = initialSlide;
  }
  const swiper = isElement ? $swiperEl[0].swiper : app.swiper.create($swiperEl[0], params);
  if (isElement) {
    swiper.slideTo(initialSlide, 0);
  }
  function updateSwiper2() {
    swiper.update();
  }
  const $tabEl = $swiperEl.parents(".tab").filter((tabEl) => {
    return dom7_default(tabEl).parent(".tabs").parent(".tabs-animated-wrap, swiper-container.tabs").length === 0;
  }).eq(0);
  $swiperEl.parents(".popup, .login-screen, .sheet-modal, .popover").on("modal:open", updateSwiper2);
  $swiperEl.parents(".panel").on("panel:open", updateSwiper2);
  if ($tabEl && $tabEl.length) {
    $tabEl.on("tab:show", updateSwiper2);
  }
  swiper.on("beforeDestroy", () => {
    $swiperEl.parents(".popup, .login-screen, .sheet-modal, .popover").off("modal:open", updateSwiper2);
    $swiperEl.parents(".panel").off("panel:open", updateSwiper2);
    if ($tabEl && $tabEl.length) {
      $tabEl.off("tab:show", updateSwiper2);
    }
  });
  if (isTabs) {
    swiper.on("slideChange", () => {
      if (isRoutableTabs) {
        let view = app.views.get($swiperEl.parents(".view"));
        if (!view) view = app.views.main;
        const router = view.router;
        const tabRouteUrl = router.findTabRouteUrl(dom7_default(swiper.slides).eq(swiper.activeIndex)[0]);
        if (tabRouteUrl) {
          setTimeout(() => {
            router.navigate(tabRouteUrl);
          }, 0);
        }
      } else {
        app.tab.show({
          tabEl: dom7_default(swiper.slides).eq(swiper.activeIndex)
        });
      }
    });
  }
}
var swiper_default = {
  name: "swiper",
  static: {
    Swiper
  },
  create() {
    const app = this;
    app.swiper = ConstructorMethods({
      defaultSelector: ".swiper",
      constructor: Swiper,
      domProp: "swiper"
    });
  },
  on: {
    pageMounted(page) {
      const app = this;
      page.$el.find("swiper-container.tabs").each((swiperEl) => {
        initSwiper.call(app, swiperEl);
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find("swiper-container.tabs").each((swiperEl) => {
        initSwiper.call(app, swiperEl);
      });
    },
    pageReinit(page) {
      const app = this;
      page.$el.find("swiper-container.tabs").each((swiperEl) => {
        const swiper = app.swiper.get(swiperEl);
        if (swiper && swiper.update) swiper.update();
      });
    },
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find("swiper-container.tabs").each((swiperEl) => {
        initSwiper.call(app, swiperEl);
      });
    },
    tabShow(tabEl) {
      const app = this;
      dom7_default(tabEl).find("swiper-container.tabs").each((swiperEl) => {
        const swiper = app.swiper.get(swiperEl);
        if (swiper && swiper.update) swiper.update();
      });
    },
    tabBeforeRemove(tabEl) {
      const app = this;
      dom7_default(tabEl).find("swiper-container.tabs").each((swiperEl) => {
        app.swiper.destroy(swiperEl);
      });
    }
  }
};

// node_modules/framework7/components/photo-browser/photo-browser-class.js
var PhotoBrowser = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const pb = this;
    pb.app = app;
    const defaults2 = extend({
      on: {}
    }, app.params.photoBrowser);
    pb.useModulesParams(defaults2);
    pb.params = extend(defaults2, params);
    extend(pb, {
      exposed: false,
      opened: false,
      activeIndex: pb.params.swiper.initialSlide,
      url: pb.params.url,
      swipeToClose: {
        allow: true,
        isTouched: false,
        diff: void 0,
        start: void 0,
        current: void 0,
        started: false,
        activeSlide: void 0,
        timeStart: void 0
      }
    });
    pb.useModules();
    pb.init();
  }
  get view() {
    const {
      params,
      app
    } = this;
    return params.view || app.views.main;
  }
  onSlideChange(swiper) {
    const pb = this;
    pb.activeIndex = swiper.activeIndex;
    let current = swiper.activeIndex + 1;
    let total = pb.params.virtualSlides ? pb.params.photos.length : swiper.slides.length;
    if (swiper.params.loop) {
      total -= 2;
      current -= swiper.loopedSlides;
      if (current < 1) current = total + current;
      if (current > total) current -= total;
    }
    const $activeSlideEl = pb.params.virtualSlides ? dom7_default(swiper.wrapperEl).find(`.swiper-slide[data-swiper-slide-index="${swiper.activeIndex}"]`) : dom7_default(swiper.slides).eq(swiper.activeIndex);
    const $previousSlideEl = pb.params.virtualSlides ? dom7_default(swiper.wrapperEl).find(`.swiper-slide[data-swiper-slide-index="${swiper.previousIndex}"]`) : dom7_default(swiper.slides).eq(swiper.previousIndex);
    let $currentEl = pb.$el.find(".photo-browser-current");
    let $totalEl = pb.$el.find(".photo-browser-total");
    let navbarEl;
    if (pb.params.type === "page" && pb.params.navbar && $currentEl.length === 0 && pb.app.theme === "ios") {
      navbarEl = pb.app.navbar.getElByPage(pb.$el);
      if (navbarEl) {
        $currentEl = dom7_default(navbarEl).find(".photo-browser-current");
        $totalEl = dom7_default(navbarEl).find(".photo-browser-total");
      }
    }
    if ($currentEl.length && $totalEl.length) {
      $currentEl.text(current);
      $totalEl.text(total);
      if (!navbarEl) navbarEl = $currentEl.parents(".navbar")[0];
      if (navbarEl) {
        pb.app.navbar.size(navbarEl);
      }
    }
    if (pb.captions.length > 0) {
      const captionIndex = swiper.params.loop ? $activeSlideEl.attr("data-swiper-slide-index") : pb.activeIndex;
      pb.$captionsContainerEl.find(".photo-browser-caption-active").removeClass("photo-browser-caption-active");
      pb.$captionsContainerEl.find(`[data-caption-index="${captionIndex}"]`).addClass("photo-browser-caption-active");
    }
    const previousSlideVideo = $previousSlideEl.find("video");
    if (previousSlideVideo.length > 0) {
      if ("pause" in previousSlideVideo[0]) previousSlideVideo[0].pause();
    }
  }
  onTouchStart() {
    const pb = this;
    const swipeToClose = pb.swipeToClose;
    if (!swipeToClose.allow) return;
    swipeToClose.isTouched = true;
  }
  onTouchMove(e) {
    const pb = this;
    const swipeToClose = pb.swipeToClose;
    if (!swipeToClose.isTouched) return;
    if (!swipeToClose.started) {
      swipeToClose.started = true;
      swipeToClose.start = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
      if (pb.params.virtualSlides) {
        swipeToClose.activeSlide = dom7_default(pb.swiper.wrapperEl).children(".swiper-slide-active");
      } else {
        swipeToClose.activeSlide = dom7_default(pb.swiper.slides).eq(pb.swiper.activeIndex);
      }
      swipeToClose.timeStart = now();
    }
    e.preventDefault();
    swipeToClose.current = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
    swipeToClose.diff = swipeToClose.start - swipeToClose.current;
    pb.$el.transition(0).transform(`translate3d(0,${-swipeToClose.diff}px,0)`);
  }
  onTouchEnd() {
    const pb = this;
    const swipeToClose = pb.swipeToClose;
    swipeToClose.isTouched = false;
    if (!swipeToClose.started) {
      swipeToClose.started = false;
      return;
    }
    swipeToClose.started = false;
    swipeToClose.allow = false;
    const diff = Math.abs(swipeToClose.diff);
    const timeDiff = (/* @__PURE__ */ new Date()).getTime() - swipeToClose.timeStart;
    if (timeDiff < 300 && diff > 20 || timeDiff >= 300 && diff > 100) {
      nextTick(() => {
        if (pb.$el) {
          if (swipeToClose.diff < 0) pb.$el.addClass("swipe-close-to-bottom");
          else pb.$el.addClass("swipe-close-to-top");
        }
        pb.emit("local::swipeToClose", pb);
        pb.$el.transform("").transition("");
        pb.close();
        swipeToClose.allow = true;
      });
      return;
    }
    if (diff !== 0) {
      pb.$el.addClass("photo-browser-transitioning").transitionEnd(() => {
        swipeToClose.allow = true;
        pb.$el.removeClass("photo-browser-transitioning");
      });
    } else {
      swipeToClose.allow = true;
    }
    nextTick(() => {
      pb.$el.transform("").transition("");
    });
  }
  // Render Functions
  renderNavbar() {
    const pb = this;
    if (pb.params.renderNavbar) return pb.params.renderNavbar.call(pb);
    const iconsColor = pb.params.iconsColor;
    const pageBackLinkText = pb.app.theme === "ios" && pb.params.pageBackLinkText ? pb.params.pageBackLinkText : "";
    const renderNavbarCount = typeof pb.params.navbarShowCount === "undefined" ? pb.params.photos.length > 1 : pb.params.navbarShowCount;
    const isPopup = pb.params.type !== "page";
    return jsx_default("div", {
      class: `navbar navbar-photo-browser ${pb.params.theme === "dark" ? "navbar-photo-browser-dark" : ""}`
    }, jsx_default("div", {
      class: "navbar-bg"
    }), jsx_default("div", {
      class: "navbar-inner navbar-inner-centered-title sliding"
    }, !isPopup && jsx_default("div", {
      class: "left"
    }, jsx_default("a", {
      class: `link ${!pageBackLinkText ? "icon-only" : ""} back`
    }, jsx_default("i", {
      class: `icon icon-back ${iconsColor ? `color-${iconsColor}` : ""}`
    }), pageBackLinkText && jsx_default("span", null, pageBackLinkText))), renderNavbarCount && jsx_default("div", {
      class: "title"
    }, jsx_default("span", {
      class: "photo-browser-current"
    }), jsx_default("span", {
      class: "photo-browser-of"
    }, pb.params.navbarOfText), jsx_default("span", {
      class: "photo-browser-total"
    })), isPopup && (pb.params.popupCloseLinkText || pb.params.popupCloseLinkIcon) && jsx_default("div", {
      class: "right"
    }, jsx_default("a", {
      class: "link popup-close",
      "data-popup": ".photo-browser-popup"
    }, pb.params.popupCloseLinkIcon && pb.app.theme === "ios" && jsx_default("i", null, jsx_default("svg", {
      xmlns: "http://www.w3.org/2000/svg",
      width: "56",
      height: "56",
      viewBox: "0 0 56 56"
    }, jsx_default("path", {
      fill: "currentColor",
      d: "M 10.0234 43.0234 C 9.2266 43.8203 9.2031 45.1797 10.0234 45.9766 C 10.8438 46.7734 12.1797 46.7734 13.0000 45.9766 L 28.0000 30.9766 L 43.0000 45.9766 C 43.7969 46.7734 45.1563 46.7969 45.9766 45.9766 C 46.7734 45.1562 46.7734 43.8203 45.9766 43.0234 L 30.9531 28.0000 L 45.9766 13.0000 C 46.7734 12.2031 46.7969 10.8437 45.9766 10.0469 C 45.1328 9.2266 43.7969 9.2266 43.0000 10.0469 L 28.0000 25.0469 L 13.0000 10.0469 C 12.1797 9.2266 10.8203 9.2031 10.0234 10.0469 C 9.2266 10.8672 9.2266 12.2031 10.0234 13.0000 L 25.0234 28.0000 Z"
    }))), pb.params.popupCloseLinkIcon && pb.app.theme === "md" && jsx_default("i", null, jsx_default("svg", {
      xmlns: "http://www.w3.org/2000/svg",
      height: "24px",
      viewBox: "0 0 24 24",
      width: "24px",
      fill: "currentColor"
    }, jsx_default("path", {
      d: "M0 0h24v24H0V0z",
      fill: "none"
    }), jsx_default("path", {
      d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"
    }))), pb.params.popupCloseLinkText && jsx_default("span", null, pb.params.popupCloseLinkText)))));
  }
  renderToolbar() {
    const pb = this;
    if (pb.params.renderToolbar) return pb.params.renderToolbar.call(pb);
    const iconsColor = pb.params.iconsColor;
    return jsx_default("div", {
      class: "toolbar toolbar-bottom tabbar"
    }, jsx_default("div", {
      class: "toolbar-inner"
    }, jsx_default("a", {
      class: "link photo-browser-prev"
    }, jsx_default("i", {
      class: `icon icon-back ${iconsColor ? `color-${iconsColor}` : ""}`
    })), jsx_default("a", {
      class: "link photo-browser-next"
    }, jsx_default("i", {
      class: `icon icon-forward ${iconsColor ? `color-${iconsColor}` : ""}`
    }))));
  }
  renderThumbs() {
    const pb = this;
    return jsx_default("div", {
      class: "toolbar toolbar-bottom photo-browser-thumbs"
    }, jsx_default("div", {
      class: "swiper"
    }, jsx_default("div", {
      class: "swiper-wrapper"
    }, pb.params.thumbs.map((thumb, index) => pb.renderThumb(thumb, index)))));
  }
  renderCaption(caption, index) {
    const pb = this;
    if (pb.params.renderCaption) return pb.params.renderCaption.call(pb, caption, index);
    return jsx_default("div", {
      class: "photo-browser-caption",
      "data-caption-index": index
    }, caption);
  }
  renderObject(photo, index) {
    const pb = this;
    if (pb.params.renderObject) return pb.params.renderObject.call(pb, photo, index);
    return jsx_default("div", {
      class: "photo-browser-slide photo-browser-object-slide swiper-slide",
      "data-swiper-slide-index": index
    }, photo.html ? photo.html : photo);
  }
  renderLazyPhoto(photo, index) {
    const pb = this;
    if (pb.params.renderLazyPhoto) return pb.params.renderLazyPhoto.call(pb, photo, index);
    return jsx_default("div", {
      class: "photo-browser-slide photo-browser-slide-lazy swiper-slide",
      "data-swiper-slide-index": index
    }, jsx_default("div", {
      class: "swiper-lazy-preloader"
    }), jsx_default("span", {
      class: "swiper-zoom-container"
    }, jsx_default("img", {
      loading: "lazy",
      src: photo.url ? photo.url : photo
    })));
  }
  renderPhoto(photo, index) {
    const pb = this;
    if (pb.params.renderPhoto) return pb.params.renderPhoto.call(pb, photo, index);
    return jsx_default("div", {
      class: "photo-browser-slide swiper-slide",
      "data-swiper-slide-index": index
    }, jsx_default("span", {
      class: "swiper-zoom-container"
    }, jsx_default("img", {
      src: photo.url ? photo.url : photo
    })));
  }
  renderThumb(thumb, index) {
    const pb = this;
    const url = typeof thumb === "string" ? thumb : thumb.url;
    if (pb.params.renderThumb) return pb.params.renderThumb.call(pb, thumb, index);
    return jsx_default("div", {
      class: "photo-browser-thumbs-slide swiper-slide",
      "data-swiper-slide-index": index
    }, url && jsx_default("img", {
      src: url,
      loading: "lazy"
    }));
  }
  render() {
    const pb = this;
    if (pb.params.render) return pb.params.render.call(pb, pb.params);
    return jsx_default("div", {
      class: `photo-browser photo-browser-${pb.params.theme}`
    }, jsx_default("div", {
      class: "view"
    }, jsx_default("div", {
      class: `page photo-browser-page photo-browser-page-${pb.params.theme} no-toolbar ${!pb.params.navbar ? "no-navbar" : ""}`,
      "data-name": "photo-browser-page"
    }, pb.params.navbar && pb.renderNavbar(), pb.params.toolbar && pb.renderToolbar(), pb.params.thumbs && pb.params.thumbs.length && pb.renderThumbs(), jsx_default("div", {
      class: `photo-browser-captions photo-browser-captions-${pb.params.captionsTheme || pb.params.theme}`
    }, pb.params.photos.map((photo, index) => {
      if (photo.caption) return pb.renderCaption(photo.caption, index);
      return "";
    })), jsx_default("div", {
      class: "photo-browser-swiper-container swiper"
    }, jsx_default("div", {
      class: "photo-browser-swiper-wrapper swiper-wrapper"
    }, !pb.params.virtualSlides && pb.params.photos.map((photo, index) => {
      if (photo.html || (typeof photo === "string" || photo instanceof String) && photo.indexOf("<") >= 0 && photo.indexOf(">") >= 0) {
        return pb.renderObject(photo, index);
      }
      if (pb.params.lazy === true) {
        return pb.renderLazyPhoto(photo, index);
      }
      return pb.renderPhoto(photo, index);
    }))))));
  }
  renderStandalone() {
    const pb = this;
    if (pb.params.renderStandalone) return pb.params.renderStandalone.call(pb);
    const standaloneHtml = `<div class="popup photo-browser-popup photo-browser-standalone popup-tablet-fullscreen">${pb.render()}</div>`;
    return standaloneHtml;
  }
  renderPage() {
    const pb = this;
    if (pb.params.renderPage) return pb.params.renderPage.call(pb);
    const pageHtml = pb.render();
    return pageHtml;
  }
  renderPopup() {
    const pb = this;
    if (pb.params.renderPopup) return pb.params.renderPopup.call(pb);
    const popupHtml = `<div class="popup photo-browser-popup">${pb.render()}</div>`;
    return popupHtml;
  }
  // Callbacks
  onOpen(type, el) {
    const pb = this;
    const app = pb.app;
    const $el = dom7_default(el);
    $el[0].f7PhotoBrowser = pb;
    pb.$el = $el;
    pb.el = $el[0];
    pb.openedIn = type;
    pb.opened = true;
    pb.$swiperContainerEl = pb.$el.find(".photo-browser-swiper-container");
    pb.$swiperWrapperEl = pb.$el.find(".photo-browser-swiper-wrapper");
    pb.slides = pb.$el.find(".photo-browser-slide");
    pb.$captionsContainerEl = pb.$el.find(".photo-browser-captions");
    pb.captions = pb.$el.find(".photo-browser-caption");
    const hasThumbs = pb.params.thumbs && pb.params.thumbs.length > 0;
    let clickTimeout;
    let preventThumbsSlide;
    let preventMainSlide;
    const initialSlide = pb.activeIndex;
    const swiperParams = extend({}, pb.params.swiper, {
      initialSlide,
      // cssMode:
      //   typeof pb.params.swiper.cssMode === 'undefined' && (app.device.ios || app.device.android)
      //     ? true
      //     : pb.params.swiper.cssMode,
      on: {
        click(e) {
          clearTimeout(clickTimeout);
          if (pb.params.exposition) {
            clickTimeout = setTimeout(() => {
              pb.expositionToggle();
            }, 350);
          }
          pb.emit("local::tap", e);
          pb.emit("local::click", e);
        },
        doubleClick(e) {
          clearTimeout(clickTimeout);
          pb.emit("local::doubleTap", e);
          pb.emit("local::doubleClick", e);
        },
        slideChange() {
          const swiper = this;
          if (hasThumbs && pb.thumbsSwiper && !preventMainSlide) {
            preventThumbsSlide = true;
            pb.thumbsSwiper.slideTo(pb.swiper.activeIndex);
            setTimeout(() => {
              preventThumbsSlide = false;
            });
          }
          pb.onSlideChange(swiper);
          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
            args[_key] = arguments[_key];
          }
          pb.emit("local::slideChange", ...args);
        },
        transitionStart() {
          for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
            args[_key2] = arguments[_key2];
          }
          pb.emit("local::transitionStart", ...args);
        },
        transitionEnd() {
          for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
            args[_key3] = arguments[_key3];
          }
          pb.emit("local::transitionEnd", ...args);
        },
        slideChangeTransitionStart() {
          const swiper = this;
          pb.onSlideChange(swiper);
          for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
            args[_key4] = arguments[_key4];
          }
          pb.emit("local::slideChangeTransitionStart", ...args);
        },
        slideChangeTransitionEnd() {
          for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
            args[_key5] = arguments[_key5];
          }
          pb.emit("local::slideChangeTransitionEnd", ...args);
        }
      }
    });
    if (pb.params.swipeToClose && pb.params.type !== "page") {
      extend(swiperParams.on, {
        touchStart(swiper, e) {
          pb.onTouchStart(e);
          pb.emit("local::touchStart", e);
        },
        touchMoveOpposite(swiper, e) {
          pb.onTouchMove(e);
          pb.emit("local::touchMoveOpposite", e);
        },
        touchEnd(swiper, e) {
          pb.onTouchEnd(e);
          pb.emit("local::touchEnd", e);
        }
      });
    }
    if (pb.params.virtualSlides) {
      extend(swiperParams, {
        virtual: {
          slides: pb.params.photos,
          renderSlide(photo, index) {
            if (photo.html || (typeof photo === "string" || photo instanceof String) && photo.indexOf("<") >= 0 && photo.indexOf(">") >= 0) {
              return pb.renderObject(photo, index);
            }
            if (pb.params.lazy === true) {
              return pb.renderLazyPhoto(photo, index);
            }
            return pb.renderPhoto(photo, index);
          }
        }
      });
    }
    const window2 = getWindow();
    pb.swiper = app.swiper ? app.swiper.create(pb.$swiperContainerEl[0], swiperParams) : new window2.Swiper(pb.$swiperContainerEl[0], swiperParams);
    if (pb.activeIndex === 0 || pb.params.virtualSlides) {
      pb.onSlideChange(pb.swiper);
    }
    if (hasThumbs) {
      const thumbsSwiperParams = {
        el: pb.$el.find(".photo-browser-thumbs .swiper")[0],
        slidesPerView: "auto",
        centeredSlides: true,
        spaceBetween: 4,
        watchSlidesProgress: true,
        initialSlide,
        on: {
          touchMove() {
            preventMainSlide = true;
          },
          touchEnd() {
            preventMainSlide = false;
          },
          slideChange(s) {
            if (preventThumbsSlide) return;
            pb.swiper.slideTo(s.activeIndex, 0);
          },
          click(s) {
            if (!s.clickedSlide) return;
            const index = parseInt(dom7_default(s.clickedSlide).attr("data-swiper-slide-index"), 10);
            s.slideTo(index, 0);
          }
        }
      };
      pb.thumbsSwiper = app.swiper ? app.swiper.create(thumbsSwiperParams) : new window2.Swiper(thumbsSwiperParams);
    }
    if (pb.$el) {
      pb.$el.trigger("photobrowser:open");
    }
    pb.emit("local::open photoBrowserOpen", pb);
  }
  onOpened() {
    const pb = this;
    if (pb.$el && pb.params.type === "standalone") {
      pb.$el.css("animation", "none");
    }
    if (pb.$el) {
      pb.$el.trigger("photobrowser:opened");
    }
    pb.emit("local::opened photoBrowserOpened", pb);
  }
  onClose() {
    const pb = this;
    if (pb.destroyed) return;
    if (pb.swiper && pb.swiper.destroy) {
      pb.swiper.destroy(true, false);
      pb.swiper = null;
      delete pb.swiper;
    }
    if (pb.thumbsSwiper && pb.thumbsSwiper.destroy) {
      pb.thumbsSwiper.destroy(true, false);
      pb.thumbsSwiper = null;
      delete pb.thumbsSwiper;
    }
    if (pb.$el) {
      pb.$el.trigger("photobrowser:close");
    }
    pb.emit("local::close photoBrowserClose", pb);
  }
  onClosed() {
    const pb = this;
    if (pb.destroyed) return;
    pb.opened = false;
    pb.$el = null;
    pb.el = null;
    delete pb.$el;
    delete pb.el;
    if (pb.$el) {
      pb.$el.trigger("photobrowser:closed");
    }
    pb.emit("local::closed photoBrowserClosed", pb);
  }
  // Open
  openPage() {
    const pb = this;
    if (pb.opened) return pb;
    const pageHtml = pb.renderPage();
    pb.view.router.navigate({
      url: pb.url,
      route: {
        content: pageHtml,
        path: pb.url,
        on: {
          pageBeforeIn(e, page) {
            pb.view.$el.addClass(`with-photo-browser-page with-photo-browser-page-${pb.params.theme}`);
            pb.onOpen("page", page.el);
          },
          pageAfterIn(e, page) {
            pb.onOpened("page", page.el);
          },
          pageBeforeOut(e, page) {
            pb.view.$el.removeClass(`with-photo-browser-page with-photo-browser-page-exposed with-photo-browser-page-${pb.params.theme}`);
            pb.onClose("page", page.el);
          },
          pageAfterOut(e, page) {
            pb.onClosed("page", page.el);
          }
        }
      }
    });
    return pb;
  }
  openStandalone() {
    const pb = this;
    if (pb.opened) return pb;
    const standaloneHtml = pb.renderStandalone();
    const popupParams = {
      backdrop: false,
      content: standaloneHtml,
      on: {
        popupOpen(popup) {
          pb.onOpen("popup", popup.el);
        },
        popupOpened(popup) {
          pb.onOpened("popup", popup.el);
        },
        popupClose(popup) {
          pb.onClose("popup", popup.el);
        },
        popupClosed(popup) {
          pb.onClosed("popup", popup.el);
        }
      }
    };
    if (pb.params.routableModals && pb.view) {
      pb.view.router.navigate({
        url: pb.url,
        route: {
          path: pb.url,
          popup: popupParams
        }
      });
    } else {
      pb.modal = pb.app.popup.create(popupParams).open();
    }
    return pb;
  }
  openPopup() {
    const pb = this;
    if (pb.opened) return pb;
    const popupHtml = pb.renderPopup();
    const popupParams = {
      content: popupHtml,
      push: pb.params.popupPush,
      closeByBackdropClick: pb.params.closeByBackdropClick,
      on: {
        popupOpen(popup) {
          pb.onOpen("popup", popup.el);
        },
        popupOpened(popup) {
          pb.onOpened("popup", popup.el);
        },
        popupClose(popup) {
          pb.onClose("popup", popup.el);
        },
        popupClosed(popup) {
          pb.onClosed("popup", popup.el);
        }
      }
    };
    if (pb.params.routableModals && pb.view) {
      pb.view.router.navigate({
        url: pb.url,
        route: {
          path: pb.url,
          popup: popupParams
        }
      });
    } else {
      pb.modal = pb.app.popup.create(popupParams).open();
    }
    return pb;
  }
  // Exposition
  expositionEnable() {
    const pb = this;
    if (pb.params.type === "page") {
      pb.view.$el.addClass("with-photo-browser-page-exposed");
    }
    if (pb.$el) pb.$el.addClass("photo-browser-exposed");
    if (pb.params.expositionHideCaptions) pb.$captionsContainerEl.addClass("photo-browser-captions-exposed");
    pb.exposed = true;
    return pb;
  }
  expositionDisable() {
    const pb = this;
    if (pb.params.type === "page") {
      pb.view.$el.removeClass("with-photo-browser-page-exposed");
    }
    if (pb.$el) pb.$el.removeClass("photo-browser-exposed");
    if (pb.params.expositionHideCaptions) pb.$captionsContainerEl.removeClass("photo-browser-captions-exposed");
    pb.exposed = false;
    return pb;
  }
  expositionToggle() {
    const pb = this;
    if (pb.params.type === "page") {
      pb.view.$el.toggleClass("with-photo-browser-page-exposed");
    }
    if (pb.$el) pb.$el.toggleClass("photo-browser-exposed");
    if (pb.params.expositionHideCaptions) pb.$captionsContainerEl.toggleClass("photo-browser-captions-exposed");
    pb.exposed = !pb.exposed;
    return pb;
  }
  open(index) {
    const pb = this;
    const type = pb.params.type;
    if (pb.opened) {
      if (pb.swiper && typeof index !== "undefined") {
        pb.swiper.slideTo(parseInt(index, 10));
      }
      return pb;
    }
    if (typeof index !== "undefined") {
      pb.activeIndex = index;
    }
    if (type === "standalone") {
      pb.openStandalone();
    }
    if (type === "page") {
      pb.openPage();
    }
    if (type === "popup") {
      pb.openPopup();
    }
    return pb;
  }
  close() {
    const pb = this;
    if (!pb.opened) return pb;
    if (pb.params.routableModals && pb.view || pb.openedIn === "page") {
      pb.view.router.back();
    } else {
      pb.modal.once("modalClosed", () => {
        nextTick(() => {
          if (pb.destroyed) return;
          pb.modal.destroy();
          delete pb.modal;
        });
      });
      pb.modal.close();
    }
    return pb;
  }
  // eslint-disable-next-line
  init() {
  }
  destroy() {
    let pb = this;
    pb.emit("local::beforeDestroy photoBrowserBeforeDestroy", pb);
    if (pb.$el) {
      pb.$el.trigger("photobrowser:beforedestroy");
      pb.$el[0].f7PhotoBrowser = null;
      delete pb.$el[0].f7PhotoBrowser;
    }
    deleteProps(pb);
    pb.destroyed = true;
    pb = null;
  }
};
var photo_browser_class_default = PhotoBrowser;

// node_modules/framework7/components/photo-browser/photo-browser.js
var photo_browser_default = {
  name: "photoBrowser",
  params: {
    photoBrowser: {
      photos: [],
      thumbs: [],
      exposition: true,
      expositionHideCaptions: false,
      type: "standalone",
      navbar: true,
      toolbar: true,
      theme: "light",
      captionsTheme: void 0,
      iconsColor: void 0,
      popupPush: false,
      swipeToClose: true,
      pageBackLinkText: "Back",
      popupCloseLinkText: void 0,
      popupCloseLinkIcon: true,
      navbarOfText: "of",
      navbarShowCount: void 0,
      view: void 0,
      url: "photos/",
      routableModals: false,
      virtualSlides: true,
      lazy: true,
      closeByBackdropClick: true,
      renderNavbar: void 0,
      renderToolbar: void 0,
      renderCaption: void 0,
      renderObject: void 0,
      renderLazyPhoto: void 0,
      renderPhoto: void 0,
      renderThumb: void 0,
      renderPage: void 0,
      renderPopup: void 0,
      renderStandalone: void 0,
      swiper: {
        cssMode: false,
        initialSlide: 0,
        spaceBetween: 20,
        speed: 300,
        loop: false,
        keyboard: {
          enabled: true
        },
        navigation: {
          nextEl: ".photo-browser-next",
          prevEl: ".photo-browser-prev"
        },
        zoom: {
          enabled: true,
          maxRatio: 3,
          minRatio: 1
        }
      }
    }
  },
  create() {
    const app = this;
    app.photoBrowser = ConstructorMethods({
      defaultSelector: ".photo-browser-popup, .photo-browser-page",
      constructor: photo_browser_class_default,
      app,
      domProp: "f7PhotoBrowser"
    });
  },
  static: {
    PhotoBrowser: photo_browser_class_default
  }
};

// node_modules/framework7/components/notification/notification-class.js
var Notification = class extends modal_class_default {
  constructor(app, params) {
    const extendedParams = extend({
      on: {}
    }, app.params.notification, params);
    super(app, extendedParams);
    const notification = this;
    notification.app = app;
    notification.params = extendedParams;
    const {
      icon,
      title,
      titleRightText,
      subtitle,
      text,
      closeButton,
      closeTimeout,
      cssClass,
      closeOnClick
    } = notification.params;
    let $el;
    if (!notification.params.el) {
      const notificationHtml = notification.render({
        icon,
        title,
        titleRightText,
        subtitle,
        text,
        closeButton,
        cssClass
      });
      $el = dom7_default(notificationHtml);
    } else {
      $el = dom7_default(notification.params.el);
    }
    if ($el && $el.length > 0 && $el[0].f7Modal) {
      return $el[0].f7Modal;
    }
    if ($el.length === 0) {
      return notification.destroy();
    }
    extend(notification, {
      $el,
      el: $el[0],
      type: "notification"
    });
    $el[0].f7Modal = notification;
    if (closeButton) {
      $el.find(".notification-close-button").on("click", () => {
        notification.close();
      });
    }
    $el.on("click", (e) => {
      if (closeButton && dom7_default(e.target).closest(".notification-close-button").length) {
        return;
      }
      notification.emit("local::click notificationClick", notification);
      if (closeOnClick) notification.close();
    });
    notification.on("beforeDestroy", () => {
      $el.off("click");
    });
    let isTouched;
    let isMoved;
    let isScrolling;
    let touchesDiff;
    let touchStartTime;
    let notificationHeight;
    const touchesStart = {};
    function handleTouchStart(e) {
      if (isTouched) return;
      isTouched = true;
      isMoved = false;
      isScrolling = void 0;
      touchStartTime = now();
      touchesStart.x = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
      touchesStart.y = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
    }
    function handleTouchMove(e) {
      if (!isTouched) return;
      const pageX = e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX;
      const pageY = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
      if (typeof isScrolling === "undefined") {
        isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) < Math.abs(pageX - touchesStart.x));
      }
      if (isScrolling) {
        isTouched = false;
        return;
      }
      e.preventDefault();
      if (!isMoved) {
        notification.$el.removeClass("notification-transitioning");
        notification.$el.transition(0);
        notificationHeight = notification.$el[0].offsetHeight / 2;
      }
      isMoved = true;
      touchesDiff = pageY - touchesStart.y;
      let newTranslate = touchesDiff;
      if (touchesDiff > 0) {
        newTranslate = touchesDiff ** 0.8;
      }
      notification.$el.transform(`translate3d(0, ${newTranslate}px, 0)`);
    }
    function handleTouchEnd() {
      if (!isTouched || !isMoved) {
        isTouched = false;
        isMoved = false;
        return;
      }
      isTouched = false;
      isMoved = false;
      if (touchesDiff === 0) {
        return;
      }
      const timeDiff = now() - touchStartTime;
      notification.$el.transition("");
      notification.$el.addClass("notification-transitioning");
      notification.$el.transform("");
      if (touchesDiff < -10 && timeDiff < 300 || -touchesDiff >= notificationHeight / 1) {
        notification.close();
      }
    }
    function attachTouchEvents() {
      notification.$el.on(app.touchEvents.start, handleTouchStart, {
        passive: true
      });
      app.on("touchmove:active", handleTouchMove);
      app.on("touchend:passive", handleTouchEnd);
    }
    function detachTouchEvents() {
      notification.$el.off(app.touchEvents.start, handleTouchStart, {
        passive: true
      });
      app.off("touchmove:active", handleTouchMove);
      app.off("touchend:passive", handleTouchEnd);
    }
    let timeoutId;
    function closeOnTimeout() {
      timeoutId = nextTick(() => {
        if (isTouched && isMoved) {
          closeOnTimeout();
          return;
        }
        notification.close();
      }, closeTimeout);
    }
    notification.on("open", () => {
      if (notification.params.swipeToClose) {
        attachTouchEvents();
      }
      dom7_default(".notification.modal-in").each((openedEl) => {
        const notificationInstance = app.notification.get(openedEl);
        if (openedEl !== notification.el && notificationInstance) {
          notificationInstance.close();
        }
      });
      if (closeTimeout) {
        closeOnTimeout();
      }
    });
    notification.on("close beforeDestroy", () => {
      if (notification.params.swipeToClose) {
        detachTouchEvents();
      }
      clearTimeout(timeoutId);
    });
    return notification;
  }
  render() {
    const notification = this;
    if (notification.params.render) return notification.params.render.call(notification, notification);
    const {
      icon,
      title,
      titleRightText,
      subtitle,
      text,
      closeButton,
      cssClass
    } = notification.params;
    return jsx_default("div", {
      class: `notification ${icon ? "notification-with-icon" : ""} ${cssClass || ""}`
    }, jsx_default("div", {
      class: "notification-header"
    }, icon && jsx_default("div", {
      class: "notification-icon"
    }, icon), title && jsx_default("div", {
      class: "notification-title"
    }, title), titleRightText && jsx_default("div", {
      class: "notification-title-right-text"
    }, titleRightText), closeButton && jsx_default("span", {
      class: "notification-close-button"
    })), jsx_default("div", {
      class: "notification-content"
    }, subtitle && jsx_default("div", {
      class: "notification-subtitle"
    }, subtitle), text && jsx_default("div", {
      class: "notification-text"
    }, text)));
  }
};
var notification_class_default = Notification;

// node_modules/framework7/components/notification/notification.js
var notification_default = {
  name: "notification",
  static: {
    Notification: notification_class_default
  },
  create() {
    const app = this;
    app.notification = extend({}, ModalMethods({
      app,
      constructor: notification_class_default,
      defaultSelector: ".notification.modal-in"
    }));
  },
  params: {
    notification: {
      icon: null,
      title: null,
      titleRightText: null,
      subtitle: null,
      text: null,
      closeButton: false,
      closeTimeout: null,
      closeOnClick: false,
      swipeToClose: true,
      cssClass: null,
      render: null,
      containerEl: null
    }
  }
};

// node_modules/framework7/components/autocomplete/autocomplete-class.js
var Autocomplete = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const ac = this;
    ac.app = app;
    const device = getDevice();
    const defaults2 = extend({
      on: {}
    }, app.params.autocomplete);
    ac.useModulesParams(defaults2);
    ac.params = extend(defaults2, params);
    let $openerEl;
    if (ac.params.openerEl) {
      $openerEl = dom7_default(ac.params.openerEl);
      if ($openerEl.length) $openerEl[0].f7Autocomplete = ac;
    }
    let $inputEl;
    if (ac.params.inputEl) {
      $inputEl = dom7_default(ac.params.inputEl);
      if ($inputEl.length) $inputEl[0].f7Autocomplete = ac;
    }
    const uniqueId = id();
    let url = params.url;
    if (!url && $openerEl && $openerEl.length) {
      if ($openerEl.attr("href")) url = $openerEl.attr("href");
      else if ($openerEl.find("a").length > 0) {
        url = $openerEl.find("a").attr("href");
      }
    }
    if (!url || url === "#" || url === "") url = ac.params.url;
    const inputType = ac.params.multiple ? "checkbox" : "radio";
    extend(ac, {
      $openerEl,
      openerEl: $openerEl && $openerEl[0],
      $inputEl,
      inputEl: $inputEl && $inputEl[0],
      id: uniqueId,
      url,
      value: ac.params.value || [],
      inputType,
      inputName: `${inputType}-${uniqueId}`,
      $modalEl: void 0,
      $dropdownEl: void 0
    });
    let previousQuery = "";
    function onInputChange() {
      let query = ac.$inputEl.val().trim();
      if (!ac.params.source) return;
      ac.params.source.call(ac, query, (items) => {
        let itemsHTML = "";
        const limit = ac.params.limit ? Math.min(ac.params.limit, items.length) : items.length;
        ac.items = items;
        let regExp;
        if (ac.params.highlightMatches) {
          query = query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
          regExp = new RegExp(`(${query})`, "i");
        }
        let firstValue;
        let firstItem;
        for (let i = 0; i < limit; i += 1) {
          const itemValue = typeof items[i] === "object" ? items[i][ac.params.valueProperty] : items[i];
          const itemText = typeof items[i] === "object" ? items[i][ac.params.textProperty] : items[i];
          if (i === 0) {
            firstValue = itemValue;
            firstItem = ac.items[i];
          }
          itemsHTML += ac.renderItem({
            value: itemValue,
            text: ac.params.highlightMatches ? itemText.replace(regExp, "<b>$1</b>") : itemText
          }, i);
        }
        if (itemsHTML === "" && query === "" && ac.params.dropdownPlaceholderText) {
          itemsHTML += ac.renderItem({
            placeholder: true,
            text: ac.params.dropdownPlaceholderText
          });
        }
        ac.$dropdownEl.find("ul").html(itemsHTML);
        if (ac.params.typeahead) {
          if (!firstValue || !firstItem) {
            return;
          }
          if (firstValue.toLowerCase().indexOf(query.toLowerCase()) !== 0) {
            return;
          }
          if (previousQuery.toLowerCase() === query.toLowerCase()) {
            ac.value = [];
            return;
          }
          if (previousQuery.toLowerCase().indexOf(query.toLowerCase()) === 0) {
            previousQuery = query;
            ac.value = [];
            return;
          }
          $inputEl.val(firstValue);
          $inputEl[0].setSelectionRange(query.length, firstValue.length);
          const previousValue = typeof ac.value[0] === "object" ? ac.value[0][ac.params.valueProperty] : ac.value[0];
          if (!previousValue || firstValue.toLowerCase() !== previousValue.toLowerCase()) {
            ac.value = [firstItem];
            ac.emit("local::change autocompleteChange", [firstItem]);
          }
        }
        previousQuery = query;
      });
    }
    function onPageInputChange() {
      const inputEl = this;
      const value = inputEl.value;
      const isValues = dom7_default(inputEl).parents(".autocomplete-values").length > 0;
      let item;
      let itemValue;
      let aValue;
      if (isValues) {
        if (ac.inputType === "checkbox" && !inputEl.checked) {
          for (let i = 0; i < ac.value.length; i += 1) {
            aValue = typeof ac.value[i] === "string" ? ac.value[i] : ac.value[i][ac.params.valueProperty];
            if (aValue === value || aValue * 1 === value * 1) {
              ac.value.splice(i, 1);
            }
          }
          ac.updateValues();
          ac.emit("local::change autocompleteChange", ac.value);
        }
        return;
      }
      for (let i = 0; i < ac.items.length; i += 1) {
        itemValue = typeof ac.items[i] === "object" ? ac.items[i][ac.params.valueProperty] : ac.items[i];
        if (itemValue === value || itemValue * 1 === value * 1) item = ac.items[i];
      }
      if (ac.inputType === "radio") {
        ac.value = [item];
      } else if (inputEl.checked) {
        ac.value.push(item);
      } else {
        for (let i = 0; i < ac.value.length; i += 1) {
          aValue = typeof ac.value[i] === "object" ? ac.value[i][ac.params.valueProperty] : ac.value[i];
          if (aValue === value || aValue * 1 === value * 1) {
            ac.value.splice(i, 1);
          }
        }
      }
      ac.updateValues();
      if (ac.inputType === "radio" && inputEl.checked || ac.inputType === "checkbox") {
        ac.emit("local::change autocompleteChange", ac.value);
      }
    }
    function onHtmlClick(e) {
      const $targetEl = dom7_default(e.target);
      if ($targetEl.is(ac.$inputEl[0]) || ac.$dropdownEl && $targetEl.closest(ac.$dropdownEl[0]).length) return;
      ac.close();
    }
    function onOpenerClick() {
      ac.open();
    }
    function onInputFocus() {
      ac.open();
    }
    function onInputBlur() {
      if (ac.$dropdownEl.find("label.active-state").length > 0) return;
      setTimeout(() => {
        ac.close();
      }, 0);
    }
    function onResize2() {
      ac.positionDropdown();
    }
    function onKeyDown(e) {
      if (!ac.opened) return;
      if (e.keyCode === 27) {
        e.preventDefault();
        ac.$inputEl.blur();
        return;
      }
      if (e.keyCode === 13) {
        const $selectedItemLabel = ac.$dropdownEl.find(".autocomplete-dropdown-selected label");
        if ($selectedItemLabel.length) {
          e.preventDefault();
          $selectedItemLabel.trigger("click");
          ac.$inputEl.blur();
          return;
        }
        if (ac.params.typeahead) {
          e.preventDefault();
          ac.$inputEl.blur();
        }
        return;
      }
      if (e.keyCode !== 40 && e.keyCode !== 38) return;
      e.preventDefault();
      const $selectedItem = ac.$dropdownEl.find(".autocomplete-dropdown-selected");
      let $newItem;
      if ($selectedItem.length) {
        $newItem = $selectedItem[e.keyCode === 40 ? "next" : "prev"]("li");
        if (!$newItem.length) {
          $newItem = ac.$dropdownEl.find("li").eq(e.keyCode === 40 ? 0 : ac.$dropdownEl.find("li").length - 1);
        }
      } else {
        $newItem = ac.$dropdownEl.find("li").eq(e.keyCode === 40 ? 0 : ac.$dropdownEl.find("li").length - 1);
      }
      if ($newItem.hasClass("autocomplete-dropdown-placeholder")) return;
      $selectedItem.removeClass("autocomplete-dropdown-selected");
      $newItem.addClass("autocomplete-dropdown-selected");
    }
    function onDropdownClick() {
      const $clickedEl = dom7_default(this);
      let clickedItem;
      for (let i = 0; i < ac.items.length; i += 1) {
        const itemValue = typeof ac.items[i] === "object" ? ac.items[i][ac.params.valueProperty] : ac.items[i];
        const value = $clickedEl.attr("data-value");
        if (itemValue === value || itemValue * 1 === value * 1) {
          clickedItem = ac.items[i];
        }
      }
      if (ac.params.updateInputValueOnSelect) {
        ac.$inputEl.val(typeof clickedItem === "object" ? clickedItem[ac.params.valueProperty] : clickedItem);
        ac.$inputEl.trigger("input change");
      }
      ac.value = [clickedItem];
      ac.emit("local::change autocompleteChange", [clickedItem]);
      ac.close();
    }
    ac.attachEvents = function attachEvents2() {
      if (ac.params.openIn !== "dropdown" && ac.$openerEl) {
        ac.$openerEl.on("click", onOpenerClick);
      }
      if (ac.params.openIn === "dropdown" && ac.$inputEl) {
        ac.$inputEl.on("focus", onInputFocus);
        ac.$inputEl.on(ac.params.inputEvents, onInputChange);
        if (device.android) {
          dom7_default("html").on("click", onHtmlClick);
        } else {
          ac.$inputEl.on("blur", onInputBlur);
        }
        ac.$inputEl.on("keydown", onKeyDown);
      }
    };
    ac.detachEvents = function attachEvents2() {
      if (ac.params.openIn !== "dropdown" && ac.$openerEl) {
        ac.$openerEl.off("click", onOpenerClick);
      }
      if (ac.params.openIn === "dropdown" && ac.$inputEl) {
        ac.$inputEl.off("focus", onInputFocus);
        ac.$inputEl.off(ac.params.inputEvents, onInputChange);
        if (device.android) {
          dom7_default("html").off("click", onHtmlClick);
        } else {
          ac.$inputEl.off("blur", onInputBlur);
        }
        ac.$inputEl.off("keydown", onKeyDown);
      }
    };
    ac.attachDropdownEvents = function attachDropdownEvents() {
      ac.$dropdownEl.on("click", "label", onDropdownClick);
      app.on("resize", onResize2);
    };
    ac.detachDropdownEvents = function detachDropdownEvents() {
      ac.$dropdownEl.off("click", "label", onDropdownClick);
      app.off("resize", onResize2);
    };
    ac.attachPageEvents = function attachPageEvents() {
      ac.$el.on("change", 'input[type="radio"], input[type="checkbox"]', onPageInputChange);
      if (ac.params.closeOnSelect && !ac.params.multiple) {
        ac.$el.once("click", ".list label", () => {
          nextTick(() => {
            ac.close();
          });
        });
      }
    };
    ac.detachPageEvents = function detachPageEvents() {
      ac.$el.off("change", 'input[type="radio"], input[type="checkbox"]', onPageInputChange);
    };
    ac.useModules();
    ac.init();
    return ac;
  }
  get view() {
    const ac = this;
    const {
      $openerEl,
      $inputEl,
      app
    } = ac;
    let view;
    if (ac.params.view) {
      view = ac.params.view;
    } else if ($openerEl || $inputEl) {
      const $el = $openerEl || $inputEl;
      view = $el.closest(".view").length && $el.closest(".view")[0].f7View;
    }
    if (!view) view = app.views.main;
    return view;
  }
  positionDropdown() {
    const ac = this;
    const {
      $inputEl,
      app,
      $dropdownEl
    } = ac;
    const $pageContentEl = $inputEl.parents(".page-content");
    if ($pageContentEl.length === 0) return;
    const inputOffset = $inputEl.offset();
    const inputOffsetWidth = $inputEl[0].offsetWidth;
    const inputOffsetHeight = $inputEl[0].offsetHeight;
    const $listEl = $inputEl.parents(".list");
    let $listParent;
    $listEl.parents().each((parentEl) => {
      if ($listParent) return;
      const $parentEl = dom7_default(parentEl);
      if ($parentEl.parent($pageContentEl).length) $listParent = $parentEl;
    });
    const listOffset = $listEl.offset();
    const paddingBottom = parseInt($pageContentEl.css("padding-bottom"), 10);
    const listOffsetLeft = $listEl.length > 0 ? listOffset.left - $pageContentEl.offset().left : 0;
    const inputOffsetLeft = inputOffset.left - ($listEl.length > 0 ? listOffset.left : 0) - (app.rtl ? 0 : 0);
    const inputOffsetTop = inputOffset.top - ($pageContentEl.offset().top - $pageContentEl[0].scrollTop);
    const maxHeight = $pageContentEl[0].scrollHeight - paddingBottom - (inputOffsetTop + $pageContentEl[0].scrollTop) - $inputEl[0].offsetHeight;
    const paddingProp = app.rtl ? "padding-right" : "padding-left";
    let paddingValue;
    if ($listEl.length) {
      paddingValue = (app.rtl ? $listEl[0].offsetWidth - inputOffsetLeft - inputOffsetWidth : inputOffsetLeft) - (app.theme === "md" ? 16 : 15);
    }
    $dropdownEl.css({
      left: `${$listEl.length > 0 ? listOffsetLeft : inputOffsetLeft}px`,
      top: `${inputOffsetTop + $pageContentEl[0].scrollTop + inputOffsetHeight}px`,
      width: `${$listEl.length > 0 ? $listEl[0].offsetWidth : inputOffsetWidth}px`
    });
    $dropdownEl.children(".autocomplete-dropdown-inner").css({
      maxHeight: `${maxHeight}px`,
      [paddingProp]: $listEl.length > 0 ? `${paddingValue}px` : ""
    });
  }
  focus() {
    const ac = this;
    ac.$el.find("input[type=search]").focus();
  }
  source(query) {
    const ac = this;
    if (!ac.params.source) return;
    const {
      $el
    } = ac;
    ac.params.source.call(ac, query, (items) => {
      let itemsHTML = "";
      const limit = ac.params.limit ? Math.min(ac.params.limit, items.length) : items.length;
      ac.items = items;
      for (let i = 0; i < limit; i += 1) {
        let selected = false;
        const itemValue = typeof items[i] === "object" ? items[i][ac.params.valueProperty] : items[i];
        for (let j = 0; j < ac.value.length; j += 1) {
          const aValue = typeof ac.value[j] === "object" ? ac.value[j][ac.params.valueProperty] : ac.value[j];
          if (aValue === itemValue || aValue * 1 === itemValue * 1) selected = true;
        }
        itemsHTML += ac.renderItem({
          value: itemValue,
          text: typeof items[i] === "object" ? items[i][ac.params.textProperty] : items[i],
          inputType: ac.inputType,
          id: ac.id,
          inputName: ac.inputName,
          selected
        }, i);
      }
      $el.find(".autocomplete-found ul").html(itemsHTML);
      if (items.length === 0) {
        if (query.length !== 0) {
          $el.find(".autocomplete-not-found").show();
          $el.find(".autocomplete-found, .autocomplete-values").hide();
        } else {
          $el.find(".autocomplete-values").show();
          $el.find(".autocomplete-found, .autocomplete-not-found").hide();
        }
      } else {
        $el.find(".autocomplete-found").show();
        $el.find(".autocomplete-not-found, .autocomplete-values").hide();
      }
    });
  }
  updateValues() {
    const ac = this;
    let valuesHTML = "";
    for (let i = 0; i < ac.value.length; i += 1) {
      valuesHTML += ac.renderItem({
        value: typeof ac.value[i] === "object" ? ac.value[i][ac.params.valueProperty] : ac.value[i],
        text: typeof ac.value[i] === "object" ? ac.value[i][ac.params.textProperty] : ac.value[i],
        inputType: ac.inputType,
        id: ac.id,
        inputName: `${ac.inputName}-checked}`,
        selected: true
      }, i);
    }
    ac.$el.find(".autocomplete-values ul").html(valuesHTML);
  }
  preloaderHide() {
    const ac = this;
    if (ac.params.openIn === "dropdown" && ac.$dropdownEl) {
      ac.$dropdownEl.find(".autocomplete-preloader").removeClass("autocomplete-preloader-visible");
    } else {
      dom7_default(".autocomplete-preloader").removeClass("autocomplete-preloader-visible");
    }
  }
  preloaderShow() {
    const ac = this;
    if (ac.params.openIn === "dropdown" && ac.$dropdownEl) {
      ac.$dropdownEl.find(".autocomplete-preloader").addClass("autocomplete-preloader-visible");
    } else {
      dom7_default(".autocomplete-preloader").addClass("autocomplete-preloader-visible");
    }
  }
  renderPreloader() {
    const ac = this;
    const preloaders = {
      iosPreloaderContent,
      mdPreloaderContent
    };
    return jsx_default("div", {
      class: `autocomplete-preloader preloader ${ac.params.preloaderColor ? `color-${ac.params.preloaderColor}` : ""}`
    }, preloaders[`${ac.app.theme}PreloaderContent`] || "");
  }
  renderSearchbar() {
    const ac = this;
    if (ac.params.renderSearchbar) return ac.params.renderSearchbar.call(ac);
    return jsx_default("form", {
      class: "searchbar"
    }, jsx_default("div", {
      class: "searchbar-inner"
    }, jsx_default("div", {
      class: "searchbar-input-wrap"
    }, jsx_default("input", {
      type: "search",
      spellcheck: ac.params.searchbarSpellcheck || "false",
      placeholder: ac.params.searchbarPlaceholder
    }), jsx_default("i", {
      class: "searchbar-icon"
    }), jsx_default("span", {
      class: "input-clear-button"
    })), ac.params.searchbarDisableButton && jsx_default("span", {
      class: "searchbar-disable-button"
    }, ac.params.searchbarDisableText)));
  }
  renderItem(item, index) {
    const ac = this;
    if (ac.params.renderItem) return ac.params.renderItem.call(ac, item, index);
    const itemValue = item.value && typeof item.value === "string" ? item.value.replace(/"/g, "&quot;") : item.value;
    if (ac.params.openIn !== "dropdown") {
      return jsx_default("li", null, jsx_default("label", {
        class: `item-${item.inputType} item-content`
      }, jsx_default("input", {
        type: item.inputType,
        name: item.inputName,
        value: itemValue,
        _checked: item.selected
      }), jsx_default("i", {
        class: `icon icon-${item.inputType}`
      }), jsx_default("div", {
        class: "item-inner"
      }, jsx_default("div", {
        class: "item-title"
      }, item.text))));
    }
    if (!item.placeholder) {
      return jsx_default("li", null, jsx_default("label", {
        class: "item-radio item-content",
        "data-value": itemValue
      }, jsx_default("div", {
        class: "item-inner"
      }, jsx_default("div", {
        class: "item-title"
      }, item.text))));
    }
    return jsx_default("li", {
      class: "autocomplete-dropdown-placeholder"
    }, jsx_default("label", {
      class: "item-content"
    }, jsx_default("div", {
      class: "item-inner"
    }, jsx_default("div", {
      class: "item-title"
    }, item.text))));
  }
  renderNavbar() {
    const ac = this;
    if (ac.params.renderNavbar) return ac.params.renderNavbar.call(ac);
    let pageTitle = ac.params.pageTitle;
    if (typeof pageTitle === "undefined" && ac.$openerEl && ac.$openerEl.length) {
      pageTitle = ac.$openerEl.find(".item-title").text().trim();
    }
    const inPopup = ac.params.openIn === "popup";
    const navbarLeft = inPopup ? ac.params.preloader && jsx_default("div", {
      class: "left"
    }, ac.renderPreloader()) : jsx_default("div", {
      class: "left sliding"
    }, jsx_default("a", {
      class: "link back"
    }, jsx_default("i", {
      class: "icon icon-back"
    }), jsx_default("span", {
      class: "if-not-md"
    }, ac.params.pageBackLinkText)));
    const navbarRight = inPopup ? jsx_default("div", {
      class: "right"
    }, jsx_default("a", {
      class: "link popup-close",
      "data-popup": ".autocomplete-popup"
    }, ac.params.popupCloseLinkText)) : ac.params.preloader && jsx_default("div", {
      class: "right"
    }, ac.renderPreloader());
    return jsx_default("div", {
      class: `navbar ${ac.params.navbarColorTheme ? `color-${ac.params.navbarColorTheme}` : ""}`
    }, jsx_default("div", {
      class: "navbar-bg"
    }), jsx_default("div", {
      class: `navbar-inner ${ac.params.navbarColorTheme ? `color-${ac.params.navbarColorTheme}` : ""}`
    }, navbarLeft, pageTitle && jsx_default("div", {
      class: "title sliding"
    }, pageTitle), navbarRight, jsx_default("div", {
      class: "subnavbar sliding"
    }, ac.renderSearchbar())));
  }
  renderDropdown() {
    const ac = this;
    if (ac.params.renderDropdown) return ac.params.renderDropdown.call(ac, ac.items);
    return jsx_default("div", {
      class: "autocomplete-dropdown"
    }, jsx_default("div", {
      class: "autocomplete-dropdown-inner"
    }, jsx_default("div", {
      class: `list no-safe-areas`
    }, jsx_default("ul", null))), ac.params.preloader && ac.renderPreloader());
  }
  renderPage(inPopup) {
    const ac = this;
    if (ac.params.renderPage) return ac.params.renderPage.call(ac, ac.items);
    return jsx_default("div", {
      class: "page page-with-subnavbar autocomplete-page",
      "data-name": "autocomplete-page"
    }, ac.renderNavbar(inPopup), jsx_default("div", {
      class: "searchbar-backdrop"
    }), jsx_default("div", {
      class: "page-content"
    }, jsx_default("div", {
      class: `list autocomplete-list autocomplete-found autocomplete-list-${ac.id} ${ac.params.formColorTheme ? `color-${ac.params.formColorTheme}` : ""}`
    }, jsx_default("ul", null)), jsx_default("div", {
      class: "list autocomplete-not-found"
    }, jsx_default("ul", null, jsx_default("li", {
      class: "item-content"
    }, jsx_default("div", {
      class: "item-inner"
    }, jsx_default("div", {
      class: "item-title"
    }, ac.params.notFoundText))))), jsx_default("div", {
      class: "list autocomplete-values"
    }, jsx_default("ul", null))));
  }
  renderPopup() {
    const ac = this;
    if (ac.params.renderPopup) return ac.params.renderPopup.call(ac, ac.items);
    return jsx_default("div", {
      class: "popup autocomplete-popup"
    }, jsx_default("div", {
      class: "view"
    }, ac.renderPage(true), ";"));
  }
  onOpen(type, el) {
    const ac = this;
    const app = ac.app;
    const $el = dom7_default(el);
    ac.$el = $el;
    ac.el = $el[0];
    ac.openedIn = type;
    ac.opened = true;
    if (ac.params.openIn === "dropdown") {
      ac.attachDropdownEvents();
      ac.$dropdownEl.addClass("autocomplete-dropdown-in");
      ac.$inputEl.trigger("input");
    } else {
      let $searchbarEl = $el.find(".searchbar");
      if (ac.params.openIn === "page" && app.theme === "ios" && $searchbarEl.length === 0) {
        $searchbarEl = dom7_default(app.navbar.getElByPage($el)).find(".searchbar");
      }
      ac.searchbar = app.searchbar.create({
        el: $searchbarEl,
        backdropEl: $el.find(".searchbar-backdrop"),
        customSearch: true,
        on: {
          search(sb, query) {
            if (query.length === 0 && ac.searchbar.enabled) {
              ac.searchbar.backdropShow();
            } else {
              ac.searchbar.backdropHide();
            }
            ac.source(query);
          }
        }
      });
      ac.attachPageEvents();
      ac.updateValues();
      if (ac.params.requestSourceOnOpen) ac.source("");
    }
    ac.emit("local::open autocompleteOpen", ac);
  }
  autoFocus() {
    const ac = this;
    if (ac.searchbar && ac.searchbar.$inputEl) {
      ac.searchbar.$inputEl.focus();
    }
    return ac;
  }
  onOpened() {
    const ac = this;
    if (ac.params.openIn !== "dropdown" && ac.params.autoFocus) {
      ac.autoFocus();
    }
    ac.emit("local::opened autocompleteOpened", ac);
  }
  onClose() {
    const ac = this;
    if (ac.destroyed) return;
    if (ac.searchbar && ac.searchbar.destroy) {
      ac.searchbar.destroy();
      ac.searchbar = null;
      delete ac.searchbar;
    }
    if (ac.params.openIn === "dropdown") {
      ac.detachDropdownEvents();
      ac.$dropdownEl.removeClass("autocomplete-dropdown-in").remove();
    } else {
      ac.detachPageEvents();
    }
    ac.emit("local::close autocompleteClose", ac);
  }
  onClosed() {
    const ac = this;
    if (ac.destroyed) return;
    ac.opened = false;
    ac.$el = null;
    ac.el = null;
    delete ac.$el;
    delete ac.el;
    ac.emit("local::closed autocompleteClosed", ac);
  }
  openPage() {
    const ac = this;
    if (ac.opened) return ac;
    const pageHtml = ac.renderPage();
    ac.view.router.navigate({
      url: ac.url,
      route: {
        content: pageHtml,
        path: ac.url,
        on: {
          pageBeforeIn(e, page) {
            ac.onOpen("page", page.el);
          },
          pageAfterIn(e, page) {
            ac.onOpened("page", page.el);
          },
          pageBeforeOut(e, page) {
            ac.onClose("page", page.el);
          },
          pageAfterOut(e, page) {
            ac.onClosed("page", page.el);
          }
        },
        options: {
          animate: ac.params.animate
        }
      }
    });
    return ac;
  }
  openPopup() {
    const ac = this;
    if (ac.opened) return ac;
    const popupHtml = ac.renderPopup();
    const popupParams = {
      content: popupHtml,
      animate: ac.params.animate,
      push: ac.params.popupPush,
      swipeToClose: ac.params.popupSwipeToClose,
      on: {
        popupOpen(popup) {
          ac.onOpen("popup", popup.el);
        },
        popupOpened(popup) {
          ac.onOpened("popup", popup.el);
        },
        popupClose(popup) {
          ac.onClose("popup", popup.el);
        },
        popupClosed(popup) {
          ac.onClosed("popup", popup.el);
        }
      }
    };
    if (ac.params.routableModals && ac.view) {
      ac.view.router.navigate({
        url: ac.url,
        route: {
          path: ac.url,
          popup: popupParams
        }
      });
    } else {
      ac.modal = ac.app.popup.create(popupParams).open(ac.params.animate);
    }
    return ac;
  }
  openDropdown() {
    const ac = this;
    if (!ac.$dropdownEl) {
      ac.$dropdownEl = dom7_default(ac.renderDropdown());
    }
    const $pageContentEl = ac.$inputEl.parents(".page-content");
    if (ac.params.dropdownContainerEl) {
      dom7_default(ac.params.dropdownContainerEl).append(ac.$dropdownEl);
    } else if ($pageContentEl.length === 0) {
      ac.$dropdownEl.insertAfter(ac.$inputEl);
    } else {
      ac.positionDropdown();
      $pageContentEl.append(ac.$dropdownEl);
    }
    ac.onOpen("dropdown", ac.$dropdownEl);
    ac.onOpened("dropdown", ac.$dropdownEl);
  }
  open() {
    const ac = this;
    if (ac.opened) return ac;
    const openIn = ac.params.openIn;
    ac[`open${openIn.split("").map((el, index) => {
      if (index === 0) return el.toUpperCase();
      return el;
    }).join("")}`]();
    return ac;
  }
  close() {
    const ac = this;
    if (!ac.opened) return ac;
    if (ac.params.openIn === "dropdown") {
      ac.onClose();
      ac.onClosed();
    } else if (ac.params.routableModals && ac.view || ac.openedIn === "page") {
      ac.view.router.back({
        animate: ac.params.animate
      });
    } else {
      ac.modal.once("modalClosed", () => {
        nextTick(() => {
          if (ac.destroyed) return;
          ac.modal.destroy();
          delete ac.modal;
        });
      });
      ac.modal.close();
    }
    return ac;
  }
  init() {
    const ac = this;
    ac.attachEvents();
  }
  destroy() {
    const ac = this;
    ac.emit("local::beforeDestroy autocompleteBeforeDestroy", ac);
    ac.detachEvents();
    if (ac.$inputEl && ac.$inputEl[0]) {
      delete ac.$inputEl[0].f7Autocomplete;
    }
    if (ac.$openerEl && ac.$openerEl[0]) {
      delete ac.$openerEl[0].f7Autocomplete;
    }
    deleteProps(ac);
    ac.destroyed = true;
  }
};
var autocomplete_class_default = Autocomplete;

// node_modules/framework7/components/autocomplete/autocomplete.js
var autocomplete_default = {
  name: "autocomplete",
  params: {
    autocomplete: {
      openerEl: void 0,
      inputEl: void 0,
      view: void 0,
      // DropDown
      dropdownContainerEl: void 0,
      dropdownPlaceholderText: void 0,
      typeahead: false,
      highlightMatches: true,
      updateInputValueOnSelect: true,
      inputEvents: "input",
      value: void 0,
      multiple: false,
      source: void 0,
      limit: void 0,
      valueProperty: "id",
      textProperty: "text",
      openIn: "page",
      // or 'popup' or 'dropdown'
      pageBackLinkText: "Back",
      popupCloseLinkText: "Close",
      pageTitle: void 0,
      searchbarPlaceholder: "Search...",
      searchbarDisableText: "Cancel",
      searchbarDisableButton: true,
      searchbarSpellcheck: false,
      popupPush: false,
      popupSwipeToClose: void 0,
      animate: true,
      autoFocus: false,
      closeOnSelect: false,
      notFoundText: "Nothing found",
      requestSourceOnOpen: false,
      // Preloader
      preloaderColor: void 0,
      preloader: false,
      // Colors
      formColorTheme: void 0,
      navbarColorTheme: void 0,
      // Routing
      routableModals: false,
      url: "select/",
      // Custom render functions
      renderDropdown: void 0,
      renderPage: void 0,
      renderPopup: void 0,
      renderItem: void 0,
      renderSearchbar: void 0,
      renderNavbar: void 0
    }
  },
  static: {
    Autocomplete: autocomplete_class_default
  },
  create() {
    const app = this;
    app.autocomplete = extend(ConstructorMethods({
      defaultSelector: void 0,
      constructor: autocomplete_class_default,
      app,
      domProp: "f7Autocomplete"
    }), {
      open(autocompleteEl) {
        const ac = app.autocomplete.get(autocompleteEl);
        if (ac && ac.open) return ac.open();
        return void 0;
      },
      close(autocompleteEl) {
        const ac = app.autocomplete.get(autocompleteEl);
        if (ac && ac.close) return ac.close();
        return void 0;
      }
    });
  }
};

// node_modules/framework7/components/tooltip/tooltip-class.js
var Tooltip = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const tooltip = this;
    const support2 = getSupport();
    const defaults2 = extend({}, app.params.tooltip);
    const document2 = getDocument();
    tooltip.useModulesParams(defaults2);
    tooltip.params = extend(defaults2, params);
    if (typeof params.offset === "undefined" && support2.touch && tooltip.params.trigger === "hover") {
      tooltip.params.offset = 10;
    }
    const {
      targetEl,
      containerEl
    } = tooltip.params;
    if (!targetEl && !tooltip.params.delegated) return tooltip;
    const $targetEl = dom7_default(targetEl);
    if ($targetEl.length === 0 && !tooltip.params.delegated) return tooltip;
    if ($targetEl[0] && $targetEl[0].f7Tooltip && !tooltip.params.delegated) return $targetEl[0].f7Tooltip;
    let $containerEl = dom7_default(containerEl || app.$el).eq(0);
    if ($containerEl.length === 0) {
      $containerEl = app.$el;
    }
    const $el = dom7_default(tooltip.render()).eq(0);
    extend(tooltip, {
      app,
      $targetEl,
      targetEl: $targetEl && $targetEl[0],
      $containerEl,
      containerEl: $containerEl && $containerEl[0],
      $el,
      el: $el && $el[0],
      text: tooltip.params.text || "",
      visible: false,
      opened: false
    });
    if ($targetEl[0]) $targetEl[0].f7Tooltip = tooltip;
    const touchesStart = {};
    let isTouched;
    function handleClick() {
      if (tooltip.opened) tooltip.hide();
      else tooltip.show(this);
    }
    function handleClickOut(e) {
      if (tooltip.opened && (dom7_default(e.target).closest($targetEl).length || dom7_default(e.target).closest(tooltip.$el).length)) return;
      tooltip.hide();
    }
    function handleTouchStart(e) {
      if (isTouched) return;
      isTouched = true;
      touchesStart.x = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
      touchesStart.y = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
      tooltip.show(this);
    }
    function handleTouchMove(e) {
      if (!isTouched) return;
      const x = e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX;
      const y = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
      const distance = ((x - touchesStart.x) ** 2 + (y - touchesStart.y) ** 2) ** 0.5;
      if (distance > 50) {
        isTouched = false;
        tooltip.hide();
      }
    }
    function handleTouchEnd() {
      if (!isTouched) return;
      isTouched = false;
      tooltip.hide();
    }
    function handleMouseEnter() {
      tooltip.show(this);
    }
    function handleMouseLeave() {
      tooltip.hide();
    }
    function handleTransitionEnd() {
      if (!$el.hasClass("tooltip-in")) {
        $el.removeClass("tooltip-out").remove();
      }
    }
    tooltip.attachEvents = function attachEvents2() {
      $el.on("transitionend", handleTransitionEnd);
      if (tooltip.params.trigger === "click") {
        if (tooltip.params.delegated) {
          dom7_default(document2).on("click", tooltip.params.targetEl, handleClick);
        } else {
          tooltip.$targetEl.on("click", handleClick);
        }
        dom7_default("html").on("click", handleClickOut);
        return;
      }
      if (tooltip.params.trigger === "manual") return;
      if (support2.touch) {
        const passive = support2.passiveListener ? {
          passive: true
        } : false;
        if (tooltip.params.delegated) {
          dom7_default(document2).on(app.touchEvents.start, tooltip.params.targetEl, handleTouchStart, passive);
        } else {
          tooltip.$targetEl.on(app.touchEvents.start, handleTouchStart, passive);
        }
        app.on("touchmove", handleTouchMove);
        app.on("touchend:passive", handleTouchEnd);
      } else {
        if (tooltip.params.delegated) {
          dom7_default(document2).on(support2.pointerEvents ? "pointerenter" : "mouseenter", tooltip.params.targetEl, handleMouseEnter, true);
          dom7_default(document2).on(support2.pointerEvents ? "pointerleave" : "mouseleave", tooltip.params.targetEl, handleMouseLeave, true);
        } else {
          tooltip.$targetEl.on(support2.pointerEvents ? "pointerenter" : "mouseenter", handleMouseEnter);
          tooltip.$targetEl.on(support2.pointerEvents ? "pointerleave" : "mouseleave", handleMouseLeave);
        }
      }
    };
    tooltip.detachEvents = function detachEvents2() {
      $el.off("transitionend", handleTransitionEnd);
      if (tooltip.params.trigger === "click") {
        if (tooltip.params.delegated) {
          dom7_default(document2).on("click", tooltip.params.targetEl, handleClick);
        } else {
          tooltip.$targetEl.off("click", handleClick);
        }
        dom7_default("html").off("click", handleClickOut);
        return;
      }
      if (tooltip.params.trigger === "manual") return;
      if (support2.touch) {
        const passive = support2.passiveListener ? {
          passive: true
        } : false;
        if (tooltip.params.delegated) {
          dom7_default(document2).off(app.touchEvents.start, tooltip.params.targetEl, handleTouchStart, passive);
        } else {
          tooltip.$targetEl.off(app.touchEvents.start, handleTouchStart, passive);
        }
        app.off("touchmove", handleTouchMove);
        app.off("touchend:passive", handleTouchEnd);
      } else {
        if (tooltip.params.delegated) {
          dom7_default(document2).off(support2.pointerEvents ? "pointerenter" : "mouseenter", tooltip.params.targetEl, handleMouseEnter, true);
          dom7_default(document2).off(support2.pointerEvents ? "pointerleave" : "mouseleave", tooltip.params.targetEl, handleMouseLeave, true);
        } else {
          tooltip.$targetEl.off(support2.pointerEvents ? "pointerenter" : "mouseenter", handleMouseEnter);
          tooltip.$targetEl.off(support2.pointerEvents ? "pointerleave" : "mouseleave", handleMouseLeave);
        }
      }
    };
    tooltip.useModules();
    tooltip.init();
    return tooltip;
  }
  setTargetEl(targetEl) {
    const tooltip = this;
    tooltip.detachEvents();
    tooltip.$targetEl = dom7_default(targetEl);
    tooltip.targetEl = tooltip.$targetEl[0];
    tooltip.attachEvents();
    return tooltip;
  }
  position(targetEl) {
    const tooltip = this;
    const {
      $el,
      app,
      $containerEl
    } = tooltip;
    const hasContainerEl = !!tooltip.params.containerEl;
    const tooltipOffset = tooltip.params.offset || 0;
    $el.css({
      left: "",
      top: ""
    });
    const $targetEl = dom7_default(targetEl || tooltip.targetEl);
    const [width, height] = [$el.width(), $el.height()];
    $el.css({
      left: "",
      top: ""
    });
    let targetWidth;
    let targetHeight;
    let targetOffsetLeft;
    let targetOffsetTop;
    const boundaries = hasContainerEl && $containerEl.length ? $containerEl[0].getBoundingClientRect() : app;
    if ($targetEl && $targetEl.length > 0) {
      targetWidth = $targetEl.outerWidth();
      targetHeight = $targetEl.outerHeight();
      if (typeof targetWidth === "undefined" && typeof targetHeight === "undefined") {
        const clientRect = $targetEl[0].getBoundingClientRect();
        targetWidth = clientRect.width;
        targetHeight = clientRect.height;
      }
      const targetOffset = $targetEl.offset();
      targetOffsetLeft = targetOffset.left - boundaries.left;
      targetOffsetTop = targetOffset.top - boundaries.top;
      const targetParentPage = $targetEl.parents(".page");
      if (targetParentPage.length > 0) {
        targetOffsetTop -= targetParentPage[0].scrollTop;
      }
    }
    let [left, top] = [0, 0, 0];
    let position = "top";
    if (height + tooltipOffset < targetOffsetTop) {
      top = targetOffsetTop - height - tooltipOffset;
    } else if (height < boundaries.height - targetOffsetTop - targetHeight) {
      position = "bottom";
      top = targetOffsetTop + targetHeight + tooltipOffset;
    } else {
      position = "middle";
      top = targetHeight / 2 + targetOffsetTop - height / 2;
      if (top <= 0) {
        top = 8;
      } else if (top + height >= boundaries.height) {
        top = boundaries.height - height - 8;
      }
    }
    if (position === "top" || position === "bottom") {
      left = targetWidth / 2 + targetOffsetLeft - width / 2;
      if (left < 8) left = 8;
      if (left + width > boundaries.width) left = boundaries.width - width - 8;
      if (left < 0) left = 0;
    } else if (position === "middle") {
      left = targetOffsetLeft - width;
      if (left < 8 || left + width > boundaries.width) {
        if (left < 8) left = targetOffsetLeft + targetWidth;
        if (left + width > boundaries.width) left = boundaries.width - width - 8;
      }
    }
    $el.css({
      top: `${top}px`,
      left: `${left}px`
    });
  }
  show(aroundEl) {
    const tooltip = this;
    const {
      $el,
      $targetEl,
      $containerEl
    } = tooltip;
    if ($containerEl[0] && $el[0] && !$containerEl[0].contains($el[0])) {
      $containerEl.append($el);
    }
    tooltip.position(aroundEl);
    const $aroundEl = dom7_default(aroundEl);
    tooltip.visible = true;
    tooltip.opened = true;
    $targetEl.trigger("tooltip:show");
    $el.trigger("tooltip:show");
    if ($aroundEl.length && $aroundEl[0] !== $targetEl[0]) {
      $aroundEl.trigger("tooltip:show");
    }
    tooltip.emit("local::show tooltipShow", tooltip);
    $el.removeClass("tooltip-out").addClass("tooltip-in");
    return tooltip;
  }
  hide() {
    const tooltip = this;
    const {
      $el,
      $targetEl
    } = tooltip;
    tooltip.visible = false;
    tooltip.opened = false;
    $targetEl.trigger("tooltip:hide");
    $el.trigger("tooltip:hide");
    tooltip.emit("local::hide tooltipHide", tooltip);
    $el.addClass("tooltip-out").removeClass("tooltip-in");
    return tooltip;
  }
  render() {
    const tooltip = this;
    if (tooltip.params.render) return tooltip.params.render.call(tooltip, tooltip);
    const {
      cssClass,
      text
    } = tooltip.params;
    return `
      <div class="tooltip ${cssClass || ""}">
        <div class="tooltip-content">${text || ""}</div>
      </div>
    `.trim();
  }
  setText(newText) {
    const tooltip = this;
    if (typeof newText === "undefined") {
      return tooltip;
    }
    tooltip.params.text = newText;
    tooltip.text = newText;
    if (tooltip.$el) {
      tooltip.$el.children(".tooltip-content").html(newText);
    }
    if (tooltip.opened) {
      tooltip.position();
    }
    return tooltip;
  }
  init() {
    const tooltip = this;
    tooltip.attachEvents();
  }
  destroy() {
    const tooltip = this;
    if (!tooltip.$targetEl || tooltip.destroyed) return;
    tooltip.$targetEl.trigger("tooltip:beforedestroy");
    tooltip.emit("local::beforeDestroy tooltipBeforeDestroy", tooltip);
    tooltip.$el.remove();
    if (tooltip.$targetEl[0]) delete tooltip.$targetEl[0].f7Tooltip;
    tooltip.detachEvents();
    deleteProps(tooltip);
    tooltip.destroyed = true;
  }
};
var tooltip_class_default = Tooltip;

// node_modules/framework7/components/tooltip/tooltip.js
var tooltip_default = {
  name: "tooltip",
  static: {
    Tooltip: tooltip_class_default
  },
  create() {
    const app = this;
    app.tooltip = ConstructorMethods({
      defaultSelector: ".tooltip",
      constructor: tooltip_class_default,
      app,
      domProp: "f7Tooltip"
    });
    app.tooltip.show = function show(el) {
      const $el = dom7_default(el);
      if ($el.length === 0) return void 0;
      const tooltip = $el[0].f7Tooltip;
      if (!tooltip) return void 0;
      tooltip.show($el[0]);
      return tooltip;
    };
    app.tooltip.hide = function hide(el) {
      const $el = dom7_default(el);
      if ($el.length === 0) return void 0;
      const tooltip = $el[0].f7Tooltip;
      if (!tooltip) return void 0;
      tooltip.hide();
      return tooltip;
    };
    app.tooltip.setText = function text(el, newText) {
      const $el = dom7_default(el);
      if ($el.length === 0) return void 0;
      const tooltip = $el[0].f7Tooltip;
      if (!tooltip) return void 0;
      tooltip.setText(newText);
      return tooltip;
    };
  },
  params: {
    tooltip: {
      targetEl: null,
      delegated: false,
      text: null,
      cssClass: null,
      render: null,
      offset: 0,
      trigger: "hover",
      containerEl: void 0
    }
  },
  on: {
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".tooltip-init").each((el) => {
        const text = dom7_default(el).attr("data-tooltip");
        if (!text) return;
        app.tooltip.create({
          targetEl: el,
          text
        });
      });
    },
    tabBeforeRemove(tabEl) {
      dom7_default(tabEl).find(".tooltip-init").each((el) => {
        if (el.f7Tooltip) el.f7Tooltip.destroy();
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".tooltip-init").each((el) => {
        const text = dom7_default(el).attr("data-tooltip");
        if (!text) return;
        app.tooltip.create({
          targetEl: el,
          text
        });
      });
      if (app.theme === "ios" && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {
        page.$navbarEl.find(".tooltip-init").each((el) => {
          const text = dom7_default(el).attr("data-tooltip");
          if (!text) return;
          app.tooltip.create({
            targetEl: el,
            text
          });
        });
      }
    },
    pageBeforeRemove(page) {
      const app = this;
      page.$el.find(".tooltip-init").each((el) => {
        if (el.f7Tooltip) el.f7Tooltip.destroy();
      });
      if (app.theme === "ios" && page.view && page.view.router.dynamicNavbar && page.$navbarEl && page.$navbarEl.length > 0) {
        page.$navbarEl.find(".tooltip-init").each((el) => {
          if (el.f7Tooltip) el.f7Tooltip.destroy();
        });
      }
    }
  },
  vnode: {
    "tooltip-init": {
      insert(vnode) {
        const app = this;
        const el = vnode.elm;
        const text = dom7_default(el).attr("data-tooltip");
        if (!text) return;
        app.tooltip.create({
          targetEl: el,
          text
        });
      },
      update(vnode) {
        const el = vnode.elm;
        if (!el.f7Tooltip) return;
        if (vnode && vnode.data && vnode.data.attrs && vnode.data.attrs["data-tooltip"]) {
          el.f7Tooltip.setText(vnode.data.attrs["data-tooltip"]);
        }
      },
      destroy(vnode) {
        const el = vnode.elm;
        if (el.f7Tooltip) el.f7Tooltip.destroy();
      }
    }
  }
};

// node_modules/framework7/components/skeleton/skeleton.js
var skeleton_default = {
  name: "skeleton"
};

// node_modules/framework7/components/color-picker/modules/alpha-slider.js
var alpha_slider_default = {
  render(self) {
    const {
      sliderLabel,
      sliderValue,
      sliderValueEditable,
      alphaLabelText
    } = self.params;
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-alpha-slider"
    }, jsx_default("div", {
      class: "color-picker-slider-wrap"
    }, sliderLabel && jsx_default("div", {
      class: "color-picker-slider-label"
    }, alphaLabelText), jsx_default("div", {
      class: "range-slider color-picker-slider color-picker-slider-alpha"
    }), sliderValue && jsx_default("div", {
      class: "color-picker-slider-value"
    }, sliderValueEditable ? jsx_default("input", {
      type: "number",
      step: "0.01",
      min: "0",
      max: "1",
      class: "color-picker-value-alpha"
    }) : jsx_default("span", {
      class: "color-picker-value-alpha"
    }))));
  },
  init(self) {
    self.alphaRangeSlider = self.app.range.create({
      el: self.$el.find(".color-picker-slider-alpha"),
      min: 0,
      max: 1,
      step: 0.01,
      value: 1,
      on: {
        change(range, value) {
          const alpha = Math.floor(value * 100) / 100;
          self.setValue({
            alpha
          });
        }
      }
    });
    function handleInputChange(e) {
      const alpha = self.value.alpha;
      let value = parseFloat(e.target.value);
      if (Number.isNaN(value)) {
        e.target.value = alpha;
        return;
      }
      value = Math.max(0, Math.min(1, value));
      self.setValue({
        alpha: value
      });
    }
    self.$el.on("change", ".color-picker-module-alpha-slider input", handleInputChange);
    self.destroyAlphaSliderEvents = function destroyAlphaSliderEvents() {
      self.$el.off("change", ".color-picker-module-alpha-slider input", handleInputChange);
    };
  },
  update(self) {
    const {
      value
    } = self;
    const {
      sliderValue,
      sliderValueEditable
    } = self.params;
    const {
      alpha
    } = value;
    self.alphaRangeSlider.value = alpha;
    self.alphaRangeSlider.layout();
    if (sliderValue && sliderValueEditable) {
      self.$el.find("input.color-picker-value-alpha").val(alpha);
    } else {
      self.$el.find("span.color-picker-value-alpha").text(alpha);
    }
  },
  destroy(self) {
    if (self.alphaRangeSlider && self.alphaRangeSlider.destroy) {
      self.alphaRangeSlider.destroy();
    }
    delete self.alphaRangeSlider;
    if (self.destroyAlphaSliderEvents) self.destroyAlphaSliderEvents();
    delete self.destroyAlphaSliderEvents;
  }
};

// node_modules/framework7/components/color-picker/modules/current-color.js
var current_color_default = {
  render() {
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-current-color"
    }, jsx_default("div", {
      class: "color-picker-current-color"
    }));
  },
  update(self) {
    self.$el.find(".color-picker-module-current-color .color-picker-current-color").css("background-color", self.value.hex);
  }
};

// node_modules/framework7/components/color-picker/modules/hex.js
var hex_default = {
  render(self) {
    const {
      hexLabel,
      hexLabelText,
      hexValueEditable
    } = self.params;
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-hex"
    }, jsx_default("div", {
      class: "color-picker-hex-wrap"
    }, hexLabel && jsx_default("div", {
      class: "color-picker-hex-label"
    }, hexLabelText), jsx_default("div", {
      class: "color-picker-hex-value"
    }, hexValueEditable ? jsx_default("input", {
      type: "text",
      class: "color-picker-value-hex"
    }) : jsx_default("span", {
      class: "color-picker-value-hex"
    }))));
  },
  init(self) {
    function handleInputChange(e) {
      const hex = self.value.hex;
      let value = e.target.value.replace(/#/g, "");
      if (Number.isNaN(value) || !value || value.length !== 3 && value.length !== 6) {
        e.target.value = hex;
        return;
      }
      const min = 0;
      const current = parseInt(value, 16);
      const max = parseInt("ffffff", 16);
      if (current > max) {
        value = "fff";
      }
      if (current < min) {
        value = "000";
      }
      self.setValue({
        hex: value
      });
    }
    self.$el.on("change", ".color-picker-module-hex input", handleInputChange);
    self.destroyHexEvents = function destroyHexEvents() {
      self.$el.off("change", ".color-picker-module-hex input", handleInputChange);
    };
  },
  update(self) {
    const {
      value
    } = self;
    const {
      hexValueEditable
    } = self.params;
    const {
      hex
    } = value;
    if (hexValueEditable) {
      self.$el.find("input.color-picker-value-hex").val(hex);
    } else {
      self.$el.find("span.color-picker-value-hex").text(hex);
    }
  },
  destroy(self) {
    if (self.destroyHexEvents) self.destroyHexEvents();
    delete self.destroyHexEvents;
  }
};

// node_modules/framework7/components/color-picker/modules/hsb-sliders.js
var hsb_sliders_default = {
  render(self) {
    const {
      sliderLabel,
      sliderValue,
      sliderValueEditable,
      hueLabelText,
      saturationLabelText,
      brightnessLabelText
    } = self.params;
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-hsb-sliders"
    }, jsx_default("div", {
      class: "color-picker-slider-wrap"
    }, sliderLabel && jsx_default("div", {
      class: "color-picker-slider-label"
    }, hueLabelText), jsx_default("div", {
      class: "range-slider color-picker-slider color-picker-slider-hue"
    }), sliderValue && jsx_default("div", {
      class: "color-picker-slider-value"
    }, sliderValueEditable ? jsx_default("input", {
      type: "number",
      step: "0.1",
      min: "0",
      max: "360",
      class: "color-picker-value-hue",
      "data-color-index": "0"
    }) : jsx_default("span", {
      class: "color-picker-value-hue"
    }))), jsx_default("div", {
      class: "color-picker-slider-wrap"
    }, sliderLabel && jsx_default("div", {
      class: "color-picker-slider-label"
    }, saturationLabelText), jsx_default("div", {
      class: "range-slider color-picker-slider color-picker-slider-saturation"
    }), sliderValue && jsx_default("div", {
      class: "color-picker-slider-value"
    }, sliderValueEditable ? jsx_default("input", {
      type: "number",
      step: "0.1",
      min: "0",
      max: "100",
      class: "color-picker-value-saturation",
      "data-color-index": "1"
    }) : jsx_default("span", {
      class: "color-picker-value-saturation"
    }))), jsx_default("div", {
      class: "color-picker-slider-wrap"
    }, sliderLabel && jsx_default("div", {
      class: "color-picker-slider-label"
    }, brightnessLabelText), jsx_default("div", {
      class: "range-slider color-picker-slider color-picker-slider-brightness"
    }), sliderValue && jsx_default("div", {
      class: "color-picker-slider-value"
    }, sliderValueEditable ? jsx_default("input", {
      type: "number",
      step: "0.1",
      min: "0",
      max: "100",
      class: "color-picker-value-brightness",
      "data-color-index": "2"
    }) : jsx_default("span", {
      class: "color-picker-value-brightness"
    }))));
  },
  init(self) {
    self.hueRangeSlider = self.app.range.create({
      el: self.$el.find(".color-picker-slider-hue"),
      min: 0,
      max: 360,
      step: 0.1,
      value: 0,
      on: {
        change(range, value) {
          self.setValue({
            hue: value
          });
        }
      }
    });
    self.saturationRangeSlider = self.app.range.create({
      el: self.$el.find(".color-picker-slider-saturation"),
      min: 0,
      max: 1,
      step: 1e-3,
      value: 0,
      on: {
        change(range, value) {
          const s = Math.floor(value * 1e3) / 1e3;
          self.setValue({
            hsb: [self.value.hsb[0], s, self.value.hsb[2]]
          });
        }
      }
    });
    self.brightnessRangeSlider = self.app.range.create({
      el: self.$el.find(".color-picker-slider-brightness"),
      min: 0,
      max: 1,
      step: 1e-3,
      value: 0,
      on: {
        change(range, value) {
          const b = Math.floor(value * 1e3) / 1e3;
          self.setValue({
            hsb: [self.value.hsb[0], self.value.hsb[1], b]
          });
        }
      }
    });
    function handleInputChange(e) {
      const hsb = [...self.value.hsb];
      const index = parseInt(dom7_default(e.target).attr("data-color-index"), 10);
      let value = parseFloat(e.target.value);
      if (Number.isNaN(value)) {
        e.target.value = hsb[index];
        return;
      }
      if (index === 0) {
        value = Math.max(0, Math.min(360, value));
      } else {
        value = Math.max(0, Math.min(100, value)) / 100;
      }
      hsb[index] = value;
      self.setValue({
        hsb
      });
    }
    self.$el.on("change", ".color-picker-module-hsb-sliders input", handleInputChange);
    self.destroyHsbSlidersEvents = function destroyHsbSlidersEvents() {
      self.$el.off("change", ".color-picker-module-hsb-sliders input", handleInputChange);
    };
  },
  update(self) {
    const {
      app,
      value
    } = self;
    const {
      sliderValue,
      sliderValueEditable
    } = self.params;
    const {
      hsb,
      hue
    } = value;
    self.hueRangeSlider.value = hue;
    self.saturationRangeSlider.value = hsb[1];
    self.brightnessRangeSlider.value = hsb[2];
    self.hueRangeSlider.layout();
    self.saturationRangeSlider.layout();
    self.brightnessRangeSlider.layout();
    const hslCurrent = colorHsbToHsl(hsb[0], hsb[1], 1);
    const hslLeft = colorHsbToHsl(hsb[0], 0, 1);
    const hslRight = colorHsbToHsl(hsb[0], 1, 1);
    const brightness = hsb[2];
    self.hueRangeSlider.$el[0].style.setProperty("--f7-range-knob-color", `hsl(${hue}, 100%, 50%)`);
    self.saturationRangeSlider.$el[0].style.setProperty("--f7-range-knob-color", `hsl(${hslCurrent[0]}, ${hslCurrent[1] * 100}%, ${hslCurrent[2] * 100}%)`);
    self.brightnessRangeSlider.$el[0].style.setProperty("--f7-range-knob-color", `rgb(${brightness * 255}, ${brightness * 255}, ${brightness * 255})`);
    self.saturationRangeSlider.$el.find(".range-bar").css("background-image", `linear-gradient(${app.rtl ? "to left" : "to right"}, hsl(${hslLeft[0]}, ${hslLeft[1] * 100}%, ${hslLeft[2] * 100}%), hsl(${hslRight[0]}, ${hslRight[1] * 100}%, ${hslRight[2] * 100}%))`);
    if (sliderValue && sliderValueEditable) {
      self.$el.find("input.color-picker-value-hue").val(`${hue}`);
      self.$el.find("input.color-picker-value-saturation").val(`${hsb[1] * 1e3 / 10}`);
      self.$el.find("input.color-picker-value-brightness").val(`${hsb[2] * 1e3 / 10}`);
    } else if (sliderValue) {
      self.$el.find("span.color-picker-value-hue").text(`${hue}`);
      self.$el.find("span.color-picker-value-saturation").text(`${hsb[1] * 1e3 / 10}`);
      self.$el.find("span.color-picker-value-brightness").text(`${hsb[2] * 1e3 / 10}`);
    }
  },
  destroy(self) {
    if (self.hueRangeSlider && self.hueRangeSlider.destroy) {
      self.hueRangeSlider.destroy();
    }
    if (self.saturationRangeSlider && self.saturationRangeSlider.destroy) {
      self.saturationRangeSlider.destroy();
    }
    if (self.brightnessRangeSlider && self.brightnessRangeSlider.destroy) {
      self.brightnessRangeSlider.destroy();
    }
    delete self.hueRangeSlider;
    delete self.saturationRangeSlider;
    delete self.brightnessRangeSlider;
    if (self.destroyHsbSlidersEvents) self.destroyHsbSlidersEvents();
    delete self.destroyHsbSlidersEvents;
  }
};

// node_modules/framework7/components/color-picker/modules/hue-slider.js
var hue_slider_default = {
  render(self) {
    const {
      sliderLabel,
      sliderValue,
      sliderValueEditable,
      hueLabelText
    } = self.params;
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-hue-slider"
    }, jsx_default("div", {
      class: "color-picker-slider-wrap"
    }, sliderLabel && jsx_default("div", {
      class: "color-picker-slider-label"
    }, hueLabelText), jsx_default("div", {
      class: "range-slider color-picker-slider color-picker-slider-hue"
    }), sliderValue && jsx_default("div", {
      class: "color-picker-slider-value"
    }, sliderValueEditable ? jsx_default("input", {
      type: "number",
      step: "0.1",
      min: "0",
      max: "360",
      class: "color-picker-value-hue"
    }) : jsx_default("span", {
      class: "color-picker-value-hue"
    }))));
  },
  init(self) {
    self.hueRangeSlider = self.app.range.create({
      el: self.$el.find(".color-picker-slider-hue"),
      min: 0,
      max: 360,
      step: 0.1,
      value: 0,
      on: {
        change(range, value) {
          self.setValue({
            hue: value
          });
        }
      }
    });
  },
  update(self) {
    const {
      value
    } = self;
    const {
      sliderValue,
      sliderValueEditable
    } = self.params;
    const {
      hue
    } = value;
    self.hueRangeSlider.value = hue;
    self.hueRangeSlider.layout();
    self.hueRangeSlider.$el[0].style.setProperty("--f7-range-knob-color", `hsl(${hue}, 100%, 50%)`);
    if (sliderValue && sliderValueEditable) {
      self.$el.find("input.color-picker-value-hue").val(`${hue}`);
    } else if (sliderValue) {
      self.$el.find("span.color-picker-value-hue").text(`${hue}`);
    }
  },
  destroy(self) {
    if (self.hueRangeSlider && self.hueRangeSlider.destroy) {
      self.hueRangeSlider.destroy();
    }
    delete self.hueRangeSlider;
  }
};

// node_modules/framework7/components/color-picker/modules/brightness-slider.js
var brightness_slider_default = {
  render(self) {
    const {
      sliderLabel,
      sliderValue,
      sliderValueEditable,
      brightnessLabelText
    } = self.params;
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-brightness-slider"
    }, jsx_default("div", {
      class: "color-picker-slider-wrap"
    }, sliderLabel && jsx_default("div", {
      class: "color-picker-slider-label"
    }, brightnessLabelText), jsx_default("div", {
      class: "range-slider color-picker-slider color-picker-slider-brightness"
    }), sliderValue && jsx_default("div", {
      class: "color-picker-slider-value"
    }, sliderValueEditable ? jsx_default("input", {
      type: "number",
      step: "0.1",
      min: "0",
      max: "100",
      class: "color-picker-value-brightness"
    }) : jsx_default("span", {
      class: "color-picker-value-brightness"
    }))));
  },
  init(self) {
    self.brightnessRangeSlider = self.app.range.create({
      el: self.$el.find(".color-picker-slider-brightness"),
      min: 0,
      max: 1,
      step: 1e-3,
      value: 0,
      on: {
        change(range, value) {
          const b = Math.floor(value * 1e3) / 1e3;
          self.setValue({
            hsb: [self.value.hsb[0], self.value.hsb[1], b]
          });
        }
      }
    });
  },
  update(self) {
    const {
      value,
      app
    } = self;
    const {
      sliderValue,
      sliderValueEditable
    } = self.params;
    const {
      hsb
    } = value;
    self.brightnessRangeSlider.value = hsb[2];
    self.brightnessRangeSlider.layout();
    const hslCurrent = colorHsbToHsl(hsb[0], hsb[1], hsb[2]);
    const hslLeft = colorHsbToHsl(hsb[0], hsb[1], 0);
    const hslRight = colorHsbToHsl(hsb[0], hsb[1], 1);
    self.brightnessRangeSlider.$el[0].style.setProperty("--f7-range-knob-color", `hsl(${hslCurrent[0]}, ${hslCurrent[1] * 100}%, ${hslCurrent[2] * 100}%)`);
    self.brightnessRangeSlider.$el.find(".range-bar").css("background-image", `linear-gradient(${app.rtl ? "to left" : "to right"}, hsl(${hslLeft[0]}, ${hslLeft[1] * 100}%, ${hslLeft[2] * 100}%), hsl(${hslRight[0]}, ${hslRight[1] * 100}%, ${hslRight[2] * 100}%))`);
    if (sliderValue && sliderValueEditable) {
      self.$el.find("input.color-picker-value-brightness").val(`${hsb[2] * 1e3 / 10}`);
    } else if (sliderValue) {
      self.$el.find("span.color-picker-value-brightness").text(`${hsb[2] * 1e3 / 10}`);
    }
  },
  destroy(self) {
    if (self.brightnessRangeSlider && self.brightnessRangeSlider.destroy) {
      self.brightnessRangeSlider.destroy();
    }
    delete self.brightnessRangeSlider;
  }
};

// node_modules/framework7/components/color-picker/modules/palette.js
var palette_default = {
  render(self) {
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-palette"
    }, jsx_default("div", {
      class: "color-picker-palette"
    }, self.params.palette.map((p) => {
      if (Array.isArray(p)) {
        let row = '<div class="color-picker-palette-row">';
        row += p.map((c) => `
                <div class="color-picker-palette-value" data-palette-color="${c}" style="background-color: ${c}"></div>
              `).join("");
        row += "</div>";
        return row;
      }
      return jsx_default("div", {
        class: "color-picker-palette-value",
        "data-palette-color": p,
        style: `background-color: ${p}`
      });
    })));
  },
  init(self) {
    function handlePaletteClick(e) {
      const hex = dom7_default(e.target).attr("data-palette-color");
      self.setValue({
        hex
      });
    }
    self.$el.on("click", ".color-picker-module-palette .color-picker-palette-value", handlePaletteClick);
    self.destroyPaletteEvents = function destroyPaletteEvents() {
      self.$el.off("click", ".color-picker-module-hex input", handlePaletteClick);
    };
  },
  destroy(self) {
    if (self.destroyPaletteEvents) {
      self.destroyPaletteEvents();
    }
    delete self.destroyPaletteEvents;
  }
};

// node_modules/framework7/components/color-picker/modules/initial-current-colors.js
var initial_current_colors_default = {
  render() {
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-initial-current-colors"
    }, jsx_default("div", {
      class: "color-picker-initial-current-colors"
    }, jsx_default("div", {
      class: "color-picker-initial-color"
    }), jsx_default("div", {
      class: "color-picker-current-color"
    })));
  },
  init(self) {
    function handleInitialColorClick() {
      if (self.initialValue) {
        const {
          hex,
          alpha
        } = self.initialValue;
        self.setValue({
          hex,
          alpha
        });
      }
    }
    self.$el.on("click", ".color-picker-initial-color", handleInitialColorClick);
    self.destroyInitialCurrentEvents = function destroyInitialCurrentEvents() {
      self.$el.off("click", ".color-picker-initial-color", handleInitialColorClick);
    };
  },
  update(self) {
    self.$el.find(".color-picker-module-initial-current-colors .color-picker-initial-color").css("background-color", self.initialValue.hex);
    self.$el.find(".color-picker-module-initial-current-colors .color-picker-current-color").css("background-color", self.value.hex);
  },
  destroy(self) {
    if (self.destroyInitialCurrentEvents) {
      self.destroyInitialCurrentEvents();
    }
    delete self.destroyInitialCurrentEvents;
  }
};

// node_modules/framework7/components/color-picker/modules/rgb-bars.js
var rgb_bars_default = {
  render(self) {
    const {
      barLabel,
      barValue,
      barValueEditable,
      redLabelText,
      greenLabelText,
      blueLabelText
    } = self.params;
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-rgb-bars"
    }, jsx_default("div", {
      class: "color-picker-bar-wrap"
    }, barLabel && jsx_default("div", {
      class: "color-picker-bar-label"
    }, redLabelText), jsx_default("div", {
      class: "range-slider color-picker-bar color-picker-bar-red"
    }), barValue && jsx_default("div", {
      class: "color-picker-bar-value"
    }, barValueEditable ? jsx_default("input", {
      type: "number",
      step: "1",
      min: "0",
      max: "255",
      class: "color-picker-value-bar-red",
      "data-color-index": "0"
    }) : jsx_default("span", {
      class: "color-picker-value-bar-red"
    }))), jsx_default("div", {
      class: "color-picker-bar-wrap"
    }, barLabel && jsx_default("div", {
      class: "color-picker-bar-label"
    }, greenLabelText), jsx_default("div", {
      class: "range-slider color-picker-bar color-picker-bar-green"
    }), barValue && jsx_default("div", {
      class: "color-picker-bar-value"
    }, barValueEditable ? jsx_default("input", {
      type: "number",
      step: "1",
      min: "0",
      max: "255",
      class: "color-picker-value-bar-green",
      "data-color-index": "1"
    }) : jsx_default("span", {
      class: "color-picker-value-bar-green"
    }))), jsx_default("div", {
      class: "color-picker-bar-wrap"
    }, barLabel && jsx_default("div", {
      class: "color-picker-bar-label"
    }, blueLabelText), jsx_default("div", {
      class: "range-slider color-picker-bar color-picker-bar-blue"
    }), barValue && jsx_default("div", {
      class: "color-picker-bar-value"
    }, barValueEditable ? jsx_default("input", {
      type: "number",
      step: "1",
      min: "0",
      max: "255",
      class: "color-picker-value-bar-blue",
      "data-color-index": "2"
    }) : jsx_default("span", {
      class: "color-picker-value-bar-blue"
    }))));
  },
  init(self) {
    self.redBar = self.app.range.create({
      el: self.$el.find(".color-picker-bar-red"),
      min: 0,
      max: 255,
      step: 1,
      value: 0,
      vertical: true,
      on: {
        change(range, value) {
          self.setValue({
            rgb: [value, self.value.rgb[1], self.value.rgb[2]]
          });
        }
      }
    });
    self.greenBar = self.app.range.create({
      el: self.$el.find(".color-picker-bar-green"),
      min: 0,
      max: 255,
      step: 1,
      value: 0,
      vertical: true,
      on: {
        change(range, value) {
          self.setValue({
            rgb: [self.value.rgb[0], value, self.value.rgb[2]]
          });
        }
      }
    });
    self.blueBar = self.app.range.create({
      el: self.$el.find(".color-picker-bar-blue"),
      min: 0,
      max: 255,
      step: 1,
      value: 0,
      vertical: true,
      on: {
        change(range, value) {
          self.setValue({
            rgb: [self.value.rgb[0], self.value.rgb[1], value]
          });
        }
      }
    });
    function handleInputChange(e) {
      const rgb = [...self.value.rgb];
      const index = parseInt(dom7_default(e.target).attr("data-color-index"), 10);
      let value = parseInt(e.target.value, 10);
      if (Number.isNaN(value)) {
        e.target.value = rgb[index];
        return;
      }
      value = Math.max(0, Math.min(255, value));
      rgb[index] = value;
      self.setValue({
        rgb
      });
    }
    self.$el.on("change", ".color-picker-module-rgb-bars input", handleInputChange);
    self.destroyRgbBarsEvents = function destroyRgbBarsEvents() {
      self.$el.off("change", ".color-picker-module-rgb-bars input", handleInputChange);
    };
  },
  update(self) {
    const {
      value,
      redBar,
      greenBar,
      blueBar
    } = self;
    const {
      barValue,
      barValueEditable
    } = self.params;
    const {
      rgb
    } = value;
    redBar.value = rgb[0];
    greenBar.value = rgb[1];
    blueBar.value = rgb[2];
    redBar.layout();
    greenBar.layout();
    blueBar.layout();
    redBar.$el.find(".range-bar").css("background-image", `linear-gradient(to top, rgb(0, ${rgb[1]}, ${rgb[2]}), rgb(255, ${rgb[1]}, ${rgb[2]}))`);
    greenBar.$el.find(".range-bar").css("background-image", `linear-gradient(to top, rgb(${rgb[0]}, 0, ${rgb[2]}), rgb(${rgb[0]}, 255, ${rgb[2]}))`);
    blueBar.$el.find(".range-bar").css("background-image", `linear-gradient(to top, rgb(${rgb[0]}, ${rgb[1]}, 0), rgb(${rgb[0]}, ${rgb[1]}, 255))`);
    if (barValue && barValueEditable) {
      self.$el.find("input.color-picker-value-bar-red").val(rgb[0]);
      self.$el.find("input.color-picker-value-bar-green").val(rgb[1]);
      self.$el.find("input.color-picker-value-bar-blue").val(rgb[2]);
    } else if (barValue) {
      self.$el.find("span.color-picker-value-bar-red").text(rgb[0]);
      self.$el.find("span.color-picker-value-bar-green").text(rgb[1]);
      self.$el.find("span.color-picker-value-bar-blue").text(rgb[2]);
    }
  },
  destroy(self) {
    if (self.redBar && self.redBar.destroy) {
      self.redBar.destroy();
    }
    if (self.greenBar && self.greenBar.destroy) {
      self.greenBar.destroy();
    }
    if (self.blueBar && self.blueBar.destroy) {
      self.blueBar.destroy();
    }
    delete self.redBar;
    delete self.greenBar;
    delete self.blueBar;
    if (self.destroyRgbBarsEvents) self.destroyRgbBarsEvents();
    delete self.destroyRgbBarsEvents;
  }
};

// node_modules/framework7/components/color-picker/modules/rgb-sliders.js
var rgb_sliders_default = {
  render(self) {
    const {
      sliderLabel,
      sliderValue,
      sliderValueEditable,
      redLabelText,
      greenLabelText,
      blueLabelText
    } = self.params;
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-rgb-sliders"
    }, jsx_default("div", {
      class: "color-picker-slider-wrap"
    }, sliderLabel && jsx_default("div", {
      class: "color-picker-slider-label"
    }, redLabelText), jsx_default("div", {
      class: "range-slider color-picker-slider color-picker-slider-red"
    }), sliderValue && jsx_default("div", {
      class: "color-picker-slider-value"
    }, sliderValueEditable ? jsx_default("input", {
      type: "number",
      step: "1",
      min: "0",
      max: "255",
      class: "color-picker-value-red",
      "data-color-index": "0"
    }) : jsx_default("span", {
      class: "color-picker-value-red"
    }))), jsx_default("div", {
      class: "color-picker-slider-wrap"
    }, sliderLabel && jsx_default("div", {
      class: "color-picker-slider-label"
    }, greenLabelText), jsx_default("div", {
      class: "range-slider color-picker-slider color-picker-slider-green"
    }), sliderValue && jsx_default("div", {
      class: "color-picker-slider-value"
    }, sliderValueEditable ? jsx_default("input", {
      type: "number",
      step: "1",
      min: "0",
      max: "255",
      class: "color-picker-value-green",
      "data-color-index": "1"
    }) : jsx_default("span", {
      class: "color-picker-value-green"
    }))), jsx_default("div", {
      class: "color-picker-slider-wrap"
    }, sliderLabel && jsx_default("div", {
      class: "color-picker-slider-label"
    }, blueLabelText), jsx_default("div", {
      class: "range-slider color-picker-slider color-picker-slider-blue"
    }), sliderValue && jsx_default("div", {
      class: "color-picker-slider-value"
    }, sliderValueEditable ? jsx_default("input", {
      type: "number",
      step: "1",
      min: "0",
      max: "255",
      class: "color-picker-value-blue",
      "data-color-index": "2"
    }) : jsx_default("span", {
      class: "color-picker-value-blue"
    }))));
  },
  init(self) {
    self.redRangeSlider = self.app.range.create({
      el: self.$el.find(".color-picker-slider-red"),
      min: 0,
      max: 255,
      step: 1,
      value: 0,
      on: {
        change(range, value) {
          self.setValue({
            rgb: [value, self.value.rgb[1], self.value.rgb[2]]
          });
        }
      }
    });
    self.greenRangeSlider = self.app.range.create({
      el: self.$el.find(".color-picker-slider-green"),
      min: 0,
      max: 255,
      step: 1,
      value: 0,
      on: {
        change(range, value) {
          self.setValue({
            rgb: [self.value.rgb[0], value, self.value.rgb[2]]
          });
        }
      }
    });
    self.blueRangeSlider = self.app.range.create({
      el: self.$el.find(".color-picker-slider-blue"),
      min: 0,
      max: 255,
      step: 1,
      value: 0,
      on: {
        change(range, value) {
          self.setValue({
            rgb: [self.value.rgb[0], self.value.rgb[1], value]
          });
        }
      }
    });
    function handleInputChange(e) {
      const rgb = [...self.value.rgb];
      const index = parseInt(dom7_default(e.target).attr("data-color-index"), 10);
      let value = parseInt(e.target.value, 10);
      if (Number.isNaN(value)) {
        e.target.value = rgb[index];
        return;
      }
      value = Math.max(0, Math.min(255, value));
      rgb[index] = value;
      self.setValue({
        rgb
      });
    }
    self.$el.on("change", ".color-picker-module-rgb-sliders input", handleInputChange);
    self.destroyRgbSlidersEvents = function destroyRgbSlidersEvents() {
      self.$el.off("change", ".color-picker-module-rgb-sliders input", handleInputChange);
    };
  },
  update(self) {
    const {
      app,
      value,
      redRangeSlider,
      greenRangeSlider,
      blueRangeSlider
    } = self;
    const {
      sliderValue,
      sliderValueEditable
    } = self.params;
    const {
      rgb
    } = value;
    redRangeSlider.value = rgb[0];
    greenRangeSlider.value = rgb[1];
    blueRangeSlider.value = rgb[2];
    redRangeSlider.layout();
    greenRangeSlider.layout();
    blueRangeSlider.layout();
    redRangeSlider.$el[0].style.setProperty("--f7-range-knob-color", `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`);
    greenRangeSlider.$el[0].style.setProperty("--f7-range-knob-color", `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`);
    blueRangeSlider.$el[0].style.setProperty("--f7-range-knob-color", `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`);
    const direction = app.rtl ? "to left" : "to right";
    redRangeSlider.$el.find(".range-bar").css("background-image", `linear-gradient(${direction}, rgb(0, ${rgb[1]}, ${rgb[2]}), rgb(255, ${rgb[1]}, ${rgb[2]}))`);
    greenRangeSlider.$el.find(".range-bar").css("background-image", `linear-gradient(${direction}, rgb(${rgb[0]}, 0, ${rgb[2]}), rgb(${rgb[0]}, 255, ${rgb[2]}))`);
    blueRangeSlider.$el.find(".range-bar").css("background-image", `linear-gradient(${direction}, rgb(${rgb[0]}, ${rgb[1]}, 0), rgb(${rgb[0]}, ${rgb[1]}, 255))`);
    if (sliderValue && sliderValueEditable) {
      self.$el.find("input.color-picker-value-red").val(rgb[0]);
      self.$el.find("input.color-picker-value-green").val(rgb[1]);
      self.$el.find("input.color-picker-value-blue").val(rgb[2]);
    } else if (sliderValue) {
      self.$el.find("span.color-picker-value-red").text(rgb[0]);
      self.$el.find("span.color-picker-value-green").text(rgb[1]);
      self.$el.find("span.color-picker-value-blue").text(rgb[2]);
    }
  },
  destroy(self) {
    if (self.redRangeSlider && self.redRangeSlider.destroy) {
      self.redRangeSlider.destroy();
    }
    if (self.greenRangeSlider && self.greenRangeSlider.destroy) {
      self.greenRangeSlider.destroy();
    }
    if (self.blueRangeSlider && self.blueRangeSlider.destroy) {
      self.blueRangeSlider.destroy();
    }
    delete self.redRangeSlider;
    delete self.greenRangeSlider;
    delete self.blueRangeSlider;
    if (self.destroyRgbSlidersEvents) self.destroyRgbSlidersEvents();
    delete self.destroyRgbSlidersEvents;
  }
};

// node_modules/framework7/components/color-picker/modules/sb-spectrum.js
var sb_spectrum_default = {
  render() {
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-sb-spectrum"
    }, jsx_default("div", {
      class: "color-picker-sb-spectrum",
      style: "background-color: hsl(0, 100%, 50%)"
    }, jsx_default("div", {
      class: "color-picker-sb-spectrum-handle"
    })));
  },
  init(self) {
    const {
      app
    } = self;
    let isTouched;
    let isMoved;
    let touchStartX;
    let touchStartY;
    let touchCurrentX;
    let touchCurrentY;
    let specterRect;
    let specterIsTouched;
    let specterHandleIsTouched;
    const {
      $el
    } = self;
    function setSBFromSpecterCoords(x, y) {
      let s = (x - specterRect.left) / specterRect.width;
      let b = (y - specterRect.top) / specterRect.height;
      s = Math.max(0, Math.min(1, s));
      b = 1 - Math.max(0, Math.min(1, b));
      self.setValue({
        hsb: [self.value.hue, s, b]
      });
    }
    function handleTouchStart(e) {
      if (isMoved || isTouched) return;
      touchStartX = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
      touchCurrentX = touchStartX;
      touchStartY = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
      touchCurrentY = touchStartY;
      const $targetEl = dom7_default(e.target);
      specterHandleIsTouched = $targetEl.closest(".color-picker-sb-spectrum-handle").length > 0;
      if (!specterHandleIsTouched) {
        specterIsTouched = $targetEl.closest(".color-picker-sb-spectrum").length > 0;
      }
      if (specterIsTouched) {
        specterRect = $el.find(".color-picker-sb-spectrum")[0].getBoundingClientRect();
        setSBFromSpecterCoords(touchStartX, touchStartY);
      }
      if (specterHandleIsTouched || specterIsTouched) {
        $el.find(".color-picker-sb-spectrum-handle").addClass("color-picker-sb-spectrum-handle-pressed");
      }
    }
    function handleTouchMove(e) {
      if (!(specterIsTouched || specterHandleIsTouched)) return;
      touchCurrentX = e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX;
      touchCurrentY = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
      e.preventDefault();
      if (!isMoved) {
        isMoved = true;
        if (specterHandleIsTouched) {
          specterRect = $el.find(".color-picker-sb-spectrum")[0].getBoundingClientRect();
        }
      }
      if (specterIsTouched || specterHandleIsTouched) {
        setSBFromSpecterCoords(touchCurrentX, touchCurrentY);
      }
    }
    function handleTouchEnd() {
      isMoved = false;
      if (specterIsTouched || specterHandleIsTouched) {
        $el.find(".color-picker-sb-spectrum-handle").removeClass("color-picker-sb-spectrum-handle-pressed");
      }
      specterIsTouched = false;
      specterHandleIsTouched = false;
    }
    function handleResize() {
      self.modules["sb-spectrum"].update(self);
    }
    const passiveListener = app.touchEvents.start === "touchstart" && getSupport().passiveListener ? {
      passive: true,
      capture: false
    } : false;
    self.$el.on(app.touchEvents.start, handleTouchStart, passiveListener);
    app.on("touchmove:active", handleTouchMove);
    app.on("touchend:passive", handleTouchEnd);
    app.on("resize", handleResize);
    self.destroySpectrumEvents = function destroySpectrumEvents() {
      self.$el.off(app.touchEvents.start, handleTouchStart, passiveListener);
      app.off("touchmove:active", handleTouchMove);
      app.off("touchend:passive", handleTouchEnd);
      app.off("resize", handleResize);
    };
  },
  update(self) {
    const {
      value
    } = self;
    const {
      hsl,
      hsb
    } = value;
    const specterWidth = self.$el.find(".color-picker-sb-spectrum")[0].offsetWidth;
    const specterHeight = self.$el.find(".color-picker-sb-spectrum")[0].offsetHeight;
    self.$el.find(".color-picker-sb-spectrum").css("background-color", `hsl(${hsl[0]}, 100%, 50%)`);
    self.$el.find(".color-picker-sb-spectrum-handle").css("background-color", `hsl(${hsl[0]}, ${hsl[1] * 100}%, ${hsl[2] * 100}%)`).transform(`translate(${specterWidth * hsb[1]}px, ${specterHeight * (1 - hsb[2])}px)`);
  },
  destroy(self) {
    if (self.destroySpectrumEvents) self.destroySpectrumEvents();
    delete self.destroySpectrumEvents;
  }
};

// node_modules/framework7/components/color-picker/modules/hs-spectrum.js
var hs_spectrum_default = {
  render() {
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-hs-spectrum"
    }, jsx_default("div", {
      class: "color-picker-hs-spectrum"
    }, jsx_default("div", {
      class: "color-picker-hs-spectrum-handle"
    })));
  },
  init(self) {
    const {
      app
    } = self;
    let isTouched;
    let isMoved;
    let touchStartX;
    let touchStartY;
    let touchCurrentX;
    let touchCurrentY;
    let specterRect;
    let specterIsTouched;
    let specterHandleIsTouched;
    const {
      $el
    } = self;
    function setHSFromSpecterCoords(x, y) {
      let h = (x - specterRect.left) / specterRect.width * 360;
      let s = (y - specterRect.top) / specterRect.height;
      h = Math.max(0, Math.min(360, h));
      s = 1 - Math.max(0, Math.min(1, s));
      self.setValue({
        hsb: [h, s, self.value.hsb[2]]
      });
    }
    function handleTouchStart(e) {
      if (isMoved || isTouched) return;
      touchStartX = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
      touchCurrentX = touchStartX;
      touchStartY = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
      touchCurrentY = touchStartY;
      const $targetEl = dom7_default(e.target);
      specterHandleIsTouched = $targetEl.closest(".color-picker-hs-spectrum-handle").length > 0;
      if (!specterHandleIsTouched) {
        specterIsTouched = $targetEl.closest(".color-picker-hs-spectrum").length > 0;
      }
      if (specterIsTouched) {
        specterRect = $el.find(".color-picker-hs-spectrum")[0].getBoundingClientRect();
        setHSFromSpecterCoords(touchStartX, touchStartY);
      }
      if (specterHandleIsTouched || specterIsTouched) {
        $el.find(".color-picker-hs-spectrum-handle").addClass("color-picker-hs-spectrum-handle-pressed");
      }
    }
    function handleTouchMove(e) {
      if (!(specterIsTouched || specterHandleIsTouched)) return;
      touchCurrentX = e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX;
      touchCurrentY = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
      e.preventDefault();
      if (!isMoved) {
        isMoved = true;
        if (specterHandleIsTouched) {
          specterRect = $el.find(".color-picker-hs-spectrum")[0].getBoundingClientRect();
        }
      }
      if (specterIsTouched || specterHandleIsTouched) {
        setHSFromSpecterCoords(touchCurrentX, touchCurrentY);
      }
    }
    function handleTouchEnd() {
      isMoved = false;
      if (specterIsTouched || specterHandleIsTouched) {
        $el.find(".color-picker-hs-spectrum-handle").removeClass("color-picker-hs-spectrum-handle-pressed");
      }
      specterIsTouched = false;
      specterHandleIsTouched = false;
    }
    function handleResize() {
      self.modules["hs-spectrum"].update(self);
    }
    const passiveListener = app.touchEvents.start === "touchstart" && getSupport().passiveListener ? {
      passive: true,
      capture: false
    } : false;
    self.$el.on(app.touchEvents.start, handleTouchStart, passiveListener);
    app.on("touchmove:active", handleTouchMove);
    app.on("touchend:passive", handleTouchEnd);
    app.on("resize", handleResize);
    self.destroySpectrumEvents = function destroySpectrumEvents() {
      self.$el.off(app.touchEvents.start, handleTouchStart, passiveListener);
      app.off("touchmove:active", handleTouchMove);
      app.off("touchend:passive", handleTouchEnd);
      app.off("resize", handleResize);
    };
  },
  update(self) {
    const {
      value
    } = self;
    const {
      hsb
    } = value;
    const specterWidth = self.$el.find(".color-picker-hs-spectrum")[0].offsetWidth;
    const specterHeight = self.$el.find(".color-picker-hs-spectrum")[0].offsetHeight;
    const hslBright = colorHsbToHsl(hsb[0], hsb[1], 1);
    self.$el.find(".color-picker-hs-spectrum-handle").css("background-color", `hsl(${hslBright[0]}, ${hslBright[1] * 100}%, ${hslBright[2] * 100}%)`).transform(`translate(${specterWidth * (hsb[0] / 360)}px, ${specterHeight * (1 - hsb[1])}px)`);
  },
  destroy(self) {
    if (self.destroySpectrumEvents) self.destroySpectrumEvents();
    delete self.destroySpectrumEvents;
  }
};

// node_modules/framework7/components/color-picker/modules/wheel.js
function svgWheelCircles() {
  const total = 256;
  let circles = "";
  for (let i = total; i > 0; i -= 1) {
    const angle = i * Math.PI / (total / 2);
    const hue = 360 / total * i;
    circles += `<circle cx="${150 - Math.sin(angle) * 125}" cy="${150 - Math.cos(angle) * 125}" r="25" fill="hsl(${hue}, 100%, 50%)"></circle>`;
  }
  return circles;
}
var wheel_default = {
  render() {
    return jsx_default("div", {
      class: "color-picker-module color-picker-module-wheel"
    }, jsx_default("div", {
      class: "color-picker-wheel"
    }, jsx_default("svg", {
      viewBox: "0 0 300 300",
      width: "300",
      height: "300"
    }, svgWheelCircles()), jsx_default("div", {
      class: "color-picker-wheel-handle"
    }), jsx_default("div", {
      class: "color-picker-sb-spectrum",
      style: "background-color: hsl(0, 100%, 50%)"
    }, jsx_default("div", {
      class: "color-picker-sb-spectrum-handle"
    }))));
  },
  init(self) {
    const {
      app
    } = self;
    let isTouched;
    let isMoved;
    let touchStartX;
    let touchStartY;
    let touchCurrentX;
    let touchCurrentY;
    let wheelRect;
    let wheelIsTouched;
    let wheelHandleIsTouched;
    let specterRect;
    let specterIsTouched;
    let specterHandleIsTouched;
    const {
      $el
    } = self;
    function setHueFromWheelCoords(x, y) {
      const wheelCenterX = wheelRect.left + wheelRect.width / 2;
      const wheelCenterY = wheelRect.top + wheelRect.height / 2;
      const angleRad = Math.atan2(y - wheelCenterY, x - wheelCenterX);
      let angleDeg = angleRad * 180 / Math.PI + 90;
      if (angleDeg < 0) angleDeg += 360;
      angleDeg = 360 - angleDeg;
      self.setValue({
        hue: angleDeg
      });
    }
    function setSBFromSpecterCoords(x, y) {
      let s = (x - specterRect.left) / specterRect.width;
      let b = (y - specterRect.top) / specterRect.height;
      s = Math.max(0, Math.min(1, s));
      b = 1 - Math.max(0, Math.min(1, b));
      self.setValue({
        hsb: [self.value.hue, s, b]
      });
    }
    function handleTouchStart(e) {
      if (isMoved || isTouched) return;
      touchStartX = e.type === "touchstart" ? e.targetTouches[0].pageX : e.pageX;
      touchCurrentX = touchStartX;
      touchStartY = e.type === "touchstart" ? e.targetTouches[0].pageY : e.pageY;
      touchCurrentY = touchStartY;
      const $targetEl = dom7_default(e.target);
      wheelHandleIsTouched = $targetEl.closest(".color-picker-wheel-handle").length > 0;
      wheelIsTouched = $targetEl.closest("circle").length > 0;
      specterHandleIsTouched = $targetEl.closest(".color-picker-sb-spectrum-handle").length > 0;
      if (!specterHandleIsTouched) {
        specterIsTouched = $targetEl.closest(".color-picker-sb-spectrum").length > 0;
      }
      if (wheelIsTouched) {
        wheelRect = $el.find(".color-picker-wheel")[0].getBoundingClientRect();
        setHueFromWheelCoords(touchStartX, touchStartY);
      }
      if (specterIsTouched) {
        specterRect = $el.find(".color-picker-sb-spectrum")[0].getBoundingClientRect();
        setSBFromSpecterCoords(touchStartX, touchStartY);
      }
      if (specterHandleIsTouched || specterIsTouched) {
        $el.find(".color-picker-sb-spectrum-handle").addClass("color-picker-sb-spectrum-handle-pressed");
      }
    }
    function handleTouchMove(e) {
      if (!(wheelIsTouched || wheelHandleIsTouched) && !(specterIsTouched || specterHandleIsTouched)) return;
      touchCurrentX = e.type === "touchmove" ? e.targetTouches[0].pageX : e.pageX;
      touchCurrentY = e.type === "touchmove" ? e.targetTouches[0].pageY : e.pageY;
      e.preventDefault();
      if (!isMoved) {
        isMoved = true;
        if (wheelHandleIsTouched) {
          wheelRect = $el.find(".color-picker-wheel")[0].getBoundingClientRect();
        }
        if (specterHandleIsTouched) {
          specterRect = $el.find(".color-picker-sb-spectrum")[0].getBoundingClientRect();
        }
      }
      if (wheelIsTouched || wheelHandleIsTouched) {
        setHueFromWheelCoords(touchCurrentX, touchCurrentY);
      }
      if (specterIsTouched || specterHandleIsTouched) {
        setSBFromSpecterCoords(touchCurrentX, touchCurrentY);
      }
    }
    function handleTouchEnd() {
      isMoved = false;
      if (specterIsTouched || specterHandleIsTouched) {
        $el.find(".color-picker-sb-spectrum-handle").removeClass("color-picker-sb-spectrum-handle-pressed");
      }
      wheelIsTouched = false;
      wheelHandleIsTouched = false;
      specterIsTouched = false;
      specterHandleIsTouched = false;
    }
    function handleResize() {
      self.modules.wheel.update(self);
    }
    const passiveListener = app.touchEvents.start === "touchstart" && getSupport().passiveListener ? {
      passive: true,
      capture: false
    } : false;
    self.$el.on(app.touchEvents.start, handleTouchStart, passiveListener);
    app.on("touchmove:active", handleTouchMove);
    app.on("touchend:passive", handleTouchEnd);
    app.on("resize", handleResize);
    self.destroyWheelEvents = function destroyWheelEvents() {
      self.$el.off(app.touchEvents.start, handleTouchStart, passiveListener);
      app.off("touchmove:active", handleTouchMove);
      app.off("touchend:passive", handleTouchEnd);
      app.off("resize", handleResize);
    };
  },
  update(self) {
    const {
      value
    } = self;
    const {
      hsl,
      hsb
    } = value;
    const specterWidth = self.$el.find(".color-picker-sb-spectrum")[0].offsetWidth;
    const specterHeight = self.$el.find(".color-picker-sb-spectrum")[0].offsetHeight;
    const wheelSize = self.$el.find(".color-picker-wheel")[0].offsetWidth;
    const wheelHalfSize = wheelSize / 2;
    const angleRad = value.hue * Math.PI / 180;
    const handleSize = wheelSize / 6;
    const handleHalfSize = handleSize / 2;
    const tX = wheelHalfSize - Math.sin(angleRad) * (wheelHalfSize - handleHalfSize) - handleHalfSize;
    const tY = wheelHalfSize - Math.cos(angleRad) * (wheelHalfSize - handleHalfSize) - handleHalfSize;
    self.$el.find(".color-picker-wheel-handle").css("background-color", `hsl(${hsl[0]}, 100%, 50%)`).transform(`translate(${tX}px, ${tY}px)`);
    self.$el.find(".color-picker-sb-spectrum").css("background-color", `hsl(${hsl[0]}, 100%, 50%)`);
    self.$el.find(".color-picker-sb-spectrum-handle").css("background-color", `hsl(${hsl[0]}, ${hsl[1] * 100}%, ${hsl[2] * 100}%)`).transform(`translate(${specterWidth * hsb[1]}px, ${specterHeight * (1 - hsb[2])}px)`);
  },
  destroy(self) {
    if (self.destroyWheelEvents) self.destroyWheelEvents();
    delete self.destroyWheelEvents;
  }
};

// node_modules/framework7/components/color-picker/color-picker-class.js
var ColorPicker = class extends class_default {
  constructor(app, params) {
    if (params === void 0) {
      params = {};
    }
    super(params, [app]);
    const self = this;
    self.params = extend({}, app.params.colorPicker, params);
    let $containerEl;
    if (self.params.containerEl) {
      $containerEl = dom7_default(self.params.containerEl);
      if ($containerEl.length === 0) return self;
    }
    let $inputEl;
    if (self.params.inputEl) {
      $inputEl = dom7_default(self.params.inputEl);
    }
    let $targetEl;
    if (self.params.targetEl) {
      $targetEl = dom7_default(self.params.targetEl);
    }
    extend(self, {
      app,
      $containerEl,
      containerEl: $containerEl && $containerEl[0],
      inline: $containerEl && $containerEl.length > 0,
      $inputEl,
      inputEl: $inputEl && $inputEl[0],
      $targetEl,
      targetEl: $targetEl && $targetEl[0],
      initialized: false,
      opened: false,
      url: self.params.url,
      modules: {
        "alpha-slider": alpha_slider_default,
        "current-color": current_color_default,
        hex: hex_default,
        // eslint-disable-line
        "hsb-sliders": hsb_sliders_default,
        "hue-slider": hue_slider_default,
        "brightness-slider": brightness_slider_default,
        palette: palette_default,
        // eslint-disable-line
        "initial-current-colors": initial_current_colors_default,
        "rgb-bars": rgb_bars_default,
        "rgb-sliders": rgb_sliders_default,
        "sb-spectrum": sb_spectrum_default,
        "hs-spectrum": hs_spectrum_default,
        wheel: wheel_default
        // eslint-disable-line
      }
    });
    function onInputClick() {
      self.open();
    }
    function onInputFocus(e) {
      e.preventDefault();
    }
    function onTargetClick() {
      self.open();
    }
    function onHtmlClick(e) {
      if (self.destroyed || !self.params) return;
      if (self.params.openIn === "page") return;
      const $clickTargetEl = dom7_default(e.target);
      if (!self.opened || self.closing) return;
      if ($clickTargetEl.closest('[class*="backdrop"]').length) return;
      if ($clickTargetEl.closest(".color-picker-popup, .color-picker-popover").length) return;
      if ($inputEl && $inputEl.length > 0) {
        if ($clickTargetEl[0] !== $inputEl[0] && $clickTargetEl.closest(".sheet-modal").length === 0) {
          self.close();
        }
      } else if (dom7_default(e.target).closest(".sheet-modal").length === 0) {
        self.close();
      }
    }
    extend(self, {
      attachInputEvents() {
        self.$inputEl.on("click", onInputClick);
        if (self.params.inputReadOnly) {
          self.$inputEl.on("focus mousedown", onInputFocus);
          if (self.$inputEl[0]) {
            self.$inputEl[0].f7ValidateReadonly = true;
          }
        }
      },
      detachInputEvents() {
        self.$inputEl.off("click", onInputClick);
        if (self.params.inputReadOnly) {
          self.$inputEl.off("focus mousedown", onInputFocus);
          if (self.$inputEl[0]) {
            delete self.$inputEl[0].f7ValidateReadonly;
          }
        }
      },
      attachTargetEvents() {
        self.$targetEl.on("click", onTargetClick);
      },
      detachTargetEvents() {
        self.$targetEl.off("click", onTargetClick);
      },
      attachHtmlEvents() {
        app.on("click", onHtmlClick);
      },
      detachHtmlEvents() {
        app.off("click", onHtmlClick);
      }
    });
    self.init();
    return self;
  }
  get view() {
    const {
      $inputEl,
      $targetEl,
      app,
      params
    } = this;
    let view;
    if (params.view) {
      view = params.view;
    } else {
      if ($inputEl) {
        view = $inputEl.parents(".view").length && $inputEl.parents(".view")[0].f7View;
      }
      if (!view && $targetEl) {
        view = $targetEl.parents(".view").length && $targetEl.parents(".view")[0].f7View;
      }
    }
    if (!view) view = app.views.main;
    return view;
  }
  attachEvents() {
    const self = this;
    self.centerModules = self.centerModules.bind(self);
    if (self.params.centerModules) {
      self.app.on("resize", self.centerModules);
    }
  }
  detachEvents() {
    const self = this;
    if (self.params.centerModules) {
      self.app.off("resize", self.centerModules);
    }
  }
  centerModules() {
    const self = this;
    if (!self.opened || !self.$el || self.inline) return;
    const $pageContentEl = self.$el.find(".page-content");
    if (!$pageContentEl.length) return;
    const {
      scrollHeight,
      offsetHeight
    } = $pageContentEl[0];
    if (scrollHeight <= offsetHeight) {
      $pageContentEl.addClass("justify-content-center");
    } else {
      $pageContentEl.removeClass("justify-content-center");
    }
  }
  initInput() {
    const self = this;
    if (!self.$inputEl) return;
    if (self.params.inputReadOnly) self.$inputEl.prop("readOnly", true);
  }
  getModalType() {
    const self = this;
    const {
      app,
      modal,
      params
    } = self;
    const {
      openIn,
      openInPhone
    } = params;
    const device = getDevice();
    if (modal && modal.type) return modal.type;
    if (openIn !== "auto") return openIn;
    if (self.inline) return null;
    if (device.ios) {
      return device.ipad ? "popover" : openInPhone;
    }
    if (app.width >= 768) {
      return "popover";
    }
    return openInPhone;
  }
  formatValue() {
    const self = this;
    const {
      value
    } = self;
    if (self.params.formatValue) {
      return self.params.formatValue.call(self, value);
    }
    return value.hex;
  }
  // eslint-disable-next-line
  normalizeHsValues(arr) {
    return [Math.floor(arr[0] * 10) / 10, Math.floor(arr[1] * 1e3) / 1e3, Math.floor(arr[2] * 1e3) / 1e3];
  }
  setValue(value, updateModules) {
    if (value === void 0) {
      value = {};
    }
    if (updateModules === void 0) {
      updateModules = true;
    }
    const self = this;
    if (typeof value === "undefined") return;
    let {
      hex,
      rgb,
      hsl,
      hsb,
      alpha = 1,
      hue,
      rgba,
      hsla
    } = self.value || {};
    const needChangeEvent = self.value || !self.value && !self.params.value;
    let valueChanged;
    Object.keys(value).forEach((k) => {
      if (!self.value || typeof self.value[k] === "undefined") {
        valueChanged = true;
        return;
      }
      const v = value[k];
      if (Array.isArray(v)) {
        v.forEach((subV, subIndex) => {
          if (subV !== self.value[k][subIndex]) {
            valueChanged = true;
          }
        });
      } else if (v !== self.value[k]) {
        valueChanged = true;
      }
    });
    if (!valueChanged) return;
    if (value.rgb || value.rgba) {
      const [r, g, b, a = alpha] = value.rgb || value.rgba;
      rgb = [r, g, b];
      hex = colorRgbToHex(...rgb);
      hsl = colorRgbToHsl(...rgb);
      hsb = colorHslToHsb(...hsl);
      hsl = self.normalizeHsValues(hsl);
      hsb = self.normalizeHsValues(hsb);
      hue = hsb[0];
      alpha = a;
      rgba = [rgb[0], rgb[1], rgb[2], a];
      hsla = [hsl[0], hsl[1], hsl[2], a];
    }
    if (value.hsl || value.hsla) {
      const [h, s, l, a = alpha] = value.hsl || value.hsla;
      hsl = [h, s, l];
      rgb = colorHslToRgb(...hsl);
      hex = colorRgbToHex(...rgb);
      hsb = colorHslToHsb(...hsl);
      hsl = self.normalizeHsValues(hsl);
      hsb = self.normalizeHsValues(hsb);
      hue = hsb[0];
      alpha = a;
      rgba = [rgb[0], rgb[1], rgb[2], a];
      hsla = [hsl[0], hsl[1], hsl[2], a];
    }
    if (value.hsb) {
      const [h, s, b, a = alpha] = value.hsb;
      hsb = [h, s, b];
      hsl = colorHsbToHsl(...hsb);
      rgb = colorHslToRgb(...hsl);
      hex = colorRgbToHex(...rgb);
      hsl = self.normalizeHsValues(hsl);
      hsb = self.normalizeHsValues(hsb);
      hue = hsb[0];
      alpha = a;
      rgba = [rgb[0], rgb[1], rgb[2], a];
      hsla = [hsl[0], hsl[1], hsl[2], a];
    }
    if (value.hex) {
      rgb = colorHexToRgb(value.hex);
      hex = colorRgbToHex(...rgb);
      hsl = colorRgbToHsl(...rgb);
      hsb = colorHslToHsb(...hsl);
      hsl = self.normalizeHsValues(hsl);
      hsb = self.normalizeHsValues(hsb);
      hue = hsb[0];
      rgba = [rgb[0], rgb[1], rgb[2], alpha];
      hsla = [hsl[0], hsl[1], hsl[2], alpha];
    }
    if (typeof value.alpha !== "undefined") {
      alpha = value.alpha;
      if (typeof rgb !== "undefined") {
        rgba = [rgb[0], rgb[1], rgb[2], alpha];
      }
      if (typeof hsl !== "undefined") {
        hsla = [hsl[0], hsl[1], hsl[2], alpha];
      }
    }
    if (typeof value.hue !== "undefined") {
      const [h, s, l] = hsl;
      hsl = [value.hue, s, l];
      hsb = colorHslToHsb(...hsl);
      rgb = colorHslToRgb(...hsl);
      hex = colorRgbToHex(...rgb);
      hsl = self.normalizeHsValues(hsl);
      hsb = self.normalizeHsValues(hsb);
      hue = hsb[0];
      rgba = [rgb[0], rgb[1], rgb[2], alpha];
      hsla = [hsl[0], hsl[1], hsl[2], alpha];
    }
    self.value = {
      hex,
      alpha,
      hue,
      rgb,
      hsl,
      hsb,
      rgba,
      hsla
    };
    if (!self.initialValue) self.initialValue = extend({}, self.value);
    self.updateValue(needChangeEvent);
    if (self.opened && updateModules) {
      self.updateModules();
    }
  }
  getValue() {
    const self = this;
    return self.value;
  }
  updateValue(fireEvents) {
    if (fireEvents === void 0) {
      fireEvents = true;
    }
    const self = this;
    const {
      $inputEl,
      value,
      $targetEl
    } = self;
    if ($targetEl && self.params.targetElSetBackgroundColor) {
      const {
        rgba
      } = value;
      $targetEl.css("background-color", `rgba(${rgba.join(", ")})`);
    }
    if (fireEvents) {
      self.emit("local::change colorPickerChange", self, value);
    }
    if ($inputEl && $inputEl.length) {
      const inputValue = self.formatValue(value);
      if ($inputEl && $inputEl.length) {
        $inputEl.val(inputValue);
        if (fireEvents) {
          $inputEl.trigger("change");
        }
      }
    }
  }
  updateModules() {
    const self = this;
    const {
      modules: modules2
    } = self;
    self.params.modules.forEach((m) => {
      if (typeof m === "string" && modules2[m] && modules2[m].update) {
        modules2[m].update(self);
      } else if (m && m.update) {
        m.update(self);
      }
    });
  }
  update() {
    const self = this;
    self.updateModules();
  }
  renderPicker() {
    const self = this;
    const {
      params,
      modules: modules2
    } = self;
    let html = "";
    params.modules.forEach((m) => {
      if (typeof m === "string" && modules2[m] && modules2[m].render) {
        html += modules2[m].render(self);
      } else if (m && m.render) {
        html += m.render(self);
      }
    });
    return html;
  }
  renderNavbar() {
    const self = this;
    if (self.params.renderNavbar) {
      return self.params.renderNavbar.call(self, self);
    }
    const {
      openIn,
      navbarTitleText,
      navbarBackLinkText,
      navbarCloseText
    } = self.params;
    return jsx_default("div", {
      class: "navbar"
    }, jsx_default("div", {
      class: "navbar-bg"
    }), jsx_default("div", {
      class: "navbar-inner sliding"
    }, openIn === "page" && jsx_default("div", {
      class: "left"
    }, jsx_default("a", {
      class: "link back"
    }, jsx_default("i", {
      class: "icon icon-back"
    }), jsx_default("span", {
      class: "if-not-md"
    }, navbarBackLinkText))), jsx_default("div", {
      class: "title"
    }, navbarTitleText), openIn !== "page" && jsx_default("div", {
      class: "right"
    }, jsx_default("a", {
      class: "link popup-close",
      "data-popup": ".color-picker-popup"
    }, navbarCloseText))));
  }
  renderToolbar() {
    const self = this;
    if (self.params.renderToolbar) {
      return self.params.renderToolbar.call(self, self);
    }
    return jsx_default("div", {
      class: "toolbar toolbar-top"
    }, jsx_default("div", {
      class: "toolbar-inner"
    }, jsx_default("div", {
      class: "left"
    }), jsx_default("div", {
      class: "right"
    }, jsx_default("a", {
      class: "link sheet-close popover-close",
      "data-sheet": ".color-picker-sheet-modal",
      "data-popover": ".color-picker-popover"
    }, self.params.toolbarCloseText))));
  }
  renderInline() {
    const self = this;
    const {
      cssClass,
      groupedModules
    } = self.params;
    return jsx_default("div", {
      class: `color-picker color-picker-inline ${groupedModules ? "color-picker-grouped-modules" : ""} ${cssClass || ""}`
    }, self.renderPicker());
  }
  renderSheet() {
    const self = this;
    const {
      cssClass,
      toolbarSheet,
      groupedModules
    } = self.params;
    return jsx_default("div", {
      class: `sheet-modal color-picker color-picker-sheet-modal ${groupedModules ? "color-picker-grouped-modules" : ""} ${cssClass || ""}`
    }, toolbarSheet && self.renderToolbar(), jsx_default("div", {
      class: "sheet-modal-inner"
    }, jsx_default("div", {
      class: "page-content"
    }, self.renderPicker())));
  }
  renderPopover() {
    const self = this;
    const {
      cssClass,
      toolbarPopover,
      groupedModules
    } = self.params;
    return jsx_default("div", {
      class: `popover color-picker-popover ${cssClass || ""}`
    }, jsx_default("div", {
      class: "popover-inner"
    }, jsx_default("div", {
      class: `color-picker ${groupedModules ? "color-picker-grouped-modules" : ""}`
    }, toolbarPopover && self.renderToolbar(), jsx_default("div", {
      class: "page-content"
    }, self.renderPicker()))));
  }
  renderPopup() {
    const self = this;
    const {
      cssClass,
      navbarPopup,
      groupedModules
    } = self.params;
    return jsx_default("div", {
      class: `popup color-picker-popup ${cssClass || ""}`
    }, jsx_default("div", {
      class: "page"
    }, navbarPopup && self.renderNavbar(), jsx_default("div", {
      class: `color-picker ${groupedModules ? "color-picker-grouped-modules" : ""}`
    }, jsx_default("div", {
      class: "page-content"
    }, self.renderPicker()))));
  }
  renderPage() {
    const self = this;
    const {
      cssClass,
      groupedModules
    } = self.params;
    return jsx_default("div", {
      class: `page color-picker-page ${cssClass || ""}`,
      "data-name": "color-picker-page"
    }, self.renderNavbar(), jsx_default("div", {
      class: `color-picker ${groupedModules ? "color-picker-grouped-modules" : ""}`
    }, jsx_default("div", {
      class: "page-content"
    }, self.renderPicker())));
  }
  // eslint-disable-next-line
  render() {
    const self = this;
    const {
      params
    } = self;
    if (params.render) return params.render.call(self);
    if (self.inline) return self.renderInline();
    if (params.openIn === "page") {
      return self.renderPage();
    }
    const modalType = self.getModalType();
    if (modalType === "popover") return self.renderPopover();
    if (modalType === "sheet") return self.renderSheet();
    if (modalType === "popup") return self.renderPopup();
  }
  onOpen() {
    const self = this;
    const {
      initialized,
      $el,
      app,
      $inputEl,
      inline,
      value,
      params,
      modules: modules2
    } = self;
    self.closing = false;
    self.opened = true;
    self.opening = true;
    self.attachEvents();
    params.modules.forEach((m) => {
      if (typeof m === "string" && modules2[m] && modules2[m].init) {
        modules2[m].init(self);
      } else if (m && m.init) {
        m.init(self);
      }
    });
    const updateValue = !value && params.value;
    if (!initialized) {
      if (value) self.setValue(value);
      else if (params.value) {
        self.setValue(params.value, false);
      } else if (!params.value) {
        self.setValue({
          hex: "#ff0000"
        }, false);
      }
    } else if (value) {
      self.initialValue = extend({}, value);
      self.setValue(value, false);
    }
    if (updateValue) self.updateValue();
    self.updateModules();
    if (params.centerModules) {
      self.centerModules();
    }
    if (!inline && $inputEl && $inputEl.length && app.theme === "md") {
      $inputEl.trigger("focus");
    }
    self.initialized = true;
    if ($el) {
      $el.trigger("colorpicker:open");
    }
    if ($inputEl) {
      $inputEl.trigger("colorpicker:open");
    }
    self.emit("local::open colorPickerOpen", self);
  }
  onOpened() {
    const self = this;
    self.opening = false;
    if (self.$el) {
      self.$el.trigger("colorpicker:opened");
    }
    if (self.$inputEl) {
      self.$inputEl.trigger("colorpicker:opened");
    }
    self.emit("local::opened colorPickerOpened", self);
  }
  onClose() {
    const self = this;
    const {
      app,
      params,
      modules: modules2
    } = self;
    self.opening = false;
    self.closing = true;
    self.detachEvents();
    if (self.$inputEl) {
      if (app.theme === "md") {
        self.$inputEl.trigger("blur");
      } else {
        const validate = self.$inputEl.attr("validate");
        const required = self.$inputEl.attr("required");
        if (validate && required) {
          app.input.validate(self.$inputEl);
        }
      }
    }
    params.modules.forEach((m) => {
      if (typeof m === "string" && modules2[m] && modules2[m].destroy) {
        modules2[m].destroy(self);
      } else if (m && m.destroy) {
        m.destroy(self);
      }
    });
    if (self.$el) {
      self.$el.trigger("colorpicker:close");
    }
    if (self.$inputEl) {
      self.$inputEl.trigger("colorpicker:close");
    }
    self.emit("local::close colorPickerClose", self);
  }
  onClosed() {
    const self = this;
    self.opened = false;
    self.closing = false;
    if (!self.inline) {
      nextTick(() => {
        if (self.modal && self.modal.el && self.modal.destroy) {
          if (!self.params.routableModals) {
            self.modal.destroy();
          }
        }
        delete self.modal;
      });
    }
    if (self.$el) {
      self.$el.trigger("colorpicker:closed");
    }
    if (self.$inputEl) {
      self.$inputEl.trigger("colorpicker:closed");
    }
    self.emit("local::closed colorPickerClosed", self);
  }
  open() {
    const self = this;
    const {
      app,
      opened,
      inline,
      $inputEl,
      $targetEl,
      params
    } = self;
    if (opened) return;
    if (inline) {
      self.$el = dom7_default(self.render());
      self.$el[0].f7ColorPicker = self;
      self.$containerEl.append(self.$el);
      self.onOpen();
      self.onOpened();
      return;
    }
    const colorPickerContent = self.render();
    if (params.openIn === "page") {
      self.view.router.navigate({
        url: self.url,
        route: {
          content: colorPickerContent,
          path: self.url,
          on: {
            pageBeforeIn(e, page) {
              self.$el = page.$el.find(".color-picker");
              self.$el[0].f7ColorPicker = self;
              self.onOpen();
            },
            pageAfterIn() {
              self.onOpened();
            },
            pageBeforeOut() {
              self.onClose();
            },
            pageAfterOut() {
              self.onClosed();
              if (self.$el && self.$el[0]) {
                self.$el[0].f7ColorPicker = null;
                delete self.$el[0].f7ColorPicker;
              }
            }
          }
        }
      });
    } else {
      const modalType = self.getModalType();
      let backdrop = params.backdrop;
      if (backdrop === null || typeof backdrop === "undefined") {
        if (modalType === "popover" && app.params.popover.backdrop !== false) backdrop = true;
        if (modalType === "popup") backdrop = true;
      }
      const modalParams = {
        targetEl: $targetEl || $inputEl,
        scrollToEl: params.scrollToInput ? $targetEl || $inputEl : void 0,
        content: colorPickerContent,
        backdrop,
        closeByBackdropClick: params.closeByBackdropClick,
        on: {
          open() {
            const modal = this;
            self.modal = modal;
            self.$el = modalType === "popover" || modalType === "popup" ? modal.$el.find(".color-picker") : modal.$el;
            self.$el[0].f7ColorPicker = self;
            self.onOpen();
          },
          opened() {
            self.onOpened();
          },
          close() {
            self.onClose();
          },
          closed() {
            self.onClosed();
            if (self.$el && self.$el[0]) {
              self.$el[0].f7ColorPicker = null;
              delete self.$el[0].f7ColorPicker;
            }
          }
        }
      };
      if (modalType === "popup") {
        modalParams.push = params.popupPush;
        modalParams.swipeToClose = params.popupSwipeToClose;
      }
      if (modalType === "sheet") {
        modalParams.push = params.sheetPush;
        modalParams.swipeToClose = params.sheetSwipeToClose;
      }
      if (params.routableModals && self.view) {
        self.view.router.navigate({
          url: self.url,
          route: {
            path: self.url,
            [modalType]: modalParams
          }
        });
      } else {
        self.modal = app[modalType].create(modalParams);
        self.modal.open();
      }
    }
  }
  close() {
    const self = this;
    const {
      opened,
      inline
    } = self;
    if (!opened) return;
    if (inline) {
      self.onClose();
      self.onClosed();
      return;
    }
    if (self.params.routableModals && self.view || self.params.openIn === "page") {
      self.view.router.back();
    } else {
      self.modal.close();
    }
  }
  init() {
    const self = this;
    self.initInput();
    if (self.inline) {
      self.open();
      self.emit("local::init colorPickerInit", self);
      return;
    }
    if (!self.initialized && self.params.value) {
      self.setValue(self.params.value);
    }
    if (self.$inputEl) {
      self.attachInputEvents();
    }
    if (self.$targetEl) {
      self.attachTargetEvents();
    }
    if (self.params.closeByOutsideClick) {
      self.attachHtmlEvents();
    }
    self.emit("local::init colorPickerInit", self);
  }
  destroy() {
    const self = this;
    if (self.destroyed) return;
    const {
      $el
    } = self;
    self.emit("local::beforeDestroy colorPickerBeforeDestroy", self);
    if ($el) $el.trigger("colorpicker:beforedestroy");
    self.close();
    self.detachEvents();
    if (self.$inputEl) {
      self.detachInputEvents();
    }
    if (self.$targetEl) {
      self.detachTargetEvents();
    }
    if (self.params.closeByOutsideClick) {
      self.detachHtmlEvents();
    }
    if ($el && $el.length) delete self.$el[0].f7ColorPicker;
    deleteProps(self);
    self.destroyed = true;
  }
};
var color_picker_class_default = ColorPicker;

// node_modules/framework7/components/color-picker/color-picker.js
var color_picker_default = {
  name: "colorPicker",
  static: {
    ColorPicker: color_picker_class_default
  },
  create() {
    const app = this;
    app.colorPicker = ConstructorMethods({
      defaultSelector: ".color-picker",
      constructor: color_picker_class_default,
      app,
      domProp: "f7ColorPicker"
    });
    app.colorPicker.close = function close6(el) {
      if (el === void 0) {
        el = ".color-picker";
      }
      const $el = dom7_default(el);
      if ($el.length === 0) return;
      const colorPicker = $el[0].f7ColorPicker;
      if (!colorPicker || colorPicker && !colorPicker.opened) return;
      colorPicker.close();
    };
  },
  params: {
    colorPicker: {
      // Color picker settings
      value: null,
      modules: ["wheel"],
      palette: [["#FFEBEE", "#FFCDD2", "#EF9A9A", "#E57373", "#EF5350", "#F44336", "#E53935", "#D32F2F", "#C62828", "#B71C1C"], ["#F3E5F5", "#E1BEE7", "#CE93D8", "#BA68C8", "#AB47BC", "#9C27B0", "#8E24AA", "#7B1FA2", "#6A1B9A", "#4A148C"], ["#E8EAF6", "#C5CAE9", "#9FA8DA", "#7986CB", "#5C6BC0", "#3F51B5", "#3949AB", "#303F9F", "#283593", "#1A237E"], ["#E1F5FE", "#B3E5FC", "#81D4FA", "#4FC3F7", "#29B6F6", "#03A9F4", "#039BE5", "#0288D1", "#0277BD", "#01579B"], ["#E0F2F1", "#B2DFDB", "#80CBC4", "#4DB6AC", "#26A69A", "#009688", "#00897B", "#00796B", "#00695C", "#004D40"], ["#F1F8E9", "#DCEDC8", "#C5E1A5", "#AED581", "#9CCC65", "#8BC34A", "#7CB342", "#689F38", "#558B2F", "#33691E"], ["#FFFDE7", "#FFF9C4", "#FFF59D", "#FFF176", "#FFEE58", "#FFEB3B", "#FDD835", "#FBC02D", "#F9A825", "#F57F17"], ["#FFF3E0", "#FFE0B2", "#FFCC80", "#FFB74D", "#FFA726", "#FF9800", "#FB8C00", "#F57C00", "#EF6C00", "#E65100"]],
      groupedModules: false,
      centerModules: true,
      sliderLabel: false,
      sliderValue: false,
      sliderValueEdiable: false,
      barLabel: false,
      barValue: false,
      barValueEdiable: false,
      hexLabel: false,
      hexValueEditable: false,
      redLabelText: "R",
      greenLabelText: "G",
      blueLabelText: "B",
      hueLabelText: "H",
      saturationLabelText: "S",
      brightnessLabelText: "B",
      hexLabelText: "HEX",
      alphaLabelText: "A",
      // Common opener settings
      containerEl: null,
      openIn: "popover",
      // or 'popover' or 'sheet' or 'popup' or 'page' or 'auto'
      openInPhone: "popup",
      // or 'popover' or 'sheet' or 'popup' or 'page'
      popupPush: false,
      popupSwipeToClose: void 0,
      sheetPush: false,
      sheetSwipeToClose: void 0,
      formatValue: null,
      targetEl: null,
      targetElSetBackgroundColor: false,
      inputEl: null,
      inputReadOnly: true,
      closeByOutsideClick: true,
      scrollToInput: true,
      toolbarSheet: true,
      toolbarPopover: false,
      toolbarCloseText: "Done",
      navbarPopup: true,
      navbarCloseText: "Done",
      navbarTitleText: "Color",
      navbarBackLinkText: "Back",
      cssClass: null,
      routableModals: false,
      view: null,
      url: "color/",
      backdrop: null,
      closeByBackdropClick: true,
      // Render functions
      renderToolbar: null,
      renderNavbar: null,
      renderInline: null,
      renderPopover: null,
      renderSheet: null,
      renderPopup: null,
      render: null
    }
  }
};

// node_modules/framework7/components/treeview/treeview.js
var Treeview = {
  open(itemEl) {
    const app = this;
    const $itemEl = dom7_default(itemEl).eq(0);
    if (!$itemEl.length) return;
    $itemEl.addClass("treeview-item-opened");
    $itemEl.trigger("treeview:open");
    app.emit("treeviewOpen", $itemEl[0]);
    function done(cancel) {
      if (cancel) {
        $itemEl.removeClass("treeview-item-opened");
        $itemEl.trigger("treeview:close");
        app.emit("treeviewClose", $itemEl[0]);
      } else {
        $itemEl[0].f7TreeviewChildrenLoaded = true;
      }
      $itemEl.find(".treeview-toggle").removeClass("treeview-toggle-hidden");
      $itemEl.find(".treeview-preloader").remove();
    }
    if ($itemEl.hasClass("treeview-load-children") && !$itemEl[0].f7TreeviewChildrenLoaded) {
      const preloaders = {
        iosPreloaderContent,
        mdPreloaderContent
      };
      $itemEl.trigger("treeview:loadchildren", done);
      app.emit("treeviewLoadChildren", $itemEl[0], done);
      $itemEl.find(".treeview-toggle").addClass("treeview-toggle-hidden");
      $itemEl.find(".treeview-item-root").prepend(`<div class="preloader treeview-preloader">${preloaders[`${app.theme}PreloaderContent`]}</div>`);
    }
  },
  close(itemEl) {
    const app = this;
    const $itemEl = dom7_default(itemEl).eq(0);
    if (!$itemEl.length) return;
    $itemEl.removeClass("treeview-item-opened");
    $itemEl.trigger("treeview:close");
    app.emit("treeviewClose", $itemEl[0]);
  },
  toggle(itemEl) {
    const app = this;
    const $itemEl = dom7_default(itemEl).eq(0);
    if (!$itemEl.length) return;
    const wasOpened = $itemEl.hasClass("treeview-item-opened");
    app.treeview[wasOpened ? "close" : "open"]($itemEl);
  }
};
var treeview_default = {
  name: "treeview",
  create() {
    const app = this;
    bindMethods(app, {
      treeview: Treeview
    });
  },
  clicks: {
    ".treeview-toggle": function toggle3($clickedEl, clickedData, e) {
      const app = this;
      if ($clickedEl.parents(".treeview-item-toggle").length) return;
      const $treeviewItemEl = $clickedEl.parents(".treeview-item").eq(0);
      if (!$treeviewItemEl.length) return;
      e.preventF7Router = true;
      app.treeview.toggle($treeviewItemEl[0]);
    },
    ".treeview-item-toggle": function toggle4($clickedEl, clickedData, e) {
      const app = this;
      const $treeviewItemEl = $clickedEl.closest(".treeview-item").eq(0);
      if (!$treeviewItemEl.length) return;
      e.preventF7Router = true;
      app.treeview.toggle($treeviewItemEl[0]);
    }
  }
};

// node_modules/framework7/components/text-editor/text-editor-class.js
var textEditorButtonsMap = {
  // f7-icon, material-icon, command
  bold: ["bold", "format_bold", "bold"],
  italic: ["italic", "format_italic", "italic"],
  underline: ["underline", "format_underlined", "underline"],
  strikeThrough: ["strikethrough", "strikethrough_s", "strikeThrough"],
  orderedList: ["list_number", "format_list_numbered", "insertOrderedList"],
  unorderedList: ["list_bullet", "format_list_bulleted", "insertUnorderedList"],
  link: ["link", "link", "createLink"],
  image: ["photo", "image", "insertImage"],
  paragraph: ["paragraph", '<i class="icon">¶</i>', "formatBlock.P"],
  h1: ['<i class="icon">H<sub>1</sub></i>', '<i class="icon">H<sub>1</sub></i>', "formatBlock.H1"],
  h2: ['<i class="icon">H<sub>2</sub></i>', '<i class="icon">H<sub>2</sub></i>', "formatBlock.H2"],
  h3: ['<i class="icon">H<sub>3</sub></i>', '<i class="icon">H<sub>3</sub></i>', "formatBlock.H3"],
  alignLeft: ["text_alignleft", "format_align_left", "justifyLeft"],
  alignCenter: ["text_aligncenter", "format_align_center", "justifyCenter"],
  alignRight: ["text_alignright", "format_align_right", "justifyRight"],
  alignJustify: ["text_justify", "format_align_justify", "justifyFull"],
  subscript: ["textformat_subscript", '<i class="icon">A<sub>1</sub></i>', "subscript"],
  superscript: ["textformat_superscript", '<i class="icon">A<sup>1</sup></i>', "superscript"],
  indent: ["increase_indent", "format_indent_increase", "indent"],
  outdent: ["decrease_indent", "format_indent_decrease", "outdent"]
};
var TextEditor = class extends class_default {
  constructor(app, params) {
    super(params, [app]);
    const self = this;
    const document2 = getDocument();
    const device = getDevice();
    const defaults2 = extend({}, app.params.textEditor);
    self.useModulesParams(defaults2);
    self.params = extend(defaults2, params);
    const el = self.params.el;
    if (!el) return self;
    const $el = dom7_default(el);
    if ($el.length === 0) return self;
    if ($el[0].f7TextEditor) return $el[0].f7TextEditor;
    let $contentEl = $el.children(".text-editor-content");
    if (!$contentEl.length) {
      $el.append('<div class="text-editor-content" contenteditable></div>');
      $contentEl = $el.children(".text-editor-content");
    }
    extend(self, {
      app,
      $el,
      el: $el[0],
      $contentEl,
      contentEl: $contentEl[0]
    });
    if ("value" in params) {
      self.value = self.params.value;
    }
    if (self.params.mode === "keyboard-toolbar") {
      if (!(device.cordova || device.capacitor) && !device.android) {
        self.params.mode = "popover";
      }
    }
    if (typeof self.params.buttons === "string") {
      try {
        self.params.buttons = JSON.parse(self.params.buttons);
      } catch (err) {
        throw new Error('Framework7: TextEditor: wrong "buttons" parameter format');
      }
    }
    $el[0].f7TextEditor = self;
    self.onButtonClick = self.onButtonClick.bind(self);
    self.onFocus = self.onFocus.bind(self);
    self.onBlur = self.onBlur.bind(self);
    self.onInput = self.onInput.bind(self);
    self.onPaste = self.onPaste.bind(self);
    self.onSelectionChange = self.onSelectionChange.bind(self);
    self.closeKeyboardToolbar = self.closeKeyboardToolbar.bind(self);
    self.attachEvents = function attachEvents2() {
      if (self.params.mode === "toolbar") {
        self.$el.find(".text-editor-toolbar").on("click", "button", self.onButtonClick);
      }
      if (self.params.mode === "keyboard-toolbar") {
        self.$keyboardToolbarEl.on("click", "button", self.onButtonClick);
        self.$el.parents(".page").on("page:beforeout", self.closeKeyboardToolbar);
      }
      if (self.params.mode === "popover" && self.popover) {
        self.popover.$el.on("click", "button", self.onButtonClick);
      }
      self.$contentEl.on("paste", self.onPaste);
      self.$contentEl.on("focus", self.onFocus);
      self.$contentEl.on("blur", self.onBlur);
      self.$contentEl.on("input", self.onInput, true);
      dom7_default(document2).on("selectionchange", self.onSelectionChange);
    };
    self.detachEvents = function detachEvents2() {
      if (self.params.mode === "toolbar") {
        self.$el.find(".text-editor-toolbar").off("click", "button", self.onButtonClick);
      }
      if (self.params.mode === "keyboard-toolbar") {
        self.$keyboardToolbarEl.off("click", "button", self.onButtonClick);
        self.$el.parents(".page").off("page:beforeout", self.closeKeyboardToolbar);
      }
      if (self.params.mode === "popover" && self.popover) {
        self.popover.$el.off("click", "button", self.onButtonClick);
      }
      self.$contentEl.off("paste", self.onPaste);
      self.$contentEl.off("focus", self.onFocus);
      self.$contentEl.off("blur", self.onBlur);
      self.$contentEl.off("input", self.onInput, true);
      dom7_default(document2).off("selectionchange", self.onSelectionChange);
    };
    self.useModules();
    self.init();
    return self;
  }
  setValue(newValue) {
    const self = this;
    const currentValue = self.value;
    if (currentValue === newValue) return self;
    self.value = newValue;
    self.$contentEl.html(newValue);
    self.$el.trigger("texteditor:change", self.value);
    self.emit("local::change textEditorChange", self, self.value);
    return self;
  }
  getValue() {
    const self = this;
    return self.value;
  }
  clearValue() {
    const self = this;
    self.setValue("");
    if (self.params.placeholder && !self.$contentEl.html()) {
      self.insertPlaceholder();
    }
    return self;
  }
  createLink() {
    const self = this;
    const window2 = getWindow();
    const document2 = getDocument();
    const currentSelection = window2.getSelection();
    const selectedNodes = [];
    let $selectedLinks;
    if (currentSelection && currentSelection.anchorNode && dom7_default(currentSelection.anchorNode).parents(self.$el).length) {
      let anchorNode = currentSelection.anchorNode;
      while (anchorNode) {
        selectedNodes.push(anchorNode);
        if (!anchorNode.nextSibling || anchorNode === currentSelection.focusNode) {
          anchorNode = null;
        }
        if (anchorNode) {
          anchorNode = anchorNode.nextSibling;
        }
      }
      const selectedNodesLinks = [];
      const $selectedNodes = dom7_default(selectedNodes);
      for (let i = 0; i < $selectedNodes.length; i += 1) {
        const childNodes = $selectedNodes[i].children;
        if (childNodes) {
          for (let j = 0; j < childNodes.length; j += 1) {
            if (dom7_default(childNodes[j]).is("a")) {
              selectedNodesLinks.push(childNodes[j]);
            }
          }
        }
      }
      $selectedLinks = $selectedNodes.closest("a").add(dom7_default(selectedNodesLinks));
    }
    if ($selectedLinks && $selectedLinks.length) {
      $selectedLinks.each((linkNode) => {
        const selection = window2.getSelection();
        const range = document2.createRange();
        range.selectNodeContents(linkNode);
        selection.removeAllRanges();
        selection.addRange(range);
        document2.execCommand("unlink", false);
        selection.removeAllRanges();
      });
      return self;
    }
    const currentRange = self.getSelectionRange();
    if (!currentRange) return self;
    const dialog = self.app.dialog.prompt("", self.params.linkUrlText, (link) => {
      if (link && link.trim().length) {
        self.setSelectionRange(currentRange);
        document2.execCommand("createLink", false, link.trim());
        self.$el.trigger("texteditor:insertlink", {
          url: link.trim()
        });
        self.emit("local:insertLink textEditorInsertLink", self, link.trim());
      }
    });
    dialog.$el.find("input").focus();
    return self;
  }
  insertImage() {
    const self = this;
    const document2 = getDocument();
    const currentRange = self.getSelectionRange();
    if (!currentRange) return self;
    const dialog = self.app.dialog.prompt("", self.params.imageUrlText, (imageUrl) => {
      if (imageUrl && imageUrl.trim().length) {
        self.setSelectionRange(currentRange);
        document2.execCommand("insertImage", false, imageUrl.trim());
        self.$el.trigger("texteditor:insertimage", {
          url: imageUrl.trim()
        });
        self.emit("local:insertImage textEditorInsertImage", self, imageUrl.trim());
      }
    });
    dialog.$el.find("input").focus();
    return self;
  }
  removePlaceholder() {
    const self = this;
    self.$contentEl.find(".text-editor-placeholder").remove();
  }
  insertPlaceholder() {
    const self = this;
    self.$contentEl.append(`<div class="text-editor-placeholder">${self.params.placeholder}</div>`);
  }
  onSelectionChange() {
    const self = this;
    const window2 = getWindow();
    const document2 = getDocument();
    if (self.params.mode === "toolbar") return;
    const selection = window2.getSelection();
    const selectionIsInContent = dom7_default(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;
    if (self.params.mode === "keyboard-toolbar") {
      if (!selectionIsInContent) {
        self.closeKeyboardToolbar();
      } else {
        self.openKeyboardToolbar();
      }
      return;
    }
    if (self.params.mode === "popover") {
      const selectionIsInPopover = dom7_default(selection.anchorNode).parents(self.popover.el).length || selection.anchorNode === self.popover.el;
      if (!selectionIsInContent && !selectionIsInPopover) {
        self.closePopover();
        return;
      }
      if (!selection.isCollapsed && selection.rangeCount) {
        const range = selection.getRangeAt(0);
        const rect = range.getBoundingClientRect();
        const rootEl = self.app.$el[0] || document2.body;
        self.openPopover(rect.x + (window2.scrollX || 0) - rootEl.offsetLeft, rect.y + (window2.scrollY || 0) - rootEl.offsetTop, rect.width, rect.height);
      } else if (selection.isCollapsed) {
        self.closePopover();
      }
    }
  }
  onPaste(e) {
    const self = this;
    const document2 = getDocument();
    if (self.params.clearFormattingOnPaste && e.clipboardData && e.clipboardData.getData) {
      const text = e.clipboardData.getData("text/plain");
      e.preventDefault();
      document2.execCommand("insertText", false, text);
    }
  }
  onInput() {
    const self = this;
    const value = self.$contentEl.html();
    self.value = value;
    self.$el.trigger("texteditor:input");
    self.emit("local:input textEditorInput", self, self.value);
    self.$el.trigger("texteditor:change", self.value);
    self.emit("local::change textEditorChange", self, self.value);
  }
  onFocus() {
    const self = this;
    self.removePlaceholder();
    self.$contentEl.focus();
    self.$el.trigger("texteditor:focus");
    self.emit("local::focus textEditorFocus", self);
  }
  onBlur() {
    const self = this;
    const window2 = getWindow();
    const document2 = getDocument();
    if (self.params.placeholder && self.$contentEl.html() === "") {
      self.insertPlaceholder();
    }
    if (self.params.mode === "popover") {
      const selection = window2.getSelection();
      const selectionIsInContent = dom7_default(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;
      const inPopover = document2.activeElement && self.popover && dom7_default(document2.activeElement).closest(self.popover.$el).length;
      if (!inPopover && !selectionIsInContent) {
        self.closePopover();
      }
    }
    if (self.params.mode === "keyboard-toolbar") {
      const selection = window2.getSelection();
      const selectionIsInContent = dom7_default(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;
      if (!selectionIsInContent) {
        self.closeKeyboardToolbar();
      }
    }
    self.$el.trigger("texteditor:blur");
    self.emit("local::blur textEditorBlur", self);
  }
  onButtonClick(e) {
    const self = this;
    const window2 = getWindow();
    const document2 = getDocument();
    const selection = window2.getSelection();
    const selectionIsInContent = dom7_default(selection.anchorNode).parents(self.contentEl).length || selection.anchorNode === self.contentEl;
    if (!selectionIsInContent) return;
    const $buttonEl = dom7_default(e.target).closest("button");
    if ($buttonEl.parents("form").length) {
      e.preventDefault();
    }
    const button = $buttonEl.attr("data-button");
    const buttonData = self.params.customButtons && self.params.customButtons[button];
    if (!button || !(textEditorButtonsMap[button] || buttonData)) return;
    $buttonEl.trigger("texteditor:buttonclick", button);
    self.emit("local::buttonClick textEditorButtonClick", self, button);
    if (buttonData) {
      if (buttonData.onClick) buttonData.onClick(self, $buttonEl[0]);
      return;
    }
    const command = textEditorButtonsMap[button][2];
    if (command === "createLink") {
      self.createLink();
      return;
    }
    if (command === "insertImage") {
      self.insertImage();
      return;
    }
    if (command.indexOf("formatBlock") === 0) {
      const tagName = command.split(".")[1];
      const $anchorNode = dom7_default(selection.anchorNode);
      if ($anchorNode.parents(tagName.toLowerCase()).length || $anchorNode.is(tagName)) {
        document2.execCommand("formatBlock", false, "div");
      } else {
        document2.execCommand("formatBlock", false, tagName);
      }
      return;
    }
    document2.execCommand(command, false);
  }
  // eslint-disable-next-line
  getSelectionRange() {
    const window2 = getWindow();
    const document2 = getDocument();
    if (window2.getSelection) {
      const sel = window2.getSelection();
      if (sel.getRangeAt && sel.rangeCount) {
        return sel.getRangeAt(0);
      }
    } else if (document2.selection && document2.selection.createRange) {
      return document2.selection.createRange();
    }
    return null;
  }
  // eslint-disable-next-line
  setSelectionRange(range) {
    const window2 = getWindow();
    const document2 = getDocument();
    if (range) {
      if (window2.getSelection) {
        const sel = window2.getSelection();
        sel.removeAllRanges();
        sel.addRange(range);
      } else if (document2.selection && range.select) {
        range.select();
      }
    }
  }
  renderButtons() {
    const self = this;
    let html = "";
    function renderButton(button) {
      const iconClass = self.app.theme === "md" ? "material-icons" : "f7-icons";
      if (self.params.customButtons && self.params.customButtons[button]) {
        const buttonData = self.params.customButtons[button];
        return `<button type="button" class="text-editor-button" data-button="${button}">${buttonData.content || ""}</button>`;
      }
      if (!textEditorButtonsMap[button]) return "";
      const iconContent = textEditorButtonsMap[button][self.app.theme === "md" ? 1 : 0];
      return `<button type="button" class="text-editor-button" data-button="${button}">${iconContent.indexOf("<") >= 0 ? iconContent : `<i class="${iconClass}">${iconContent}</i>`}</button>`.trim();
    }
    self.params.buttons.forEach((button, buttonIndex) => {
      if (Array.isArray(button)) {
        button.forEach((b) => {
          html += renderButton(b);
        });
        if (buttonIndex < self.params.buttons.length - 1 && self.params.dividers) {
          html += '<div class="text-editor-button-divider"></div>';
        }
      } else {
        html += renderButton(button);
      }
    });
    return html;
  }
  createToolbar() {
    const self = this;
    self.$el.prepend(`<div class="text-editor-toolbar">${self.renderButtons()}</div>`);
  }
  createKeyboardToolbar() {
    const self = this;
    self.$keyboardToolbarEl = dom7_default(`<div class="toolbar toolbar-bottom text-editor-keyboard-toolbar"><div class="toolbar-inner">${self.renderButtons()}</div></div>`);
  }
  createPopover() {
    const self = this;
    self.popover = self.app.popover.create({
      content: `
        <div class="popover dark text-editor-popover">
          <div class="popover-inner">${self.renderButtons()}</div>
        </div>
      `,
      closeByOutsideClick: false,
      backdrop: false
    });
  }
  openKeyboardToolbar() {
    const self = this;
    if (self.$keyboardToolbarEl.parent(self.app.$el).length) return;
    self.$el.trigger("texteditor:keyboardopen");
    self.emit("local::keyboardOpen textEditorKeyboardOpen", self);
    self.app.$el.append(self.$keyboardToolbarEl);
  }
  closeKeyboardToolbar() {
    const self = this;
    self.$keyboardToolbarEl.remove();
    self.$el.trigger("texteditor:keyboardclose");
    self.emit("local::keyboardClose textEditorKeyboardClose", self);
  }
  openPopover(targetX, targetY, targetWidth, targetHeight) {
    const self = this;
    if (!self.popover) return;
    Object.assign(self.popover.params, {
      targetX,
      targetY,
      targetWidth,
      targetHeight
    });
    clearTimeout(self.popoverTimeout);
    self.popoverTimeout = setTimeout(() => {
      if (!self.popover) return;
      if (self.popover.opened) {
        self.popover.resize();
      } else {
        self.$el.trigger("texteditor:popoveropen");
        self.emit("local::popoverOpen textEditorPopoverOpen", self);
        self.popover.open();
      }
    }, 400);
  }
  closePopover() {
    const self = this;
    clearTimeout(self.popoverTimeout);
    if (!self.popover || !self.popover.opened) return;
    self.popoverTimeout = setTimeout(() => {
      if (!self.popover) return;
      self.$el.trigger("texteditor:popoverclose");
      self.emit("local::popoverClose textEditorPopoverClose", self);
      self.popover.close();
    }, 400);
  }
  init() {
    const self = this;
    if (self.value) {
      self.$contentEl.html(self.value);
    } else {
      self.value = self.$contentEl.html();
    }
    if (self.params.placeholder && self.value === "") {
      self.insertPlaceholder();
    }
    if (self.params.mode === "toolbar") {
      self.createToolbar();
    } else if (self.params.mode === "popover") {
      self.createPopover();
    } else if (self.params.mode === "keyboard-toolbar") {
      self.createKeyboardToolbar();
    }
    self.attachEvents();
    self.$el.trigger("texteditor:init");
    self.emit("local::init textEditorInit", self);
    return self;
  }
  destroy() {
    let self = this;
    self.$el.trigger("texteditor:beforedestroy");
    self.emit("local::beforeDestroy textEditorBeforeDestroy", self);
    self.detachEvents();
    if (self.params.mode === "keyboard-toolbar" && self.$keyboardToolbarEl) {
      self.$keyboardToolbarEl.remove();
    }
    if (self.popover) {
      self.popover.close(false);
      self.popover.destroy();
    }
    delete self.$el[0].f7TextEditor;
    deleteProps(self);
    self = null;
  }
};
var text_editor_class_default = TextEditor;

// node_modules/framework7/components/text-editor/text-editor.js
var text_editor_default = {
  name: "textEditor",
  params: {
    textEditor: {
      el: null,
      mode: "toolbar",
      // or 'popover'
      value: void 0,
      // will use html content
      customButtons: null,
      buttons: [["bold", "italic", "underline", "strikeThrough"], ["orderedList", "unorderedList"], ["link", "image"], ["paragraph", "h1", "h2", "h3"], ["alignLeft", "alignCenter", "alignRight", "alignJustify"], ["subscript", "superscript"], ["indent", "outdent"]],
      dividers: true,
      imageUrlText: "Insert image URL",
      linkUrlText: "Insert link URL",
      placeholder: null,
      clearFormattingOnPaste: true
    }
  },
  create() {
    const app = this;
    app.textEditor = extend(ConstructorMethods({
      defaultSelector: ".text-editor",
      constructor: text_editor_class_default,
      app,
      domProp: "f7TextEditor"
    }));
  },
  static: {
    TextEditor: text_editor_class_default
  },
  on: {
    tabMounted(tabEl) {
      const app = this;
      dom7_default(tabEl).find(".text-editor-init").each((editorEl) => {
        const dataset = dom7_default(editorEl).dataset();
        app.textEditor.create(extend({
          el: editorEl
        }, dataset || {}));
      });
    },
    tabBeforeRemove(tabEl) {
      dom7_default(tabEl).find(".text-editor-init").each((editorEl) => {
        if (editorEl.f7TextEditor) editorEl.f7TextEditor.destroy();
      });
    },
    pageInit(page) {
      const app = this;
      page.$el.find(".text-editor-init").each((editorEl) => {
        const dataset = dom7_default(editorEl).dataset();
        app.textEditor.create(extend({
          el: editorEl
        }, dataset || {}));
      });
    },
    pageBeforeRemove(page) {
      page.$el.find(".text-editor-init").each((editorEl) => {
        if (editorEl.f7TextEditor) editorEl.f7TextEditor.destroy();
      });
    }
  },
  vnode: {
    "text-editor-init": {
      insert(vnode) {
        const app = this;
        const editorEl = vnode.elm;
        const dataset = dom7_default(editorEl).dataset();
        app.textEditor.create(extend({
          el: editorEl
        }, dataset || {}));
      },
      destroy(vnode) {
        const editorEl = vnode.elm;
        if (editorEl.f7TextEditor) editorEl.f7TextEditor.destroy();
      }
    }
  }
};

// node_modules/framework7/components/breadcrumbs/breadcrumbs.js
var Breadcrumbs = {};
var breadcrumbs_default = {
  name: "breadrumbs",
  create() {
    const app = this;
    bindMethods(app, {
      breadrumbs: Breadcrumbs
    });
  }
};

// node_modules/framework7/components/typography/typography.js
var typography_default = {
  name: "typography"
};

// node_modules/framework7/framework7-lite-bundle.esm.js
app_class_default.use([device_default, support_default, utils_default, resize_default, touch_default, clicks_default, router_default, history_default, service_worker_default, store_default, statusbar_default, view_default, navbar_default, toolbar_default, subnavbar_default, touch_ripple_default, modal_default, dialog_default, popup_default, login_screen_default, popover_default, actions_default, sheet_default, toast_default, preloader_default, progressbar_default, sortable_default, swipeout_default, accordion_default, contacts_list_default, virtual_list_default, list_index_default, timeline_default, tabs_default, panel_default, card_default, chip_default, form_default, input_default, checkbox_default, radio_default, toggle_default, range_default, stepper_default, smart_select_default, grid_default, calendar_default, picker_default, infinite_scroll_default, pull_to_refresh_default, data_table_default, fab_default, searchbar_default, messages_default, messagebar_default, swiper_default, photo_browser_default, notification_default, autocomplete_default, tooltip_default, skeleton_default, color_picker_default, treeview_default, text_editor_default, breadcrumbs_default, typography_default]);
var framework7_lite_bundle_esm_default = app_class_default;
export {
  dom7_default as Dom7,
  create_store_default as createStore,
  framework7_lite_bundle_esm_default as default,
  getDevice,
  getSupport,
  utils_exports as utils
};
//# sourceMappingURL=framework7_lite-bundle.js.map

Youez - 2016 - github.com/yon3zu
LinuXploit