import { C as Core } from "../.chunks/forms-BpbQYyEQ.es.js";
import DOM from "../utils/dom.js";
class Worker {
  /**
   * Глобальное выключение закрытия меню, используется при различных оверлеях
   */
  static noClose = !1;
  /**
   * Для взаимодействия с vue
   */
  static vueConnectors = /* @__PURE__ */ new Map();
  static options = {};
  /**
   * Вернуть объект компонента popup, привязанный к элементу
   */
  static getPopup(t) {
    return DOM.storage(t, "TopPopup");
  }
  static getElPopupOpener(t) {
    return t.closest("[data-top-popup]");
  }
  static getPopupFromOpener(t) {
    const o = Worker.getElPopupOpener(t);
    return o ? DOM.storage(o, "#TopPopup") : null;
  }
  /**
   * Вернуть все элементы с Popup
   */
  static getAll() {
    return DOM.querySelectorAllArray(document, ".top-popup-wrapper");
  }
  /**
   * Вернуть все элементы с открытыми Popup
   */
  static getAllVisible() {
    return DOM.querySelectorAllVisible(document, ".top-popup-wrapper");
  }
  /**
   * Открыть Popup от указанного elOpener
   * @param {HTMLElement} elOpener - элемент, который должен вызвать открытие Popup
   */
  static async openByOpener(t) {
    if (!(t instanceof HTMLElement)) return;
    const o = {};
    return o.popup = t.dataset.topPopup, o.id = t.dataset.topPopupId, !o.id && o.popup && (t.dataset.topPopupId = btoa(
      String.fromCharCode(...new TextEncoder().encode(o.popup))
    ), o.id = t.dataset.topPopupId), t.dataset.topPopupP && (o.p = parseInt(t.dataset.topPopupP)), t.dataset.topPopupPos && (o.p = parseInt(t.dataset.topPopupPos)), t.dataset.topPopupNotch && (o.notch = t.dataset.topPopupNotch === "true" || t.dataset.topPopupNotch === "1"), t.dataset.topPopupClass && (o.class = t.dataset.topPopupClass), t.dataset.topPopupPosBy && (o.posBy = t.dataset.topPopupPosBy), t.dataset.topPopupFront && (o.frontSelector = t.dataset.topPopupFront), t.dataset.topPopupInvertX && (o.invertX = t.dataset.topPopupInvertX === "true" || t.dataset.topPopupInvertX === "1"), t.dataset.topPopupOpenByHovertopPopupOpenByHover && (o.openByHover = t.dataset.topPopupOpenByHover === "true" || t.dataset.topPopupOpenByHover === "1"), t.dataset.topPopupUseOriginal && (o.useOriginal = t.dataset.topPopupUseOriginal === "true" || t.dataset.topPopupUseOriginal === "1"), await Worker.open(t, o);
  }
  /**
   * Создать и открыть Popup
   * @param elOpener - элемент, вызвавший открытие Popup
   * @param options - опции Popup
   */
  static async open(elOpener, options) {
    elOpener instanceof HTMLElement && (elOpener.dataset.topPopupOpened = "opened");
    const { TopLibPopup } = await import("../.chunks/popup-DpyyE2Cs.es.js");
    if (Core.$) {
      const $elOpener = Core.$(elOpener);
      if ($elOpener.data("aftershow")) {
        let afterShow = $elOpener.data("aftershow");
        typeof afterShow == "string" && (afterShow = eval(afterShow.replace(/\W/g, ""))), $elOpener.one("aftershow.top-menu-popup", afterShow);
      }
      if ($elOpener.data("afterclose")) {
        let afterclose = $elOpener.data("afterclose");
        typeof afterclose == "string" && (afterclose = eval(afterclose.replace(/\W/g, ""))), $elOpener.one("afterclose.top-menu-popup", afterclose);
      }
    }
    return options.isFullScreen = Core.state.isMobile, new TopLibPopup(elOpener, options);
  }
  static close(t, o = !1) {
    const e = Worker.getPopup(t);
    if (e) {
      e.close();
      const p = e.el.contains(document.activeElement);
      o && !p && setTimeout(() => {
        e.el.focus();
      });
    }
  }
  static recalcPosition(t) {
    const o = Worker.getPopup(t);
    o && o.elPopupBody instanceof HTMLElement && o.recalcPosition();
  }
  /**
   * Скролл к активному элементу списка
   */
  static scrollToActive(t) {
    if (!DOM.querySelectorVisible(t, "ul.top-popup_content > li > .top-active"))
      return;
    const e = t.querySelector("ul.top-popup_content"), p = DOM.querySelectorAllVisible(t, "ul.top-popup_content > li");
    t.classList.add("top-popup-wrapper-no_animate"), setTimeout(() => t.classList.remove("top-popup-wrapper-no_animate"), 100);
    let r = 100;
    for (const a of p) {
      if (a.querySelector(":scope > .top-active"))
        break;
      a instanceof HTMLElement && (r += a.offsetHeight);
    }
    if (e instanceof HTMLElement) {
      const a = e.offsetHeight;
      r > a ? e.scrollTop = r - a : e.scrollTop = 0;
    }
  }
  static decoratorBeforeOpen(t) {
    this.options.decoratorBeforeOpen && this.options.decoratorBeforeOpen(t);
  }
  static decoratorAfterOpen(t) {
    this.options.decoratorAfterOpen && this.options.decoratorAfterOpen(t);
  }
  static decoratorIsIgnoreOuterClick(t) {
    return this.options.decoratorIsIgnoreOuterClick ? this.options.decoratorIsIgnoreOuterClick(t) : !1;
  }
  /**
   * Зарегистрировать Vue компонент
   *
   * Каждый экземляр Popup регистрируется в словаре vueConnectors для последующего доступа из js
   */
  static regVueComponent(t, o) {
    if (Worker.vueConnectors.get(t))
      throw "Vue component Popup use duplicated id: " + t;
    Worker.vueConnectors.set(t, o);
  }
  /**
   * Снять с регистрации Vue компонент
   */
  static unregVueComponent(t) {
    Worker.vueConnectors.delete(t);
  }
  /**
   * Сгенерировать элемент для открытия popup
   */
  static genElPopupOpener(t, o, ...e) {
    const p = DOM.genEl(t, {}, ...e);
    p.dataset.topPopup = "#" + o.id;
    for (let r in o) {
      const a = "topPopup" + r.charAt(0).toUpperCase() + r.slice(1);
      p.dataset[a] = o[r];
    }
    return p.__TopPopupOpenerProps = o, p;
  }
}
export {
  Worker as TopPopupWorker
};
//# sourceMappingURL=worker.js.map
