@topvisor/ui 1.4.1-projectSelector.1 → 1.4.1-projectSelector.3

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 (31) hide show
  1. package/.chunks/{policy.vue_vue_type_style_index_0_lang-ClaW4X74.es.js → policy.vue_vue_type_style_index_0_lang-RJnqOsjD.es.js} +178 -167
  2. package/.chunks/{policy.vue_vue_type_style_index_0_lang-ClaW4X74.es.js.map → policy.vue_vue_type_style_index_0_lang-RJnqOsjD.es.js.map} +1 -1
  3. package/.chunks/policy.vue_vue_type_style_index_0_lang-dgZjCI-7.amd.js +2 -0
  4. package/.chunks/{policy.vue_vue_type_style_index_0_lang-CO-f4TwZ.amd.js.map → policy.vue_vue_type_style_index_0_lang-dgZjCI-7.amd.js.map} +1 -1
  5. package/formsExt/formsExt.amd.js +1 -1
  6. package/formsExt/formsExt.amd.js.map +1 -1
  7. package/formsExt/formsExt.js +33 -33
  8. package/formsExt/formsExt.js.map +1 -1
  9. package/icomoon/Read Me.txt +1 -1
  10. package/icomoon/Topvisor icons.json +361 -131
  11. package/icomoon/demo.html +141 -1
  12. package/icomoon/fonts/Topvisor-2.eot +0 -0
  13. package/icomoon/fonts/Topvisor-2.svg +11 -1
  14. package/icomoon/fonts/Topvisor-2.ttf +0 -0
  15. package/icomoon/fonts/Topvisor-2.woff +0 -0
  16. package/icomoon/selection.json +1 -1
  17. package/icomoon/style.css +35 -5
  18. package/package.json +1 -1
  19. package/project/project.amd.js +1 -1
  20. package/project/project.amd.js.map +1 -1
  21. package/project/project.js +778 -730
  22. package/project/project.js.map +1 -1
  23. package/src/components/formsExt/selector2/selector2.vue.d.ts +2 -0
  24. package/src/components/formsExt/selector2/types.d.ts +18 -4
  25. package/src/components/project/groupSelector/groups/groups.vue.d.ts +7 -1
  26. package/src/components/project/projectSelector/cache.d.ts +4 -0
  27. package/src/components/project/projectSelector/projectSelector.vue.d.ts +25 -16
  28. package/src/components/project/projectSelector/types.d.ts +3 -4
  29. package/src/components/project/projectSelector/utils.d.ts +7 -10
  30. package/.chunks/policy.vue_vue_type_style_index_0_lang-CO-f4TwZ.amd.js +0 -2
  31. package/src/components/project/projectSelector/stories/mocks/projects.d.ts +0 -10
@@ -3,21 +3,22 @@
3
3
  const fileNames = ['../assets/project.css'].map(fileName => import.meta.resolve(fileName));
4
4
  _autoloadCSSCore.insertCSSLinkToPage(fileNames, true);
5
5
 
6
- import { defineComponent as G, mergeModels as M, useModel as B, computed as w, createElementBlock as T, openBlock as v, createBlock as j, unref as p, withCtx as C, Fragment as q, renderList as se, normalizeClass as Z, createElementVNode as L, toDisplayString as A, createVNode as E, createTextVNode as N, toValue as ke, ref as V, watch as P, createCommentVNode as _, reactive as _e, resolveComponent as Ee, onMounted as Ue, withModifiers as D, isRef as Ce, mergeProps as Ge, withKeys as je, nextTick as Fe, resolveDirective as We, withDirectives as ze, resolveDynamicComponent as Je, renderSlot as Ye, shallowRef as He, createSlots as Qe } from "vue";
7
- import { u as b, C as J, e as Q, q as fe, d as Xe } from "../.chunks/forms-BAUgA7Ct.es.js";
8
- import { _ as he, b as ye, a as Ze } from "../.chunks/popupHint.vue_vue_type_style_index_0_lang-BIWw5zUX.es.js";
9
- import { a as et, _ as Ie, b as Se, c as Ke, I as le } from "../.chunks/policy.vue_vue_type_style_index_0_lang-ClaW4X74.es.js";
10
- import { u as tt } from "../.chunks/utils-BYaZxGC1.es.js";
11
- import { getSearcherGIcon as ot, getLangLabel as lt, getDeviceGIcon as nt } from "../utils/searchers.js";
6
+ import { defineComponent as L, mergeModels as E, useModel as w, computed as P, createElementBlock as T, openBlock as y, createBlock as C, unref as p, withCtx as j, Fragment as D, renderList as ce, normalizeClass as te, createElementVNode as O, toDisplayString as b, createVNode as K, createTextVNode as W, toValue as Ae, ref as _, watch as V, createCommentVNode as M, reactive as Re, resolveComponent as Ue, onMounted as ze, withModifiers as F, isRef as Be, mergeProps as Ne, withKeys as be, nextTick as Ye, resolveDirective as Qe, withDirectives as Xe, resolveDynamicComponent as Ze, renderSlot as et, shallowRef as tt, createSlots as ot } from "vue";
7
+ import { u as A, C as Y, e as Z, q as ve, d as at } from "../.chunks/forms-BAUgA7Ct.es.js";
8
+ import { _ as xe, b as ke, a as lt } from "../.chunks/popupHint.vue_vue_type_style_index_0_lang-BIWw5zUX.es.js";
9
+ import { a as nt, _ as Ce, b as Te, c as De, I as le } from "../.chunks/policy.vue_vue_type_style_index_0_lang-RJnqOsjD.es.js";
10
+ import { u as rt } from "../.chunks/utils-BYaZxGC1.es.js";
11
+ import { getSearcherGIcon as it, getLangLabel as dt, getDeviceGIcon as st } from "../utils/searchers.js";
12
12
  import "../.chunks/core-BE_-rKvW.es.js";
13
13
  import "../.chunks/dialogs.vue_vue_type_script_setup_true_lang-DMhcuiHP.es.js";
