@igo2/utils 21.0.0-next.1 → 21.0.0-next.2
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/fesm2022/igo2-utils.mjs +118 -86
- package/fesm2022/igo2-utils.mjs.map +1 -1
- package/package.json +1 -1
- package/types/igo2-utils.d.ts +29 -28
package/fesm2022/igo2-utils.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Observable, Subject } from 'rxjs';
|
|
1
|
+
import { of, Observable, Subject } from 'rxjs';
|
|
2
2
|
import { distinctUntilChanged } from 'rxjs/operators';
|
|
3
3
|
|
|
4
4
|
/* eslint-disable */
|
|
@@ -132,13 +132,13 @@ class Compression {
|
|
|
132
132
|
}
|
|
133
133
|
compressBlob(blob) {
|
|
134
134
|
if (!blob) {
|
|
135
|
-
return;
|
|
135
|
+
return of(null);
|
|
136
136
|
}
|
|
137
137
|
const observable = new Observable((observer) => {
|
|
138
138
|
const reader = new FileReader();
|
|
139
139
|
reader.readAsDataURL(blob);
|
|
140
140
|
reader.onload = () => {
|
|
141
|
-
const base64 = reader.result
|
|
141
|
+
const base64 = reader.result?.valueOf();
|
|
142
142
|
const text64 = base64.substr(base64.indexOf(',') + 1);
|
|
143
143
|
const compressed = this.compressStringBase64(text64);
|
|
144
144
|
const compressedData = {
|
|
@@ -171,6 +171,9 @@ class Compression {
|
|
|
171
171
|
let rem;
|
|
172
172
|
for (const c of s) {
|
|
173
173
|
const value = this.base64Index.get(c);
|
|
174
|
+
if (value === undefined) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
174
177
|
if (bits > 6) {
|
|
175
178
|
bits -= 6;
|
|
176
179
|
chr += value << bits;
|
|
@@ -189,9 +192,6 @@ class Compression {
|
|
|
189
192
|
return String.fromCharCode(9731) + out;
|
|
190
193
|
}
|
|
191
194
|
decompressStringBase64(c, length) {
|
|
192
|
-
if (!c) {
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
195
|
if (c.charCodeAt(0) !== 9731) {
|
|
196
196
|
return c;
|
|
197
197
|
}
|
|
@@ -279,38 +279,41 @@ class StringUtils {
|
|
|
279
279
|
}
|
|
280
280
|
static getChanges(s1, s2, m, p) {
|
|
281
281
|
const isThisLonger = s1.length >= s1.length ? true : false;
|
|
282
|
-
|
|
282
|
+
const [longer, shorter_init] = isThisLonger ? [s1, s2] : [s2, s1]; // assignment of longer and shorter by es6 destructuring
|
|
283
|
+
let shorter = shorter_init;
|
|
283
284
|
let bi = 0; // base index designating the index of first mismacthing character in both strings
|
|
284
285
|
while (shorter[bi] === longer[bi] && bi < shorter.length) {
|
|
285
286
|
++bi;
|
|
286
287
|
} // make bi the index of first mismatching character
|
|
287
|
-
|
|
288
|
+
const longerArr = longer.split('').slice(bi); // as the longer string will be rotated it is converted into array
|
|
288
289
|
shorter = shorter.slice(bi); // shorter and longer now starts from the first mismatching character
|
|
289
|
-
const len =
|
|
290
|
+
const len = longerArr.length; // length of the longer string
|
|
290
291
|
let cd = {
|
|
291
292
|
fis: shorter.length, // the index of matching string in the shorter string
|
|
292
293
|
fil: len, // the index of matching string in the longer string
|
|
293
294
|
sbs: '', // the matching substring itself
|
|
294
|
-
mtc: m + s2.slice(0, bi)
|
|
295
|
+
mtc: m + s2.slice(0, bi),
|
|
296
|
+
del: '',
|
|
297
|
+
ins: ''
|
|
295
298
|
}; // if exists mtc holds the matching string at the front
|
|
296
|
-
let sub = { sbs: '' }; // returned substring per 1 character rotation of the longer string
|
|
299
|
+
let sub = { fis: cd.fis, fil: cd.fil, sbs: '', mtc: cd.mtc }; // returned substring per 1 character rotation of the longer string
|
|
297
300
|
if (shorter !== '') {
|
|
298
301
|
for (let rc = 0; rc < len && sub.sbs.length < p; rc++) {
|
|
299
302
|
// rc -> rotate count, p -> precision factor
|
|
300
|
-
sub = StringUtils.getMatchingSubstring(shorter, StringUtils.rotateArray(
|
|
303
|
+
sub = StringUtils.getMatchingSubstring(shorter, StringUtils.rotateArray(longerArr, rc), cd.mtc); // rotate longer string 1 char and get substring
|
|
301
304
|
sub.fil =
|
|
302
305
|
rc < len - sub.fis
|
|
303
306
|
? sub.fis + rc // mismatch is longer than the mismatch in short
|
|
304
307
|
: sub.fis - len + rc; // mismatch is shorter than the mismatch in short
|
|
305
308
|
if (sub.sbs.length > cd.sbs.length) {
|
|
306
|
-
cd = sub; // only keep the one with the longest substring.
|
|
309
|
+
cd = { ...cd, ...sub }; // only keep the one with the longest substring.
|
|
307
310
|
}
|
|
308
311
|
}
|
|
309
312
|
}
|
|
310
313
|
// insert the mismatching delete subsrt and insert substr to the cd object and attach the previous substring
|
|
311
314
|
[cd.del, cd.ins] = isThisLonger
|
|
312
|
-
? [
|
|
313
|
-
: [shorter.slice(0, cd.fis),
|
|
315
|
+
? [longerArr.slice(0, cd.fil).join(''), shorter.slice(0, cd.fis)]
|
|
316
|
+
: [shorter.slice(0, cd.fis), longerArr.slice(0, cd.fil).join('')];
|
|
314
317
|
return cd.del.indexOf(' ') === -1 ||
|
|
315
318
|
cd.ins.indexOf(' ') === -1 ||
|
|
316
319
|
cd.del === '' ||
|
|
@@ -342,6 +345,7 @@ class StringUtils {
|
|
|
342
345
|
}
|
|
343
346
|
}
|
|
344
347
|
|
|
348
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
345
349
|
class ChangeUtils {
|
|
346
350
|
static findChanges(obj1, obj2, ignoreKeys = []) {
|
|
347
351
|
const items = {
|
|
@@ -445,13 +449,14 @@ function resolveDate(input) {
|
|
|
445
449
|
if (isTimeFrame(input)) {
|
|
446
450
|
return new Date();
|
|
447
451
|
}
|
|
448
|
-
return input instanceof Date ? input :
|
|
452
|
+
return input instanceof Date ? input : null;
|
|
449
453
|
}
|
|
450
454
|
|
|
451
455
|
class DomUtils {
|
|
452
456
|
static create(doc, tagName, options) {
|
|
453
457
|
const el = doc.createElement(tagName);
|
|
454
458
|
for (const key in options) {
|
|
459
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
455
460
|
el[key] = options[key];
|
|
456
461
|
}
|
|
457
462
|
return el;
|
|
@@ -470,10 +475,11 @@ async function createExcelWorkBook(workSheet, workSheetName) {
|
|
|
470
475
|
}
|
|
471
476
|
async function addExcelSheetToWorkBook(title, rows, workBook, opts) {
|
|
472
477
|
const { utils } = await import('xlsx');
|
|
473
|
-
const
|
|
478
|
+
const values = typeof rows === 'string' ? JSON.parse(rows) : rows;
|
|
479
|
+
const worksheet = utils.json_to_sheet(values, opts?.json2SheetOpts);
|
|
474
480
|
/* calculate column width */
|
|
475
481
|
if (rows?.length) {
|
|
476
|
-
worksheet['!cols'] = getColumnsInfo(
|
|
482
|
+
worksheet['!cols'] = getColumnsInfo(values);
|
|
477
483
|
}
|
|
478
484
|
const SHEET_NAME_MAX_LENGTH = 31;
|
|
479
485
|
let sheetName = title.length >= SHEET_NAME_MAX_LENGTH
|
|
@@ -549,24 +555,32 @@ function isValidJSON(jsonString) {
|
|
|
549
555
|
/* eslint-disable no-prototype-builtins */
|
|
550
556
|
class ObjectUtils {
|
|
551
557
|
static resolve(obj, key) {
|
|
552
|
-
const keysArray = key
|
|
558
|
+
const keysArray = String(key)
|
|
559
|
+
.replace(/\[/g, '.')
|
|
560
|
+
.replace(/\]/g, '')
|
|
561
|
+
.split('.');
|
|
553
562
|
let current = obj;
|
|
563
|
+
let value = undefined;
|
|
554
564
|
while (keysArray.length) {
|
|
555
|
-
if (typeof current !== 'object') {
|
|
565
|
+
if (typeof current !== 'object' || current === null) {
|
|
556
566
|
return undefined;
|
|
557
567
|
}
|
|
558
|
-
|
|
568
|
+
const k = keysArray.shift();
|
|
569
|
+
value = current = current[k];
|
|
559
570
|
}
|
|
560
|
-
return
|
|
571
|
+
return value;
|
|
561
572
|
}
|
|
562
573
|
static isObject(item) {
|
|
563
|
-
return (item &&
|
|
574
|
+
return (!!item &&
|
|
564
575
|
typeof item === 'object' &&
|
|
565
576
|
!Array.isArray(item) &&
|
|
566
577
|
item !== null &&
|
|
567
578
|
!(item instanceof Date));
|
|
568
579
|
}
|
|
569
|
-
|
|
580
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
581
|
+
static mergeDeep(target,
|
|
582
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
583
|
+
source, ignoreUndefined = false) {
|
|
570
584
|
const output = Object.assign({}, target);
|
|
571
585
|
if (ObjectUtils.isObject(target) && ObjectUtils.isObject(source)) {
|
|
572
586
|
Object.keys(source)
|
|
@@ -587,21 +601,29 @@ class ObjectUtils {
|
|
|
587
601
|
}
|
|
588
602
|
return output;
|
|
589
603
|
}
|
|
604
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
590
605
|
static copyDeep(src) {
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
606
|
+
if (Array.isArray(src)) {
|
|
607
|
+
return src.map((item) => typeof item === 'object' && item !== null
|
|
608
|
+
? this.copyDeep(item)
|
|
609
|
+
: item);
|
|
610
|
+
}
|
|
611
|
+
else if (this.isObject(src)) {
|
|
612
|
+
const target = {};
|
|
613
|
+
for (const prop in src) {
|
|
614
|
+
if (src.hasOwnProperty(prop)) {
|
|
615
|
+
const value = src[prop];
|
|
616
|
+
target[prop] =
|
|
617
|
+
value && typeof value === 'object'
|
|
618
|
+
? this.copyDeep(value)
|
|
619
|
+
: value;
|
|
600
620
|
}
|
|
601
621
|
}
|
|
622
|
+
return target;
|
|
602
623
|
}
|
|
603
|
-
return
|
|
624
|
+
return src;
|
|
604
625
|
}
|
|
626
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
605
627
|
static removeDuplicateCaseInsensitive(obj) {
|
|
606
628
|
const summaryCapitalizeObject = {};
|
|
607
629
|
const capitalizeObject = {};
|
|
@@ -619,7 +641,7 @@ class ObjectUtils {
|
|
|
619
641
|
[property]: obj[property]
|
|
620
642
|
});
|
|
621
643
|
}
|
|
622
|
-
// counting the number of uppercase
|
|
644
|
+
// counting the number of uppercase letters
|
|
623
645
|
upperCaseCount.push({
|
|
624
646
|
key: property,
|
|
625
647
|
count: property.replace(/[^A-Z]/g, '').length
|
|
@@ -628,24 +650,22 @@ class ObjectUtils {
|
|
|
628
650
|
}
|
|
629
651
|
for (const capitalizedProperty in summaryCapitalizeObject) {
|
|
630
652
|
if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
obj[paramClosestToLowercase.key];
|
|
648
|
-
}
|
|
653
|
+
const capitalizedPropertyObject = summaryCapitalizeObject[capitalizedProperty];
|
|
654
|
+
if (capitalizedPropertyObject.length === 1) {
|
|
655
|
+
// for single params (no duplicates)
|
|
656
|
+
const singlePossibility = capitalizedPropertyObject[0];
|
|
657
|
+
capitalizeObject[capitalizedProperty] =
|
|
658
|
+
singlePossibility[Object.keys(singlePossibility)[0]];
|
|
659
|
+
}
|
|
660
|
+
else if (capitalizedPropertyObject.length > 1) {
|
|
661
|
+
// defining the closest to lowercase property
|
|
662
|
+
const paramClosestToLowercase = upperCaseCount
|
|
663
|
+
.filter((f) => f.key.toLowerCase() === capitalizedProperty.toLowerCase())
|
|
664
|
+
.reduce((prev, current) => {
|
|
665
|
+
return prev.count < current.count ? prev : current;
|
|
666
|
+
});
|
|
667
|
+
capitalizeObject[paramClosestToLowercase.key.toUpperCase()] =
|
|
668
|
+
obj[paramClosestToLowercase.key];
|
|
649
669
|
}
|
|
650
670
|
}
|
|
651
671
|
}
|
|
@@ -660,29 +680,40 @@ class ObjectUtils {
|
|
|
660
680
|
}
|
|
661
681
|
}
|
|
662
682
|
}
|
|
683
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
663
684
|
static removeUndefined(obj) {
|
|
664
|
-
|
|
685
|
+
if (Array.isArray(obj)) {
|
|
686
|
+
return obj
|
|
687
|
+
.filter((item) => item !== undefined)
|
|
688
|
+
.map((item) => typeof item === 'object'
|
|
689
|
+
? ObjectUtils.removeUndefined(item)
|
|
690
|
+
: item);
|
|
691
|
+
}
|
|
665
692
|
if (ObjectUtils.isObject(obj)) {
|
|
693
|
+
const output = {};
|
|
666
694
|
Object.keys(obj)
|
|
667
695
|
.filter((key) => obj[key] !== undefined)
|
|
668
696
|
.forEach((key) => {
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
output[key] = obj[key];
|
|
674
|
-
}
|
|
697
|
+
output[key] =
|
|
698
|
+
typeof obj[key] === 'object'
|
|
699
|
+
? ObjectUtils.removeUndefined(obj[key])
|
|
700
|
+
: obj[key];
|
|
675
701
|
});
|
|
676
702
|
return output;
|
|
677
703
|
}
|
|
678
|
-
if (Array.isArray(obj)) {
|
|
679
|
-
return obj.map((o) => ObjectUtils.removeUndefined(o));
|
|
680
|
-
}
|
|
681
704
|
return obj;
|
|
682
705
|
}
|
|
706
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
683
707
|
static removeNull(obj) {
|
|
684
|
-
|
|
708
|
+
if (Array.isArray(obj)) {
|
|
709
|
+
return obj
|
|
710
|
+
.filter((item) => item !== null)
|
|
711
|
+
.map((item) => typeof item === 'object'
|
|
712
|
+
? ObjectUtils.removeNull(item)
|
|
713
|
+
: item);
|
|
714
|
+
}
|
|
685
715
|
if (ObjectUtils.isObject(obj)) {
|
|
716
|
+
const output = {};
|
|
686
717
|
Object.keys(obj)
|
|
687
718
|
.filter((key) => obj[key] !== null)
|
|
688
719
|
.forEach((key) => {
|
|
@@ -695,14 +726,11 @@ class ObjectUtils {
|
|
|
695
726
|
});
|
|
696
727
|
return output;
|
|
697
728
|
}
|
|
698
|
-
if (Array.isArray(obj)) {
|
|
699
|
-
return obj.map((o) => ObjectUtils.removeNull(o));
|
|
700
|
-
}
|
|
701
729
|
return obj;
|
|
702
730
|
}
|
|
703
731
|
static naturalCompare(a, b, direction = 'asc', nullsFirst) {
|
|
704
732
|
if (direction === 'desc') {
|
|
705
|
-
b = [
|
|
733
|
+
[a, b] = [b, a];
|
|
706
734
|
}
|
|
707
735
|
// nullsFirst = undefined : end if direction = 'asc', first if direction = 'desc'
|
|
708
736
|
// nullsFirst = true : always first
|
|
@@ -733,13 +761,15 @@ class ObjectUtils {
|
|
|
733
761
|
}
|
|
734
762
|
const ax = [];
|
|
735
763
|
const bx = [];
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
ax.push([$1
|
|
764
|
+
const aStr = '' + a;
|
|
765
|
+
const bStr = '' + b;
|
|
766
|
+
aStr.replace(/(\d+)|(\D+)/g, (_, $1, $2) => {
|
|
767
|
+
ax.push([$1 ? Number($1) : Infinity, $2 ?? '']);
|
|
768
|
+
return '';
|
|
740
769
|
});
|
|
741
|
-
|
|
742
|
-
bx.push([$1
|
|
770
|
+
bStr.replace(/(\d+)|(\D+)/g, (_, $1, $2) => {
|
|
771
|
+
bx.push([$1 ? Number($1) : Infinity, $2 ?? '']);
|
|
772
|
+
return '';
|
|
743
773
|
});
|
|
744
774
|
while (ax.length && bx.length) {
|
|
745
775
|
const an = ax.shift();
|
|
@@ -757,7 +787,7 @@ class ObjectUtils {
|
|
|
757
787
|
* if all of their properties (first-level only) share the same value.
|
|
758
788
|
* @param obj1 First object
|
|
759
789
|
* @param obj2 Second object
|
|
760
|
-
* @returns Whether two objects
|
|
790
|
+
* @returns Whether two objects are equivalent
|
|
761
791
|
*/
|
|
762
792
|
static objectsAreEquivalent(obj1, obj2) {
|
|
763
793
|
if (obj1 === obj2) {
|
|
@@ -782,13 +812,12 @@ class ObjectUtils {
|
|
|
782
812
|
* @returns A new object
|
|
783
813
|
*/
|
|
784
814
|
static removeKeys(obj, keys) {
|
|
785
|
-
|
|
815
|
+
return Object.keys(obj)
|
|
786
816
|
.filter((key) => keys.indexOf(key) < 0)
|
|
787
817
|
.reduce((_obj, key) => {
|
|
788
818
|
_obj[key] = obj[key];
|
|
789
819
|
return _obj;
|
|
790
820
|
}, {});
|
|
791
|
-
return newObj;
|
|
792
821
|
}
|
|
793
822
|
static isEmpty(obj) {
|
|
794
823
|
return Object.keys(obj).length === 0;
|
|
@@ -880,8 +909,11 @@ class Tree {
|
|
|
880
909
|
const clonedBeforeTo = [...beforeTo];
|
|
881
910
|
const lastIndex = clonedBeforeTo.pop();
|
|
882
911
|
const recipient = this.getAncestorAtPosition(clonedBeforeTo);
|
|
912
|
+
if (!recipient) {
|
|
913
|
+
return;
|
|
914
|
+
}
|
|
883
915
|
const beforeId = lastIndex === -1 || lastIndex >= recipient.length
|
|
884
|
-
?
|
|
916
|
+
? undefined
|
|
885
917
|
: this.getId(recipient[lastIndex]);
|
|
886
918
|
const nodesToMove = nodes.filter((node) => beforeId !== this.getId(node));
|
|
887
919
|
return this.move(beforeId, recipient, ...nodesToMove);
|
|
@@ -903,11 +935,11 @@ class Tree {
|
|
|
903
935
|
return nodes.reduce((acc, node) => {
|
|
904
936
|
const ancestor = this.getNodeAncestor(node);
|
|
905
937
|
if (!ancestor) {
|
|
906
|
-
return;
|
|
938
|
+
return acc;
|
|
907
939
|
}
|
|
908
940
|
const index = this.getIndex(this.getId(node), ancestor);
|
|
909
941
|
if (index === -1) {
|
|
910
|
-
return;
|
|
942
|
+
return acc;
|
|
911
943
|
}
|
|
912
944
|
ancestor.splice(index, 1);
|
|
913
945
|
return acc.concat(node);
|
|
@@ -947,6 +979,9 @@ class Tree {
|
|
|
947
979
|
return this._data;
|
|
948
980
|
}
|
|
949
981
|
const node = this.getNodeByPosition(position);
|
|
982
|
+
if (!node) {
|
|
983
|
+
return;
|
|
984
|
+
}
|
|
950
985
|
return this.getChildren(node);
|
|
951
986
|
}
|
|
952
987
|
/** Recursive */
|
|
@@ -988,8 +1023,8 @@ class Tree {
|
|
|
988
1023
|
const ancestor = previousValue
|
|
989
1024
|
? this.getChildren(previousValue)
|
|
990
1025
|
: this._data;
|
|
991
|
-
return this._getByIndex(index, ancestor);
|
|
992
|
-
},
|
|
1026
|
+
return this._getByIndex(index, ancestor ?? undefined);
|
|
1027
|
+
}, undefined);
|
|
993
1028
|
}
|
|
994
1029
|
else {
|
|
995
1030
|
return this._getByIndex(indexes[0]);
|
|
@@ -1075,10 +1110,7 @@ class Watcher {
|
|
|
1075
1110
|
}
|
|
1076
1111
|
unsubscribe() {
|
|
1077
1112
|
this.unwatch();
|
|
1078
|
-
|
|
1079
|
-
this.status$$.unsubscribe();
|
|
1080
|
-
this.status$$ = undefined;
|
|
1081
|
-
}
|
|
1113
|
+
this.status$$?.unsubscribe();
|
|
1082
1114
|
this.status = SubjectStatus.Waiting;
|
|
1083
1115
|
}
|
|
1084
1116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"igo2-utils.mjs","sources":["../../../packages/utils/src/lib/base64.ts","../../../packages/utils/src/lib/cache.utils.ts","../../../packages/utils/src/lib/compression/compression.utils.ts","../../../packages/utils/src/lib/change.interface.ts","../../../packages/utils/src/lib/string-utils.ts","../../../packages/utils/src/lib/change.ts","../../../packages/utils/src/lib/date.utils.ts","../../../packages/utils/src/lib/dom.utils.ts","../../../packages/utils/src/lib/files/excel.ts","../../../packages/utils/src/lib/files/file.ts","../../../packages/utils/src/lib/object-utils.ts","../../../packages/utils/src/lib/number-utils.ts","../../../packages/utils/src/lib/strenum.ts","../../../packages/utils/src/lib/theme.utils.ts","../../../packages/utils/src/lib/tree/tree.ts","../../../packages/utils/src/lib/uuid.ts","../../../packages/utils/src/lib/watcher.ts","../../../packages/utils/src/public_api.ts","../../../packages/utils/src/igo2-utils.ts"],"sourcesContent":["/* eslint-disable */\n\nconst ALPHA =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nexport class Base64 {\n private static PADCHAR: string = '=';\n private static ALPHA: string = ALPHA;\n\n private static getByte(s: string, i: number): number {\n const x = s.charCodeAt(i);\n return x;\n }\n\n private static getByte64(s: string, i: number): number {\n const idx = this.ALPHA.indexOf(s.charAt(i));\n return idx;\n }\n\n public static decode(s: string): string {\n let pads = 0,\n i,\n b10,\n imax = s.length,\n x = [];\n\n s = String(s);\n\n if (imax === 0) {\n return s;\n }\n\n if (s.charAt(imax - 1) === this.PADCHAR) {\n pads = 1;\n if (s.charAt(imax - 2) === this.PADCHAR) {\n pads = 2;\n }\n imax -= 4;\n }\n\n for (i = 0; i < imax; i += 4) {\n b10 =\n (this.getByte64(s, i) << 18) |\n (this.getByte64(s, i + 1) << 12) |\n (this.getByte64(s, i + 2) << 6) |\n this.getByte64(s, i + 3);\n x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 255, b10 & 255));\n }\n\n switch (pads) {\n case 1:\n b10 =\n (this.getByte64(s, i) << 18) |\n (this.getByte64(s, i + 1) << 12) |\n (this.getByte64(s, i + 2) << 6);\n x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 255));\n break;\n case 2:\n b10 = (this.getByte64(s, i) << 18) | (this.getByte64(s, i + 1) << 12);\n x.push(String.fromCharCode(b10 >> 16));\n break;\n }\n\n return x.join('');\n }\n\n public static encode(s: string): string {\n s = String(s);\n\n let i,\n b10,\n x = [],\n imax = s.length - (s.length % 3);\n\n if (s.length === 0) {\n return s;\n }\n\n for (i = 0; i < imax; i += 3) {\n b10 =\n (this.getByte(s, i) << 16) |\n (this.getByte(s, i + 1) << 8) |\n this.getByte(s, i + 2);\n x.push(this.ALPHA.charAt(b10 >> 18));\n x.push(this.ALPHA.charAt((b10 >> 12) & 63));\n x.push(this.ALPHA.charAt((b10 >> 6) & 63));\n x.push(this.ALPHA.charAt(b10 & 63));\n }\n\n switch (s.length - imax) {\n case 1:\n b10 = this.getByte(s, i) << 16;\n x.push(\n this.ALPHA.charAt(b10 >> 18) +\n this.ALPHA.charAt((b10 >> 12) & 63) +\n this.PADCHAR +\n this.PADCHAR\n );\n break;\n case 2:\n b10 = (this.getByte(s, i) << 16) | (this.getByte(s, i + 1) << 8);\n x.push(\n this.ALPHA.charAt(b10 >> 18) +\n this.ALPHA.charAt((b10 >> 12) & 63) +\n this.ALPHA.charAt((b10 >> 6) & 63) +\n this.PADCHAR\n );\n break;\n }\n\n return x.join('');\n }\n}\n","export function customCacheHasher(parameters: unknown[]): unknown[] {\n return parameters.map((param) => {\n if (\n typeof param === 'object' &&\n param != null &&\n typeof param.toString === 'function'\n ) {\n return param.toString();\n }\n return param !== undefined ? JSON.parse(JSON.stringify(param)) : param;\n });\n}\n","import { Observable, Observer } from 'rxjs';\n\nimport { CompressedData } from './compressedData.interface';\n\nfunction getNumber(v: number, endposition: number, length: number) {\n const mask = (1 << length) - 1;\n return (v >> endposition) & mask;\n}\n\nexport class Compression {\n private base64Index = new Map<string, number>();\n private indexBase64 = new Map<number, string>();\n\n constructor() {\n this.generateBase64Index();\n }\n\n private generateBase64Index() {\n // https://fr.wikipedia.org/wiki/Base64\n // A-Z => [0, 25]\n for (let i = 0; i < 26; i++) {\n this.base64Index.set(String.fromCharCode('A'.charCodeAt(0) + i), i);\n this.indexBase64.set(i, String.fromCharCode('A'.charCodeAt(0) + i));\n }\n // a-z => [26, 51]\n for (let i = 0; i < 26; i++) {\n this.base64Index.set(String.fromCharCode('a'.charCodeAt(0) + i), i + 26);\n this.indexBase64.set(i + 26, String.fromCharCode('a'.charCodeAt(0) + i));\n }\n // 0-9 => [52, 61]\n for (let i = 0; i < 10; i++) {\n this.base64Index.set(String.fromCharCode('0'.charCodeAt(0) + i), i + 52);\n this.indexBase64.set(i + 52, String.fromCharCode('0'.charCodeAt(0) + i));\n }\n // + / => [62, 63]\n this.base64Index.set('+', 62);\n this.base64Index.set('/', 63);\n this.indexBase64.set(62, '+');\n this.indexBase64.set(63, '/');\n }\n\n compressBlob(blob: Blob): Observable<CompressedData> {\n if (!blob) {\n return;\n }\n\n const observable = new Observable((observer: Observer<CompressedData>) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onload = () => {\n const base64 = reader.result.valueOf() as string;\n const text64 = base64.substr(base64.indexOf(',') + 1);\n const compressed = this.compressStringBase64(text64);\n const compressedData: CompressedData = {\n length: text64.length,\n type: blob.type,\n object: compressed\n };\n observer.next(compressedData);\n };\n });\n return observable;\n }\n\n decompressBlob(compressedData: CompressedData): Blob {\n const object = compressedData.object;\n const length = compressedData.length;\n const decompressed: string = this.decompressStringBase64(object, length);\n const byteCharacters = atob(decompressed);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: compressedData.type });\n return blob;\n }\n\n private compressStringBase64(s: string): string {\n let out = '';\n let bits = 16;\n let chr = 0;\n let rem: number;\n for (const c of s) {\n const value = this.base64Index.get(c);\n if (bits > 6) {\n bits -= 6;\n chr += value << bits;\n } else {\n rem = 6 - bits;\n chr += value >> rem;\n out += String.fromCharCode(chr);\n chr = value << (16 - rem);\n bits = 16 - rem;\n }\n }\n if (s.length % 8 !== 0) {\n out += String.fromCharCode(chr);\n }\n return String.fromCharCode(9731) + out;\n }\n\n private decompressStringBase64(c: string, length: number): string {\n if (!c) {\n return;\n }\n\n if (c.charCodeAt(0) !== 9731) {\n return c;\n }\n\n let chr: number;\n let rem: number;\n let bits = 16;\n let out = '';\n let j = 1;\n let value = c.charCodeAt(j);\n for (let i = 0; i < length; i++) {\n if (bits > 6) {\n bits -= 6;\n chr = getNumber(value, bits, 6);\n out += this.indexBase64.get(chr);\n } else {\n rem = 6 - bits;\n chr = getNumber(value, 0, bits) << rem;\n value = c.charCodeAt(++j);\n chr += getNumber(value, 16 - rem, rem);\n out += this.indexBase64.get(chr);\n bits = 16 - rem;\n }\n }\n return out;\n }\n}\n","export enum ChangeType {\n ADDED = 'added',\n DELETED = 'deleted',\n MODIFIED = 'modified'\n}\n\nexport interface Change {\n type: ChangeType;\n keysChanged?: {\n key: string;\n newValue: any;\n oldValue: any;\n }[];\n}\n\nexport interface GroupingChanges {\n added: ChangeItem[];\n deleted: ChangeItem[];\n modified: ChangeItem[];\n}\n\nexport interface ChangeItem {\n change: Change;\n value: any;\n oldValue?: any;\n newValue?: any;\n}\n","export class StringUtils {\n static diff(s1: string, s2: string, p = 4): string {\n if (!s1 && !s2) {\n return '';\n }\n if (!s1) {\n return '<span class=\"inserted\">' + s2 + '</span>';\n }\n if (!s2) {\n return '<span class=\"deleted\">' + s1 + '</span>';\n }\n s1 = s1.toString();\n s2 = s2.toString();\n const changeData = StringUtils.getChanges(s1, s2, '', p);\n const nextS = s2.slice(\n changeData.mtc.length + changeData.ins.length + changeData.sbs.length\n ); // remaining part of \"s\"\n const nextThis = s1.slice(\n changeData.mtc.length + changeData.del.length + changeData.sbs.length\n ); // remaining part of \"this\"\n let result: string; // the glorious result\n if (changeData.del.length > 0) {\n changeData.del = '<span class=\"deleted\">' + changeData.del + '</span>';\n }\n if (changeData.ins.length > 0) {\n changeData.ins = '<span class=\"inserted\">' + changeData.ins + '</span>';\n }\n result = changeData.mtc + changeData.del + changeData.ins + changeData.sbs;\n result +=\n nextThis !== '' || nextS !== ''\n ? StringUtils.diff(nextThis, nextS, p)\n : '';\n return result;\n }\n\n private static getMatchingSubstring(s, l, m) {\n // returns the first matching substring in-between the two strings\n let i = 0;\n let match = false;\n const slen = s.length;\n const o = { fis: slen, mtc: m, sbs: '' }; // temporary object used to construct the cd (change data) object\n\n while (i < slen) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n l[i] === s[i]\n ? match\n ? (o.sbs += s[i]) // o.sbs holds the matching substring itsef\n : ((match = true), (o.fis = i), (o.sbs = s[i]))\n : match\n ? (i = slen) // stop after the first found substring\n : // eslint-disable-next-line no-self-assign\n (i = i);\n ++i;\n }\n return o;\n }\n\n private static getChanges(s1, s2, m, p) {\n const isThisLonger = s1.length >= s1.length ? true : false;\n let [longer, shorter] = isThisLonger ? [s1, s2] : [s2, s1]; // assignment of longer and shorter by es6 destructuring\n let bi = 0; // base index designating the index of first mismacthing character in both strings\n\n while (shorter[bi] === longer[bi] && bi < shorter.length) {\n ++bi;\n } // make bi the index of first mismatching character\n longer = longer.split('').slice(bi); // as the longer string will be rotated it is converted into array\n shorter = shorter.slice(bi); // shorter and longer now starts from the first mismatching character\n\n const len = longer.length; // length of the longer string\n let cd: any = {\n fis: shorter.length, // the index of matching string in the shorter string\n fil: len, // the index of matching string in the longer string\n sbs: '', // the matching substring itself\n mtc: m + s2.slice(0, bi)\n }; // if exists mtc holds the matching string at the front\n let sub: any = { sbs: '' }; // returned substring per 1 character rotation of the longer string\n\n if (shorter !== '') {\n for (let rc = 0; rc < len && sub.sbs.length < p; rc++) {\n // rc -> rotate count, p -> precision factor\n sub = StringUtils.getMatchingSubstring(\n shorter,\n StringUtils.rotateArray(longer, rc),\n cd.mtc\n ); // rotate longer string 1 char and get substring\n sub.fil =\n rc < len - sub.fis\n ? sub.fis + rc // mismatch is longer than the mismatch in short\n : sub.fis - len + rc; // mismatch is shorter than the mismatch in short\n if (sub.sbs.length > cd.sbs.length) {\n cd = sub; // only keep the one with the longest substring.\n }\n }\n }\n // insert the mismatching delete subsrt and insert substr to the cd object and attach the previous substring\n [cd.del, cd.ins] = isThisLonger\n ? [longer.slice(0, cd.fil).join(''), shorter.slice(0, cd.fis)]\n : [shorter.slice(0, cd.fis), longer.slice(0, cd.fil).join('')];\n return cd.del.indexOf(' ') === -1 ||\n cd.ins.indexOf(' ') === -1 ||\n cd.del === '' ||\n cd.ins === '' ||\n cd.sbs === ''\n ? cd\n : StringUtils.getChanges(cd.del, cd.ins, cd.mtc, p);\n }\n\n private static rotateArray(array, n) {\n const len = array.length;\n const res = new Array(array.length);\n if (n % len === 0) {\n return array.slice();\n } else {\n for (let i = 0; i < len; i++) {\n res[i] = array[(i + (len + (n % len))) % len];\n }\n }\n return res;\n }\n\n static isValidNumber(value: string): boolean {\n return !isNaN(Number(value));\n }\n\n static isOctalNumber(value: string): boolean {\n return (\n StringUtils.isValidNumber(value) &&\n value.startsWith('0') &&\n value.length > 1\n );\n }\n}\n","import { ChangeType, GroupingChanges } from './change.interface';\nimport { StringUtils } from './string-utils';\n\nexport class ChangeUtils {\n static findChanges(\n obj1: any[],\n obj2: any[],\n ignoreKeys: string[] = []\n ): GroupingChanges {\n const items: GroupingChanges = {\n added: [],\n deleted: [],\n modified: []\n };\n\n if (!obj1 || !obj2) {\n return items;\n }\n\n const obj1Clone: any = [...obj1];\n const obj2Clone: any = [...obj2];\n\n for (const fromItem of obj1Clone) {\n const index = obj2Clone.findIndex((s) => s.id === fromItem.id);\n\n if (index === -1) {\n items.deleted.push({\n change: { type: ChangeType.DELETED },\n value: fromItem\n });\n continue;\n }\n\n const toItem = obj2Clone.splice(index, 1)[0];\n const fromItemClone = JSON.parse(JSON.stringify(fromItem));\n const toItemClone = JSON.parse(JSON.stringify(toItem));\n\n const keysChanged = ChangeUtils.compareObject(\n fromItemClone,\n toItemClone,\n undefined,\n ignoreKeys\n );\n\n if (keysChanged.length) {\n items.modified.push({\n change: {\n type: ChangeType.MODIFIED,\n keysChanged\n },\n value: fromItemClone,\n oldValue: fromItem,\n newValue: toItem\n });\n }\n }\n\n items.added = obj2Clone.map((itemAdded) => {\n return {\n change: { type: ChangeType.ADDED },\n value: itemAdded\n };\n });\n\n return items;\n }\n\n private static compareObject(fromItem, toItem, baseKey?, ignoreKeys = []) {\n const fromItemClone = JSON.parse(JSON.stringify(fromItem));\n const toItemClone = JSON.parse(JSON.stringify(toItem));\n\n const keys: any = new Set([\n ...Object.keys(fromItem),\n ...Object.keys(toItem)\n ]);\n let keysChanged = [];\n keys.forEach((key) => {\n const keyString = baseKey ? `${baseKey}.${key}` : key;\n if (ignoreKeys.indexOf(keyString) !== -1) {\n return;\n }\n\n if (Array.isArray(fromItem[key])) {\n fromItem[key] = fromItem[key].join(',<br>');\n }\n if (Array.isArray(toItem[key])) {\n toItem[key] = toItem[key].join(',<br>');\n }\n\n if (\n typeof fromItem[key] === 'object' &&\n typeof toItem[key] === 'object' &&\n fromItem[key] !== null &&\n toItem[key] !== null\n ) {\n keysChanged = keysChanged.concat(\n this.compareObject(fromItem[key], toItem[key], keyString)\n );\n } else {\n if (fromItem[key] !== toItem[key]) {\n keysChanged.push({\n key: keyString,\n oldValue: fromItemClone[key],\n newValue: toItemClone[key]\n });\n fromItem[key] = StringUtils.diff(fromItem[key], toItem[key]);\n }\n }\n });\n\n return keysChanged;\n }\n}\n","const ISO8601_REGEX = new RegExp(\n '(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d.d+)|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d)|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d)'\n);\nconst ISO8601_UTCTIME_REGEX = new RegExp(\n '(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\\\.[0-9]+)?(Z)?'\n);\n\nexport function isIsoDate(value: string): boolean {\n if (!ISO8601_REGEX.test(value) && !ISO8601_UTCTIME_REGEX.test(value)) {\n return false;\n }\n const d = new Date(value);\n return d instanceof Date && !isNaN(d.getTime());\n}\n\nexport const TimeFrame = ['now', 'today'] as const;\nexport type TimeFrame = (typeof TimeFrame)[number];\n\nexport function isTimeFrame(\n value: Date | TimeFrame | string | number\n): value is TimeFrame {\n return (\n typeof value === 'string' &&\n TimeFrame.includes(value.toLowerCase() as TimeFrame)\n );\n}\n\nexport function resolveDate(input?: Date | TimeFrame): Date | undefined {\n if (isTimeFrame(input)) {\n return new Date();\n }\n return input instanceof Date ? input : undefined;\n}\n","export class DomUtils {\n static create<K extends keyof HTMLElementTagNameMap>(\n doc: Document,\n tagName: K,\n options?: Partial<HTMLElementTagNameMap[K]>\n ): HTMLElementTagNameMap[K] {\n const el = doc.createElement(tagName);\n\n for (const key in options) {\n el[key] = options[key];\n }\n\n return el;\n }\n\n static remove(node: HTMLElement | SVGElement): void {\n if (!node.parentNode) {\n return;\n }\n node.parentNode.removeChild(node);\n }\n}\n","import type {\n ColInfo,\n JSON2SheetOpts,\n WorkBook,\n WorkSheet,\n WritingOptions\n} from 'xlsx';\n\nexport async function createExcelWorkBook(\n workSheet?: WorkSheet,\n workSheetName?: string\n): Promise<WorkBook> {\n const { utils } = await import('xlsx');\n\n return utils.book_new(workSheet, workSheetName);\n}\nexport async function addExcelSheetToWorkBook<T = Record<string, unknown>>(\n title: string,\n rows: T[],\n workBook: WorkBook,\n opts?: {\n json2SheetOpts?: JSON2SheetOpts;\n bookAppendSheetOpts?: { roll?: boolean };\n }\n): Promise<void> {\n const { utils } = await import('xlsx');\n\n const worksheet = utils.json_to_sheet(rows, opts?.json2SheetOpts);\n\n /* calculate column width */\n if (rows?.length) {\n worksheet['!cols'] = getColumnsInfo(rows);\n }\n\n const SHEET_NAME_MAX_LENGTH = 31;\n let sheetName =\n title.length >= SHEET_NAME_MAX_LENGTH\n ? title.substring(0, SHEET_NAME_MAX_LENGTH)\n : title;\n\n if (workBook.SheetNames.includes(sheetName)) {\n sheetName = `${sheetName.substring(0, SHEET_NAME_MAX_LENGTH - 3)}_${workBook.SheetNames.length}`;\n }\n\n utils.book_append_sheet(\n workBook,\n worksheet,\n sheetName,\n opts?.bookAppendSheetOpts?.roll\n );\n}\n\nexport async function writeExcelFile(\n workBook: WorkBook,\n filename: string,\n opts?: WritingOptions\n) {\n const cleanedFileName = filename.toLowerCase().endsWith('.xlsx')\n ? filename.slice(0, -5)\n : filename;\n const { writeFile } = await import('xlsx');\n writeFile(workBook, `${cleanedFileName}.xlsx`, opts);\n}\n\nfunction getColumnsInfo<T = Record<string, unknown>>(rows: T[]): ColInfo[] {\n const columns = Object.keys(rows[0]);\n return columns.map((column) => ({\n wch: getColumnMaxWidth(column, rows)\n }));\n}\n\nfunction getColumnMaxWidth<T = Record<string, unknown>>(\n column: string,\n rows: T[]\n): number {\n return rows.reduce(\n (width, row) => Math.max(width, row[column]?.toString().length ?? 0),\n column.length\n );\n}\n","/**\n * Trigger download of a file\n *\n * @param content File content\n * @param mimeType File mime type\n * @param fileName File name\n */\nexport function downloadContent(\n content: string,\n mimeType: string,\n fileName: string\n) {\n const uri = `data:${mimeType},${encodeURIComponent(content)}`;\n downloadFromUri(uri, fileName);\n}\n\nexport function downloadBlob(blob: Blob, fileName: string) {\n const url = window.URL.createObjectURL(blob);\n downloadFromUri(url, fileName);\n}\n\n/**\n * Trigger download of a file\n *\n * @param content File content\n * @param mimeType File mime type\n * @param fileName File name\n */\nexport function downloadFromUri(uri: string, fileName: string) {\n const element = document.createElement('a');\n element.setAttribute('href', uri);\n element.setAttribute('download', fileName);\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n}\n\n/**\n * Validate if string is valid json object\n * @param jsonString\n * @return boolean\n */\nexport function isValidJSON(jsonString: string): boolean {\n try {\n return JSON.parse(jsonString) && !!jsonString;\n } catch {\n return false;\n }\n}\n","/* eslint-disable no-prototype-builtins */\nexport class ObjectUtils {\n static resolve(obj: object, key: string): any {\n const keysArray = key.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n let current = obj;\n while (keysArray.length) {\n if (typeof current !== 'object') {\n return undefined;\n }\n current = current[keysArray.shift()];\n }\n\n return current;\n }\n\n static isObject(item: object) {\n return (\n item &&\n typeof item === 'object' &&\n !Array.isArray(item) &&\n item !== null &&\n !(item instanceof Date)\n );\n }\n\n static mergeDeep(\n target: object,\n source: object,\n ignoreUndefined = false\n ): any {\n const output = Object.assign({}, target);\n if (ObjectUtils.isObject(target) && ObjectUtils.isObject(source)) {\n Object.keys(source)\n .filter((key) => !ignoreUndefined || source[key] !== undefined)\n .forEach((key) => {\n if (ObjectUtils.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] });\n } else {\n output[key] = ObjectUtils.mergeDeep(\n target[key],\n source[key],\n ignoreUndefined\n );\n }\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n }\n\n static copyDeep(src): any {\n const target = Array.isArray(src) ? [] : {};\n for (const prop in src) {\n if (src.hasOwnProperty(prop)) {\n const value = src[prop];\n if (value && typeof value === 'object') {\n target[prop] = this.copyDeep(value);\n } else {\n target[prop] = value;\n }\n }\n }\n return target;\n }\n\n static removeDuplicateCaseInsensitive(obj: object) {\n const summaryCapitalizeObject = {};\n const capitalizeObject = {};\n const upperCaseCount = [];\n\n for (const property in obj) {\n if (obj.hasOwnProperty(property)) {\n const upperCaseProperty = property.toUpperCase();\n if (!summaryCapitalizeObject.hasOwnProperty(upperCaseProperty)) {\n summaryCapitalizeObject[upperCaseProperty] = [\n { [property]: obj[property] }\n ];\n } else {\n summaryCapitalizeObject[upperCaseProperty].push({\n [property]: obj[property]\n });\n }\n // counting the number of uppercase lettersMna\n upperCaseCount.push({\n key: property,\n count: property.replace(/[^A-Z]/g, '').length\n });\n }\n }\n for (const capitalizedProperty in summaryCapitalizeObject) {\n if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {\n if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {\n const capitalizedPropertyObject =\n summaryCapitalizeObject[capitalizedProperty];\n if (capitalizedPropertyObject.length === 1) {\n // for single params (no duplicates)\n const singlePossibility = capitalizedPropertyObject[0];\n capitalizeObject[capitalizedProperty] =\n singlePossibility[Object.keys(singlePossibility)[0]];\n } else if (capitalizedPropertyObject.length > 1) {\n // defining the closest to lowercase property\n const paramClosestToLowercase = upperCaseCount\n .filter(\n (f) => f.key.toLowerCase() === capitalizedProperty.toLowerCase()\n )\n .reduce((prev, current) => {\n return prev.y < current.y ? prev : current;\n });\n capitalizeObject[paramClosestToLowercase.key.toUpperCase()] =\n obj[paramClosestToLowercase.key];\n }\n }\n }\n }\n for (const property in obj) {\n if (obj.hasOwnProperty(property)) {\n delete obj[property];\n }\n }\n\n for (const property in capitalizeObject) {\n if (capitalizeObject.hasOwnProperty(property)) {\n obj[property] = capitalizeObject[property];\n }\n }\n }\n\n static removeUndefined(obj: object): any {\n const output = {};\n if (ObjectUtils.isObject(obj)) {\n Object.keys(obj)\n .filter((key) => obj[key] !== undefined)\n .forEach((key) => {\n if (ObjectUtils.isObject(obj[key]) || Array.isArray(obj[key])) {\n output[key] = ObjectUtils.removeUndefined(obj[key]);\n } else {\n output[key] = obj[key];\n }\n });\n\n return output;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((o) => ObjectUtils.removeUndefined(o));\n }\n\n return obj;\n }\n\n static removeNull(obj: object): any {\n const output = {};\n if (ObjectUtils.isObject(obj)) {\n Object.keys(obj)\n .filter((key) => obj[key] !== null)\n .forEach((key) => {\n if (ObjectUtils.isObject(obj[key]) || Array.isArray(obj[key])) {\n output[key] = ObjectUtils.removeNull(obj[key]);\n } else {\n output[key] = obj[key];\n }\n });\n\n return output;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((o) => ObjectUtils.removeNull(o));\n }\n\n return obj;\n }\n\n static naturalCompare(a, b, direction = 'asc', nullsFirst?: boolean) {\n if (direction === 'desc') {\n b = [a, (a = b)][0];\n }\n\n // nullsFirst = undefined : end if direction = 'asc', first if direction = 'desc'\n // nullsFirst = true : always first\n // nullsFirst = false : always end\n if (\n a === null ||\n a === '' ||\n a === undefined ||\n b === null ||\n b === '' ||\n b === undefined\n ) {\n const nullScore =\n a === b\n ? 0\n : a === undefined\n ? 3\n : b === undefined\n ? -3\n : a === null\n ? 2\n : b === null\n ? -2\n : a === ''\n ? 1\n : -1;\n if (direction === 'desc') {\n return nullsFirst !== false ? nullScore : nullScore * -1;\n }\n return nullsFirst === true ? nullScore * -1 : nullScore;\n }\n\n const ax = [];\n const bx = [];\n a = '' + a;\n b = '' + b;\n\n a.replace(/(\\d+)|(\\D+)/g, (_, $1, $2) => {\n ax.push([$1 || Infinity, $2 || '']);\n });\n\n b.replace(/(\\d+)|(\\D+)/g, (_, $1, $2) => {\n bx.push([$1 || Infinity, $2 || '']);\n });\n\n while (ax.length && bx.length) {\n const an = ax.shift();\n const bn = bx.shift();\n const nn = an[0] - bn[0] || an[1].localeCompare(bn[1]);\n if (nn) {\n return nn;\n }\n }\n\n return ax.length - bx.length;\n }\n\n /**\n * Return true if two object are equivalent.\n * Objects are considered equivalent if they have the same properties and\n * if all of their properties (first-level only) share the same value.\n * @param obj1 First object\n * @param obj2 Second object\n * @returns Whether two objects arer equivalent\n */\n static objectsAreEquivalent(obj1: object, obj2: object): boolean {\n if (obj1 === obj2) {\n return true;\n }\n\n const obj1Props = Object.getOwnPropertyNames(obj1);\n const obj2Props = Object.getOwnPropertyNames(obj2);\n if (obj1Props.length !== obj2Props.length) {\n return false;\n }\n\n for (const prop of obj1Props) {\n if (obj1[prop] !== obj2[prop]) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Return a new object with an array of keys removed\n * @param obj Source object\n * @param keys Keys to remove\n * @returns A new object\n */\n static removeKeys(obj: object, keys: string[]): object {\n const newObj = Object.keys(obj)\n .filter((key) => keys.indexOf(key) < 0)\n .reduce((_obj, key) => {\n _obj[key] = obj[key];\n return _obj;\n }, {});\n\n return newObj;\n }\n\n static isEmpty(obj: object): boolean {\n return Object.keys(obj).length === 0;\n }\n}\n","export class NumberUtils {\n static roundToNDecimal(num: number, decimal = 3): number {\n const roundFactor = Math.pow(10, decimal);\n return Math.round(num * roundFactor) / roundFactor;\n }\n}\n","/** Utility function to create a K:V from a list of strings */\nexport function strEnum<T extends string>(o: T[]): { [K in T]: K } {\n return o.reduce((res, key) => {\n res[key] = key;\n return res;\n }, Object.create(null));\n}\n","import { DomUtils } from './dom.utils';\n\nconst PATH_PREBUILT_THEMES = 'igo2/core/theming/prebuilt-themes';\nconst LINK_ID = 'theme-styles';\n\nexport function loadTheme(\n doc: Document,\n themeName: string,\n path: string = PATH_PREBUILT_THEMES\n): void {\n const src = `${path}/${themeName}.css`;\n const head = doc.getElementsByTagName('head')[0];\n\n const themeLink = doc.getElementById(LINK_ID) as HTMLLinkElement;\n\n if (themeLink) {\n themeLink.href = src;\n } else {\n createHtmlLink(doc, src, head);\n }\n}\n\nfunction createHtmlLink(doc: Document, src: string, parent: HTMLElement): void {\n const element = DomUtils.create(doc, 'link', {\n id: LINK_ID,\n rel: 'stylesheet',\n href: src\n });\n parent.appendChild(element);\n}\n","type TreeId = string | number;\nexport interface ITreeConfig<T> {\n getChildren: (dataNode: T) => T[] | undefined | null;\n getId: (dataNode: T) => TreeId;\n getLevel: (dataNode: T) => number;\n reverse?: boolean;\n}\n\nexport const TREE_SEPERATOR = '.';\n\nexport class Tree<T> {\n private _data: T[];\n\n getChildren: (dataNode: T) => T[] | undefined | null;\n getId: (dataNode: T) => TreeId;\n getLevel: (dataNode: T) => number;\n\n constructor(\n initialData: T[],\n private config: ITreeConfig<T>\n ) {\n this.getChildren = config.getChildren;\n this.getId = config.getId;\n this.getLevel = config.getLevel;\n\n this._data = this.sortDeep(initialData);\n }\n\n get data(): readonly T[] {\n return this._data;\n }\n\n get flattened(): readonly T[] {\n return this.flatten([...this.data]);\n }\n\n add(...nodes: T[]): T[] {\n this.sortDeep(nodes);\n this._data.unshift(...nodes);\n return nodes;\n }\n\n addBefore(beforeId: string | undefined, ...nodes: T[]): void {\n this.sortDeep(nodes);\n this._addBefore(beforeId, this._data, ...nodes);\n }\n\n remove(...nodes: T[]): T[] {\n return this._remove(...nodes);\n }\n\n clear(): void {\n this._data = [];\n }\n\n exist(node: T): boolean {\n const id = this.getId(node);\n return this.flattened.some((layer) => this.getId(layer) === id);\n }\n\n /**\n * Move a node to a different position\n * @param node\n * @param beforeTo The position of index into the tree. If -1 move at the end\n */\n moveTo(beforeTo: number[], ...nodes: T[]): T[] {\n const clonedBeforeTo = [...beforeTo];\n const lastIndex = clonedBeforeTo.pop();\n const recipient = this.getAncestorAtPosition(clonedBeforeTo);\n const beforeId =\n lastIndex === -1 || lastIndex >= recipient.length\n ? null\n : this.getId(recipient[lastIndex]);\n\n const nodesToMove = nodes.filter((node) => beforeId !== this.getId(node));\n return this.move(beforeId, recipient, ...nodesToMove);\n }\n\n getPosition(node: T): number[] {\n const id = this.getId(node);\n return this._getPosition(id);\n }\n\n private _addBefore(\n beforeId: TreeId | undefined,\n recipient = this._data,\n ...nodes: T[]\n ): T[] {\n if (!beforeId) {\n recipient.push(...nodes);\n return nodes;\n }\n\n const beforeIndex = this.getIndex(beforeId, recipient);\n recipient.splice(beforeIndex, 0, ...nodes);\n\n return nodes;\n }\n\n private _remove(...nodes: T[]): T[] {\n return nodes.reduce((acc: T[], node) => {\n const ancestor = this.getNodeAncestor(node);\n if (!ancestor) {\n return;\n }\n\n const index = this.getIndex(this.getId(node), ancestor);\n if (index === -1) {\n return;\n }\n ancestor.splice(index, 1);\n\n return acc.concat(node);\n }, []);\n }\n\n /**\n * Move an node before an id\n * @param node Node to be move\n * @param recipient\n * @param beforeId\n */\n private move(\n beforeId: TreeId | undefined,\n recipient: T[],\n ...nodes: T[]\n ): T[] {\n this._remove(...nodes);\n return this._addBefore(beforeId, recipient, ...nodes);\n }\n\n private _getPosition(\n id: TreeId,\n ancestorsIndex: number[] = [],\n values = this._data\n ) {\n let indexList: number[];\n values.some((value, index) => {\n if (this.getId(value) === id) {\n indexList = ancestorsIndex.concat(index);\n return true;\n }\n\n const children = this.getChildren(value);\n if (children) {\n const groupIndexList = this._getPosition(\n id,\n ancestorsIndex.concat(index),\n children\n );\n if (groupIndexList) {\n indexList = groupIndexList;\n return true;\n }\n }\n\n return false;\n });\n return indexList;\n }\n\n private getAncestorAtPosition(position: number[]) {\n if (!position.length) {\n return this._data;\n }\n const node = this.getNodeByPosition(position);\n return this.getChildren(node);\n }\n\n /** Recursive */\n private sortDeep(data = this._data): T[] {\n data.forEach((node) => {\n const children = this.getChildren(node);\n if (children) {\n this.sortDeep(children);\n }\n });\n return this.sort(data);\n }\n\n private sort(children: T[]): T[] {\n const sorted = children.sort((a, b) => this.getLevel(a) - this.getLevel(b));\n return this.config.reverse ? sorted.reverse() : sorted;\n }\n\n /** Recursive */\n private _getNodeById(id: string, data = this._data): T {\n let node: T;\n data.some((item) => {\n if (this.getId(item) === id) {\n node = item;\n return true;\n }\n\n const children = this.getChildren(item);\n if (children) {\n node = this._getNodeById(id, children);\n if (node) {\n return true;\n }\n }\n\n return false;\n });\n return node;\n }\n\n getNodeByPosition(indexes: number[]): T {\n if (indexes.length > 1) {\n return indexes.reduce((previousValue: T, index) => {\n const ancestor = previousValue\n ? this.getChildren(previousValue)\n : this._data;\n return this._getByIndex(index, ancestor);\n }, null);\n } else {\n return this._getByIndex(indexes[0]);\n }\n }\n\n private _getByIndex(index: number, ancestor = this._data) {\n return ancestor[index];\n }\n\n private getNodeAncestor(node: T): T[] {\n const id = this.getId(node);\n return this.getAncestorById(id);\n }\n\n /** Recursive */\n private getAncestorById(id: TreeId, data = this._data): T[] | undefined {\n let ancestor: T[];\n data.some((item) => {\n if (this.getId(item) === id) {\n ancestor = data;\n return true;\n }\n\n const children = this.getChildren(item);\n if (children) {\n ancestor = this.getAncestorById(id, children);\n if (ancestor) {\n return true;\n }\n }\n\n return false;\n });\n return ancestor;\n }\n\n /** Recursive */\n private flatten(nodes: T[]): T[] {\n return nodes.reduce((list, node) => {\n const children = this.getChildren(node);\n if (children) {\n const flattened = this.flatten(children);\n list.push(node, ...flattened);\n } else {\n list.push(node);\n }\n return list;\n }, [] as T[]);\n }\n\n private getIndex(id: TreeId, ancestor: T[]): number {\n return ancestor.findIndex((node) => this.getId(node) === id);\n }\n}\n","export function S4() {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n}\n\nexport function uuid() {\n const id = `${S4()}${S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`;\n return id.toLowerCase();\n}\n","import { Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nexport enum SubjectStatus {\n Error = 0,\n Done = 1,\n Working = 2,\n Waiting = 3\n}\n\nexport abstract class Watcher {\n public status$ = new Subject<SubjectStatus>();\n protected status$$: Subscription;\n\n get status(): SubjectStatus {\n return this._status;\n }\n set status(value: SubjectStatus) {\n this._status = value;\n this.status$.next(value);\n }\n private _status: SubjectStatus;\n\n protected abstract watch();\n\n protected abstract unwatch();\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n subscribe(callback: Function, scope?: any) {\n this.watch();\n\n this.status$$ = this.status$.pipe(distinctUntilChanged()).subscribe(() => {\n callback.call(scope, this);\n });\n }\n\n unsubscribe() {\n this.unwatch();\n if (this.status$$ !== undefined) {\n this.status$$.unsubscribe();\n this.status$$ = undefined;\n }\n this.status = SubjectStatus.Waiting;\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;AAAA;AAEA,MAAM,KAAK,GACT,kEAAkE;MAEvD,MAAM,CAAA;AACT,IAAA,OAAO,OAAO,GAAW,GAAG;AAC5B,IAAA,OAAO,KAAK,GAAW,KAAK;AAE5B,IAAA,OAAO,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACzB,QAAA,OAAO,CAAC;IACV;AAEQ,IAAA,OAAO,SAAS,CAAC,CAAS,EAAE,CAAS,EAAA;AAC3C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,OAAO,GAAG;IACZ;IAEO,OAAO,MAAM,CAAC,CAAS,EAAA;AAC5B,QAAA,IAAI,IAAI,GAAG,CAAC,EACV,CAAC,EACD,GAAG,EACH,IAAI,GAAG,CAAC,CAAC,MAAM,EACf,CAAC,GAAG,EAAE;AAER,QAAA,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAEb,QAAA,IAAI,IAAI,KAAK,CAAC,EAAE;AACd,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE;YACvC,IAAI,GAAG,CAAC;AACR,YAAA,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE;gBACvC,IAAI,GAAG,CAAC;YACV;YACA,IAAI,IAAI,CAAC;QACX;AAEA,QAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5B,GAAG;gBACD,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AAC3B,qBAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAChC,qBAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC/B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAC1B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QACrE;QAEA,QAAQ,IAAI;AACV,YAAA,KAAK,CAAC;gBACJ,GAAG;oBACD,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AAC3B,yBAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAChC,yBAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBACjC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;gBACxD;AACF,YAAA,KAAK,CAAC;AACJ,gBAAA,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACrE,gBAAA,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;gBACtC;;AAGJ,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACnB;IAEO,OAAO,MAAM,CAAC,CAAS,EAAA;AAC5B,QAAA,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAEb,IAAI,CAAC,EACH,GAAG,EACH,CAAC,GAAG,EAAE,EACN,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAElC,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAClB,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5B,GAAG;gBACD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AACzB,qBAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC7B,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACxB,YAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AACpC,YAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,YAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1C,YAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACrC;AAEA,QAAA,QAAQ,CAAC,CAAC,MAAM,GAAG,IAAI;AACrB,YAAA,KAAK,CAAC;gBACJ,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;AAC9B,gBAAA,CAAC,CAAC,IAAI,CACJ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;AAC1B,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,oBAAA,IAAI,CAAC,OAAO;oBACZ,IAAI,CAAC,OAAO,CACf;gBACD;AACF,YAAA,KAAK,CAAC;AACJ,gBAAA,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,gBAAA,CAAC,CAAC,IAAI,CACJ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;AAC1B,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;AACnC,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAClC,IAAI,CAAC,OAAO,CACf;gBACD;;AAGJ,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACnB;;;AC/GI,SAAU,iBAAiB,CAAC,UAAqB,EAAA;AACrD,IAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;QAC9B,IACE,OAAO,KAAK,KAAK,QAAQ;AACzB,YAAA,KAAK,IAAI,IAAI;AACb,YAAA,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,EACpC;AACA,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;QACzB;QACA,OAAO,KAAK,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;AACxE,IAAA,CAAC,CAAC;AACJ;;ACPA,SAAS,SAAS,CAAC,CAAS,EAAE,WAAmB,EAAE,MAAc,EAAA;IAC/D,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC;AAC9B,IAAA,OAAO,CAAC,CAAC,IAAI,WAAW,IAAI,IAAI;AAClC;MAEa,WAAW,CAAA;AACd,IAAA,WAAW,GAAG,IAAI,GAAG,EAAkB;AACvC,IAAA,WAAW,GAAG,IAAI,GAAG,EAAkB;AAE/C,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEQ,mBAAmB,GAAA;;;AAGzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE;;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;YACxE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E;;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;YACxE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E;;QAEA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;IAC/B;AAEA,IAAA,YAAY,CAAC,IAAU,EAAA;QACrB,IAAI,CAAC,IAAI,EAAE;YACT;QACF;QAEA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,CAAC,QAAkC,KAAI;AACvE,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1B,YAAA,MAAM,CAAC,MAAM,GAAG,MAAK;gBACnB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAY;AAChD,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;AACpD,gBAAA,MAAM,cAAc,GAAmB;oBACrC,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,oBAAA,MAAM,EAAE;iBACT;AACD,gBAAA,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/B,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,cAAc,CAAC,cAA8B,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM;AACpC,QAAA,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM;QACpC,MAAM,YAAY,GAAW,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC;AACxE,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;AACpD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9C,WAAW,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/C;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC;AAC7C,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;AACjE,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,oBAAoB,CAAC,CAAS,EAAA;QACpC,IAAI,GAAG,GAAG,EAAE;QACZ,IAAI,IAAI,GAAG,EAAE;QACb,IAAI,GAAG,GAAG,CAAC;AACX,QAAA,IAAI,GAAW;AACf,QAAA,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,YAAA,IAAI,IAAI,GAAG,CAAC,EAAE;gBACZ,IAAI,IAAI,CAAC;AACT,gBAAA,GAAG,IAAI,KAAK,IAAI,IAAI;YACtB;iBAAO;AACL,gBAAA,GAAG,GAAG,CAAC,GAAG,IAAI;AACd,gBAAA,GAAG,IAAI,KAAK,IAAI,GAAG;AACnB,gBAAA,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;gBAC/B,GAAG,GAAG,KAAK,KAAK,EAAE,GAAG,GAAG,CAAC;AACzB,gBAAA,IAAI,GAAG,EAAE,GAAG,GAAG;YACjB;QACF;QACA,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;AACtB,YAAA,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;QACjC;QACA,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG;IACxC;IAEQ,sBAAsB,CAAC,CAAS,EAAE,MAAc,EAAA;QACtD,IAAI,CAAC,CAAC,EAAE;YACN;QACF;QAEA,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AAC5B,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,IAAI,GAAW;AACf,QAAA,IAAI,GAAW;QACf,IAAI,IAAI,GAAG,EAAE;QACb,IAAI,GAAG,GAAG,EAAE;QACZ,IAAI,CAAC,GAAG,CAAC;QACT,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,YAAA,IAAI,IAAI,GAAG,CAAC,EAAE;gBACZ,IAAI,IAAI,CAAC;gBACT,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/B,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAClC;iBAAO;AACL,gBAAA,GAAG,GAAG,CAAC,GAAG,IAAI;gBACd,GAAG,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG;gBACtC,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACzB,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC;gBACtC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;AAChC,gBAAA,IAAI,GAAG,EAAE,GAAG,GAAG;YACjB;QACF;AACA,QAAA,OAAO,GAAG;IACZ;AACD;;ICrIW;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACvB,CAAC,EAJW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;MCAT,WAAW,CAAA;IACtB,OAAO,IAAI,CAAC,EAAU,EAAE,EAAU,EAAE,CAAC,GAAG,CAAC,EAAA;AACvC,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;AACd,YAAA,OAAO,EAAE;QACX;QACA,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,OAAO,yBAAyB,GAAG,EAAE,GAAG,SAAS;QACnD;QACA,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,OAAO,wBAAwB,GAAG,EAAE,GAAG,SAAS;QAClD;AACA,QAAA,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;AAClB,QAAA,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;AAClB,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CACpB,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CACtE,CAAC;QACF,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CACvB,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CACtE,CAAC;QACF,IAAI,MAAc,CAAC;QACnB,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,UAAU,CAAC,GAAG,GAAG,wBAAwB,GAAG,UAAU,CAAC,GAAG,GAAG,SAAS;QACxE;QACA,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,UAAU,CAAC,GAAG,GAAG,yBAAyB,GAAG,UAAU,CAAC,GAAG,GAAG,SAAS;QACzE;AACA,QAAA,MAAM,GAAG,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG;QAC1E,MAAM;AACJ,YAAA,QAAQ,KAAK,EAAE,IAAI,KAAK,KAAK;kBACzB,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;kBACnC,EAAE;AACR,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,OAAO,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAA;;QAEzC,IAAI,CAAC,GAAG,CAAC;QACT,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM;AACrB,QAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AAEzC,QAAA,OAAO,CAAC,GAAG,IAAI,EAAE;;AAEf,YAAA,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACV,kBAAE;AACA,uBAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;uBACb,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,kBAAE;AACA,uBAAG,CAAC,GAAG,IAAI;AACX;AACE,yBAAC,CAAC,GAAG,CAAC,CAAC;AACb,YAAA,EAAE,CAAC;QACL;AACA,QAAA,OAAO,CAAC;IACV;IAEQ,OAAO,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAA;AACpC,QAAA,MAAM,YAAY,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK;QAC1D,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3D,QAAA,IAAI,EAAE,GAAG,CAAC,CAAC;AAEX,QAAA,OAAO,OAAO,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE;AACxD,YAAA,EAAE,EAAE;AACN,QAAA,CAAC;AACD,QAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAE5B,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAA,IAAI,EAAE,GAAQ;AACZ,YAAA,GAAG,EAAE,OAAO,CAAC,MAAM;YACnB,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,EAAE;YACP,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE;AACxB,SAAA,CAAC;QACF,IAAI,GAAG,GAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AAE3B,QAAA,IAAI,OAAO,KAAK,EAAE,EAAE;YAClB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE;;gBAErD,GAAG,GAAG,WAAW,CAAC,oBAAoB,CACpC,OAAO,EACP,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,EACnC,EAAE,CAAC,GAAG,CACP,CAAC;AACF,gBAAA,GAAG,CAAC,GAAG;AACL,oBAAA,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;AACb,0BAAE,GAAG,CAAC,GAAG,GAAG,EAAE;0BACZ,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AACzB,gBAAA,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE;AAClC,oBAAA,EAAE,GAAG,GAAG,CAAC;gBACX;YACF;QACF;;QAEA,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG;AACjB,cAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC;AAC7D,cAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChE,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1B,EAAE,CAAC,GAAG,KAAK,EAAE;YACb,EAAE,CAAC,GAAG,KAAK,EAAE;YACb,EAAE,CAAC,GAAG,KAAK;AACX,cAAE;AACF,cAAE,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD;AAEQ,IAAA,OAAO,WAAW,CAAC,KAAK,EAAE,CAAC,EAAA;AACjC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM;QACxB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,EAAE;AACjB,YAAA,OAAO,KAAK,CAAC,KAAK,EAAE;QACtB;aAAO;AACL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;YAC/C;QACF;AACA,QAAA,OAAO,GAAG;IACZ;IAEA,OAAO,aAAa,CAAC,KAAa,EAAA;QAChC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B;IAEA,OAAO,aAAa,CAAC,KAAa,EAAA;AAChC,QAAA,QACE,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;AAChC,YAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;AACrB,YAAA,KAAK,CAAC,MAAM,GAAG,CAAC;IAEpB;AACD;;MChIY,WAAW,CAAA;IACtB,OAAO,WAAW,CAChB,IAAW,EACX,IAAW,EACX,aAAuB,EAAE,EAAA;AAEzB,QAAA,MAAM,KAAK,GAAoB;AAC7B,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,QAAQ,EAAE;SACX;AAED,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AAClB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,SAAS,GAAQ,CAAC,GAAG,IAAI,CAAC;AAChC,QAAA,MAAM,SAAS,GAAQ,CAAC,GAAG,IAAI,CAAC;AAEhC,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;AAE9D,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACjB,oBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE;AACpC,oBAAA,KAAK,EAAE;AACR,iBAAA,CAAC;gBACF;YACF;AAEA,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1D,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAEtD,YAAA,MAAM,WAAW,GAAG,WAAW,CAAC,aAAa,CAC3C,aAAa,EACb,WAAW,EACX,SAAS,EACT,UAAU,CACX;AAED,YAAA,IAAI,WAAW,CAAC,MAAM,EAAE;AACtB,gBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAClB,oBAAA,MAAM,EAAE;wBACN,IAAI,EAAE,UAAU,CAAC,QAAQ;wBACzB;AACD,qBAAA;AACD,oBAAA,KAAK,EAAE,aAAa;AACpB,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,QAAQ,EAAE;AACX,iBAAA,CAAC;YACJ;QACF;QAEA,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,KAAI;YACxC,OAAO;AACL,gBAAA,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE;AAClC,gBAAA,KAAK,EAAE;aACR;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,KAAK;IACd;IAEQ,OAAO,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAQ,EAAE,UAAU,GAAG,EAAE,EAAA;AACtE,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAEtD,QAAA,MAAM,IAAI,GAAQ,IAAI,GAAG,CAAC;AACxB,YAAA,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxB,YAAA,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM;AACtB,SAAA,CAAC;QACF,IAAI,WAAW,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnB,YAAA,MAAM,SAAS,GAAG,OAAO,GAAG,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,GAAG,GAAG;YACrD,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;gBACxC;YACF;YAEA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;AAChC,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7C;YACA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AAC9B,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YACzC;AAEA,YAAA,IACE,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,QAAQ;AACjC,gBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;AAC/B,gBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI;AACtB,gBAAA,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EACpB;gBACA,WAAW,GAAG,WAAW,CAAC,MAAM,CAC9B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAC1D;YACH;iBAAO;gBACL,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE;oBACjC,WAAW,CAAC,IAAI,CAAC;AACf,wBAAA,GAAG,EAAE,SAAS;AACd,wBAAA,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC;AAC5B,wBAAA,QAAQ,EAAE,WAAW,CAAC,GAAG;AAC1B,qBAAA,CAAC;AACF,oBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9D;YACF;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,WAAW;IACpB;AACD;;AChHD,MAAM,aAAa,GAAG,IAAI,MAAM,CAC9B,wHAAwH,CACzH;AACD,MAAM,qBAAqB,GAAG,IAAI,MAAM,CACtC,oIAAoI,CACrI;AAEK,SAAU,SAAS,CAAC,KAAa,EAAA;AACrC,IAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpE,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AACzB,IAAA,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACjD;MAEa,SAAS,GAAG,CAAC,KAAK,EAAE,OAAO;AAGlC,SAAU,WAAW,CACzB,KAAyC,EAAA;AAEzC,IAAA,QACE,OAAO,KAAK,KAAK,QAAQ;QACzB,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAe,CAAC;AAExD;AAEM,SAAU,WAAW,CAAC,KAAwB,EAAA;AAClD,IAAA,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;QACtB,OAAO,IAAI,IAAI,EAAE;IACnB;IACA,OAAO,KAAK,YAAY,IAAI,GAAG,KAAK,GAAG,SAAS;AAClD;;MChCa,QAAQ,CAAA;AACnB,IAAA,OAAO,MAAM,CACX,GAAa,EACb,OAAU,EACV,OAA2C,EAAA;QAE3C,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC;AAErC,QAAA,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;YACzB,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB;AAEA,QAAA,OAAO,EAAE;IACX;IAEA,OAAO,MAAM,CAAC,IAA8B,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB;QACF;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC;IACnC;AACD;;ACbM,eAAe,mBAAmB,CACvC,SAAqB,EACrB,aAAsB,EAAA;IAEtB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,MAAM,CAAC;IAEtC,OAAO,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;AACjD;AACO,eAAe,uBAAuB,CAC3C,KAAa,EACb,IAAS,EACT,QAAkB,EAClB,IAGC,EAAA;IAED,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,OAAO,MAAM,CAAC;AAEtC,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC;;AAGjE,IAAA,IAAI,IAAI,EAAE,MAAM,EAAE;QAChB,SAAS,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC;IAC3C;IAEA,MAAM,qBAAqB,GAAG,EAAE;AAChC,IAAA,IAAI,SAAS,GACX,KAAK,CAAC,MAAM,IAAI;UACZ,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,qBAAqB;UACxC,KAAK;IAEX,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC3C,QAAA,SAAS,GAAG,CAAA,EAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,qBAAqB,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE;IAClG;AAEA,IAAA,KAAK,CAAC,iBAAiB,CACrB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,IAAI,EAAE,mBAAmB,EAAE,IAAI,CAChC;AACH;AAEO,eAAe,cAAc,CAClC,QAAkB,EAClB,QAAgB,EAChB,IAAqB,EAAA;IAErB,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO;UAC3D,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;UACpB,QAAQ;IACZ,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,MAAM,CAAC;IAC1C,SAAS,CAAC,QAAQ,EAAE,CAAA,EAAG,eAAe,CAAA,KAAA,CAAO,EAAE,IAAI,CAAC;AACtD;AAEA,SAAS,cAAc,CAA8B,IAAS,EAAA;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;AAC9B,QAAA,GAAG,EAAE,iBAAiB,CAAC,MAAM,EAAE,IAAI;AACpC,KAAA,CAAC,CAAC;AACL;AAEA,SAAS,iBAAiB,CACxB,MAAc,EACd,IAAS,EAAA;AAET,IAAA,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,EACpE,MAAM,CAAC,MAAM,CACd;AACH;;AC/EA;;;;;;AAMG;SACa,eAAe,CAC7B,OAAe,EACf,QAAgB,EAChB,QAAgB,EAAA;IAEhB,MAAM,GAAG,GAAG,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAA,EAAI,kBAAkB,CAAC,OAAO,CAAC,CAAA,CAAE;AAC7D,IAAA,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC;AAChC;AAEM,SAAU,YAAY,CAAC,IAAU,EAAE,QAAgB,EAAA;IACvD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AAC5C,IAAA,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC;AAChC;AAEA;;;;;;AAMG;AACG,SAAU,eAAe,CAAC,GAAW,EAAE,QAAgB,EAAA;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAC3C,IAAA,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC;AACjC,IAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC;AAC1C,IAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC9B,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IAElC,OAAO,CAAC,KAAK,EAAE;AAEf,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;AACpC;AAEA;;;;AAIG;AACG,SAAU,WAAW,CAAC,UAAkB,EAAA;AAC5C,IAAA,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU;IAC/C;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF;;ACnDA;MACa,WAAW,CAAA;AACtB,IAAA,OAAO,OAAO,CAAC,GAAW,EAAE,GAAW,EAAA;QACrC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACvE,IAAI,OAAO,GAAG,GAAG;AACjB,QAAA,OAAO,SAAS,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,gBAAA,OAAO,SAAS;YAClB;YACA,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACtC;AAEA,QAAA,OAAO,OAAO;IAChB;IAEA,OAAO,QAAQ,CAAC,IAAY,EAAA;AAC1B,QAAA,QACE,IAAI;YACJ,OAAO,IAAI,KAAK,QAAQ;AACxB,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,KAAK,IAAI;AACb,YAAA,EAAE,IAAI,YAAY,IAAI,CAAC;IAE3B;IAEA,OAAO,SAAS,CACd,MAAc,EACd,MAAc,EACd,eAAe,GAAG,KAAK,EAAA;QAEvB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC;AACxC,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAChE,YAAA,MAAM,CAAC,IAAI,CAAC,MAAM;AACf,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS;AAC7D,iBAAA,OAAO,CAAC,CAAC,GAAG,KAAI;gBACf,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AACrC,oBAAA,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE;AACpB,wBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/C;yBAAO;wBACL,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,SAAS,CACjC,MAAM,CAAC,GAAG,CAAC,EACX,MAAM,CAAC,GAAG,CAAC,EACX,eAAe,CAChB;oBACH;gBACF;qBAAO;AACL,oBAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C;AACF,YAAA,CAAC,CAAC;QACN;AACA,QAAA,OAAO,MAAM;IACf;IAEA,OAAO,QAAQ,CAAC,GAAG,EAAA;AACjB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;AAC3C,QAAA,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;AACtB,YAAA,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AAC5B,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;AACvB,gBAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;oBACtC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACrC;qBAAO;AACL,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK;gBACtB;YACF;QACF;AACA,QAAA,OAAO,MAAM;IACf;IAEA,OAAO,8BAA8B,CAAC,GAAW,EAAA;QAC/C,MAAM,uBAAuB,GAAG,EAAE;QAClC,MAAM,gBAAgB,GAAG,EAAE;QAC3B,MAAM,cAAc,GAAG,EAAE;AAEzB,QAAA,KAAK,MAAM,QAAQ,IAAI,GAAG,EAAE;AAC1B,YAAA,IAAI,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;AAChC,gBAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,WAAW,EAAE;gBAChD,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE;oBAC9D,uBAAuB,CAAC,iBAAiB,CAAC,GAAG;wBAC3C,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;qBAC5B;gBACH;qBAAO;AACL,oBAAA,uBAAuB,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC;AAC9C,wBAAA,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;AACzB,qBAAA,CAAC;gBACJ;;gBAEA,cAAc,CAAC,IAAI,CAAC;AAClB,oBAAA,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACxC,iBAAA,CAAC;YACJ;QACF;AACA,QAAA,KAAK,MAAM,mBAAmB,IAAI,uBAAuB,EAAE;AACzD,YAAA,IAAI,uBAAuB,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE;AAC/D,gBAAA,IAAI,uBAAuB,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE;AAC/D,oBAAA,MAAM,yBAAyB,GAC7B,uBAAuB,CAAC,mBAAmB,CAAC;AAC9C,oBAAA,IAAI,yBAAyB,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE1C,wBAAA,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,CAAC,CAAC;wBACtD,gBAAgB,CAAC,mBAAmB,CAAC;4BACnC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxD;AAAO,yBAAA,IAAI,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE;;wBAE/C,MAAM,uBAAuB,GAAG;AAC7B,6BAAA,MAAM,CACL,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,mBAAmB,CAAC,WAAW,EAAE;AAEjE,6BAAA,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,KAAI;AACxB,4BAAA,OAAO,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO;AAC5C,wBAAA,CAAC,CAAC;AACJ,wBAAA,gBAAgB,CAAC,uBAAuB,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AACzD,4BAAA,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC;oBACpC;gBACF;YACF;QACF;AACA,QAAA,KAAK,MAAM,QAAQ,IAAI,GAAG,EAAE;AAC1B,YAAA,IAAI,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;AAChC,gBAAA,OAAO,GAAG,CAAC,QAAQ,CAAC;YACtB;QACF;AAEA,QAAA,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE;AACvC,YAAA,IAAI,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;gBAC7C,GAAG,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC;YAC5C;QACF;IACF;IAEA,OAAO,eAAe,CAAC,GAAW,EAAA;QAChC,MAAM,MAAM,GAAG,EAAE;AACjB,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC7B,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG;AACZ,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS;AACtC,iBAAA,OAAO,CAAC,CAAC,GAAG,KAAI;gBACf,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;AAC7D,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrD;qBAAO;oBACL,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;gBACxB;AACF,YAAA,CAAC,CAAC;AAEJ,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACvD;AAEA,QAAA,OAAO,GAAG;IACZ;IAEA,OAAO,UAAU,CAAC,GAAW,EAAA;QAC3B,MAAM,MAAM,GAAG,EAAE;AACjB,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC7B,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG;AACZ,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;AACjC,iBAAA,OAAO,CAAC,CAAC,GAAG,KAAI;gBACf,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;AAC7D,oBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChD;qBAAO;oBACL,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;gBACxB;AACF,YAAA,CAAC,CAAC;AAEJ,YAAA,OAAO,MAAM;QACf;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAClD;AAEA,QAAA,OAAO,GAAG;IACZ;IAEA,OAAO,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,GAAG,KAAK,EAAE,UAAoB,EAAA;AACjE,QAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AACxB,YAAA,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB;;;;QAKA,IACE,CAAC,KAAK,IAAI;AACV,YAAA,CAAC,KAAK,EAAE;AACR,YAAA,CAAC,KAAK,SAAS;AACf,YAAA,CAAC,KAAK,IAAI;AACV,YAAA,CAAC,KAAK,EAAE;YACR,CAAC,KAAK,SAAS,EACf;AACA,YAAA,MAAM,SAAS,GACb,CAAC,KAAK;AACJ,kBAAE;kBACA,CAAC,KAAK;AACN,sBAAE;sBACA,CAAC,KAAK;0BACJ,CAAC;0BACD,CAAC,KAAK;AACN,8BAAE;8BACA,CAAC,KAAK;kCACJ,CAAC;kCACD,CAAC,KAAK;AACN,sCAAE;sCACA,CAAC,CAAC;AAClB,YAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AACxB,gBAAA,OAAO,UAAU,KAAK,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;YAC1D;AACA,YAAA,OAAO,UAAU,KAAK,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,GAAG,SAAS;QACzD;QAEA,MAAM,EAAE,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,EAAE;AACb,QAAA,CAAC,GAAG,EAAE,GAAG,CAAC;AACV,QAAA,CAAC,GAAG,EAAE,GAAG,CAAC;AAEV,QAAA,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAI;AACtC,YAAA,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACrC,QAAA,CAAC,CAAC;AAEF,QAAA,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,KAAI;AACtC,YAAA,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AACrC,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE;AAC7B,YAAA,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;AACrB,YAAA,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;YACrB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,EAAE,EAAE;AACN,gBAAA,OAAO,EAAE;YACX;QACF;AAEA,QAAA,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM;IAC9B;AAEA;;;;;;;AAOG;AACH,IAAA,OAAO,oBAAoB,CAAC,IAAY,EAAE,IAAY,EAAA;AACpD,QAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAClD,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAClD,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;AACzC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;YAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;AAC7B,gBAAA,OAAO,KAAK;YACd;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;AACH,IAAA,OAAO,UAAU,CAAC,GAAW,EAAE,IAAc,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;AAC3B,aAAA,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACrC,aAAA,MAAM,CAAC,CAAC,IAAI,EAAE,GAAG,KAAI;YACpB,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACpB,YAAA,OAAO,IAAI;QACb,CAAC,EAAE,EAAE,CAAC;AAER,QAAA,OAAO,MAAM;IACf;IAEA,OAAO,OAAO,CAAC,GAAW,EAAA;QACxB,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;IACtC;AACD;;MC7RY,WAAW,CAAA;AACtB,IAAA,OAAO,eAAe,CAAC,GAAW,EAAE,OAAO,GAAG,CAAC,EAAA;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,WAAW;IACpD;AACD;;ACLD;AACM,SAAU,OAAO,CAAmB,CAAM,EAAA;IAC9C,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AAC3B,QAAA,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;AACd,QAAA,OAAO,GAAG;IACZ,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzB;;ACJA,MAAM,oBAAoB,GAAG,mCAAmC;AAChE,MAAM,OAAO,GAAG,cAAc;AAExB,SAAU,SAAS,CACvB,GAAa,EACb,SAAiB,EACjB,OAAe,oBAAoB,EAAA;AAEnC,IAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,SAAS,MAAM;IACtC,MAAM,IAAI,GAAG,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEhD,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,OAAO,CAAoB;IAEhE,IAAI,SAAS,EAAE;AACb,QAAA,SAAS,CAAC,IAAI,GAAG,GAAG;IACtB;SAAO;AACL,QAAA,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;IAChC;AACF;AAEA,SAAS,cAAc,CAAC,GAAa,EAAE,GAAW,EAAE,MAAmB,EAAA;IACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE;AAC3C,QAAA,EAAE,EAAE,OAAO;AACX,QAAA,GAAG,EAAE,YAAY;AACjB,QAAA,IAAI,EAAE;AACP,KAAA,CAAC;AACF,IAAA,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;AAC7B;;ACrBO,MAAM,cAAc,GAAG;MAEjB,IAAI,CAAA;AASL,IAAA,MAAA;AARF,IAAA,KAAK;AAEb,IAAA,WAAW;AACX,IAAA,KAAK;AACL,IAAA,QAAQ;IAER,WAAA,CACE,WAAgB,EACR,MAAsB,EAAA;QAAtB,IAAA,CAAA,MAAM,GAAN,MAAM;AAEd,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;AACzB,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;QAE/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACzC;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC;IAEA,GAAG,CAAC,GAAG,KAAU,EAAA;AACf,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;AAC5B,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,SAAS,CAAC,QAA4B,EAAE,GAAG,KAAU,EAAA;AACnD,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC;IACjD;IAEA,MAAM,CAAC,GAAG,KAAU,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IAC/B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;IACjB;AAEA,IAAA,KAAK,CAAC,IAAO,EAAA;QACX,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACjE;AAEA;;;;AAIG;AACH,IAAA,MAAM,CAAC,QAAkB,EAAE,GAAG,KAAU,EAAA;AACtC,QAAA,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,CAAC;AACpC,QAAA,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,EAAE;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC;QAC5D,MAAM,QAAQ,GACZ,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,IAAI,SAAS,CAAC;AACzC,cAAE;cACA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEtC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;IACvD;AAEA,IAAA,WAAW,CAAC,IAAO,EAAA;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9B;IAEQ,UAAU,CAChB,QAA4B,EAC5B,SAAS,GAAG,IAAI,CAAC,KAAK,EACtB,GAAG,KAAU,EAAA;QAEb,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AACxB,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;QACtD,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;AAE1C,QAAA,OAAO,KAAK;IACd;IAEQ,OAAO,CAAC,GAAG,KAAU,EAAA;QAC3B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,IAAI,KAAI;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAC3C,IAAI,CAAC,QAAQ,EAAE;gBACb;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;AACvD,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAChB;YACF;AACA,YAAA,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAEzB,YAAA,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,CAAC,EAAE,EAAE,CAAC;IACR;AAEA;;;;;AAKG;AACK,IAAA,IAAI,CACV,QAA4B,EAC5B,SAAc,EACd,GAAG,KAAU,EAAA;AAEb,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IACvD;IAEQ,YAAY,CAClB,EAAU,EACV,cAAA,GAA2B,EAAE,EAC7B,MAAM,GAAG,IAAI,CAAC,KAAK,EAAA;AAEnB,QAAA,IAAI,SAAmB;QACvB,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;YAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE;AAC5B,gBAAA,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACxC,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CACtC,EAAE,EACF,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5B,QAAQ,CACT;gBACD,IAAI,cAAc,EAAE;oBAClB,SAAS,GAAG,cAAc;AAC1B,oBAAA,OAAO,IAAI;gBACb;YACF;AAEA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,SAAS;IAClB;AAEQ,IAAA,qBAAqB,CAAC,QAAkB,EAAA;AAC9C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACpB,OAAO,IAAI,CAAC,KAAK;QACnB;QACA,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;AAC7C,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B;;AAGQ,IAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACzB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB;AAEQ,IAAA,IAAI,CAAC,QAAa,EAAA;QACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3E,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM;IACxD;;AAGQ,IAAA,YAAY,CAAC,EAAU,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,EAAA;AAChD,QAAA,IAAI,IAAO;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;YACjB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC3B,IAAI,GAAG,IAAI;AACX,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,QAAQ,EAAE;gBACZ,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC;gBACtC,IAAI,IAAI,EAAE;AACR,oBAAA,OAAO,IAAI;gBACb;YACF;AAEA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,iBAAiB,CAAC,OAAiB,EAAA;AACjC,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,aAAgB,EAAE,KAAK,KAAI;gBAChD,MAAM,QAAQ,GAAG;AACf,sBAAE,IAAI,CAAC,WAAW,CAAC,aAAa;AAChC,sBAAE,IAAI,CAAC,KAAK;gBACd,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC;YAC1C,CAAC,EAAE,IAAI,CAAC;QACV;aAAO;YACL,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC;IACF;AAEQ,IAAA,WAAW,CAAC,KAAa,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAA;AACtD,QAAA,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB;AAEQ,IAAA,eAAe,CAAC,IAAO,EAAA;QAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;IACjC;;AAGQ,IAAA,eAAe,CAAC,EAAU,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,EAAA;AACnD,QAAA,IAAI,QAAa;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;YACjB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC3B,QAAQ,GAAG,IAAI;AACf,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,QAAQ,EAAE;gBACZ,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC;gBAC7C,IAAI,QAAQ,EAAE;AACZ,oBAAA,OAAO,IAAI;gBACb;YACF;AAEA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,QAAQ;IACjB;;AAGQ,IAAA,OAAO,CAAC,KAAU,EAAA;QACxB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACvC,IAAI,QAAQ,EAAE;gBACZ,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACjB;AACA,YAAA,OAAO,IAAI;QACb,CAAC,EAAE,EAAS,CAAC;IACf;IAEQ,QAAQ,CAAC,EAAU,EAAE,QAAa,EAAA;AACxC,QAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAC9D;AACD;;SC5Qe,EAAE,GAAA;IAChB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AACxE;SAEgB,IAAI,GAAA;IAClB,MAAM,EAAE,GAAG,CAAA,EAAG,EAAE,EAAE,CAAA,EAAG,EAAE,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE,CAAA,EAAG,EAAE,EAAE,CAAA,EAAG,EAAE,EAAE,CAAA,CAAE;AACzE,IAAA,OAAO,EAAE,CAAC,WAAW,EAAE;AACzB;;ICJY;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS;AACT,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACb,CAAC,EALW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;MAOH,OAAO,CAAA;AACpB,IAAA,OAAO,GAAG,IAAI,OAAO,EAAiB;AACnC,IAAA,QAAQ;AAElB,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;IACA,IAAI,MAAM,CAAC,KAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;AACQ,IAAA,OAAO;;IAOf,SAAS,CAAC,QAAkB,EAAE,KAAW,EAAA;QACvC,IAAI,CAAC,KAAK,EAAE;AAEZ,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;AACvE,YAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;AAC5B,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;QAC3B;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,OAAO;IACrC;AACD;;AC5CD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"igo2-utils.mjs","sources":["../../../packages/utils/src/lib/base64.ts","../../../packages/utils/src/lib/cache.utils.ts","../../../packages/utils/src/lib/compression/compression.utils.ts","../../../packages/utils/src/lib/change.interface.ts","../../../packages/utils/src/lib/string-utils.ts","../../../packages/utils/src/lib/change.ts","../../../packages/utils/src/lib/date.utils.ts","../../../packages/utils/src/lib/dom.utils.ts","../../../packages/utils/src/lib/files/excel.ts","../../../packages/utils/src/lib/files/file.ts","../../../packages/utils/src/lib/object-utils.ts","../../../packages/utils/src/lib/number-utils.ts","../../../packages/utils/src/lib/strenum.ts","../../../packages/utils/src/lib/theme.utils.ts","../../../packages/utils/src/lib/tree/tree.ts","../../../packages/utils/src/lib/uuid.ts","../../../packages/utils/src/lib/watcher.ts","../../../packages/utils/src/public_api.ts","../../../packages/utils/src/igo2-utils.ts"],"sourcesContent":["/* eslint-disable */\n\nconst ALPHA =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nexport class Base64 {\n private static PADCHAR: string = '=';\n private static ALPHA: string = ALPHA;\n\n private static getByte(s: string, i: number): number {\n const x = s.charCodeAt(i);\n return x;\n }\n\n private static getByte64(s: string, i: number): number {\n const idx = this.ALPHA.indexOf(s.charAt(i));\n return idx;\n }\n\n public static decode(s: string): string {\n let pads = 0,\n i,\n b10,\n imax = s.length,\n x = [];\n\n s = String(s);\n\n if (imax === 0) {\n return s;\n }\n\n if (s.charAt(imax - 1) === this.PADCHAR) {\n pads = 1;\n if (s.charAt(imax - 2) === this.PADCHAR) {\n pads = 2;\n }\n imax -= 4;\n }\n\n for (i = 0; i < imax; i += 4) {\n b10 =\n (this.getByte64(s, i) << 18) |\n (this.getByte64(s, i + 1) << 12) |\n (this.getByte64(s, i + 2) << 6) |\n this.getByte64(s, i + 3);\n x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 255, b10 & 255));\n }\n\n switch (pads) {\n case 1:\n b10 =\n (this.getByte64(s, i) << 18) |\n (this.getByte64(s, i + 1) << 12) |\n (this.getByte64(s, i + 2) << 6);\n x.push(String.fromCharCode(b10 >> 16, (b10 >> 8) & 255));\n break;\n case 2:\n b10 = (this.getByte64(s, i) << 18) | (this.getByte64(s, i + 1) << 12);\n x.push(String.fromCharCode(b10 >> 16));\n break;\n }\n\n return x.join('');\n }\n\n public static encode(s: string): string {\n s = String(s);\n\n let i,\n b10,\n x = [],\n imax = s.length - (s.length % 3);\n\n if (s.length === 0) {\n return s;\n }\n\n for (i = 0; i < imax; i += 3) {\n b10 =\n (this.getByte(s, i) << 16) |\n (this.getByte(s, i + 1) << 8) |\n this.getByte(s, i + 2);\n x.push(this.ALPHA.charAt(b10 >> 18));\n x.push(this.ALPHA.charAt((b10 >> 12) & 63));\n x.push(this.ALPHA.charAt((b10 >> 6) & 63));\n x.push(this.ALPHA.charAt(b10 & 63));\n }\n\n switch (s.length - imax) {\n case 1:\n b10 = this.getByte(s, i) << 16;\n x.push(\n this.ALPHA.charAt(b10 >> 18) +\n this.ALPHA.charAt((b10 >> 12) & 63) +\n this.PADCHAR +\n this.PADCHAR\n );\n break;\n case 2:\n b10 = (this.getByte(s, i) << 16) | (this.getByte(s, i + 1) << 8);\n x.push(\n this.ALPHA.charAt(b10 >> 18) +\n this.ALPHA.charAt((b10 >> 12) & 63) +\n this.ALPHA.charAt((b10 >> 6) & 63) +\n this.PADCHAR\n );\n break;\n }\n\n return x.join('');\n }\n}\n","export function customCacheHasher(parameters: unknown[]): unknown[] {\n return parameters.map((param) => {\n if (\n typeof param === 'object' &&\n param != null &&\n typeof param.toString === 'function'\n ) {\n return param.toString();\n }\n return param !== undefined ? JSON.parse(JSON.stringify(param)) : param;\n });\n}\n","import { Observable, Observer, of } from 'rxjs';\n\nimport { CompressedData } from './compressedData.interface';\n\nfunction getNumber(v: number, endposition: number, length: number) {\n const mask = (1 << length) - 1;\n return (v >> endposition) & mask;\n}\n\nexport class Compression {\n private base64Index = new Map<string, number>();\n private indexBase64 = new Map<number, string>();\n\n constructor() {\n this.generateBase64Index();\n }\n\n private generateBase64Index() {\n // https://fr.wikipedia.org/wiki/Base64\n // A-Z => [0, 25]\n for (let i = 0; i < 26; i++) {\n this.base64Index.set(String.fromCharCode('A'.charCodeAt(0) + i), i);\n this.indexBase64.set(i, String.fromCharCode('A'.charCodeAt(0) + i));\n }\n // a-z => [26, 51]\n for (let i = 0; i < 26; i++) {\n this.base64Index.set(String.fromCharCode('a'.charCodeAt(0) + i), i + 26);\n this.indexBase64.set(i + 26, String.fromCharCode('a'.charCodeAt(0) + i));\n }\n // 0-9 => [52, 61]\n for (let i = 0; i < 10; i++) {\n this.base64Index.set(String.fromCharCode('0'.charCodeAt(0) + i), i + 52);\n this.indexBase64.set(i + 52, String.fromCharCode('0'.charCodeAt(0) + i));\n }\n // + / => [62, 63]\n this.base64Index.set('+', 62);\n this.base64Index.set('/', 63);\n this.indexBase64.set(62, '+');\n this.indexBase64.set(63, '/');\n }\n\n compressBlob(blob: Blob): Observable<CompressedData | null> {\n if (!blob) {\n return of(null);\n }\n\n const observable = new Observable((observer: Observer<CompressedData>) => {\n const reader = new FileReader();\n reader.readAsDataURL(blob);\n reader.onload = () => {\n const base64 = reader.result?.valueOf() as string;\n const text64 = base64.substr(base64.indexOf(',') + 1);\n const compressed = this.compressStringBase64(text64);\n const compressedData: CompressedData = {\n length: text64.length,\n type: blob.type,\n object: compressed\n };\n observer.next(compressedData);\n };\n });\n return observable;\n }\n\n decompressBlob(compressedData: CompressedData): Blob {\n const object = compressedData.object;\n const length = compressedData.length;\n const decompressed: string = this.decompressStringBase64(object, length);\n const byteCharacters = atob(decompressed);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: compressedData.type });\n return blob;\n }\n\n private compressStringBase64(s: string): string {\n let out = '';\n let bits = 16;\n let chr = 0;\n let rem: number;\n for (const c of s) {\n const value = this.base64Index.get(c);\n if (value === undefined) {\n continue;\n }\n if (bits > 6) {\n bits -= 6;\n chr += value << bits;\n } else {\n rem = 6 - bits;\n chr += value >> rem;\n out += String.fromCharCode(chr);\n chr = value << (16 - rem);\n bits = 16 - rem;\n }\n }\n if (s.length % 8 !== 0) {\n out += String.fromCharCode(chr);\n }\n return String.fromCharCode(9731) + out;\n }\n\n private decompressStringBase64(c: string, length: number): string {\n if (c.charCodeAt(0) !== 9731) {\n return c;\n }\n\n let chr: number;\n let rem: number;\n let bits = 16;\n let out = '';\n let j = 1;\n let value = c.charCodeAt(j);\n for (let i = 0; i < length; i++) {\n if (bits > 6) {\n bits -= 6;\n chr = getNumber(value, bits, 6);\n out += this.indexBase64.get(chr);\n } else {\n rem = 6 - bits;\n chr = getNumber(value, 0, bits) << rem;\n value = c.charCodeAt(++j);\n chr += getNumber(value, 16 - rem, rem);\n out += this.indexBase64.get(chr);\n bits = 16 - rem;\n }\n }\n return out;\n }\n}\n","export enum ChangeType {\n ADDED = 'added',\n DELETED = 'deleted',\n MODIFIED = 'modified'\n}\n\nexport interface Change {\n type: ChangeType;\n keysChanged?: KeyChange[];\n}\n\nexport interface KeyChange {\n key: string;\n oldValue: unknown;\n newValue: unknown;\n}\n\nexport interface GroupingChanges {\n added: ChangeItem[];\n deleted: ChangeItem[];\n modified: ChangeItem[];\n}\n\nexport interface ChangeItem {\n change: Change;\n value: any;\n oldValue?: any;\n newValue?: any;\n}\n","interface ChangeData {\n fis: number;\n fil: number;\n sbs: string;\n mtc: string;\n del: string;\n ins: string;\n}\n\ninterface SubData {\n fis: number;\n fil?: number;\n sbs: string;\n mtc: string;\n}\n\nexport class StringUtils {\n static diff(s1: string, s2: string, p = 4): string {\n if (!s1 && !s2) {\n return '';\n }\n if (!s1) {\n return '<span class=\"inserted\">' + s2 + '</span>';\n }\n if (!s2) {\n return '<span class=\"deleted\">' + s1 + '</span>';\n }\n s1 = s1.toString();\n s2 = s2.toString();\n const changeData = StringUtils.getChanges(s1, s2, '', p);\n const nextS = s2.slice(\n changeData.mtc.length + changeData.ins.length + changeData.sbs.length\n ); // remaining part of \"s\"\n const nextThis = s1.slice(\n changeData.mtc.length + changeData.del.length + changeData.sbs.length\n ); // remaining part of \"this\"\n let result: string; // the glorious result\n if (changeData.del.length > 0) {\n changeData.del = '<span class=\"deleted\">' + changeData.del + '</span>';\n }\n if (changeData.ins.length > 0) {\n changeData.ins = '<span class=\"inserted\">' + changeData.ins + '</span>';\n }\n result = changeData.mtc + changeData.del + changeData.ins + changeData.sbs;\n result +=\n nextThis !== '' || nextS !== ''\n ? StringUtils.diff(nextThis, nextS, p)\n : '';\n return result;\n }\n\n private static getMatchingSubstring(s: string, l: string[], m: string) {\n // returns the first matching substring in-between the two strings\n let i = 0;\n let match = false;\n const slen = s.length;\n const o = { fis: slen, mtc: m, sbs: '' }; // temporary object used to construct the cd (change data) object\n\n while (i < slen) {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n l[i] === s[i]\n ? match\n ? (o.sbs += s[i]) // o.sbs holds the matching substring itsef\n : ((match = true), (o.fis = i), (o.sbs = s[i]))\n : match\n ? (i = slen) // stop after the first found substring\n : // eslint-disable-next-line no-self-assign\n (i = i);\n ++i;\n }\n return o;\n }\n\n private static getChanges(\n s1: string,\n s2: string,\n m: string,\n p: number\n ): ChangeData {\n const isThisLonger = s1.length >= s1.length ? true : false;\n const [longer, shorter_init] = isThisLonger ? [s1, s2] : [s2, s1]; // assignment of longer and shorter by es6 destructuring\n let shorter = shorter_init;\n let bi = 0; // base index designating the index of first mismacthing character in both strings\n\n while (shorter[bi] === longer[bi] && bi < shorter.length) {\n ++bi;\n } // make bi the index of first mismatching character\n const longerArr = longer.split('').slice(bi); // as the longer string will be rotated it is converted into array\n shorter = shorter.slice(bi); // shorter and longer now starts from the first mismatching character\n\n const len = longerArr.length; // length of the longer string\n let cd: ChangeData = {\n fis: shorter.length, // the index of matching string in the shorter string\n fil: len, // the index of matching string in the longer string\n sbs: '', // the matching substring itself\n mtc: m + s2.slice(0, bi),\n del: '',\n ins: ''\n }; // if exists mtc holds the matching string at the front\n let sub: SubData = { fis: cd.fis, fil: cd.fil, sbs: '', mtc: cd.mtc }; // returned substring per 1 character rotation of the longer string\n\n if (shorter !== '') {\n for (let rc = 0; rc < len && sub.sbs.length < p; rc++) {\n // rc -> rotate count, p -> precision factor\n sub = StringUtils.getMatchingSubstring(\n shorter,\n StringUtils.rotateArray(longerArr, rc),\n cd.mtc\n ); // rotate longer string 1 char and get substring\n sub.fil =\n rc < len - sub.fis\n ? sub.fis + rc // mismatch is longer than the mismatch in short\n : sub.fis - len + rc; // mismatch is shorter than the mismatch in short\n if (sub.sbs.length > cd.sbs.length) {\n cd = { ...cd, ...sub }; // only keep the one with the longest substring.\n }\n }\n }\n // insert the mismatching delete subsrt and insert substr to the cd object and attach the previous substring\n [cd.del, cd.ins] = isThisLonger\n ? [longerArr.slice(0, cd.fil).join(''), shorter.slice(0, cd.fis)]\n : [shorter.slice(0, cd.fis), longerArr.slice(0, cd.fil).join('')];\n return cd.del.indexOf(' ') === -1 ||\n cd.ins.indexOf(' ') === -1 ||\n cd.del === '' ||\n cd.ins === '' ||\n cd.sbs === ''\n ? cd\n : StringUtils.getChanges(cd.del, cd.ins, cd.mtc, p);\n }\n\n private static rotateArray(array: string[], n: number) {\n const len = array.length;\n const res = new Array(array.length);\n if (n % len === 0) {\n return array.slice();\n } else {\n for (let i = 0; i < len; i++) {\n res[i] = array[(i + (len + (n % len))) % len];\n }\n }\n return res;\n }\n\n static isValidNumber(value: string): boolean {\n return !isNaN(Number(value));\n }\n\n static isOctalNumber(value: string): boolean {\n return (\n StringUtils.isValidNumber(value) &&\n value.startsWith('0') &&\n value.length > 1\n );\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeType, GroupingChanges, KeyChange } from './change.interface';\nimport { StringUtils } from './string-utils';\n\nexport class ChangeUtils {\n static findChanges(\n obj1: any[],\n obj2: any[],\n ignoreKeys: string[] = []\n ): GroupingChanges {\n const items: GroupingChanges = {\n added: [],\n deleted: [],\n modified: []\n };\n\n if (!obj1 || !obj2) {\n return items;\n }\n\n const obj1Clone: Record<string, unknown>[] = [...obj1];\n const obj2Clone: Record<string, unknown>[] = [...obj2];\n\n for (const fromItem of obj1Clone) {\n const index = obj2Clone.findIndex((s) => s.id === fromItem.id);\n\n if (index === -1) {\n items.deleted.push({\n change: { type: ChangeType.DELETED },\n value: fromItem\n });\n continue;\n }\n\n const toItem = obj2Clone.splice(index, 1)[0];\n const fromItemClone = JSON.parse(JSON.stringify(fromItem));\n const toItemClone = JSON.parse(JSON.stringify(toItem));\n\n const keysChanged = ChangeUtils.compareObject(\n fromItemClone,\n toItemClone,\n undefined,\n ignoreKeys\n );\n\n if (keysChanged.length) {\n items.modified.push({\n change: {\n type: ChangeType.MODIFIED,\n keysChanged\n },\n value: fromItemClone,\n oldValue: fromItem,\n newValue: toItem\n });\n }\n }\n\n items.added = obj2Clone.map((itemAdded) => {\n return {\n change: { type: ChangeType.ADDED },\n value: itemAdded\n };\n });\n\n return items;\n }\n\n private static compareObject(\n fromItem: any,\n toItem: any,\n baseKey?: string,\n ignoreKeys: string[] = []\n ): KeyChange[] {\n const fromItemClone = JSON.parse(JSON.stringify(fromItem));\n const toItemClone = JSON.parse(JSON.stringify(toItem));\n\n const keys: Set<string> = new Set([\n ...Object.keys(fromItem),\n ...Object.keys(toItem)\n ]);\n let keysChanged: KeyChange[] = [];\n keys.forEach((key) => {\n const keyString = baseKey ? `${baseKey}.${key}` : key;\n if (ignoreKeys.indexOf(keyString) !== -1) {\n return;\n }\n\n if (Array.isArray(fromItem[key])) {\n fromItem[key] = fromItem[key].join(',<br>');\n }\n if (Array.isArray(toItem[key])) {\n toItem[key] = toItem[key].join(',<br>');\n }\n\n if (\n typeof fromItem[key] === 'object' &&\n typeof toItem[key] === 'object' &&\n fromItem[key] !== null &&\n toItem[key] !== null\n ) {\n keysChanged = keysChanged.concat(\n this.compareObject(fromItem[key], toItem[key], keyString)\n );\n } else {\n if (fromItem[key] !== toItem[key]) {\n keysChanged.push({\n key: keyString,\n oldValue: fromItemClone[key],\n newValue: toItemClone[key]\n });\n fromItem[key] = StringUtils.diff(fromItem[key], toItem[key]);\n }\n }\n });\n\n return keysChanged;\n }\n}\n","const ISO8601_REGEX = new RegExp(\n '(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d.d+)|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d:[0-5]d)|(d{4}-[01]d-[0-3]dT[0-2]d:[0-5]d)'\n);\nconst ISO8601_UTCTIME_REGEX = new RegExp(\n '(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\\\\.[0-9]+)?(Z)?'\n);\n\nexport function isIsoDate(value: string): boolean {\n if (!ISO8601_REGEX.test(value) && !ISO8601_UTCTIME_REGEX.test(value)) {\n return false;\n }\n const d = new Date(value);\n return d instanceof Date && !isNaN(d.getTime());\n}\n\nexport const TimeFrame = ['now', 'today'] as const;\nexport type TimeFrame = (typeof TimeFrame)[number];\n\nexport function isTimeFrame(\n value: Date | TimeFrame | string | number\n): value is TimeFrame {\n return (\n typeof value === 'string' &&\n TimeFrame.includes(value.toLowerCase() as TimeFrame)\n );\n}\n\nexport function resolveDate(input: Date | TimeFrame): Date | null {\n if (isTimeFrame(input)) {\n return new Date();\n }\n return input instanceof Date ? input : null;\n}\n","export class DomUtils {\n static create<K extends keyof HTMLElementTagNameMap>(\n doc: Document,\n tagName: K,\n options?: Partial<HTMLElementTagNameMap[K]>\n ): HTMLElementTagNameMap[K] {\n const el = doc.createElement(tagName);\n\n for (const key in options) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (el as any)[key] = options[key as keyof typeof options];\n }\n\n return el;\n }\n\n static remove(node: HTMLElement | SVGElement): void {\n if (!node.parentNode) {\n return;\n }\n node.parentNode.removeChild(node);\n }\n}\n","import type {\n ColInfo,\n JSON2SheetOpts,\n WorkBook,\n WorkSheet,\n WritingOptions\n} from 'xlsx';\n\nexport async function createExcelWorkBook(\n workSheet?: WorkSheet,\n workSheetName?: string\n): Promise<WorkBook> {\n const { utils } = await import('xlsx');\n\n return utils.book_new(workSheet, workSheetName);\n}\nexport async function addExcelSheetToWorkBook<T = Record<string, unknown>>(\n title: string,\n rows: T[] | string,\n workBook: WorkBook,\n opts?: {\n json2SheetOpts?: JSON2SheetOpts;\n bookAppendSheetOpts?: { roll?: boolean };\n }\n): Promise<void> {\n const { utils } = await import('xlsx');\n\n const values = typeof rows === 'string' ? JSON.parse(rows) : rows;\n\n const worksheet = utils.json_to_sheet(values, opts?.json2SheetOpts);\n\n /* calculate column width */\n if (rows?.length) {\n worksheet['!cols'] = getColumnsInfo(values);\n }\n\n const SHEET_NAME_MAX_LENGTH = 31;\n let sheetName =\n title.length >= SHEET_NAME_MAX_LENGTH\n ? title.substring(0, SHEET_NAME_MAX_LENGTH)\n : title;\n\n if (workBook.SheetNames.includes(sheetName)) {\n sheetName = `${sheetName.substring(0, SHEET_NAME_MAX_LENGTH - 3)}_${workBook.SheetNames.length}`;\n }\n\n utils.book_append_sheet(\n workBook,\n worksheet,\n sheetName,\n opts?.bookAppendSheetOpts?.roll\n );\n}\n\nexport async function writeExcelFile(\n workBook: WorkBook,\n filename: string,\n opts?: WritingOptions\n) {\n const cleanedFileName = filename.toLowerCase().endsWith('.xlsx')\n ? filename.slice(0, -5)\n : filename;\n const { writeFile } = await import('xlsx');\n writeFile(workBook, `${cleanedFileName}.xlsx`, opts);\n}\n\nfunction getColumnsInfo<T extends Record<string, unknown>>(\n rows: T[]\n): ColInfo[] {\n const columns = Object.keys(rows[0]);\n return columns.map((column) => ({\n wch: getColumnMaxWidth(column, rows)\n }));\n}\n\nfunction getColumnMaxWidth<T extends Record<string, unknown>>(\n column: string,\n rows: T[]\n): number {\n return rows.reduce(\n (width, row) => Math.max(width, row[column]?.toString().length ?? 0),\n column.length\n );\n}\n","/**\n * Trigger download of a file\n *\n * @param content File content\n * @param mimeType File mime type\n * @param fileName File name\n */\nexport function downloadContent(\n content: string,\n mimeType: string,\n fileName: string\n) {\n const uri = `data:${mimeType},${encodeURIComponent(content)}`;\n downloadFromUri(uri, fileName);\n}\n\nexport function downloadBlob(blob: Blob, fileName: string) {\n const url = window.URL.createObjectURL(blob);\n downloadFromUri(url, fileName);\n}\n\n/**\n * Trigger download of a file\n *\n * @param content File content\n * @param mimeType File mime type\n * @param fileName File name\n */\nexport function downloadFromUri(uri: string, fileName: string) {\n const element = document.createElement('a');\n element.setAttribute('href', uri);\n element.setAttribute('download', fileName);\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n}\n\n/**\n * Validate if string is valid json object\n * @param jsonString\n * @return boolean\n */\nexport function isValidJSON(jsonString: string): boolean {\n try {\n return JSON.parse(jsonString) && !!jsonString;\n } catch {\n return false;\n }\n}\n","/* eslint-disable no-prototype-builtins */\nexport class ObjectUtils {\n static resolve<T, K extends keyof T>(obj: T, key: K | string): unknown {\n const keysArray = String(key)\n .replace(/\\[/g, '.')\n .replace(/\\]/g, '')\n .split('.');\n let current: unknown = obj;\n let value: unknown = undefined;\n while (keysArray.length) {\n if (typeof current !== 'object' || current === null) {\n return undefined;\n }\n const k = keysArray.shift() as string;\n value = current = (current as Record<string, unknown>)[k];\n }\n\n return value;\n }\n\n static isObject(item: unknown): item is Record<string, unknown> {\n return (\n !!item &&\n typeof item === 'object' &&\n !Array.isArray(item) &&\n item !== null &&\n !(item instanceof Date)\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static mergeDeep<T = any>(\n target: T,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n source: any,\n ignoreUndefined = false\n ): T {\n const output = Object.assign({}, target);\n if (ObjectUtils.isObject(target) && ObjectUtils.isObject(source)) {\n Object.keys(source)\n .filter((key) => !ignoreUndefined || source[key] !== undefined)\n .forEach((key) => {\n if (ObjectUtils.isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] });\n } else {\n (output as Record<string, unknown>)[key] = ObjectUtils.mergeDeep(\n target[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>,\n ignoreUndefined\n );\n }\n } else {\n Object.assign(output, { [key]: source[key] });\n }\n });\n }\n return output;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static copyDeep<T = any>(src: T): T {\n if (Array.isArray(src)) {\n return src.map((item) =>\n typeof item === 'object' && item !== null\n ? this.copyDeep(item as Record<string, unknown>)\n : item\n ) as T;\n } else if (this.isObject(src)) {\n const target = {} as T;\n for (const prop in src) {\n if (src.hasOwnProperty(prop)) {\n const value = (src as Record<string, unknown>)[prop];\n (target as Record<string, unknown>)[prop] =\n value && typeof value === 'object'\n ? this.copyDeep(value as Record<string, unknown>)\n : value;\n }\n }\n return target;\n }\n return src;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static removeDuplicateCaseInsensitive(obj: any) {\n const summaryCapitalizeObject: Record<string, { [k: string]: unknown }[]> =\n {};\n const capitalizeObject: Record<string, unknown> = {};\n const upperCaseCount: { key: string; count: number }[] = [];\n\n for (const property in obj) {\n if (obj.hasOwnProperty(property)) {\n const upperCaseProperty = property.toUpperCase();\n if (!summaryCapitalizeObject.hasOwnProperty(upperCaseProperty)) {\n summaryCapitalizeObject[upperCaseProperty] = [\n { [property]: obj[property] }\n ];\n } else {\n summaryCapitalizeObject[upperCaseProperty].push({\n [property]: obj[property]\n });\n }\n // counting the number of uppercase letters\n upperCaseCount.push({\n key: property,\n count: property.replace(/[^A-Z]/g, '').length\n });\n }\n }\n for (const capitalizedProperty in summaryCapitalizeObject) {\n if (summaryCapitalizeObject.hasOwnProperty(capitalizedProperty)) {\n const capitalizedPropertyObject =\n summaryCapitalizeObject[capitalizedProperty];\n if (capitalizedPropertyObject.length === 1) {\n // for single params (no duplicates)\n const singlePossibility = capitalizedPropertyObject[0];\n capitalizeObject[capitalizedProperty] =\n singlePossibility[Object.keys(singlePossibility)[0]];\n } else if (capitalizedPropertyObject.length > 1) {\n // defining the closest to lowercase property\n const paramClosestToLowercase = upperCaseCount\n .filter(\n (f) => f.key.toLowerCase() === capitalizedProperty.toLowerCase()\n )\n .reduce((prev, current) => {\n return prev.count < current.count ? prev : current;\n });\n capitalizeObject[paramClosestToLowercase.key.toUpperCase()] =\n obj[paramClosestToLowercase.key];\n }\n }\n }\n for (const property in obj) {\n if (obj.hasOwnProperty(property)) {\n delete obj[property];\n }\n }\n\n for (const property in capitalizeObject) {\n if (capitalizeObject.hasOwnProperty(property)) {\n obj[property] = capitalizeObject[property];\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static removeUndefined<T = any>(obj: T): T {\n if (Array.isArray(obj)) {\n return obj\n .filter((item) => item !== undefined)\n .map((item) =>\n typeof item === 'object'\n ? ObjectUtils.removeUndefined(item as Record<string, unknown>)\n : item\n ) as T;\n }\n\n if (ObjectUtils.isObject(obj)) {\n const output: Record<string, unknown> = {};\n Object.keys(obj)\n .filter((key) => obj[key] !== undefined)\n .forEach((key) => {\n output[key] =\n typeof obj[key] === 'object'\n ? ObjectUtils.removeUndefined(obj[key] as Record<string, unknown>)\n : obj[key];\n });\n return output as T;\n }\n\n return obj;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static removeNull<T = any>(obj: T): T {\n if (Array.isArray(obj)) {\n return obj\n .filter((item) => item !== null)\n .map((item) =>\n typeof item === 'object'\n ? ObjectUtils.removeNull(item as Record<string, unknown>)\n : item\n ) as T;\n }\n\n if (ObjectUtils.isObject(obj)) {\n const output: Record<string, unknown> = {};\n Object.keys(obj)\n .filter((key) => obj[key] !== null)\n .forEach((key) => {\n if (ObjectUtils.isObject(obj[key]) || Array.isArray(obj[key])) {\n output[key] = ObjectUtils.removeNull(\n obj[key] as Record<string, unknown>\n );\n } else {\n output[key] = obj[key];\n }\n });\n\n return output as T;\n }\n\n return obj;\n }\n\n static naturalCompare(\n a: unknown,\n b: unknown,\n direction = 'asc',\n nullsFirst?: boolean\n ): number {\n if (direction === 'desc') {\n [a, b] = [b, a];\n }\n\n // nullsFirst = undefined : end if direction = 'asc', first if direction = 'desc'\n // nullsFirst = true : always first\n // nullsFirst = false : always end\n if (\n a === null ||\n a === '' ||\n a === undefined ||\n b === null ||\n b === '' ||\n b === undefined\n ) {\n const nullScore =\n a === b\n ? 0\n : a === undefined\n ? 3\n : b === undefined\n ? -3\n : a === null\n ? 2\n : b === null\n ? -2\n : a === ''\n ? 1\n : -1;\n if (direction === 'desc') {\n return nullsFirst !== false ? nullScore : nullScore * -1;\n }\n return nullsFirst === true ? nullScore * -1 : nullScore;\n }\n\n const ax: [number, string][] = [];\n const bx: [number, string][] = [];\n const aStr = '' + a;\n const bStr = '' + b;\n\n aStr.replace(/(\\d+)|(\\D+)/g, (_, $1, $2) => {\n ax.push([$1 ? Number($1) : Infinity, $2 ?? '']);\n return '';\n });\n\n bStr.replace(/(\\d+)|(\\D+)/g, (_, $1, $2) => {\n bx.push([$1 ? Number($1) : Infinity, $2 ?? '']);\n return '';\n });\n\n while (ax.length && bx.length) {\n const an = ax.shift()!;\n const bn = bx.shift()!;\n const nn = an[0] - bn[0] || an[1].localeCompare(bn[1]);\n if (nn) {\n return nn;\n }\n }\n\n return ax.length - bx.length;\n }\n\n /**\n * Return true if two object are equivalent.\n * Objects are considered equivalent if they have the same properties and\n * if all of their properties (first-level only) share the same value.\n * @param obj1 First object\n * @param obj2 Second object\n * @returns Whether two objects are equivalent\n */\n static objectsAreEquivalent(\n obj1: Record<string, unknown>,\n obj2: Record<string, unknown>\n ): boolean {\n if (obj1 === obj2) {\n return true;\n }\n\n const obj1Props = Object.getOwnPropertyNames(obj1);\n const obj2Props = Object.getOwnPropertyNames(obj2);\n if (obj1Props.length !== obj2Props.length) {\n return false;\n }\n\n for (const prop of obj1Props) {\n if (obj1[prop] !== obj2[prop]) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Return a new object with an array of keys removed\n * @param obj Source object\n * @param keys Keys to remove\n * @returns A new object\n */\n static removeKeys(\n obj: Record<string, unknown>,\n keys: string[]\n ): Record<string, unknown> {\n return Object.keys(obj)\n .filter((key) => keys.indexOf(key) < 0)\n .reduce(\n (_obj, key) => {\n _obj[key] = obj[key];\n return _obj;\n },\n {} as Record<string, unknown>\n );\n }\n\n static isEmpty(obj: Record<string, unknown>): boolean {\n return Object.keys(obj).length === 0;\n }\n}\n","export class NumberUtils {\n static roundToNDecimal(num: number, decimal = 3): number {\n const roundFactor = Math.pow(10, decimal);\n return Math.round(num * roundFactor) / roundFactor;\n }\n}\n","/** Utility function to create a K:V from a list of strings */\nexport function strEnum<T extends string>(o: T[]): { [K in T]: K } {\n return o.reduce((res, key) => {\n res[key] = key;\n return res;\n }, Object.create(null));\n}\n","import { DomUtils } from './dom.utils';\n\nconst PATH_PREBUILT_THEMES = 'igo2/core/theming/prebuilt-themes';\nconst LINK_ID = 'theme-styles';\n\nexport function loadTheme(\n doc: Document,\n themeName: string,\n path: string = PATH_PREBUILT_THEMES\n): void {\n const src = `${path}/${themeName}.css`;\n const head = doc.getElementsByTagName('head')[0];\n\n const themeLink = doc.getElementById(LINK_ID) as HTMLLinkElement;\n\n if (themeLink) {\n themeLink.href = src;\n } else {\n createHtmlLink(doc, src, head);\n }\n}\n\nfunction createHtmlLink(doc: Document, src: string, parent: HTMLElement): void {\n const element = DomUtils.create(doc, 'link', {\n id: LINK_ID,\n rel: 'stylesheet',\n href: src\n });\n parent.appendChild(element);\n}\n","type TreeId = string | number;\nexport interface ITreeConfig<T> {\n getChildren: (dataNode: T) => T[] | undefined | null;\n getId: (dataNode: T) => TreeId;\n getLevel: (dataNode: T) => number;\n reverse?: boolean;\n}\n\nexport const TREE_SEPERATOR = '.';\n\nexport class Tree<T> {\n private _data: T[];\n\n getChildren: (dataNode: T) => T[] | undefined | null;\n getId: (dataNode: T) => TreeId;\n getLevel: (dataNode: T) => number;\n\n constructor(\n initialData: T[],\n private config: ITreeConfig<T>\n ) {\n this.getChildren = config.getChildren;\n this.getId = config.getId;\n this.getLevel = config.getLevel;\n\n this._data = this.sortDeep(initialData);\n }\n\n get data(): readonly T[] {\n return this._data;\n }\n\n get flattened(): readonly T[] {\n return this.flatten([...this.data]);\n }\n\n add(...nodes: T[]): T[] {\n this.sortDeep(nodes);\n this._data.unshift(...nodes);\n return nodes;\n }\n\n addBefore(beforeId: string | undefined, ...nodes: T[]): void {\n this.sortDeep(nodes);\n this._addBefore(beforeId, this._data, ...nodes);\n }\n\n remove(...nodes: T[]): T[] {\n return this._remove(...nodes);\n }\n\n clear(): void {\n this._data = [];\n }\n\n exist(node: T): boolean {\n const id = this.getId(node);\n return this.flattened.some((layer) => this.getId(layer) === id);\n }\n\n /**\n * Move a node to a different position\n * @param node\n * @param beforeTo The position of index into the tree. If -1 move at the end\n */\n moveTo(beforeTo: number[], ...nodes: T[]): T[] | undefined {\n const clonedBeforeTo = [...beforeTo];\n const lastIndex = clonedBeforeTo.pop()!;\n const recipient = this.getAncestorAtPosition(clonedBeforeTo);\n if (!recipient) {\n return;\n }\n\n const beforeId =\n lastIndex === -1 || lastIndex >= recipient.length\n ? undefined\n : this.getId(recipient[lastIndex]);\n\n const nodesToMove = nodes.filter((node) => beforeId !== this.getId(node));\n return this.move(beforeId, recipient, ...nodesToMove);\n }\n\n getPosition(node: T): number[] {\n const id = this.getId(node);\n return this._getPosition(id);\n }\n\n private _addBefore(\n beforeId: TreeId | undefined,\n recipient = this._data,\n ...nodes: T[]\n ): T[] {\n if (!beforeId) {\n recipient.push(...nodes);\n return nodes;\n }\n\n const beforeIndex = this.getIndex(beforeId, recipient);\n recipient.splice(beforeIndex, 0, ...nodes);\n\n return nodes;\n }\n\n private _remove(...nodes: T[]): T[] {\n return nodes.reduce((acc: T[], node) => {\n const ancestor = this.getNodeAncestor(node);\n if (!ancestor) {\n return acc;\n }\n\n const index = this.getIndex(this.getId(node), ancestor);\n if (index === -1) {\n return acc;\n }\n ancestor.splice(index, 1);\n\n return acc.concat(node);\n }, []);\n }\n\n /**\n * Move an node before an id\n * @param node Node to be move\n * @param recipient\n * @param beforeId\n */\n private move(\n beforeId: TreeId | undefined,\n recipient: T[],\n ...nodes: T[]\n ): T[] {\n this._remove(...nodes);\n return this._addBefore(beforeId, recipient, ...nodes);\n }\n\n private _getPosition(\n id: TreeId,\n ancestorsIndex: number[] = [],\n values = this._data\n ) {\n let indexList: number[];\n values.some((value, index) => {\n if (this.getId(value) === id) {\n indexList = ancestorsIndex.concat(index);\n return true;\n }\n\n const children = this.getChildren(value);\n if (children) {\n const groupIndexList = this._getPosition(\n id,\n ancestorsIndex.concat(index),\n children\n );\n if (groupIndexList) {\n indexList = groupIndexList;\n return true;\n }\n }\n\n return false;\n });\n return indexList!;\n }\n\n private getAncestorAtPosition(position: number[]) {\n if (!position.length) {\n return this._data;\n }\n const node = this.getNodeByPosition(position);\n if (!node) {\n return;\n }\n return this.getChildren(node);\n }\n\n /** Recursive */\n private sortDeep(data = this._data): T[] {\n data.forEach((node) => {\n const children = this.getChildren(node);\n if (children) {\n this.sortDeep(children);\n }\n });\n return this.sort(data);\n }\n\n private sort(children: T[]): T[] {\n const sorted = children.sort((a, b) => this.getLevel(a) - this.getLevel(b));\n return this.config.reverse ? sorted.reverse() : sorted;\n }\n\n /** Recursive */\n private _getNodeById(id: string, data = this._data): T | undefined {\n let node: T | undefined;\n data.some((item) => {\n if (this.getId(item) === id) {\n node = item;\n return true;\n }\n\n const children = this.getChildren(item);\n if (children) {\n node = this._getNodeById(id, children);\n if (node) {\n return true;\n }\n }\n\n return false;\n });\n return node;\n }\n\n getNodeByPosition(indexes: number[]): T | undefined {\n if (indexes.length > 1) {\n return indexes.reduce((previousValue: T | undefined, index) => {\n const ancestor = previousValue\n ? this.getChildren(previousValue)\n : this._data;\n return this._getByIndex(index, ancestor ?? undefined);\n }, undefined);\n } else {\n return this._getByIndex(indexes[0]);\n }\n }\n\n private _getByIndex(index: number, ancestor = this._data) {\n return ancestor[index];\n }\n\n private getNodeAncestor(node: T): T[] | undefined {\n const id = this.getId(node);\n return this.getAncestorById(id);\n }\n\n /** Recursive */\n private getAncestorById(id: TreeId, data = this._data): T[] | undefined {\n let ancestor: T[] | undefined;\n data.some((item) => {\n if (this.getId(item) === id) {\n ancestor = data;\n return true;\n }\n\n const children = this.getChildren(item);\n if (children) {\n ancestor = this.getAncestorById(id, children);\n if (ancestor) {\n return true;\n }\n }\n\n return false;\n });\n return ancestor;\n }\n\n /** Recursive */\n private flatten(nodes: T[]): T[] {\n return nodes.reduce((list, node) => {\n const children = this.getChildren(node);\n if (children) {\n const flattened = this.flatten(children);\n list.push(node, ...flattened);\n } else {\n list.push(node);\n }\n return list;\n }, [] as T[]);\n }\n\n private getIndex(id: TreeId, ancestor: T[]): number {\n return ancestor.findIndex((node) => this.getId(node) === id);\n }\n}\n","export function S4() {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n}\n\nexport function uuid() {\n const id = `${S4()}${S4()}-${S4()}-${S4()}-${S4()}-${S4()}${S4()}${S4()}`;\n return id.toLowerCase();\n}\n","import { Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nexport enum SubjectStatus {\n Error = 0,\n Done = 1,\n Working = 2,\n Waiting = 3\n}\n\nexport abstract class Watcher {\n public status$ = new Subject<SubjectStatus>();\n protected status$$!: Subscription;\n\n get status(): SubjectStatus | undefined {\n return this._status;\n }\n set status(value: SubjectStatus) {\n this._status = value;\n this.status$.next(value);\n }\n private _status?: SubjectStatus;\n\n protected abstract watch(): void;\n\n protected abstract unwatch(): void;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n subscribe(callback: Function, scope?: unknown) {\n this.watch();\n\n this.status$$ = this.status$.pipe(distinctUntilChanged()).subscribe(() => {\n callback.call(scope, this);\n });\n }\n\n unsubscribe() {\n this.unwatch();\n this.status$$?.unsubscribe();\n this.status = SubjectStatus.Waiting;\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/types/igo2-utils.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ declare class Compression {
|
|
|
23
23
|
private indexBase64;
|
|
24
24
|
constructor();
|
|
25
25
|
private generateBase64Index;
|
|
26
|
-
compressBlob(blob: Blob): Observable<CompressedData>;
|
|
26
|
+
compressBlob(blob: Blob): Observable<CompressedData | null>;
|
|
27
27
|
decompressBlob(compressedData: CompressedData): Blob;
|
|
28
28
|
private compressStringBase64;
|
|
29
29
|
private decompressStringBase64;
|
|
@@ -36,11 +36,12 @@ declare enum ChangeType {
|
|
|
36
36
|
}
|
|
37
37
|
interface Change {
|
|
38
38
|
type: ChangeType;
|
|
39
|
-
keysChanged?:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
keysChanged?: KeyChange[];
|
|
40
|
+
}
|
|
41
|
+
interface KeyChange {
|
|
42
|
+
key: string;
|
|
43
|
+
oldValue: unknown;
|
|
44
|
+
newValue: unknown;
|
|
44
45
|
}
|
|
45
46
|
interface GroupingChanges {
|
|
46
47
|
added: ChangeItem[];
|
|
@@ -63,7 +64,7 @@ declare function isIsoDate(value: string): boolean;
|
|
|
63
64
|
declare const TimeFrame: readonly ["now", "today"];
|
|
64
65
|
type TimeFrame = (typeof TimeFrame)[number];
|
|
65
66
|
declare function isTimeFrame(value: Date | TimeFrame | string | number): value is TimeFrame;
|
|
66
|
-
declare function resolveDate(input
|
|
67
|
+
declare function resolveDate(input: Date | TimeFrame): Date | null;
|
|
67
68
|
|
|
68
69
|
declare class DomUtils {
|
|
69
70
|
static create<K extends keyof HTMLElementTagNameMap>(doc: Document, tagName: K, options?: Partial<HTMLElementTagNameMap[K]>): HTMLElementTagNameMap[K];
|
|
@@ -71,7 +72,7 @@ declare class DomUtils {
|
|
|
71
72
|
}
|
|
72
73
|
|
|
73
74
|
declare function createExcelWorkBook(workSheet?: WorkSheet, workSheetName?: string): Promise<WorkBook>;
|
|
74
|
-
declare function addExcelSheetToWorkBook<T = Record<string, unknown>>(title: string, rows: T[], workBook: WorkBook, opts?: {
|
|
75
|
+
declare function addExcelSheetToWorkBook<T = Record<string, unknown>>(title: string, rows: T[] | string, workBook: WorkBook, opts?: {
|
|
75
76
|
json2SheetOpts?: JSON2SheetOpts;
|
|
76
77
|
bookAppendSheetOpts?: {
|
|
77
78
|
roll?: boolean;
|
|
@@ -104,31 +105,31 @@ declare function downloadFromUri(uri: string, fileName: string): void;
|
|
|
104
105
|
declare function isValidJSON(jsonString: string): boolean;
|
|
105
106
|
|
|
106
107
|
declare class ObjectUtils {
|
|
107
|
-
static resolve(obj:
|
|
108
|
-
static isObject(item:
|
|
109
|
-
static mergeDeep(target:
|
|
110
|
-
static copyDeep(src:
|
|
111
|
-
static removeDuplicateCaseInsensitive(obj:
|
|
112
|
-
static removeUndefined(obj:
|
|
113
|
-
static removeNull(obj:
|
|
114
|
-
static naturalCompare(a:
|
|
108
|
+
static resolve<T, K extends keyof T>(obj: T, key: K | string): unknown;
|
|
109
|
+
static isObject(item: unknown): item is Record<string, unknown>;
|
|
110
|
+
static mergeDeep<T = any>(target: T, source: any, ignoreUndefined?: boolean): T;
|
|
111
|
+
static copyDeep<T = any>(src: T): T;
|
|
112
|
+
static removeDuplicateCaseInsensitive(obj: any): void;
|
|
113
|
+
static removeUndefined<T = any>(obj: T): T;
|
|
114
|
+
static removeNull<T = any>(obj: T): T;
|
|
115
|
+
static naturalCompare(a: unknown, b: unknown, direction?: string, nullsFirst?: boolean): number;
|
|
115
116
|
/**
|
|
116
117
|
* Return true if two object are equivalent.
|
|
117
118
|
* Objects are considered equivalent if they have the same properties and
|
|
118
119
|
* if all of their properties (first-level only) share the same value.
|
|
119
120
|
* @param obj1 First object
|
|
120
121
|
* @param obj2 Second object
|
|
121
|
-
* @returns Whether two objects
|
|
122
|
+
* @returns Whether two objects are equivalent
|
|
122
123
|
*/
|
|
123
|
-
static objectsAreEquivalent(obj1:
|
|
124
|
+
static objectsAreEquivalent(obj1: Record<string, unknown>, obj2: Record<string, unknown>): boolean;
|
|
124
125
|
/**
|
|
125
126
|
* Return a new object with an array of keys removed
|
|
126
127
|
* @param obj Source object
|
|
127
128
|
* @param keys Keys to remove
|
|
128
129
|
* @returns A new object
|
|
129
130
|
*/
|
|
130
|
-
static removeKeys(obj:
|
|
131
|
-
static isEmpty(obj:
|
|
131
|
+
static removeKeys(obj: Record<string, unknown>, keys: string[]): Record<string, unknown>;
|
|
132
|
+
static isEmpty(obj: Record<string, unknown>): boolean;
|
|
132
133
|
}
|
|
133
134
|
|
|
134
135
|
declare class NumberUtils {
|
|
@@ -178,7 +179,7 @@ declare class Tree<T> {
|
|
|
178
179
|
* @param node
|
|
179
180
|
* @param beforeTo The position of index into the tree. If -1 move at the end
|
|
180
181
|
*/
|
|
181
|
-
moveTo(beforeTo: number[], ...nodes: T[]): T[];
|
|
182
|
+
moveTo(beforeTo: number[], ...nodes: T[]): T[] | undefined;
|
|
182
183
|
getPosition(node: T): number[];
|
|
183
184
|
private _addBefore;
|
|
184
185
|
private _remove;
|
|
@@ -196,7 +197,7 @@ declare class Tree<T> {
|
|
|
196
197
|
private sort;
|
|
197
198
|
/** Recursive */
|
|
198
199
|
private _getNodeById;
|
|
199
|
-
getNodeByPosition(indexes: number[]): T;
|
|
200
|
+
getNodeByPosition(indexes: number[]): T | undefined;
|
|
200
201
|
private _getByIndex;
|
|
201
202
|
private getNodeAncestor;
|
|
202
203
|
/** Recursive */
|
|
@@ -222,14 +223,14 @@ declare enum SubjectStatus {
|
|
|
222
223
|
declare abstract class Watcher {
|
|
223
224
|
status$: Subject<SubjectStatus>;
|
|
224
225
|
protected status$$: Subscription;
|
|
225
|
-
get status(): SubjectStatus;
|
|
226
|
+
get status(): SubjectStatus | undefined;
|
|
226
227
|
set status(value: SubjectStatus);
|
|
227
|
-
private _status
|
|
228
|
-
protected abstract watch():
|
|
229
|
-
protected abstract unwatch():
|
|
230
|
-
subscribe(callback: Function, scope?:
|
|
228
|
+
private _status?;
|
|
229
|
+
protected abstract watch(): void;
|
|
230
|
+
protected abstract unwatch(): void;
|
|
231
|
+
subscribe(callback: Function, scope?: unknown): void;
|
|
231
232
|
unsubscribe(): void;
|
|
232
233
|
}
|
|
233
234
|
|
|
234
235
|
export { Base64, ChangeType, ChangeUtils, Compression, DomUtils, NumberUtils, ObjectUtils, S4, StringUtils, SubjectStatus, TREE_SEPERATOR, TimeFrame, Tree, Watcher, addExcelSheetToWorkBook, createExcelWorkBook, customCacheHasher, downloadBlob, downloadContent, downloadFromUri, isIsoDate, isTimeFrame, isValidJSON, loadTheme, resolveDate, strEnum, uuid, writeExcelFile };
|
|
235
|
-
export type { Change, ChangeItem, CompressedData, GroupingChanges, ITreeConfig, OptionalRequired };
|
|
236
|
+
export type { Change, ChangeItem, CompressedData, GroupingChanges, ITreeConfig, KeyChange, OptionalRequired };
|