@topvisor/ui 1.4.0-TopGroupSelector.7 → 1.4.0-TopGroupSelector.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/.chunks/{core-DVQVVUiP.es.js → core-BL-38XF7.es.js} +4 -4
  2. package/.chunks/{core-DVQVVUiP.es.js.map → core-BL-38XF7.es.js.map} +1 -1
  3. package/.chunks/{core-B9TwJi3h.amd.js → core-BsPx05H9.amd.js} +2 -2
  4. package/.chunks/{core-B9TwJi3h.amd.js.map → core-BsPx05H9.amd.js.map} +1 -1
  5. package/.chunks/{datepicker-bidhcksv.amd.js → datepicker-3coUsFW2.amd.js} +2 -2
  6. package/.chunks/{datepicker-bidhcksv.amd.js.map → datepicker-3coUsFW2.amd.js.map} +1 -1
  7. package/.chunks/{datepicker-CrASsJeF.es.js → datepicker-D1Hw3a3o.es.js} +2 -2
  8. package/.chunks/{datepicker-CrASsJeF.es.js.map → datepicker-D1Hw3a3o.es.js.map} +1 -1
  9. package/.chunks/{dialog_regionSelectorRegions-DJu5Y1WK.es.js → dialog_regionSelectorRegions-1UVhgK2f.es.js} +4 -4
  10. package/.chunks/{dialog_regionSelectorRegions-DJu5Y1WK.es.js.map → dialog_regionSelectorRegions-1UVhgK2f.es.js.map} +1 -1
  11. package/.chunks/{dialog_regionSelectorRegions-Dc-YGZ0l.amd.js → dialog_regionSelectorRegions-CZ8IX7la.amd.js} +2 -2
  12. package/.chunks/{dialog_regionSelectorRegions-Dc-YGZ0l.amd.js.map → dialog_regionSelectorRegions-CZ8IX7la.amd.js.map} +1 -1
  13. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-BP6GFkkz.es.js → dialogs.vue_vue_type_script_setup_true_lang-DRbTG0vh.es.js} +2 -2
  14. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-BP6GFkkz.es.js.map → dialogs.vue_vue_type_script_setup_true_lang-DRbTG0vh.es.js.map} +1 -1
  15. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang--Xstly2G.amd.js → dialogs.vue_vue_type_script_setup_true_lang-Dq9kWWMg.amd.js} +2 -2
  16. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang--Xstly2G.amd.js.map → dialogs.vue_vue_type_script_setup_true_lang-Dq9kWWMg.amd.js.map} +1 -1
  17. package/.chunks/{forms-Cwv0JCi5.es.js → forms-BseC3Ftz.es.js} +5 -5
  18. package/.chunks/{forms-Cwv0JCi5.es.js.map → forms-BseC3Ftz.es.js.map} +1 -1
  19. package/.chunks/{forms--2-YQeWM.amd.js → forms-CUSCBQu3.amd.js} +3 -3
  20. package/.chunks/{forms--2-YQeWM.amd.js.map → forms-CUSCBQu3.amd.js.map} +1 -1
  21. package/.chunks/{notice-BCHrf2v6.es.js → notice-Cl3ZgiHm.es.js} +2 -2
  22. package/.chunks/{notice-BCHrf2v6.es.js.map → notice-Cl3ZgiHm.es.js.map} +1 -1
  23. package/.chunks/{notice-D1KO_E3H.amd.js → notice-DwjipV21.amd.js} +2 -2
  24. package/.chunks/{notice-D1KO_E3H.amd.js.map → notice-DwjipV21.amd.js.map} +1 -1
  25. package/.chunks/{page.vue_vue_type_script_setup_true_lang-DNs0udwC.amd.js → page.vue_vue_type_script_setup_true_lang-CjIiZU-D.amd.js} +2 -2
  26. package/.chunks/{page.vue_vue_type_script_setup_true_lang-DNs0udwC.amd.js.map → page.vue_vue_type_script_setup_true_lang-CjIiZU-D.amd.js.map} +1 -1
  27. package/.chunks/{page.vue_vue_type_script_setup_true_lang-D_ocBGzt.es.js → page.vue_vue_type_script_setup_true_lang-CpRJQFD1.es.js} +4 -4
  28. package/.chunks/{page.vue_vue_type_script_setup_true_lang-D_ocBGzt.es.js.map → page.vue_vue_type_script_setup_true_lang-CpRJQFD1.es.js.map} +1 -1
  29. package/.chunks/{policy.vue_vue_type_style_index_0_lang-b4Vb3SlQ.es.js → policy.vue_vue_type_style_index_0_lang-BBDJEs5Q.es.js} +4 -4
  30. package/.chunks/{policy.vue_vue_type_style_index_0_lang-b4Vb3SlQ.es.js.map → policy.vue_vue_type_style_index_0_lang-BBDJEs5Q.es.js.map} +1 -1
  31. package/.chunks/{policy.vue_vue_type_style_index_0_lang-BfL6Mj6K.amd.js → policy.vue_vue_type_style_index_0_lang-DJOaMdBm.amd.js} +2 -2
  32. package/.chunks/{policy.vue_vue_type_style_index_0_lang-BfL6Mj6K.amd.js.map → policy.vue_vue_type_style_index_0_lang-DJOaMdBm.amd.js.map} +1 -1
  33. package/.chunks/{popup-c8qgGOCv.amd.js → popup-DRuyYFGB.amd.js} +2 -2
  34. package/.chunks/popup-DRuyYFGB.amd.js.map +1 -0
  35. package/.chunks/{popup-DJMBWRtl.es.js → popup-Jw_Yyg3U.es.js} +99 -97
  36. package/.chunks/popup-Jw_Yyg3U.es.js.map +1 -0
  37. package/.chunks/{popupHint.vue_vue_type_style_index_0_lang-Bp_-W068.es.js → popupHint.vue_vue_type_style_index_0_lang-DD59yF6H.es.js} +2 -2
  38. package/.chunks/{popupHint.vue_vue_type_style_index_0_lang-Bp_-W068.es.js.map → popupHint.vue_vue_type_style_index_0_lang-DD59yF6H.es.js.map} +1 -1
  39. package/.chunks/{popupHint.vue_vue_type_style_index_0_lang-D42xEF-j.amd.js → popupHint.vue_vue_type_style_index_0_lang-DtiT6NE4.amd.js} +2 -2
  40. package/.chunks/{popupHint.vue_vue_type_style_index_0_lang-D42xEF-j.amd.js.map → popupHint.vue_vue_type_style_index_0_lang-DtiT6NE4.amd.js.map} +1 -1
  41. package/.chunks/{utils-C6nWu0aQ.amd.js → utils-CzHUG_xz.amd.js} +2 -2
  42. package/.chunks/{utils-C6nWu0aQ.amd.js.map → utils-CzHUG_xz.amd.js.map} +1 -1
  43. package/.chunks/{utils-DHyy_M2n.amd.js → utils-D9nYQabE.amd.js} +2 -2
  44. package/.chunks/{utils-DHyy_M2n.amd.js.map → utils-D9nYQabE.amd.js.map} +1 -1
  45. package/.chunks/{utils-Bu-TI6uw.es.js → utils-Q69SXlnV.es.js} +3 -3
  46. package/.chunks/{utils-Bu-TI6uw.es.js.map → utils-Q69SXlnV.es.js.map} +1 -1
  47. package/.chunks/{utils-cls72V1c.es.js → utils-YrUExsH7.es.js} +2 -2
  48. package/.chunks/{utils-cls72V1c.es.js.map → utils-YrUExsH7.es.js.map} +1 -1
  49. package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-HbtV9agA.es.js → widgetInput.vue_vue_type_script_setup_true_lang-CDkeKVqY.es.js} +2 -2
  50. package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-HbtV9agA.es.js.map → widgetInput.vue_vue_type_script_setup_true_lang-CDkeKVqY.es.js.map} +1 -1
  51. package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-B3soLr2U.amd.js → widgetInput.vue_vue_type_script_setup_true_lang-CkE912ll.amd.js} +2 -2
  52. package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-B3soLr2U.amd.js.map → widgetInput.vue_vue_type_script_setup_true_lang-CkE912ll.amd.js.map} +1 -1
  53. package/charts/charts.amd.js +1 -1
  54. package/charts/charts.js +1 -1
  55. package/core/app.amd.js +1 -1
  56. package/core/app.js +5 -5
  57. package/dialog/dialog.amd.js +1 -1
  58. package/dialog/dialog.js +2 -2
  59. package/forms/forms.amd.js +1 -1
  60. package/forms/forms.js +1 -1
  61. package/formsExt/formsExt.amd.js +1 -1
  62. package/formsExt/formsExt.js +2 -2
  63. package/layout/layout.amd.js +1 -1
  64. package/layout/layout.js +1 -1
  65. package/package.json +1 -1
  66. package/popup/popup.amd.js +1 -1
  67. package/popup/popup.js +4 -4
  68. package/popup/worker.amd.js +1 -1
  69. package/popup/worker.js +2 -2
  70. package/project/project.amd.js +1 -1
  71. package/project/project.amd.js.map +1 -1
  72. package/project/project.js +367 -353
  73. package/project/project.js.map +1 -1
  74. package/src/components/popup/lib/popup.d.ts +1 -1
  75. package/src/components/project/groupSelector/groups/groups.vue.d.ts +1 -0
  76. package/src/components/project/groupSelector/groups/types.d.ts +1 -0
  77. package/src/components/project/groupSelector/groups/utils.d.ts +1 -1
  78. package/src/components/project/groupSelector/types.d.ts +2 -2
  79. package/tabsView/tabsView.amd.js +1 -1
  80. package/tabsView/tabsView.js +2 -2
  81. package/utils/clipboard.amd.js +1 -1
  82. package/utils/clipboard.js +1 -1
  83. package/utils/date.amd.js +1 -1
  84. package/utils/date.js +1 -1
  85. package/utils/device.amd.js +1 -1
  86. package/utils/device.js +1 -1
  87. package/utils/lodash.amd.js +1 -1
  88. package/utils/lodash.js +1 -1
  89. package/utils/price.amd.js +1 -1
  90. package/utils/price.js +1 -1
  91. package/utils/searchers.amd.js +1 -1
  92. package/utils/searchers.js +3 -3
  93. package/utils/string.amd.js +1 -1
  94. package/utils/string.js +1 -1
  95. package/.chunks/popup-DJMBWRtl.es.js.map +0 -1
  96. package/.chunks/popup-c8qgGOCv.amd.js.map +0 -1
