@topvisor/ui 1.5.8-7 → 1.5.8-dialogShadow.0

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 (131) hide show
  1. package/.chunks/{api-BlIxMRlW.amd.js → api-BD74aA98.amd.js} +2 -2
  2. package/.chunks/{api-BlIxMRlW.amd.js.map → api-BD74aA98.amd.js.map} +1 -1
  3. package/.chunks/{api-BlIxMRlW.esm.js → api-BD74aA98.esm.js} +2 -2
  4. package/.chunks/{api-BlIxMRlW.esm.js.map → api-BD74aA98.esm.js.map} +1 -1
  5. package/.chunks/{app-CyODeY0D.amd.js → app-DGsWGbDX.amd.js} +2 -2
  6. package/.chunks/{app-CyODeY0D.amd.js.map → app-DGsWGbDX.amd.js.map} +1 -1
  7. package/.chunks/{app-CyODeY0D.esm.js → app-DGsWGbDX.esm.js} +5 -5
  8. package/.chunks/{app-CyODeY0D.esm.js.map → app-DGsWGbDX.esm.js.map} +1 -1
  9. package/.chunks/{datepicker-CBAwfPPW.amd.js → datepicker-C7FNogyy.amd.js} +2 -2
  10. package/.chunks/{datepicker-CBAwfPPW.amd.js.map → datepicker-C7FNogyy.amd.js.map} +1 -1
  11. package/.chunks/{datepicker-CBAwfPPW.esm.js → datepicker-C7FNogyy.esm.js} +2 -2
  12. package/.chunks/{datepicker-CBAwfPPW.esm.js.map → datepicker-C7FNogyy.esm.js.map} +1 -1
  13. package/.chunks/dialog-DKGzAD_z.amd.js +2 -0
  14. package/.chunks/dialog-DKGzAD_z.amd.js.map +1 -0
  15. package/.chunks/{dialog-C8fss11q.esm.js → dialog-DKGzAD_z.esm.js} +18 -18
  16. package/.chunks/dialog-DKGzAD_z.esm.js.map +1 -0
  17. package/.chunks/{dialog_regionSelectorRegions-zJShjr2f.amd.js → dialog_regionSelectorRegions-BIjtdwxa.amd.js} +2 -2
  18. package/.chunks/{dialog_regionSelectorRegions-zJShjr2f.amd.js.map → dialog_regionSelectorRegions-BIjtdwxa.amd.js.map} +1 -1
  19. package/.chunks/{dialog_regionSelectorRegions-zJShjr2f.esm.js → dialog_regionSelectorRegions-BIjtdwxa.esm.js} +4 -4
  20. package/.chunks/dialog_regionSelectorRegions-BIjtdwxa.esm.js.map +1 -0
  21. package/.chunks/{forms-LywqKN9I.amd.js → forms-_4U0sLFk.amd.js} +2 -2
  22. package/.chunks/forms-_4U0sLFk.amd.js.map +1 -0
  23. package/.chunks/{forms-LywqKN9I.esm.js → forms-_4U0sLFk.esm.js} +116 -116
  24. package/.chunks/forms-_4U0sLFk.esm.js.map +1 -0
  25. package/.chunks/formsExt-BZZEpY-a.amd.js +2 -0
  26. package/.chunks/formsExt-BZZEpY-a.amd.js.map +1 -0
  27. package/.chunks/{formsExt-Iw04hpHr.esm.js → formsExt-BZZEpY-a.esm.js} +183 -183
  28. package/.chunks/formsExt-BZZEpY-a.esm.js.map +1 -0
  29. package/.chunks/{notice-Dw5ZUJxW.amd.js → notice-FzLgMsrr.amd.js} +2 -2
  30. package/.chunks/{notice-Dw5ZUJxW.amd.js.map → notice-FzLgMsrr.amd.js.map} +1 -1
  31. package/.chunks/{notice-Dw5ZUJxW.esm.js → notice-FzLgMsrr.esm.js} +2 -2
  32. package/.chunks/notice-FzLgMsrr.esm.js.map +1 -0
  33. package/.chunks/{popup-BqacuTuJ.amd.js → popup-CS0IahOr.amd.js} +2 -2
  34. package/.chunks/{popup-BqacuTuJ.amd.js.map → popup-CS0IahOr.amd.js.map} +1 -1
  35. package/.chunks/{popup-BqacuTuJ.esm.js → popup-CS0IahOr.esm.js} +3 -3
  36. package/.chunks/{popup-BqacuTuJ.esm.js.map → popup-CS0IahOr.esm.js.map} +1 -1
  37. package/.chunks/popup-DViuKwOc.amd.js +2 -0
  38. package/.chunks/popup-DViuKwOc.amd.js.map +1 -0
  39. package/.chunks/{popup-ClpsGU2P.esm.js → popup-DViuKwOc.esm.js} +104 -104
  40. package/.chunks/popup-DViuKwOc.esm.js.map +1 -0
  41. package/.chunks/{utils-CZnFOkS6.amd.js → utils-BtqYaMHp.amd.js} +2 -2
  42. package/.chunks/{utils-CZnFOkS6.amd.js.map → utils-BtqYaMHp.amd.js.map} +1 -1
  43. package/.chunks/{utils-CZnFOkS6.esm.js → utils-BtqYaMHp.esm.js} +3 -3
  44. package/.chunks/{utils-CZnFOkS6.esm.js.map → utils-BtqYaMHp.esm.js.map} +1 -1
  45. package/.chunks/{utils-ZgQqVN0T.amd.js → utils-Cou0pGI4.amd.js} +2 -2
  46. package/.chunks/utils-Cou0pGI4.amd.js.map +1 -0
  47. package/.chunks/{utils-ZgQqVN0T.esm.js → utils-Cou0pGI4.esm.js} +8 -6
  48. package/.chunks/{utils-ZgQqVN0T.esm.js.map → utils-Cou0pGI4.esm.js.map} +1 -1
  49. package/.chunks/{worker-a6MSM1uV.amd.js → worker-D28QqQ45.amd.js} +2 -2
  50. package/.chunks/{worker-a6MSM1uV.amd.js.map → worker-D28QqQ45.amd.js.map} +1 -1
  51. package/.chunks/{worker-a6MSM1uV.esm.js → worker-D28QqQ45.esm.js} +3 -3
  52. package/.chunks/{worker-a6MSM1uV.esm.js.map → worker-D28QqQ45.esm.js.map} +1 -1
  53. package/api/index.amd.js +1 -1
  54. package/api/index.amd.js.map +1 -1
  55. package/api/index.js +1 -1
  56. package/autoload-css-manifest.amd.json +4 -4
  57. package/autoload-css-manifest.json +4 -4
  58. package/charts/charts.amd.js +1 -1
  59. package/charts/charts.amd.js.map +1 -1
  60. package/charts/charts.js +1 -1
  61. package/core/app.amd.js +1 -1
  62. package/core/app.amd.js.map +1 -1
  63. package/core/app.js +3 -3
  64. package/dialog/dialog.amd.js +1 -1
  65. package/dialog/dialog.amd.js.map +1 -1
  66. package/dialog/dialog.js +2 -2
  67. package/forms/forms.amd.js +1 -1
  68. package/forms/forms.amd.js.map +1 -1
  69. package/forms/forms.js +1 -1
  70. package/formsExt/formsExt.amd.js +1 -1
  71. package/formsExt/formsExt.amd.js.map +1 -1
  72. package/formsExt/formsExt.js +1 -1
  73. package/layout/layout.amd.js +1 -1
  74. package/layout/layout.amd.js.map +1 -1
  75. package/layout/layout.js +3 -3
  76. package/layout/layout.js.map +1 -1
  77. package/package.json +8 -2
  78. package/popup/popup.amd.js +1 -1
  79. package/popup/popup.amd.js.map +1 -1
  80. package/popup/popup.js +1 -1
  81. package/popup/worker.amd.js +1 -1
  82. package/popup/worker.amd.js.map +1 -1
  83. package/popup/worker.js +1 -1
  84. package/project/project.amd.js +1 -1
  85. package/project/project.amd.js.map +1 -1
  86. package/project/project.js +32 -32
  87. package/project/project.js.map +1 -1
  88. package/schedule/schedule.amd.js +1 -1
  89. package/schedule/schedule.amd.js.map +1 -1
  90. package/schedule/schedule.js +90 -90
  91. package/schedule/schedule.js.map +1 -1
  92. package/tabs/tabs.amd.js +1 -1
  93. package/tabs/tabs.amd.js.map +1 -1
  94. package/tabs/tabs.js +3 -3
  95. package/tabs/tabs.js.map +1 -1
  96. package/tabsView/tabsView.amd.js +1 -1
  97. package/tabsView/tabsView.amd.js.map +1 -1
  98. package/tabsView/tabsView.js +11 -11
  99. package/tabsView/tabsView.js.map +1 -1
  100. package/utils/clipboard.amd.js +1 -1
  101. package/utils/clipboard.amd.js.map +1 -1
  102. package/utils/clipboard.js +1 -1
  103. package/utils/date.amd.js +1 -1
  104. package/utils/date.amd.js.map +1 -1
  105. package/utils/date.js +1 -1
  106. package/utils/device.amd.js +1 -1
  107. package/utils/device.amd.js.map +1 -1
  108. package/utils/device.js +1 -1
  109. package/utils/lodash.amd.js +1 -1
  110. package/utils/lodash.amd.js.map +1 -1
  111. package/utils/lodash.js +1 -1
  112. package/utils/price.amd.js +1 -1
  113. package/utils/price.amd.js.map +1 -1
  114. package/utils/price.js +1 -1
  115. package/utils/string.amd.js +1 -1
  116. package/utils/string.amd.js.map +1 -1
  117. package/utils/string.js +1 -1
  118. package/.chunks/dialog-C8fss11q.amd.js +0 -2
  119. package/.chunks/dialog-C8fss11q.amd.js.map +0 -1
  120. package/.chunks/dialog-C8fss11q.esm.js.map +0 -1
  121. package/.chunks/dialog_regionSelectorRegions-zJShjr2f.esm.js.map +0 -1
  122. package/.chunks/forms-LywqKN9I.amd.js.map +0 -1
  123. package/.chunks/forms-LywqKN9I.esm.js.map +0 -1
  124. package/.chunks/formsExt-Iw04hpHr.amd.js +0 -2
  125. package/.chunks/formsExt-Iw04hpHr.amd.js.map +0 -1
  126. package/.chunks/formsExt-Iw04hpHr.esm.js.map +0 -1
  127. package/.chunks/notice-Dw5ZUJxW.esm.js.map +0 -1
  128. package/.chunks/popup-ClpsGU2P.amd.js +0 -2
  129. package/.chunks/popup-ClpsGU2P.amd.js.map +0 -1
  130. package/.chunks/popup-ClpsGU2P.esm.js.map +0 -1
  131. package/.chunks/utils-ZgQqVN0T.amd.js.map +0 -1
@@ -5,8 +5,8 @@
5
5
  _autoloadCSSCore.insertCSSLinkToPage(fileNames, true);
6
6
  /* end import css */
7
7
 
8
- import { E as e, O as t, c as n, h as r, n as i, u as a } from "../.chunks/forms-LywqKN9I.esm.js";
9
- import "../.chunks/app-CyODeY0D.esm.js";
8
+ import { E as e, O as t, c as n, h as r, n as i, u as a } from "../.chunks/forms-_4U0sLFk.esm.js";
9
+ import "../.chunks/app-DGsWGbDX.esm.js";
10
10
  import { isEmail as o } from "../utils/check.js";
11
11
  import { numberEnding as s } from "../utils/string.js";
12
12
  import { Fragment as c, computed as l, createBlock as u, createCommentVNode as d, createElementBlock as f, createElementVNode as p, createTextVNode as m, createVNode as h, defineComponent as g, nextTick as _, normalizeClass as v, onBeforeUnmount as y, onMounted as b, openBlock as x, ref as S, renderList as C, renderSlot as w, resolveComponent as T, toDisplayString as E, toRaw as ee, unref as D, vModelCheckbox as O, withCtx as k, withDirectives as te, withKeys as ne, withModifiers as A } from "vue";
@@ -25,22 +25,22 @@ var j = { class: "top-schedule_header" }, M = { class: "top-schedule_headerTitle
25
25
  title: {}
26
26
  },
27
27
  emits: ["update:triggerType"],
28
- setup(t) {
29
- let n = t, r = e(), a = {
30
- go: r.Projects.Checks,
31
- report: r.Projects.Reports,
28
+ setup(t, { emit: n, slots: r }) {
29
+ let a = t, o = e(), s = {
30
+ go: o.Projects.Checks,
31
+ report: o.Projects.Reports,
32
32
  neutral: ""
33
- }, o = n.title ?? a[n.styling];
34
- return (e, n) => (x(), f("div", { class: v({
33
+ }, c = a.title ?? s[a.styling];
34
+ return (e, a) => (x(), f("div", { class: v({
35
35
  "top-schedule": !0,
36
36
  [`top-schedule-style_${t.styling}`]: !0
37
- }) }, [p("div", j, [p("div", M, E(D(o)), 1), h(i, {
37
+ }) }, [p("div", j, [p("div", M, E(D(c)), 1), h(i, {
38
38
  class: "top-schedule_headerTriggerType",
39
39
  modelValue: t.triggerType,
40
- "onUpdate:modelValue": n[0] ||= (t) => e.$emit("update:triggerType", t),
40
+ "onUpdate:modelValue": a[0] ||= (e) => n("update:triggerType", e),
41
41
  options: t.triggerTypeOptions,
42
42
  size: "s"
43
- }, null, 8, ["modelValue", "options"])]), t.triggerType !== "onDemand" && e.$slots.body ? (x(), f("div", N, [w(e.$slots, "body")])) : d("", !0)], 2));
43
+ }, null, 8, ["modelValue", "options"])]), t.triggerType !== "onDemand" && r.body ? (x(), f("div", N, [w(e.$slots, "body")])) : d("", !0)], 2));
44
44
  }
45
45
  }), F = {}, I = { class: "top-schedule_bodyContainer" };
