@endge/utils 0.23.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/dist/utils.js ADDED
@@ -0,0 +1,1299 @@
1
+ var L = Object.defineProperty;
2
+ var C = (i, t, e) => t in i ? L(i, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[t] = e;
3
+ var o = (i, t, e) => C(i, typeof t != "symbol" ? t + "" : t, e);
4
+ import { ref as p, watch as w, triggerRef as D, reactive as _ } from "vue";
5
+ import { parse as k, serialize as I } from "cookie-es";
6
+ import { destr as z } from "destr";
7
+ import { plainToInstance as y, instanceToPlain as g, Transform as f, TransformationType as h, Expose as N } from "class-transformer";
8
+ import { IsOptional as P } from "class-validator";
9
+ import "reflect-metadata";
10
+ import R from "lodash/debounce.js";
11
+ import { v4 as j } from "uuid";
12
+ import { format as x, isAfter as T, isEqual as B, isBefore as A, startOfDay as m, endOfDay as U } from "date-fns";
13
+ import { utcToZonedTime as $, getTimezoneOffset as b } from "date-fns-tz";
14
+ import { defineStore as K } from "pinia";
15
+ const H = {
16
+ path: "/",
17
+ watch: !0,
18
+ decode: (i) => z(decodeURIComponent(i)),
19
+ encode: (i) => encodeURIComponent(typeof i == "string" ? i : JSON.stringify(i))
20
+ }, ct = (i, t) => {
21
+ var n;
22
+ const e = { ...H, ...t || {} }, r = k(document.cookie, e), s = p(r[i] ?? ((n = e.default) == null ? void 0 : n.call(e)));
23
+ return w(s, () => {
24
+ document.cookie = V(i, s.value, e);
25
+ }), s;
26
+ };
27
+ function V(i, t, e = {}) {
28
+ return t == null ? I(i, t, { ...e, maxAge: -1 }) : I(i, t, e);
29
+ }
30
+ var d = /* @__PURE__ */ ((i) => (i.Add = "add", i.Remove = "remove", i.Update = "update", i.IndexCreate = "indexCreate", i))(d || {});
31
+ class O {
32
+ /**
33
+ * Создает экземпляр EventBus и подготавливает базовое состояние.
34
+ */
35
+ constructor(t) {
36
+ o(this, "listeners", /* @__PURE__ */ new Map());
37
+ t.forEach((e) => {
38
+ this.listeners.set(e, /* @__PURE__ */ new Set());
39
+ });
40
+ }
41
+ // ---- Типизированные события ----
42
+ /**
43
+ * Обрабатывает входящее событие EventBus.
44
+ */
45
+ on(t, e) {
46
+ this._on(t, e);
47
+ }
48
+ /**
49
+ * Обрабатывает входящее событие EventBus.
50
+ */
51
+ once(t, e) {
52
+ this._once(t, e);
53
+ }
54
+ /**
55
+ * Выполняет действие off в рамках ответственности EventBus.
56
+ */
57
+ off(t, e) {
58
+ this._off(t, e);
59
+ }
60
+ /**
61
+ * Выполняет действие offAll в рамках ответственности EventBus.
62
+ */
63
+ offAll() {
64
+ for (const t of this.listeners.values())
65
+ t.clear();
66
+ }
67
+ /**
68
+ * Публикует событие во внутренний event bus EventBus.
69
+ */
70
+ emit(t, e) {
71
+ this._emit(t, e);
72
+ }
73
+ // ---- Кастомные события (опционально) ----
74
+ /**
75
+ * Обрабатывает входящее событие EventBus.
76
+ */
77
+ onCustom(t, e) {
78
+ this._on(t, e);
79
+ }
80
+ /**
81
+ * Обрабатывает входящее событие EventBus.
82
+ */
83
+ onceCustom(t, e) {
84
+ this._once(t, e);
85
+ }
86
+ /**
87
+ * Выполняет действие offCustom в рамках ответственности EventBus.
88
+ */
89
+ offCustom(t, e) {
90
+ this._off(t, e);
91
+ }
92
+ /**
93
+ * Публикует событие во внутренний event bus EventBus.
94
+ */
95
+ emitCustom(t, e) {
96
+ this._emit(t, e);
97
+ }
98
+ // ---- Общая логика ----
99
+ /**
100
+ * Обрабатывает входящее событие EventBus.
101
+ */
102
+ _on(t, e) {
103
+ const r = Array.isArray(t) ? t : [t];
104
+ for (const s of r)
105
+ this.listeners.has(s) || this.listeners.set(s, /* @__PURE__ */ new Set()), this.listeners.get(s).add(e);
106
+ }
107
+ /**
108
+ * Обрабатывает входящее событие EventBus.
109
+ */
110
+ _once(t, e) {
111
+ const r = Array.isArray(t) ? t : [t], s = (n) => {
112
+ for (const a of r)
113
+ this.off(a, s);
114
+ e(n);
115
+ };
116
+ this._on(r, s);
117
+ }
118
+ /**
119
+ * Выполняет внутренний шаг _off для EventBus.
120
+ */
121
+ _off(t, e) {
122
+ var s;
123
+ const r = Array.isArray(t) ? t : [t];
124
+ for (const n of r)
125
+ (s = this.listeners.get(n)) == null || s.delete(e);
126
+ }
127
+ /**
128
+ * Публикует событие во внутренний event bus EventBus.
129
+ */
130
+ _emit(t, e) {
131
+ const r = this.listeners.get(t);
132
+ if (r)
133
+ for (const s of r)
134
+ s(e);
135
+ }
136
+ /**
137
+ * Выполняет действие hasListeners в рамках ответственности EventBus.
138
+ */
139
+ hasListeners(t) {
140
+ var e;
141
+ return (((e = this.listeners.get(t)) == null ? void 0 : e.size) ?? 0) > 0;
142
+ }
143
+ /**
144
+ * Выполняет действие eventNames в рамках ответственности EventBus.
145
+ */
146
+ eventNames() {
147
+ return [...this.listeners.entries()].filter(([, t]) => t.size > 0).map(([t]) => t);
148
+ }
149
+ /**
150
+ * Очищает накопленное состояние EventBus.
151
+ */
152
+ clear(t) {
153
+ var e;
154
+ t ? (e = this.listeners.get(t)) == null || e.clear() : this.listeners.clear();
155
+ }
156
+ }
157
+ const ft = new O(Object.keys({}));
158
+ class E {
159
+ constructor() {
160
+ o(this, "subscribers", /* @__PURE__ */ new Set());
161
+ }
162
+ /**
163
+ * Подписывается на обновления.
164
+ * @param listener Функция, вызываемая при уведомлении.
165
+ * @returns Функция для отписки.
166
+ */
167
+ subscribe(t) {
168
+ return this.subscribers.add(t), () => {
169
+ this.subscribers.delete(t);
170
+ };
171
+ }
172
+ /**
173
+ * Уведомляет всех подписчиков.
174
+ */
175
+ notify() {
176
+ this.subscribers.forEach((t) => t());
177
+ }
178
+ }
179
+ const ut = (i) => {
180
+ const t = p(i), e = i.subscribe(() => {
181
+ D(t);
182
+ });
183
+ return { refObj: t, unsubscribe: e };
184
+ };
185
+ class ht extends E {
186
+ /**
187
+ * Создает экземпляр Collection и подготавливает базовое состояние.
188
+ */
189
+ constructor(e = []) {
190
+ super();
191
+ o(this, "items", []);
192
+ o(this, "indices", /* @__PURE__ */ new Map());
193
+ o(this, "rootIds", /* @__PURE__ */ new Set());
194
+ o(this, "bus");
195
+ this.bus = new O(Object.values(d)), e.length && this.add(e), this.createIndex("id");
196
+ }
197
+ /**
198
+ * Выполняет действие add в рамках ответственности Collection.
199
+ */
200
+ add(e) {
201
+ const r = Array.isArray(e) ? e : [e];
202
+ r.forEach((s) => {
203
+ this.items.push(s), this.indices.forEach((n, a) => {
204
+ n.set(s[a], s);
205
+ }), s.parentId || this.rootIds.add(s.id);
206
+ }), r != null && r.length && (this.bus.emit(d.Add, r), this.notify());
207
+ }
208
+ /**
209
+ * Удаляет сущность из runtime-коллекции Collection.
210
+ */
211
+ remove(e) {
212
+ const r = Array.isArray(e) ? e : [e], s = [];
213
+ r.forEach((n) => {
214
+ const a = typeof n == "string" ? n : n.id, c = this.items.findIndex((l) => l.id === a);
215
+ if (c !== -1) {
216
+ const [l] = this.items.splice(c, 1);
217
+ this.indices.forEach((u, M) => {
218
+ u.delete(l[M]);
219
+ }), l.parentId || this.rootIds.delete(l.id), s.push(l);
220
+ }
221
+ }), s.length && (this.bus.emit(d.Remove, s), this.notify());
222
+ }
223
+ /**
224
+ * Обновляет runtime-состояние Collection.
225
+ */
226
+ update(e) {
227
+ const r = Array.isArray(e) ? e : [e];
228
+ r.forEach((s) => {
229
+ const n = this.get(s.id);
230
+ n && (Object.assign(n, s), this.indices.forEach((a, c) => {
231
+ a.set(s[c], n);
232
+ }));
233
+ }), r != null && r.length && (this.bus.emit(d.Update, r), this.notify());
234
+ }
235
+ /**
236
+ * Возвращает значение состояния Collection.
237
+ */
238
+ get(e) {
239
+ if (typeof e == "string")
240
+ return this.indices.get("id").get(e);
241
+ {
242
+ const [r, s] = Object.entries(e)[0];
243
+ return this.indices.has(r) || this.createIndex(r), this.indices.get(r).get(s);
244
+ }
245
+ }
246
+ /**
247
+ * Создает runtime-сущность Collection.
248
+ */
249
+ createIndex(e) {
250
+ if (this.indices.has(e)) return;
251
+ const r = /* @__PURE__ */ new Map();
252
+ this.items.forEach((s) => {
253
+ r.set(s[e], s);
254
+ }), this.indices.set(e, r), this.bus.emit(d.IndexCreate, e);
255
+ }
256
+ /**
257
+ * Возвращает реактивный массив всех элементов.
258
+ */
259
+ get all() {
260
+ return this.items;
261
+ }
262
+ /**
263
+ * Возвращает массив корневых элементов (без parentId).
264
+ */
265
+ get allRoot() {
266
+ return Array.from(this.rootIds).map((e) => this.get(e));
267
+ }
268
+ // Доступ к подпискам
269
+ /**
270
+ * Обрабатывает входящее событие Collection.
271
+ */
272
+ on(e, r) {
273
+ this.bus.on(e, r);
274
+ }
275
+ /**
276
+ * Выполняет действие off в рамках ответственности Collection.
277
+ */
278
+ off(e, r) {
279
+ this.bus.off(e, r);
280
+ }
281
+ }
282
+ class dt {
283
+ /**
284
+ * Создает экземпляр IndexedCollection и подготавливает базовое состояние.
285
+ */
286
+ constructor(t = null) {
287
+ o(this, "list", []);
288
+ o(this, "filteredList", []);
289
+ o(this, "map", /* @__PURE__ */ new Map());
290
+ o(this, "indexById", /* @__PURE__ */ new Map());
291
+ o(this, "dirtySort", !1);
292
+ o(this, "dirtyFilter", !1);
293
+ o(this, "sortFn");
294
+ o(this, "filterFn");
295
+ o(this, "indexEnabled", !1);
296
+ o(this, "filterIndexEnabled", !1);
297
+ t && this.options(t);
298
+ }
299
+ /**
300
+ * Выполняет действие options в рамках ответственности IndexedCollection.
301
+ */
302
+ options(t) {
303
+ return Object.prototype.hasOwnProperty.call(t, "sortFn") && (this.sortFn = t.sortFn, this.dirtySort = !0), Object.prototype.hasOwnProperty.call(t, "filterFn") && (this.filterFn = t.filterFn, this.dirtyFilter = !0), t.indexEnabled !== void 0 && (this.indexEnabled = t.indexEnabled, this.dirtySort = !0), t.filterIndexEnabled !== void 0 && (this.filterIndexEnabled = t.filterIndexEnabled, this.dirtyFilter = !0), this;
304
+ }
305
+ /**
306
+ * Выполняет действие markDirty в рамках ответственности IndexedCollection.
307
+ */
308
+ markDirty(t) {
309
+ t.sort && (this.dirtySort = !0), t.filter && (this.dirtyFilter = !0);
310
+ }
311
+ /**
312
+ * Выполняет действие ensure в рамках ответственности IndexedCollection.
313
+ */
314
+ ensure() {
315
+ this.ensureSorted(), this.ensureFiltered();
316
+ }
317
+ // Сортировка list, если нужно
318
+ /**
319
+ * Выполняет действие ensureSorted в рамках ответственности IndexedCollection.
320
+ */
321
+ ensureSorted() {
322
+ if (this.dirtySort) {
323
+ this.sortFn && this.list.sort(this.sortFn), this.indexById.clear();
324
+ for (let t = 0; t < this.list.length; t++) {
325
+ const e = this.list[t];
326
+ this.indexById.set(e.id, t), this.indexEnabled && (e.index = t);
327
+ }
328
+ this.filterFn && (this.dirtyFilter = !0), this.dirtySort = !1;
329
+ }
330
+ }
331
+ // Фильтр, если нужно
332
+ /**
333
+ * Выполняет действие ensureFiltered в рамках ответственности IndexedCollection.
334
+ */
335
+ ensureFiltered() {
336
+ this.dirtyFilter && (this.rebuildFilteredFromScratch(), this.dirtyFilter = !1);
337
+ }
338
+ /**
339
+ * Выполняет действие add в рамках ответственности IndexedCollection.
340
+ */
341
+ add(t) {
342
+ const e = Array.isArray(t) ? t : [t];
343
+ for (const r of e) {
344
+ if (this.map.has(r.id)) continue;
345
+ const s = this.list.length;
346
+ this.list.push(r), this.map.set(r.id, r), this.indexById.set(r.id, s), this.indexEnabled && (r.index = s), this.filterIndexEnabled && (r.filteredIndex = -1), this.addToFilteredIfPasses(r);
347
+ }
348
+ this.sortFn && (this.dirtySort = !0);
349
+ }
350
+ /**
351
+ * Удаляет сущность из runtime-коллекции IndexedCollection.
352
+ */
353
+ remove(t) {
354
+ const e = Array.isArray(t) ? t : [t];
355
+ for (const r of e) {
356
+ const s = this.map.get(r);
357
+ s && (this.removeFromFilteredO1(s), this.removeFromListO1(r), this.map.delete(r), this.indexEnabled && (s.index = -1), this.filterIndexEnabled && (s.filteredIndex = -1));
358
+ }
359
+ this.sortFn && (this.dirtySort = !0);
360
+ }
361
+ /**
362
+ * Вызывать после изменения полей элемента
363
+ * mayAffectFilter если изменились поля фильтра
364
+ * mayAffectSort если изменились поля сортировки
365
+ */
366
+ touch(t, e = {}) {
367
+ const r = this.map.get(t);
368
+ r && (e.mayAffectFilter !== !1 && (this.refilterOneO1(r), !this.filterIndexEnabled && this.filterFn && (this.dirtyFilter = !0)), e.mayAffectSort !== !1 && this.sortFn && (this.dirtySort = !0));
369
+ }
370
+ /**
371
+ * Выполняет действие forEach в рамках ответственности IndexedCollection.
372
+ */
373
+ forEach(t) {
374
+ this.ensure();
375
+ const e = this.filterFn ? this.filteredList : this.list;
376
+ for (let r = 0; r < e.length; r++)
377
+ t(e[r], r);
378
+ }
379
+ /**
380
+ * Отсортированный и/или отфильтрованный список (в зависимости от включенных функций).
381
+ */
382
+ all() {
383
+ return this.filtered();
384
+ }
385
+ /**
386
+ * Отсортированный полный список (без фильтра), если есть sortFn.
387
+ */
388
+ unfiltered() {
389
+ return this.ensureSorted(), this.list;
390
+ }
391
+ /**
392
+ * Отсортированный и отфильтрованный список (если есть filterFn).
393
+ * Если filterFn нет — возвращается list.
394
+ */
395
+ filtered() {
396
+ return this.ensure(), this.filterFn ? this.filteredList : this.list;
397
+ }
398
+ /**
399
+ * Выполняет действие pos в рамках ответственности IndexedCollection.
400
+ */
401
+ pos(t) {
402
+ const e = this.all();
403
+ return t < 0 || t >= e.length ? null : e[t] ?? null;
404
+ }
405
+ /**
406
+ * Выполняет действие first в рамках ответственности IndexedCollection.
407
+ */
408
+ first() {
409
+ const t = this.all();
410
+ return t.length ? t[0] ?? null : null;
411
+ }
412
+ /**
413
+ * Выполняет действие last в рамках ответственности IndexedCollection.
414
+ */
415
+ last() {
416
+ const t = this.all();
417
+ return t.length ? t[t.length - 1] ?? null : null;
418
+ }
419
+ /**
420
+ * Выполняет действие has в рамках ответственности IndexedCollection.
421
+ */
422
+ has(t) {
423
+ return this.map.has(t);
424
+ }
425
+ /**
426
+ * Возвращает значение состояния IndexedCollection.
427
+ */
428
+ get(t) {
429
+ return this.map.get(t);
430
+ }
431
+ /**
432
+ * Выполняет действие size в рамках ответственности IndexedCollection.
433
+ */
434
+ size() {
435
+ return this.all().length;
436
+ }
437
+ /**
438
+ * Очищает накопленное состояние IndexedCollection.
439
+ */
440
+ clear() {
441
+ this.list = [], this.filteredList = [], this.map.clear(), this.indexById.clear(), this.dirtySort = !1, this.dirtyFilter = !1;
442
+ }
443
+ /**
444
+ * Выполняет внутренний шаг rebuildFilteredFromScratch для IndexedCollection.
445
+ */
446
+ rebuildFilteredFromScratch() {
447
+ if (!this.filterFn) {
448
+ if (this.filteredList = [], this.filterIndexEnabled)
449
+ for (const t of this.list) t.filteredIndex = -1;
450
+ return;
451
+ }
452
+ if (this.filteredList = [], this.filterIndexEnabled)
453
+ for (const t of this.list) t.filteredIndex = -1;
454
+ for (const t of this.list)
455
+ this.filterFn(t) && this.appendToFiltered(t);
456
+ }
457
+ /**
458
+ * Выполняет внутренний шаг addToFilteredIfPasses для IndexedCollection.
459
+ */
460
+ addToFilteredIfPasses(t) {
461
+ if (this.filterFn) {
462
+ if (!this.filterIndexEnabled) {
463
+ this.dirtyFilter = !0;
464
+ return;
465
+ }
466
+ (t.filteredIndex ?? -1) >= 0 || this.filterFn(t) && this.appendToFiltered(t);
467
+ }
468
+ }
469
+ /**
470
+ * Добавляет сущность в runtime-коллекцию IndexedCollection.
471
+ */
472
+ appendToFiltered(t) {
473
+ const e = this.filteredList.length;
474
+ this.filteredList.push(t), this.filterIndexEnabled && (t.filteredIndex = e);
475
+ }
476
+ /**
477
+ * Выполняет внутренний шаг refilterOneO1 для IndexedCollection.
478
+ */
479
+ refilterOneO1(t) {
480
+ if (!this.filterFn || !this.filterIndexEnabled) return !1;
481
+ const e = this.filterFn(t), s = (t.filteredIndex ?? -1) >= 0;
482
+ return e ? s ? !1 : (this.appendToFiltered(t), !0) : s ? (this.removeFromFilteredO1(t), !0) : !1;
483
+ }
484
+ /**
485
+ * Удаляет сущность из runtime-коллекции IndexedCollection.
486
+ */
487
+ removeFromFilteredO1(t) {
488
+ if (!this.filterIndexEnabled) return;
489
+ const e = t.filteredIndex ?? -1;
490
+ if (e < 0) return;
491
+ const r = this.filteredList.length - 1;
492
+ if (e !== r) {
493
+ const s = this.filteredList[r];
494
+ this.filteredList[e] = s, s.filteredIndex = e;
495
+ }
496
+ this.filteredList.pop(), t.filteredIndex = -1;
497
+ }
498
+ /**
499
+ * Удаляет сущность из runtime-коллекции IndexedCollection.
500
+ */
501
+ removeFromListO1(t) {
502
+ const e = this.indexById.get(t);
503
+ if (e === void 0) return;
504
+ const r = this.list.length - 1;
505
+ if (e !== r) {
506
+ const s = this.list[r];
507
+ this.list[e] = s, this.indexById.set(s.id, e), this.indexEnabled && (s.index = e);
508
+ }
509
+ this.list.pop(), this.indexById.delete(t);
510
+ }
511
+ }
512
+ class mt {
513
+ /**
514
+ * Создает экземпляр DelayedExecutor и подготавливает базовое состояние.
515
+ */
516
+ constructor(t, e = !1) {
517
+ o(this, "delayTimer", null);
518
+ o(this, "maxTimer", null);
519
+ o(this, "hasExecutedOnce", !1);
520
+ o(this, "lastArgs", null);
521
+ this.fn = t, this.firstExecuteImmediately = e;
522
+ }
523
+ /**
524
+ * Выполняет действие run в рамках ответственности DelayedExecutor.
525
+ */
526
+ run(t, e = 500, r = 2e3) {
527
+ if (this.lastArgs = t, this.firstExecuteImmediately && !this.hasExecutedOnce) {
528
+ this.hasExecutedOnce = !0, this.flush();
529
+ return;
530
+ }
531
+ this.delayTimer && clearTimeout(this.delayTimer), this.delayTimer = setTimeout(() => this.flush(), e), this.maxTimer || (this.maxTimer = setTimeout(() => this.flush(), r));
532
+ }
533
+ /**
534
+ * Принудительно завершает накопленные изменения DelayedExecutor.
535
+ */
536
+ flush() {
537
+ this.clear(), this.lastArgs && this.fn(...this.lastArgs);
538
+ }
539
+ /**
540
+ * Выполняет действие cancel в рамках ответственности DelayedExecutor.
541
+ */
542
+ cancel() {
543
+ this.clear();
544
+ }
545
+ /**
546
+ * Очищает накопленное состояние DelayedExecutor.
547
+ */
548
+ clear() {
549
+ this.delayTimer && clearTimeout(this.delayTimer), this.maxTimer && clearTimeout(this.maxTimer), this.delayTimer = null, this.maxTimer = null;
550
+ }
551
+ }
552
+ class pt {
553
+ /**
554
+ * Создает экземпляр NamedExecutor и подготавливает базовое состояние.
555
+ */
556
+ constructor(t) {
557
+ o(this, "delayTimers", /* @__PURE__ */ new Map());
558
+ o(this, "maxTimers", /* @__PURE__ */ new Map());
559
+ o(this, "callbacks", /* @__PURE__ */ new Map());
560
+ o(this, "firstCallTime", /* @__PURE__ */ new Map());
561
+ this.config = t;
562
+ }
563
+ /**
564
+ * Выполняет действие run в рамках ответственности NamedExecutor.
565
+ */
566
+ run(t, e) {
567
+ const r = Date.now();
568
+ if (!this.firstCallTime.has(t)) {
569
+ this.firstCallTime.set(t, r);
570
+ const n = setTimeout(() => {
571
+ this.flush(t);
572
+ }, this.config.maxMs);
573
+ this.maxTimers.set(t, n);
574
+ }
575
+ this.callbacks.set(t, e), clearTimeout(this.delayTimers.get(t));
576
+ const s = setTimeout(() => {
577
+ this.flush(t);
578
+ }, this.config.delayMs);
579
+ this.delayTimers.set(t, s);
580
+ }
581
+ /**
582
+ * Принудительно завершает накопленные изменения NamedExecutor.
583
+ */
584
+ flush(t) {
585
+ try {
586
+ const e = this.callbacks.get(t);
587
+ e && e();
588
+ } catch (e) {
589
+ console.error("[NamedExecutor] flush error:", e);
590
+ }
591
+ this.clear(t);
592
+ }
593
+ /**
594
+ * Выполняет действие cancel в рамках ответственности NamedExecutor.
595
+ */
596
+ cancel(t) {
597
+ this.clear(t);
598
+ }
599
+ /**
600
+ * Принудительно завершает накопленные изменения NamedExecutor.
601
+ */
602
+ flushAll() {
603
+ for (const t of this.callbacks.keys())
604
+ this.flush(t);
605
+ }
606
+ /**
607
+ * Очищает накопленное состояние NamedExecutor.
608
+ */
609
+ clear(t) {
610
+ clearTimeout(this.delayTimers.get(t)), clearTimeout(this.maxTimers.get(t)), this.delayTimers.delete(t), this.maxTimers.delete(t), this.callbacks.delete(t), this.firstCallTime.delete(t);
611
+ }
612
+ }
613
+ function yt(i, t) {
614
+ return y(i, t, {
615
+ exposeDefaultValues: !0,
616
+ excludeExtraneousValues: !0
617
+ });
618
+ }
619
+ function gt(i) {
620
+ return g(i, {
621
+ exposeUnsetFields: !1
622
+ });
623
+ }
624
+ function xt(i) {
625
+ return function(t, e) {
626
+ N(i)(t, e), Reflect.defineMetadata("genericExpose", i.name, t, e);
627
+ };
628
+ }
629
+ const J = Symbol("beforeSerialize");
630
+ function bt() {
631
+ return function(i, t, e) {
632
+ Reflect.defineMetadata(J, t, i);
633
+ };
634
+ }
635
+ function Tt(i, t, e) {
636
+ i.__afterDeserializeMethods__ || (i.__afterDeserializeMethods__ = []), i.__afterDeserializeMethods__.push(t);
637
+ }
638
+ function It(i) {
639
+ return function(t, e) {
640
+ f(({ value: r }) => r === null ? void 0 : r, { toPlainOnly: !0 })(t, e), P(i)(t, e);
641
+ };
642
+ }
643
+ function St() {
644
+ return f(({ value: i, type: t }) => t === h.PLAIN_TO_CLASS ? i == null ? void 0 : i.id : i);
645
+ }
646
+ function wt(i) {
647
+ return f(({ value: t, type: e }) => e === h.PLAIN_TO_CLASS ? t == null ? void 0 : t.map((r) => r == null ? void 0 : r[i]) : t);
648
+ }
649
+ function At() {
650
+ return f(({ value: i, type: t }) => t === h.CLASS_TO_PLAIN && (i == null ? void 0 : i.id) || i);
651
+ }
652
+ function Ot() {
653
+ return f(({ value: i, type: t }) => t === h.CLASS_TO_PLAIN ? i.map((e) => e.id) : i);
654
+ }
655
+ function Et() {
656
+ return f(({ value: i, type: t }) => t === "classToPlain" ? void 0 : i, { toPlainOnly: !0 });
657
+ }
658
+ function Ft(i) {
659
+ return i == null;
660
+ }
661
+ const F = Symbol("onDeserialized");
662
+ function Mt() {
663
+ return function(i, t) {
664
+ Reflect.defineMetadata(F, t, i);
665
+ };
666
+ }
667
+ function Z(i) {
668
+ const t = Reflect.getMetadata(
669
+ F,
670
+ i
671
+ );
672
+ return t ? i[t].bind(i) : null;
673
+ }
674
+ class Lt {
675
+ /**
676
+ * Выполняет действие toPlain в рамках ответственности Serialize.
677
+ */
678
+ static toPlain(t) {
679
+ return g(t, {
680
+ exposeDefaultValues: !0,
681
+ excludeExtraneousValues: !0
682
+ });
683
+ }
684
+ /**
685
+ * Выполняет действие fromJSON в рамках ответственности Serialize.
686
+ */
687
+ static fromJSON(t, e) {
688
+ const r = y(t, e, {
689
+ exposeDefaultValues: !0,
690
+ excludeExtraneousValues: !0
691
+ }), s = Z(r);
692
+ return s && s(), r;
693
+ }
694
+ }
695
+ function Ct() {
696
+ return function(i, t) {
697
+ f(
698
+ ({ value: e }) => {
699
+ if (typeof e == "string")
700
+ try {
701
+ return JSON.parse(e);
702
+ } catch {
703
+ return {};
704
+ }
705
+ return e;
706
+ },
707
+ { toClassOnly: !0 }
708
+ )(i, t), f(
709
+ ({ value: e }) => {
710
+ try {
711
+ return JSON.stringify(e);
712
+ } catch {
713
+ return "{}";
714
+ }
715
+ },
716
+ { toPlainOnly: !0 }
717
+ )(i, t);
718
+ };
719
+ }
720
+ function Dt() {
721
+ return function(i, t) {
722
+ f(
723
+ ({ value: e }) => typeof e == "string" ? e.trim() : String(e ?? ""),
724
+ { toClassOnly: !0 }
725
+ )(i, t), f(
726
+ ({ value: e }) => typeof e == "string" ? e : String(e ?? ""),
727
+ { toPlainOnly: !0 }
728
+ )(i, t);
729
+ };
730
+ }
731
+ function _t(i, t) {
732
+ return f(({ value: e, type: r }) => e ? r === h.PLAIN_TO_CLASS ? Array.isArray(e) ? t ? new Map(
733
+ e.map((s) => {
734
+ const n = y(i, s);
735
+ return [n[t], n];
736
+ })
737
+ ) : (console.warn(
738
+ "[TypeMap] Key field is required for array transformation!"
739
+ ), /* @__PURE__ */ new Map()) : typeof e == "object" ? new Map(
740
+ Object.entries(e).map(([s, n]) => {
741
+ const a = new i();
742
+ return Object.assign(a, n), [s, a];
743
+ })
744
+ ) : (console.warn("[TypeMap] Expected object or array, got:", e), /* @__PURE__ */ new Map()) : r === h.CLASS_TO_PLAIN ? e instanceof Map ? Array.from(e.values()).map((s) => g(s)) : (console.warn("[TypeMap] Expected Map, got:", e), t ? [] : {}) : (console.warn("[TypeMap] Unexpected transformation type:", r), e) : /* @__PURE__ */ new Map());
745
+ }
746
+ function kt(i) {
747
+ return f(({ value: t, type: e }) => {
748
+ if (!t || typeof t != "object") return {};
749
+ if (e === h.PLAIN_TO_CLASS) {
750
+ const r = {};
751
+ for (const s of Object.keys(t))
752
+ r[s] = y(i, t[s]);
753
+ return r;
754
+ }
755
+ if (e === h.CLASS_TO_PLAIN) {
756
+ const r = {};
757
+ for (const s of Object.keys(t))
758
+ r[s] = g(t[s]);
759
+ return r;
760
+ }
761
+ return t;
762
+ });
763
+ }
764
+ function zt(i, t, e = (n) => n, r = (n) => n, s = 300) {
765
+ let n = t;
766
+ const a = localStorage.getItem(i);
767
+ if (a)
768
+ try {
769
+ const u = JSON.parse(a);
770
+ n = e(u);
771
+ } catch {
772
+ console.error("Failed to parse from localStorage", i, a);
773
+ }
774
+ const c = p(n), l = R(() => {
775
+ try {
776
+ const u = JSON.stringify(r(c.value));
777
+ localStorage.setItem(i, u);
778
+ } catch {
779
+ console.error("Failed to save to localStorage", i, c.value);
780
+ }
781
+ }, s);
782
+ return w(
783
+ () => c.value,
784
+ () => {
785
+ l();
786
+ },
787
+ { deep: !0 }
788
+ ), c;
789
+ }
790
+ function Nt(i, t) {
791
+ return i < t ? -1 : i > t ? 1 : 0;
792
+ }
793
+ const q = process.env.NODE_ENV !== "production";
794
+ function Pt(i, t) {
795
+ if (!q) return t();
796
+ console.groupCollapsed(`⏳ ${i}`);
797
+ const e = performance.now(), r = t(), s = performance.now();
798
+ return console.log(`${i}: ${Math.round(s - e)} ms`), console.groupEnd(), r;
799
+ }
800
+ const Rt = () => j(), S = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
801
+ function jt(i) {
802
+ let t = "";
803
+ for (let e = 0; e < i; ++e)
804
+ t += S[Math.floor(S.length * Math.random())];
805
+ return t;
806
+ }
807
+ class Bt {
808
+ /**
809
+ * Создает экземпляр HotkeyManager и подготавливает базовое состояние.
810
+ */
811
+ constructor(t = {}) {
812
+ o(this, "bindings", /* @__PURE__ */ new Map());
813
+ o(this, "enabled", !0);
814
+ o(this, "target");
815
+ o(this, "ignoreInput");
816
+ o(this, "handleBound");
817
+ this.target = t.target || window, this.ignoreInput = t.ignoreInput ?? !1, this.handleBound = this.handle.bind(this), this.target.addEventListener("keydown", this.handleBound);
818
+ }
819
+ /**
820
+ * Выполняет внутренний шаг isIgnoredTarget для HotkeyManager.
821
+ */
822
+ isIgnoredTarget(t) {
823
+ return this.ignoreInput ? t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement || t instanceof HTMLElement && t.isContentEditable : !1;
824
+ }
825
+ /**
826
+ * Нормализует входные данные HotkeyManager.
827
+ */
828
+ normalizeKey(t) {
829
+ const e = [];
830
+ return t.ctrlKey && e.push("ctrl"), t.metaKey && e.push("meta"), t.altKey && e.push("alt"), t.shiftKey && e.push("shift"), e.push(t.key.toLowerCase()), e.join("+");
831
+ }
832
+ /**
833
+ * Обрабатывает runtime-событие HotkeyManager.
834
+ */
835
+ handle(t) {
836
+ if (!this.enabled || this.isIgnoredTarget(t.target)) return;
837
+ const e = this.normalizeKey(t), r = this.bindings.get(e);
838
+ if (r)
839
+ for (const s of r)
840
+ s(t);
841
+ }
842
+ /**
843
+ * Обрабатывает входящее событие HotkeyManager.
844
+ */
845
+ on(t, e) {
846
+ const r = Array.isArray(t) ? t : [t];
847
+ for (const s of r) {
848
+ const n = s.toLowerCase();
849
+ this.bindings.has(n) || this.bindings.set(n, /* @__PURE__ */ new Set()), this.bindings.get(n).add(e);
850
+ }
851
+ }
852
+ /**
853
+ * Выполняет действие off в рамках ответственности HotkeyManager.
854
+ */
855
+ off(t, e) {
856
+ var s;
857
+ const r = Array.isArray(t) ? t : [t];
858
+ for (const n of r) {
859
+ const a = n.toLowerCase();
860
+ (s = this.bindings.get(a)) == null || s.delete(e);
861
+ }
862
+ }
863
+ /**
864
+ * Очищает накопленное состояние HotkeyManager.
865
+ */
866
+ clear(t) {
867
+ t ? this.bindings.delete(t.toLowerCase()) : this.bindings.clear();
868
+ }
869
+ /**
870
+ * Выполняет действие enable в рамках ответственности HotkeyManager.
871
+ */
872
+ enable() {
873
+ this.enabled = !0;
874
+ }
875
+ /**
876
+ * Выполняет действие disable в рамках ответственности HotkeyManager.
877
+ */
878
+ disable() {
879
+ this.enabled = !1;
880
+ }
881
+ /**
882
+ * Освобождает runtime-ресурсы и подписки HotkeyManager.
883
+ */
884
+ destroy() {
885
+ this.clear(), this.target.removeEventListener("keydown", this.handleBound);
886
+ }
887
+ }
888
+ function Ut(i, t) {
889
+ return t != null && t.key ? i.some((e) => {
890
+ var l, u;
891
+ const r = e.ctrl === void 0 || t.ctrlKey === e.ctrl, s = e.alt === void 0 || t.altKey === e.alt, n = e.shift === void 0 || t.shiftKey === e.shift, a = e.meta === void 0 || t.metaKey === e.meta, c = t.key && e.key && ((l = t.key) == null ? void 0 : l.toLowerCase()) === ((u = e.key) == null ? void 0 : u.toLowerCase());
892
+ return r && s && n && a && c;
893
+ }) : !1;
894
+ }
895
+ class $t extends E {
896
+ constructor() {
897
+ super(...arguments);
898
+ /** Массив всех логов */
899
+ o(this, "logs", []);
900
+ /** Текущий контекст (иерархия) */
901
+ o(this, "currentContext", []);
902
+ o(this, "currentActions", []);
903
+ }
904
+ /**
905
+ * Устанавливает текущий контекст.
906
+ * Сбрасывает предыдущий контекст.
907
+ *
908
+ * @param context Массив строк или несколько строк с уровнями контекста.
909
+ * @returns _surface (для цепочки вызовов)
910
+ * @example
911
+ * logger.context('components', 'DriverCard')
912
+ */
913
+ context(...e) {
914
+ return this.currentContext = e, this;
915
+ }
916
+ /**
917
+ * Добавляет дополнительный уровень контекста.
918
+ *
919
+ * @param context Новый уровень (например, 'attributes').
920
+ * @returns _surface (для цепочки вызовов)
921
+ * @example
922
+ * logger.start('attributes')
923
+ */
924
+ start(e) {
925
+ return this.currentContext.push(e), this;
926
+ }
927
+ /**
928
+ * Убирает последний уровень контекста.
929
+ * При этом может сразу добавить финальный лог, связанный с этим контекстом.
930
+ *
931
+ * @param level Уровень лога (по умолчанию 'info')
932
+ * @param message Сообщение лога (опционально)
933
+ * @param actions Дополнительные действия (опционально)
934
+ * @example
935
+ * logger.end('info', 'Компиляция завершена', [...])
936
+ */
937
+ end(e, r, s) {
938
+ if (r) {
939
+ const n = s ?? this.currentActions.length ? this.currentActions : void 0;
940
+ this.log(e ?? "info", r, n);
941
+ }
942
+ return this.currentContext.pop(), this.currentActions = [], this;
943
+ }
944
+ /**
945
+ * Добавляет экшены в текущий контекст (для следующего `end`)
946
+ * @param icon Иконка (например, "ti ti-check text-xl")
947
+ * @param tooltip Подсказка (опционально)
948
+ * @param handler Функция при клике (опционально)
949
+ * @example
950
+ * logger.action('ti ti-check', 'Все успешно', () => console.logFrame('Успешно!'))
951
+ */
952
+ action(e, r, s) {
953
+ return this.currentActions.push({ icon: e, tooltip: r, handler: s }), this;
954
+ }
955
+ /**
956
+ * Внутренний метод для создания лога.
957
+ *
958
+ * @param level Уровень (_debug, info, warn, error)
959
+ * @param message Сообщение
960
+ * @param actions Дополнительные действия (иконки с обработчиками)
961
+ */
962
+ log(e, r, s) {
963
+ const n = {
964
+ timestamp: Date.now(),
965
+ level: e,
966
+ message: r,
967
+ context: [...this.currentContext],
968
+ actions: s
969
+ };
970
+ this.logs.push(n), this.notify();
971
+ }
972
+ /**
973
+ * Лог уровня _debug.
974
+ *
975
+ * @param message Сообщение
976
+ * @param actions Дополнительные действия (опционально)
977
+ * @example
978
+ * logger._debug('Загрузка данных')
979
+ */
980
+ debug(e, r) {
981
+ this.log("debug", e, r);
982
+ }
983
+ /**
984
+ * Лог уровня info.
985
+ *
986
+ * @param message Сообщение
987
+ * @param actions Дополнительные действия (опционально)
988
+ * @example
989
+ * logger.info('Загрузка завершена')
990
+ */
991
+ info(e, r) {
992
+ this.log("info", e, r);
993
+ }
994
+ /**
995
+ * Лог уровня warn.
996
+ *
997
+ * @param message Сообщение
998
+ * @param actions Дополнительные действия (опционально)
999
+ * @example
1000
+ * logger.warn('Низкий заряд батареи')
1001
+ */
1002
+ warn(e, r) {
1003
+ this.log("warn", e, r);
1004
+ }
1005
+ /**
1006
+ * Лог уровня error.
1007
+ *
1008
+ * @param message Сообщение
1009
+ * @param actions Дополнительные действия (опционально)
1010
+ * @example
1011
+ * logger.error('Ошибка загрузки', [
1012
+ * { icon: 'ti ti-refresh', tooltip: 'Повторить', handler: () => retry() },
1013
+ * ])
1014
+ */
1015
+ error(e, r) {
1016
+ this.log("error", e, r);
1017
+ }
1018
+ /**
1019
+ * Лог уровня success.
1020
+ *
1021
+ * @param message Сообщение
1022
+ * @param actions Дополнительные действия (опционально)
1023
+ * @example
1024
+ * logger.success('Успешно', [
1025
+ * { icon: 'ti ti-refresh', tooltip: 'Повторить', handler: () => retry() },
1026
+ * ])
1027
+ */
1028
+ success(e, r) {
1029
+ this.log("success", e, r);
1030
+ }
1031
+ /**
1032
+ * Получить все логи.
1033
+ *
1034
+ * @returns Массив логов
1035
+ */
1036
+ getLogs() {
1037
+ return this.logs;
1038
+ }
1039
+ /**
1040
+ * Очистить все логи (полностью).
1041
+ */
1042
+ clear() {
1043
+ this.logs = [], this.notify();
1044
+ }
1045
+ }
1046
+ function W(i) {
1047
+ try {
1048
+ return new new Proxy(i, { construct: () => ({}) })(), !0;
1049
+ } catch {
1050
+ return !1;
1051
+ }
1052
+ }
1053
+ function Kt(i, ...t) {
1054
+ if (W(i)) {
1055
+ const e = i;
1056
+ return new e(...t);
1057
+ } else
1058
+ return i(...t);
1059
+ }
1060
+ class Ht {
1061
+ /**
1062
+ * Создает экземпляр ScriptRunner и подготавливает базовое состояние.
1063
+ */
1064
+ constructor(t) {
1065
+ this.script = t;
1066
+ }
1067
+ /**
1068
+ * Запускает скрипт с некоторым контекстом и автоматически
1069
+ * добавляют экспортируемые имена которые парсятся из JSX
1070
+ */
1071
+ async runAsync(t, e = /* @__PURE__ */ new Set()) {
1072
+ const r = Object.keys(t), s = Object.fromEntries(
1073
+ r.map((u) => [u, this.wrapIfAsync(t[u])])
1074
+ ), n = Array.from(e), a = n.length > 0 ? `
1075
+
1076
+ expose({ ${n.join(", ")} });
1077
+ ` : "", c = `${this.script}${a}`;
1078
+ return await new Function(
1079
+ ...r,
1080
+ `"use strict"; return (async () => { ${c} })();`
1081
+ )(...Object.values(s));
1082
+ }
1083
+ /**
1084
+ * Синхронно вычисляет выражение в контексте.
1085
+ * Используется для интерполяций, :bind, v-if и т.п.
1086
+ */
1087
+ runSync(t, e = /* @__PURE__ */ new Set()) {
1088
+ const r = Object.keys(t), s = Object.values(t), n = Array.from(e), a = n.length > 0 ? `
1089
+
1090
+ expose({ ${n.join(", ")} });
1091
+ ` : "";
1092
+ try {
1093
+ new Function(
1094
+ ...r,
1095
+ `"use strict"; ${this.script}${a};`
1096
+ )(...s);
1097
+ } catch (c) {
1098
+ console.warn(
1099
+ "(ScriptRunner.runSync): Ошибка в выражении:",
1100
+ this.script,
1101
+ c
1102
+ );
1103
+ }
1104
+ }
1105
+ /**
1106
+ * Синхронно вычисляет выражение в контексте.
1107
+ * Используется для интерполяций, :bind, v-if и т.п.
1108
+ */
1109
+ evaluate(t) {
1110
+ const e = Object.keys(t), r = Object.values(t);
1111
+ console.log(t);
1112
+ try {
1113
+ return new Function(
1114
+ ...e,
1115
+ `"use strict"; return (${this.script});`
1116
+ )(...r);
1117
+ } catch (s) {
1118
+ console.warn(
1119
+ "(ScriptRunner.runSync): Ошибка в выражении:",
1120
+ this.script,
1121
+ s
1122
+ );
1123
+ return;
1124
+ }
1125
+ }
1126
+ /**
1127
+ * Выполняет внутренний шаг wrapIfAsync для ScriptRunner.
1128
+ */
1129
+ wrapIfAsync(t) {
1130
+ if (typeof t != "object" || t === null) return t;
1131
+ const e = {};
1132
+ for (const [r, s] of Object.entries(t))
1133
+ typeof s == "function" ? e[r] = (...n) => {
1134
+ const a = s(...n);
1135
+ return a instanceof Promise, a;
1136
+ } : e[r] = s;
1137
+ return e;
1138
+ }
1139
+ }
1140
+ const Y = /* @__PURE__ */ new WeakMap();
1141
+ function Vt(i) {
1142
+ let t;
1143
+ return () => (t || (t = i(), Y.set(i, t)), t);
1144
+ }
1145
+ function Jt(i) {
1146
+ return String(i).charAt(0).toUpperCase() + String(i).slice(1);
1147
+ }
1148
+ function Zt(i, t) {
1149
+ return T(i, t) || B(i, t);
1150
+ }
1151
+ function qt(i, t, e, r) {
1152
+ const s = m(i), n = m(t), a = m(e), c = m(r);
1153
+ return !A(n, a) && !T(s, c);
1154
+ }
1155
+ function Wt(i, t, e) {
1156
+ return !A(i, m(t)) && !T(i, U(e));
1157
+ }
1158
+ const Yt = (i) => i && new Date(i);
1159
+ function Gt(i, t = "HH:mm dd.MM.yyyy", e = {}) {
1160
+ return i && x(i, t, e);
1161
+ }
1162
+ function G(i, t = "HH:mm dd.MM.yyyy", e = {}, r = !0) {
1163
+ if (!i || !i || i === "")
1164
+ return "";
1165
+ if (typeof i == "string")
1166
+ i = new Date(i);
1167
+ else if (i instanceof Date) {
1168
+ if (isNaN(i))
1169
+ return "";
1170
+ } else
1171
+ i = new Date(i.toString());
1172
+ return r ? x(i, t, e) : x($(i, "utc"), t, e);
1173
+ }
1174
+ function Qt(i) {
1175
+ const t = { weekday: "short" }, e = new Intl.DateTimeFormat("ru-RU", t).format(i);
1176
+ return e.charAt(0).toUpperCase() + e.slice(1);
1177
+ }
1178
+ function Xt(i) {
1179
+ const t = new Date(i), e = t.getTime() + t.getTimezoneOffset() * 6e3, r = new Date(e + 180 * 6e3), s = String(r.getDate()).padStart(2, "0"), n = String(r.getMonth() + 1).padStart(2, "0"), a = r.getFullYear();
1180
+ return `${s}.${n}.${a}`;
1181
+ }
1182
+ function vt(i, t = !0) {
1183
+ return G(i, "HH:mm", {}, t);
1184
+ }
1185
+ function te(i) {
1186
+ const t = Array.from(i), e = Math.min(...t.map((s) => s.getTime())), r = Math.max(...t.map((s) => s.getTime()));
1187
+ return {
1188
+ minDate: new Date(e),
1189
+ maxDate: new Date(r)
1190
+ };
1191
+ }
1192
+ function ee(i) {
1193
+ const t = /* @__PURE__ */ new Date();
1194
+ try {
1195
+ const e = b(i, t), r = Intl.supportedValuesOf("timeZone");
1196
+ for (const s of r)
1197
+ if (b(s, t) === e)
1198
+ return s;
1199
+ } catch {
1200
+ return null;
1201
+ }
1202
+ return null;
1203
+ }
1204
+ function ie(i) {
1205
+ return b(i, /* @__PURE__ */ new Date());
1206
+ }
1207
+ const re = K("tooltip", () => {
1208
+ const i = _({}), t = p(null);
1209
+ function e(l) {
1210
+ i[l.id] = {
1211
+ ...l,
1212
+ visible: !1
1213
+ };
1214
+ }
1215
+ function r(l) {
1216
+ delete i[l];
1217
+ }
1218
+ function s(l) {
1219
+ i[l] && (t.value = l, i[l].active = !0);
1220
+ }
1221
+ function n(l) {
1222
+ i[l] && (i[l].active = !1, t.value === l && (t.value = null));
1223
+ }
1224
+ function a(l) {
1225
+ s(l);
1226
+ }
1227
+ function c() {
1228
+ t.value && n(t.value);
1229
+ }
1230
+ return {
1231
+ tooltips: i,
1232
+ activeId: t,
1233
+ registerTooltip: e,
1234
+ unregisterTooltip: r,
1235
+ showTooltip: s,
1236
+ hideTooltip: n,
1237
+ setActiveTooltipId: a,
1238
+ clearActiveTooltipId: c
1239
+ };
1240
+ }), se = "x-collection-tooltip-id";
1241
+ export {
1242
+ Tt as AfterDeserialize,
1243
+ ft as AppBus,
1244
+ bt as BeforeSerialize,
1245
+ ht as Collection,
1246
+ mt as DelayedExecutor,
1247
+ wt as DeserializeArrayField,
1248
+ St as DeserializeId,
1249
+ O as EventBus,
1250
+ d as Events,
1251
+ xt as GenericExpose,
1252
+ Bt as HotkeyManager,
1253
+ q as IS_DEBUG,
1254
+ Et as IgnoreToPlain,
1255
+ dt as IndexedCollection,
1256
+ It as IsOptionalTransformed,
1257
+ Ct as Json,
1258
+ pt as NamedExecutor,
1259
+ Dt as Script,
1260
+ Ht as ScriptRunner,
1261
+ Lt as Serialize,
1262
+ At as SerializeId,
1263
+ Ot as SerializeIds,
1264
+ $t as StructuredLogger,
1265
+ E as Subscribable,
1266
+ se as TooltipAttribute,
1267
+ _t as TypeMap,
1268
+ kt as TypeRecord,
1269
+ Jt as capitalize,
1270
+ Nt as compareNumber,
1271
+ Kt as createInstance,
1272
+ vt as extractTime,
1273
+ te as findMinMaxDates,
1274
+ Xt as formatDateToMSK,
1275
+ Gt as formatDatetime,
1276
+ G as formatDatetimeTZ,
1277
+ Rt as generateUUID,
1278
+ Qt as getDayOfWeek,
1279
+ Z as getOnDeserializedMethod,
1280
+ ie as getTimezoneOffsetMs,
1281
+ Vt as globalState,
1282
+ Zt as isAfterOrEqual,
1283
+ Ut as isAnyKeyComboActive,
1284
+ W as isConstructor,
1285
+ Wt as isDateInRange,
1286
+ qt as isDateRangeOverlap,
1287
+ Ft as isNullOrUndefined,
1288
+ Mt as onDeserialized,
1289
+ Yt as parseDate,
1290
+ ee as parseOffsetToTimezone,
1291
+ Pt as profile,
1292
+ jt as randomString,
1293
+ yt as toInstance,
1294
+ gt as toPlain,
1295
+ ct as useCookie,
1296
+ zt as useStorageDebounced,
1297
+ ut as useSubscribableRef,
1298
+ re as useTooltipStore
1299
+ };