@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.
- package/.chunks/{api-BlIxMRlW.amd.js → api-BD74aA98.amd.js} +2 -2
- package/.chunks/{api-BlIxMRlW.amd.js.map → api-BD74aA98.amd.js.map} +1 -1
- package/.chunks/{api-BlIxMRlW.esm.js → api-BD74aA98.esm.js} +2 -2
- package/.chunks/{api-BlIxMRlW.esm.js.map → api-BD74aA98.esm.js.map} +1 -1
- package/.chunks/{app-CyODeY0D.amd.js → app-DGsWGbDX.amd.js} +2 -2
- package/.chunks/{app-CyODeY0D.amd.js.map → app-DGsWGbDX.amd.js.map} +1 -1
- package/.chunks/{app-CyODeY0D.esm.js → app-DGsWGbDX.esm.js} +5 -5
- package/.chunks/{app-CyODeY0D.esm.js.map → app-DGsWGbDX.esm.js.map} +1 -1
- package/.chunks/{datepicker-CBAwfPPW.amd.js → datepicker-C7FNogyy.amd.js} +2 -2
- package/.chunks/{datepicker-CBAwfPPW.amd.js.map → datepicker-C7FNogyy.amd.js.map} +1 -1
- package/.chunks/{datepicker-CBAwfPPW.esm.js → datepicker-C7FNogyy.esm.js} +2 -2
- package/.chunks/{datepicker-CBAwfPPW.esm.js.map → datepicker-C7FNogyy.esm.js.map} +1 -1
- package/.chunks/dialog-DKGzAD_z.amd.js +2 -0
- package/.chunks/dialog-DKGzAD_z.amd.js.map +1 -0
- package/.chunks/{dialog-C8fss11q.esm.js → dialog-DKGzAD_z.esm.js} +18 -18
- package/.chunks/dialog-DKGzAD_z.esm.js.map +1 -0
- package/.chunks/{dialog_regionSelectorRegions-zJShjr2f.amd.js → dialog_regionSelectorRegions-BIjtdwxa.amd.js} +2 -2
- package/.chunks/{dialog_regionSelectorRegions-zJShjr2f.amd.js.map → dialog_regionSelectorRegions-BIjtdwxa.amd.js.map} +1 -1
- package/.chunks/{dialog_regionSelectorRegions-zJShjr2f.esm.js → dialog_regionSelectorRegions-BIjtdwxa.esm.js} +4 -4
- package/.chunks/dialog_regionSelectorRegions-BIjtdwxa.esm.js.map +1 -0
- package/.chunks/{forms-LywqKN9I.amd.js → forms-_4U0sLFk.amd.js} +2 -2
- package/.chunks/forms-_4U0sLFk.amd.js.map +1 -0
- package/.chunks/{forms-LywqKN9I.esm.js → forms-_4U0sLFk.esm.js} +116 -116
- package/.chunks/forms-_4U0sLFk.esm.js.map +1 -0
- package/.chunks/formsExt-BZZEpY-a.amd.js +2 -0
- package/.chunks/formsExt-BZZEpY-a.amd.js.map +1 -0
- package/.chunks/{formsExt-Iw04hpHr.esm.js → formsExt-BZZEpY-a.esm.js} +183 -183
- package/.chunks/formsExt-BZZEpY-a.esm.js.map +1 -0
- package/.chunks/{notice-Dw5ZUJxW.amd.js → notice-FzLgMsrr.amd.js} +2 -2
- package/.chunks/{notice-Dw5ZUJxW.amd.js.map → notice-FzLgMsrr.amd.js.map} +1 -1
- package/.chunks/{notice-Dw5ZUJxW.esm.js → notice-FzLgMsrr.esm.js} +2 -2
- package/.chunks/notice-FzLgMsrr.esm.js.map +1 -0
- package/.chunks/{popup-BqacuTuJ.amd.js → popup-CS0IahOr.amd.js} +2 -2
- package/.chunks/{popup-BqacuTuJ.amd.js.map → popup-CS0IahOr.amd.js.map} +1 -1
- package/.chunks/{popup-BqacuTuJ.esm.js → popup-CS0IahOr.esm.js} +3 -3
- package/.chunks/{popup-BqacuTuJ.esm.js.map → popup-CS0IahOr.esm.js.map} +1 -1
- package/.chunks/popup-DViuKwOc.amd.js +2 -0
- package/.chunks/popup-DViuKwOc.amd.js.map +1 -0
- package/.chunks/{popup-ClpsGU2P.esm.js → popup-DViuKwOc.esm.js} +104 -104
- package/.chunks/popup-DViuKwOc.esm.js.map +1 -0
- package/.chunks/{utils-CZnFOkS6.amd.js → utils-BtqYaMHp.amd.js} +2 -2
- package/.chunks/{utils-CZnFOkS6.amd.js.map → utils-BtqYaMHp.amd.js.map} +1 -1
- package/.chunks/{utils-CZnFOkS6.esm.js → utils-BtqYaMHp.esm.js} +3 -3
- package/.chunks/{utils-CZnFOkS6.esm.js.map → utils-BtqYaMHp.esm.js.map} +1 -1
- package/.chunks/{utils-ZgQqVN0T.amd.js → utils-Cou0pGI4.amd.js} +2 -2
- package/.chunks/utils-Cou0pGI4.amd.js.map +1 -0
- package/.chunks/{utils-ZgQqVN0T.esm.js → utils-Cou0pGI4.esm.js} +8 -6
- package/.chunks/{utils-ZgQqVN0T.esm.js.map → utils-Cou0pGI4.esm.js.map} +1 -1
- package/.chunks/{worker-a6MSM1uV.amd.js → worker-D28QqQ45.amd.js} +2 -2
- package/.chunks/{worker-a6MSM1uV.amd.js.map → worker-D28QqQ45.amd.js.map} +1 -1
- package/.chunks/{worker-a6MSM1uV.esm.js → worker-D28QqQ45.esm.js} +3 -3
- package/.chunks/{worker-a6MSM1uV.esm.js.map → worker-D28QqQ45.esm.js.map} +1 -1
- package/api/index.amd.js +1 -1
- package/api/index.amd.js.map +1 -1
- package/api/index.js +1 -1
- package/autoload-css-manifest.amd.json +4 -4
- package/autoload-css-manifest.json +4 -4
- package/charts/charts.amd.js +1 -1
- package/charts/charts.amd.js.map +1 -1
- package/charts/charts.js +1 -1
- package/core/app.amd.js +1 -1
- package/core/app.amd.js.map +1 -1
- package/core/app.js +3 -3
- package/dialog/dialog.amd.js +1 -1
- package/dialog/dialog.amd.js.map +1 -1
- package/dialog/dialog.js +2 -2
- package/forms/forms.amd.js +1 -1
- package/forms/forms.amd.js.map +1 -1
- package/forms/forms.js +1 -1
- package/formsExt/formsExt.amd.js +1 -1
- package/formsExt/formsExt.amd.js.map +1 -1
- package/formsExt/formsExt.js +1 -1
- package/layout/layout.amd.js +1 -1
- package/layout/layout.amd.js.map +1 -1
- package/layout/layout.js +3 -3
- package/layout/layout.js.map +1 -1
- package/package.json +8 -2
- package/popup/popup.amd.js +1 -1
- package/popup/popup.amd.js.map +1 -1
- package/popup/popup.js +1 -1
- package/popup/worker.amd.js +1 -1
- package/popup/worker.amd.js.map +1 -1
- package/popup/worker.js +1 -1
- package/project/project.amd.js +1 -1
- package/project/project.amd.js.map +1 -1
- package/project/project.js +32 -32
- package/project/project.js.map +1 -1
- package/schedule/schedule.amd.js +1 -1
- package/schedule/schedule.amd.js.map +1 -1
- package/schedule/schedule.js +90 -90
- package/schedule/schedule.js.map +1 -1
- package/tabs/tabs.amd.js +1 -1
- package/tabs/tabs.amd.js.map +1 -1
- package/tabs/tabs.js +3 -3
- package/tabs/tabs.js.map +1 -1
- package/tabsView/tabsView.amd.js +1 -1
- package/tabsView/tabsView.amd.js.map +1 -1
- package/tabsView/tabsView.js +11 -11
- package/tabsView/tabsView.js.map +1 -1
- package/utils/clipboard.amd.js +1 -1
- package/utils/clipboard.amd.js.map +1 -1
- package/utils/clipboard.js +1 -1
- package/utils/date.amd.js +1 -1
- package/utils/date.amd.js.map +1 -1
- package/utils/date.js +1 -1
- package/utils/device.amd.js +1 -1
- package/utils/device.amd.js.map +1 -1
- package/utils/device.js +1 -1
- package/utils/lodash.amd.js +1 -1
- package/utils/lodash.amd.js.map +1 -1
- package/utils/lodash.js +1 -1
- package/utils/price.amd.js +1 -1
- package/utils/price.amd.js.map +1 -1
- package/utils/price.js +1 -1
- package/utils/string.amd.js +1 -1
- package/utils/string.amd.js.map +1 -1
- package/utils/string.js +1 -1
- package/.chunks/dialog-C8fss11q.amd.js +0 -2
- package/.chunks/dialog-C8fss11q.amd.js.map +0 -1
- package/.chunks/dialog-C8fss11q.esm.js.map +0 -1
- package/.chunks/dialog_regionSelectorRegions-zJShjr2f.esm.js.map +0 -1
- package/.chunks/forms-LywqKN9I.amd.js.map +0 -1
- package/.chunks/forms-LywqKN9I.esm.js.map +0 -1
- package/.chunks/formsExt-Iw04hpHr.amd.js +0 -2
- package/.chunks/formsExt-Iw04hpHr.amd.js.map +0 -1
- package/.chunks/formsExt-Iw04hpHr.esm.js.map +0 -1
- package/.chunks/notice-Dw5ZUJxW.esm.js.map +0 -1
- package/.chunks/popup-ClpsGU2P.amd.js +0 -2
- package/.chunks/popup-ClpsGU2P.amd.js.map +0 -1
- package/.chunks/popup-ClpsGU2P.esm.js.map +0 -1
- package/.chunks/utils-ZgQqVN0T.amd.js.map +0 -1
package/schedule/schedule.js
CHANGED
|
@@ -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-
|
|
9
|
-
import "../.chunks/app-
|
|
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
|
|
30
|
-
go:
|
|
31
|
-
report:
|
|
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
|
-
},
|
|
34
|
-
return (e,
|
|
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(
|
|
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":
|
|
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" &&
|
|
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 =
|
|
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(
|
|
171
|
+
t.notice(u.Common.Enter_valid_email_notice, "error");
|
|
172
172
|
return;
|
|
173
173
|
}
|
|
174
|
-
|
|
174
|
+
l("submit", n);
|
|
175
175
|
}
|
|
176
|
-
},
|
|
177
|
-
if (await _(),
|
|
178
|
-
if (!
|
|
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
|
-
|
|
183
|
-
appendTo:
|
|
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
|
|
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 || !
|
|
193
|
+
!t.item || !g || (e.preventDefault(), w(t.item.value), l("update:modelValue", ""), d(g).trigger("focus"));
|
|
194
194
|
}
|
|
195
|
-
}),
|
|
196
|
-
|
|
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
|
-
|
|
201
|
+
T();
|
|
202
202
|
}), y(() => {
|
|
203
|
-
!
|
|
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:
|
|
207
|
+
ref: p
|
|
208
208
|
}, [h(n, {
|
|
209
209
|
ref_key: "elInputRef",
|
|
210
|
-
ref:
|
|
210
|
+
ref: m,
|
|
211
211
|
modelValue: i.modelValue,
|
|
212
|
-
"onUpdate:modelValue": t[1] ||= (
|
|
213
|
-
onKeydown: t[2] ||= ne(A((e) =>
|
|
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) =>
|
|
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 =
|
|
242
|
+
let n = t, r = e, i = t, a = S(""), o = (e) => {
|
|
243
243
|
let t = e.trim();
|
|
244
|
-
if (!t ||
|
|
245
|
-
|
|
244
|
+
if (!t || r.emails.includes(t)) {
|
|
245
|
+
a.value = "";
|
|
246
246
|
return;
|
|
247
247
|
}
|
|
248
|
-
|
|
248
|
+
i("add:email", t), a.value = "";
|
|
249
249
|
};
|
|
250
|
-
return (t,
|
|
251
|
-
let
|
|
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:
|
|
257
|
-
"onUpdate:modelValue":
|
|
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:
|
|
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(
|
|
270
|
-
onClick: (
|
|
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
|
|
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 (
|
|
293
|
-
let
|
|
294
|
-
return x(), f("div", re, [p("div", ie, E(
|
|
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":
|
|
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(
|
|
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(
|
|
313
|
+
h(s, {
|
|
314
314
|
class: "top-scheduleReportSend_channelSwitcher",
|
|
315
315
|
modelValue: e.selected,
|
|
316
|
-
"onUpdate:modelValue": (n) => t
|
|
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 }, [
|
|
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":
|
|
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
|
|
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
|
-
})),
|
|
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
|
-
],
|
|
361
|
-
value:
|
|
362
|
-
title:
|
|
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 (
|
|
366
|
-
let
|
|
367
|
-
return x(), f("div", de, [h(
|
|
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(
|
|
371
|
-
"onUpdate:modelValue":
|
|
372
|
-
}, null, 8, ["modelValue", "options"]), h(
|
|
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:
|
|
376
|
-
"onUpdate:modelValue":
|
|
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 =
|
|
386
|
-
let t = ee(e), n =
|
|
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 =
|
|
389
|
-
return
|
|
390
|
-
},
|
|
391
|
-
let
|
|
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
|
|
393
|
+
let i = {
|
|
394
394
|
...n,
|
|
395
395
|
...t
|
|
396
396
|
};
|
|
397
|
-
return
|
|
397
|
+
return a.set(i, s(n)), i;
|
|
398
398
|
});
|
|
399
|
-
|
|
400
|
-
},
|
|
399
|
+
i("update:times", n);
|
|
400
|
+
}, d = () => {
|
|
401
401
|
let e = [{
|
|
402
402
|
hour: "0",
|
|
403
403
|
minute: "0"
|
|
404
|
-
}, ...
|
|
405
|
-
|
|
404
|
+
}, ...r.times];
|
|
405
|
+
i("update:times", e);
|
|
406
406
|
};
|
|
407
|
-
return (t,
|
|
408
|
-
let
|
|
409
|
-
return x(), f("div", fe, [(x(!0), f(c, null, C(e.times, (
|
|
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:
|
|
411
|
+
key: s(t)
|
|
412
412
|
}, [h($, {
|
|
413
|
-
hour:
|
|
414
|
-
minute:
|
|
415
|
-
"onUpdate:hour": (e) =>
|
|
416
|
-
"onUpdate: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
|
-
]),
|
|
422
|
+
]), r ? (x(), u(i, {
|
|
423
423
|
key: 0,
|
|
424
|
-
onClick: (
|
|
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(
|
|
427
|
+
}, null, 8, ["onClick"])) : (x(), u(i, {
|
|
428
428
|
key: 1,
|
|
429
429
|
class: "top-scheduleTimeSelectors_itemAdd",
|
|
430
|
-
onClick:
|
|
430
|
+
onClick: d,
|
|
431
431
|
color: "theme",
|
|
432
432
|
icon: ""
|
|
433
433
|
}))]))), 128))]);
|
package/schedule/schedule.js.map
CHANGED
|
@@ -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,
|
|
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
|