46
46
  function L(e, t) {
@@ -164,53 +164,53 @@ var R = /*#__PURE__*/ a(F, [["render", L]]), z = (t) => {
164
164
  },
165
165
  emits: ["update:modelValue", "submit"],
166
166
  setup(i, { emit: a }) {
167
- let s = i, c = a, l = e(), u = t.$, d = S(), p = S(), m = null, g = {}, v = (e) => e.filter((e) => !s.emails.includes(e)), C = (e = s.modelValue) => {
167
+ let s = a, c = i, l = a, u = e(), d = t.$, p = S(), m = S(), g = null, v = {}, C = (e) => e.filter((e) => !c.emails.includes(e)), w = (e = c.modelValue) => {
168
168
  let n = String(e).trim();
169
169
  if (n) {
170
170
  if (!o(n)) {
171
- t.notice(l.Common.Enter_valid_email_notice, "error");
171
+ t.notice(u.Common.Enter_valid_email_notice, "error");
172
172
  return;
173
173
  }
174
- c("submit", n);
174
+ l("submit", n);
175
175
  }
176
- }, w = async () => {
177
- if (await _(), m = p.value?.$el.querySelector("input") ?? null, m) {
178
- if (!u?.ui?.autocomplete) {
176
+ }, T = async () => {
177
+ if (await _(), g = m.value?.$el.querySelector("input") ?? null, g) {
178
+ if (!d?.ui?.autocomplete) {
179
179
  console.info("Для работы autocomplete требуется глобальная загрузка jQuery UI Autocomplete");
180
180
  return;
181
181
  }
182
- u(m).autocomplete({
183
- appendTo: d.value,
182
+ d(g).autocomplete({
183
+ appendTo: p.value,
184
184
  minLength: 0,
185
185
  source: async (e, t) => {
186
186
  let n = e.term;
187
- n in g || (g[n] = await s.getEmailSuggestions(n)), t(v(g[n]).map((e) => ({
187
+ n in v || (v[n] = await c.getEmailSuggestions(n)), t(C(v[n]).map((e) => ({
188
188
  label: e,
189
189
  value: e
190
190
  })));
191
191
  },
192
192
  select: (e, t) => {
193
- !t.item || !m || (e.preventDefault(), C(t.item.value), c("update:modelValue", ""), u(m).trigger("focus"));
193
+ !t.item || !g || (e.preventDefault(), w(t.item.value), l("update:modelValue", ""), d(g).trigger("focus"));
194
194
  }
195
- }), u(m).attr("autocomplete", "disabled"), u(m).on("focus.scheduleEmailSelector", () => {
196
- m && u(m).trigger("input");
195
+ }), d(g).attr("autocomplete", "disabled"), d(g).on("focus.scheduleEmailSelector", () => {
196
+ g && d(g).trigger("input");
197
197
  });
198
198
  }
199
199
  };
200
200
  return b(() => {
201
- w();
201
+ T();
202
202
  }), y(() => {
203
- !u?.ui?.autocomplete || !m || (u(m).off("focus.scheduleEmailSelector"), u(m).autocomplete("destroy"));
203
+ !d?.ui?.autocomplete || !g || (d(g).off("focus.scheduleEmailSelector"), d(g).autocomplete("destroy"));
204
204
  }), (e, t) => (x(), f("div", {
205
205
  class: "top-scheduleEmailSelector",
206
206
  ref_key: "elRootRef",
207
- ref: d
207
+ ref: p
208
208
  }, [h(n, {
209
209
  ref_key: "elInputRef",
210
- ref: p,
210
+ ref: m,
211
211
  modelValue: i.modelValue,
212
- "onUpdate:modelValue": t[1] ||= (t) => e.$emit("update:modelValue", t),
213
- onKeydown: t[2] ||= ne(A((e) => C(), ["prevent"]), ["enter"]),
212
+ "onUpdate:modelValue": t[1] ||= (e) => s("update:modelValue", e),
213
+ onKeydown: t[2] ||= ne(A((e) => w(), ["prevent"]), ["enter"]),
214
214
  title: e.$i18n.Common.Enter_email,
215
215
  type: "email",
216
216
  size: "l"
@@ -219,7 +219,7 @@ var R = /*#__PURE__*/ a(F, [["render", L]]), z = (t) => {
219
219
  class: "top-scheduleEmailSelector_submit",
220
220
  color: "theme",
221
221
  icon: "",
222
- onClick: t[0] ||= A((e) => C(), ["prevent"])
222
+ onClick: t[0] ||= A((e) => w(), ["prevent"])
223
223
  })]),
224
224
  _: 1
225
225
  }, 8, ["modelValue", "title"])], 512));
@@ -239,25 +239,25 @@ var R = /*#__PURE__*/ a(F, [["render", L]]), z = (t) => {
239
239
  },
240
240
  emits: ["add:email", "remove:email"],
241
241
  setup(e, { emit: t }) {
242
- let n = e, r = t, i = S(""), a = (e) => {
242
+ let n = t, r = e, i = t, a = S(""), o = (e) => {
243
243
  let t = e.trim();
244
- if (!t || n.emails.includes(t)) {
245
- i.value = "";
244
+ if (!t || r.emails.includes(t)) {
245
+ a.value = "";
246
246
  return;
247
247
  }
248
- r("add:email", t), i.value = "";
248
+ i("add:email", t), a.value = "";
249
249
  };
250
- return (t, n) => {
251
- let r = T("TopButton");
250
+ return (t, r) => {
251
+ let i = T("TopButton");
252
252
  return x(), f("div", q, [
253
253
  p("div", J, E(t.$i18n.Projects.Reports_send_to_address) + " E-mail: ", 1),
254
254
  e.maxEmailsCount && e.emails.length === e.maxEmailsCount ? d("", !0) : (x(), u(K, {
255
255
  key: 0,
256
- modelValue: i.value,
257
- "onUpdate:modelValue": n[0] ||= (e) => i.value = e,
256
+ modelValue: a.value,
257
+ "onUpdate:modelValue": r[0] ||= (e) => a.value = e,
258
258
  getEmailSuggestions: e.getEmailSuggestions,
259
259
  emails: e.emails,
260
- onSubmit: a
260
+ onSubmit: o
261
261
  }, null, 8, [
262
262
  "modelValue",
263
263
  "getEmailSuggestions",
@@ -266,8 +266,8 @@ var R = /*#__PURE__*/ a(F, [["render", L]]), z = (t) => {
266
266
  e.emails.length ? (x(), f("div", Y, [(x(!0), f(c, null, C(e.emails, (e) => (x(), f("div", {
267
267
  class: "top-scheduleEmail_emailsItem",
268
268
  key: e
269
- }, [p("span", X, E(e), 1), h(r, {
270
- onClick: (n) => t.$emit("remove:email", e),
269
+ }, [p("span", X, E(e), 1), h(i, {
270
+ onClick: (t) => n("remove:email", e),
271
271
  color: "theme",
272
272
  icon: ""
273
273
  }, null, 8, ["onClick"])]))), 128))])) : d("", !0)
@@ -284,23 +284,23 @@ var R = /*#__PURE__*/ a(F, [["render", L]]), z = (t) => {
284
284
  connectors: { default: () => [] }
285
285
  },
286
286
  emits: ["update:channelSelected"],
287
- setup(e) {
288
- let t = e, n = (e) => t.channels.some((t) => t.source === e), r = {
287
+ setup(e, { emit: t }) {
288
+ let n = e, r = (e) => n.channels.some((t) => t.source === e), i = {
289
289
  informer: "",
290
290
  telegram: ""
291
291
  };
292
- return (t, i) => {
293
- let a = T("TopButton"), o = T("TopSwitcher");
294
- return x(), f("div", re, [p("div", ie, E(t.$i18n.Projects.Reports_send), 1), p("div", ae, [(x(!0), f(c, null, C(e.channels, (e) => (x(), f("div", {
292
+ return (n, a) => {
293
+ let o = T("TopButton"), s = T("TopSwitcher");
294
+ return x(), f("div", re, [p("div", ie, E(n.$i18n.Projects.Reports_send), 1), p("div", ae, [(x(!0), f(c, null, C(e.channels, (e) => (x(), f("div", {
295
295
  class: "top-scheduleReportSend_channel",
296
296
  key: `${e.source}-${e.id}`
297
297
  }, [
298
298
  p("span", {
299
299
  class: "top-scheduleReportSend_channelIcon",
300
- "data-top-icon": r[e.source]
300
+ "data-top-icon": i[e.source]
301
301
  }, null, 8, oe),
302
302
  p("span", se, E(e.label), 1),
303
- e.settingLink ? (x(), u(a, {
303
+ e.settingLink ? (x(), u(o, {
304
304
  key: 0,
305
305
  class: "top-scheduleReportSend_channelSettings",
306
306
  size: "xs",
@@ -310,18 +310,18 @@ var R = /*#__PURE__*/ a(F, [["render", L]]), z = (t) => {
310
310
  color: "theme",
311
311
  tabindex: "0"
312
312
  }, null, 8, ["href"])) : d("", !0),
313
- h(o, {
313
+ h(s, {
314
314
  class: "top-scheduleReportSend_channelSwitcher",
315
315
  modelValue: e.selected,
316
- "onUpdate:modelValue": (n) => t.$emit("update:channelSelected", {
316
+ "onUpdate:modelValue": (n) => t("update:channelSelected", {
317
317
  id: e.id,
318
318
  source: e.source,
319
319
  selected: n
320
320
  })
321
321
  }, null, 8, ["modelValue", "onUpdate:modelValue"])
322
- ]))), 128)), (x(!0), f(c, null, C(e.connectors, (e) => (x(), f(c, { key: e.source }, [n(e.source) ? d("", !0) : (x(), f("div", Q, [p("span", {
322
+ ]))), 128)), (x(!0), f(c, null, C(e.connectors, (e) => (x(), f(c, { key: e.source }, [r(e.source) ? d("", !0) : (x(), f("div", Q, [p("span", {
323
323
  class: "top-scheduleReportSend_channelIcon",
324
- "data-top-icon": r[e.source]
324
+ "data-top-icon": i[e.source]
325
325
  }, null, 8, ce), p("a", {
326
326
  class: "top-scheduleReportSend_channelLabel top-ellipsis1",
327
327
  href: e.connectLink,
@@ -336,11 +336,11 @@ var R = /*#__PURE__*/ a(F, [["render", L]]), z = (t) => {
336
336
  minute: {}
337
337
  },
338
338
  emits: ["update:hour", "update:minute"],
339
- setup(e) {
340
- let t = e, n = Array.from({ length: 24 }, (e, t) => ({
339
+ setup(e, { emit: t }) {
340
+ let n = e, r = Array.from({ length: 24 }, (e, t) => ({
341
341
  value: String(t),
342
342
  title: String(t).padStart(2, "0")
343
- })), r = [
343
+ })), i = [
344
344
  {
345
345
  value: "0",
346
346
  title: "00"
@@ -357,23 +357,23 @@ var R = /*#__PURE__*/ a(F, [["render", L]]), z = (t) => {
357
357
  value: "45",
358
358
  title: "45"
359
359
  }
360
- ], i = l(() => r.some((e) => e.value === t.minute) ? r : [...r, {
361
- value: t.minute,
362
- title: t.minute.padStart(2, "0"),
360
+ ], a = l(() => i.some((e) => e.value === n.minute) ? i : [...i, {
361
+ value: n.minute,
362
+ title: n.minute.padStart(2, "0"),
363
363
  disabled: !0
364
364
  }]);
365
- return (t, r) => {
366
- let a = T("TopSelect");
367
- return x(), f("div", de, [h(a, {
365
+ return (n, i) => {
366
+ let o = T("TopSelect");
367
+ return x(), f("div", de, [h(o, {
368
368
  class: "top-scheduleTimeSelector_hour",
369
369
  modelValue: e.hour,
370
- options: D(n),
371
- "onUpdate:modelValue": r[0] ||= (e) => t.$emit("update:hour", e)
372
- }, null, 8, ["modelValue", "options"]), h(a, {
370
+ options: D(r),
371
+ "onUpdate:modelValue": i[0] ||= (e) => t("update:hour", e)
372
+ }, null, 8, ["modelValue", "options"]), h(o, {
373
373
  class: "top-scheduleTimeSelector_minute",
374
374
  modelValue: e.minute,
375
- options: i.value,
376
- "onUpdate:modelValue": r[1] ||= (e) => t.$emit("update:minute", e)
375
+ options: a.value,
376
+ "onUpdate:modelValue": i[1] ||= (e) => t("update:minute", e)
377
377
  }, null, 8, ["modelValue", "options"])]);
378
378
  };
379
379
  }
@@ -382,52 +382,52 @@ var R = /*#__PURE__*/ a(F, [["render", L]]), z = (t) => {
382
382
  props: { times: {} },
383
383
  emits: ["update:times"],
384
384
  setup(e, { emit: t }) {
385
- let n = e, r = t, i = /* @__PURE__ */ new WeakMap(), a = 0, o = (e) => {
386
- let t = ee(e), n = i.get(t);
385
+ let n = t, r = e, i = t, a = /* @__PURE__ */ new WeakMap(), o = 0, s = (e) => {
386
+ let t = ee(e), n = a.get(t);
387
387
  if (n !== void 0) return n;
388
- let r = a++;
389
- return i.set(t, r), r;
390
- }, s = (e, t) => {
391
- let a = n.times.map((n, r) => {
388
+ let r = o++;
389
+ return a.set(t, r), r;
390
+ }, l = (e, t) => {
391
+ let n = r.times.map((n, r) => {
392
392
  if (r !== e) return n;
393
- let a = {
393
+ let i = {
394
394
  ...n,
395
395
  ...t
396
396
  };
397
- return i.set(a, o(n)), a;
397
+ return a.set(i, s(n)), i;
398
398
  });
399
- r("update:times", a);
400
- }, l = () => {
399
+ i("update:times", n);
400
+ }, d = () => {
401
401
  let e = [{
402
402
  hour: "0",
403
403
  minute: "0"
404
- }, ...n.times];
405
- r("update:times", e);
404
+ }, ...r.times];
405
+ i("update:times", e);
406
406
  };
407
- return (t, n) => {
408
- let r = T("TopButton");
409
- return x(), f("div", fe, [(x(!0), f(c, null, C(e.times, (n, i) => (x(), f("div", {
407
+ return (t, r) => {
408
+ let i = T("TopButton");
409
+ return x(), f("div", fe, [(x(!0), f(c, null, C(e.times, (t, r) => (x(), f("div", {
410
410
  class: "top-scheduleTimeSelectors_item",
411
- key: o(n)
411
+ key: s(t)
412
412
  }, [h($, {
413
- hour: n.hour,
414
- minute: n.minute,
415
- "onUpdate:hour": (e) => s(i, { hour: e }),
416
- "onUpdate:minute": (e) => s(i, { minute: e })
413
+ hour: t.hour,
414
+ minute: t.minute,
415
+ "onUpdate:hour": (e) => l(r, { hour: e }),
416
+ "onUpdate:minute": (e) => l(r, { minute: e })
417
417
  }, null, 8, [
418
418
  "hour",
419
419
  "minute",
420
420
  "onUpdate:hour",
421
421
  "onUpdate:minute"
422
- ]), i ? (x(), u(r, {
422
+ ]), r ? (x(), u(i, {
423
423
  key: 0,
424
- onClick: (n) => t.$emit("update:times", e.times.filter((e, t) => t !== i)),
424
+ onClick: (t) => n("update:times", e.times.filter((e, t) => t !== r)),
425
425
  color: "theme",
426
426
  icon: ""
427
- }, null, 8, ["onClick"])) : (x(), u(r, {
427
+ }, null, 8, ["onClick"])) : (x(), u(i, {
428
428
  key: 1,
429
429
  class: "top-scheduleTimeSelectors_itemAdd",
430
- onClick: l,
430
+ onClick: d,
431
431
  color: "theme",
432
432
  icon: ""
433
433
  }))]))), 128))]);
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.js","names":["$emit","$slots","$i18n","$emit","$i18n","$i18n","$emit","$i18n","$emit","$emit","$emit"],"sources":["../../src/components/schedule/schedule/schedule.vue","../../src/components/schedule/schedule/schedule.vue","../../src/components/schedule/schedule/compoents/container/container.vue","../../src/components/schedule/schedule/compoents/calendar/utils.ts","../../src/components/schedule/schedule/compoents/calendar/calendar.vue","../../src/components/schedule/schedule/compoents/calendar/calendar.vue","../../src/components/schedule/schedule/compoents/email/selector/selector.vue","../../src/components/schedule/schedule/compoents/email/selector/selector.vue","../../src/components/schedule/schedule/compoents/email/email.vue","../../src/components/schedule/schedule/compoents/email/email.vue","../../src/components/schedule/schedule/compoents/reportSend/reportSend.vue","../../src/components/schedule/schedule/compoents/reportSend/reportSend.vue","../../src/components/schedule/schedule/compoents/timeSelector/timeSelector.vue","../../src/components/schedule/schedule/compoents/timeSelector/timeSelector.vue","../../src/components/schedule/schedule/compoents/timeSelectors/timeSelectors.vue","../../src/components/schedule/schedule/compoents/timeSelectors/timeSelectors.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport TopSelect from '@/components/forms/select/select.vue';\nimport type { Props, Emits, TriggerType } from '@/components/schedule/schedule/types';\nimport { useI18n } from '@/core/plugins/i18n';\n\ndefineOptions({\n\tname: 'TopSchedule',\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttriggerType: 'onDemand',\n});\n\ndefineEmits<Emits>();\n\nconst i18n = useI18n();\nconst labelByStyling = {\n\t'go': i18n.Projects.Checks,\n\t'report': i18n.Projects.Reports,\n\t'neutral': '',\n};\nconst title = props.title ?? labelByStyling[props.styling];\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-schedule': true,\n\t\t\t[`top-schedule-style_${styling}`]: true,\n\t\t}\"\n\t>\n\t\t<div class=\"top-schedule_header\">\n\t\t\t<div class=\"top-schedule_headerTitle\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\n\t\t\t<TopSelect\n\t\t\t\tclass=\"top-schedule_headerTriggerType\"\n\t\t\t\t:modelValue=\"triggerType\"\n\t\t\t\t@update:modelValue=\"$emit('update:triggerType', $event as TriggerType)\"\n\t\t\t\t:options=\"triggerTypeOptions\"\n\t\t\t\tsize=\"s\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"triggerType !== 'onDemand' && $slots.body\"\n\t\t\tclass=\"top-schedule_body\"\n\t\t>\n\t\t\t<slot name=\"body\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport TopSelect from '@/components/forms/select/select.vue';\nimport type { Props, Emits, TriggerType } from '@/components/schedule/schedule/types';\nimport { useI18n } from '@/core/plugins/i18n';\n\ndefineOptions({\n\tname: 'TopSchedule',\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttriggerType: 'onDemand',\n});\n\ndefineEmits<Emits>();\n\nconst i18n = useI18n();\nconst labelByStyling = {\n\t'go': i18n.Projects.Checks,\n\t'report': i18n.Projects.Reports,\n\t'neutral': '',\n};\nconst title = props.title ?? labelByStyling[props.styling];\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-schedule': true,\n\t\t\t[`top-schedule-style_${styling}`]: true,\n\t\t}\"\n\t>\n\t\t<div class=\"top-schedule_header\">\n\t\t\t<div class=\"top-schedule_headerTitle\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\n\t\t\t<TopSelect\n\t\t\t\tclass=\"top-schedule_headerTriggerType\"\n\t\t\t\t:modelValue=\"triggerType\"\n\t\t\t\t@update:modelValue=\"$emit('update:triggerType', $event as TriggerType)\"\n\t\t\t\t:options=\"triggerTypeOptions\"\n\t\t\t\tsize=\"s\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"triggerType !== 'onDemand' && $slots.body\"\n\t\t\tclass=\"top-schedule_body\"\n\t\t>\n\t\t\t<slot name=\"body\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<template>\n\t<div class=\"top-schedule_bodyContainer\">\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","import type { Day, Props } from './types';\nimport { useI18n } from '@/core/app';\n\n/**\n * Количество дней в месяце\n */\nexport const COUNT_DAYS_IN_MONTHS = 27;\n\n/**\n * Количество дней в неделе\n */\nexport const COUNT_DAYS_IN_WEEK = 7;\n\nexport const genDaysByCalendarMode = (mode: Props['mode']): Day[] => {\n\tconst i18n = useI18n();\n\n\tswitch (mode) {\n\t\tcase 'dayOfMonth': {\n\t\t\tconst days: Day[] = Array.from({ length: COUNT_DAYS_IN_MONTHS }, (_, index) => ({\n\t\t\t\tvalue: String(index + 1) as Day['value'],\n\t\t\t\ttitle: String(index + 1),\n\t\t\t}));\n\n\t\t\tdays.push({\n\t\t\t\tvalue: 'LAST_OF_MONTH',\n\t\t\t\ttitle: '',\n\t\t\t\tisIcon: true,\n\t\t\t});\n\n\t\t\treturn days;\n\t\t}\n\n\t\tcase 'dayOfWeek': {\n\t\t\treturn [\n\t\t\t\t{ value: 'MONDAY', title: i18n.Calendar.Dw_1 },\n\t\t\t\t{ value: 'TUESDAY', title: i18n.Calendar.Dw_2 },\n\t\t\t\t{ value: 'WEDNESDAY', title: i18n.Calendar.Dw_3 },\n\t\t\t\t{ value: 'THURSDAY', title: i18n.Calendar.Dw_4 },\n\t\t\t\t{ value: 'FRIDAY', title: i18n.Calendar.Dw_5 },\n\t\t\t\t{ value: 'SATURDAY', title: i18n.Calendar.Dw_6 },\n\t\t\t\t{ value: 'SUNDAY', title: i18n.Calendar.Dw_7 },\n\t\t\t];\n\t\t}\n\t}\n};\n","<script setup lang=\"ts\">\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/calendar/types';\nimport { COUNT_DAYS_IN_MONTHS, COUNT_DAYS_IN_WEEK, genDaysByCalendarMode } from '@/components/schedule/schedule/compoents/calendar/utils';\nimport { numberEnding } from '@/core/utils/string';\nimport { computed } from 'vue';\nimport { useI18n } from '@/core/app';\n\nconst i18n = useI18n();\nconst props = withDefaults(defineProps<Props>(), {\n\ttimesCount: 1,\n});\nconst emit = defineEmits<Emits>();\n\nconst selectedDays = computed<Props['modelValue']>({\n\tget: () => props.modelValue,\n\tset: value => emit('update:modelValue', value),\n});\n\nconst days = computed(() => genDaysByCalendarMode(props.mode));\n\n/**\n * Параметры отображения выбранных дней для каждого режима календаря\n */\nconst modeConfig = {\n\tdayOfWeek: {\n\t\ttotalDaysCount: COUNT_DAYS_IN_WEEK,\n\t\tperiod: i18n.Common.a_week,\n\t},\n\tdayOfMonth: {\n\t\t// плюс \"последний день месяца\"\n\t\ttotalDaysCount: COUNT_DAYS_IN_MONTHS + 1,\n\t\tperiod: i18n.Common.a_month,\n\t},\n};\n\n/**\n * Текстовая сводка выбранных дней и временных слотов\n */\nconst selectionSummary = computed(() => {\n\t// Количество выбранных пользователем дней\n\tconst daysCount = selectedDays.value.length;\n\t// Общее количество доступных дней и название периода для текущего режима\n\tconst { totalDaysCount, period } = modeConfig[props.mode];\n\t// Выбраны ли все доступные дни\n\tconst isEveryDay = daysCount === totalDaysCount;\n\n\tif (isEveryDay && props.timesCount === 1) return i18n.Common.Every_day;\n\n\t// Число, для которого нужно подобрать склонение слова «раз»\n\tconst count = props.timesCount === 1 ? daysCount : props.timesCount;\n\t// Подпись количества выбранных дней\n\tconst daysLabel = isEveryDay ? i18n.Common.Every_day : `${daysCount}`;\n\t// Множитель времени отображается только при нескольких временных слотах\n\tconst multiplier = props.timesCount > 1 ? ` × ${props.timesCount}` : '';\n\t// Склонённая подпись количества запусков\n\tconst countLabel = numberEnding(\n\t\tcount,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_2,\n\t);\n\n\treturn `${daysLabel}${multiplier} ${countLabel} ${period}`;\n});\n\nconst isClearAction = computed(() => selectedDays.value.length > 1);\n\nconst toggleAllDays = () => {\n\tselectedDays.value = isClearAction.value ? [] : days.value.map(day => day.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleCalendar\">\n\t\t<div class=\"top-scheduleCalendar_header\">\n\t\t\t<slot name=\"header\"></slot>\n\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleCalendar_headerButton\"\n\t\t\t\t@click=\"toggleAllDays\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t>\n\t\t\t\t{{ isClearAction ? $i18n.Common.Clear : $i18n.Common.Select_all}}\n\t\t\t</TopButton>\n\t\t</div>\n\n\t\t<div class=\"top-scheduleCalendar_calendar\">\n\t\t\t<label\n\t\t\t\tclass=\"top-scheduleCalendar_calendarDay\"\n\t\t\t\tv-for=\"day in days\"\n\t\t\t\t:key=\"day.value\"\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayRadio\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:value=\"day.value\"\n\t\t\t\t\tv-model=\"selectedDays\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t>\n\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayTitle\"\n\t\t\t\t\t:data-top-icon=\"day.isIcon ? day.title : undefined\"\n\t\t\t\t>\n\t\t\t\t\t<template v-if=\"!day.isIcon\">\n\t\t\t\t\t\t{{ day.title }}\n\t\t\t\t\t</template>\n\t\t\t\t</span>\n\t\t\t</label>\n\t\t</div>\n\n\t\t<span\n\t\t\t:class=\"{\n\t\t\t\t'top-scheduleCalendar_selectionSummary': true,\n\t\t\t\t'top-error': !selectedDays.length\n\t\t\t}\"\n\t\t>\n\t\t\t{{ selectionSummary }}\n\t\t</span>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/calendar/types';\nimport { COUNT_DAYS_IN_MONTHS, COUNT_DAYS_IN_WEEK, genDaysByCalendarMode } from '@/components/schedule/schedule/compoents/calendar/utils';\nimport { numberEnding } from '@/core/utils/string';\nimport { computed } from 'vue';\nimport { useI18n } from '@/core/app';\n\nconst i18n = useI18n();\nconst props = withDefaults(defineProps<Props>(), {\n\ttimesCount: 1,\n});\nconst emit = defineEmits<Emits>();\n\nconst selectedDays = computed<Props['modelValue']>({\n\tget: () => props.modelValue,\n\tset: value => emit('update:modelValue', value),\n});\n\nconst days = computed(() => genDaysByCalendarMode(props.mode));\n\n/**\n * Параметры отображения выбранных дней для каждого режима календаря\n */\nconst modeConfig = {\n\tdayOfWeek: {\n\t\ttotalDaysCount: COUNT_DAYS_IN_WEEK,\n\t\tperiod: i18n.Common.a_week,\n\t},\n\tdayOfMonth: {\n\t\t// плюс \"последний день месяца\"\n\t\ttotalDaysCount: COUNT_DAYS_IN_MONTHS + 1,\n\t\tperiod: i18n.Common.a_month,\n\t},\n};\n\n/**\n * Текстовая сводка выбранных дней и временных слотов\n */\nconst selectionSummary = computed(() => {\n\t// Количество выбранных пользователем дней\n\tconst daysCount = selectedDays.value.length;\n\t// Общее количество доступных дней и название периода для текущего режима\n\tconst { totalDaysCount, period } = modeConfig[props.mode];\n\t// Выбраны ли все доступные дни\n\tconst isEveryDay = daysCount === totalDaysCount;\n\n\tif (isEveryDay && props.timesCount === 1) return i18n.Common.Every_day;\n\n\t// Число, для которого нужно подобрать склонение слова «раз»\n\tconst count = props.timesCount === 1 ? daysCount : props.timesCount;\n\t// Подпись количества выбранных дней\n\tconst daysLabel = isEveryDay ? i18n.Common.Every_day : `${daysCount}`;\n\t// Множитель времени отображается только при нескольких временных слотах\n\tconst multiplier = props.timesCount > 1 ? ` × ${props.timesCount}` : '';\n\t// Склонённая подпись количества запусков\n\tconst countLabel = numberEnding(\n\t\tcount,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_2,\n\t);\n\n\treturn `${daysLabel}${multiplier} ${countLabel} ${period}`;\n});\n\nconst isClearAction = computed(() => selectedDays.value.length > 1);\n\nconst toggleAllDays = () => {\n\tselectedDays.value = isClearAction.value ? [] : days.value.map(day => day.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleCalendar\">\n\t\t<div class=\"top-scheduleCalendar_header\">\n\t\t\t<slot name=\"header\"></slot>\n\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleCalendar_headerButton\"\n\t\t\t\t@click=\"toggleAllDays\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t>\n\t\t\t\t{{ isClearAction ? $i18n.Common.Clear : $i18n.Common.Select_all}}\n\t\t\t</TopButton>\n\t\t</div>\n\n\t\t<div class=\"top-scheduleCalendar_calendar\">\n\t\t\t<label\n\t\t\t\tclass=\"top-scheduleCalendar_calendarDay\"\n\t\t\t\tv-for=\"day in days\"\n\t\t\t\t:key=\"day.value\"\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayRadio\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:value=\"day.value\"\n\t\t\t\t\tv-model=\"selectedDays\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t>\n\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayTitle\"\n\t\t\t\t\t:data-top-icon=\"day.isIcon ? day.title : undefined\"\n\t\t\t\t>\n\t\t\t\t\t<template v-if=\"!day.isIcon\">\n\t\t\t\t\t\t{{ day.title }}\n\t\t\t\t\t</template>\n\t\t\t\t</span>\n\t\t\t</label>\n\t\t</div>\n\n\t\t<span\n\t\t\t:class=\"{\n\t\t\t\t'top-scheduleCalendar_selectionSummary': true,\n\t\t\t\t'top-error': !selectedDays.length\n\t\t\t}\"\n\t\t>\n\t\t\t{{ selectionSummary }}\n\t\t</span>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\nimport Core from '@/core/core/core';\nimport { isEmail } from '@/core/utils/check';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/selector/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n});\n\nconst emit = defineEmits<Emits>();\nconst i18n = useI18n();\nconst $ = Core.$;\n\nconst elRootRef = ref<HTMLElement>();\nconst elInputRef = ref<InstanceType<typeof TopInput>>();\nlet elInput: HTMLInputElement | null = null;\nconst autocompleteCache: Record<string, string[]> = {};\n\nconst filterEmails = (emails: string[]) => emails.filter(email => !props.emails.includes(email));\n\nconst submit = (value: unknown = props.modelValue) => {\n\tconst email = String(value).trim();\n\tif (!email) return;\n\tif (!isEmail(email)) {\n\t\tvoid Core.notice(i18n.Common.Enter_valid_email_notice, 'error');\n\n\t\treturn;\n\t}\n\n\temit('submit', email);\n};\n\nconst initAutocomplete = async () => {\n\tawait nextTick();\n\n\telInput = elInputRef.value?.$el.querySelector('input') ?? null;\n\tif (!elInput) return;\n\n\tif (!$?.ui?.autocomplete) {\n\t\tconsole.info('Для работы autocomplete требуется глобальная загрузка jQuery UI Autocomplete');\n\n\t\treturn;\n\t}\n\n\t$(elInput).autocomplete({\n\t\tappendTo: elRootRef.value,\n\t\tminLength: 0,\n\t\tsource: async (request: { term: string }, response: (items: Array<{ label: string, value: string }>) => void) => {\n\t\t\tconst term = request.term;\n\t\t\tif (!(term in autocompleteCache)) {\n\t\t\t\tautocompleteCache[term] = await props.getEmailSuggestions(term);\n\t\t\t}\n\n\t\t\tresponse(filterEmails(autocompleteCache[term]).map(email => ({\n\t\t\t\tlabel: email,\n\t\t\t\tvalue: email,\n\t\t\t})));\n\t\t},\n\t\tselect: (event: Event, ui: { item?: { value: string } }) => {\n\t\t\tif (!ui.item || !elInput) return;\n\n\t\t\tevent.preventDefault();\n\t\t\tsubmit(ui.item.value);\n\t\t\temit('update:modelValue', '');\n\n\t\t\t$(elInput).trigger('focus');\n\t\t},\n\t});\n\n\t$(elInput).attr('autocomplete', 'disabled');\n\t$(elInput).on('focus.scheduleEmailSelector', () => {\n\t\tif (!elInput) return;\n\n\t\t$(elInput).trigger('input');\n\t});\n};\n\nonMounted(() => {\n\tvoid initAutocomplete();\n});\n\nonBeforeUnmount(() => {\n\tif (!$?.ui?.autocomplete || !elInput) return;\n\n\t$(elInput).off('focus.scheduleEmailSelector');\n\t$(elInput).autocomplete('destroy');\n});\n</script>\n\n<template>\n\t<div\n\t\tclass=\"top-scheduleEmailSelector\"\n\t\tref=\"elRootRef\"\n\t>\n\t\t<TopInput\n\t\t\tref=\"elInputRef\"\n\t\t\t:modelValue\n\t\t\t@update:modelValue=\"$emit('update:modelValue', $event)\"\n\t\t\t@keydown.enter.prevent=\"submit()\"\n\t\t\t:title=\"$i18n.Common.Enter_email\"\n\t\t\ttype=\"email\"\n\t\t\tsize=\"l\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleEmailSelector_submit\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t\t@click.prevent=\"submit()\"\n\t\t\t/>\n\t\t</TopInput>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\nimport Core from '@/core/core/core';\nimport { isEmail } from '@/core/utils/check';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/selector/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n});\n\nconst emit = defineEmits<Emits>();\nconst i18n = useI18n();\nconst $ = Core.$;\n\nconst elRootRef = ref<HTMLElement>();\nconst elInputRef = ref<InstanceType<typeof TopInput>>();\nlet elInput: HTMLInputElement | null = null;\nconst autocompleteCache: Record<string, string[]> = {};\n\nconst filterEmails = (emails: string[]) => emails.filter(email => !props.emails.includes(email));\n\nconst submit = (value: unknown = props.modelValue) => {\n\tconst email = String(value).trim();\n\tif (!email) return;\n\tif (!isEmail(email)) {\n\t\tvoid Core.notice(i18n.Common.Enter_valid_email_notice, 'error');\n\n\t\treturn;\n\t}\n\n\temit('submit', email);\n};\n\nconst initAutocomplete = async () => {\n\tawait nextTick();\n\n\telInput = elInputRef.value?.$el.querySelector('input') ?? null;\n\tif (!elInput) return;\n\n\tif (!$?.ui?.autocomplete) {\n\t\tconsole.info('Для работы autocomplete требуется глобальная загрузка jQuery UI Autocomplete');\n\n\t\treturn;\n\t}\n\n\t$(elInput).autocomplete({\n\t\tappendTo: elRootRef.value,\n\t\tminLength: 0,\n\t\tsource: async (request: { term: string }, response: (items: Array<{ label: string, value: string }>) => void) => {\n\t\t\tconst term = request.term;\n\t\t\tif (!(term in autocompleteCache)) {\n\t\t\t\tautocompleteCache[term] = await props.getEmailSuggestions(term);\n\t\t\t}\n\n\t\t\tresponse(filterEmails(autocompleteCache[term]).map(email => ({\n\t\t\t\tlabel: email,\n\t\t\t\tvalue: email,\n\t\t\t})));\n\t\t},\n\t\tselect: (event: Event, ui: { item?: { value: string } }) => {\n\t\t\tif (!ui.item || !elInput) return;\n\n\t\t\tevent.preventDefault();\n\t\t\tsubmit(ui.item.value);\n\t\t\temit('update:modelValue', '');\n\n\t\t\t$(elInput).trigger('focus');\n\t\t},\n\t});\n\n\t$(elInput).attr('autocomplete', 'disabled');\n\t$(elInput).on('focus.scheduleEmailSelector', () => {\n\t\tif (!elInput) return;\n\n\t\t$(elInput).trigger('input');\n\t});\n};\n\nonMounted(() => {\n\tvoid initAutocomplete();\n});\n\nonBeforeUnmount(() => {\n\tif (!$?.ui?.autocomplete || !elInput) return;\n\n\t$(elInput).off('focus.scheduleEmailSelector');\n\t$(elInput).autocomplete('destroy');\n});\n</script>\n\n<template>\n\t<div\n\t\tclass=\"top-scheduleEmailSelector\"\n\t\tref=\"elRootRef\"\n\t>\n\t\t<TopInput\n\t\t\tref=\"elInputRef\"\n\t\t\t:modelValue\n\t\t\t@update:modelValue=\"$emit('update:modelValue', $event)\"\n\t\t\t@keydown.enter.prevent=\"submit()\"\n\t\t\t:title=\"$i18n.Common.Enter_email\"\n\t\t\ttype=\"email\"\n\t\t\tsize=\"l\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleEmailSelector_submit\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t\t@click.prevent=\"submit()\"\n\t\t\t/>\n\t\t</TopInput>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/types';\nimport ScheduleEmailSelector from '@/components/schedule/schedule/compoents/email/selector/selector.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n\tmaxEmailsCount: -1,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst value = ref('');\n\nconst addEmail = (email: string) => {\n\tconst preparedEmail = email.trim();\n\tif (!preparedEmail || props.emails.includes(preparedEmail)) {\n\t\tvalue.value = '';\n\n\t\treturn;\n\t}\n\n\temit('add:email', preparedEmail);\n\n\tvalue.value = '';\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleEmail\">\n\t\t<div class=\"top-scheduleEmail_title\">\n\t\t\t{{ $i18n.Projects.Reports_send_to_address }} E-mail:\n\t\t</div>\n\n\t\t<ScheduleEmailSelector\n\t\t\tv-if=\"!(maxEmailsCount && emails.length === maxEmailsCount)\"\n\t\t\tv-model=\"value\"\n\t\t\t:getEmailSuggestions=\"getEmailSuggestions\"\n\t\t\t:emails=\"emails\"\n\t\t\t@submit=\"addEmail\"\n\t\t/>\n\n\t\t<div\n\t\t\tv-if=\"emails.length\"\n\t\t\tclass=\"top-scheduleEmail_emails\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleEmail_emailsItem\"\n\t\t\t\tv-for=\"email in emails\"\n\t\t\t\t:key=\"email\"\n\t\t\t>\n\t\t\t\t<span class=\"top-ellipsis1\">{{ email }}</span>\n\n\t\t\t\t<TopButton\n\t\t\t\t\t@click=\"$emit('remove:email', email)\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/types';\nimport ScheduleEmailSelector from '@/components/schedule/schedule/compoents/email/selector/selector.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n\tmaxEmailsCount: -1,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst value = ref('');\n\nconst addEmail = (email: string) => {\n\tconst preparedEmail = email.trim();\n\tif (!preparedEmail || props.emails.includes(preparedEmail)) {\n\t\tvalue.value = '';\n\n\t\treturn;\n\t}\n\n\temit('add:email', preparedEmail);\n\n\tvalue.value = '';\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleEmail\">\n\t\t<div class=\"top-scheduleEmail_title\">\n\t\t\t{{ $i18n.Projects.Reports_send_to_address }} E-mail:\n\t\t</div>\n\n\t\t<ScheduleEmailSelector\n\t\t\tv-if=\"!(maxEmailsCount && emails.length === maxEmailsCount)\"\n\t\t\tv-model=\"value\"\n\t\t\t:getEmailSuggestions=\"getEmailSuggestions\"\n\t\t\t:emails=\"emails\"\n\t\t\t@submit=\"addEmail\"\n\t\t/>\n\n\t\t<div\n\t\t\tv-if=\"emails.length\"\n\t\t\tclass=\"top-scheduleEmail_emails\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleEmail_emailsItem\"\n\t\t\t\tv-for=\"email in emails\"\n\t\t\t\t:key=\"email\"\n\t\t\t>\n\t\t\t\t<span class=\"top-ellipsis1\">{{ email }}</span>\n\n\t\t\t\t<TopButton\n\t\t\t\t\t@click=\"$emit('remove:email', email)\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Emits, Props, ReportChannelSource } from '@/components/schedule/schedule/compoents/reportSend/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tconnectors: () => [],\n});\ndefineEmits<Emits>();\n\nconst hasChannel = (source: ReportChannelSource) => props.channels.some(channel => channel.source === source);\n\nconst sourceIconBySource: Record<ReportChannelSource, string> = {\n\tinformer: '',\n\ttelegram: '',\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleReportSend\">\n\t\t<div class=\"top-scheduleReportSend_title\">\n\t\t\t{{ $i18n.Projects.Reports_send }}\n\t\t</div>\n\n\t\t<div class=\"top-scheduleReportSend_channels\">\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\tv-for=\"channel in channels\"\n\t\t\t\t:key=\"`${channel.source}-${channel.id}`\"\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelIcon\"\n\t\t\t\t\t:data-top-icon=\"sourceIconBySource[channel.source]\"\n\t\t\t\t></span>\n\n\t\t\t\t<span class=\"top-scheduleReportSend_channelLabel top-ellipsis1\">\n\t\t\t\t\t{{ channel.label }}\n\t\t\t\t</span>\n\n\t\t\t\t<TopButton\n\t\t\t\t\tv-if=\"channel.settingLink\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelSettings\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t:href=\"channel.settingLink\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t></TopButton>\n\n\t\t\t\t<TopSwitcher\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelSwitcher\"\n\t\t\t\t\t:modelValue=\"channel.selected\"\n\t\t\t\t\t@update:modelValue=\"$emit('update:channelSelected', {\n\t\t\t\t\t\tid: channel.id,\n\t\t\t\t\t\tsource: channel.source,\n\t\t\t\t\t\tselected: $event as boolean,\n\t\t\t\t\t})\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<template\n\t\t\t\tv-for=\"connector in connectors\"\n\t\t\t\t:key=\"connector.source\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"!hasChannel(connector.source)\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelIcon\"\n\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[connector.source]\"\n\t\t\t\t\t></span>\n\n\t\t\t\t\t<a\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelLabel top-ellipsis1\"\n\t\t\t\t\t\t:href=\"connector.connectLink\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ connector.connectLabel }}\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Emits, Props, ReportChannelSource } from '@/components/schedule/schedule/compoents/reportSend/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tconnectors: () => [],\n});\ndefineEmits<Emits>();\n\nconst hasChannel = (source: ReportChannelSource) => props.channels.some(channel => channel.source === source);\n\nconst sourceIconBySource: Record<ReportChannelSource, string> = {\n\tinformer: '',\n\ttelegram: '',\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleReportSend\">\n\t\t<div class=\"top-scheduleReportSend_title\">\n\t\t\t{{ $i18n.Projects.Reports_send }}\n\t\t</div>\n\n\t\t<div class=\"top-scheduleReportSend_channels\">\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\tv-for=\"channel in channels\"\n\t\t\t\t:key=\"`${channel.source}-${channel.id}`\"\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelIcon\"\n\t\t\t\t\t:data-top-icon=\"sourceIconBySource[channel.source]\"\n\t\t\t\t></span>\n\n\t\t\t\t<span class=\"top-scheduleReportSend_channelLabel top-ellipsis1\">\n\t\t\t\t\t{{ channel.label }}\n\t\t\t\t</span>\n\n\t\t\t\t<TopButton\n\t\t\t\t\tv-if=\"channel.settingLink\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelSettings\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t:href=\"channel.settingLink\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t></TopButton>\n\n\t\t\t\t<TopSwitcher\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelSwitcher\"\n\t\t\t\t\t:modelValue=\"channel.selected\"\n\t\t\t\t\t@update:modelValue=\"$emit('update:channelSelected', {\n\t\t\t\t\t\tid: channel.id,\n\t\t\t\t\t\tsource: channel.source,\n\t\t\t\t\t\tselected: $event as boolean,\n\t\t\t\t\t})\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<template\n\t\t\t\tv-for=\"connector in connectors\"\n\t\t\t\t:key=\"connector.source\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"!hasChannel(connector.source)\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelIcon\"\n\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[connector.source]\"\n\t\t\t\t\t></span>\n\n\t\t\t\t\t<a\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelLabel top-ellipsis1\"\n\t\t\t\t\t\t:href=\"connector.connectLink\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ connector.connectLabel }}\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits, Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\n\nconst props = defineProps<Props>();\ndefineEmits<Emits>();\n\n/**\n * Варианты выбора часа\n */\nconst hourOptions = Array.from({ length: 24 }, (_, index) => ({\n\tvalue: String(index),\n\ttitle: String(index).padStart(2, '0'),\n}));\n\n/**\n * Варианты выбора минут по умолчанию\n */\nconst defaultMinuteOptions = [\n\t{\n\t\tvalue: '0',\n\t\ttitle: '00',\n\t},\n\t{\n\t\tvalue: '15',\n\t\ttitle: '15',\n\t},\n\t{\n\t\tvalue: '30',\n\t\ttitle: '30',\n\t},\n\t{\n\t\tvalue: '45',\n\t\ttitle: '45',\n\t},\n];\n\n/**\n * Варианты выбора минут\n *\n * Дополняются выбранным нестандартным значением, чтобы вывести его в интерфейсе\n */\nconst minuteOptions = computed(() => {\n\tif (defaultMinuteOptions.some((option) => option.value === props.minute)) return defaultMinuteOptions;\n\n\treturn [\n\t\t...defaultMinuteOptions, {\n\t\t\tvalue: props.minute,\n\t\t\ttitle: props.minute.padStart(2, '0'),\n\t\t\tdisabled: true,\n\t\t},\n\t];\n});\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelector\">\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_hour\"\n\t\t\t:modelValue=\"hour\"\n\t\t\t:options=\"hourOptions\"\n\t\t\t@update:modelValue=\"$emit('update:hour', $event as Time['hour'])\"\n\t\t/>\n\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_minute\"\n\t\t\t:modelValue=\"minute\"\n\t\t\t:options=\"minuteOptions\"\n\t\t\t@update:modelValue=\"$emit('update:minute', $event as Time['minute'])\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits, Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\n\nconst props = defineProps<Props>();\ndefineEmits<Emits>();\n\n/**\n * Варианты выбора часа\n */\nconst hourOptions = Array.from({ length: 24 }, (_, index) => ({\n\tvalue: String(index),\n\ttitle: String(index).padStart(2, '0'),\n}));\n\n/**\n * Варианты выбора минут по умолчанию\n */\nconst defaultMinuteOptions = [\n\t{\n\t\tvalue: '0',\n\t\ttitle: '00',\n\t},\n\t{\n\t\tvalue: '15',\n\t\ttitle: '15',\n\t},\n\t{\n\t\tvalue: '30',\n\t\ttitle: '30',\n\t},\n\t{\n\t\tvalue: '45',\n\t\ttitle: '45',\n\t},\n];\n\n/**\n * Варианты выбора минут\n *\n * Дополняются выбранным нестандартным значением, чтобы вывести его в интерфейсе\n */\nconst minuteOptions = computed(() => {\n\tif (defaultMinuteOptions.some((option) => option.value === props.minute)) return defaultMinuteOptions;\n\n\treturn [\n\t\t...defaultMinuteOptions, {\n\t\t\tvalue: props.minute,\n\t\t\ttitle: props.minute.padStart(2, '0'),\n\t\t\tdisabled: true,\n\t\t},\n\t];\n});\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelector\">\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_hour\"\n\t\t\t:modelValue=\"hour\"\n\t\t\t:options=\"hourOptions\"\n\t\t\t@update:modelValue=\"$emit('update:hour', $event as Time['hour'])\"\n\t\t/>\n\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_minute\"\n\t\t\t:modelValue=\"minute\"\n\t\t\t:options=\"minuteOptions\"\n\t\t\t@update:modelValue=\"$emit('update:minute', $event as Time['minute'])\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { toRaw } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/timeSelectors/types';\nimport type { Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\nimport TimeSelector from '@/components/schedule/schedule/compoents/timeSelector/timeSelector.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\nconst timeKeys = new WeakMap<Time, number>();\nlet nextTimeKey = 0;\n\nconst getTimeKey = (rawOrProxyTime: Time) => {\n\t// time может быть proxy или обычным объектом\n\tconst time = toRaw(rawOrProxyTime);\n\n\tconst existingKey = timeKeys.get(time);\n\tif (existingKey !== undefined) return existingKey;\n\n\tconst key = nextTimeKey++;\n\ttimeKeys.set(time, key);\n\n\treturn key;\n};\n\nconst updateTime = (index: number, patch: Partial<Props['times'][number]>) => {\n\tconst updatedTimes = props.times.map((time, i) => {\n\t\tif (i !== index) return time;\n\n\t\tconst updatedTime = { ...time, ...patch };\n\t\ttimeKeys.set(updatedTime, getTimeKey(time));\n\n\t\treturn updatedTime;\n\t});\n\n\temit('update:times', updatedTimes);\n};\n\nconst addTime = () => {\n\tconst time: Time = {\n\t\thour: '0',\n\t\tminute: '0',\n\t};\n\n\tconst updatedTimes = [\n\t\ttime,\n\t\t...props.times,\n\t];\n\n\temit('update:times', updatedTimes);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelectors\">\n\t\t<div\n\t\t\tclass=\"top-scheduleTimeSelectors_item\"\n\t\t\tv-for=\"(time, index) in times\"\n\t\t\t:key=\"getTimeKey(time)\"\n\t\t>\n\t\t\t<TimeSelector\n\t\t\t\t:hour=\"time.hour\"\n\t\t\t\t:minute=\"time.minute\"\n\t\t\t\t@update:hour=\"updateTime(index, { hour: $event as Time['hour'] })\"\n\t\t\t\t@update:minute=\"updateTime(index, { minute: $event as Time['minute'] })\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-if=\"index\"\n\t\t\t\t@click=\"$emit('update:times', times.filter((_, i) => i !== index))\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-else\n\t\t\t\tclass=\"top-scheduleTimeSelectors_itemAdd\"\n\t\t\t\t@click=\"addTime\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { toRaw } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/timeSelectors/types';\nimport type { Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\nimport TimeSelector from '@/components/schedule/schedule/compoents/timeSelector/timeSelector.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\nconst timeKeys = new WeakMap<Time, number>();\nlet nextTimeKey = 0;\n\nconst getTimeKey = (rawOrProxyTime: Time) => {\n\t// time может быть proxy или обычным объектом\n\tconst time = toRaw(rawOrProxyTime);\n\n\tconst existingKey = timeKeys.get(time);\n\tif (existingKey !== undefined) return existingKey;\n\n\tconst key = nextTimeKey++;\n\ttimeKeys.set(time, key);\n\n\treturn key;\n};\n\nconst updateTime = (index: number, patch: Partial<Props['times'][number]>) => {\n\tconst updatedTimes = props.times.map((time, i) => {\n\t\tif (i !== index) return time;\n\n\t\tconst updatedTime = { ...time, ...patch };\n\t\ttimeKeys.set(updatedTime, getTimeKey(time));\n\n\t\treturn updatedTime;\n\t});\n\n\temit('update:times', updatedTimes);\n};\n\nconst addTime = () => {\n\tconst time: Time = {\n\t\thour: '0',\n\t\tminute: '0',\n\t};\n\n\tconst updatedTimes = [\n\t\ttime,\n\t\t...props.times,\n\t];\n\n\temit('update:times', updatedTimes);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelectors\">\n\t\t<div\n\t\t\tclass=\"top-scheduleTimeSelectors_item\"\n\t\t\tv-for=\"(time, index) in times\"\n\t\t\t:key=\"getTimeKey(time)\"\n\t\t>\n\t\t\t<TimeSelector\n\t\t\t\t:hour=\"time.hour\"\n\t\t\t\t:minute=\"time.minute\"\n\t\t\t\t@update:hour=\"updateTime(index, { hour: $event as Time['hour'] })\"\n\t\t\t\t@update:minute=\"updateTime(index, { minute: $event as Time['minute'] })\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-if=\"index\"\n\t\t\t\t@click=\"$emit('update:times', times.filter((_, i) => i !== index))\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-else\n\t\t\t\tclass=\"top-scheduleTimeSelectors_itemAdd\"\n\t\t\t\t@click=\"addTime\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"schedule.js","names":[],"sources":["../../src/components/schedule/schedule/schedule.vue","../../src/components/schedule/schedule/schedule.vue","../../src/components/schedule/schedule/compoents/container/container.vue","../../src/components/schedule/schedule/compoents/calendar/utils.ts","../../src/components/schedule/schedule/compoents/calendar/calendar.vue","../../src/components/schedule/schedule/compoents/calendar/calendar.vue","../../src/components/schedule/schedule/compoents/email/selector/selector.vue","../../src/components/schedule/schedule/compoents/email/selector/selector.vue","../../src/components/schedule/schedule/compoents/email/email.vue","../../src/components/schedule/schedule/compoents/email/email.vue","../../src/components/schedule/schedule/compoents/reportSend/reportSend.vue","../../src/components/schedule/schedule/compoents/reportSend/reportSend.vue","../../src/components/schedule/schedule/compoents/timeSelector/timeSelector.vue","../../src/components/schedule/schedule/compoents/timeSelector/timeSelector.vue","../../src/components/schedule/schedule/compoents/timeSelectors/timeSelectors.vue","../../src/components/schedule/schedule/compoents/timeSelectors/timeSelectors.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport TopSelect from '@/components/forms/select/select.vue';\nimport type { Props, Emits, TriggerType } from '@/components/schedule/schedule/types';\nimport { useI18n } from '@/core/plugins/i18n';\n\ndefineOptions({\n\tname: 'TopSchedule',\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttriggerType: 'onDemand',\n});\n\ndefineEmits<Emits>();\n\nconst i18n = useI18n();\nconst labelByStyling = {\n\t'go': i18n.Projects.Checks,\n\t'report': i18n.Projects.Reports,\n\t'neutral': '',\n};\nconst title = props.title ?? labelByStyling[props.styling];\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-schedule': true,\n\t\t\t[`top-schedule-style_${styling}`]: true,\n\t\t}\"\n\t>\n\t\t<div class=\"top-schedule_header\">\n\t\t\t<div class=\"top-schedule_headerTitle\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\n\t\t\t<TopSelect\n\t\t\t\tclass=\"top-schedule_headerTriggerType\"\n\t\t\t\t:modelValue=\"triggerType\"\n\t\t\t\t@update:modelValue=\"$emit('update:triggerType', $event as TriggerType)\"\n\t\t\t\t:options=\"triggerTypeOptions\"\n\t\t\t\tsize=\"s\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"triggerType !== 'onDemand' && $slots.body\"\n\t\t\tclass=\"top-schedule_body\"\n\t\t>\n\t\t\t<slot name=\"body\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport TopSelect from '@/components/forms/select/select.vue';\nimport type { Props, Emits, TriggerType } from '@/components/schedule/schedule/types';\nimport { useI18n } from '@/core/plugins/i18n';\n\ndefineOptions({\n\tname: 'TopSchedule',\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttriggerType: 'onDemand',\n});\n\ndefineEmits<Emits>();\n\nconst i18n = useI18n();\nconst labelByStyling = {\n\t'go': i18n.Projects.Checks,\n\t'report': i18n.Projects.Reports,\n\t'neutral': '',\n};\nconst title = props.title ?? labelByStyling[props.styling];\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-schedule': true,\n\t\t\t[`top-schedule-style_${styling}`]: true,\n\t\t}\"\n\t>\n\t\t<div class=\"top-schedule_header\">\n\t\t\t<div class=\"top-schedule_headerTitle\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\n\t\t\t<TopSelect\n\t\t\t\tclass=\"top-schedule_headerTriggerType\"\n\t\t\t\t:modelValue=\"triggerType\"\n\t\t\t\t@update:modelValue=\"$emit('update:triggerType', $event as TriggerType)\"\n\t\t\t\t:options=\"triggerTypeOptions\"\n\t\t\t\tsize=\"s\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"triggerType !== 'onDemand' && $slots.body\"\n\t\t\tclass=\"top-schedule_body\"\n\t\t>\n\t\t\t<slot name=\"body\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<template>\n\t<div class=\"top-schedule_bodyContainer\">\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","import type { Day, Props } from './types';\nimport { useI18n } from '@/core/app';\n\n/**\n * Количество дней в месяце\n */\nexport const COUNT_DAYS_IN_MONTHS = 27;\n\n/**\n * Количество дней в неделе\n */\nexport const COUNT_DAYS_IN_WEEK = 7;\n\nexport const genDaysByCalendarMode = (mode: Props['mode']): Day[] => {\n\tconst i18n = useI18n();\n\n\tswitch (mode) {\n\t\tcase 'dayOfMonth': {\n\t\t\tconst days: Day[] = Array.from({ length: COUNT_DAYS_IN_MONTHS }, (_, index) => ({\n\t\t\t\tvalue: String(index + 1) as Day['value'],\n\t\t\t\ttitle: String(index + 1),\n\t\t\t}));\n\n\t\t\tdays.push({\n\t\t\t\tvalue: 'LAST_OF_MONTH',\n\t\t\t\ttitle: '',\n\t\t\t\tisIcon: true,\n\t\t\t});\n\n\t\t\treturn days;\n\t\t}\n\n\t\tcase 'dayOfWeek': {\n\t\t\treturn [\n\t\t\t\t{ value: 'MONDAY', title: i18n.Calendar.Dw_1 },\n\t\t\t\t{ value: 'TUESDAY', title: i18n.Calendar.Dw_2 },\n\t\t\t\t{ value: 'WEDNESDAY', title: i18n.Calendar.Dw_3 },\n\t\t\t\t{ value: 'THURSDAY', title: i18n.Calendar.Dw_4 },\n\t\t\t\t{ value: 'FRIDAY', title: i18n.Calendar.Dw_5 },\n\t\t\t\t{ value: 'SATURDAY', title: i18n.Calendar.Dw_6 },\n\t\t\t\t{ value: 'SUNDAY', title: i18n.Calendar.Dw_7 },\n\t\t\t];\n\t\t}\n\t}\n};\n","<script setup lang=\"ts\">\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/calendar/types';\nimport { COUNT_DAYS_IN_MONTHS, COUNT_DAYS_IN_WEEK, genDaysByCalendarMode } from '@/components/schedule/schedule/compoents/calendar/utils';\nimport { numberEnding } from '@/core/utils/string';\nimport { computed } from 'vue';\nimport { useI18n } from '@/core/app';\n\nconst i18n = useI18n();\nconst props = withDefaults(defineProps<Props>(), {\n\ttimesCount: 1,\n});\nconst emit = defineEmits<Emits>();\n\nconst selectedDays = computed<Props['modelValue']>({\n\tget: () => props.modelValue,\n\tset: value => emit('update:modelValue', value),\n});\n\nconst days = computed(() => genDaysByCalendarMode(props.mode));\n\n/**\n * Параметры отображения выбранных дней для каждого режима календаря\n */\nconst modeConfig = {\n\tdayOfWeek: {\n\t\ttotalDaysCount: COUNT_DAYS_IN_WEEK,\n\t\tperiod: i18n.Common.a_week,\n\t},\n\tdayOfMonth: {\n\t\t// плюс \"последний день месяца\"\n\t\ttotalDaysCount: COUNT_DAYS_IN_MONTHS + 1,\n\t\tperiod: i18n.Common.a_month,\n\t},\n};\n\n/**\n * Текстовая сводка выбранных дней и временных слотов\n */\nconst selectionSummary = computed(() => {\n\t// Количество выбранных пользователем дней\n\tconst daysCount = selectedDays.value.length;\n\t// Общее количество доступных дней и название периода для текущего режима\n\tconst { totalDaysCount, period } = modeConfig[props.mode];\n\t// Выбраны ли все доступные дни\n\tconst isEveryDay = daysCount === totalDaysCount;\n\n\tif (isEveryDay && props.timesCount === 1) return i18n.Common.Every_day;\n\n\t// Число, для которого нужно подобрать склонение слова «раз»\n\tconst count = props.timesCount === 1 ? daysCount : props.timesCount;\n\t// Подпись количества выбранных дней\n\tconst daysLabel = isEveryDay ? i18n.Common.Every_day : `${daysCount}`;\n\t// Множитель времени отображается только при нескольких временных слотах\n\tconst multiplier = props.timesCount > 1 ? ` × ${props.timesCount}` : '';\n\t// Склонённая подпись количества запусков\n\tconst countLabel = numberEnding(\n\t\tcount,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_2,\n\t);\n\n\treturn `${daysLabel}${multiplier} ${countLabel} ${period}`;\n});\n\nconst isClearAction = computed(() => selectedDays.value.length > 1);\n\nconst toggleAllDays = () => {\n\tselectedDays.value = isClearAction.value ? [] : days.value.map(day => day.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleCalendar\">\n\t\t<div class=\"top-scheduleCalendar_header\">\n\t\t\t<slot name=\"header\"></slot>\n\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleCalendar_headerButton\"\n\t\t\t\t@click=\"toggleAllDays\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t>\n\t\t\t\t{{ isClearAction ? $i18n.Common.Clear : $i18n.Common.Select_all}}\n\t\t\t</TopButton>\n\t\t</div>\n\n\t\t<div class=\"top-scheduleCalendar_calendar\">\n\t\t\t<label\n\t\t\t\tclass=\"top-scheduleCalendar_calendarDay\"\n\t\t\t\tv-for=\"day in days\"\n\t\t\t\t:key=\"day.value\"\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayRadio\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:value=\"day.value\"\n\t\t\t\t\tv-model=\"selectedDays\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t>\n\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayTitle\"\n\t\t\t\t\t:data-top-icon=\"day.isIcon ? day.title : undefined\"\n\t\t\t\t>\n\t\t\t\t\t<template v-if=\"!day.isIcon\">\n\t\t\t\t\t\t{{ day.title }}\n\t\t\t\t\t</template>\n\t\t\t\t</span>\n\t\t\t</label>\n\t\t</div>\n\n\t\t<span\n\t\t\t:class=\"{\n\t\t\t\t'top-scheduleCalendar_selectionSummary': true,\n\t\t\t\t'top-error': !selectedDays.length\n\t\t\t}\"\n\t\t>\n\t\t\t{{ selectionSummary }}\n\t\t</span>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/calendar/types';\nimport { COUNT_DAYS_IN_MONTHS, COUNT_DAYS_IN_WEEK, genDaysByCalendarMode } from '@/components/schedule/schedule/compoents/calendar/utils';\nimport { numberEnding } from '@/core/utils/string';\nimport { computed } from 'vue';\nimport { useI18n } from '@/core/app';\n\nconst i18n = useI18n();\nconst props = withDefaults(defineProps<Props>(), {\n\ttimesCount: 1,\n});\nconst emit = defineEmits<Emits>();\n\nconst selectedDays = computed<Props['modelValue']>({\n\tget: () => props.modelValue,\n\tset: value => emit('update:modelValue', value),\n});\n\nconst days = computed(() => genDaysByCalendarMode(props.mode));\n\n/**\n * Параметры отображения выбранных дней для каждого режима календаря\n */\nconst modeConfig = {\n\tdayOfWeek: {\n\t\ttotalDaysCount: COUNT_DAYS_IN_WEEK,\n\t\tperiod: i18n.Common.a_week,\n\t},\n\tdayOfMonth: {\n\t\t// плюс \"последний день месяца\"\n\t\ttotalDaysCount: COUNT_DAYS_IN_MONTHS + 1,\n\t\tperiod: i18n.Common.a_month,\n\t},\n};\n\n/**\n * Текстовая сводка выбранных дней и временных слотов\n */\nconst selectionSummary = computed(() => {\n\t// Количество выбранных пользователем дней\n\tconst daysCount = selectedDays.value.length;\n\t// Общее количество доступных дней и название периода для текущего режима\n\tconst { totalDaysCount, period } = modeConfig[props.mode];\n\t// Выбраны ли все доступные дни\n\tconst isEveryDay = daysCount === totalDaysCount;\n\n\tif (isEveryDay && props.timesCount === 1) return i18n.Common.Every_day;\n\n\t// Число, для которого нужно подобрать склонение слова «раз»\n\tconst count = props.timesCount === 1 ? daysCount : props.timesCount;\n\t// Подпись количества выбранных дней\n\tconst daysLabel = isEveryDay ? i18n.Common.Every_day : `${daysCount}`;\n\t// Множитель времени отображается только при нескольких временных слотах\n\tconst multiplier = props.timesCount > 1 ? ` × ${props.timesCount}` : '';\n\t// Склонённая подпись количества запусков\n\tconst countLabel = numberEnding(\n\t\tcount,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_2,\n\t);\n\n\treturn `${daysLabel}${multiplier} ${countLabel} ${period}`;\n});\n\nconst isClearAction = computed(() => selectedDays.value.length > 1);\n\nconst toggleAllDays = () => {\n\tselectedDays.value = isClearAction.value ? [] : days.value.map(day => day.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleCalendar\">\n\t\t<div class=\"top-scheduleCalendar_header\">\n\t\t\t<slot name=\"header\"></slot>\n\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleCalendar_headerButton\"\n\t\t\t\t@click=\"toggleAllDays\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t>\n\t\t\t\t{{ isClearAction ? $i18n.Common.Clear : $i18n.Common.Select_all}}\n\t\t\t</TopButton>\n\t\t</div>\n\n\t\t<div class=\"top-scheduleCalendar_calendar\">\n\t\t\t<label\n\t\t\t\tclass=\"top-scheduleCalendar_calendarDay\"\n\t\t\t\tv-for=\"day in days\"\n\t\t\t\t:key=\"day.value\"\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayRadio\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:value=\"day.value\"\n\t\t\t\t\tv-model=\"selectedDays\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t>\n\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayTitle\"\n\t\t\t\t\t:data-top-icon=\"day.isIcon ? day.title : undefined\"\n\t\t\t\t>\n\t\t\t\t\t<template v-if=\"!day.isIcon\">\n\t\t\t\t\t\t{{ day.title }}\n\t\t\t\t\t</template>\n\t\t\t\t</span>\n\t\t\t</label>\n\t\t</div>\n\n\t\t<span\n\t\t\t:class=\"{\n\t\t\t\t'top-scheduleCalendar_selectionSummary': true,\n\t\t\t\t'top-error': !selectedDays.length\n\t\t\t}\"\n\t\t>\n\t\t\t{{ selectionSummary }}\n\t\t</span>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\nimport Core from '@/core/core/core';\nimport { isEmail } from '@/core/utils/check';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/selector/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n});\n\nconst emit = defineEmits<Emits>();\nconst i18n = useI18n();\nconst $ = Core.$;\n\nconst elRootRef = ref<HTMLElement>();\nconst elInputRef = ref<InstanceType<typeof TopInput>>();\nlet elInput: HTMLInputElement | null = null;\nconst autocompleteCache: Record<string, string[]> = {};\n\nconst filterEmails = (emails: string[]) => emails.filter(email => !props.emails.includes(email));\n\nconst submit = (value: unknown = props.modelValue) => {\n\tconst email = String(value).trim();\n\tif (!email) return;\n\tif (!isEmail(email)) {\n\t\tvoid Core.notice(i18n.Common.Enter_valid_email_notice, 'error');\n\n\t\treturn;\n\t}\n\n\temit('submit', email);\n};\n\nconst initAutocomplete = async () => {\n\tawait nextTick();\n\n\telInput = elInputRef.value?.$el.querySelector('input') ?? null;\n\tif (!elInput) return;\n\n\tif (!$?.ui?.autocomplete) {\n\t\tconsole.info('Для работы autocomplete требуется глобальная загрузка jQuery UI Autocomplete');\n\n\t\treturn;\n\t}\n\n\t$(elInput).autocomplete({\n\t\tappendTo: elRootRef.value,\n\t\tminLength: 0,\n\t\tsource: async (request: { term: string }, response: (items: Array<{ label: string, value: string }>) => void) => {\n\t\t\tconst term = request.term;\n\t\t\tif (!(term in autocompleteCache)) {\n\t\t\t\tautocompleteCache[term] = await props.getEmailSuggestions(term);\n\t\t\t}\n\n\t\t\tresponse(filterEmails(autocompleteCache[term]).map(email => ({\n\t\t\t\tlabel: email,\n\t\t\t\tvalue: email,\n\t\t\t})));\n\t\t},\n\t\tselect: (event: Event, ui: { item?: { value: string } }) => {\n\t\t\tif (!ui.item || !elInput) return;\n\n\t\t\tevent.preventDefault();\n\t\t\tsubmit(ui.item.value);\n\t\t\temit('update:modelValue', '');\n\n\t\t\t$(elInput).trigger('focus');\n\t\t},\n\t});\n\n\t$(elInput).attr('autocomplete', 'disabled');\n\t$(elInput).on('focus.scheduleEmailSelector', () => {\n\t\tif (!elInput) return;\n\n\t\t$(elInput).trigger('input');\n\t});\n};\n\nonMounted(() => {\n\tvoid initAutocomplete();\n});\n\nonBeforeUnmount(() => {\n\tif (!$?.ui?.autocomplete || !elInput) return;\n\n\t$(elInput).off('focus.scheduleEmailSelector');\n\t$(elInput).autocomplete('destroy');\n});\n</script>\n\n<template>\n\t<div\n\t\tclass=\"top-scheduleEmailSelector\"\n\t\tref=\"elRootRef\"\n\t>\n\t\t<TopInput\n\t\t\tref=\"elInputRef\"\n\t\t\t:modelValue\n\t\t\t@update:modelValue=\"$emit('update:modelValue', $event)\"\n\t\t\t@keydown.enter.prevent=\"submit()\"\n\t\t\t:title=\"$i18n.Common.Enter_email\"\n\t\t\ttype=\"email\"\n\t\t\tsize=\"l\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleEmailSelector_submit\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t\t@click.prevent=\"submit()\"\n\t\t\t/>\n\t\t</TopInput>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\nimport Core from '@/core/core/core';\nimport { isEmail } from '@/core/utils/check';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/selector/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n});\n\nconst emit = defineEmits<Emits>();\nconst i18n = useI18n();\nconst $ = Core.$;\n\nconst elRootRef = ref<HTMLElement>();\nconst elInputRef = ref<InstanceType<typeof TopInput>>();\nlet elInput: HTMLInputElement | null = null;\nconst autocompleteCache: Record<string, string[]> = {};\n\nconst filterEmails = (emails: string[]) => emails.filter(email => !props.emails.includes(email));\n\nconst submit = (value: unknown = props.modelValue) => {\n\tconst email = String(value).trim();\n\tif (!email) return;\n\tif (!isEmail(email)) {\n\t\tvoid Core.notice(i18n.Common.Enter_valid_email_notice, 'error');\n\n\t\treturn;\n\t}\n\n\temit('submit', email);\n};\n\nconst initAutocomplete = async () => {\n\tawait nextTick();\n\n\telInput = elInputRef.value?.$el.querySelector('input') ?? null;\n\tif (!elInput) return;\n\n\tif (!$?.ui?.autocomplete) {\n\t\tconsole.info('Для работы autocomplete требуется глобальная загрузка jQuery UI Autocomplete');\n\n\t\treturn;\n\t}\n\n\t$(elInput).autocomplete({\n\t\tappendTo: elRootRef.value,\n\t\tminLength: 0,\n\t\tsource: async (request: { term: string }, response: (items: Array<{ label: string, value: string }>) => void) => {\n\t\t\tconst term = request.term;\n\t\t\tif (!(term in autocompleteCache)) {\n\t\t\t\tautocompleteCache[term] = await props.getEmailSuggestions(term);\n\t\t\t}\n\n\t\t\tresponse(filterEmails(autocompleteCache[term]).map(email => ({\n\t\t\t\tlabel: email,\n\t\t\t\tvalue: email,\n\t\t\t})));\n\t\t},\n\t\tselect: (event: Event, ui: { item?: { value: string } }) => {\n\t\t\tif (!ui.item || !elInput) return;\n\n\t\t\tevent.preventDefault();\n\t\t\tsubmit(ui.item.value);\n\t\t\temit('update:modelValue', '');\n\n\t\t\t$(elInput).trigger('focus');\n\t\t},\n\t});\n\n\t$(elInput).attr('autocomplete', 'disabled');\n\t$(elInput).on('focus.scheduleEmailSelector', () => {\n\t\tif (!elInput) return;\n\n\t\t$(elInput).trigger('input');\n\t});\n};\n\nonMounted(() => {\n\tvoid initAutocomplete();\n});\n\nonBeforeUnmount(() => {\n\tif (!$?.ui?.autocomplete || !elInput) return;\n\n\t$(elInput).off('focus.scheduleEmailSelector');\n\t$(elInput).autocomplete('destroy');\n});\n</script>\n\n<template>\n\t<div\n\t\tclass=\"top-scheduleEmailSelector\"\n\t\tref=\"elRootRef\"\n\t>\n\t\t<TopInput\n\t\t\tref=\"elInputRef\"\n\t\t\t:modelValue\n\t\t\t@update:modelValue=\"$emit('update:modelValue', $event)\"\n\t\t\t@keydown.enter.prevent=\"submit()\"\n\t\t\t:title=\"$i18n.Common.Enter_email\"\n\t\t\ttype=\"email\"\n\t\t\tsize=\"l\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleEmailSelector_submit\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t\t@click.prevent=\"submit()\"\n\t\t\t/>\n\t\t</TopInput>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/types';\nimport ScheduleEmailSelector from '@/components/schedule/schedule/compoents/email/selector/selector.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n\tmaxEmailsCount: -1,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst value = ref('');\n\nconst addEmail = (email: string) => {\n\tconst preparedEmail = email.trim();\n\tif (!preparedEmail || props.emails.includes(preparedEmail)) {\n\t\tvalue.value = '';\n\n\t\treturn;\n\t}\n\n\temit('add:email', preparedEmail);\n\n\tvalue.value = '';\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleEmail\">\n\t\t<div class=\"top-scheduleEmail_title\">\n\t\t\t{{ $i18n.Projects.Reports_send_to_address }} E-mail:\n\t\t</div>\n\n\t\t<ScheduleEmailSelector\n\t\t\tv-if=\"!(maxEmailsCount && emails.length === maxEmailsCount)\"\n\t\t\tv-model=\"value\"\n\t\t\t:getEmailSuggestions=\"getEmailSuggestions\"\n\t\t\t:emails=\"emails\"\n\t\t\t@submit=\"addEmail\"\n\t\t/>\n\n\t\t<div\n\t\t\tv-if=\"emails.length\"\n\t\t\tclass=\"top-scheduleEmail_emails\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleEmail_emailsItem\"\n\t\t\t\tv-for=\"email in emails\"\n\t\t\t\t:key=\"email\"\n\t\t\t>\n\t\t\t\t<span class=\"top-ellipsis1\">{{ email }}</span>\n\n\t\t\t\t<TopButton\n\t\t\t\t\t@click=\"$emit('remove:email', email)\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/types';\nimport ScheduleEmailSelector from '@/components/schedule/schedule/compoents/email/selector/selector.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n\tmaxEmailsCount: -1,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst value = ref('');\n\nconst addEmail = (email: string) => {\n\tconst preparedEmail = email.trim();\n\tif (!preparedEmail || props.emails.includes(preparedEmail)) {\n\t\tvalue.value = '';\n\n\t\treturn;\n\t}\n\n\temit('add:email', preparedEmail);\n\n\tvalue.value = '';\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleEmail\">\n\t\t<div class=\"top-scheduleEmail_title\">\n\t\t\t{{ $i18n.Projects.Reports_send_to_address }} E-mail:\n\t\t</div>\n\n\t\t<ScheduleEmailSelector\n\t\t\tv-if=\"!(maxEmailsCount && emails.length === maxEmailsCount)\"\n\t\t\tv-model=\"value\"\n\t\t\t:getEmailSuggestions=\"getEmailSuggestions\"\n\t\t\t:emails=\"emails\"\n\t\t\t@submit=\"addEmail\"\n\t\t/>\n\n\t\t<div\n\t\t\tv-if=\"emails.length\"\n\t\t\tclass=\"top-scheduleEmail_emails\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleEmail_emailsItem\"\n\t\t\t\tv-for=\"email in emails\"\n\t\t\t\t:key=\"email\"\n\t\t\t>\n\t\t\t\t<span class=\"top-ellipsis1\">{{ email }}</span>\n\n\t\t\t\t<TopButton\n\t\t\t\t\t@click=\"$emit('remove:email', email)\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Emits, Props, ReportChannelSource } from '@/components/schedule/schedule/compoents/reportSend/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tconnectors: () => [],\n});\ndefineEmits<Emits>();\n\nconst hasChannel = (source: ReportChannelSource) => props.channels.some(channel => channel.source === source);\n\nconst sourceIconBySource: Record<ReportChannelSource, string> = {\n\tinformer: '',\n\ttelegram: '',\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleReportSend\">\n\t\t<div class=\"top-scheduleReportSend_title\">\n\t\t\t{{ $i18n.Projects.Reports_send }}\n\t\t</div>\n\n\t\t<div class=\"top-scheduleReportSend_channels\">\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\tv-for=\"channel in channels\"\n\t\t\t\t:key=\"`${channel.source}-${channel.id}`\"\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelIcon\"\n\t\t\t\t\t:data-top-icon=\"sourceIconBySource[channel.source]\"\n\t\t\t\t></span>\n\n\t\t\t\t<span class=\"top-scheduleReportSend_channelLabel top-ellipsis1\">\n\t\t\t\t\t{{ channel.label }}\n\t\t\t\t</span>\n\n\t\t\t\t<TopButton\n\t\t\t\t\tv-if=\"channel.settingLink\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelSettings\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t:href=\"channel.settingLink\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t></TopButton>\n\n\t\t\t\t<TopSwitcher\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelSwitcher\"\n\t\t\t\t\t:modelValue=\"channel.selected\"\n\t\t\t\t\t@update:modelValue=\"$emit('update:channelSelected', {\n\t\t\t\t\t\tid: channel.id,\n\t\t\t\t\t\tsource: channel.source,\n\t\t\t\t\t\tselected: $event as boolean,\n\t\t\t\t\t})\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<template\n\t\t\t\tv-for=\"connector in connectors\"\n\t\t\t\t:key=\"connector.source\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"!hasChannel(connector.source)\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelIcon\"\n\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[connector.source]\"\n\t\t\t\t\t></span>\n\n\t\t\t\t\t<a\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelLabel top-ellipsis1\"\n\t\t\t\t\t\t:href=\"connector.connectLink\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ connector.connectLabel }}\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Emits, Props, ReportChannelSource } from '@/components/schedule/schedule/compoents/reportSend/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tconnectors: () => [],\n});\ndefineEmits<Emits>();\n\nconst hasChannel = (source: ReportChannelSource) => props.channels.some(channel => channel.source === source);\n\nconst sourceIconBySource: Record<ReportChannelSource, string> = {\n\tinformer: '',\n\ttelegram: '',\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleReportSend\">\n\t\t<div class=\"top-scheduleReportSend_title\">\n\t\t\t{{ $i18n.Projects.Reports_send }}\n\t\t</div>\n\n\t\t<div class=\"top-scheduleReportSend_channels\">\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\tv-for=\"channel in channels\"\n\t\t\t\t:key=\"`${channel.source}-${channel.id}`\"\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelIcon\"\n\t\t\t\t\t:data-top-icon=\"sourceIconBySource[channel.source]\"\n\t\t\t\t></span>\n\n\t\t\t\t<span class=\"top-scheduleReportSend_channelLabel top-ellipsis1\">\n\t\t\t\t\t{{ channel.label }}\n\t\t\t\t</span>\n\n\t\t\t\t<TopButton\n\t\t\t\t\tv-if=\"channel.settingLink\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelSettings\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t:href=\"channel.settingLink\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t></TopButton>\n\n\t\t\t\t<TopSwitcher\n\t\t\t\t\tclass=\"top-scheduleReportSend_channelSwitcher\"\n\t\t\t\t\t:modelValue=\"channel.selected\"\n\t\t\t\t\t@update:modelValue=\"$emit('update:channelSelected', {\n\t\t\t\t\t\tid: channel.id,\n\t\t\t\t\t\tsource: channel.source,\n\t\t\t\t\t\tselected: $event as boolean,\n\t\t\t\t\t})\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<template\n\t\t\t\tv-for=\"connector in connectors\"\n\t\t\t\t:key=\"connector.source\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"!hasChannel(connector.source)\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelIcon\"\n\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[connector.source]\"\n\t\t\t\t\t></span>\n\n\t\t\t\t\t<a\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelLabel top-ellipsis1\"\n\t\t\t\t\t\t:href=\"connector.connectLink\"\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ connector.connectLabel }}\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits, Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\n\nconst props = defineProps<Props>();\ndefineEmits<Emits>();\n\n/**\n * Варианты выбора часа\n */\nconst hourOptions = Array.from({ length: 24 }, (_, index) => ({\n\tvalue: String(index),\n\ttitle: String(index).padStart(2, '0'),\n}));\n\n/**\n * Варианты выбора минут по умолчанию\n */\nconst defaultMinuteOptions = [\n\t{\n\t\tvalue: '0',\n\t\ttitle: '00',\n\t},\n\t{\n\t\tvalue: '15',\n\t\ttitle: '15',\n\t},\n\t{\n\t\tvalue: '30',\n\t\ttitle: '30',\n\t},\n\t{\n\t\tvalue: '45',\n\t\ttitle: '45',\n\t},\n];\n\n/**\n * Варианты выбора минут\n *\n * Дополняются выбранным нестандартным значением, чтобы вывести его в интерфейсе\n */\nconst minuteOptions = computed(() => {\n\tif (defaultMinuteOptions.some((option) => option.value === props.minute)) return defaultMinuteOptions;\n\n\treturn [\n\t\t...defaultMinuteOptions, {\n\t\t\tvalue: props.minute,\n\t\t\ttitle: props.minute.padStart(2, '0'),\n\t\t\tdisabled: true,\n\t\t},\n\t];\n});\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelector\">\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_hour\"\n\t\t\t:modelValue=\"hour\"\n\t\t\t:options=\"hourOptions\"\n\t\t\t@update:modelValue=\"$emit('update:hour', $event as Time['hour'])\"\n\t\t/>\n\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_minute\"\n\t\t\t:modelValue=\"minute\"\n\t\t\t:options=\"minuteOptions\"\n\t\t\t@update:modelValue=\"$emit('update:minute', $event as Time['minute'])\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits, Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\n\nconst props = defineProps<Props>();\ndefineEmits<Emits>();\n\n/**\n * Варианты выбора часа\n */\nconst hourOptions = Array.from({ length: 24 }, (_, index) => ({\n\tvalue: String(index),\n\ttitle: String(index).padStart(2, '0'),\n}));\n\n/**\n * Варианты выбора минут по умолчанию\n */\nconst defaultMinuteOptions = [\n\t{\n\t\tvalue: '0',\n\t\ttitle: '00',\n\t},\n\t{\n\t\tvalue: '15',\n\t\ttitle: '15',\n\t},\n\t{\n\t\tvalue: '30',\n\t\ttitle: '30',\n\t},\n\t{\n\t\tvalue: '45',\n\t\ttitle: '45',\n\t},\n];\n\n/**\n * Варианты выбора минут\n *\n * Дополняются выбранным нестандартным значением, чтобы вывести его в интерфейсе\n */\nconst minuteOptions = computed(() => {\n\tif (defaultMinuteOptions.some((option) => option.value === props.minute)) return defaultMinuteOptions;\n\n\treturn [\n\t\t...defaultMinuteOptions, {\n\t\t\tvalue: props.minute,\n\t\t\ttitle: props.minute.padStart(2, '0'),\n\t\t\tdisabled: true,\n\t\t},\n\t];\n});\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelector\">\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_hour\"\n\t\t\t:modelValue=\"hour\"\n\t\t\t:options=\"hourOptions\"\n\t\t\t@update:modelValue=\"$emit('update:hour', $event as Time['hour'])\"\n\t\t/>\n\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_minute\"\n\t\t\t:modelValue=\"minute\"\n\t\t\t:options=\"minuteOptions\"\n\t\t\t@update:modelValue=\"$emit('update:minute', $event as Time['minute'])\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { toRaw } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/timeSelectors/types';\nimport type { Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\nimport TimeSelector from '@/components/schedule/schedule/compoents/timeSelector/timeSelector.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\nconst timeKeys = new WeakMap<Time, number>();\nlet nextTimeKey = 0;\n\nconst getTimeKey = (rawOrProxyTime: Time) => {\n\t// time может быть proxy или обычным объектом\n\tconst time = toRaw(rawOrProxyTime);\n\n\tconst existingKey = timeKeys.get(time);\n\tif (existingKey !== undefined) return existingKey;\n\n\tconst key = nextTimeKey++;\n\ttimeKeys.set(time, key);\n\n\treturn key;\n};\n\nconst updateTime = (index: number, patch: Partial<Props['times'][number]>) => {\n\tconst updatedTimes = props.times.map((time, i) => {\n\t\tif (i !== index) return time;\n\n\t\tconst updatedTime = { ...time, ...patch };\n\t\ttimeKeys.set(updatedTime, getTimeKey(time));\n\n\t\treturn updatedTime;\n\t});\n\n\temit('update:times', updatedTimes);\n};\n\nconst addTime = () => {\n\tconst time: Time = {\n\t\thour: '0',\n\t\tminute: '0',\n\t};\n\n\tconst updatedTimes = [\n\t\ttime,\n\t\t...props.times,\n\t];\n\n\temit('update:times', updatedTimes);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelectors\">\n\t\t<div\n\t\t\tclass=\"top-scheduleTimeSelectors_item\"\n\t\t\tv-for=\"(time, index) in times\"\n\t\t\t:key=\"getTimeKey(time)\"\n\t\t>\n\t\t\t<TimeSelector\n\t\t\t\t:hour=\"time.hour\"\n\t\t\t\t:minute=\"time.minute\"\n\t\t\t\t@update:hour=\"updateTime(index, { hour: $event as Time['hour'] })\"\n\t\t\t\t@update:minute=\"updateTime(index, { minute: $event as Time['minute'] })\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-if=\"index\"\n\t\t\t\t@click=\"$emit('update:times', times.filter((_, i) => i !== index))\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-else\n\t\t\t\tclass=\"top-scheduleTimeSelectors_itemAdd\"\n\t\t\t\t@click=\"addTime\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { toRaw } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/timeSelectors/types';\nimport type { Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\nimport TimeSelector from '@/components/schedule/schedule/compoents/timeSelector/timeSelector.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\nconst timeKeys = new WeakMap<Time, number>();\nlet nextTimeKey = 0;\n\nconst getTimeKey = (rawOrProxyTime: Time) => {\n\t// time может быть proxy или обычным объектом\n\tconst time = toRaw(rawOrProxyTime);\n\n\tconst existingKey = timeKeys.get(time);\n\tif (existingKey !== undefined) return existingKey;\n\n\tconst key = nextTimeKey++;\n\ttimeKeys.set(time, key);\n\n\treturn key;\n};\n\nconst updateTime = (index: number, patch: Partial<Props['times'][number]>) => {\n\tconst updatedTimes = props.times.map((time, i) => {\n\t\tif (i !== index) return time;\n\n\t\tconst updatedTime = { ...time, ...patch };\n\t\ttimeKeys.set(updatedTime, getTimeKey(time));\n\n\t\treturn updatedTime;\n\t});\n\n\temit('update:times', updatedTimes);\n};\n\nconst addTime = () => {\n\tconst time: Time = {\n\t\thour: '0',\n\t\tminute: '0',\n\t};\n\n\tconst updatedTimes = [\n\t\ttime,\n\t\t...props.times,\n\t];\n\n\temit('update:times', updatedTimes);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelectors\">\n\t\t<div\n\t\t\tclass=\"top-scheduleTimeSelectors_item\"\n\t\t\tv-for=\"(time, index) in times\"\n\t\t\t:key=\"getTimeKey(time)\"\n\t\t>\n\t\t\t<TimeSelector\n\t\t\t\t:hour=\"time.hour\"\n\t\t\t\t:minute=\"time.minute\"\n\t\t\t\t@update:hour=\"updateTime(index, { hour: $event as Time['hour'] })\"\n\t\t\t\t@update:minute=\"updateTime(index, { minute: $event as Time['minute'] })\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-if=\"index\"\n\t\t\t\t@click=\"$emit('update:times', times.filter((_, i) => i !== index))\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-else\n\t\t\t\tclass=\"top-scheduleTimeSelectors_itemAdd\"\n\t\t\t\t@click=\"addTime\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n"],"mappings":"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"}
package/tabs/tabs.amd.js CHANGED
@@ -1,2 +1,2 @@
1
- define([`require`,`exports`,`vue`,`../require/css.amd!../assets/tabs.css`],function(e,t,n){"use strict";if(r===void 0)var r=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.TopTabsTab=t.TopTabsContent=t.TopTabs=void 0;var i={class:(0,n.normalizeClass)({"top-tabs":!0})},a={key:0,class:`top-tabs_header`},o={class:`top-tabs_contents`},s=(0,n.defineComponent)({__name:`tabs`,props:{id:{}},setup(e){return(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,i,[(0,n.renderSlot)(e.$slots,`buttons`),e.$slots.header?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,a,[(0,n.renderSlot)(e.$slots,`header`)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`div`,o,[(0,n.renderSlot)(e.$slots,`contents`)])]))}}),c=[`id`,`name`,`value`,`checked`,`disabled`],l=[`for`],u=(0,n.defineComponent)({__name:`tab`,props:{tabsId:{},name:{},title:{},active:{type:Boolean},disabled:{type:Boolean}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,null,[(0,n.createElementVNode)(`input`,{type:`radio`,class:`top-tabs_tabInput top-unvisible`,id:e.tabsId+e.name,name:e.tabsId,value:e.name,checked:e.active,disabled:e.disabled},null,8,c),(0,n.createElementVNode)(`label`,{class:(0,n.normalizeClass)({"top-tabs_tabLabel":!0,"top-forms-focusable":!0,"top-disabled":e.disabled}),for:e.tabsId+e.name},[(0,n.renderSlot)(t.$slots,`default`)],10,l)],64))}}),d=[`data-tabs-name`],f=(0,n.defineComponent)({__name:`content`,props:{name:{}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)({"top-tabs_content":!0}),"data-tabs-name":e.name},[(0,n.renderSlot)(t.$slots,`default`)],8,d))}});t.TopTabs=s,t.TopTabsTab=u,t.TopTabsContent=f});
1
+ define([`require`,`exports`,`vue`,`../require/css.amd!../assets/tabs.css`],function(e,t,n){"use strict";if(r===void 0)var r=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.TopTabsTab=t.TopTabsContent=t.TopTabs=void 0;var i={class:(0,n.normalizeClass)({"top-tabs":!0})},a={key:0,class:`top-tabs_header`},o={class:`top-tabs_contents`},s=(0,n.defineComponent)({__name:`tabs`,props:{id:{}},setup(e,{slots:t}){return(e,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,i,[(0,n.renderSlot)(e.$slots,`buttons`),t.header?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,a,[(0,n.renderSlot)(e.$slots,`header`)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`div`,o,[(0,n.renderSlot)(e.$slots,`contents`)])]))}}),c=[`id`,`name`,`value`,`checked`,`disabled`],l=[`for`],u=(0,n.defineComponent)({__name:`tab`,props:{tabsId:{},name:{},title:{},active:{type:Boolean},disabled:{type:Boolean}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,null,[(0,n.createElementVNode)(`input`,{type:`radio`,class:`top-tabs_tabInput top-unvisible`,id:e.tabsId+e.name,name:e.tabsId,value:e.name,checked:e.active,disabled:e.disabled},null,8,c),(0,n.createElementVNode)(`label`,{class:(0,n.normalizeClass)({"top-tabs_tabLabel":!0,"top-forms-focusable":!0,"top-disabled":e.disabled}),for:e.tabsId+e.name},[(0,n.renderSlot)(t.$slots,`default`)],10,l)],64))}}),d=[`data-tabs-name`],f=(0,n.defineComponent)({__name:`content`,props:{name:{}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)({"top-tabs_content":!0}),"data-tabs-name":e.name},[(0,n.renderSlot)(t.$slots,`default`)],8,d))}});t.TopTabs=s,t.TopTabsTab=u,t.TopTabsContent=f});
2
2
  //# sourceMappingURL=tabs.amd.js.map