14
- import { g as Te } from "../.chunks/field-CyyFzM-Y.es.js";
15
- import { validUrl as Ae } from "../utils/check.js";
16
- import { storage as Y } from "../utils/dom.js";
17
- import { TopPopupWorker as at } from "../popup/worker.js";
18
- const rt = { class: "top-competitorSelector" }, it = { class: "top-ellipsis1" }, io = /* @__PURE__ */ G({
14
+ import { g as he, a as ge } from "../.chunks/field-CyyFzM-Y.es.js";
15
+ import { validUrl as we } from "../utils/check.js";
16
+ import { ellipsis as ut } from "../utils/string.js";
17
+ import { storage as Q } from "../utils/dom.js";
18
+ import { TopPopupWorker as ct } from "../popup/worker.js";
19
+ const ft = { class: "top-competitorSelector" }, gt = { class: "top-ellipsis1" }, yo = /* @__PURE__ */ L({
19
20
  __name: "competitorSelector",
20
- props: /* @__PURE__ */ M({
21
+ props: /* @__PURE__ */ E({
21
22
  modelValue: {},
22
23
  items: {},
23
24
  showSelectAllItem: { type: Boolean, default: !0 }
@@ -27,64 +28,64 @@ const rt = { class: "top-competitorSelector" }, it = { class: "top-ellipsis1" },
27
28
  }),
28
29
  emits: ["update:modelValue"],
29
30
  setup(e) {
30
- const t = e, o = B(e, "modelValue"), l = w(() => {
31
+ const t = e, a = w(e, "modelValue"), o = P(() => {
31
32
  if (t.showSelectAllItem)
32
33
  return {
33
34
  icon: "",
34
- title: b().Common.Select_all,
35
+ title: A().Common.Select_all,
35
36
  value: "all",
36
37
  content: ""
37
38
  };
38
39
  });
39
- return (a, n) => (v(), T("div", rt, [
40
- p(J).state.isMobile ? (v(), j(he, { key: 0 }, {
41
- opener: C(() => [
42
- E(Q, {
40
+ return (r, l) => (y(), T("div", ft, [
41
+ p(Y).state.isMobile ? (y(), C(xe, { key: 0 }, {
42
+ opener: j(() => [
43
+ K(Z, {
43
44
  class: "top-competitorSelector_opener",
44
45
  color: "theme",
45
46
  icon: "",
46
47
  icon2: ""
47
48
  }, {
48
- default: C(() => [
49
- N(A(e.items.find((r) => r.value === o.value?.[0])?.content), 1)
49
+ default: j(() => [
50
+ W(b(e.items.find((n) => n.value === a.value?.[0])?.content), 1)
50
51
  ]),
51
52
  _: 1
52
53
  })
53
54
  ]),
54
- contentList: C(() => [
55
- (v(!0), T(q, null, se(e.items, (r) => (v(), j(ye, {
56
- class: Z({
57
- "top-active": o.value?.includes(r.value)
55
+ contentList: j(() => [
56
+ (y(!0), T(D, null, ce(e.items, (n) => (y(), C(ke, {
57
+ class: te({
58
+ "top-active": a.value?.includes(n.value)
58
59
  }),
59
- "data-top-icon": r.icon,
60
- title: r.title,
61
- onClick: () => o.value = [r.value]
60
+ "data-top-icon": n.icon,
61
+ title: n.title,
62
+ onClick: () => a.value = [n.value]
62
63
  }, {
63
- default: C(() => [
64
- L("span", it, A(r.content), 1)
64
+ default: j(() => [
65
+ O("span", gt, b(n.content), 1)
65
66
  ]),
66
67
  _: 2
67
68
  }, 1032, ["class", "data-top-icon", "title", "onClick"]))), 256))
68
69
  ]),
69
70
  _: 1
70
- })) : (v(), j(et, {
71
+ })) : (y(), C(nt, {
71
72
  key: 1,
72
- modelValue: o.value,
73
- "onUpdate:modelValue": n[0] || (n[0] = (r) => o.value = r),
73
+ modelValue: a.value,
74
+ "onUpdate:modelValue": l[0] || (l[0] = (n) => a.value = n),
74
75
  items: e.items,
75
76
  isMultiple: !0,
76
77
  styling: "bar",
77
78
  canBeEmptyMultiple: !1,
78
- selectAllItem: l.value
79
+ selectAllItem: o.value
79
80
  }, null, 8, ["modelValue", "items", "selectAllItem"]))
80
81
  ]));
81
82
  }
82
- }), so = (e, t) => w(() => ke(e).filter((a) => a.on >= 0 || a.id === t).map((a) => ({
83
- value: a.id,
84
- title: a.url + ` [${a.id}]`,
85
- icon: a.id === ke(t) ? "" : "",
86
- content: a.name
87
- }))), O = -1, y = -2, ne = -1, dt = {
83
+ }), Io = (e, t) => P(() => Ae(e).filter((r) => r.on >= 0 || r.id === t).map((r) => ({
84
+ value: r.id,
85
+ title: r.url + ` [${r.id}]`,
86
+ icon: r.id === Ae(t) ? "" : "",
87
+ content: r.name
88
+ }))), R = -1, S = -2, ne = -1, mt = {
88
89
  0: "Yandex",
89
90
  1: "Google",
90
91
  4: "YouTube",
@@ -94,25 +95,25 @@ const rt = { class: "top-competitorSelector" }, it = { class: "top-ellipsis1" },
94
95
  9: "GoogleStore",
95
96
  20: "Yandex.com",
96
97
  21: "Yandex.com.tr"
97
- }, Be = {
98
- key: y,
98
+ }, Pe = {
99
+ key: S,
99
100
  name: "--",
100
- index: y
101
- }, Le = {
102
- key: y,
101
+ index: S
102
+ }, qe = {
103
+ key: S,
103
104
  name: "--",
104
- regions: [Be],
105
- regionByIndex: /* @__PURE__ */ new Map([[y, Be]])
106
- }, ae = {
107
- key: y,
105
+ regions: [Pe],
106
+ regionByIndex: /* @__PURE__ */ new Map([[S, Pe]])
107
+ }, re = {
108
+ key: S,
108
109
  name: "Autoselect",
109
- index: y
110
- }, ce = {
111
- key: y,
110
+ index: S
111
+ }, me = {
112
+ key: S,
112
113
  name: "Autoselect",
113
- regions: [ae],
114
- regionByIndex: /* @__PURE__ */ new Map([[y, ae]])
115
- }, be = {
114
+ regions: [re],
115
+ regionByIndex: /* @__PURE__ */ new Map([[S, re]])
116
+ }, $e = {
116
117
  countryCode: "00",
117
118
  depth: 1,
118
119
  device: 0,
@@ -120,205 +121,205 @@ const rt = { class: "top-competitorSelector" }, it = { class: "top-ellipsis1" },
120
121
  index: ne,
121
122
  lang: "ru",
122
123
  name: "Without region"
123
- }, st = () => (ae.name = b().Common.Autoselect, ae), ut = () => (st(), ce.name = b().Common.Autoselect, console.log(ce), ce), ct = () => (be.name = b().Keywords.Without_region, be), Oe = (e = !1, t = !1, o = []) => {
124
- let l;
125
- return e ? l = gt(o) : l = Re(o), t && l.set(y, ut()), l.size || l.set(y, Le), l;
126
- }, Re = (e, t = !0, o = [], l = !1) => {
127
- const a = /* @__PURE__ */ new Map();
128
- return e.forEach((n) => {
129
- if (!n.enabled || l && typeof n.key == "number" && n.key > 1) return;
130
- const r = { ...n };
131
- r.regionByIndex = /* @__PURE__ */ new Map(), n.regions && n.regions.forEach((u) => {
132
- if (t && !u.enabled) return;
133
- const c = { ...u };
134
- r.regionByIndex.set(c.index, c);
135
- }), !r.regionByIndex.size && o.length, // режим вывода ПС без регионов
136
- (!n.regions || // есть включенные регионы
137
- r.regionByIndex.size || // запрошен вывод конкретных ПС
138
- o.length) && typeof r.key == "number" && a.set(r.key, r);
139
- }), o.forEach((n) => {
140
- if (a.has(n)) return;
141
- const r = {
142
- key: n,
143
- name: dt[n],
124
+ }, pt = () => (re.name = A().Common.Autoselect, re), vt = () => (pt(), me.name = A().Common.Autoselect, console.log(me), me), ht = () => ($e.name = A().Keywords.Without_region, $e), Fe = (e = !1, t = !1, a = []) => {
125
+ let o;
126
+ return e ? o = yt(a) : o = We(a), t && o.set(S, vt()), o.size || o.set(S, qe), o;
127
+ }, We = (e, t = !0, a = [], o = !1) => {
128
+ const r = /* @__PURE__ */ new Map();
129
+ return e.forEach((l) => {
130
+ if (!l.enabled || o && typeof l.key == "number" && l.key > 1) return;
131
+ const n = { ...l };
132
+ n.regionByIndex = /* @__PURE__ */ new Map(), l.regions && l.regions.forEach((s) => {
133
+ if (t && !s.enabled) return;
134
+ const c = { ...s };
135
+ n.regionByIndex.set(c.index, c);
136
+ }), !n.regionByIndex.size && a.length, // режим вывода ПС без регионов
137
+ (!l.regions || // есть включенные регионы
138
+ n.regionByIndex.size || // запрошен вывод конкретных ПС
139
+ a.length) && typeof n.key == "number" && r.set(n.key, n);
140
+ }), a.forEach((l) => {
141
+ if (r.has(l)) return;
142
+ const n = {
143
+ key: l,
144
+ name: mt[l],
144
145
  regions: [],
145
146
  regionByIndex: /* @__PURE__ */ new Map()
146
147
  };
147
- a.set(r.key, r);
148
- }), a;
149
- }, gt = (e) => {
150
- const t = Re(e, !1, [0, 1], !0);
148
+ r.set(n.key, n);
149
+ }), r;
150
+ }, yt = (e) => {
151
+ const t = We(e, !1, [0, 1], !0);
151
152
  if (t.has(2)) {
152
- const o = t.get(2);
153
- o && (o.regionByIndex = /* @__PURE__ */ new Map());
153
+ const a = t.get(2);
154
+ a && (a.regionByIndex = /* @__PURE__ */ new Map());
154
155
  }
155
- return t.forEach((o) => {
156
- if (!o.regionByIndex) return;
157
- const l = { ...ct() };
158
- o.regionByIndex.set(l.index, l);
156
+ return t.forEach((a) => {
157
+ if (!a.regionByIndex) return;
158
+ const o = { ...ht() };
159
+ a.regionByIndex.set(o.index, o);
159
160
  }), t;
160
- }, ft = (e, t, o = []) => {
161
- const l = Oe(e, !1, o);
162
- let a;
163
- return l.forEach((n) => {
164
- if (!(t.searcher_key !== void 0 && t.searcher_key != n.key) && n.regions && (n.regions.forEach((r) => {
165
- if (!a && !(t.key !== void 0 && t.key != r.key) && !(t.index !== void 0 && t.index != r.index) && !(!e && (t.lang !== void 0 && t.lang != r.lang || t.device !== void 0 && t.device != r.device)))
166
- return r.searcher_key = n.key, a = r, !1;
167
- }), a))
161
+ }, It = (e, t, a = []) => {
162
+ const o = Fe(e, !1, a);
163
+ let r;
164
+ return o.forEach((l) => {
165
+ if (!(t.searcher_key !== void 0 && t.searcher_key != l.key) && l.regions && (l.regions.forEach((n) => {
166
+ if (!r && !(t.key !== void 0 && t.key != n.key) && !(t.index !== void 0 && t.index != n.index) && !(!e && (t.lang !== void 0 && t.lang != n.lang || t.device !== void 0 && t.device != n.device)))
167
+ return n.searcher_key = l.key, r = n, !1;
168
+ }), r))
168
169
  return !1;
169
- }), a;
170
- }, mt = tt(() => import("../.chunks/dialog_regionSelectorRegions-Btp9cfmF.es.js")), pt = (e, t) => {
171
- const o = b(), l = V(t.value.keys().next().value ?? y), a = w(() => {
172
- const n = /* @__PURE__ */ new Map();
173
- if (t.value.forEach((r) => {
174
- let u = {
175
- value: r.key,
176
- title: r.name
170
+ }), r;
171
+ }, St = rt(() => import("../.chunks/dialog_regionSelectorRegions-Btp9cfmF.es.js")), xt = (e, t) => {
172
+ const a = A(), o = _(t.value.keys().next().value ?? S), r = P(() => {
173
+ const l = /* @__PURE__ */ new Map();
174
+ if (t.value.forEach((n) => {
175
+ let s = {
176
+ value: n.key,
177
+ title: n.name
177
178
  };
178
- e.addSearcherIcon && (u.icon = ot(r.key)), n.set(r.key, u);
179
- }), e.addCompare && !n.has(y)) {
180
- const r = {
179
+ e.addSearcherIcon && (s.icon = it(n.key)), l.set(n.key, s);
180
+ }), e.addCompare && !l.has(S)) {
181
+ const n = {
181
182
  value: "",
182
183
  title: "--------------------",
183
184
  disabled: !0
184
185
  };
185
- n.set(r.value, r);
186
- const u = {
187
- value: O,
188
- title: o.Common.Compare
186
+ l.set(n.value, n);
187
+ const s = {
188
+ value: R,
189
+ title: a.Common.Compare
189
190
  };
190
- n.set(u.value, u);
191
+ l.set(s.value, s);
191
192
  }
192
- return n;
193
+ return l;
193
194
  });
194
195
  return {
195
- searcherKey: l,
196
- optionBySearcherKey: a
196
+ searcherKey: o,
197
+ optionBySearcherKey: r
197
198
  };
198
- }, vt = (e, t) => {
199
- const o = b(), l = V(y);
200
- e.modelValue.length === 1 && (l.value = e.modelValue[0]), l.value === y && (e.forFrequency ? l.value = t.value?.regionByIndex.values().next().value?.key ?? y : l.value = t.value?.regionByIndex.keys().next().value ?? y);
201
- const a = w(() => {
202
- const n = /* @__PURE__ */ new Map();
203
- return t.value.regionByIndex?.forEach((r) => {
204
- let u = r.name;
199
+ }, kt = (e, t) => {
200
+ const a = A(), o = _(S);
201
+ e.modelValue.length === 1 && (o.value = e.modelValue[0]), o.value === S && (e.forFrequency ? o.value = t.value?.regionByIndex.values().next().value?.key ?? S : o.value = t.value?.regionByIndex.keys().next().value ?? S);
202
+ const r = P(() => {
203
+ const l = /* @__PURE__ */ new Map();
204
+ return t.value.regionByIndex?.forEach((n) => {
205
+ let s = n.name;
205
206
  if (e.forFrequency) {
206
- const S = {
207
- value: r.key,
208
- title: u
207
+ const I = {
208
+ value: n.key,
209
+ title: s
209
210
  };
210
- n.has(r.key) || n.set(r.key, S);
211
+ l.has(n.key) || l.set(n.key, I);
211
212
  return;
212
213
  }
213
- r.device && (u += " (" + o.Common["Device_" + r.device] + ")");
214
- const c = lt(t.value.key || 0, r.lang ?? "");
215
- c && (u += " / " + c);
214
+ n.device && (s += " (" + a.Common["Device_" + n.device] + ")");
215
+ const c = dt(t.value.key || 0, n.lang ?? "");
216
+ c && (s += " / " + c);
216
217
  const f = {
217
- value: r.index,
218
- title: u,
219
- icon: r.device ? nt(r.device) : void 0
218
+ value: n.index,
219
+ title: s,
220
+ icon: n.device ? st(n.device) : void 0
220
221
  };
221
- n.set(r.index, f);
222
- }), n;
222
+ l.set(n.index, f);
223
+ }), l;
223
224
  });
224
- return P(a, (n, r) => {
225
- if (e.onlySearcher || l.value !== void 0 && n.get(l.value))
225
+ return V(r, (l, n) => {
226
+ if (e.onlySearcher || o.value !== void 0 && l.get(o.value))
226
227
  return;
227
- let u = n.keys().next().value;
228
- if (l.value === y || u === y) {
229
- l.value = u;
228
+ let s = l.keys().next().value;
229
+ if (o.value === S || s === S) {
230
+ o.value = s;
230
231
  return;
231
232
  }
232
- let c = r?.get(l.value)?.title || "", f = -1;
233
- for (const [S, i] of n.entries()) {
233
+ let c = n?.get(o.value)?.title || "", f = -1;
234
+ for (const [I, i] of l.entries()) {
234
235
  const g = i.title;
235
- if (typeof g != "string" || typeof S == "string")
236
+ if (typeof g != "string" || typeof I == "string")
236
237
  break;
237
238
  if (g === c) {
238
- u = S;
239
+ s = I;
239
240
  break;
240
241
  }
241
- const d = new RegExp(` \\((${o.Common.Device_1}|${o.Common.Device_2})\\)`);
242
- let s = c, m = 3;
243
- g.indexOf(s) === -1 && (s = c.replace(/^[^a-zа-я]/i, "").replace(d, ""), m--), g.indexOf(s) === -1 && (s = c.replace(/ \/.*/, ""), m--), g.indexOf(s) === -1 && (s = c.replace(/ \/.*/, ""), s = s.replace(/^[^a-zа-я]/i, "").replace(d, ""), m--), g.indexOf(s) !== -1 && (m <= f || (f = m, u = S));
242
+ const d = new RegExp(` \\((${a.Common.Device_1}|${a.Common.Device_2})\\)`);
243
+ let u = c, m = 3;
244
+ g.indexOf(u) === -1 && (u = c.replace(/^[^a-zа-я]/i, "").replace(d, ""), m--), g.indexOf(u) === -1 && (u = c.replace(/ \/.*/, ""), m--), g.indexOf(u) === -1 && (u = c.replace(/ \/.*/, ""), u = u.replace(/^[^a-zа-я]/i, "").replace(d, ""), m--), g.indexOf(u) !== -1 && (m <= f || (f = m, s = I));
244
245
  }
245
- l.value = u;
246
+ o.value = s;
246
247
  }), {
247
- regionIndex: l,
248
- optionByRegionIndex: a
248
+ regionIndex: o,
249
+ optionByRegionIndex: r
249
250
  };
250
- }, ht = (e, t, o) => {
251
- const l = V([]), a = () => {
251
+ }, Ct = (e, t, a) => {
252
+ const o = _([]), r = () => {
252
253
  if (e.onlySearcher && t.value) {
253
- l.value = Array.from(t.value.keys());
254
+ o.value = Array.from(t.value.keys());
254
255
  return;
255
256
  }
256
- let r = [];
257
+ let n = [];
257
258
  if (e.modelValue.length > 1)
258
- r = [...e.modelValue];
259
+ n = [...e.modelValue];
259
260
  else
260
261
  try {
261
- r = JSON.parse(
262
+ n = JSON.parse(
262
263
  localStorage.getItem("ui:project:regionSelector" + e.projectId + ":regionsIndexes")
263
264
  ) ?? [];
264
265
  } catch {
265
266
  }
266
- r.length && (r = r.filter((u) => o.value.has(u))), r.length || (r = Array.from(o.value)), l.value = [...r];
267
- }, n = () => {
268
- l.value.length ? localStorage.setItem("ui:project:regionSelector:" + e.projectId + ":regionsIndexes", JSON.stringify(l.value)) : localStorage.removeItem("ui:project:regionSelector:" + e.projectId + ":regionsIndexes");
267
+ n.length && (n = n.filter((s) => a.value.has(s))), n.length || (n = Array.from(a.value)), o.value = [...n];
268
+ }, l = () => {
269
+ o.value.length ? localStorage.setItem("ui:project:regionSelector:" + e.projectId + ":regionsIndexes", JSON.stringify(o.value)) : localStorage.removeItem("ui:project:regionSelector:" + e.projectId + ":regionsIndexes");
269
270
  };
270
- return P(l, () => {
271
- n();
272
- }), e.addCompare && a(), {
273
- regionsIndexes: l
271
+ return V(o, () => {
272
+ l();
273
+ }), e.addCompare && r(), {
274
+ regionsIndexes: o
274
275
  };
275
- }, yt = (e) => {
276
- const t = w(() => Oe(e.forFrequency, e.autoRegion, e.searchers)), o = w(() => t.value.get(a.searcherKey.value) || Le), l = w(() => {
276
+ }, Tt = (e) => {
277
+ const t = P(() => Fe(e.forFrequency, e.autoRegion, e.searchers)), a = P(() => t.value.get(r.searcherKey.value) || qe), o = P(() => {
277
278
  const i = /* @__PURE__ */ new Set();
278
279
  return t.value.forEach((g) => {
279
280
  g.regionByIndex.forEach((d) => {
280
- d.index !== ne && d.index !== y && i.add(d.index);
281
+ d.index !== ne && d.index !== S && i.add(d.index);
281
282
  });
282
283
  }), i;
283
- }), a = pt(e, t), n = vt(e, o), r = ht(e, t, l);
284
- P(t, () => {
285
- if (e.onlySearcher ? r.regionsIndexes.value = Array.from(t.value.keys()) : r.regionsIndexes.value = r.regionsIndexes.value.filter((g) => l.value.has(g)), a.searcherKey.value === O) return;
284
+ }), r = xt(e, t), l = kt(e, a), n = Ct(e, t, o);
285
+ V(t, () => {
286
+ if (e.onlySearcher ? n.regionsIndexes.value = Array.from(t.value.keys()) : n.regionsIndexes.value = n.regionsIndexes.value.filter((g) => o.value.has(g)), r.searcherKey.value === R) return;
286
287
  let i = t.value.keys().next().value;
287
288
  t.value.forEach((g) => {
288
- if (e.onlySearcher && g.key === a.searcherKey.value) {
289
- i = a.searcherKey.value;
289
+ if (e.onlySearcher && g.key === r.searcherKey.value) {
290
+ i = r.searcherKey.value;
290
291
  return;
291
292
  }
292
- if (n.regionIndex.value && g.regionByIndex?.has(n.regionIndex.value) && (i = g.key), !e.onlySearcher) {
293
+ if (l.regionIndex.value && g.regionByIndex?.has(l.regionIndex.value) && (i = g.key), !e.onlySearcher) {
293
294
  let d;
294
295
  i !== void 0 && (d = t.value.get(i)?.regionByIndex);
295
- const s = t.value.get(g.key)?.regionByIndex;
296
- d?.has(y) && !s?.has(y) && (i = g.key);
296
+ const u = t.value.get(g.key)?.regionByIndex;
297
+ d?.has(S) && !u?.has(S) && (i = g.key);
297
298
  }
298
- }), i !== void 0 && (a.searcherKey.value = i), n.regionIndex.value !== void 0 && !o.value?.regionByIndex?.has(n.regionIndex.value) && (n.regionIndex.value = o.value?.regions?.keys().next().value);
299
+ }), i !== void 0 && (r.searcherKey.value = i), l.regionIndex.value !== void 0 && !a.value?.regionByIndex?.has(l.regionIndex.value) && (l.regionIndex.value = a.value?.regions?.keys().next().value);
299
300
  }, { immediate: !0 });
300
- const u = () => {
301
- if (!(a.searcherKey.value === O || a.searcherKey.value === y))
302
- return a.searcherKey.value;
301
+ const s = () => {
302
+ if (!(r.searcherKey.value === R || r.searcherKey.value === S))
303
+ return r.searcherKey.value;
303
304
  }, c = () => {
304
- if (e.onlySearcher || n.regionIndex.value === y) return;
305
- let i = n.regionIndex.value;
305
+ if (e.onlySearcher || l.regionIndex.value === S) return;
306
+ let i = l.regionIndex.value;
306
307
  if (e.forFrequency) {
307
- const g = n.regionIndex.value;
308
- i = ft(e.forFrequency, { searcher_key: u(), key: g }, e.searchers)?.index;
308
+ const g = l.regionIndex.value;
309
+ i = It(e.forFrequency, { searcher_key: s(), key: g }, e.searchers)?.index;
309
310
  }
310
311
  return i;
311
312
  }, f = () => {
312
- const i = u();
313
+ const i = s();
313
314
  if (i !== void 0)
314
315
  return t.value.get(i);
315
316
  };
316
317
  return {
317
- selectSearcher: a,
318
- selectRegion: n,
319
- compare: r,
318
+ selectSearcher: r,
319
+ selectRegion: l,
320
+ compare: n,
320
321
  searcherByKey: t,
321
- allRegionsIndexes: l,
322
+ allRegionsIndexes: o,
322
323
  getSearcher: f,
323
324
  getRegion: () => {
324
325
  const i = c();
@@ -326,9 +327,9 @@ const rt = { class: "top-competitorSelector" }, it = { class: "top-ellipsis1" },
326
327
  return f()?.regionByIndex?.get(i);
327
328
  }
328
329
  };
329
- }, uo = /* @__PURE__ */ G({
330
+ }, So = /* @__PURE__ */ L({
330
331
  __name: "regionSelector",
331
- props: /* @__PURE__ */ M({
332
+ props: /* @__PURE__ */ E({
332
333
  projectId: {},
333
334
  searchers: { default: () => [] },
334
335
  modelValue: {},
@@ -348,162 +349,162 @@ const rt = { class: "top-competitorSelector" }, it = { class: "top-ellipsis1" },
348
349
  }),
349
350
  emits: ["update:modelValue", "update:modelValueSingle"],
350
351
  setup(e, { expose: t }) {
351
- const o = e, l = B(e, "modelValue"), a = B(e, "modelValueSingle"), {
352
- selectSearcher: n,
353
- selectRegion: r,
354
- compare: u,
352
+ const a = e, o = w(e, "modelValue"), r = w(e, "modelValueSingle"), {
353
+ selectSearcher: l,
354
+ selectRegion: n,
355
+ compare: s,
355
356
  searcherByKey: c,
356
357
  allRegionsIndexes: f,
357
- getSearcher: S,
358
+ getSearcher: I,
358
359
  getRegion: i
359
- } = yt(o), g = () => {
360
+ } = Tt(a), g = () => {
360
361
  const d = [];
361
- c.value.forEach((s) => {
362
- s.enabled && s.regions.forEach((m) => {
362
+ c.value.forEach((u) => {
363
+ u.enabled && u.regions.forEach((m) => {
363
364
  m.enabled && d.push(m);
364
365
  });
365
- }), mt.open("regions", {
366
+ }), St.open("regions", {
366
367
  regions: d,
367
- regionsIndexes: u.regionsIndexes.value,
368
- "@update:regionsIndexes": (s) => u.regionsIndexes.value = s
368
+ regionsIndexes: s.regionsIndexes.value,
369
+ "@update:regionsIndexes": (u) => s.regionsIndexes.value = u
369
370
  });
370
371
  };
371
- return P([r.regionIndex, n.searcherKey, u.regionsIndexes], () => {
372
- if (n.searcherKey.value === O && u.regionsIndexes.value.length) {
373
- if (JSON.stringify(l.value) === JSON.stringify(u.regionsIndexes.value))
372
+ return V([n.regionIndex, l.searcherKey, s.regionsIndexes], () => {
373
+ if (l.searcherKey.value === R && s.regionsIndexes.value.length) {
374
+ if (JSON.stringify(o.value) === JSON.stringify(s.regionsIndexes.value))
374
375
  return;
375
- l.value = [...u.regionsIndexes.value];
376
+ o.value = [...s.regionsIndexes.value];
376
377
  } else
377
- o.onlySearcher ? (l.value = [n.searcherKey.value], n.searcherKey.value === y && !o.autoRegion && (l.value.length = 0)) : (l.value = [r.regionIndex.value], r.regionIndex.value === y && !o.autoRegion && (l.value.length = 0));
378
- !o.onlySearcher && !f.value.size && (n.searcherKey.value = y);
379
- }), a.value && P(a, () => {
380
- a.value && (l.value = [a.value]);
381
- }, { immediate: !0 }), P(l, () => {
382
- if (l.value[0] && (a.value = l.value[0]), o.onlySearcher) {
383
- if (!l.value.length || l.value.length === 1 && !c.value.has(l.value[0]) || l.value.length === 1 && l.value[0] === y && !o.autoRegion) {
378
+ a.onlySearcher ? (o.value = [l.searcherKey.value], l.searcherKey.value === S && !a.autoRegion && (o.value.length = 0)) : (o.value = [n.regionIndex.value], n.regionIndex.value === S && !a.autoRegion && (o.value.length = 0));
379
+ !a.onlySearcher && !f.value.size && (l.searcherKey.value = S);
380
+ }), r.value && V(r, () => {
381
+ r.value && (o.value = [r.value]);
382
+ }, { immediate: !0 }), V(o, () => {
383
+ if (o.value[0] && (r.value = o.value[0]), a.onlySearcher) {
384
+ if (!o.value.length || o.value.length === 1 && !c.value.has(o.value[0]) || o.value.length === 1 && o.value[0] === S && !a.autoRegion) {
384
385
  let d = c.value.keys().next().value;
385
- d === y && !o.autoRegion && (d = void 0, a.value = y), d !== void 0 ? l.value = [d] : l.value.length = 0;
386
+ d === S && !a.autoRegion && (d = void 0, r.value = S), d !== void 0 ? o.value = [d] : o.value.length = 0;
386
387
  return;
387
388
  }
388
- if (l.value.length > 1 && JSON.stringify(l.value) !== JSON.stringify(u.regionsIndexes.value)) {
389
- l.value = [...u.regionsIndexes.value];
389
+ if (o.value.length > 1 && JSON.stringify(o.value) !== JSON.stringify(s.regionsIndexes.value)) {
390
+ o.value = [...s.regionsIndexes.value];
390
391
  return;
391
392
  }
392
393
  } else {
393
- let d = [...new Set(l.value)], s = c.value.values().next().value?.regionByIndex?.keys().next().value;
394
- if (o.forFrequency && (s = c.value.values().next().value?.regionByIndex?.values().next().value?.key), s === y && !o.autoRegion && (s = void 0, a.value = y), !d.length)
395
- s !== void 0 && d.push(s);
394
+ let d = [...new Set(o.value)], u = c.value.values().next().value?.regionByIndex?.keys().next().value;
395
+ if (a.forFrequency && (u = c.value.values().next().value?.regionByIndex?.values().next().value?.key), u === S && !a.autoRegion && (u = void 0, r.value = S), !d.length)
396
+ u !== void 0 && d.push(u);
396
397
  else if (d.length === 1) {
397
398
  let m = f.value;
398
- o.forFrequency && (m = /* @__PURE__ */ new Set(), c.value.forEach((ee) => {
399
- ee.regionByIndex.forEach((U) => {
400
- U.index !== ne && U.index !== y && m.add(U.key);
399
+ a.forFrequency && (m = /* @__PURE__ */ new Set(), c.value.forEach((q) => {
400
+ q.regionByIndex.forEach((N) => {
401
+ N.index !== ne && N.index !== S && m.add(N.key);
401
402
  });
402
- })), m.has(d[0]) || (d = [], s !== void 0 && d.push(s));
403
+ })), m.has(d[0]) || (d = [], u !== void 0 && d.push(u));
403
404
  } else
404
- d = d.filter((m) => f.value.has(m)), !d.length && s !== void 0 && d.push(s);
405
- if (JSON.stringify(l.value) !== JSON.stringify(d)) {
406
- l.value = d;
405
+ d = d.filter((m) => f.value.has(m)), !d.length && u !== void 0 && d.push(u);
406
+ if (JSON.stringify(o.value) !== JSON.stringify(d)) {
407
+ o.value = d;
407
408
  return;
408
409
  }
409
410
  }
410
- if (!(l.value.length === 1 && l.value[0] === (o.onlySearcher ? n.searcherKey.value : r.regionIndex.value)))
411
- if (o.onlySearcher) {
412
- if (l.value.length === 1) {
413
- n.searcherKey.value = l.value[0];
411
+ if (!(o.value.length === 1 && o.value[0] === (a.onlySearcher ? l.searcherKey.value : n.regionIndex.value)))
412
+ if (a.onlySearcher) {
413
+ if (o.value.length === 1) {
414
+ l.searcherKey.value = o.value[0];
414
415
  return;
415
416
  }
416
- n.searcherKey.value = O;
417
+ l.searcherKey.value = R;
417
418
  return;
418
419
  } else {
419
- if (!l.value.length)
420
+ if (!o.value.length)
420
421
  return;
421
- if (l.value.length === 1 && n.searcherKey.value !== O) {
422
- r.regionIndex.value = l.value[0];
422
+ if (o.value.length === 1 && l.searcherKey.value !== R) {
423
+ n.regionIndex.value = o.value[0];
423
424
  let d;
424
- for (const s of c.value.values()) {
425
- for (const m of s.regionByIndex.values())
426
- if ((o.forFrequency ? m.key : m.index) === r.regionIndex.value) {
427
- d = s.key;
425
+ for (const u of c.value.values()) {
426
+ for (const m of u.regionByIndex.values())
427
+ if ((a.forFrequency ? m.key : m.index) === n.regionIndex.value) {
428
+ d = u.key;
428
429
  break;
429
430
  }
430
431
  if (d !== void 0)
431
432
  break;
432
433
  }
433
- d !== void 0 && (n.searcherKey.value = d);
434
+ d !== void 0 && (l.searcherKey.value = d);
434
435
  } else
435
- n.searcherKey.value = O, u.regionsIndexes.value = [...l.value];
436
+ l.searcherKey.value = R, s.regionsIndexes.value = [...o.value];
436
437
  }
437
438
  }, { immediate: !0 }), t({
438
- getSearcher: S,
439
+ getSearcher: I,
439
440
  getRegion: i
440
- }), (d, s) => (v(), T("div", {
441
- class: Z({
441
+ }), (d, u) => (y(), T("div", {
442
+ class: te({
442
443
  "top-selectorRegion": !0,
443
444
  "top-selectorRegion-onlySearcher": e.onlySearcher
444
445
  })
445
446
  }, [
446
- E(fe, {
447
- options: p(n).optionBySearcherKey.value,
448
- modelValue: p(n).searcherKey.value,
449
- "onUpdate:modelValue": s[0] || (s[0] = (m) => p(n).searcherKey.value = m),
447
+ K(ve, {
448
+ options: p(l).optionBySearcherKey.value,
449
+ modelValue: p(l).searcherKey.value,
450
+ "onUpdate:modelValue": u[0] || (u[0] = (m) => p(l).searcherKey.value = m),
450
451
  name: "searcher_key",
451
452
  addChanger: e.addChanger
452
453
  }, null, 8, ["options", "modelValue", "addChanger"]),
453
- !e.onlySearcher && p(n).searcherKey.value !== p(O) ? (v(), j(fe, {
454
+ !e.onlySearcher && p(l).searcherKey.value !== p(R) ? (y(), C(ve, {
454
455
  key: 0,
455
456
  class: "top-select-region",
456
- options: p(r).optionByRegionIndex.value,
457
- modelValue: p(r).regionIndex.value,
458
- "onUpdate:modelValue": s[1] || (s[1] = (m) => p(r).regionIndex.value = m),
457
+ options: p(n).optionByRegionIndex.value,
458
+ modelValue: p(n).regionIndex.value,
459
+ "onUpdate:modelValue": u[1] || (u[1] = (m) => p(n).regionIndex.value = m),
459
460
  name: e.forFrequency ? "region_key" : "region_index",
460
461
  addChanger: e.addChanger,
461
462
  "data-top-icon": e.addRegionIcon ? "" : void 0
462
- }, null, 8, ["options", "modelValue", "name", "addChanger", "data-top-icon"])) : _("", !0),
463
- e.addCompare && !e.onlySearcher && p(n).searcherKey.value === p(O) ? (v(), j(Q, {
463
+ }, null, 8, ["options", "modelValue", "name", "addChanger", "data-top-icon"])) : M("", !0),
464
+ e.addCompare && !e.onlySearcher && p(l).searcherKey.value === p(R) ? (y(), C(Z, {
464
465
  key: 1,
465
466
  name: "compare",
466
467
  onClick: g,
467
- "data-count-compare-regions-indexes": p(u).regionsIndexes.value.length
468
+ "data-count-compare-regions-indexes": p(s).regionsIndexes.value.length
468
469
  }, {
469
- default: C(() => [
470
- N(A(d.$i18n.Common.Selected_regions), 1)
470
+ default: j(() => [
471
+ W(b(d.$i18n.Common.Selected_regions), 1)
471
472
  ]),
472
473
  _: 1
473
- }, 8, ["data-count-compare-regions-indexes"])) : _("", !0)
474
+ }, 8, ["data-count-compare-regions-indexes"])) : M("", !0)
474
475
  ], 2));
475
476
  }
476
- }), R = {
477
+ }), U = {
477
478
  id: 0,
478
479
  name: "/",
479
480
  path: "/"
480
481
  };
481
- function It(e) {
482
- return e ? b()?.Common.All_folders : "/ (" + b()?.Keywords.Root_folder + ")";
482
+ function jt(e) {
483
+ return e ? A()?.Common.All_folders : "/ (" + A()?.Keywords.Root_folder + ")";
483
484
  }
484
- const xe = (e, t, o = /* @__PURE__ */ new Map(), l = { id: "root" }, a = 0) => (l.childsIds = [], l.id && (l.countAllGroupsActive = l.count_groups_active), e[l.id] && e[l.id].forEach((n) => {
485
- n = { ...n }, l.childsIds.push(n.id), n.id === 0 && (n.name = It(t));
486
- const r = a > 1 ? "-".repeat(a - 1) + " " : "";
487
- r && !n.name.startsWith(r) && (n.name = r + n.name), o.set(n.id, n), xe(e, t, o, n, a + 1), l.childsIds = l.childsIds.concat(n.childsIds), l.id && n.count_groups_active && (l.countAllGroupsActive += n.count_groups_active);
488
- }), o), St = (e) => e.gen("/get/keywords_2/folders/", ["id", "parent_id", "name", "path"]).changeParams({ orders: ["ord_path"], limit: 100 });
489
- function me(e, t, o) {
490
- const l = Object.keys(e), a = l.map((n) => e[n]);
491
- return P(a, (n, r, u) => {
485
+ const je = (e, t, a = /* @__PURE__ */ new Map(), o = { id: "root" }, r = 0) => (o.childsIds = [], o.id && (o.countAllGroupsActive = o.count_groups_active), e[o.id] && e[o.id].forEach((l) => {
486
+ l = { ...l }, o.childsIds.push(l.id), l.id === 0 && (l.name = jt(t));
487
+ const n = r > 1 ? "-".repeat(r - 1) + " " : "";
488
+ n && !l.name.startsWith(n) && (l.name = n + l.name), a.set(l.id, l), je(e, t, a, l, r + 1), o.childsIds = o.childsIds.concat(l.childsIds), o.id && l.count_groups_active && (o.countAllGroupsActive += l.count_groups_active);
489
+ }), a), At = (e) => e.gen("/get/keywords_2/folders/", ["id", "parent_id", "name", "path"]).changeParams({ orders: ["ord_path"], limit: 100 });
490
+ function ye(e, t, a) {
491
+ const o = Object.keys(e), r = o.map((l) => e[l]);
492
+ return V(r, (l, n, s) => {
492
493
  const c = {};
493
- n.forEach((f, S) => {
494
- if (!Object.is(f, r[S])) {
495
- const i = l[S];
494
+ l.forEach((f, I) => {
495
+ if (!Object.is(f, n[I])) {
496
+ const i = o[I];
496
497
  c[i] = {
497
- old: r[S],
498
+ old: n[I],
498
499
  new: f
499
500
  };
500
501
  }
501
- }), Object.keys(c).length && t(c, u);
502
- }, o);
502
+ }), Object.keys(c).length && t(c, s);
503
+ }, a);
503
504
  }
504
- const xt = /* @__PURE__ */ G({
505
+ const Bt = /* @__PURE__ */ L({
505
506
  __name: "folders",
506
- props: /* @__PURE__ */ M({
507
+ props: /* @__PURE__ */ E({
507
508
  folderId: {},
508
509
  folder: {},
509
510
  folders: {},
@@ -515,64 +516,64 @@ const xt = /* @__PURE__ */ G({
515
516
  }, {
516
517
  folderId: { required: !0 },
517
518
  folderIdModifiers: {},
518
- folder: { default: R },
519
+ folder: { default: U },
519
520
  folderModifiers: {}
520
521
  }),
521
522
  emits: ["update:folderId", "update:folder"],
522
523
  setup(e) {
523
- const t = e, o = B(e, "folderId"), l = B(e, "folder"), a = t.client && !t.folders ? St(t.client) : void 0, n = V(null);
524
- P(() => t.projectId, () => {
525
- a?.changeParams({
524
+ const t = e, a = w(e, "folderId"), o = w(e, "folder"), r = t.client && !t.folders ? At(t.client) : void 0, l = _(null);
525
+ V(() => t.projectId, () => {
526
+ r?.changeParams({
526
527
  project_id: t.projectId
527
- }), a?.setOptions({
528
+ }), r?.setOptions({
528
529
  checkFingerprint: "TopGroupSelectorFolders:" + t.projectId
529
- }), n.value?.resetCache();
530
+ }), l.value?.resetCache();
530
531
  }, { immediate: !0 });
531
- const r = w(() => xe(t.folders ?? { root: [R] }, t.canSelectAll));
532
- return me({
533
- modelFolder: l,
534
- modelFolderId: o
535
- }, async (u) => {
536
- if (o.value === l.value.id)
532
+ const n = P(() => je(t.folders ?? { root: [U] }, t.canSelectAll));
533
+ return ye({
534
+ modelFolder: o,
535
+ modelFolderId: a
536
+ }, async (s) => {
537
+ if (a.value === o.value.id)
537
538
  return;
538
- if (u.modelFolder && !u.modelFolderId) {
539
- o.value = l.value.id;
539
+ if (s.modelFolder && !s.modelFolderId) {
540
+ a.value = o.value.id;
540
541
  return;
541
542
  }
542
- let c = r.value.get(t.folderId);
543
- c || (c = R), l.value = c, o.value = c.id;
544
- }, { immediate: !0 }), (u, c) => (v(), j(Ie, {
543
+ let c = n.value.get(t.folderId);
544
+ c || (c = U), o.value = c, a.value = c.id;
545
+ }, { immediate: !0 }), (s, c) => (y(), C(Ce, {
545
546
  class: "top-groupSelector_folder",
546
- modelValue: l.value,
547
- "onUpdate:modelValue": c[0] || (c[0] = (f) => l.value = f),
548
- items: e.folders ? [...r.value.values()] : void 0,
547
+ modelValue: o.value,
548
+ "onUpdate:modelValue": c[0] || (c[0] = (f) => o.value = f),
549
+ items: e.folders ? [...n.value.values()] : void 0,
549
550
  "search-type": "inline",
550
551
  icon: e.addIcon ? "" : void 0,
551
- api: e.folders ? void 0 : p(a),
552
- apiSetSearchParams: (...f) => p(Se)(...f, "name"),
552
+ api: e.folders ? void 0 : p(r),
553
+ apiSetSearchParams: (...f) => p(Te)(...f, "name"),
553
554
  addChanger: e.addChanger,
554
555
  useCache: ""
555
556
  }, null, 8, ["modelValue", "items", "icon", "api", "apiSetSearchParams", "addChanger"]));
556
557
  }
557
- }), re = {
558
+ }), ie = {
558
559
  id: -1,
559
560
  name: "--",
560
- folder_id: R.id,
561
- folder_path: R.path
562
- }, ie = {
563
- id: Ke,
561
+ folder_id: U.id,
562
+ folder_path: U.path
563
+ }, de = {
564
+ id: De,
564
565
  name: "All groups",
565
- folder_id: R.id,
566
- folder_path: R.path
567
- }, H = () => (ie.name = b()?.Common.All_groups, ie), Ne = () => (ie.name = b()?.Keywords.Choose_group, ie), kt = (e, t, o) => (e = [...e], t !== void 0 && (e = e.filter((l) => l.on == Number(t))), o && o.id && o.childsIds && (e = e.filter((l) => l.folder_id === o.id || o.childsIds.includes(l.folder_id))), e), $e = (e) => e.gen("/get/keywords_2/groups/", ["id", "name", "folder_id", "folder_path"]).changeParams({ folder_id_depth: !0, limit: 100 }), Ct = (e) => e.gen("/add/keywords_2/groups/"), jt = { class: "top-groupSelector_groupItem" }, Tt = {
566
+ folder_id: U.id,
567
+ folder_path: U.path
568
+ }, X = () => (de.name = A()?.Common.All_groups, de), Je = () => (de.name = A()?.Keywords.Choose_group, de), bt = (e, t, a) => (e = [...e], t !== void 0 && (e = e.filter((o) => o.on == Number(t))), a && a.id && a.childsIds && (e = e.filter((o) => o.folder_id === a.id || a.childsIds.includes(o.folder_id))), e), _e = (e) => e.gen("/get/keywords_2/groups/", ["id", "name", "folder_id", "folder_path"]).changeParams({ folder_id_depth: !0, limit: 100 }), wt = (e) => e.gen("/add/keywords_2/groups/"), Pt = { class: "top-groupSelector_groupItem" }, $t = {
568
569
  key: 0,
569
570
  class: "top-comment"
570
- }, At = {
571
+ }, _t = {
571
572
  key: 1,
572
573
  class: "top-groupSelector_groupItemFolderPath"
573
- }, Bt = /* @__PURE__ */ G({
574
+ }, Mt = /* @__PURE__ */ L({
574
575
  __name: "groups",
575
- props: /* @__PURE__ */ M({
576
+ props: /* @__PURE__ */ E({
576
577
  groupId: {},
577
578
  group: {},
578
579
  projectId: {},
@@ -592,111 +593,111 @@ const xt = /* @__PURE__ */ G({
592
593
  group: { required: !0 },
593
594
  groupModifiers: {}
594
595
  }),
595
- emits: /* @__PURE__ */ M(["addGroup"], ["update:groupId", "update:group"]),
596
+ emits: /* @__PURE__ */ E(["addGroup"], ["update:groupId", "update:group"]),
596
597
  setup(e, { emit: t }) {
597
- const o = e, l = t, a = B(e, "groupId"), n = B(e, "group"), r = o.client && !o.groups ? $e(o.client) : void 0, u = o.client ? Ct(o.client) : void 0, c = V(null), f = V(void 0), S = Te("folder_id", "EQUALS", [o.folder?.id ?? 0]);
598
- r?.changeParams({
599
- project_id: o.projectId,
598
+ const a = e, o = t, r = w(e, "groupId"), l = w(e, "group"), n = a.client && !a.groups ? _e(a.client) : void 0, s = a.client ? wt(a.client) : void 0, c = _(null), f = _(void 0), I = he("folder_id", "EQUALS", [a.folder?.id ?? 0]);
599
+ n?.changeParams({
600
+ project_id: a.projectId,
600
601
  folder_id_depth: !0,
601
602
  filters: [
602
- S
603
+ I
603
604
  ]
604
- }), o.on !== void 0 && r?.params.filters?.push(Te("on", "EQUALS", [Number(o.on)]));
605
+ }), a.on !== void 0 && n?.params.filters?.push(he("on", "EQUALS", [Number(a.on)]));
605
606
  const i = (d) => {
606
- n.value = d, a.value = d.id;
607
+ l.value = d, r.value = d.id;
607
608
  };
608
- me({
609
- projectId: () => o.projectId,
610
- folderId: () => o.folder?.id,
611
- canSelectAll: () => o.canSelectAll
609
+ ye({
610
+ projectId: () => a.projectId,
611
+ folderId: () => a.folder?.id,
612
+ canSelectAll: () => a.canSelectAll
612
613
  }, (d) => {
613
- if (d.projectId && (r?.changeParams({
614
- project_id: o.projectId
615
- }), r?.setOptions({
616
- checkFingerprint: "TopGroupSelectorGroups:" + o.projectId
617
- })), d.folderId && (S.values = [
618
- o.folder?.id ?? 0
619
- ], o.groups && (f.value = kt(o.groups, o.on, o.folder))), c.value?.resetCache(), (d.folderId?.old !== void 0 || d.canSelectAll?.old !== void 0) && a.value !== le) {
620
- let s;
621
- o.autoselect === "first" && (s = f.value?.[0], o.canSelectAll && (s = _e(H()))), (o.autoselect === "placeholder" || !s) && (s = Ne()), i(s);
614
+ if (d.projectId && (n?.changeParams({
615
+ project_id: a.projectId
616
+ }), n?.setOptions({
617
+ checkFingerprint: "TopGroupSelectorGroups:" + a.projectId
618
+ })), d.folderId && (I.values = [
619
+ a.folder?.id ?? 0
620
+ ], a.groups && (f.value = bt(a.groups, a.on, a.folder))), c.value?.resetCache(), (d.folderId?.old !== void 0 || d.canSelectAll?.old !== void 0) && r.value !== le) {
621
+ let u;
622
+ a.autoselect === "first" && (u = f.value?.[0], a.canSelectAll && (u = Re(X()))), (a.autoselect === "placeholder" || !u) && (u = Je()), i(u);
622
623
  }
623
- }, { immediate: !0 }), me({
624
- modelGroup: n,
625
- modelGroupId: a
624
+ }, { immediate: !0 }), ye({
625
+ modelGroup: l,
626
+ modelGroupId: r
626
627
  }, async (d) => {
627
- if (a.value !== n.value.id) {
628
+ if (r.value !== l.value.id) {
628
629
  if (d.modelGroup && !d.modelGroupId) {
629
- a.value = n.value.id;
630
+ r.value = l.value.id;
630
631
  return;
631
632
  }
632
- if (!(o.canAdd && a.value === le)) {
633
- if (o.groups) {
634
- let s = f.value?.find((m) => m.id === a.value);
635
- if (!s && o.canSelectAll && (s = H()), s)
636
- i(s);
633
+ if (!(a.canAdd && r.value === le)) {
634
+ if (a.groups) {
635
+ let u = f.value?.find((m) => m.id === r.value);
636
+ if (!u && a.canSelectAll && (u = X()), u)
637
+ i(u);
637
638
  else {
638
639
  const m = f.value?.[0];
639
- m && !a.value ? i(m) : i(re);
640
+ m && !r.value ? i(m) : i(ie);
640
641
  }
641
642
  }
642
- if (o.client && !o.groups && (a.value || a.value === Ke && !o.canSelectAll)) {
643
- const s = $e(o.client).changeParams({
644
- project_id: o.projectId,
645
- id: a.value,
643
+ if (a.client && !a.groups && (r.value || r.value === De && !a.canSelectAll)) {
644
+ const u = _e(a.client).changeParams({
645
+ project_id: a.projectId,
646
+ id: r.value,
646
647
  filters: [
647
- S
648
+ I
648
649
  ]
649
650
  });
650
- s?.setOptions({
651
- checkFingerprint: "TopGroupSelectorFindGroup:" + o.projectId
651
+ u?.setOptions({
652
+ checkFingerprint: "TopGroupSelectorFindGroup:" + a.projectId
652
653
  });
653
- const m = await s.call();
654
+ const m = await u.call();
654
655
  if (!m.errors?.length && !m.result) return;
655
- !m.errors && m.result[0] ? i(m.result[0]) : i(re);
656
+ !m.errors && m.result[0] ? i(m.result[0]) : i(ie);
656
657
  }
657
658
  }
658
659
  }
659
660
  }, { immediate: !0 });
660
661
  const g = async (d) => {
661
- if (o.canAdd !== "api" || !u) return;
662
- const s = n.value, m = await u.changeParams({
663
- project_id: o.projectId,
662
+ if (a.canAdd !== "api" || !s) return;
663
+ const u = l.value, m = await s.changeParams({
664
+ project_id: a.projectId,
664
665
  names: [d.name],
665
- to_id: o.folder?.id ?? R.id,
666
+ to_id: a.folder?.id ?? U.id,
666
667
  to_type: "in_folder_last"
667
668
  }).call();
668
- m.result ? (i(m.result), l("addGroup", m.result)) : i(s), c.value?.resetCache(!0);
669
+ m.result ? (i(m.result), o("addGroup", m.result)) : i(u), c.value?.resetCache(!0);
669
670
  };
670
- return (d, s) => (v(), j(Ie, {
671
+ return (d, u) => (y(), C(Ce, {
671
672
  ref_key: "refSelector",
672
673
  ref: c,
673
674
  class: "top-groupSelector_group",
674
- modelValue: n.value,
675
- "onUpdate:modelValue": s[0] || (s[0] = (m) => n.value = m),
675
+ modelValue: l.value,
676
+ "onUpdate:modelValue": u[0] || (u[0] = (m) => l.value = m),
676
677
  items: f.value ?? e.groups,
677
678
  searchType: "inline",
678
679
  icon: e.addIcon ? "" : void 0,
679
- api: e.groups ? void 0 : p(r),
680
- apiSetSearchParams: (...m) => p(Se)(...m, "name"),
680
+ api: e.groups ? void 0 : p(n),
681
+ apiSetSearchParams: (...m) => p(Te)(...m, "name"),
681
682
  appendSearchToResult: !!e.canAdd,
682
- useAllItem: e.canSelectAll ? p(H)().name : !1,
683
+ useAllItem: e.canSelectAll ? p(X)().name : !1,
683
684
  addChanger: e.addChanger,
684
685
  useCache: "",
685
686
  onAppendItem: g
686
687
  }, {
687
- item: C(({ item: m }) => [
688
- L("div", jt, [
689
- m.id === p(le) ? (v(), T("div", Tt, A(d.$i18n.Common.Add) + ": ", 1)) : _("", !0),
690
- L("span", null, A(m.name), 1),
691
- m.folder_path && e.showPath ? (v(), T("span", At, A(m.folder_path), 1)) : _("", !0)
688
+ item: j(({ item: m }) => [
689
+ O("div", Pt, [
690
+ m.id === p(le) ? (y(), T("div", $t, b(d.$i18n.Common.Add) + ": ", 1)) : M("", !0),
691
+ O("span", null, b(m.name), 1),
692
+ m.folder_path && e.showPath ? (y(), T("span", _t, b(m.folder_path), 1)) : M("", !0)
692
693
  ])
693
694
  ]),
694
695
  _: 1
695
696
  }, 8, ["modelValue", "items", "icon", "api", "apiSetSearchParams", "appendSearchToResult", "useAllItem", "addChanger"]));
696
697
  }
697
- }), bt = { class: "top-groupSelector" }, co = /* @__PURE__ */ G({
698
+ }), Et = { class: "top-groupSelector" }, xo = /* @__PURE__ */ L({
698
699
  __name: "groupSelector",
699
- props: /* @__PURE__ */ M({
700
+ props: /* @__PURE__ */ E({
700
701
  folderId: {},
701
702
  folder: {},
702
703
  groupId: {},
@@ -720,41 +721,41 @@ const xt = /* @__PURE__ */ G({
720
721
  folderModifiers: {},
721
722
  groupId: { required: !0 },
722
723
  groupIdModifiers: {},
723
- group: { default: re },
724
+ group: { default: ie },
724
725
  groupModifiers: {}
725
726
  }),
726
- emits: /* @__PURE__ */ M(["update:groups"], ["update:folderId", "update:folder", "update:groupId", "update:group"]),
727
+ emits: /* @__PURE__ */ E(["update:groups"], ["update:folderId", "update:folder", "update:groupId", "update:group"]),
727
728
  setup(e, { emit: t }) {
728
- const o = e, l = B(e, "folderId"), a = B(e, "folder"), n = B(e, "groupId"), r = B(e, "group"), u = t, c = xe(o.folders ?? { root: [R] }, o.canSelectAllGroups);
729
- a.value = c.get(l.value);
730
- let f = o.groups?.find((i) => i.id === n.value);
731
- n.value || (f = o.groups?.[0]), o.canSelectAllGroups && !f && (f = H()), o.canSelectAllGroups && !f && (f = H()), (o.autoselect === "placeholder" || !f) && (f = Ne()), f ??= re, r.value = f;
732
- const S = (i) => {
729
+ const a = e, o = w(e, "folderId"), r = w(e, "folder"), l = w(e, "groupId"), n = w(e, "group"), s = t, c = je(a.folders ?? { root: [U] }, a.canSelectAllGroups);
730
+ r.value = c.get(o.value);
731
+ let f = a.groups?.find((i) => i.id === l.value);
732
+ l.value || (f = a.groups?.[0]), a.canSelectAllGroups && !f && (f = X()), a.canSelectAllGroups && !f && (f = X()), (a.autoselect === "placeholder" || !f) && (f = Je()), f ??= ie, n.value = f;
733
+ const I = (i) => {
733
734
  let g;
734
- o.groups && i && (g = [...o.groups, i]), u("update:groups", g);
735
+ a.groups && i && (g = [...a.groups, i]), s("update:groups", g);
735
736
  };
736
- return (i, g) => (v(), T("div", bt, [
737
- e.showFolders ? (v(), j(xt, {
737
+ return (i, g) => (y(), T("div", Et, [
738
+ e.showFolders ? (y(), C(Bt, {
738
739
  key: 0,
739
- folderId: l.value,
740
- "onUpdate:folderId": g[0] || (g[0] = (d) => l.value = d),
741
- folder: a.value,
742
- "onUpdate:folder": g[1] || (g[1] = (d) => a.value = d),
740
+ folderId: o.value,
741
+ "onUpdate:folderId": g[0] || (g[0] = (d) => o.value = d),
742
+ folder: r.value,
743
+ "onUpdate:folder": g[1] || (g[1] = (d) => r.value = d),
743
744
  projectId: e.projectId,
744
745
  folders: e.folders,
745
746
  canSelectAll: e.canSelectAllGroups,
746
747
  addChanger: e.addChanger,
747
748
  addIcon: e.addIcon,
748
749
  client: e.client
749
- }, null, 8, ["folderId", "folder", "projectId", "folders", "canSelectAll", "addChanger", "addIcon", "client"])) : _("", !0),
750
- e.showGroups ? (v(), j(Bt, {
750
+ }, null, 8, ["folderId", "folder", "projectId", "folders", "canSelectAll", "addChanger", "addIcon", "client"])) : M("", !0),
751
+ e.showGroups ? (y(), C(Mt, {
751
752
  key: 1,
752
- groupId: n.value,
753
- "onUpdate:groupId": g[2] || (g[2] = (d) => n.value = d),
754
- group: r.value,
755
- "onUpdate:group": g[3] || (g[3] = (d) => r.value = d),
753
+ groupId: l.value,
754
+ "onUpdate:groupId": g[2] || (g[2] = (d) => l.value = d),
755
+ group: n.value,
756
+ "onUpdate:group": g[3] || (g[3] = (d) => n.value = d),
756
757
  projectId: e.projectId,
757
- folder: a.value,
758
+ folder: r.value,
758
759
  groups: e.groups,
759
760
  on: e.on,
760
761
  canAdd: e.canAddGroup,
@@ -764,11 +765,11 @@ const xt = /* @__PURE__ */ G({
764
765
  showPath: e.showFolders && !!e.folders?.[0],
765
766
  addIcon: e.addIcon,
766
767
  client: e.client,
767
- onAddGroup: S
768
- }, null, 8, ["groupId", "group", "projectId", "folder", "groups", "on", "canAdd", "canSelectAll", "autoselect", "addChanger", "showPath", "addIcon", "client"])) : _("", !0)
768
+ onAddGroup: I
769
+ }, null, 8, ["groupId", "group", "projectId", "folder", "groups", "on", "canAdd", "canSelectAll", "autoselect", "addChanger", "showPath", "addIcon", "client"])) : M("", !0)
769
770
  ]));
770
771
  }
771
- }), $t = { class: "top-projectSelectorSubmenu_item" }, wt = ["href", "title", "data-top-icon", "data-right"], Mt = { class: "top-projectSelectorSubmenu_item" }, Pt = ["href"], Vt = /* @__PURE__ */ G({
772
+ }), Vt = { class: "top-projectSelectorSubmenu_item" }, Lt = ["href", "title", "data-top-icon", "data-right"], Gt = { class: "top-projectSelectorSubmenu_item" }, Kt = ["href"], Ot = /* @__PURE__ */ L({
772
773
  __name: "submenu",
773
774
  props: {
774
775
  id: {},
@@ -776,168 +777,197 @@ const xt = /* @__PURE__ */ G({
776
777
  url: {}
777
778
  },
778
779
  setup(e) {
779
- const t = e, o = b();
780
- let l = [
780
+ const t = e, a = A();
781
+ let o = [
781
782
  {
782
783
  href: `/project/keywords/${t.id}/`,
783
- title: o.Common.Menu_phrases,
784
+ title: a.Common.Menu_phrases,
784
785
  icon: "",
785
786
  right: "2"
786
787
  },
787
788
  {
788
789
  href: `/project/dynamics/${t.id}/`,
789
- title: o.Common.Menu_dynamics,
790
+ title: a.Common.Menu_dynamics,
790
791
  icon: "",
791
792
  right: "1"
792
793
  },
793
794
  {
794
795
  href: `/project/snapshots/${t.id}/`,
795
- title: o.Common.Menu_snapshots,
796
+ title: a.Common.Menu_snapshots,
796
797
  icon: "",
797
798
  right: "1"
798
799
  },
799
800
  {
800
801
  href: `/project/competitors/${t.id}/`,
801
- title: o.Common.Menu_competitors,
802
+ title: a.Common.Menu_competitors,
802
803
  icon: "",
803
804
  right: "1"
804
805
  },
805
806
  {
806
807
  href: `/project/analytics/${t.id}/`,
807
- title: o.Common.Menu_analytics,
808
+ title: a.Common.Menu_analytics,
808
809
  icon: "",
809
810
  right: "5"
810
811
  },
811
812
  {
812
813
  href: `/project/broker/${t.id}/`,
813
- title: o.Common.Menu_broker,
814
+ title: a.Common.Menu_broker,
814
815
  icon: "",
815
816
  right: "6"
816
817
  },
817
818
  {
818
819
  href: `/project/audit/${t.id}/sitemap/`,
819
- title: o.Audit.Sitemap_gen,
820
+ title: a.Audit.Sitemap_gen,
820
821
  icon: "",
821
822
  right: "8"
822
823
  },
823
824
  {
824
825
  href: `/project/audit/${t.id}/audit/`,
825
- title: o.Common.Menu_audit,
826
+ title: a.Common.Menu_audit,
826
827
  icon: "",
827
828
  right: "8"
828
829
  },
829
830
  {
830
831
  href: `//project/audit/${t.id}/indexing/`,
831
- title: o.Audit.Indexing,
832
+ title: a.Audit.Indexing,
832
833
  icon: "",
833
834
  right: "8"
834
835
  },
835
836
  {
836
837
  href: `/project/audit/${t.id}/watcher/`,
837
- title: o.Audit.Watcher,
838
+ title: a.Audit.Watcher,
838
839
  icon: "",
839
840
  right: "9"
840
841
  },
841
842
  {
842
843
  href: `/project/settings/${t.id}/`,
843
- title: o.Common.Menu_settings,
844
+ title: a.Common.Menu_settings,
844
845
  icon: "",
845
846
  right: "2"
846
847
  }
847
848
  ];
848
- const a = w(() => t.right.includes("0") ? l.filter((n) => t.right[n.right] === "1") : l);
849
- return (n, r) => {
850
- const u = Ee("TopButton");
851
- return v(), j(p(he), {
849
+ const r = P(() => t.right.includes("0") ? o.filter((l) => t.right[l.right] === "1") : o);
850
+ return (l, n) => {
851
+ const s = Ue("TopButton");
852
+ return y(), C(p(xe), {
852
853
  class: "top-projectSelectorSubmenu",
853
854
  notch: !1,
854
855
  pos: "2"
855
856
  }, {
856
- opener: C(() => [
857
- E(u, {
857
+ opener: j(() => [
858
+ K(s, {
858
859
  class: "top-projectSelectorSubmenu_opener",
859
860
  "data-top-icon": "",
860
861
  color: "theme"
861
862
  })
862
863
  ]),
863
- contentList: C(() => [
864
- (v(!0), T(q, null, se(a.value, (c) => (v(), T("li", $t, [
865
- L("a", {
864
+ contentList: j(() => [
865
+ (y(!0), T(D, null, ce(r.value, (c) => (y(), T("li", Vt, [
866
+ O("a", {
866
867
  href: c.href,
867
868
  title: c.title,
868
869
  "data-top-icon": c.icon,
869
870
  "data-right": c.right
870
- }, null, 8, wt)
871
+ }, null, 8, Lt)
871
872
  ]))), 256)),
872
- L("li", Mt, [
873
- L("a", {
873
+ O("li", Gt, [
874
+ O("a", {
874
875
  href: e.url,
875
876
  "data-top-icon": "",
876
877
  target: "_blank"
877
- }, null, 8, Pt)
878
+ }, null, 8, Kt)
878
879
  ])
879
880
  ]),
880
881
  _: 1
881
882
  });
882
883
  };
883
884
  }
884
- }), ge = (e) => ({
885
+ }), pe = (e) => ({
885
886
  id: null,
886
887
  name: e,
887
888
  listItemProps: {
888
889
  type: "title"
889
890
  }
890
- }), _t = (e) => {
891
- const t = b();
892
- return [
893
- { filter: (l) => l.right.startsWith("1") && l.on > 0, title: ge(t.Projects.Scheduled_update) },
894
- { filter: (l) => l.right.startsWith("1") && l.on === 0, title: ge(t.Projects.Manual_update) },
895
- { filter: (l) => l.right.startsWith("0") && l.on >= 0, title: ge(t.Projects.Guest_projects) }
896
- ].flatMap(({ filter: l, title: a }) => {
897
- const n = e.filter(l);
898
- return n.length ? [a, ...n] : [];
899
- });
900
- }, Et = (e) => e.map((t) => ({
901
- ...t,
891
+ }), Ie = {
892
+ scheduledUpdate: !1,
893
+ manualUpdate: !1,
894
+ guestProjects: !1
895
+ }, Rt = (e, t) => {
896
+ const a = [], o = {
897
+ scheduledUpdate: pe(A().Projects.Scheduled_update),
898
+ manualUpdate: pe(A().Projects.Manual_update),
899
+ guestProjects: pe(A().Projects.Guest_projects)
900
+ }, r = t ? {
901
+ scheduledUpdate: !1,
902
+ manualUpdate: !1,
903
+ guestProjects: !1
904
+ } : Ie;
905
+ for (const l of e)
906
+ !r.scheduledUpdate && l.right?.startsWith("1") && l.on > 0 && (a.push(o.scheduledUpdate), r.scheduledUpdate = !0), !r.manualUpdate && l.right?.startsWith("1") && l.on === 0 && (a.push(o.manualUpdate), r.manualUpdate = !0), !r.guestProjects && l.right?.startsWith("0") && l.on >= 0 && (a.push(o.guestProjects), r.guestProjects = !0), a.push(l);
907
+ return a;
908
+ }, Ut = (e, t) => e.map((a) => ({
909
+ ...a,
902
910
  listItemProps: {
903
911
  class: "top-projectSelector_item",
904
- href: qe(Number(t.id)),
905
- title: t.name
912
+ href: t ? He(Number(a.id)) : void 0,
913
+ title: a.name
906
914
  }
907
- })), pe = (e, t) => {
908
- if (!e) return;
909
- t && (e = e.filter((l) => l.id !== t));
910
- const o = Et(e);
911
- return _t(o);
912
- }, Gt = (e) => {
915
+ })), Nt = (e, t, a, o, r) => {
916
+ if (!e || e.length === 0) return [];
917
+ t && (e = e.filter((n) => n.id !== t)), o && Object.keys(Ie).forEach((n) => Ie[n] = !1);
918
+ const l = Ut(e, a);
919
+ return Rt(l, r);
920
+ }, Dt = (e) => {
913
921
  if (!e) return "";
914
922
  let t = e;
915
923
  return t = t.replace(/historyView=[^&]*/, ""), t = t.replace(/competitorsIds=[^&]*/, ""), t = t.replace(/searchersKeys=[^&]*/, ""), t = t.replace(/regionIndex=[^&]*/, ""), t = t.replace(/regionsIndexes=[^&]*/, ""), t = t.replace(/folderId=[^&]*/, ""), t = t.replace(/groupId=[^&]*/, ""), t = t.replace(/tags=[^&]*/, ""), window.mo?.getHash && !window.mo.getHash("dataSort").toString().includes("0000-00-00") && (t = t.replace(/dataSort=[^&]*/, "")), t = t.replace(/%22historyView%22:[^,]*,/, ""), t = t.replace(/%22competitorsIds%22:\[[^\]]*\],/, ""), t = t.replace(/%22searchersKeys%22:\[[^\]]*\],/, ""), t = t.replace(/%22regionIndex%22:[^,]*,/, ""), t = t.replace(/%22regionsIndexes%22:\[[^\]]*\],/, ""), t = t.replace(/%22folderId%22:[^,]*,/, ""), t = t.replace(/%22groupId%22:[^,]*,/, ""), t = t.replace(/%22tagsIds%22:\[[^\]]*\],/, ""), /%22dataSort%22:\{[^\}]*0000-00-00[^\}]*\}/.test(t) || (t = t.replace(/%22dataSort%22:\{[^\}]*\},/, "")), t;
916
- }, qe = (e) => {
924
+ }, He = (e) => {
917
925
  const t = location.pathname.split("/");
918
- let o = "project/dynamics/", l = "";
919
- t[1] == "project" && (o = t[1] + "/" + t[2] + "/"), ["watcher", "indexing", "sitemap", "audit", "direct", "adwords"].includes(t[4]) && (l = t[4] + "/");
920
- let a = "/" + o + e + "/" + l;
921
- const n = Gt(location.hash);
922
- return a += n, a;
923
- }, we = (e) => {
926
+ let a = "project/dynamics/", o = "";
927
+ t[1] == "project" && (a = t[1] + "/" + t[2] + "/"), ["watcher", "indexing", "sitemap", "audit", "direct", "adwords"].includes(t[4]) && (o = t[4] + "/");
928
+ let r = "/" + a + e + "/" + o;
929
+ const l = Dt(location.hash);
930
+ return r += l, r;
931
+ }, Me = (e) => {
924
932
  let t = e.startsWith("http") ? e : "http://" + e;
925
933
  return t = t.replace(/"/g, "%22"), t;
926
- }, Kt = (e, t) => {
927
- const o = e.gen("/get/projects_2/projects/", ["id", "user_id", "name", "url", "on", "right"]);
928
- return o.options.onApiLoaded = (l, a, n) => {
929
- l.result = pe(l.result, t), n?.(l, a);
930
- }, o;
931
- }, Lt = (e) => e.gen("/add/projects_2/projects/"), Ot = { class: "top-projectSelector_itemText" }, Rt = { class: "top-projectSelector_itemName" }, Nt = { class: "top-projectSelector_itemId" }, qt = { key: 1 }, Dt = {
934
+ }, Ee = (e, t, a, o, r) => {
935
+ const l = e.gen("/get/projects_2/projects/", ["id", "user_id", "name", "url", "on", "right"]);
936
+ return l.params = {
937
+ ...r,
938
+ filters: [
939
+ he("on", "GREATER_THAN_EQUALS", [0])
940
+ ],
941
+ orders: [
942
+ ge("user_id", "DESC", [a]),
943
+ ge("on", "DESC"),
944
+ ge("id", "DESC")
945
+ ]
946
+ }, l.options.onApiLoaded = (n, s, c) => {
947
+ const f = s.data.limit === 100 && s.data.filters.length === 1 && s.data.offset === 0, I = s.data.limit === 100 && s.data.filters.length > 1 ? !0 : void 0;
948
+ n.result = Nt(n.result, t, o, f, I), c?.(n, s);
949
+ }, l;
950
+ }, qt = (e) => e.gen("/add/projects_2/projects/"), se = "projects_total:", Ft = 1440 * 60 * 1e3, Wt = (e, t) => {
951
+ localStorage.setItem(se + e, JSON.stringify({
952
+ value: t,
953
+ expiresAt: Date.now() + Ft
954
+ }));
955
+ }, Jt = (e) => {
956
+ const t = localStorage.getItem(se + e);
957
+ if (!t) return null;
958
+ const { value: a, expiresAt: o } = JSON.parse(t);
959
+ return Date.now() > o ? (localStorage.removeItem(se + e), null) : a;
960
+ }, Ve = (e) => {
961
+ localStorage.removeItem(se + e);
962
+ }, Ht = { class: "top-projectSelector_itemText" }, zt = { class: "top-projectSelector_itemName" }, Yt = { class: "top-projectSelector_itemId" }, Qt = { key: 1 }, Xt = {
932
963
  key: 0,
933
964
  class: "top-comment"
934
- }, go = /* @__PURE__ */ G({
965
+ }, Le = 1e3, ko = /* @__PURE__ */ L({
935
966
  __name: "projectSelector",
936
- props: /* @__PURE__ */ M({
967
+ props: /* @__PURE__ */ E({
937
968
  project: {},
938
- projects: {},
969
+ addLinksToProjects: { type: Boolean, default: !0 },
939
970
  userId: { default: window.mo?.user?.id },
940
- icon: {},
941
971
  excludeProjectId: {},
942
972
  placeholder: {},
943
973
  openerText: {},
@@ -951,157 +981,175 @@ const xt = /* @__PURE__ */ G({
951
981
  projectModifiers: {}
952
982
  }),
953
983
  emits: ["update:project"],
954
- setup(e) {
955
- const t = b(), o = e, l = w(() => o.placeholder ?? t.Projects.Select_project), a = w(() => o.openerText ?? t.Common.Projects), n = B(e, "project");
956
- n.value.name || (n.value.name = a.value);
957
- const r = o.client ? Kt(o.client, o.excludeProjectId) : void 0, u = o.client ? Lt(o.client) : void 0, c = V(pe(o.projects, o.excludeProjectId)), f = V(null);
958
- P([() => o.projects, () => o.excludeProjectId], () => {
959
- c.value = pe(o.projects, o.excludeProjectId);
960
- });
961
- const S = async (i) => {
962
- if (!u) return;
963
- const g = await u.changeParams({
964
- url: i.name,
965
- name: i.name
984
+ setup(e, { expose: t }) {
985
+ const a = A(), o = e, r = P(() => o.placeholder ?? a.Projects.Select_project), l = P(() => o.openerText ?? a.Common.Projects), n = w(e, "project");
986
+ n.value.name || (n.value.name = l.value);
987
+ const s = () => {
988
+ d.value === "api" && g.value?.resetCache(!0), I.value = void 0, Ve(o.userId);
989
+ };
990
+ t({ resetCache: s });
991
+ const c = Ee(
992
+ o.client,
993
+ o.excludeProjectId,
994
+ o.userId,
995
+ o.addLinksToProjects
996
+ ), f = qt(o.client), I = _(), i = _(Jt(o.userId)), g = _(null), d = P(() => {
997
+ if (i.value)
998
+ return i.value < Le ? "static" : "api";
999
+ }), u = async () => {
1000
+ const v = await Ee(
1001
+ o.client,
1002
+ o.excludeProjectId,
1003
+ o.userId,
1004
+ o.addLinksToProjects,
1005
+ { limit: Le }
1006
+ ).call();
1007
+ if (!v.errors)
1008
+ return v;
1009
+ }, m = async () => {
1010
+ if (i.value) return;
1011
+ const B = await u();
1012
+ i.value = B?.total, d.value === "static" && (I.value = B?.result), i.value && Wt(o.userId, i.value);
1013
+ }, q = async (B) => {
1014
+ const v = await f.changeParams({
1015
+ url: B.name,
1016
+ name: B.name
966
1017
  }).call();
967
- if (!g.errors)
968
- if (o.projects) {
969
- const d = {
970
- id: Number(g.result),
971
- url: i.name,
972
- name: i.name,
1018
+ if (!v.errors) {
1019
+ if (I.value && d.value === "static") {
1020
+ const x = {
1021
+ id: Number(v.result),
1022
+ url: B.name,
1023
+ name: B.name,
973
1024
  user_id: o.userId,
974
1025
  on: 0,
975
1026
  right: "11111111111111111111",
976
1027
  listItemProps: {
977
1028
  class: "top-projectSelector_item",
978
- href: qe(Number(g.result))
1029
+ href: o.addLinksToProjects ? He(Number(v.result)) : void 0
979
1030
  }
980
1031
  };
981
- c.value?.unshift(d);
982
- } else
983
- f.value?.resetCache(!0);
1032
+ I.value?.unshift(x), Ve(o.userId);
1033
+ }
1034
+ d.value === "api" && s();
1035
+ }
1036
+ }, N = async () => {
1037
+ if (I.value || d.value !== "static") return;
1038
+ const B = await u();
1039
+ I.value = B?.result;
984
1040
  };
985
- return Ue(() => {
986
- n.value.name || (n.value.name = a.value);
987
- }), (i, g) => {
988
- const d = Ee("TopButton");
989
- return v(), j(Ie, {
1041
+ return ze(async () => {
1042
+ await m(), n.value.name || (n.value.name = l.value);
1043
+ }), (B, v) => {
1044
+ const x = Ue("TopButton");
1045
+ return d.value ? (y(), C(Ce, {
1046
+ key: 0,
990
1047
  ref_key: "refSelector",
991
- ref: f,
1048
+ ref: g,
992
1049
  class: "top-projectSelector",
993
1050
  modelValue: n.value,
994
- "onUpdate:modelValue": g[1] || (g[1] = (s) => n.value = s),
995
- items: c.value,
996
- title: i.$i18n.Projects.Search_projects,
997
- icon: e.icon,
1051
+ "onUpdate:modelValue": v[1] || (v[1] = (h) => n.value = h),
1052
+ items: I.value,
1053
+ title: B.$i18n.Projects.Search_projects,
998
1054
  modificator: "projectSelector",
999
- placeholder: l.value,
1000
- api: e.projects ? void 0 : p(r),
1001
- apiSetSearchParams: e.projects ? void 0 : (...s) => p(Se)(...s, "name"),
1055
+ placeholder: r.value,
1056
+ hasCloserBtn: "",
1057
+ api: d.value === "api" ? p(c) : void 0,
1058
+ apiSetSearchParams: d.value === "api" ? (...h) => p(Te)(...h, "name") : void 0,
1002
1059
  useCache: "",
1003
1060
  appendSearchToResult: "",
1004
- appendSearchToResultCond: p(Ae),
1061
+ appendSearchToResultCond: p(we),
1062
+ closeAfterAppend: !1,
1005
1063
  buttonProps: e.buttonProps,
1006
1064
  openerShortcut: e.openerShortcut,
1007
- onAppendItem: S
1065
+ onAppendItem: q,
1066
+ onOpen: N
1008
1067
  }, {
1009
- widgetAction: C(() => [
1010
- i.$core.state.isMobile ? _("", !0) : (v(), j(d, {
1011
- key: 0,
1012
- class: "top-projectSelector_cancel closer",
1013
- color: "theme"
1014
- }, {
1015
- default: C(() => [
1016
- N(A(i.$i18n.Common.Cancel), 1)
1068
+ item: j(({ item: h }) => [
1069
+ h.id ? (y(), T(D, { key: 0 }, [
1070
+ O("div", Ht, [
1071
+ O("span", zt, b(p(ut)(h.name, 25)), 1),
1072
+ O("span", Yt, " id " + b(h.id), 1)
1017
1073
  ]),
1018
- _: 1
1019
- }))
1020
- ]),
1021
- item: C(({ item: s }) => [
1022
- s.id ? (v(), T(q, { key: 0 }, [
1023
- L("div", Ot, [
1024
- L("span", Rt, A(s.name), 1),
1025
- L("span", Nt, " id " + A(s.id), 1)
1026
- ]),
1027
- E(d, {
1074
+ B.$core.state.isMobile ? M("", !0) : (y(), C(x, {
1075
+ key: 0,
1028
1076
  class: "top-projectSelector_itemLink",
1029
- href: p(we)(s.url),
1077
+ href: p(Me)(h.url),
1030
1078
  "data-top-icon": "",
1031
1079
  color: "theme",
1032
1080
  target: "_blank",
1033
- onClick: g[0] || (g[0] = D(() => {
1081
+ onClick: v[0] || (v[0] = F(() => {
1034
1082
  }, ["stop"]))
1035
- }, null, 8, ["href"]),
1036
- E(Vt, {
1037
- id: s.id,
1038
- right: s.right ?? void 0,
1039
- url: p(we)(s.url)
1083
+ }, null, 8, ["href"])),
1084
+ K(Ot, {
1085
+ id: h.id,
1086
+ right: h.right ?? void 0,
1087
+ url: p(Me)(h.url)
1040
1088
  }, null, 8, ["id", "right", "url"])
1041
- ], 64)) : (v(), T("div", qt, [
1042
- p(Ae)(s.name) ? (v(), T("div", Dt, A(i.$i18n.Projects.Add_project) + ": ", 1)) : _("", !0),
1043
- N(" " + A(s.name), 1)
1089
+ ], 64)) : (y(), T("div", Qt, [
1090
+ p(we)(h.name) ? (y(), T("div", Xt, b(B.$i18n.Projects.Add_project) + ": ", 1)) : M("", !0),
1091
+ W(" " + b(h.name), 1)
1044
1092
  ]))
1045
1093
  ]),
1046
1094
  _: 1
1047
- }, 8, ["modelValue", "items", "title", "icon", "placeholder", "api", "apiSetSearchParams", "appendSearchToResultCond", "buttonProps", "openerShortcut"]);
1095
+ }, 8, ["modelValue", "items", "title", "placeholder", "api", "apiSetSearchParams", "appendSearchToResultCond", "buttonProps", "openerShortcut"])) : M("", !0);
1048
1096
  };
1049
1097
  }
1050
- }), Me = (e) => "-" + e, X = (e) => e[0] === "-" ? e.substring(1) : e, de = (e, t) => {
1051
- e = X(e);
1052
- const o = t.find((l) => l.id === e);
1053
- if (o)
1054
- return o;
1055
- }, fo = (e, t, o) => {
1098
+ }), Ge = (e) => "-" + e, ee = (e) => e[0] === "-" ? e.substring(1) : e, ue = (e, t) => {
1099
+ e = ee(e);
1100
+ const a = t.find((o) => o.id === e);
1101
+ if (a)
1102
+ return a;
1103
+ }, Co = (e, t, a) => {
1056
1104
  t || (t = { id: e.id }), t.id = e.id, t.pos ??= "3", t.notch ??= !0, t.posBy ??= "fixed";
1057
- const l = at.genElPopupOpener("div", t);
1058
- return l.classList.add("top-tagSelector"), e.useTopButton && l.classList.add("top-tagSelector-useTopButton", "top-button", "top-color_theme", "top-as-selector"), e.useTopButton || l.classList.add("top-tagSelector-custom"), e.mode === "filter" && l.classList.add("top-tagSelector-filter"), e.mode === "setter" && !e.filters && l.classList.add("top-tagSelector-setter_single"), e.mode === "setter" && e.filters && l.classList.add("top-tagSelector-setter_several"), l.onclick = (a) => {
1059
- a.preventDefault(), a.stopPropagation(), l.onclick = null;
1060
- const n = V(e.modelValue), r = {
1061
- model: n,
1105
+ const o = ct.genElPopupOpener("div", t);
1106
+ return o.classList.add("top-tagSelector"), e.useTopButton && o.classList.add("top-tagSelector-useTopButton", "top-button", "top-color_theme", "top-as-selector"), e.useTopButton || o.classList.add("top-tagSelector-custom"), e.mode === "filter" && o.classList.add("top-tagSelector-filter"), e.mode === "setter" && !e.filters && o.classList.add("top-tagSelector-setter_single"), e.mode === "setter" && e.filters && o.classList.add("top-tagSelector-setter_several"), o.onclick = (r) => {
1107
+ r.preventDefault(), r.stopPropagation(), o.onclick = null;
1108
+ const l = _(e.modelValue), n = {
1109
+ model: l,
1062
1110
  mode: e.mode,
1063
1111
  targetId: e.targetId,
1064
1112
  filters: e.filters,
1065
1113
  payload: e.payload
1066
1114
  };
1067
- Y(l, "topTagSelectorTarget", r), delete l.dataset.topPopupDisabled, Ce(e.modelValue) || P(n, () => {
1068
- e.modelValue = n.value, oe(l, e, o);
1069
- }), l.click();
1070
- }, Ce(e.modelValue) ? P(e.modelValue, () => oe(l, e, o)) : Y(l, "topTagSelectorRender", (a) => {
1071
- e.modelValue = a;
1072
- const n = Y(l, "topTagSelectorTarget");
1073
- n && (n.model.value = a), oe(l, e, o);
1074
- }), oe(l, e, o), l;
1075
- }, mo = (e, t) => {
1076
- Y(e, "topTagSelectorRender")?.(t);
1077
- }, oe = (e, t, o) => {
1078
- const l = p(t.modelValue);
1079
- if (e.classList.toggle("top-tagSelector-selectedOne", !l.length || l.length === 1), e.classList.toggle("top-tagSelector-toTwoLine", l.length > 5), t.mode === "setter" && t.filters) {
1080
- e.innerHTML = `<div>${o}</div>`;
1115
+ Q(o, "topTagSelectorTarget", n), delete o.dataset.topPopupDisabled, Be(e.modelValue) || V(l, () => {
1116
+ e.modelValue = l.value, ae(o, e, a);
1117
+ }), o.click();
1118
+ }, Be(e.modelValue) ? V(e.modelValue, () => ae(o, e, a)) : Q(o, "topTagSelectorRender", (r) => {
1119
+ e.modelValue = r;
1120
+ const l = Q(o, "topTagSelectorTarget");
1121
+ l && (l.model.value = r), ae(o, e, a);
1122
+ }), ae(o, e, a), o;
1123
+ }, To = (e, t) => {
1124
+ Q(e, "topTagSelectorRender")?.(t);
1125
+ }, ae = (e, t, a) => {
1126
+ const o = p(t.modelValue);
1127
+ if (e.classList.toggle("top-tagSelector-selectedOne", !o.length || o.length === 1), e.classList.toggle("top-tagSelector-toTwoLine", o.length > 5), t.mode === "setter" && t.filters) {
1128
+ e.innerHTML = `<div>${a}</div>`;
1081
1129
  return;
1082
1130
  }
1083
- if (e.innerHTML = "", !l.length && t.mode === "filter") {
1084
- const a = Pe({
1131
+ if (e.innerHTML = "", !o.length && t.mode === "filter") {
1132
+ const r = Ke({
1085
1133
  id: "all",
1086
1134
  colorId: "",
1087
- name: b().Common?.All_tags ?? "",
1135
+ name: A().Common?.All_tags ?? "",
1088
1136
  state: ""
1089
1137
  });
1090
- e.append(a);
1138
+ e.append(r);
1091
1139
  }
1092
- l.forEach((a) => {
1093
- const n = Pe({
1094
- id: X(a),
1095
- colorId: de(a, t.tags)?.color_id ?? "",
1096
- name: de(a, t.tags)?.name ?? "",
1097
- state: X(a) === a ? "selected" : "excluded"
1140
+ o.forEach((r) => {
1141
+ const l = Ke({
1142
+ id: ee(r),
1143
+ colorId: ue(r, t.tags)?.color_id ?? "",
1144
+ name: ue(r, t.tags)?.name ?? "",
1145
+ state: ee(r) === r ? "selected" : "excluded"
1098
1146
  });
1099
- e.append(n);
1147
+ e.append(l);
1100
1148
  });
1101
- }, Pe = (e) => {
1149
+ }, Ke = (e) => {
1102
1150
  const t = document.createElement("div");
1103
1151
  return t.classList.add("top-tagSelector_tagIcon"), t.classList.toggle("top-tagSelector-active", !!e.state), t.classList.toggle("top-tagSelector-excluded", e.state === "excluded"), t.dataset.tag_id = e.id, t.dataset.tag_color_id = e.colorId, t.title = e.name, t;
1104
- }, Ut = [
1152
+ }, Zt = [
1105
1153
  {
1106
1154
  id: "1",
1107
1155
  name: "Without Tag",
@@ -1152,7 +1200,7 @@ const xt = /* @__PURE__ */ G({
1152
1200
  name: "Turquoise",
1153
1201
  color_id: "10"
1154
1202
  }
1155
- ], Ft = ["data-tag_id", "data-tag_color_id", "title"], ve = /* @__PURE__ */ G({
1203
+ ], eo = ["data-tag_id", "data-tag_color_id", "title"], Se = /* @__PURE__ */ L({
1156
1204
  __name: "tagIcon",
1157
1205
  props: {
1158
1206
  id: {},
@@ -1161,8 +1209,8 @@ const xt = /* @__PURE__ */ G({
1161
1209
  state: {}
1162
1210
  },
1163
1211
  setup(e) {
1164
- return (t, o) => (v(), T("div", {
1165
- class: Z({
1212
+ return (t, a) => (y(), T("div", {
1213
+ class: te({
1166
1214
  "top-tagSelector_tagIcon": !0,
1167
1215
  "top-tagSelector-active": !!e.state,
1168
1216
  "top-tagSelector-excluded": e.state === "excluded"
@@ -1170,11 +1218,11 @@ const xt = /* @__PURE__ */ G({
1170
1218
  "data-tag_id": e.id,
1171
1219
  "data-tag_color_id": e.colorId,
1172
1220
  title: e.name
1173
- }, null, 10, Ft));
1221
+ }, null, 10, eo));
1174
1222
  }
1175
- }), Wt = ["contenteditable", "onKeydown"], Ve = /* @__PURE__ */ G({
1223
+ }), to = ["contenteditable", "onKeydown"], Oe = /* @__PURE__ */ L({
1176
1224
  __name: "tagPopupListItem",
1177
- props: /* @__PURE__ */ M({
1225
+ props: /* @__PURE__ */ E({
1178
1226
  editable: { type: Boolean },
1179
1227
  disabled: { type: Boolean },
1180
1228
  canExclude: { type: Boolean },
@@ -1188,74 +1236,74 @@ const xt = /* @__PURE__ */ G({
1188
1236
  },
1189
1237
  nameModifiers: {}
1190
1238
  }),
1191
- emits: /* @__PURE__ */ M(["update:name", "unselect", "exclude", "select"], ["update:name"]),
1239
+ emits: /* @__PURE__ */ E(["update:name", "unselect", "exclude", "select"], ["update:name"]),
1192
1240
  setup(e, { emit: t }) {
1193
- const o = e, l = t, a = B(e, "name"), n = V(null), r = w(() => navigator.userAgent.indexOf("Firefox") != -1 ? {
1194
- contenteditable: u.value,
1241
+ const a = e, o = t, r = w(e, "name"), l = _(null), n = P(() => navigator.userAgent.indexOf("Firefox") != -1 ? {
1242
+ contenteditable: s.value,
1195
1243
  onpaste: (g) => g.preventDefault()
1196
- } : {}), u = V(!1), c = async () => {
1197
- u.value = !0, await Fe(), n.value?.focus();
1244
+ } : {}), s = _(!1), c = async () => {
1245
+ s.value = !0, await Ye(), l.value?.focus();
1198
1246
  }, f = () => {
1199
- const g = n.value?.innerText;
1200
- if (!g) return S();
1201
- n.value && (n.value.innerText = g), u.value = !1, l("update:name", g);
1202
- }, S = async () => {
1203
- n.value && (n.value.innerText = o.name), u.value = !1;
1247
+ const g = l.value?.innerText;
1248
+ if (!g) return I();
1249
+ l.value && (l.value.innerText = g), s.value = !1, o("update:name", g);
1250
+ }, I = async () => {
1251
+ l.value && (l.value.innerText = a.name), s.value = !1;
1204
1252
  }, i = (g) => {
1205
- if (u.value || o.disabled) return;
1253
+ if (s.value || a.disabled) return;
1206
1254
  let d = "selected";
1207
- o.canExclude && (g.ctrlKey || g.metaKey) && (d = "excluded"), o.state == d && (d = ""), d === "" && l("unselect"), d === "selected" && l("select"), d === "excluded" && l("exclude");
1255
+ a.canExclude && (g.ctrlKey || g.metaKey) && (d = "excluded"), a.state == d && (d = ""), d === "" && o("unselect"), d === "selected" && o("select"), d === "excluded" && o("exclude");
1208
1256
  };
1209
- return (g, d) => (v(), j(ye, {
1210
- class: Z({
1257
+ return (g, d) => (y(), C(ke, {
1258
+ class: te({
1211
1259
  "top-tagSelector_tagListItem": !0,
1212
- "top-tagSelector_tagListItem-inEdit": u.value,
1260
+ "top-tagSelector_tagListItem-inEdit": s.value,
1213
1261
  "top-tagSelector_tagListItem-disabled": e.disabled,
1214
1262
  "top-tagSelector_tagListItem-canExclude": e.canExclude,
1215
1263
  "top-tagSelector-active": !!e.state,
1216
1264
  "top-tagSelector-excluded": e.state === "excluded"
1217
1265
  }),
1218
- onClick: D(i, ["stop"])
1266
+ onClick: F(i, ["stop"])
1219
1267
  }, {
1220
- default: C(() => [
1221
- E(ve, {
1268
+ default: j(() => [
1269
+ K(Se, {
1222
1270
  id: e.id,
1223
- name: a.value,
1271
+ name: r.value,
1224
1272
  colorId: e.colorId,
1225
1273
  state: e.state
1226
1274
  }, null, 8, ["id", "name", "colorId", "state"]),
1227
- L("span", Ge({
1275
+ O("span", Ne({
1228
1276
  ref_key: "elName",
1229
- ref: n,
1277
+ ref: l,
1230
1278
  class: "top-tagSelector_tagListItemName",
1231
- contenteditable: u.value ? "plaintext-only" : !1
1232
- }, r.value, {
1279
+ contenteditable: s.value ? "plaintext-only" : !1
1280
+ }, n.value, {
1233
1281
  onKeydown: [
1234
- je(D(f, ["stop"]), ["enter"]),
1235
- je(D(S, ["stop"]), ["esc"])
1282
+ be(F(f, ["stop"]), ["enter"]),
1283
+ be(F(I, ["stop"]), ["esc"])
1236
1284
  ]
1237
- }), A(a.value), 17, Wt),
1238
- e.editable ? (v(), T(q, { key: 0 }, [
1239
- u.value ? (v(), T("span", {
1285
+ }), b(r.value), 17, to),
1286
+ e.editable ? (y(), T(D, { key: 0 }, [
1287
+ s.value ? (y(), T("span", {
1240
1288
  key: 1,
1241
1289
  "data-top-icon": "",
1242
1290
  class: "top-tagSelector_edit",
1243
- onClick: D(f, ["stop"])
1244
- })) : (v(), T("span", {
1291
+ onClick: F(f, ["stop"])
1292
+ })) : (y(), T("span", {
1245
1293
  key: 0,
1246
1294
  "data-top-icon": "",
1247
1295
  class: "top-tagSelector_edit",
1248
1296
  onClick: c
1249
1297
  }))
1250
- ], 64)) : _("", !0)
1298
+ ], 64)) : M("", !0)
1251
1299
  ]),
1252
1300
  _: 1
1253
1301
  }, 8, ["class"]));
1254
1302
  }
1255
- }), zt = { key: 1 }, Jt = /* @__PURE__ */ G({
1303
+ }), oo = { key: 1 }, ao = /* @__PURE__ */ L({
1256
1304
  inheritAttrs: !1,
1257
1305
  __name: "popupOpener",
1258
- props: /* @__PURE__ */ M({
1306
+ props: /* @__PURE__ */ E({
1259
1307
  modelValue: {},
1260
1308
  id: {},
1261
1309
  tags: {},
@@ -1273,18 +1321,18 @@ const xt = /* @__PURE__ */ G({
1273
1321
  }),
1274
1322
  emits: ["update:modelValue"],
1275
1323
  setup(e) {
1276
- const t = e, o = B(e, "modelValue"), l = t.useTopButton ? Q : "div", a = t.useTopButton ? "html" : "default", n = {
1277
- model: o,
1324
+ const t = e, a = w(e, "modelValue"), o = t.useTopButton ? Z : "div", r = t.useTopButton ? "html" : "default", l = {
1325
+ model: a,
1278
1326
  mode: t.mode,
1279
1327
  targetId: t.targetId,
1280
1328
  filters: t.filters,
1281
1329
  payload: t.payload
1282
1330
  };
1283
- return (r, u) => {
1284
- const c = We("top-data");
1285
- return v(), j(Ze, { id: e.id }, {
1286
- default: C(() => [
1287
- ze((v(), j(Je(p(l)), Ge({
1331
+ return (n, s) => {
1332
+ const c = Qe("top-data");
1333
+ return y(), C(lt, { id: e.id }, {
1334
+ default: j(() => [
1335
+ Xe((y(), C(Ze(p(o)), Ne({
1288
1336
  class: {
1289
1337
  "top-tagSelector": !0,
1290
1338
  "top-tagSelector-useTopButton": t.useTopButton,
@@ -1293,41 +1341,41 @@ const xt = /* @__PURE__ */ G({
1293
1341
  "top-tagSelector-filter": t.mode === "filter",
1294
1342
  "top-tagSelector-setter_single": t.mode === "setter" && !e.filters,
1295
1343
  "top-tagSelector-setter_several": t.mode === "setter" && e.filters,
1296
- "top-tagSelector-selectedOne": !o.value.length || o.value.length === 1,
1297
- "top-tagSelector-toTwoLine": o.value.length > 5
1344
+ "top-tagSelector-selectedOne": !a.value.length || a.value.length === 1,
1345
+ "top-tagSelector-toTwoLine": a.value.length > 5
1298
1346
  },
1299
1347
  color: "theme",
1300
1348
  styling: e.styling
1301
- }, r.$attrs), {
1302
- [p(a)]: C(() => [
1303
- !o.value.length && e.mode === "filter" ? (v(), j(ve, {
1349
+ }, n.$attrs), {
1350
+ [p(r)]: j(() => [
1351
+ !a.value.length && e.mode === "filter" ? (y(), C(Se, {
1304
1352
  key: 0,
1305
1353
  id: "all",
1306
1354
  colorId: "",
1307
- name: r.$i18n.Common.All_tags ?? "",
1355
+ name: n.$i18n.Common.All_tags ?? "",
1308
1356
  state: ""
1309
- }, null, 8, ["name"])) : _("", !0),
1310
- e.mode === "setter" && e.filters ? (v(), T("div", zt, [
1311
- Ye(r.$slots, "default")
1312
- ])) : (v(!0), T(q, { key: 2 }, se(o.value, (f) => (v(), j(ve, {
1313
- id: p(X)(f),
1314
- colorId: p(de)(f, e.tags)?.color_id ?? "",
1315
- name: p(de)(f, e.tags)?.name ?? "",
1316
- state: p(X)(f) === f ? "selected" : "excluded"
1357
+ }, null, 8, ["name"])) : M("", !0),
1358
+ e.mode === "setter" && e.filters ? (y(), T("div", oo, [
1359
+ et(n.$slots, "default")
1360
+ ])) : (y(!0), T(D, { key: 2 }, ce(a.value, (f) => (y(), C(Se, {
1361
+ id: p(ee)(f),
1362
+ colorId: p(ue)(f, e.tags)?.color_id ?? "",
1363
+ name: p(ue)(f, e.tags)?.name ?? "",
1364
+ state: p(ee)(f) === f ? "selected" : "excluded"
1317
1365
  }, null, 8, ["id", "colorId", "name", "state"]))), 256))
1318
1366
  ]),
1319
1367
  _: 2
1320
1368
  }, 1040, ["class", "styling"])), [
1321
- [c, n, "topTagSelectorTarget"]
1369
+ [c, l, "topTagSelectorTarget"]
1322
1370
  ])
1323
1371
  ]),
1324
1372
  _: 3
1325
1373
  }, 8, ["id"]);
1326
1374
  };
1327
1375
  }
1328
- }), po = /* @__PURE__ */ G({
1376
+ }), jo = /* @__PURE__ */ L({
1329
1377
  __name: "tagSelector",
1330
- props: /* @__PURE__ */ M({
1378
+ props: /* @__PURE__ */ E({
1331
1379
  modelValue: {},
1332
1380
  tags: {},
1333
1381
  tagsEditable: { type: Boolean },
@@ -1345,177 +1393,177 @@ const xt = /* @__PURE__ */ G({
1345
1393
  },
1346
1394
  modelModifiers: {},
1347
1395
  tags: {
1348
- default: _e(Ut)
1396
+ default: Re(Zt)
1349
1397
  },
1350
1398
  tagsModifiers: {}
1351
1399
  }),
1352
- emits: /* @__PURE__ */ M(["selector", "setter", "tagsChanged"], ["update:modelValue", "update:tags"]),
1400
+ emits: /* @__PURE__ */ E(["selector", "setter", "tagsChanged"], ["update:modelValue", "update:tags"]),
1353
1401
  setup(e, { emit: t }) {
1354
- const o = b(), l = e, a = B(e, "modelValue"), n = B(e, "tags"), r = t, u = Xe((h, I) => {
1355
- r(h, I);
1356
- }, l.emitDelay);
1357
- l.singleMode && !a.value.length && (a.value = [n.value[0].id]);
1358
- const c = l.id ?? "top-popup-id-" + Math.random(), f = V("add"), S = () => {
1359
- const h = " " + o.Common.Tags?.toLowerCase(), I = /* @__PURE__ */ new Map();
1360
- return I.set("add", { value: "add", title: o.Common.Add + h }), I.set("replace", { value: "replace", title: o.Common.Replace + h }), I.set("delete", { value: "delete", title: o.Common.Delete + h }), I;
1402
+ const a = A(), o = e, r = w(e, "modelValue"), l = w(e, "tags"), n = t, s = at((v, x) => {
1403
+ n(v, x);
1404
+ }, o.emitDelay);
1405
+ o.singleMode && !r.value.length && (r.value = [l.value[0].id]);
1406
+ const c = o.id ?? "top-popup-id-" + Math.random(), f = _("add"), I = () => {
1407
+ const v = " " + a.Common.Tags?.toLowerCase(), x = /* @__PURE__ */ new Map();
1408
+ return x.set("add", { value: "add", title: a.Common.Add + v }), x.set("replace", { value: "replace", title: a.Common.Replace + v }), x.set("delete", { value: "delete", title: a.Common.Delete + v }), x;
1361
1409
  };
1362
- let i = He({
1363
- model: a,
1410
+ let i = tt({
1411
+ model: r,
1364
1412
  mode: "filter",
1365
1413
  targetId: void 0,
1366
1414
  filters: void 0,
1367
1415
  payload: void 0
1368
1416
  });
1369
- P(a, () => {
1370
- u("selector", a.value);
1417
+ V(r, () => {
1418
+ s("selector", r.value);
1371
1419
  });
1372
- const g = w(() => {
1373
- if (i.value.mode === "setter" && l.maxTagsForSetter && !i.value.filters)
1374
- return i.value.model.value.length >= l.maxTagsForSetter;
1375
- }), d = (h) => {
1376
- if (h !== "all") {
1377
- if (i.value.model.value.includes(h)) return "selected";
1378
- if (i.value.model.value.includes(Me(h))) return "excluded";
1420
+ const g = P(() => {
1421
+ if (i.value.mode === "setter" && o.maxTagsForSetter && !i.value.filters)
1422
+ return i.value.model.value.length >= o.maxTagsForSetter;
1423
+ }), d = (v) => {
1424
+ if (v !== "all") {
1425
+ if (i.value.model.value.includes(v)) return "selected";
1426
+ if (i.value.model.value.includes(Ge(v))) return "excluded";
1379
1427
  }
1380
- return h === "all" && !i.value.model.value.length ? "selected" : "";
1381
- }, s = (h, I) => {
1382
- const x = Me(h);
1383
- let k = i.value.model.value.filter((K) => K !== h && K !== x);
1384
- I === "select" && k.push(h), I === "exclude" && k.push(x), i.value.mode === "setter" && i.value.targetId !== void 0 && l.requiredForSetter && (k.length || k.push("1"), k.length === 2 && i.value.model.value.length === 1 && i.value.model.value[0] === "1" && (k = k.filter((K) => K !== "1"))), l.singleMode && !i.value.filters && (k.length || (k = i.value.model.value), k.length > 1 && (k = [k[k.length - 1]])), k.sort((K, te) => {
1385
- if (!l.tags) return 0;
1386
- const F = l.tags.findIndex((z) => z.id === K), W = l.tags.findIndex((z) => z.id === te);
1387
- return F - W;
1388
- }), i.value.model.value = k, i.value.mode === "setter" && i.value.targetId !== void 0 && u("setter", {
1428
+ return v === "all" && !i.value.model.value.length ? "selected" : "";
1429
+ }, u = (v, x) => {
1430
+ const h = Ge(v);
1431
+ let k = i.value.model.value.filter((G) => G !== v && G !== h);
1432
+ x === "select" && k.push(v), x === "exclude" && k.push(h), i.value.mode === "setter" && i.value.targetId !== void 0 && o.requiredForSetter && (k.length || k.push("1"), k.length === 2 && i.value.model.value.length === 1 && i.value.model.value[0] === "1" && (k = k.filter((G) => G !== "1"))), o.singleMode && !i.value.filters && (k.length || (k = i.value.model.value), k.length > 1 && (k = [k[k.length - 1]])), k.sort((G, oe) => {
1433
+ if (!o.tags) return 0;
1434
+ const J = o.tags.findIndex((z) => z.id === G), H = o.tags.findIndex((z) => z.id === oe);
1435
+ return J - H;
1436
+ }), i.value.model.value = k, i.value.mode === "setter" && i.value.targetId !== void 0 && s("setter", {
1389
1437
  tagsIds: k,
1390
1438
  targetId: i.value.targetId,
1391
1439
  payload: i.value.payload
1392
1440
  });
1393
- }, m = w(() => {
1394
- let h = "top-tagSelector_popup";
1395
- return i.value.mode === "filter" && (h += " top-tagSelector_popup-filter"), i.value.mode === "setter" && (h += " top-tagSelector_popup-setter"), h;
1396
- }), ee = () => {
1397
- const h = prompt("", "New tag");
1398
- if (!h || h === "New tag") return;
1399
- const I = n.value.length + 1;
1400
- n.value.push({
1401
- id: String(I),
1402
- name: h,
1403
- color_id: String((I - 1) % 10 + 1)
1404
- }), r("tagsChanged", n.value);
1405
- }, U = (h) => {
1406
- if (i.value = Y(h.elPopupOpener, "topTagSelectorTarget"), !i.value) throw new Error("Open popup TopTagSelector required v-data:topTagSelectorTarget");
1407
- if (i.value.filters && (f.value = "add", i.value.model.value = []), !J.$?.ui.sortable) {
1441
+ }, m = P(() => {
1442
+ let v = "top-tagSelector_popup";
1443
+ return i.value.mode === "filter" && (v += " top-tagSelector_popup-filter"), i.value.mode === "setter" && (v += " top-tagSelector_popup-setter"), v;
1444
+ }), q = () => {
1445
+ const v = prompt("", "New tag");
1446
+ if (!v || v === "New tag") return;
1447
+ const x = l.value.length + 1;
1448
+ l.value.push({
1449
+ id: String(x),
1450
+ name: v,
1451
+ color_id: String((x - 1) % 10 + 1)
1452
+ }), n("tagsChanged", l.value);
1453
+ }, N = (v) => {
1454
+ if (i.value = Q(v.elPopupOpener, "topTagSelectorTarget"), !i.value) throw new Error("Open popup TopTagSelector required v-data:topTagSelectorTarget");
1455
+ if (i.value.filters && (f.value = "add", i.value.model.value = []), !Y.$?.ui.sortable) {
1408
1456
  console.info("Для работы сортировки требуется глобальная загрузка jQuery UI Sortable");
1409
1457
  return;
1410
1458
  }
1411
- !J.state.isMobile && !J.state.isMobileUA && n.value && $(h.elPopup).sortable({
1459
+ !Y.state.isMobile && !Y.state.isMobileUA && l.value && $(v.elPopup).sortable({
1412
1460
  items: 'li:has([data-tag_id]:not([data-tag_id="all"]))',
1413
1461
  /**
1414
1462
  * @todo Удалить `[contenteditable="true"]` через пол года после выхода версии firefox с поддержкой contenteditable plaintext-only, включая бета версии
1415
1463
  */
1416
1464
  cancel: '[contenteditable="plaintext-only"], [contenteditable="true"]',
1417
1465
  distance: 10,
1418
- stop: function(I, x) {
1419
- if (!n.value) return;
1420
- const k = $(x.item).parent().find("[data-tag_id]"), K = [];
1421
- k.each((te, F) => {
1422
- if (!n.value) return;
1423
- const W = $(F).attr("data-tag_id");
1424
- K.push(W);
1425
- }), n.value.sort((te, F) => {
1426
- const W = K.findIndex((ue) => ue === te.id), z = K.findIndex((ue) => ue === F.id);
1427
- return W - z;
1428
- }), u("tagsChanged", n.value);
1466
+ stop: function(x, h) {
1467
+ if (!l.value) return;
1468
+ const k = $(h.item).parent().find("[data-tag_id]"), G = [];
1469
+ k.each((oe, J) => {
1470
+ if (!l.value) return;
1471
+ const H = $(J).attr("data-tag_id");
1472
+ G.push(H);
1473
+ }), l.value.sort((oe, J) => {
1474
+ const H = G.findIndex((fe) => fe === oe.id), z = G.findIndex((fe) => fe === J.id);
1475
+ return H - z;
1476
+ }), s("tagsChanged", l.value);
1429
1477
  }
1430
1478
  });
1431
- }, De = (h) => {
1432
- J.$?.ui.sortable && $(h.elPopup).data("ui-sortable") && $(h.elPopup).sortable("destroy");
1479
+ }, B = (v) => {
1480
+ Y.$?.ui.sortable && $(v.elPopup).data("ui-sortable") && $(v.elPopup).sortable("destroy");
1433
1481
  };
1434
- return (h, I) => (v(), T(q, null, [
1435
- E(Jt, {
1436
- modelValue: a.value,
1437
- "onUpdate:modelValue": I[0] || (I[0] = (x) => a.value = x),
1482
+ return (v, x) => (y(), T(D, null, [
1483
+ K(ao, {
1484
+ modelValue: r.value,
1485
+ "onUpdate:modelValue": x[0] || (x[0] = (h) => r.value = h),
1438
1486
  id: p(c),
1439
- tags: n.value,
1487
+ tags: l.value,
1440
1488
  styling: e.styling,
1441
1489
  mode: "filter",
1442
1490
  useTopButton: e.useTopButton
1443
1491
  }, null, 8, ["modelValue", "id", "tags", "styling", "useTopButton"]),
1444
- E(he, {
1492
+ K(xe, {
1445
1493
  id: p(c),
1446
- class: Z(m.value),
1447
- onOpen: I[4] || (I[4] = (x) => U(x)),
1448
- onClose: I[5] || (I[5] = (x) => De(x)),
1494
+ class: te(m.value),
1495
+ onOpen: x[4] || (x[4] = (h) => N(h)),
1496
+ onClose: x[5] || (x[5] = (h) => B(h)),
1449
1497
  "transition-duration": 50
1450
- }, Qe({
1451
- contentList: C(() => [
1452
- p(i).mode === "filter" && !e.singleMode ? (v(), j(Ve, {
1498
+ }, ot({
1499
+ contentList: j(() => [
1500
+ p(i).mode === "filter" && !e.singleMode ? (y(), C(Oe, {
1453
1501
  key: 0,
1454
1502
  id: "all",
1455
1503
  colorId: "",
1456
- name: h.$i18n.Common.All_tags ?? "",
1504
+ name: v.$i18n.Common.All_tags ?? "",
1457
1505
  state: p(i).model.value.length ? "" : "selected",
1458
- onSelect: I[3] || (I[3] = (x) => p(i).model.value = [])
1459
- }, null, 8, ["name", "state"])) : _("", !0),
1460
- (v(!0), T(q, null, se(n.value, (x) => (v(), j(Ve, {
1461
- key: x.id,
1462
- id: x.id,
1463
- colorId: x.color_id,
1464
- name: x.name,
1465
- state: d(x.id),
1506
+ onSelect: x[3] || (x[3] = (h) => p(i).model.value = [])
1507
+ }, null, 8, ["name", "state"])) : M("", !0),
1508
+ (y(!0), T(D, null, ce(l.value, (h) => (y(), C(Oe, {
1509
+ key: h.id,
1510
+ id: h.id,
1511
+ colorId: h.color_id,
1512
+ name: h.name,
1513
+ state: d(h.id),
1466
1514
  canExclude: p(i).mode === "filter" && !e.singleMode,
1467
1515
  editable: e.tagsEditable,
1468
- disabled: g.value && d(x.id) === "",
1469
- onUnselect: (k) => s(x.id, "unselect"),
1470
- onSelect: (k) => s(x.id, "select"),
1471
- onExclude: (k) => s(x.id, "exclude"),
1516
+ disabled: g.value && d(h.id) === "",
1517
+ onUnselect: (k) => u(h.id, "unselect"),
1518
+ onSelect: (k) => u(h.id, "select"),
1519
+ onExclude: (k) => u(h.id, "exclude"),
1472
1520
  "onUpdate:name": (k) => {
1473
- x.name = k, p(u)("tagsChanged", n.value);
1521
+ h.name = k, p(s)("tagsChanged", l.value);
1474
1522
  }
1475
1523
  }, null, 8, ["id", "colorId", "name", "state", "canExclude", "editable", "disabled", "onUnselect", "onSelect", "onExclude", "onUpdate:name"]))), 128)),
1476
- e.tagsEditable && n.value.length < e.tagsMax && n.value.length < 20 ? (v(), j(ye, {
1524
+ e.tagsEditable && l.value.length < e.tagsMax && l.value.length < 20 ? (y(), C(ke, {
1477
1525
  key: 1,
1478
1526
  "data-top-icon": "",
1479
- onClick: D(ee, ["stop"])
1527
+ onClick: F(q, ["stop"])
1480
1528
  }, {
1481
- default: C(() => [
1482
- N(A(h.$i18n.Common.Add), 1)
1529
+ default: j(() => [
1530
+ W(b(v.$i18n.Common.Add), 1)
1483
1531
  ]),
1484
1532
  _: 1
1485
- })) : _("", !0)
1533
+ })) : M("", !0)
1486
1534
  ]),
1487
1535
  _: 2
1488
1536
  }, [
1489
1537
  p(i).mode === "setter" && p(i).filters ? {
1490
1538
  name: "header",
1491
- fn: C(() => [
1492
- E(fe, {
1539
+ fn: j(() => [
1540
+ K(ve, {
1493
1541
  modelValue: f.value,
1494
- "onUpdate:modelValue": I[1] || (I[1] = (x) => f.value = x),
1495
- options: S()
1542
+ "onUpdate:modelValue": x[1] || (x[1] = (h) => f.value = h),
1543
+ options: I()
1496
1544
  }, null, 8, ["modelValue", "options"])
1497
1545
  ]),
1498
1546
  key: "0"
1499
1547
  } : void 0,
1500
1548
  p(i).mode === "setter" && p(i).filters ? {
1501
1549
  name: "footer",
1502
- fn: C(() => [
1503
- E(Q, { color: "theme" }, {
1504
- default: C(() => [
1505
- N(A(h.$i18n.Common.Cancel2), 1)
1550
+ fn: j(() => [
1551
+ K(Z, { color: "theme" }, {
1552
+ default: j(() => [
1553
+ W(b(v.$i18n.Common.Cancel2), 1)
1506
1554
  ]),
1507
1555
  _: 1
1508
1556
  }),
1509
- E(Q, {
1510
- onClick: I[2] || (I[2] = (x) => p(u)("setter", {
1557
+ K(Z, {
1558
+ onClick: x[2] || (x[2] = (h) => p(s)("setter", {
1511
1559
  tagsIds: p(i).model.value,
1512
1560
  filters: p(i).filters,
1513
1561
  filtersAction: f.value,
1514
1562
  payload: p(i).payload
1515
1563
  }))
1516
1564
  }, {
1517
- default: C(() => [
1518
- N(A(f.value === "add" ? h.$i18n.Common.Add : "") + " " + A(f.value === "replace" ? h.$i18n.Common.Replace : "") + " " + A(f.value === "delete" ? h.$i18n.Common.Delete : ""), 1)
1565
+ default: j(() => [
1566
+ W(b(f.value === "add" ? v.$i18n.Common.Add : "") + " " + b(f.value === "replace" ? v.$i18n.Common.Replace : "") + " " + b(f.value === "delete" ? v.$i18n.Common.Delete : ""), 1)
1519
1567
  ]),
1520
1568
  _: 1
1521
1569
  })
@@ -1527,18 +1575,18 @@ const xt = /* @__PURE__ */ G({
1527
1575
  }
1528
1576
  });
1529
1577
  export {
1530
- io as TopCompetitorSelector,
1531
- co as TopGroupSelector,
1532
- go as TopProjectSelector,
1533
- uo as TopRegionSelector,
1534
- po as TopTagSelector,
1535
- Jt as TopTagSelectorPopupOpener,
1536
- ve as TopTagSelectorTagIcon,
1537
- mt as dialogRegionSelector,
1538
- ft as findRegion,
1539
- fo as genElTopTagSelectorPopupOpener,
1540
- Oe as genSearcherByKey,
1541
- mo as renderElTopTagSelectorPopupOpener,
1542
- so as useItemsFromCompetitors
1578
+ yo as TopCompetitorSelector,
1579
+ xo as TopGroupSelector,
1580
+ ko as TopProjectSelector,
1581
+ So as TopRegionSelector,
1582
+ jo as TopTagSelector,
1583
+ ao as TopTagSelectorPopupOpener,
1584
+ Se as TopTagSelectorTagIcon,
1585
+ St as dialogRegionSelector,
1586
+ It as findRegion,
1587
+ Co as genElTopTagSelectorPopupOpener,
1588
+ Fe as genSearcherByKey,
1589
+ To as renderElTopTagSelectorPopupOpener,
1590
+ Io as useItemsFromCompetitors
1543
1591
  };
1544
1592
  //# sourceMappingURL=project.js.map