@@ -1,6 +1,6 @@
1
- import { u as I, C as d } from "./forms-Cwv0JCi5.es.js";
2
- import o from "../utils/dom.js";
3
- import { TopPopupWorker as s } from "../popup/worker.js";
1
+ import { u as I, C as d } from "./forms-BseC3Ftz.es.js";
2
+ import e from "../utils/dom.js";
3
+ import { TopPopupWorker as n } from "../popup/worker.js";
4
4
  class P {
5
5
  static componentName = "Top";
6
6
  componentName;
@@ -18,21 +18,21 @@ class P {
18
18
  // переопредлять нельзя
19
19
  // если компонент инициирован, необходимо сразу его вернуть и выполнить reInit() вместо mount()
20
20
  // используется init вместо constructor, так как super constructor выполняется до Object.defineProperty() параметров класса
21
- init(t, p, e) {
21
+ init(t, p, i) {
22
22
  if (!p)
23
23
  throw t + ": el is undefined";
24
- const i = P.getComponent(p, t);
25
- if (i)
26
- return i.reInit(e), i;
27
- this.componentName = t, this.className = "top" + t[0].toUpperCase() + t.substring(1), this.uid = this.componentName + (Math.random() + "").replace(".", ""), this._setComponent(p), this.el = p, this.el.classList.add(this.className), this.options = Object.assign(this.options, e), this.mount();
24
+ const o = P.getComponent(p, t);
25
+ if (o)
26
+ return o.reInit(i), o;
27
+ this.componentName = t, this.className = "top" + t[0].toUpperCase() + t.substring(1), this.uid = this.componentName + (Math.random() + "").replace(".", ""), this._setComponent(p), this.el = p, this.el.classList.add(this.className), this.options = Object.assign(this.options, i), this.mount();
28
28
  }
29
29
  // получить инициированный компонент
30
30
  static getComponent(t, p) {
31
- return o.storage(t, "#" + p);
31
+ return e.storage(t, "#" + p);
32
32
  }
33
33
  // устанвоить компонент
34
34
  _setComponent(t) {
35
- o.storage(t, "#" + this.componentName, this);
35
+ e.storage(t, "#" + this.componentName, this);
36
36
  }
37
37
  // функция подключения компонента
38
38
  mount() {
@@ -40,7 +40,7 @@ class P {
40
40
  }
41
41
  // функция отключения компонента
42
42
  unmount() {
43
- o.storage(this.el, "#" + this.componentName, null), this.unmountEls.forEach((t) => {
43
+ e.storage(this.el, "#" + this.componentName, null), this.unmountEls.forEach((t) => {
44
44
  t.remove();
45
45
  }), this.unmountEls = [], this.unmountEvents.forEach((t) => {
46
46
  t.el.removeEventListener(t.type, t.listener, t.options);
@@ -51,18 +51,18 @@ class P {
51
51
  this.unmountEls.push(t);
52
52
  }
53
53
  // указание новые события, которые должны будут удалиться после unmount
54
- addEventListenerWithUnmount(t, p, e, i) {
55
- t.addEventListener(p, e, i), this.registerEventForUnmount(t, p, e, i);
54
+ addEventListenerWithUnmount(t, p, i, o) {
55
+ t.addEventListener(p, i, o), this.registerEventForUnmount(t, p, i, o);
56
56
  }
57
57
  // указание новые события, которые должны будут удалиться после unmount
58
- registerEventForUnmount(t, p, e, i) {
59
- const r = {
58
+ registerEventForUnmount(t, p, i, o) {
59
+ const s = {
60
60
  el: t,
61
61
  type: p,
62
- listener: e,
63
- options: i
62
+ listener: i,
63
+ options: o
64
64
  };
65
- this.unmountEvents.push(r);
65
+ this.unmountEvents.push(s);
66
66
  }
67
67
  // функция перенастройки уже подключенного компонента
68
68
  reInit(t) {
@@ -96,13 +96,13 @@ class L {
96
96
  static onclickCapture(t) {
97
97
  if (!(!(t.target instanceof HTMLElement) || !t.target.closest(".top-popup-wrapper"))) {
98
98
  if (t.target.matches("[data-top-popup]")) {
99
- const e = t.target.closest("ul"), i = t.target.closest("a, .a");
100
- e && e.querySelector("a.top-active, .a.top-active")?.classList.remove("top-active"), i && i.classList.add("top-active"), t.stopPropagation();
99
+ const i = t.target.closest("ul"), o = t.target.closest("a, .a");
100
+ i && i.querySelector("a.top-active, .a.top-active")?.classList.remove("top-active"), o && o.classList.add("top-active"), t.stopPropagation();
101
101
  return;
102
102
  }
103
103
  if (t.target.matches(".top-popup-wrapper")) {
104
- const e = t.target;
105
- s.close(e, !0), t.stopPropagation();
104
+ const i = t.target;
105
+ n.close(i, !0), t.stopPropagation();
106
106
  return;
107
107
  }
108
108
  }
@@ -116,10 +116,10 @@ class L {
116
116
  if (!(t.target instanceof HTMLElement)) return;
117
117
  const p = t.target.closest(".closer, a, .a, .top-button");
118
118
  if (p) {
119
- const e = t.target.closest(".top-popup-wrapper");
120
- if (!e || p.matches(".top-popup-noCloser"))
119
+ const i = t.target.closest(".top-popup-wrapper");
120
+ if (!i || p.matches(".top-popup-noCloser"))
121
121
  return;
122
- p.getAttribute("href") === "." && t.preventDefault(), s.close(e, !0);
122
+ p.getAttribute("href") === "." && t.preventDefault(), n.close(i, !0);
123
123
  }
124
124
  }
125
125
  /**
@@ -128,40 +128,40 @@ class L {
128
128
  static onkeydown(t) {
129
129
  if (!(t.target instanceof HTMLElement)) return;
130
130
  let p = t.target.closest(".top-popup-wrapper");
131
- if (p || (p = s.getPopupFromOpener(t.target)?.elPopup ?? null), !p)
131
+ if (p || (p = n.getPopupFromOpener(t.target)?.elPopup ?? null), !p)
132
132
  return;
133
- const e = p.querySelector("ul.top-popup_content");
133
+ const i = p.querySelector("ul.top-popup_content");
134
134
  switch (t.key) {
135
135
  case "Escape":
136
- s.close(p, !0);
136
+ n.close(p, !0);
137
137
  break;
138
138
  case "Enter":
139
- if (!e) {
140
- if (o.querySelectorVisible(p, ".preloader"))
139
+ if (!i) {
140
+ if (e.querySelectorVisible(p, ".preloader"))
141
141
  break;
142
- const u = o.querySelectorVisible(p, ".top-popup_footer .go, .top-popup_footer [data-action]");
142
+ const u = e.querySelectorVisible(p, ".top-popup_footer .go, .top-popup_footer [data-action]");
143
143
  if (u instanceof HTMLElement) {
144
144
  u.click();
145
145
  break;
146
146
  }
147
- let f = o.querySelectorVisibleLast(p, ".top-popup_footer .top-button:focus");
148
- f || (f = o.querySelectorVisibleLast(p, ".top-popup_footer .top-button")), f instanceof HTMLElement && f.click();
147
+ let f = e.querySelectorVisibleLast(p, ".top-popup_footer .top-button:focus");
148
+ f || (f = e.querySelectorVisibleLast(p, ".top-popup_footer .top-button")), f instanceof HTMLElement && f.click();
149
149
  break;
150
150
  }
151
- const i = o.querySelectorVisible(p, "li > a.top-active");
152
- i && i.getAttribute("href") && (t.preventDefault(), location.href = i.getAttribute("href"));
153
- const r = p.querySelector("li > .top-active");
154
- r instanceof HTMLElement && r.click();
151
+ const o = e.querySelectorVisible(p, "li > a.top-active");
152
+ o && o.getAttribute("href") && (t.preventDefault(), location.href = o.getAttribute("href"));
153
+ const s = p.querySelector("li > .top-active");
154
+ s instanceof HTMLElement && s.click();
155
155
  break;
156
156
  // управление стрелками
157
157
  case "ArrowUp":
158
158
  case "ArrowRight":
159
159
  case "ArrowDown":
160
160
  case "ArrowLeft":
161
- if (!e)
161
+ if (!i)
162
162
  break;
163
163
  if (t.key === "ArrowRight" || t.key === "ArrowLeft") {
164
- if (o.querySelectorVisible(
164
+ if (e.querySelectorVisible(
165
165
  p,
166
166
  "ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active > .top-popup_listMore"
167
167
  ))
@@ -176,15 +176,15 @@ class L {
176
176
  if (u instanceof HTMLElement)
177
177
  return u.click();
178
178
  }
179
- const h = o.querySelectorAllVisible(p, "ul.top-popup_content > li:not(.top-popup_liNoSelectable)"), c = h.length;
179
+ const h = e.querySelectorAllVisible(p, "ul.top-popup_content > li:not(.top-popup_liNoSelectable)"), c = h.length;
180
180
  if (!c)
181
181
  return;
182
- let n = -1;
183
- if (a && (n = h.indexOf(a)), t.key === "ArrowUp" || t.key === "ArrowLeft" ? n-- : n++, t.key === "ArrowLeft" && n === -1)
184
- return t.target.matches("input") ? void 0 : s.close(p, !0);
185
- if (t.key === "ArrowRight" && n === c)
182
+ let r = -1;
183
+ if (a && (r = h.indexOf(a)), t.key === "ArrowUp" || t.key === "ArrowLeft" ? r-- : r++, t.key === "ArrowLeft" && r === -1)
184
+ return t.target.matches("input") ? void 0 : n.close(p, !0);
185
+ if (t.key === "ArrowRight" && r === c)
186
186
  return;
187
- n < 0 && (n = c - 1), n > c - 1 && (n = 0), p.querySelectorAll("ul.top-popup_content > li > .top-active").forEach((u) => u.classList.remove("top-active")), h[n].querySelector(":scope > a, :scope > .a")?.classList.add("top-active"), s.scrollToActive(p);
187
+ r < 0 && (r = c - 1), r > c - 1 && (r = 0), p.querySelectorAll("ul.top-popup_content > li > .top-active").forEach((u) => u.classList.remove("top-active")), h[r].querySelector(":scope > a, :scope > .a")?.classList.add("top-active"), n.scrollToActive(p);
188
188
  break;
189
189
  }
190
190
  }
@@ -210,7 +210,7 @@ class b extends P {
210
210
  /**
211
211
  * Для openerIsInput фокусировка срабатывает при входе в поле ввода
212
212
  *
213
- * Фкусировка на сам Popup не производится
213
+ * Фокусировка на сам Popup не производится
214
214
  *
215
215
  * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/combobox_role
216
216
  */
@@ -263,23 +263,25 @@ class b extends P {
263
263
  async mount() {
264
264
  if (!(this.el instanceof HTMLElement)) return;
265
265
  const t = this.vueGetComponent();
266
- this.el.closest(".top-popup-wrapper") && (this.popupParent = s.getPopup(this.el.closest(".top-popup-wrapper"))), await this.mountJQuery(), o.css(this.el, "position") !== "absolute" && (this.el.style.position = "relative"), this.el.dataset.topPopupOpened = "opened", this.elActiveByDefault = this.el.classList.contains("top-active"), this.el.classList.add("top-active"), this.openerIsInput = this.el.classList.contains("top-input");
267
- const p = this.el.querySelector("input");
268
- if (p && !p.__popupOnBlur && (p.__popupOnBlur = !0, p.addEventListener("blur", (r) => {
269
- s.getPopupFromOpener(this.el)?.close();
270
- })), t)
271
- this.type = "vue", this.options.popup = "", this.elPopup = o.genEl("div", {}, this.options.popup);
266
+ if (this.el.closest(".top-popup-wrapper") && (this.popupParent = n.getPopup(this.el.closest(".top-popup-wrapper"))), await this.mountJQuery(), e.css(this.el, "position") !== "absolute" && (this.el.style.position = "relative"), this.el.dataset.topPopupOpened = "opened", this.elActiveByDefault = this.el.classList.contains("top-active"), this.el.classList.add("top-active"), this.openerIsInput = this.el.classList.contains("top-input"), this.el.classList.contains("top-input-project_name") && (this.openerIsInput = !1), this.openerIsInput) {
267
+ const o = this.el.querySelector("input");
268
+ o && !o.__popupOnBlur && (o.__popupOnBlur = !0, o.addEventListener("blur", (s) => {
269
+ n.getPopupFromOpener(this.el)?.close();
270
+ }));
271
+ }
272
+ if (t)
273
+ this.type = "vue", this.options.popup = "", this.elPopup = e.genEl("div", {}, this.options.popup);
272
274
  else if (this.options.popup?.match(/^[#.]/))
273
275
  this.type = "selector", this.elPopup = document.querySelector(`${this.options.popup}.template`) || void 0;
274
276
  else {
275
277
  if (this.type = "html", this.options.useOriginal)
276
278
  throw "Option useOriginal not allowed for text templates";
277
- this.elPopup = o.genEl("div", {}, this.options.popup ?? "");
279
+ this.elPopup = e.genEl("div", {}, this.options.popup ?? "");
278
280
  }
279
281
  if (!this.elPopup || t?.opened) {
280
282
  if (this.options.useOriginal || t?.opened) {
281
283
  if (t?.opened ? this.elPopup = t.popup.elPopup : this.elPopup = document.querySelector(`${this.options.popup}.top-popup-wrapper-shown`) || void 0, this.elPopup) {
282
- this.el.dataset.topPopupOpened = "", this.elActiveByDefault || this.el.classList.remove("top-active"), s.close(this.elPopup), setTimeout(() => this.mount(), this.options.transitionDuration);
284
+ this.el.dataset.topPopupOpened = "", this.elActiveByDefault || this.el.classList.remove("top-active"), n.close(this.elPopup), setTimeout(() => this.mount(), this.options.transitionDuration);
283
285
  return;
284
286
  }
285
287
  throw "Option useOriginal state allowed only elements .template";
@@ -288,26 +290,26 @@ class b extends P {
288
290
  }
289
291
  if (!this.elPopup)
290
292
  return;
291
- for (this.options.useOriginal ? (this.elStartPosition = this.elPopup.closest(".top-popup-el-start-position"), this.elStartPosition || (this.elStartPosition = o.wrap(this.elPopup, "i"), this.elStartPosition.classList.add("top-popup-el-start-position", "hidden"))) : (this.elPopup = this.elPopup.cloneNode(!0), this.type === "selector" && !this.elPopup.matches(".template") && (this.elPopup.classList.remove("hidden"), this.elPopup.querySelector(":scope > .top-popup_content") || this.elPopup.classList.add("top-popup_content"), this.elPopup = o.wrap(this.elPopup, "div")), this.type === "html" && (this.elPopup.querySelector(":scope > .top-popup_content") || (this.elPopup.classList.add("top-popup_content"), this.elPopup = o.wrap(this.elPopup, "div"))), (this.type === "selector" && !this.elPopup.matches(".template") || this.type === "html" || this.type === "vue") && (o.querySelectorAllArray(this.elPopup, "[data-top-popup]").forEach((r) => {
292
- r instanceof HTMLElement && (r.dataset.topPopupPosBy = "fixed");
293
- }), o.querySelectorAllArray(this.elPopup, ".top-popup-wrapper").forEach((r) => r.remove()))), s.decoratorBeforeOpen(this), t && (this.options.class = t.classRef.value, t.transitionDurationRef.value !== void 0 && (this.options.transitionDuration = t.transitionDurationRef.value, this.elPopup instanceof HTMLElement && this.elPopup.style.setProperty(
293
+ for (this.options.useOriginal ? (this.elStartPosition = this.elPopup.closest(".top-popup-el-start-position"), this.elStartPosition || (this.elStartPosition = e.wrap(this.elPopup, "i"), this.elStartPosition.classList.add("top-popup-el-start-position", "hidden"))) : (this.elPopup = this.elPopup.cloneNode(!0), this.type === "selector" && !this.elPopup.matches(".template") && (this.elPopup.classList.remove("hidden"), this.elPopup.querySelector(":scope > .top-popup_content") || this.elPopup.classList.add("top-popup_content"), this.elPopup = e.wrap(this.elPopup, "div")), this.type === "html" && (this.elPopup.querySelector(":scope > .top-popup_content") || (this.elPopup.classList.add("top-popup_content"), this.elPopup = e.wrap(this.elPopup, "div"))), (this.type === "selector" && !this.elPopup.matches(".template") || this.type === "html" || this.type === "vue") && (e.querySelectorAllArray(this.elPopup, "[data-top-popup]").forEach((o) => {
294
+ o instanceof HTMLElement && (o.dataset.topPopupPosBy = "fixed");
295
+ }), e.querySelectorAllArray(this.elPopup, ".top-popup-wrapper").forEach((o) => o.remove()))), n.decoratorBeforeOpen(this), t && (this.options.class = t.classRef.value, t.transitionDurationRef.value !== void 0 && (this.options.transitionDuration = t.transitionDurationRef.value, this.elPopup instanceof HTMLElement && this.elPopup.style.setProperty(
294
296
  "--top-popup-transition-delay",
295
297
  this.options.transitionDuration + "ms"
296
298
  ))), this.elPopupInner = document.createElement("div"), this.elPopupInner.classList.add("top-popupPanel", "top-popup"); this.elPopup.firstChild; )
297
299
  this.elPopupInner.appendChild(this.elPopup.firstChild);
298
300
  if (this.elPopup.append(this.elPopupInner), this.elPopup.classList.add("top-popup-wrapper"), this.options.class) {
299
- const r = this.options.class.split(" ");
300
- this.elPopup.classList.add(...r);
301
+ const o = this.options.class.split(" ");
302
+ this.elPopup.classList.add(...o);
301
303
  }
302
304
  this.options.notch && (this.elPopup.classList.add("with_notch"), this.elPopup.insertAdjacentHTML("beforeend", '<i class="notch notch-border"></i><i class="notch"></i>')), await this.vueOpen(), this.elPopupHeader = this.elPopupInner.querySelector(".top-popup_header"), this.elPopupWidget = this.elPopupInner.querySelector(".top-popup_widget"), this.elPopupBody = this.elPopupInner.querySelector(".top-popup_content"), this.elPopupFooter = this.elPopupInner.querySelector(".top-popup_footer");
303
- const e = !!this.elPopup.querySelector('[data-widget="search"]');
304
- if (this.options.isFullScreen && !e) {
305
- const r = I();
306
- !this.elPopupHeader && r.Common.Close && (this.elPopupHeader = o.genEl("i", { class: "top-popup_header" }), this.elPopupInner.prepend(this.elPopupHeader), this.elPopupHeader.prepend(o.genEl("i", { class: "a closer" }, r.Common.Close)), this.elPopupHeader.append(o.genEl("i", { class: "top-popup_headerButton" })));
305
+ const p = !!this.elPopup.querySelector('[data-widget="search"]');
306
+ if (this.options.isFullScreen && !p) {
307
+ const o = I();
308
+ !this.elPopupHeader && o.Common.Close && (this.elPopupHeader = e.genEl("i", { class: "top-popup_header" }), this.elPopupInner.prepend(this.elPopupHeader), this.elPopupHeader.prepend(e.genEl("i", { class: "a closer" }, o.Common.Close)), this.elPopupHeader.append(e.genEl("i", { class: "top-popup_headerButton" })));
307
309
  }
308
- o.storage(this.elPopup, b.componentName, this), this.options.frontSelector && (this.elFront = document.querySelector(this.options.frontSelector)), this.elFront || (this.elFront = this.el.closest(".top-popup-front")), this.elFront || (this.elFront = document.body), this.elPopup instanceof HTMLElement && (this.elPopup.style.width = this.el.offsetWidth + "px", this.elPopup.style.height = this.el.offsetHeight + "px", this.elPopup.style.top = this.el.offsetTop + "px", this.elPopup.style.right = parseInt(this.el.style.right || "0") + "px", this.elPopup.style.bottom = parseInt(this.el.style.bottom || "0") + "px"), this.el.parentElement?.insertBefore(this.elPopup, this.el), this.elPopup.classList.remove("template"), this.options.invertX && this.elPopup.classList.add("invert-x");
310
+ e.storage(this.elPopup, b.componentName, this), this.options.frontSelector && (this.elFront = document.querySelector(this.options.frontSelector)), this.elFront || (this.elFront = this.el.closest(".top-popup-front")), this.elFront || (this.elFront = document.body), this.elPopup instanceof HTMLElement && (this.elPopup.style.width = this.el.offsetWidth + "px", this.elPopup.style.height = this.el.offsetHeight + "px", this.elPopup.style.top = this.el.offsetTop + "px", this.elPopup.style.right = parseInt(this.el.style.right || "0") + "px", this.elPopup.style.bottom = parseInt(this.el.style.bottom || "0") + "px"), this.el.parentElement?.insertBefore(this.elPopup, this.el), this.elPopup.classList.remove("template"), this.options.invertX && this.elPopup.classList.add("invert-x");
309
311
  let i = !!this.el.closest(".modal-header");
310
- i || (i = !!this.el.closest("#top_panel")), i || (i = !!this.el.closest("#secondmenu")), i && this.elPopup.classList.add("p-from-top"), setTimeout(() => this.elPopup?.classList.add("top-popup-wrapper-shown")), this.elFront && !this.elFront.matches("body") && (this.elFront.append(this.elPopup), this.shift.top = o.offset(this.el).top - this.el.offsetTop - o.offset(this.elFront).top, this.shift.left = o.offset(this.el).left - this.el.offsetLeft - o.offset(this.elFront).left, this.shift.top -= parseInt(this.el.style["margin-top"] || 0), this.shift.left -= parseInt(this.el.style["margin-left"] || 0), this.elPopup instanceof HTMLElement && (this.elPopup.style.top = parseInt(this.elPopup.style.top || "0") + this.shift.top + "px", this.elPopup.style.left = parseInt(this.elPopup.style.left || "0") + this.shift.left + "px")), this.$ && d.$ && this.$.trigger("aftershow.top-menu-popup", [d.$(this.elPopup)]), this.recalcPosition(), this.elPopup.setAttribute("tabindex", "0"), this.focus(), s.decoratorAfterOpen(this), this.mountEvents();
312
+ i || (i = !!this.el.closest("#top_panel")), i || (i = !!this.el.closest("#secondmenu")), i && this.elPopup.classList.add("p-from-top"), setTimeout(() => this.elPopup?.classList.add("top-popup-wrapper-shown")), this.elFront && !this.elFront.matches("body") && (this.elFront.append(this.elPopup), this.shift.top = e.offset(this.el).top - this.el.offsetTop - e.offset(this.elFront).top, this.shift.left = e.offset(this.el).left - this.el.offsetLeft - e.offset(this.elFront).left, this.shift.top -= parseInt(this.el.style["margin-top"] || 0), this.shift.left -= parseInt(this.el.style["margin-left"] || 0), this.elPopup instanceof HTMLElement && (this.elPopup.style.top = parseInt(this.elPopup.style.top || "0") + this.shift.top + "px", this.elPopup.style.left = parseInt(this.elPopup.style.left || "0") + this.shift.left + "px")), this.$ && d.$ && this.$.trigger("aftershow.top-menu-popup", [d.$(this.elPopup)]), this.recalcPosition(), this.elPopup.setAttribute("tabindex", "0"), this.focus(), n.decoratorAfterOpen(this), this.mountEvents();
311
313
  }
312
314
  async mountJQuery() {
313
315
  d.$ && (this.$ = d.$(this.el));
@@ -317,7 +319,7 @@ class b extends P {
317
319
  */
318
320
  focus() {
319
321
  let t;
320
- this.elPopup && (t = o.querySelectorVisible(this.elPopup, ".top-popup-autofocus"), t || (t = o.querySelectorVisible(this.elPopup, ":read-write, select:not(:disabled)")), t || (t = o.querySelectorVisible(this.elPopup, ".top-popup_footer .top-button")), t || (t = this.elPopup), this.openerIsInput || (t instanceof HTMLElement && t.focus(), setTimeout(() => {
322
+ this.elPopup && (t = e.querySelectorVisible(this.elPopup, ".top-popup-autofocus"), t || (t = e.querySelectorVisible(this.elPopup, ":read-write, select:not(:disabled)")), t || (t = e.querySelectorVisible(this.elPopup, ".top-popup_footer .top-button")), t || (t = this.elPopup), this.openerIsInput || (t instanceof HTMLElement && t.focus(), setTimeout(() => {
321
323
  t instanceof HTMLElement && t.focus();
322
324
  }, this.options.transitionDuration)));
323
325
  }
@@ -330,17 +332,17 @@ class b extends P {
330
332
  onMousedown(t) {
331
333
  if (!this.elPopup || !(t.target instanceof Element) || !this.isFirstClick || (this.isFirstClick = !1, setTimeout(() => this.isFirstClick = !0), t instanceof MouseEvent && t.button !== 0))
332
334
  return;
333
- let p = o.querySelectorVisibleLast(document.body, ":scope > .top-popup-wrapper");
334
- if (p && p !== this.elPopup || t.target.closest(".top-popup-front") && (p = o.querySelectorVisibleLast(t.target.closest(".top-popup-front"), ":scope > .top-popup-wrapper"), p && p !== this.elPopup))
335
+ let p = e.querySelectorVisibleLast(document.body, ":scope > .top-popup-wrapper");
336
+ if (p && p !== this.elPopup || t.target.closest(".top-popup-front") && (p = e.querySelectorVisibleLast(t.target.closest(".top-popup-front"), ":scope > .top-popup-wrapper"), p && p !== this.elPopup))
335
337
  return;
336
338
  if (t.target.closest(`[data-top-popup-id="${this.options.id}"]`)) {
337
339
  t.preventDefault();
338
340
  return;
339
341
  }
340
- let e = t.target.closest("input, select, textarea, button, [tabindex]");
341
- e === this.elPopup && (e = null);
342
- const i = !e;
343
- i && this.openerIsInput && t.preventDefault(), !this.elPopup.contains(t.target) && (this.elPopup.closest(".ui-dialog") && !t.target.closest(".ui-dialog") || s.decoratorIsIgnoreOuterClick(t) || s.close(this.elPopup, i));
342
+ let i = t.target.closest("input, select, textarea, button, [tabindex]");
343
+ i === this.elPopup && (i = null);
344
+ const o = !i;
345
+ o && this.openerIsInput && t.preventDefault(), !this.elPopup.contains(t.target) && (this.elPopup.closest(".ui-dialog") && !t.target.closest(".ui-dialog") || n.decoratorIsIgnoreOuterClick(t) || n.close(this.elPopup, o));
344
346
  }
345
347
  /**
346
348
  * Произошла фокусировка на этот popup
@@ -354,8 +356,8 @@ class b extends P {
354
356
  onFocusCloseOthers() {
355
357
  if (this.isClosed)
356
358
  return;
357
- s.getAllVisible().forEach((p) => {
358
- this.elPopup?.contains(p) || this.popupParent?.elPopup === p || this.popupParent?.popupParent?.elPopup === p || s.close(p);
359
+ n.getAllVisible().forEach((p) => {
360
+ this.elPopup?.contains(p) || this.popupParent?.elPopup === p || this.popupParent?.popupParent?.elPopup === p || n.close(p);
359
361
  });
360
362
  }
361
363
  /**
@@ -363,14 +365,14 @@ class b extends P {
363
365
  */
364
366
  onMouseleave(t) {
365
367
  setTimeout(() => {
366
- this.elPopupInner && this.elPopupInner.matches(":hover") || !this.elPopup || s.close(this.elPopup);
368
+ this.elPopupInner && this.elPopupInner.matches(":hover") || !this.elPopup || n.close(this.elPopup);
367
369
  }, 100);
368
370
  }
369
371
  /**
370
372
  * Контроль положения Popup при fixed позиционировании
371
373
  */
372
374
  onResize() {
373
- this.elPopup && this.elPopup.parentElement !== document.body && document.body.append(this.elPopup), this.elPopup instanceof HTMLElement && (this.elPopup.style.top = o.offset(this.el).top + "px", this.elPopup.style.left = o.offset(this.el).left + "px");
375
+ this.elPopup && this.elPopup.parentElement !== document.body && document.body.append(this.elPopup), this.elPopup instanceof HTMLElement && (this.elPopup.style.top = e.offset(this.el).top + "px", this.elPopup.style.left = e.offset(this.el).left + "px");
374
376
  }
375
377
  unmount() {
376
378
  super.unmount(), this.el instanceof HTMLElement && (this.el.dataset.topPopupOpened = ""), this.elActiveByDefault || this.el.classList.remove("top-active");
@@ -380,15 +382,15 @@ class b extends P {
380
382
  // контроль за положением Popup, чтобы оно не вылезало за пределы документа
381
383
  recalcPosition(t) {
382
384
  if (!(this.elPopup instanceof HTMLElement)) return;
383
- let p = t ?? this.options.p, e;
385
+ let p = t ?? this.options.p, i;
384
386
  if (this.el instanceof HTMLElement)
385
387
  switch (this.elPopup.style.height = this.el.offsetHeight + "px", this.elPopup.classList.remove("p0", "p1", "p2", "p3", "p4"), this.elPopup.classList.add("p" + p), this.options.posBy) {
386
388
  case "left":
387
- e = this.el.offsetLeft + parseInt(this.el.style["margin-left"] || "0"), e += this.shift.left, this.elPopup.style.left = e + "px";
389
+ i = this.el.offsetLeft + parseInt(this.el.style["margin-left"] || "0"), i += this.shift.left, this.elPopup.style.left = i + "px";
388
390
  break;
389
391
  case "right":
390
392
  if (!(this.el.offsetParent instanceof HTMLElement)) break;
391
- e = this.el.offsetLeft + parseInt(this.el.style["margin-left"] || "0"), this.elPopup.style.right = this.el.offsetParent.offsetWidth - this.el.offsetWidth - e + "px";
393
+ i = this.el.offsetLeft + parseInt(this.el.style["margin-left"] || "0"), this.elPopup.style.right = this.el.offsetParent.offsetWidth - this.el.offsetWidth - i + "px";
392
394
  break;
393
395
  case "fixed":
394
396
  this.addEventListenerWithUnmount(window, "resize", () => this.onResize()), this.onResize();
@@ -396,9 +398,9 @@ class b extends P {
396
398
  default:
397
399
  this.options.posBy?.append(this.elPopup);
398
400
  }
399
- const i = this.elPopup.getBoundingClientRect();
400
- this.elPopup.style.setProperty("--top-popup-height", this.elPopup.offsetHeight + "px"), this.elPopup.style.setProperty("--top-popup-right-bounding", i.right + "px"), this.elPopup.style.setProperty("--top-popup-bottom-bounding", i.bottom + "px"), this.elPopup.style.setProperty("--top-popup-top", i.top + "px"), this.elPopup.style.setProperty("--top-popup-left", i.left + "px"), this.elPopupInner instanceof HTMLElement && (this.elPopupInner.style.maxWidth = "unset", this.elPopupInner.style.maxHeight = "unset");
401
- const r = {
401
+ const o = this.elPopup.getBoundingClientRect();
402
+ this.elPopup.style.setProperty("--top-popup-height", this.elPopup.offsetHeight + "px"), this.elPopup.style.setProperty("--top-popup-right-bounding", o.right + "px"), this.elPopup.style.setProperty("--top-popup-bottom-bounding", o.bottom + "px"), this.elPopup.style.setProperty("--top-popup-top", o.top + "px"), this.elPopup.style.setProperty("--top-popup-left", o.left + "px"), this.elPopupInner instanceof HTMLElement && (this.elPopupInner.style.maxWidth = "unset", this.elPopupInner.style.maxHeight = "unset");
403
+ const s = {
402
404
  top: !1,
403
405
  right: !1,
404
406
  bottom: !1,
@@ -409,22 +411,22 @@ class b extends P {
409
411
  bottom: !1,
410
412
  left: !1
411
413
  };
412
- let h = i.left > window.innerWidth / 2, c = i.top > window.innerHeight / 2;
414
+ let h = o.left > window.innerWidth / 2, c = o.top > window.innerHeight / 2;
413
415
  p === 4 && (h = !h), p === 1 && (c = !c);
414
- const n = this.elPopupInner?.getBoundingClientRect();
416
+ const r = this.elPopupInner?.getBoundingClientRect();
415
417
  let u, f;
416
- const m = o.cssNumber(this.elPopup, "--top-popup-offset"), v = this.el.offsetHeight, y = this.el.offsetWidth;
417
- n && (u = window.innerWidth - n.right, f = window.innerHeight - n.bottom, n.top < m && (r.top = !0, n.top < m * 2 - n.height + v && (a.top = !0)), u < m && (r.right = !0, u < m * 2 - n.width + y && (a.right = !0)), f < m && (r.bottom = !0, f < m * 2 - n.height + v && (a.bottom = !0)), n.left < m && (r.left = !0, n.left < m * 2 - n.width + v && (a.left = !0)));
418
+ const m = e.cssNumber(this.elPopup, "--top-popup-offset"), v = this.el.offsetHeight, y = this.el.offsetWidth;
419
+ r && (u = window.innerWidth - r.right, f = window.innerHeight - r.bottom, r.top < m && (s.top = !0, r.top < m * 2 - r.height + v && (a.top = !0)), u < m && (s.right = !0, u < m * 2 - r.width + y && (a.right = !0)), f < m && (s.bottom = !0, f < m * 2 - r.height + v && (a.bottom = !0)), r.left < m && (s.left = !0, r.left < m * 2 - r.width + v && (a.left = !0)));
418
420
  const _ = (g, l) => {
419
421
  if (g === "x") {
420
- if (!r.right && !r.left || (l === 1 || l === 3) && !a.right && !a.left && h)
422
+ if (!s.right && !s.left || (l === 1 || l === 3) && !a.right && !a.left && h)
421
423
  return l;
422
- r.right && (l === 0 || l === 2) && h && (l = 4), r.left && (l === 0 || l === 4) && h && (l = 2);
424
+ s.right && (l === 0 || l === 2) && h && (l = 4), s.left && (l === 0 || l === 4) && h && (l = 2);
423
425
  }
424
426
  if (g === "y") {
425
- if (!r.top && !r.bottom || (l === 2 || l === 4) && !a.top && !a.bottom && c)
427
+ if (!s.top && !s.bottom || (l === 2 || l === 4) && !a.top && !a.bottom && c)
426
428
  return l;
427
- r.top && (l === 0 || l === 1) && c && (l = 3), r.bottom && c && (l = 1);
429
+ s.top && (l === 0 || l === 1) && c && (l = 3), s.bottom && c && (l = 1);
428
430
  }
429
431
  return l;
430
432
  };
@@ -433,7 +435,7 @@ class b extends P {
433
435
  let x = p ?? 0;
434
436
  w.forEach((g) => {
435
437
  x = _(g, x);
436
- }), p = x, r.bottom && (p === 2 || p === 4) && c && this.elPopup.classList.add("invert-y"), r.right && (p === 0 || p === 1 || p === 3) && this.elPopup.classList.add("invert-x"), this.elPopup.classList.remove("p0", "p1", "p2", "p3", "p4"), this.elPopup.classList.add("p" + p), this.elPopupInner instanceof HTMLElement && (this.elPopupInner.style.maxWidth = "", this.elPopupInner.style.maxHeight = ""), s.scrollToActive(this.elPopup);
438
+ }), p = x, s.bottom && (p === 2 || p === 4) && c && this.elPopup.classList.add("invert-y"), s.right && (p === 0 || p === 1 || p === 3) && this.elPopup.classList.add("invert-x"), this.elPopup.classList.remove("p0", "p1", "p2", "p3", "p4"), this.elPopup.classList.add("p" + p), this.elPopupInner instanceof HTMLElement && (this.elPopupInner.style.maxWidth = "", this.elPopupInner.style.maxHeight = ""), n.scrollToActive(this.elPopup);
437
439
  }
438
440
  onTouchmove(t) {
439
441
  if (t.currentTarget instanceof HTMLElement && t.target instanceof HTMLElement) {
@@ -443,11 +445,11 @@ class b extends P {
443
445
  }
444
446
  }
445
447
  close() {
446
- this.isClosed || (this.isClosed = !0, this.$ && d.$ && this.elPopup && this.$.trigger("afterclose.top-menu-popup", [d.$(this.elPopup)]), !s.noClose && (this.unmount(), this.elPopup?.classList.add("top-popup-wrapper-closed"), setTimeout(() => {
448
+ this.isClosed || (this.isClosed = !0, this.$ && d.$ && this.elPopup && this.$.trigger("afterclose.top-menu-popup", [d.$(this.elPopup)]), !n.noClose && (this.unmount(), this.elPopup?.classList.add("top-popup-wrapper-closed"), setTimeout(() => {
447
449
  if (this.vueClose(), !this.elPopup) return;
448
- this.options.useOriginal ? (this.elPopup.removeAttribute("style"), this.elPopup.classList.remove("top-popup-wrapper-shown", "top-popup-wrapper-closed"), this.elPopup.classList.add("template"), this.elStartPosition?.append(this.elPopup), this.elPopup.querySelector("div.top-popup_content.top-column")?.classList.remove("top-column"), this.elPopup.querySelector(".notch-border")?.remove(), this.elPopup.querySelector(".notch")?.remove(), this.elPopupInner?.replaceWith(...this.elPopupInner.childNodes), o.storageClear(this.elPopup)) : (o.storageClear(this.elPopup), this.elPopup.remove(), delete this.elPopup);
449
- const t = s.getAllVisible(), p = t.length && t[t.length - 1];
450
- p ? s.getPopup(p).focus() : document.documentElement.classList.remove("with_popup");
450
+ this.options.useOriginal ? (this.elPopup.removeAttribute("style"), this.elPopup.classList.remove("top-popup-wrapper-shown", "top-popup-wrapper-closed"), this.elPopup.classList.add("template"), this.elStartPosition?.append(this.elPopup), this.elPopup.querySelector("div.top-popup_content.top-column")?.classList.remove("top-column"), this.elPopup.querySelector(".notch-border")?.remove(), this.elPopup.querySelector(".notch")?.remove(), this.elPopupInner?.replaceWith(...this.elPopupInner.childNodes), e.storageClear(this.elPopup)) : (e.storageClear(this.elPopup), this.elPopup.remove(), delete this.elPopup);
451
+ const t = n.getAllVisible(), p = t.length && t[t.length - 1];
452
+ p ? n.getPopup(p).focus() : document.documentElement.classList.remove("with_popup");
451
453
  }, this.options.transitionDuration)));
452
454
  }
453
455
  async vueOpen() {
@@ -458,11 +460,11 @@ class b extends P {
458
460
  }
459
461
  // получить vueConnectors компонента Popup
460
462
  vueGetComponent() {
461
- if (this.el instanceof HTMLElement && this.options.id) return s.vueConnectors.get(this.options.id);
463
+ if (this.el instanceof HTMLElement && this.options.id) return n.vueConnectors.get(this.options.id);
462
464
  }
463
465
  }
464
466
  L.init();
465
467
  export {
466
468
  b as TopLibPopup
467
469
  };
468
- //# sourceMappingURL=popup-DJMBWRtl.es.js.map
470
+ //# sourceMappingURL=popup-Jw_Yyg3U.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popup-Jw_Yyg3U.es.js","sources":["../../src/components/component.ts","../../src/components/popup/lib/popup.globalEvents.ts","../../src/components/popup/lib/popup.ts"],"sourcesContent":["import DOM from '@/core/utils/dom';\n\n/**\n * Базовый компонент для js компонентов, не имеет отношения к Vue\n */\nclass Component {\n\n\tstatic componentName = 'Top';\n\n\tcomponentName: string | undefined; // имя класса компонента\n\tclassName: string | undefined; // имя css класса компонента\n\tuid: string | undefined; // уникальный id компонента\n\tel: HTMLElement | undefined; // элемент, связанный с компонентом\n\toptions = {}; // параметры компонента\n\n\tunmountEls: HTMLElement[] = [];\n\tunmountEvents: any[] = [];\n\n\t// переопредлять нельзя\n\t// если компонент инициирован, необходимо сразу его вернуть и выполнить reInit() вместо mount()\n\t// используется init вместо constructor, так как super constructor выполняется до Object.defineProperty() параметров класса\n\tinit(componentName: string, el: HTMLElement, options: object): Component | void {\n\t\tif (!el) {\n\t\t\tthrow componentName + ': el is undefined';\n\t\t}\n\n\t\tconst component = Component.getComponent(el, componentName);\n\n\t\tif (component) {\n\t\t\tcomponent.reInit(options);\n\n\t\t\treturn component;\n\t\t}\n\n\t\tthis.componentName = componentName;\n\t\tthis.className = 'top' + componentName[0].toUpperCase() + componentName.substring(1);\n\t\tthis.uid = this.componentName + (Math.random() + '').replace('.', '');\n\n\t\tthis._setComponent(el);\n\t\tthis.el = el;\n\t\tthis.el.classList.add(this.className);\n\t\tthis.options = Object.assign(this.options, options);\n\n\t\tthis.mount();\n\t}\n\n\t// получить инициированный компонент\n\tstatic getComponent(el: HTMLElement, componentName: string): any {\n\t\treturn DOM.storage(el, '#' + componentName);\n\t}\n\n\t// устанвоить компонент\n\t_setComponent(el: HTMLElement) {\n\t\tDOM.storage(el, '#' + this.componentName, this);\n\t}\n\n\t// функция подключения компонента\n\tmount(): void {\n\t\tthrow 'Please, add method mount() to component: ' + this.componentName;\n\t}\n\n\t// функция отключения компонента\n\tunmount(): void {\n\t\tDOM.storage(this.el, '#' + this.componentName, null);\n\n\t\tthis.unmountEls.forEach((el) => {\n\t\t\tel.remove();\n\t\t});\n\n\t\tthis.unmountEls = [];\n\n\t\tthis.unmountEvents.forEach((eventData) => {\n\t\t\teventData.el.removeEventListener(eventData.type, eventData.listener, eventData.options);\n\t\t});\n\n\t\tthis.unmountEvents = [];\n\t}\n\n\t// указание новые элементы, которые должны будут удалиться после unmount\n\tregisterElForUnmount(el: HTMLElement): void {\n\t\tthis.unmountEls.push(el);\n\t}\n\n\t// указание новые события, которые должны будут удалиться после unmount\n\taddEventListenerWithUnmount(\n\t\tel: HTMLElement | Document | Window,\n\t\ttype: keyof GlobalEventHandlersEventMap,\n\t\tlistener: (this: HTMLElement, e: Event) => any,\n\t\toptions?: any,\n\t): void {\n\t\tel.addEventListener(type, listener, options);\n\n\t\tthis.registerEventForUnmount(el, type, listener, options);\n\t}\n\n\t// указание новые события, которые должны будут удалиться после unmount\n\tregisterEventForUnmount(\n\t\tel: HTMLElement | Document | Window,\n\t\ttype: keyof GlobalEventHandlersEventMap,\n\t\tlistener: (this: HTMLElement, e: Event) => any,\n\t\toptions?: any,\n\t): void {\n\t\tconst eventData = {\n\t\t\tel: el,\n\t\t\ttype: type,\n\t\t\tlistener: listener,\n\t\t\toptions: options,\n\t\t};\n\n\t\tthis.unmountEvents.push(eventData);\n\t}\n\n\t// функция перенастройки уже подключенного компонента\n\treInit(_options: object): void {\n\t\tthrow 'Please, add method reInit() to component: ' + this.componentName;\n\t}\n\n\t// удалить элементы из DOM, но не из памяти\n\tstatic detach(nodes: NodeList | HTMLElement): void {\n\t\tif (nodes instanceof NodeList) {\n\t\t\tnodes.forEach((node) => node.parentElement?.removeChild(node));\n\t\t} else {\n\t\t\tconst el = nodes;\n\t\t\tel.parentElement?.removeChild(el);\n\t\t}\n\t}\n\n}\n\nexport default Component;\n","import Worker from '@/components/popup/lib/worker';\nimport DOM from '@/core/utils/dom';\n\n/**\n * Глобальные события, для реализации Popup\n * Автоматически инициируется при первой загрузке, не является выгружаемым модулем\n *\n * Если в меню встречает класс .preloader, то событие нажатия на кнопку через enter будет остановлено\n */\nclass GlobalEvents {\n\n\tprivate static isInited = false;\n\n\t/**\n\t * Добавить глобальные обработчики\n\t *\n\t * Добавляются на страницу один раз и навсегда\n\t */\n\tstatic init(): void {\n\t\tif (this.isInited) return;\n\n\t\tthis.isInited = true;\n\n\t\tdocument.addEventListener('click', this.onclickCapture, { capture: true });\n\t\tdocument.addEventListener('click', this.onclick);\n\t\tdocument.addEventListener('keydown', this.onkeydown);\n\t}\n\n\t/**\n\t * Глобальный обработчик захватов кликов\n\t *\n\t * Обрабатывает захватов клики внутри Popup\n\t */\n\tprivate static onclickCapture(e: Event): void {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\t// меню\n\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\n\t\t// клик вне меню\n\t\tif (!elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\t// клик по кнопке открытия другого меню\n\t\tif (e.target.matches('[data-top-popup]')) {\n\t\t\t// список меню, в котором был сделан клик\n\t\t\tconst elUl = e.target.closest<HTMLElement>('ul');\n\n\t\t\t// элемент меню, по которому был сделан клик\n\t\t\tconst elItem = e.target.closest<HTMLElement>('a, .a');\n\n\t\t\t// сделать элемент меню, по которому сделан клик активным\n\t\t\tif (elUl) {\n\t\t\t\telUl.querySelector('a.top-active, .a.top-active')?.classList.remove('top-active');\n\t\t\t}\n\n\t\t\tif (elItem) {\n\t\t\t\telItem.classList.add('top-active');\n\t\t\t}\n\n\t\t\te.stopPropagation();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// клик по фону меню\n\t\tif (e.target.matches('.top-popup-wrapper')) {\n\t\t\tconst elPopup = e.target;\n\n\t\t\tWorker.close(elPopup, true);\n\n\t\t\te.stopPropagation();\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Глобальный обработчик кликов\n\t *\n\t * Обрабатывает клики внутри Popup\n\t */\n\tprivate static onclick(e: Event): void {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\t// элементы меню, клик по которым должен его закрыть\n\t\tconst elCloser = e.target.closest<HTMLElement>('.closer, a, .a, .top-button');\n\t\tif (elCloser) {\n\t\t\t// меню\n\t\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\n\t\t\t// клик вне меню\n\t\t\tif (!elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// элемент имеет модификатор, запрещаюущий закрытие меню по клику на него\n\t\t\tif (elCloser.matches('.top-popup-noCloser')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// deprecated, ссылки с href=\".\" запрещены, они должны быть заменены на .top-popup_listItem-button\n\t\t\tif (elCloser.getAttribute('href') === '.') {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\t// закрыть меню\n\t\t\tWorker.close(elPopup, true);\n\t\t}\n\t}\n\n\t/**\n\t * Глобальный обработчик нажатия кнопки на клавиатуре\n\t */\n\tprivate static onkeydown(e: KeyboardEvent): void {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\tlet elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\n\t\tif (!elPopup) {\n\t\t\telPopup = Worker.getPopupFromOpener(e.target)?.elPopup ?? null;\n\t\t}\n\n\t\t// нажатие не в меню\n\t\tif (!elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elUl = elPopup.querySelector<HTMLElement>('ul.top-popup_content');\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tWorker.close(elPopup, true);\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Enter':\n\t\t\t\t// атоматическое нажатие кнопок при нажатии Enter\n\t\t\t\tif (!elUl) {\n\t\t\t\t\tif (DOM.querySelectorVisible(elPopup, '.preloader')) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// deprecated, старый код на сайте\n\t\t\t\t\tconst elBtn = DOM.querySelectorVisible(elPopup, '.top-popup_footer .go, .top-popup_footer [data-action]');\n\t\t\t\t\tif (elBtn instanceof HTMLElement) {\n\t\t\t\t\t\telBtn.click();\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Запуск клика последней кнопки, расположенной в footer'е Popup'а, нажатием клавиши Enter\n\t\t\t\t\tlet elFooterLastBtn = DOM.querySelectorVisibleLast(elPopup, '.top-popup_footer .top-button:focus');\n\t\t\t\t\tif (!elFooterLastBtn) elFooterLastBtn = DOM.querySelectorVisibleLast(elPopup, '.top-popup_footer .top-button');\n\t\t\t\t\tif (elFooterLastBtn instanceof HTMLElement) {\n\t\t\t\t\t\telFooterLastBtn.click();\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// перейти по ссылке по нажатию на Enter\n\t\t\t\t// данный функуционал игнорирует SPA\n\t\t\t\tconst elLink = DOM.querySelectorVisible(elPopup, 'li > a.top-active');\n\t\t\t\tif (elLink && elLink.getAttribute('href')) {\n\t\t\t\t\t// фокус может находиться на другой ссылке\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tlocation.href = elLink.getAttribute('href')!;\n\t\t\t\t}\n\n\t\t\t\t// кликнуть по элементу меню по нажатию на Enter\n\t\t\t\tconst elItem = elPopup.querySelector<HTMLElement>('li > .top-active');\n\t\t\t\tif (elItem instanceof HTMLElement) {\n\t\t\t\t\telItem.click();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\t// управление стрелками\n\t\t\tcase 'ArrowUp':\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tif (!elUl) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n\t\t\t\t\tconst elMoreVisible = DOM.querySelectorVisible(\n\t\t\t\t\t\telPopup,\n\t\t\t\t\t\t'ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active > .top-popup_listMore',\n\t\t\t\t\t);\n\n\t\t\t\t\tif (elMoreVisible) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}else if((e.target as HTMLElement).tagName === 'INPUT'){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tconst elItemActive = elPopup.querySelector<HTMLElement>('ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active')?.parentElement;\n\n\t\t\t\t// есть подменю\n\t\t\t\tif (e.key === 'ArrowRight' && elItemActive) {\n\t\t\t\t\t// const elItemMoreActive = elItemActive.querySelector<HTMLElement>('[data-top-popup].top-active');\n\t\t\t\t\t// if (elItemMoreActive) {\n\t\t\t\t\t// \treturn elItemMoreActive.click();\n\t\t\t\t\t// }\n\n\t\t\t\t\tconst elMore = elItemActive.querySelector<HTMLElement>('.top-active > .top-popup_listMore');\n\t\t\t\t\tif (elMore instanceof HTMLElement) {\n\t\t\t\t\t\treturn elMore.click();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst elsLiVisible = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li:not(.top-popup_liNoSelectable)');\n\t\t\t\tconst countLi = elsLiVisible.length;\n\n\t\t\t\tif (!countLi) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet index = -1;\n\t\t\t\tif (elItemActive) {\n\t\t\t\t\tindex = elsLiVisible.indexOf(elItemActive);\n\t\t\t\t}\n\n\t\t\t\tif (e.key === 'ArrowUp' || e.key === 'ArrowLeft') {\n\t\t\t\t\tindex--;\n\t\t\t\t} else {\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\t// это первый элемен, \"Назад\" должен закрывать окно\n\t\t\t\tif (e.key === 'ArrowLeft' && index === -1) {\n\t\t\t\t\tif (e.target.matches('input')) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Worker.close(elPopup, true);\n\t\t\t\t}\n\n\t\t\t\t// это последний элемен, \"Вперед\" не должен ни чего делать\n\t\t\t\tif (e.key === 'ArrowRight' && index === countLi) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (index < 0) {\n\t\t\t\t\tindex = countLi - 1;\n\t\t\t\t}\n\n\t\t\t\tif (index > countLi - 1) {\n\t\t\t\t\tindex = 0;\n\t\t\t\t}\n\n\t\t\t\telPopup.querySelectorAll('ul.top-popup_content > li > .top-active').forEach(el => el.classList.remove('top-active'));\n\t\t\t\telsLiVisible[index].querySelector(':scope > a, :scope > .a')?.classList.add('top-active');\n\n\t\t\t\tWorker.scrollToActive(elPopup);\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n}\n\nexport default GlobalEvents;\n","import Core from '@/core/core/core';\nimport Component from '@/components/component';\nimport DOM from '@/core/utils/dom';\nimport Worker from '@/components/popup/lib/worker';\nimport GlobalEvents from '@/components/popup/lib/popup.globalEvents';\n\nimport css from '@/components/popup/popup/style/popup.css?inline';\nimport cssM from '@/components/popup/popup/style/popup.m.css?inline';\nimport cssPC from '@/components/popup/popup/style/popup.pc.css?inline';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { OpenerProps } from '@/components/popup/popup/opener/types';\n\nCore.insertStyleToPage(css);\nCore.insertStyleToPage(cssM, 'm');\nCore.insertStyleToPage(cssPC, 'pc');\n\nexport interface PopupOptions {\n\tpopup?: string,\n\tid?: string,\n\tp?: number,\n\tnotch?: boolean,\n\tclass?: string,\n\tposBy?: 'left' | 'right' | 'fixed' | Element,\n\tfrontSelector?: string,\n\tinvertX?: boolean,\n\topenByHover?: boolean,\n\tuseOriginal?: boolean,\n\ttransitionDuration?: number,\n\tisFullScreen?: boolean,\n}\n\n/**\n * Основной объект js компонента TopPopup\n *\n * Добавляет jQuery события на this.el, если jQuery загружен:\n *\n * - aftershow.top-menu-popup\n * - afterclose.top-menu-popup\n */\nexport class TopLibPopup<T extends Record<string, any> | undefined = undefined> extends Component {\n\n\tstatic componentName = 'TopPopup';\n\n\tdeclare el: HTMLElement & { __TopPopupOpenerProps: OpenerProps<T> }; // элемент, вызвавший открытие Popup\n\telActiveByDefault: boolean | undefined; // элемент уже имеет класс top-active перед открытием окна\n\telPopup: HTMLElement | undefined; // Popup .top-popup-wrapper\n\telPopupInner: HTMLElement | undefined; // контентная часть Popup .top-popup\n\telPopupHeader: HTMLElement | undefined | null;\n\telPopupWidget: HTMLElement | undefined | null;\n\telPopupBody: HTMLElement | undefined | null;\n\telPopupFooter: HTMLElement | undefined | null;\n\telFront: HTMLElement | undefined | null;\n\n\t/**\n\t * Для openerIsInput фокусировка срабатывает при входе в поле ввода\n\t *\n\t * Фокусировка на сам Popup не производится\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/combobox_role\n\t */\n\topenerIsInput = false;\n\n\tpopupParent: TopLibPopup | undefined;\n\n\t$: JQuery<HTMLElement> | undefined; // только если есть jQuery\n\n\telStartPosition: HTMLElement | undefined | null; // используется для useOriginal\n\tshift = {\n\t\ttop: 0,\n\t\tleft: 0,\n\t};\n\tisClosed = false; // флаг того, что меню закрыто\n\tisFirstClick = true;\n\ttype: string | undefined; // selector или html\n\n\toptions: PopupOptions = {\n\t\tpopup: '', // selector, text\n\t\tp: 0, // положение меню (0 - над элементом, 1 - сверху, 2 - справа, 3 - снизу, 4 слева)\n\t\tnotch: false, // отображать ли клювик\n\n\t\tclass: '', // класс, добавляемый меню\n\n\t\tposBy: 'left', // способ привязки позиционирования меню (left/right - левый/правый край родителя, fixed - по документу)\n\t\tfrontSelector: '',\n\t\tinvertX: false, // базовая ордината - правая граница элемента, а не левая\n\t\topenByHover: false, // открывать при наведении\n\n\t\tuseOriginal: false, // использовать оригинальный шаблон, без клонирвоания (для сохранения состояния меню)\n\n\t\ttransitionDuration: 100, // значение прописано в css\n\n\t\tisFullScreen: false,\n\t};\n\n\tevents = {};\n\n\t/**\n\t * Создать Popup\n\t * @param el - элемент, открывающий меню\n\t * @param options\n\t */\n\tconstructor(el: HTMLElement, options: PopupOptions) {\n\t\tsuper();\n\n\t\tthis.init(TopLibPopup.componentName, el, options);\n\t}\n\n\tasync mount(): Promise<void> {\n\t\tif (!(this.el instanceof HTMLElement)) return;\n\t\tconst vueConnector = this.vueGetComponent();\n\n\t\tif (this.el.closest('.top-popup-wrapper')) this.popupParent = Worker.getPopup(this.el.closest('.top-popup-wrapper')!);\n\n\t\tawait this.mountJQuery();\n\n\t\tif (DOM.css(this.el, 'position') !== 'absolute') {\n\t\t\tthis.el.style.position = 'relative';\n\t\t}\n\n\t\tthis.el.dataset.topPopupOpened = 'opened';\n\t\tthis.elActiveByDefault = this.el.classList.contains('top-active');\n\t\tthis.el.classList.add('top-active');\n\n\t\tthis.openerIsInput = this.el.classList.contains('top-input');\n\n\t\t// todo: удалить после переписать TopProjectSelector на vue\n\t\tif (this.el.classList.contains('top-input-project_name')) {\n\t\t\tthis.openerIsInput = false;\n\t\t}\n\n\t\tif (this.openerIsInput) {\n\t\t\tconst elInput = this.el.querySelector('input');\n\t\t\tif (elInput && !elInput['__popupOnBlur']) {\n\t\t\t\telInput['__popupOnBlur'] = true;\n\n\t\t\t\telInput.addEventListener('blur', e => {\n\t\t\t\t\t// элемент один, экземпляры popup разные\n\t\t\t\t\tWorker.getPopupFromOpener(this.el)?.close();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (vueConnector) {\n\t\t\t// компонент vue Popup\n\t\t\tthis.type = 'vue';\n\n\t\t\tthis.options.popup = '';\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup);\n\t\t} else if (this.options.popup?.match(/^[#.]/)) {\n\t\t\t// selector\n\t\t\tthis.type = 'selector';\n\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.template`) || undefined;\n\t\t} else {\n\t\t\t// html\n\t\t\tthis.type = 'html';\n\n\t\t\tif (this.options.useOriginal) {\n\t\t\t\tthrow ('Option useOriginal not allowed for text templates');\n\t\t\t}\n\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup ?? '');\n\t\t}\n\n\t\tif (!this.elPopup || vueConnector?.opened) {\n\t\t\t// возможно шаблон не найден, так как он используется в уже открытом меню\n\t\t\tif (this.options.useOriginal || vueConnector?.opened) {\n\t\t\t\t// закрыть открытое меню\n\t\t\t\tif (vueConnector?.opened) {\n\t\t\t\t\tthis.elPopup = vueConnector.popup.elPopup;\n\t\t\t\t} else {\n\t\t\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.top-popup-wrapper-shown`) || undefined;\n\t\t\t\t}\n\n\t\t\t\tif (this.elPopup) {\n\t\t\t\t\tthis.el.dataset.topPopupOpened = '';\n\n\t\t\t\t\tif (!this.elActiveByDefault) {\n\t\t\t\t\t\tthis.el.classList.remove('top-active');\n\t\t\t\t\t}\n\n\t\t\t\t\tWorker.close(this.elPopup);\n\n\t\t\t\t\t// повторит попытку открыть меню\n\t\t\t\t\tsetTimeout(() => this.mount(), this.options.transitionDuration);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow ('Option useOriginal state allowed only elements .template');\n\t\t\t}\n\n\t\t\t// возможно вместо шаблона используется другой элемент\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}:not(.top-popup-wrapper)`) || undefined;\n\t\t}\n\n\t\tif (!this.elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.useOriginal) {\n\t\t\tthis.elStartPosition = this.elPopup.closest<HTMLElement>('.top-popup-el-start-position');\n\t\t\tif (!this.elStartPosition) {\n\t\t\t\tthis.elStartPosition = DOM.wrap(this.elPopup, 'i');\n\t\t\t\tthis.elStartPosition.classList.add('top-popup-el-start-position', 'hidden');\n\t\t\t}\n\t\t} else {\n\t\t\tthis.elPopup = this.elPopup.cloneNode(true) as HTMLElement;\n\n\t\t\t// вывод в меню копии произвольного элемента\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template')) {\n\t\t\t\tthis.elPopup.classList.remove('hidden');\n\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\n\t\t\t\t}\n\n\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\n\t\t\t}\n\n\t\t\tif (this.type === 'html') {\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\n\n\t\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// вложенный Popup\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template') || this.type === 'html' || this.type === 'vue') {\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '[data-top-popup]').forEach(el => {\n\t\t\t\t\tif (el instanceof HTMLElement) el.dataset.topPopupPosBy = 'fixed';\n\t\t\t\t});\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '.top-popup-wrapper').forEach(el => el.remove());\n\t\t\t}\n\t\t}\n\n\t\tWorker.decoratorBeforeOpen(this);\n\n\t\tif (vueConnector) {\n\t\t\tthis.options.class = vueConnector.classRef.value;\n\t\t\tif (vueConnector.transitionDurationRef.value !== undefined) {\n\t\t\t\tthis.options.transitionDuration = vueConnector.transitionDurationRef.value;\n\n\t\t\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\t\t\tthis.elPopup.style.setProperty(\n\t\t\t\t\t\t'--top-popup-transition-delay',\n\t\t\t\t\t\tthis.options.transitionDuration + 'ms',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.elPopupInner = document.createElement('div');\n\t\tthis.elPopupInner.classList.add('top-popupPanel', 'top-popup');\n\n\t\twhile (this.elPopup.firstChild) {\n\t\t\tthis.elPopupInner.appendChild(this.elPopup.firstChild);\n\t\t}\n\n\t\tthis.elPopup.append(this.elPopupInner);\n\n\t\tthis.elPopup.classList.add('top-popup-wrapper');\n\n\t\tif (this.options.class) {\n\t\t\tconst classes = this.options.class.split(' ');\n\n\t\t\tthis.elPopup.classList.add(...classes);\n\t\t}\n\n\t\tif (this.options.notch) {\n\t\t\tthis.elPopup.classList.add('with_notch');\n\n\t\t\tthis.elPopup.insertAdjacentHTML('beforeend', '<i class=\"notch notch-border\"></i><i class=\"notch\"></i>');\n\t\t}\n\n\t\tawait this.vueOpen();\n\n\t\tthis.elPopupHeader = this.elPopupInner.querySelector<HTMLElement>('.top-popup_header');\n\t\tthis.elPopupWidget = this.elPopupInner.querySelector<HTMLElement>('.top-popup_widget');\n\t\tthis.elPopupBody = this.elPopupInner.querySelector<HTMLElement>('.top-popup_content');\n\t\tthis.elPopupFooter = this.elPopupInner.querySelector<HTMLElement>('.top-popup_footer');\n\n\t\tconst existsWidgetSearch = !!this.elPopup.querySelector('[data-widget=\"search\"]');\n\n\t\tif (this.options.isFullScreen && !existsWidgetSearch) {\n\t\t\tconst i18n = useI18n();\n\n\t\t\tif (!this.elPopupHeader && i18n.Common.Close) {\n\t\t\t\tthis.elPopupHeader = DOM.genEl('i', { class: 'top-popup_header' });\n\t\t\t\tthis.elPopupInner.prepend(this.elPopupHeader);\n\n\t\t\t\tthis.elPopupHeader.prepend(DOM.genEl('i', { class: 'a closer' }, i18n.Common.Close));\n\t\t\t\tthis.elPopupHeader.append(DOM.genEl('i', { class: 'top-popup_headerButton' }));\n\t\t\t}\n\t\t}\n\n\t\tDOM.storage(this.elPopup, TopLibPopup.componentName, this);\n\n\t\tif (this.options.frontSelector) {\n\t\t\tthis.elFront = document.querySelector<HTMLElement>(this.options.frontSelector);\n\t\t}\n\t\tif (!this.elFront) {\n\t\t\tthis.elFront = this.el.closest<HTMLElement>('.top-popup-front');\n\t\t}\n\t\tif (!this.elFront) {\n\t\t\tthis.elFront = document.body;\n\t\t}\n\n\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.width = this.el.offsetWidth + 'px';\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\n\t\t\tthis.elPopup.style.top = this.el.offsetTop + 'px';\n\t\t\tthis.elPopup.style.right = parseInt(this.el.style.right || '0') + 'px';\n\t\t\tthis.elPopup.style.bottom = parseInt(this.el.style.bottom || '0') + 'px';\n\t\t}\n\n\t\tthis.el.parentElement?.insertBefore(this.elPopup, this.el);\n\t\tthis.elPopup.classList.remove('template');\n\n\t\tif (this.options.invertX) {\n\t\t\tthis.elPopup.classList.add('invert-x');\n\t\t}\n\n\t\tlet fromTop = !!this.el.closest('.modal-header');\n\t\tif (!fromTop) {\n\t\t\tfromTop = !!this.el.closest('#top_panel');\n\t\t}\n\t\tif (!fromTop) {\n\t\t\tfromTop = !!this.el.closest('#secondmenu');\n\t\t}\n\t\tif (fromTop) {\n\t\t\tthis.elPopup.classList.add('p-from-top');\n\t\t}\n\n\t\t// появление с анимацией\n\t\tsetTimeout(() => this.elPopup?.classList.add('top-popup-wrapper-shown'));\n\n\t\tif (this.elFront && !this.elFront.matches('body')) {\n\t\t\tthis.elFront.append(this.elPopup);\n\n\t\t\tthis.shift.top = DOM.offset(this.el).top - this.el.offsetTop - DOM.offset(this.elFront).top;\n\t\t\tthis.shift.left = DOM.offset(this.el).left - this.el.offsetLeft - DOM.offset(this.elFront).left;\n\n\t\t\t// position() не учитывает margin, замечено для flex\n\t\t\tthis.shift.top -= parseInt(this.el.style['margin-top'] || 0);\n\t\t\tthis.shift.left -= parseInt(this.el.style['margin-left'] || 0);\n\n\t\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\t\tthis.elPopup.style.top = parseInt(this.elPopup.style.top || '0') + this.shift.top + 'px';\n\t\t\t\tthis.elPopup.style.left = parseInt(this.elPopup.style.left || '0') + this.shift.left + 'px';\n\t\t\t}\n\t\t}\n\n\t\tif (this.$ && Core.$) {\n\t\t\tthis.$.trigger('aftershow.top-menu-popup', [Core.$(this.elPopup)]);\n\t\t}\n\n\t\tthis.recalcPosition();\n\n\t\tthis.elPopup.setAttribute('tabindex', '0');\n\t\tthis.focus();\n\n\t\tWorker.decoratorAfterOpen(this);\n\n\t\tthis.mountEvents();\n\t}\n\n\tasync mountJQuery() {\n\t\tif (!Core.$) return;\n\n\t\tthis.$ = Core.$(this.el);\n\t}\n\n\t/**\n\t * Выполнить фокусировку на нужный элемент после открытия окна\n\t */\n\tfocus(): void {\n\t\tlet el: Element | null;\n\n\t\tif (this.elPopup) {\n\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup-autofocus');\n\n\t\t\t// поле ввода\n\t\t\tif (!el) {\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, ':read-write, select:not(:disabled)');\n\t\t\t}\n\n\t\t\t// кнопка\n\t\t\tif (!el) {\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup_footer .top-button');\n\t\t\t}\n\n\t\t\tif (!el) {\n\t\t\t\tel = this.elPopup;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @see this.openerIsInput\n\t\t\t */\n\t\t\tif (!this.openerIsInput) {\n\t\t\t\t// выполнить фокусировку сразу, для применения необходимых стилей\n\t\t\t\tif (el instanceof HTMLElement) el.focus();\n\n\t\t\t\t// выполнить фокусировку после завершения анимации открытия popup\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (el instanceof HTMLElement) el.focus();\n\t\t\t\t}, this.options.transitionDuration);\n\t\t\t}\n\t\t}\n\t}\n\n\tmountEvents(): void {\n\t\t// закрытие при клике вне контекстного меню\n\t\tthis.addEventListenerWithUnmount(document, 'mousedown', (e) => this.onMousedown(e as MouseEvent));\n\n\t\tif (this.openerIsInput) {\n\t\t\t/**\n\t\t\t * Фокусировка к моменту открытия popup уже установлена на поле ввода\n\t\t\t *\n\t\t\t * @see this.openerIsInput\n\t\t\t */\n\t\t\tthis.onFocusCloseOthers();\n\t\t} else {\n\t\t\tif (this.elPopup && this.elPopupInner) {\n\t\t\t\t// закрыть другие меню\n\t\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'focus', (e) => this.onFocus(e as FocusEvent));\n\n\t\t\t\t// автоматическое закрытие при отведении мыши\n\t\t\t\tif (this.options.openByHover) {\n\t\t\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\n\t\t\t\t\tthis.addEventListenerWithUnmount(this.elPopupInner, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// не скроллить страницу\n\t\tif (this.options.isFullScreen && this.elPopupBody) {\n\t\t\tthis.addEventListenerWithUnmount(this.elPopupBody, 'touchmove', (e) => this.onTouchmove(e as TouchEvent));\n\t\t}\n\t}\n\n\t/**\n\t * Обработка клика вне окна\n\t */\n\tprivate onMousedown(e: MouseEvent): void {\n\t\t// // не оригинальное событие\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\n\t\t// \treturn;\n\t\t// }\n\n\t\t// Popup уже закрыт\n\t\tif (!this.elPopup || !(e.target instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// клик на внешнем элементе\n\t\tif (!this.isFirstClick) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isFirstClick = false;\n\t\tsetTimeout(() => this.isFirstClick = true);\n\n\t\t// клик не основной кнопкой мыши\n\t\tif (e instanceof MouseEvent && e.button !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// открыто другое меню с posBy = fixed, сначала должно быть закрыто оно\n\t\tlet elPopupOpened = DOM.querySelectorVisibleLast(document.body, ':scope > .top-popup-wrapper');\n\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\t// открыто другое меню в top-popup-front, сначала должно быть закрыто оно\n\t\tif (e.target.closest('.top-popup-front')) {\n\t\t\telPopupOpened = DOM.querySelectorVisibleLast(e.target.closest('.top-popup-front')!, ':scope > .top-popup-wrapper');\n\n\t\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// клик на кнопке открытия этого меню\n\t\tif (e.target.closest(`[data-top-popup-id=\"${this.options.id}\"]`)) {\n\t\t\te.preventDefault();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// элемент формы, к которому идет переход\n\t\tlet toFormEl: HTMLElement | null = e.target.closest('input, select, textarea, button, [tabindex]');\n\t\tif (toFormEl === this.elPopup) toFormEl = null;\n\n\t\t// сохранить фокус после закрытия popup, если это не переход к другому элементу\n\t\tconst restoreFocus = !toFormEl;\n\n\t\t/**\n\t\t * Не сбравсывать уже установленный фокус\n\t\t */\n\t\tif (restoreFocus && this.openerIsInput) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\t// клик внутри этого меню\n\t\tif (this.elPopup.contains(e.target)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// клик вне родительского диалогового окна\n\t\tif (this.elPopup.closest('.ui-dialog') && !e.target.closest('.ui-dialog')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (Worker.decoratorIsIgnoreOuterClick(e)) {\n\t\t\treturn;\n\t\t}\n\n\t\tWorker.close(this.elPopup, restoreFocus);\n\t}\n\n\t/**\n\t * Произошла фокусировка на этот popup\n\t */\n\tprivate onFocus(e: FocusEvent): void {\n\t\t// // не оригинальное событие\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\n\t\t// \treturn;\n\t\t// }\n\n\t\tif (e.target instanceof Element && e.target.matches('input')) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.onFocusCloseOthers();\n\t}\n\n\t/**\n\t * Закрыть другие Popup при фокусе на элемент формы в текущем\n\t */\n\tprivate onFocusCloseOthers(): void {\n\t\t// это окно уже закрывается\n\t\tif (this.isClosed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elsPopups = Worker.getAllVisible();\n\t\telsPopups.forEach(elPopup => {\n\t\t\t// фокус внутри этого окна\n\t\t\tif (this.elPopup?.contains(elPopup)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// это Popup из которого был открыт Popup с фокусом\n\t\t\t// глубина вложенности: до 3 подменю\n\t\t\tif (\n\t\t\t\tthis.popupParent?.elPopup === elPopup ||\n\t\t\t\tthis.popupParent?.popupParent?.elPopup === elPopup\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tWorker.close(elPopup);\n\t\t});\n\t}\n\n\t/**\n\t * Закрыть Popup при отведении мыши\n\t */\n\tprivate onMouseleave(_e: MouseEvent): void {\n\t\tsetTimeout(() => {\n\t\t\tif (this.elPopupInner && this.elPopupInner.matches(':hover') || !this.elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tWorker.close(this.elPopup);\n\t\t}, 100);\n\t}\n\n\t/**\n\t * Контроль положения Popup при fixed позиционировании\n\t */\n\tprivate onResize(): void {\n\t\t// на android при вызове метода append сбрасывается фокус с input внутри this.elPopup\n\t\tif (this.elPopup && this.elPopup.parentElement !== document.body) {\n\t\t\tdocument.body.append(this.elPopup);\n\t\t}\n\n\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.top = DOM.offset(this.el).top + 'px';\n\t\t\tthis.elPopup.style.left = DOM.offset(this.el).left + 'px';\n\t\t}\n\t}\n\n\tunmount(): void {\n\t\tsuper.unmount();\n\n\t\tif (this.el instanceof HTMLElement) this.el.dataset.topPopupOpened = '';\n\t\tif (!this.elActiveByDefault) {\n\t\t\tthis.el.classList.remove('top-active');\n\t\t}\n\n\t\tlet style = this.el.getAttribute('style');\n\t\tif (style) {\n\t\t\tstyle = style.replace(/position:[^;]*;?/g, '');\n\t\t\tthis.el.setAttribute('style', style);\n\t\t}\n\t}\n\n\t// контроль за положением Popup, чтобы оно не вылезало за пределы документа\n\trecalcPosition(pForce?: typeof this.options.p): void {\n\t\tif (!(this.elPopup instanceof HTMLElement)) return;\n\n\t\tlet p = pForce ?? this.options.p;\n\t\tlet leftPos: number;\n\n\t\tif (this.el instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\n\n\t\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\n\t\t\tthis.elPopup.classList.add('p' + p);\n\n\t\t\tswitch (this.options.posBy) {\n\t\t\t\tcase 'left':\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\n\t\t\t\t\tleftPos += this.shift.left;\n\t\t\t\t\tthis.elPopup.style.left = leftPos + 'px';\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'right':\n\t\t\t\t\tif (!(this.el.offsetParent instanceof HTMLElement)) break;\n\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\n\t\t\t\t\tthis.elPopup.style.right = this.el.offsetParent.offsetWidth - this.el.offsetWidth - leftPos + 'px';\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'fixed':\n\t\t\t\t\tthis.addEventListenerWithUnmount(window, 'resize', () => this.onResize());\n\n\t\t\t\t\tthis.onResize();\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.options.posBy?.append(this.elPopup);\n\t\t\t}\n\t\t}\n\n\t\t// контроль за пложением Popup, чтобы оно не вылезало за пределы документа\n\t\tconst boundingClientRect = this.elPopup.getBoundingClientRect();\n\t\tthis.elPopup.style.setProperty('--top-popup-height', this.elPopup.offsetHeight + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-right-bounding', boundingClientRect.right + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-bottom-bounding', boundingClientRect.bottom + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-top', boundingClientRect.top + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-left', boundingClientRect.left + 'px');\n\n\t\tif (this.elPopupInner instanceof HTMLElement) {\n\t\t\tthis.elPopupInner.style.maxWidth = 'unset';\n\t\t\tthis.elPopupInner.style.maxHeight = 'unset';\n\t\t}\n\n\t\t// выходит ли popup за экран с конкретного края\n\t\tconst out = {\n\t\t\ttop: false,\n\t\t\tright: false,\n\t\t\tbottom: false,\n\t\t\tleft: false,\n\t\t};\n\n\t\t// выходит ли popup за экран с конкретного края, если применено инвертирование\n\t\tconst outWithInvert = {\n\t\t\ttop: false,\n\t\t\tright: false,\n\t\t\tbottom: false,\n\t\t\tleft: false,\n\t\t};\n\n\t\t// имеет ли смысл прикреплять окно к другой стороне кнопки\n\t\tlet canUseInvertX = boundingClientRect.left > window.innerWidth / 2;\n\t\tlet canUseInvertY = boundingClientRect.top > window.innerHeight / 2;\n\n\t\tif (p === 4) {\n\t\t\tcanUseInvertX = !canUseInvertX;\n\t\t}\n\n\t\tif (p === 1) {\n\t\t\tcanUseInvertY = !canUseInvertY;\n\t\t}\n\n\t\tconst contentBoundingClientRect = this.elPopupInner?.getBoundingClientRect();\n\n\t\tlet contentRight: number;\n\t\tlet contentBottom: number;\n\n\t\tconst margin = DOM.cssNumber(this.elPopup, '--top-popup-offset');\n\t\tconst elHeight = this.el.offsetHeight;\n\t\tconst elWidth = this.el.offsetWidth;\n\n\t\tif (contentBoundingClientRect) {\n\t\t\tcontentRight = window.innerWidth - contentBoundingClientRect.right;\n\t\t\tcontentBottom = window.innerHeight - contentBoundingClientRect.bottom;\n\n\t\t\tif (contentBoundingClientRect.top < margin) {\n\t\t\t\tout.top = true;\n\n\t\t\t\tif (contentBoundingClientRect.top < margin * 2 - contentBoundingClientRect.height + elHeight) {\n\t\t\t\t\toutWithInvert.top = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (contentRight < margin) {\n\t\t\t\tout.right = true;\n\n\t\t\t\tif (contentRight < margin * 2 - contentBoundingClientRect.width + elWidth) {\n\t\t\t\t\toutWithInvert.right = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (contentBottom < margin) {\n\t\t\t\tout.bottom = true;\n\n\t\t\t\tif (contentBottom < margin * 2 - contentBoundingClientRect.height + elHeight) {\n\t\t\t\t\toutWithInvert.bottom = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (contentBoundingClientRect.left < margin) {\n\t\t\t\tout.left = true;\n\n\t\t\t\tif (contentBoundingClientRect.left < margin * 2 - contentBoundingClientRect.width + elHeight) {\n\t\t\t\t\toutWithInvert.left = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Определить новое положение p, если popup не помещается\n\t\t *\n\t\t * Следует выполнять в два этапа:\n\t\t * - по горизонтали\n\t\t * - по вертикали\n\t\t */\n\t\tconst genP = (axis: 'x' | 'y', p: number) => {\n\t\t\t// проверяем горизонталь\n\t\t\tif (axis === 'x') {\n\t\t\t\tif (!out.right && !out.left) return p;\n\n\t\t\t\tif (p === 1 || p === 3) {\n\t\t\t\t\tif (!outWithInvert.right && !outWithInvert.left && canUseInvertX) return p;\n\t\t\t\t}\n\n\t\t\t\tif (out.right && (p === 0 || p === 2) && canUseInvertX) {\n\t\t\t\t\tp = 4;\n\t\t\t\t}\n\n\t\t\t\tif (out.left && (p === 0 || p === 4) && canUseInvertX) {\n\t\t\t\t\tp = 2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// проверяем вертикаль\n\t\t\tif (axis === 'y') {\n\t\t\t\t// не помещается и можно использовать инвертирование\n\t\t\t\tif (!out.top && !out.bottom) return p;\n\n\t\t\t\tif (p === 2 || p === 4) {\n\t\t\t\t\tif (!outWithInvert.top && !outWithInvert.bottom && canUseInvertY) return p;\n\t\t\t\t}\n\n\t\t\t\tif (out.top && (p === 0 || p === 1) && canUseInvertY) {\n\t\t\t\t\tp = 3;\n\t\t\t\t}\n\n\t\t\t\tif (out.bottom && canUseInvertY) {\n\t\t\t\t\tp = 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn p;\n\t\t};\n\n\t\t/**\n\t\t * Приоритет определения `p` по осям зависит от начального значения `p`\n\t\t *\n\t\t * Пытаемся сохранить выбранную ось: X или Y\n\t\t */\n\t\tlet axis: Array<'x' | 'y'> = ['x', 'y'];\n\t\tif (p === 0 || p === 1 || p === 3) axis = ['y', 'x'];\n\n\t\tlet newP = p ?? 0;\n\t\taxis.forEach((axisI) => {\n\t\t\tnewP = genP(axisI, newP);\n\t\t});\n\t\tp = newP;\n\n\t\tif (out.bottom && (p === 2 || p === 4) && canUseInvertY) {\n\t\t\t// меню справа может перемещаться вверх, только если есть место слева\n\t\t\tthis.elPopup.classList.add('invert-y');\n\t\t}\n\n\t\tif (out.right && (p === 0 || p === 1 || p === 3)) {\n\t\t\tthis.elPopup.classList.add('invert-x');\n\t\t}\n\n\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\n\t\tthis.elPopup.classList.add('p' + p);\n\n\t\tif (this.elPopupInner instanceof HTMLElement) {\n\t\t\tthis.elPopupInner.style.maxWidth = '';\n\t\t\tthis.elPopupInner.style.maxHeight = '';\n\t\t}\n\n\t\t// if (this.elPopupBody instanceof HTMLElement) {\n\t\t// \t// отобразить popup по вертикали с другой стороны, если с другой стороны больше места\n\t\t// \tconst hasScroll = this.elPopupBody.offsetHeight < this.elPopupBody.scrollHeight;\n\t\t// \tvd(this.elPopupBody.scrollHeight);\n\t\t// \tvd(this.elPopupBody.offsetHeight);\n\t\t// \tif (hasScroll && pForce === undefined) {\n\t\t// \t\tconst contentBoundingClientRect = this.elPopupBody?.getBoundingClientRect();\n\t\t// \t\tif (\n\t\t// \t\t\tp === 1 && contentBoundingClientRect.top * 2 < contentBoundingClientRect.bottom ||\n\t\t// \t\t\tp === 3 && contentBoundingClientRect.bottom * 2 < contentBoundingClientRect.top\n\t\t// \t\t) {\n\t\t// \t\t\tthis.recalcPosition(p === 1 ? 3 : 1);\n\t\t//\n\t\t// \t\t\treturn;\n\t\t// \t\t}\n\t\t// \t}\n\t\t// }\n\n\t\tWorker.scrollToActive(this.elPopup);\n\t};\n\n\tonTouchmove(e: TouchEvent): void {\n\t\tif (e.currentTarget instanceof HTMLElement && e.target instanceof HTMLElement) {\n\t\t\t// разрешить горизональный скролл\n\t\t\tlet hasScrollX = e.currentTarget.scrollWidth > e.currentTarget.offsetWidth;\n\t\t\tif (hasScrollX) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.target.parentElement?.scrollWidth && e.target.parentElement?.offsetWidth) {\n\t\t\t\t// разрешить горизональный скролл\n\t\t\t\tlet hasScrollX2 = e.target.parentElement.scrollWidth > e.target.parentElement?.offsetWidth;\n\t\t\t\tif (hasScrollX2) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!e.currentTarget.matches('.has_scroll')) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t}\n\n\tclose(): void {\n\t\tif (this.isClosed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isClosed = true;\n\n\t\tif (this.$ && Core.$ && this.elPopup) {\n\t\t\tthis.$.trigger('afterclose.top-menu-popup', [Core.$(this.elPopup)]);\n\t\t}\n\n\t\tif (Worker.noClose) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.unmount();\n\n\t\tthis.elPopup?.classList.add('top-popup-wrapper-closed');\n\n\t\tsetTimeout(() => {\n\t\t\tthis.vueClose();\n\n\t\t\tif (!this.elPopup) return;\n\n\t\t\tif (this.options.useOriginal) {\n\t\t\t\tthis.elPopup.removeAttribute('style');\n\t\t\t\tthis.elPopup.classList.remove('top-popup-wrapper-shown', 'top-popup-wrapper-closed');\n\t\t\t\tthis.elPopup.classList.add('template');\n\t\t\t\tthis.elStartPosition?.append(this.elPopup);\n\n\t\t\t\tthis.elPopup.querySelector('div.top-popup_content.top-column')?.classList.remove('top-column');\n\t\t\t\tthis.elPopup.querySelector('.notch-border')?.remove();\n\t\t\t\tthis.elPopup.querySelector('.notch')?.remove();\n\n\t\t\t\tthis.elPopupInner?.replaceWith(...this.elPopupInner.childNodes);\n\n\t\t\t\tDOM.storageClear(this.elPopup);\n\t\t\t} else {\n\t\t\t\tDOM.storageClear(this.elPopup);\n\n\t\t\t\tthis.elPopup.remove();\n\t\t\t\tdelete this.elPopup;\n\t\t\t}\n\n\t\t\tconst elsPopups = Worker.getAllVisible();\n\t\t\tconst elPopupLast = elsPopups.length && elsPopups[elsPopups.length - 1];\n\n\t\t\tif (elPopupLast) {\n\t\t\t\tWorker.getPopup(elPopupLast).focus();\n\t\t\t} else {\n\t\t\t\tdocument.documentElement.classList.remove('with_popup');\n\t\t\t}\n\t\t}, this.options.transitionDuration);\n\t}\n\n\tasync vueOpen(): Promise<void> {\n\t\tawait this.vueGetComponent()?.onOpen(this);\n\t}\n\n\tvueClose(): void {\n\t\tthis.vueGetComponent()?.onClose(this);\n\t}\n\n\t// получить vueConnectors компонента Popup\n\tvueGetComponent() {\n\t\tif (this.el instanceof HTMLElement && this.options.id) return Worker.vueConnectors.get(this.options.id);\n\t}\n}\n\nGlobalEvents.init();\n"],"names":["Component","componentName","el","options","component","DOM","eventData","type","listener","_options","nodes","node","GlobalEvents","e","elUl","elItem","elPopup","Worker","elCloser","elBtn","elFooterLastBtn","elLink","elItemActive","elMore","elsLiVisible","countLi","index","Core","css","cssM","cssPC","TopLibPopup","vueConnector","elInput","classes","existsWidgetSearch","i18n","useI18n","fromTop","elPopupOpened","toFormEl","restoreFocus","_e","style","pForce","leftPos","boundingClientRect","out","outWithInvert","canUseInvertX","canUseInvertY","contentBoundingClientRect","contentRight","contentBottom","margin","elHeight","elWidth","genP","axis","p","newP","axisI","elsPopups","elPopupLast"],"mappings":"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"}