@tspro/ts-utils-lib 1.2.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/index.d.mts +97 -43
- package/dist/index.d.ts +97 -43
- package/dist/index.js +106 -3
- package/dist/index.mjs +106 -3
- package/package.json +12 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare function isArray<T>(a: T[] | unknown): a is T[];
|
|
1
|
+
declare function isArray$1<T>(a: T[] | unknown): a is T[];
|
|
2
2
|
declare function toArray<T>(a: T | T[]): Array<T>;
|
|
3
3
|
declare function duplicate<T>(a: T[] | undefined): T[] | undefined;
|
|
4
4
|
declare function removeDuplicates<T>(a: T[]): T[];
|
|
@@ -11,20 +11,19 @@ declare function getRangeArray(start: number, end: number): number[];
|
|
|
11
11
|
declare function arrayContains<T extends unknown>(arg: T[], item: T): boolean;
|
|
12
12
|
declare function chunckArray<A>(arr: ReadonlyArray<A>, chunckSize: number): A[][];
|
|
13
13
|
|
|
14
|
-
declare const index$
|
|
15
|
-
declare const index$
|
|
16
|
-
declare const index$
|
|
17
|
-
declare const index$
|
|
18
|
-
declare const index$
|
|
19
|
-
declare const index$
|
|
20
|
-
declare const index$
|
|
21
|
-
declare const index$
|
|
22
|
-
declare const index$
|
|
23
|
-
declare const index$
|
|
24
|
-
declare const index$
|
|
25
|
-
declare
|
|
26
|
-
|
|
27
|
-
export { index$7_arrayContains as arrayContains, index$7_chunckArray as chunckArray, index$7_duplicate as duplicate, index$7_fillArray as fillArray, index$7_getRangeArray as getRangeArray, index$7_getSequenceArray as getSequenceArray, index$7_isArray as isArray, index$7_mapRangeArray as mapRangeArray, index$7_mapSequenceArray as mapSequenceArray, index$7_removeDuplicates as removeDuplicates, index$7_removeDuplicatesCmp as removeDuplicatesCmp, index$7_toArray as toArray };
|
|
14
|
+
declare const index$8_arrayContains: typeof arrayContains;
|
|
15
|
+
declare const index$8_chunckArray: typeof chunckArray;
|
|
16
|
+
declare const index$8_duplicate: typeof duplicate;
|
|
17
|
+
declare const index$8_fillArray: typeof fillArray;
|
|
18
|
+
declare const index$8_getRangeArray: typeof getRangeArray;
|
|
19
|
+
declare const index$8_getSequenceArray: typeof getSequenceArray;
|
|
20
|
+
declare const index$8_mapRangeArray: typeof mapRangeArray;
|
|
21
|
+
declare const index$8_mapSequenceArray: typeof mapSequenceArray;
|
|
22
|
+
declare const index$8_removeDuplicates: typeof removeDuplicates;
|
|
23
|
+
declare const index$8_removeDuplicatesCmp: typeof removeDuplicatesCmp;
|
|
24
|
+
declare const index$8_toArray: typeof toArray;
|
|
25
|
+
declare namespace index$8 {
|
|
26
|
+
export { index$8_arrayContains as arrayContains, index$8_chunckArray as chunckArray, index$8_duplicate as duplicate, index$8_fillArray as fillArray, index$8_getRangeArray as getRangeArray, index$8_getSequenceArray as getSequenceArray, isArray$1 as isArray, index$8_mapRangeArray as mapRangeArray, index$8_mapSequenceArray as mapSequenceArray, index$8_removeDuplicates as removeDuplicates, index$8_removeDuplicatesCmp as removeDuplicatesCmp, index$8_toArray as toArray };
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
interface CSSProperties {
|
|
@@ -73,28 +72,28 @@ declare function getDimension(style?: CSSProperties): {
|
|
|
73
72
|
declare function styleLayoutChanged(style1?: CSSProperties, style2?: CSSProperties): boolean;
|
|
74
73
|
declare function getCanvasTextWidth(text: string, font: string): number;
|
|
75
74
|
|
|
76
|
-
type index$
|
|
77
|
-
declare const index$
|
|
78
|
-
declare const index$
|
|
79
|
-
declare const index$
|
|
80
|
-
declare const index$
|
|
81
|
-
declare const index$
|
|
82
|
-
declare const index$
|
|
83
|
-
declare const index$
|
|
84
|
-
declare const index$
|
|
85
|
-
declare const index$
|
|
86
|
-
declare const index$
|
|
87
|
-
declare const index$
|
|
88
|
-
declare const index$
|
|
89
|
-
declare const index$
|
|
90
|
-
declare const index$
|
|
91
|
-
declare const index$
|
|
92
|
-
declare const index$
|
|
93
|
-
declare const index$
|
|
94
|
-
declare const index$
|
|
95
|
-
declare const index$
|
|
96
|
-
declare namespace index$
|
|
97
|
-
export { type index$
|
|
75
|
+
type index$7_CSSProperties = CSSProperties;
|
|
76
|
+
declare const index$7_addClass: typeof addClass;
|
|
77
|
+
declare const index$7_appendTo: typeof appendTo;
|
|
78
|
+
declare const index$7_getButton: typeof getButton;
|
|
79
|
+
declare const index$7_getCanvas: typeof getCanvas;
|
|
80
|
+
declare const index$7_getCanvasTextWidth: typeof getCanvasTextWidth;
|
|
81
|
+
declare const index$7_getDimension: typeof getDimension;
|
|
82
|
+
declare const index$7_getHeight: typeof getHeight;
|
|
83
|
+
declare const index$7_getOffset: typeof getOffset;
|
|
84
|
+
declare const index$7_getPadding: typeof getPadding;
|
|
85
|
+
declare const index$7_getWidth: typeof getWidth;
|
|
86
|
+
declare const index$7_hasClass: typeof hasClass;
|
|
87
|
+
declare const index$7_removeClass: typeof removeClass;
|
|
88
|
+
declare const index$7_removeFromParent: typeof removeFromParent;
|
|
89
|
+
declare const index$7_setHeight: typeof setHeight;
|
|
90
|
+
declare const index$7_setOffset: typeof setOffset;
|
|
91
|
+
declare const index$7_setRect: typeof setRect;
|
|
92
|
+
declare const index$7_setVisibility: typeof setVisibility;
|
|
93
|
+
declare const index$7_setWidth: typeof setWidth;
|
|
94
|
+
declare const index$7_styleLayoutChanged: typeof styleLayoutChanged;
|
|
95
|
+
declare namespace index$7 {
|
|
96
|
+
export { type index$7_CSSProperties as CSSProperties, index$7_addClass as addClass, index$7_appendTo as appendTo, index$7_getButton as getButton, index$7_getCanvas as getCanvas, index$7_getCanvasTextWidth as getCanvasTextWidth, index$7_getDimension as getDimension, index$7_getHeight as getHeight, index$7_getOffset as getOffset, index$7_getPadding as getPadding, index$7_getWidth as getWidth, index$7_hasClass as hasClass, index$7_removeClass as removeClass, index$7_removeFromParent as removeFromParent, index$7_setHeight as setHeight, index$7_setOffset as setOffset, index$7_setRect as setRect, index$7_setVisibility as setVisibility, index$7_setWidth as setWidth, index$7_styleLayoutChanged as styleLayoutChanged };
|
|
98
97
|
}
|
|
99
98
|
|
|
100
99
|
type EnumObject = {
|
|
@@ -105,11 +104,58 @@ type EnumValue<E extends EnumObject> = E extends {
|
|
|
105
104
|
} ? V : never;
|
|
106
105
|
declare function getEnumValues<E extends EnumObject>(e: E): Array<EnumValue<E>>;
|
|
107
106
|
|
|
108
|
-
type index$
|
|
109
|
-
type index$
|
|
110
|
-
declare const index$
|
|
107
|
+
type index$6_EnumObject = EnumObject;
|
|
108
|
+
type index$6_EnumValue<E extends EnumObject> = EnumValue<E>;
|
|
109
|
+
declare const index$6_getEnumValues: typeof getEnumValues;
|
|
110
|
+
declare namespace index$6 {
|
|
111
|
+
export { type index$6_EnumObject as EnumObject, type index$6_EnumValue as EnumValue, index$6_getEnumValues as getEnumValues };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
declare function isUndefined(value: unknown): value is undefined;
|
|
115
|
+
declare function isNull(value: unknown): value is null;
|
|
116
|
+
declare function isObject$1(value: unknown): value is Record<string, unknown>;
|
|
117
|
+
declare function isObjectOrUndefined(value: unknown): value is Record<string, unknown> | undefined;
|
|
118
|
+
declare function isArray<T>(a: T[] | unknown): a is T[];
|
|
119
|
+
declare function isArrayOrUndefined(value: unknown): value is unknown[] | undefined;
|
|
120
|
+
declare function isString(value: unknown): value is string;
|
|
121
|
+
declare function isStringOrUndefined(value: unknown): value is string | undefined;
|
|
122
|
+
declare function isBoolean(value: unknown): value is boolean;
|
|
123
|
+
declare function isBooleanOrUndefined(value: unknown): value is boolean | undefined;
|
|
124
|
+
declare function isFunction(value: unknown): value is Function;
|
|
125
|
+
declare function isFunctionOrUndefined(value: unknown): value is Function | undefined;
|
|
126
|
+
declare function isNumber(value: unknown): value is number;
|
|
127
|
+
declare function isNumberOrUndefined(value: unknown): value is number | undefined;
|
|
128
|
+
declare function isEnumValue<E extends Record<string, string | number>>(value: unknown, enumObj: E, name?: string): value is E[keyof E];
|
|
129
|
+
declare function isEnumValueOrUndefined<E extends Record<string, string | number>>(value: unknown, enumObj: E, name?: string): value is E[keyof E] | undefined;
|
|
130
|
+
declare function isInteger$1(n: unknown): n is number;
|
|
131
|
+
declare function isIntegerEq(value: unknown, compareTo: number): value is number;
|
|
132
|
+
declare function isIntegerGt(value: unknown, compareTo: number): value is number;
|
|
133
|
+
declare function isIntegerGte(value: unknown, compareTo: number): value is number;
|
|
134
|
+
declare function isIntegerLt(value: unknown, compareTo: number): value is number;
|
|
135
|
+
declare function isIntegerLte(value: unknown, compareTo: number): value is number;
|
|
136
|
+
|
|
137
|
+
declare const index$5_isArray: typeof isArray;
|
|
138
|
+
declare const index$5_isArrayOrUndefined: typeof isArrayOrUndefined;
|
|
139
|
+
declare const index$5_isBoolean: typeof isBoolean;
|
|
140
|
+
declare const index$5_isBooleanOrUndefined: typeof isBooleanOrUndefined;
|
|
141
|
+
declare const index$5_isEnumValue: typeof isEnumValue;
|
|
142
|
+
declare const index$5_isEnumValueOrUndefined: typeof isEnumValueOrUndefined;
|
|
143
|
+
declare const index$5_isFunction: typeof isFunction;
|
|
144
|
+
declare const index$5_isFunctionOrUndefined: typeof isFunctionOrUndefined;
|
|
145
|
+
declare const index$5_isIntegerEq: typeof isIntegerEq;
|
|
146
|
+
declare const index$5_isIntegerGt: typeof isIntegerGt;
|
|
147
|
+
declare const index$5_isIntegerGte: typeof isIntegerGte;
|
|
148
|
+
declare const index$5_isIntegerLt: typeof isIntegerLt;
|
|
149
|
+
declare const index$5_isIntegerLte: typeof isIntegerLte;
|
|
150
|
+
declare const index$5_isNull: typeof isNull;
|
|
151
|
+
declare const index$5_isNumber: typeof isNumber;
|
|
152
|
+
declare const index$5_isNumberOrUndefined: typeof isNumberOrUndefined;
|
|
153
|
+
declare const index$5_isObjectOrUndefined: typeof isObjectOrUndefined;
|
|
154
|
+
declare const index$5_isString: typeof isString;
|
|
155
|
+
declare const index$5_isStringOrUndefined: typeof isStringOrUndefined;
|
|
156
|
+
declare const index$5_isUndefined: typeof isUndefined;
|
|
111
157
|
declare namespace index$5 {
|
|
112
|
-
export {
|
|
158
|
+
export { index$5_isArray as isArray, index$5_isArrayOrUndefined as isArrayOrUndefined, index$5_isBoolean as isBoolean, index$5_isBooleanOrUndefined as isBooleanOrUndefined, index$5_isEnumValue as isEnumValue, index$5_isEnumValueOrUndefined as isEnumValueOrUndefined, index$5_isFunction as isFunction, index$5_isFunctionOrUndefined as isFunctionOrUndefined, isInteger$1 as isInteger, index$5_isIntegerEq as isIntegerEq, index$5_isIntegerGt as isIntegerGt, index$5_isIntegerGte as isIntegerGte, index$5_isIntegerLt as isIntegerLt, index$5_isIntegerLte as isIntegerLte, index$5_isNull as isNull, index$5_isNumber as isNumber, index$5_isNumberOrUndefined as isNumberOrUndefined, isObject$1 as isObject, index$5_isObjectOrUndefined as isObjectOrUndefined, index$5_isString as isString, index$5_isStringOrUndefined as isStringOrUndefined, index$5_isUndefined as isUndefined };
|
|
113
159
|
}
|
|
114
160
|
|
|
115
161
|
declare function getMapKeys<K, V>(map: Map<K, V>): K[];
|
|
@@ -201,12 +247,20 @@ declare function insertAt(str: string, pos: number, insertStr: string): string;
|
|
|
201
247
|
* @param removeCount
|
|
202
248
|
*/
|
|
203
249
|
declare function removeAt(str: string, pos: number, removeCount: number): string;
|
|
250
|
+
/**
|
|
251
|
+
* Count number of char in string.
|
|
252
|
+
* @param str
|
|
253
|
+
* @param ch - must be single char.
|
|
254
|
+
* @returns number of chars in string.
|
|
255
|
+
*/
|
|
256
|
+
declare function charCount(str: string, ch: string): number;
|
|
204
257
|
/**
|
|
205
258
|
* "UndeclaredVariable" => "Undeclared variable"
|
|
206
259
|
* @param PascalString
|
|
207
260
|
*/
|
|
208
261
|
declare function makeSentenceFromPascal(PascalString: string): string;
|
|
209
262
|
|
|
263
|
+
declare const index$1_charCount: typeof charCount;
|
|
210
264
|
declare const index$1_chunkString: typeof chunkString;
|
|
211
265
|
declare const index$1_insertAt: typeof insertAt;
|
|
212
266
|
declare const index$1_makeSentenceFromPascal: typeof makeSentenceFromPascal;
|
|
@@ -215,11 +269,11 @@ declare const index$1_repeatString: typeof repeatString;
|
|
|
215
269
|
declare const index$1_replaceAt: typeof replaceAt;
|
|
216
270
|
declare const index$1_toCharArray: typeof toCharArray;
|
|
217
271
|
declare namespace index$1 {
|
|
218
|
-
export { index$1_chunkString as chunkString, index$1_insertAt as insertAt, index$1_makeSentenceFromPascal as makeSentenceFromPascal, index$1_removeAt as removeAt, index$1_repeatString as repeatString, index$1_replaceAt as replaceAt, index$1_toCharArray as toCharArray };
|
|
272
|
+
export { index$1_charCount as charCount, index$1_chunkString as chunkString, index$1_insertAt as insertAt, index$1_makeSentenceFromPascal as makeSentenceFromPascal, index$1_removeAt as removeAt, index$1_repeatString as repeatString, index$1_replaceAt as replaceAt, index$1_toCharArray as toCharArray };
|
|
219
273
|
}
|
|
220
274
|
|
|
221
275
|
declare namespace index {
|
|
222
|
-
export { index$
|
|
276
|
+
export { index$8 as Arr, index$7 as Dom, index$6 as Enum, index$5 as Is, index$4 as Map, index$3 as Math, index$2 as Obj, index$1 as Str };
|
|
223
277
|
}
|
|
224
278
|
|
|
225
279
|
declare namespace Assert {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare function isArray<T>(a: T[] | unknown): a is T[];
|
|
1
|
+
declare function isArray$1<T>(a: T[] | unknown): a is T[];
|
|
2
2
|
declare function toArray<T>(a: T | T[]): Array<T>;
|
|
3
3
|
declare function duplicate<T>(a: T[] | undefined): T[] | undefined;
|
|
4
4
|
declare function removeDuplicates<T>(a: T[]): T[];
|
|
@@ -11,20 +11,19 @@ declare function getRangeArray(start: number, end: number): number[];
|
|
|
11
11
|
declare function arrayContains<T extends unknown>(arg: T[], item: T): boolean;
|
|
12
12
|
declare function chunckArray<A>(arr: ReadonlyArray<A>, chunckSize: number): A[][];
|
|
13
13
|
|
|
14
|
-
declare const index$
|
|
15
|
-
declare const index$
|
|
16
|
-
declare const index$
|
|
17
|
-
declare const index$
|
|
18
|
-
declare const index$
|
|
19
|
-
declare const index$
|
|
20
|
-
declare const index$
|
|
21
|
-
declare const index$
|
|
22
|
-
declare const index$
|
|
23
|
-
declare const index$
|
|
24
|
-
declare const index$
|
|
25
|
-
declare
|
|
26
|
-
|
|
27
|
-
export { index$7_arrayContains as arrayContains, index$7_chunckArray as chunckArray, index$7_duplicate as duplicate, index$7_fillArray as fillArray, index$7_getRangeArray as getRangeArray, index$7_getSequenceArray as getSequenceArray, index$7_isArray as isArray, index$7_mapRangeArray as mapRangeArray, index$7_mapSequenceArray as mapSequenceArray, index$7_removeDuplicates as removeDuplicates, index$7_removeDuplicatesCmp as removeDuplicatesCmp, index$7_toArray as toArray };
|
|
14
|
+
declare const index$8_arrayContains: typeof arrayContains;
|
|
15
|
+
declare const index$8_chunckArray: typeof chunckArray;
|
|
16
|
+
declare const index$8_duplicate: typeof duplicate;
|
|
17
|
+
declare const index$8_fillArray: typeof fillArray;
|
|
18
|
+
declare const index$8_getRangeArray: typeof getRangeArray;
|
|
19
|
+
declare const index$8_getSequenceArray: typeof getSequenceArray;
|
|
20
|
+
declare const index$8_mapRangeArray: typeof mapRangeArray;
|
|
21
|
+
declare const index$8_mapSequenceArray: typeof mapSequenceArray;
|
|
22
|
+
declare const index$8_removeDuplicates: typeof removeDuplicates;
|
|
23
|
+
declare const index$8_removeDuplicatesCmp: typeof removeDuplicatesCmp;
|
|
24
|
+
declare const index$8_toArray: typeof toArray;
|
|
25
|
+
declare namespace index$8 {
|
|
26
|
+
export { index$8_arrayContains as arrayContains, index$8_chunckArray as chunckArray, index$8_duplicate as duplicate, index$8_fillArray as fillArray, index$8_getRangeArray as getRangeArray, index$8_getSequenceArray as getSequenceArray, isArray$1 as isArray, index$8_mapRangeArray as mapRangeArray, index$8_mapSequenceArray as mapSequenceArray, index$8_removeDuplicates as removeDuplicates, index$8_removeDuplicatesCmp as removeDuplicatesCmp, index$8_toArray as toArray };
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
interface CSSProperties {
|
|
@@ -73,28 +72,28 @@ declare function getDimension(style?: CSSProperties): {
|
|
|
73
72
|
declare function styleLayoutChanged(style1?: CSSProperties, style2?: CSSProperties): boolean;
|
|
74
73
|
declare function getCanvasTextWidth(text: string, font: string): number;
|
|
75
74
|
|
|
76
|
-
type index$
|
|
77
|
-
declare const index$
|
|
78
|
-
declare const index$
|
|
79
|
-
declare const index$
|
|
80
|
-
declare const index$
|
|
81
|
-
declare const index$
|
|
82
|
-
declare const index$
|
|
83
|
-
declare const index$
|
|
84
|
-
declare const index$
|
|
85
|
-
declare const index$
|
|
86
|
-
declare const index$
|
|
87
|
-
declare const index$
|
|
88
|
-
declare const index$
|
|
89
|
-
declare const index$
|
|
90
|
-
declare const index$
|
|
91
|
-
declare const index$
|
|
92
|
-
declare const index$
|
|
93
|
-
declare const index$
|
|
94
|
-
declare const index$
|
|
95
|
-
declare const index$
|
|
96
|
-
declare namespace index$
|
|
97
|
-
export { type index$
|
|
75
|
+
type index$7_CSSProperties = CSSProperties;
|
|
76
|
+
declare const index$7_addClass: typeof addClass;
|
|
77
|
+
declare const index$7_appendTo: typeof appendTo;
|
|
78
|
+
declare const index$7_getButton: typeof getButton;
|
|
79
|
+
declare const index$7_getCanvas: typeof getCanvas;
|
|
80
|
+
declare const index$7_getCanvasTextWidth: typeof getCanvasTextWidth;
|
|
81
|
+
declare const index$7_getDimension: typeof getDimension;
|
|
82
|
+
declare const index$7_getHeight: typeof getHeight;
|
|
83
|
+
declare const index$7_getOffset: typeof getOffset;
|
|
84
|
+
declare const index$7_getPadding: typeof getPadding;
|
|
85
|
+
declare const index$7_getWidth: typeof getWidth;
|
|
86
|
+
declare const index$7_hasClass: typeof hasClass;
|
|
87
|
+
declare const index$7_removeClass: typeof removeClass;
|
|
88
|
+
declare const index$7_removeFromParent: typeof removeFromParent;
|
|
89
|
+
declare const index$7_setHeight: typeof setHeight;
|
|
90
|
+
declare const index$7_setOffset: typeof setOffset;
|
|
91
|
+
declare const index$7_setRect: typeof setRect;
|
|
92
|
+
declare const index$7_setVisibility: typeof setVisibility;
|
|
93
|
+
declare const index$7_setWidth: typeof setWidth;
|
|
94
|
+
declare const index$7_styleLayoutChanged: typeof styleLayoutChanged;
|
|
95
|
+
declare namespace index$7 {
|
|
96
|
+
export { type index$7_CSSProperties as CSSProperties, index$7_addClass as addClass, index$7_appendTo as appendTo, index$7_getButton as getButton, index$7_getCanvas as getCanvas, index$7_getCanvasTextWidth as getCanvasTextWidth, index$7_getDimension as getDimension, index$7_getHeight as getHeight, index$7_getOffset as getOffset, index$7_getPadding as getPadding, index$7_getWidth as getWidth, index$7_hasClass as hasClass, index$7_removeClass as removeClass, index$7_removeFromParent as removeFromParent, index$7_setHeight as setHeight, index$7_setOffset as setOffset, index$7_setRect as setRect, index$7_setVisibility as setVisibility, index$7_setWidth as setWidth, index$7_styleLayoutChanged as styleLayoutChanged };
|
|
98
97
|
}
|
|
99
98
|
|
|
100
99
|
type EnumObject = {
|
|
@@ -105,11 +104,58 @@ type EnumValue<E extends EnumObject> = E extends {
|
|
|
105
104
|
} ? V : never;
|
|
106
105
|
declare function getEnumValues<E extends EnumObject>(e: E): Array<EnumValue<E>>;
|
|
107
106
|
|
|
108
|
-
type index$
|
|
109
|
-
type index$
|
|
110
|
-
declare const index$
|
|
107
|
+
type index$6_EnumObject = EnumObject;
|
|
108
|
+
type index$6_EnumValue<E extends EnumObject> = EnumValue<E>;
|
|
109
|
+
declare const index$6_getEnumValues: typeof getEnumValues;
|
|
110
|
+
declare namespace index$6 {
|
|
111
|
+
export { type index$6_EnumObject as EnumObject, type index$6_EnumValue as EnumValue, index$6_getEnumValues as getEnumValues };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
declare function isUndefined(value: unknown): value is undefined;
|
|
115
|
+
declare function isNull(value: unknown): value is null;
|
|
116
|
+
declare function isObject$1(value: unknown): value is Record<string, unknown>;
|
|
117
|
+
declare function isObjectOrUndefined(value: unknown): value is Record<string, unknown> | undefined;
|
|
118
|
+
declare function isArray<T>(a: T[] | unknown): a is T[];
|
|
119
|
+
declare function isArrayOrUndefined(value: unknown): value is unknown[] | undefined;
|
|
120
|
+
declare function isString(value: unknown): value is string;
|
|
121
|
+
declare function isStringOrUndefined(value: unknown): value is string | undefined;
|
|
122
|
+
declare function isBoolean(value: unknown): value is boolean;
|
|
123
|
+
declare function isBooleanOrUndefined(value: unknown): value is boolean | undefined;
|
|
124
|
+
declare function isFunction(value: unknown): value is Function;
|
|
125
|
+
declare function isFunctionOrUndefined(value: unknown): value is Function | undefined;
|
|
126
|
+
declare function isNumber(value: unknown): value is number;
|
|
127
|
+
declare function isNumberOrUndefined(value: unknown): value is number | undefined;
|
|
128
|
+
declare function isEnumValue<E extends Record<string, string | number>>(value: unknown, enumObj: E, name?: string): value is E[keyof E];
|
|
129
|
+
declare function isEnumValueOrUndefined<E extends Record<string, string | number>>(value: unknown, enumObj: E, name?: string): value is E[keyof E] | undefined;
|
|
130
|
+
declare function isInteger$1(n: unknown): n is number;
|
|
131
|
+
declare function isIntegerEq(value: unknown, compareTo: number): value is number;
|
|
132
|
+
declare function isIntegerGt(value: unknown, compareTo: number): value is number;
|
|
133
|
+
declare function isIntegerGte(value: unknown, compareTo: number): value is number;
|
|
134
|
+
declare function isIntegerLt(value: unknown, compareTo: number): value is number;
|
|
135
|
+
declare function isIntegerLte(value: unknown, compareTo: number): value is number;
|
|
136
|
+
|
|
137
|
+
declare const index$5_isArray: typeof isArray;
|
|
138
|
+
declare const index$5_isArrayOrUndefined: typeof isArrayOrUndefined;
|
|
139
|
+
declare const index$5_isBoolean: typeof isBoolean;
|
|
140
|
+
declare const index$5_isBooleanOrUndefined: typeof isBooleanOrUndefined;
|
|
141
|
+
declare const index$5_isEnumValue: typeof isEnumValue;
|
|
142
|
+
declare const index$5_isEnumValueOrUndefined: typeof isEnumValueOrUndefined;
|
|
143
|
+
declare const index$5_isFunction: typeof isFunction;
|
|
144
|
+
declare const index$5_isFunctionOrUndefined: typeof isFunctionOrUndefined;
|
|
145
|
+
declare const index$5_isIntegerEq: typeof isIntegerEq;
|
|
146
|
+
declare const index$5_isIntegerGt: typeof isIntegerGt;
|
|
147
|
+
declare const index$5_isIntegerGte: typeof isIntegerGte;
|
|
148
|
+
declare const index$5_isIntegerLt: typeof isIntegerLt;
|
|
149
|
+
declare const index$5_isIntegerLte: typeof isIntegerLte;
|
|
150
|
+
declare const index$5_isNull: typeof isNull;
|
|
151
|
+
declare const index$5_isNumber: typeof isNumber;
|
|
152
|
+
declare const index$5_isNumberOrUndefined: typeof isNumberOrUndefined;
|
|
153
|
+
declare const index$5_isObjectOrUndefined: typeof isObjectOrUndefined;
|
|
154
|
+
declare const index$5_isString: typeof isString;
|
|
155
|
+
declare const index$5_isStringOrUndefined: typeof isStringOrUndefined;
|
|
156
|
+
declare const index$5_isUndefined: typeof isUndefined;
|
|
111
157
|
declare namespace index$5 {
|
|
112
|
-
export {
|
|
158
|
+
export { index$5_isArray as isArray, index$5_isArrayOrUndefined as isArrayOrUndefined, index$5_isBoolean as isBoolean, index$5_isBooleanOrUndefined as isBooleanOrUndefined, index$5_isEnumValue as isEnumValue, index$5_isEnumValueOrUndefined as isEnumValueOrUndefined, index$5_isFunction as isFunction, index$5_isFunctionOrUndefined as isFunctionOrUndefined, isInteger$1 as isInteger, index$5_isIntegerEq as isIntegerEq, index$5_isIntegerGt as isIntegerGt, index$5_isIntegerGte as isIntegerGte, index$5_isIntegerLt as isIntegerLt, index$5_isIntegerLte as isIntegerLte, index$5_isNull as isNull, index$5_isNumber as isNumber, index$5_isNumberOrUndefined as isNumberOrUndefined, isObject$1 as isObject, index$5_isObjectOrUndefined as isObjectOrUndefined, index$5_isString as isString, index$5_isStringOrUndefined as isStringOrUndefined, index$5_isUndefined as isUndefined };
|
|
113
159
|
}
|
|
114
160
|
|
|
115
161
|
declare function getMapKeys<K, V>(map: Map<K, V>): K[];
|
|
@@ -201,12 +247,20 @@ declare function insertAt(str: string, pos: number, insertStr: string): string;
|
|
|
201
247
|
* @param removeCount
|
|
202
248
|
*/
|
|
203
249
|
declare function removeAt(str: string, pos: number, removeCount: number): string;
|
|
250
|
+
/**
|
|
251
|
+
* Count number of char in string.
|
|
252
|
+
* @param str
|
|
253
|
+
* @param ch - must be single char.
|
|
254
|
+
* @returns number of chars in string.
|
|
255
|
+
*/
|
|
256
|
+
declare function charCount(str: string, ch: string): number;
|
|
204
257
|
/**
|
|
205
258
|
* "UndeclaredVariable" => "Undeclared variable"
|
|
206
259
|
* @param PascalString
|
|
207
260
|
*/
|
|
208
261
|
declare function makeSentenceFromPascal(PascalString: string): string;
|
|
209
262
|
|
|
263
|
+
declare const index$1_charCount: typeof charCount;
|
|
210
264
|
declare const index$1_chunkString: typeof chunkString;
|
|
211
265
|
declare const index$1_insertAt: typeof insertAt;
|
|
212
266
|
declare const index$1_makeSentenceFromPascal: typeof makeSentenceFromPascal;
|
|
@@ -215,11 +269,11 @@ declare const index$1_repeatString: typeof repeatString;
|
|
|
215
269
|
declare const index$1_replaceAt: typeof replaceAt;
|
|
216
270
|
declare const index$1_toCharArray: typeof toCharArray;
|
|
217
271
|
declare namespace index$1 {
|
|
218
|
-
export { index$1_chunkString as chunkString, index$1_insertAt as insertAt, index$1_makeSentenceFromPascal as makeSentenceFromPascal, index$1_removeAt as removeAt, index$1_repeatString as repeatString, index$1_replaceAt as replaceAt, index$1_toCharArray as toCharArray };
|
|
272
|
+
export { index$1_charCount as charCount, index$1_chunkString as chunkString, index$1_insertAt as insertAt, index$1_makeSentenceFromPascal as makeSentenceFromPascal, index$1_removeAt as removeAt, index$1_repeatString as repeatString, index$1_replaceAt as replaceAt, index$1_toCharArray as toCharArray };
|
|
219
273
|
}
|
|
220
274
|
|
|
221
275
|
declare namespace index {
|
|
222
|
-
export { index$
|
|
276
|
+
export { index$8 as Arr, index$7 as Dom, index$6 as Enum, index$5 as Is, index$4 as Map, index$3 as Math, index$2 as Obj, index$1 as Str };
|
|
223
277
|
}
|
|
224
278
|
|
|
225
279
|
declare namespace Assert {
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* TsUtilsLib v1.
|
|
1
|
+
/* TsUtilsLib v1.4.0 | (c) 2023 PahkaSoft | Licensed under the MIT License */
|
|
2
2
|
"use strict";
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -40,6 +40,7 @@ __export(utils_exports, {
|
|
|
40
40
|
Arr: () => arr_exports,
|
|
41
41
|
Dom: () => dom_exports,
|
|
42
42
|
Enum: () => enum_exports,
|
|
43
|
+
Is: () => is_exports,
|
|
43
44
|
Map: () => map_exports,
|
|
44
45
|
Math: () => math_exports,
|
|
45
46
|
Obj: () => obj_exports,
|
|
@@ -699,6 +700,99 @@ function getCanvasTextWidth(text, font) {
|
|
|
699
700
|
return ctx.measureText(text).width;
|
|
700
701
|
}
|
|
701
702
|
|
|
703
|
+
// src/utils/is/index.ts
|
|
704
|
+
var is_exports = {};
|
|
705
|
+
__export(is_exports, {
|
|
706
|
+
isArray: () => isArray2,
|
|
707
|
+
isArrayOrUndefined: () => isArrayOrUndefined,
|
|
708
|
+
isBoolean: () => isBoolean,
|
|
709
|
+
isBooleanOrUndefined: () => isBooleanOrUndefined,
|
|
710
|
+
isEnumValue: () => isEnumValue,
|
|
711
|
+
isEnumValueOrUndefined: () => isEnumValueOrUndefined,
|
|
712
|
+
isFunction: () => isFunction,
|
|
713
|
+
isFunctionOrUndefined: () => isFunctionOrUndefined,
|
|
714
|
+
isInteger: () => isInteger2,
|
|
715
|
+
isIntegerEq: () => isIntegerEq,
|
|
716
|
+
isIntegerGt: () => isIntegerGt,
|
|
717
|
+
isIntegerGte: () => isIntegerGte,
|
|
718
|
+
isIntegerLt: () => isIntegerLt,
|
|
719
|
+
isIntegerLte: () => isIntegerLte,
|
|
720
|
+
isNull: () => isNull,
|
|
721
|
+
isNumber: () => isNumber,
|
|
722
|
+
isNumberOrUndefined: () => isNumberOrUndefined,
|
|
723
|
+
isObject: () => isObject,
|
|
724
|
+
isObjectOrUndefined: () => isObjectOrUndefined,
|
|
725
|
+
isString: () => isString,
|
|
726
|
+
isStringOrUndefined: () => isStringOrUndefined,
|
|
727
|
+
isUndefined: () => isUndefined
|
|
728
|
+
});
|
|
729
|
+
function isUndefined(value) {
|
|
730
|
+
return value === void 0;
|
|
731
|
+
}
|
|
732
|
+
function isNull(value) {
|
|
733
|
+
return value === null;
|
|
734
|
+
}
|
|
735
|
+
function isObject(value) {
|
|
736
|
+
return typeof value === "object" && value !== null && !isArray2(value);
|
|
737
|
+
}
|
|
738
|
+
function isObjectOrUndefined(value) {
|
|
739
|
+
return value === void 0 || isObject(value);
|
|
740
|
+
}
|
|
741
|
+
function isArray2(a) {
|
|
742
|
+
return !!a && Object.prototype.toString.call(a) === "[object Array]";
|
|
743
|
+
}
|
|
744
|
+
function isArrayOrUndefined(value) {
|
|
745
|
+
return value === void 0 || isArray2(value);
|
|
746
|
+
}
|
|
747
|
+
function isString(value) {
|
|
748
|
+
return typeof value === "string";
|
|
749
|
+
}
|
|
750
|
+
function isStringOrUndefined(value) {
|
|
751
|
+
return value === void 0 || typeof value === "string";
|
|
752
|
+
}
|
|
753
|
+
function isBoolean(value) {
|
|
754
|
+
return typeof value === "boolean";
|
|
755
|
+
}
|
|
756
|
+
function isBooleanOrUndefined(value) {
|
|
757
|
+
return value === void 0 || typeof value === "boolean";
|
|
758
|
+
}
|
|
759
|
+
function isFunction(value) {
|
|
760
|
+
return typeof value === "function";
|
|
761
|
+
}
|
|
762
|
+
function isFunctionOrUndefined(value) {
|
|
763
|
+
return value === void 0 || typeof value === "function";
|
|
764
|
+
}
|
|
765
|
+
function isNumber(value) {
|
|
766
|
+
return typeof value === "number";
|
|
767
|
+
}
|
|
768
|
+
function isNumberOrUndefined(value) {
|
|
769
|
+
return value === void 0 || typeof value === "number";
|
|
770
|
+
}
|
|
771
|
+
function isEnumValue(value, enumObj, name = "value") {
|
|
772
|
+
return getEnumValues(enumObj).some((v) => v === value);
|
|
773
|
+
}
|
|
774
|
+
function isEnumValueOrUndefined(value, enumObj, name = "value") {
|
|
775
|
+
return value === void 0 || getEnumValues(enumObj).some((v) => v === value);
|
|
776
|
+
}
|
|
777
|
+
function isInteger2(n) {
|
|
778
|
+
return typeof n === "number" && isFinite(n) && n === Math.trunc(n);
|
|
779
|
+
}
|
|
780
|
+
function isIntegerEq(value, compareTo) {
|
|
781
|
+
return isInteger2(value) && value === compareTo;
|
|
782
|
+
}
|
|
783
|
+
function isIntegerGt(value, compareTo) {
|
|
784
|
+
return isInteger2(value) && value > compareTo;
|
|
785
|
+
}
|
|
786
|
+
function isIntegerGte(value, compareTo) {
|
|
787
|
+
return isInteger2(value) && value >= compareTo;
|
|
788
|
+
}
|
|
789
|
+
function isIntegerLt(value, compareTo) {
|
|
790
|
+
return isInteger2(value) && value < compareTo;
|
|
791
|
+
}
|
|
792
|
+
function isIntegerLte(value, compareTo) {
|
|
793
|
+
return isInteger2(value) && value <= compareTo;
|
|
794
|
+
}
|
|
795
|
+
|
|
702
796
|
// src/utils/map/index.ts
|
|
703
797
|
var map_exports = {};
|
|
704
798
|
__export(map_exports, {
|
|
@@ -713,15 +807,16 @@ function getMapKeys(map) {
|
|
|
713
807
|
// src/utils/obj/index.ts
|
|
714
808
|
var obj_exports = {};
|
|
715
809
|
__export(obj_exports, {
|
|
716
|
-
isObject: () =>
|
|
810
|
+
isObject: () => isObject2
|
|
717
811
|
});
|
|
718
|
-
function
|
|
812
|
+
function isObject2(value) {
|
|
719
813
|
return typeof value === "object" && value !== null && !isArray(value);
|
|
720
814
|
}
|
|
721
815
|
|
|
722
816
|
// src/utils/str/index.ts
|
|
723
817
|
var str_exports = {};
|
|
724
818
|
__export(str_exports, {
|
|
819
|
+
charCount: () => charCount,
|
|
725
820
|
chunkString: () => chunkString,
|
|
726
821
|
insertAt: () => insertAt,
|
|
727
822
|
makeSentenceFromPascal: () => makeSentenceFromPascal,
|
|
@@ -764,6 +859,14 @@ function insertAt(str, pos, insertStr) {
|
|
|
764
859
|
function removeAt(str, pos, removeCount) {
|
|
765
860
|
return replaceAt(str, pos, removeCount, "");
|
|
766
861
|
}
|
|
862
|
+
function charCount(str, ch) {
|
|
863
|
+
if (ch.length !== 1 || str.length === 0) return 0;
|
|
864
|
+
let count = 0;
|
|
865
|
+
for (let i = 0; i < str.length; i++) {
|
|
866
|
+
if (str[i] === ch) count++;
|
|
867
|
+
}
|
|
868
|
+
return count;
|
|
869
|
+
}
|
|
767
870
|
function makeSentenceFromPascal(PascalString) {
|
|
768
871
|
if (PascalString === "") {
|
|
769
872
|
return "";
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* TsUtilsLib v1.
|
|
1
|
+
/* TsUtilsLib v1.4.0 | (c) 2023 PahkaSoft | Licensed under the MIT License */
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __export = (target, all) => {
|
|
@@ -13,6 +13,7 @@ __export(utils_exports, {
|
|
|
13
13
|
Arr: () => arr_exports,
|
|
14
14
|
Dom: () => dom_exports,
|
|
15
15
|
Enum: () => enum_exports,
|
|
16
|
+
Is: () => is_exports,
|
|
16
17
|
Map: () => map_exports,
|
|
17
18
|
Math: () => math_exports,
|
|
18
19
|
Obj: () => obj_exports,
|
|
@@ -672,6 +673,99 @@ function getCanvasTextWidth(text, font) {
|
|
|
672
673
|
return ctx.measureText(text).width;
|
|
673
674
|
}
|
|
674
675
|
|
|
676
|
+
// src/utils/is/index.ts
|
|
677
|
+
var is_exports = {};
|
|
678
|
+
__export(is_exports, {
|
|
679
|
+
isArray: () => isArray2,
|
|
680
|
+
isArrayOrUndefined: () => isArrayOrUndefined,
|
|
681
|
+
isBoolean: () => isBoolean,
|
|
682
|
+
isBooleanOrUndefined: () => isBooleanOrUndefined,
|
|
683
|
+
isEnumValue: () => isEnumValue,
|
|
684
|
+
isEnumValueOrUndefined: () => isEnumValueOrUndefined,
|
|
685
|
+
isFunction: () => isFunction,
|
|
686
|
+
isFunctionOrUndefined: () => isFunctionOrUndefined,
|
|
687
|
+
isInteger: () => isInteger2,
|
|
688
|
+
isIntegerEq: () => isIntegerEq,
|
|
689
|
+
isIntegerGt: () => isIntegerGt,
|
|
690
|
+
isIntegerGte: () => isIntegerGte,
|
|
691
|
+
isIntegerLt: () => isIntegerLt,
|
|
692
|
+
isIntegerLte: () => isIntegerLte,
|
|
693
|
+
isNull: () => isNull,
|
|
694
|
+
isNumber: () => isNumber,
|
|
695
|
+
isNumberOrUndefined: () => isNumberOrUndefined,
|
|
696
|
+
isObject: () => isObject,
|
|
697
|
+
isObjectOrUndefined: () => isObjectOrUndefined,
|
|
698
|
+
isString: () => isString,
|
|
699
|
+
isStringOrUndefined: () => isStringOrUndefined,
|
|
700
|
+
isUndefined: () => isUndefined
|
|
701
|
+
});
|
|
702
|
+
function isUndefined(value) {
|
|
703
|
+
return value === void 0;
|
|
704
|
+
}
|
|
705
|
+
function isNull(value) {
|
|
706
|
+
return value === null;
|
|
707
|
+
}
|
|
708
|
+
function isObject(value) {
|
|
709
|
+
return typeof value === "object" && value !== null && !isArray2(value);
|
|
710
|
+
}
|
|
711
|
+
function isObjectOrUndefined(value) {
|
|
712
|
+
return value === void 0 || isObject(value);
|
|
713
|
+
}
|
|
714
|
+
function isArray2(a) {
|
|
715
|
+
return !!a && Object.prototype.toString.call(a) === "[object Array]";
|
|
716
|
+
}
|
|
717
|
+
function isArrayOrUndefined(value) {
|
|
718
|
+
return value === void 0 || isArray2(value);
|
|
719
|
+
}
|
|
720
|
+
function isString(value) {
|
|
721
|
+
return typeof value === "string";
|
|
722
|
+
}
|
|
723
|
+
function isStringOrUndefined(value) {
|
|
724
|
+
return value === void 0 || typeof value === "string";
|
|
725
|
+
}
|
|
726
|
+
function isBoolean(value) {
|
|
727
|
+
return typeof value === "boolean";
|
|
728
|
+
}
|
|
729
|
+
function isBooleanOrUndefined(value) {
|
|
730
|
+
return value === void 0 || typeof value === "boolean";
|
|
731
|
+
}
|
|
732
|
+
function isFunction(value) {
|
|
733
|
+
return typeof value === "function";
|
|
734
|
+
}
|
|
735
|
+
function isFunctionOrUndefined(value) {
|
|
736
|
+
return value === void 0 || typeof value === "function";
|
|
737
|
+
}
|
|
738
|
+
function isNumber(value) {
|
|
739
|
+
return typeof value === "number";
|
|
740
|
+
}
|
|
741
|
+
function isNumberOrUndefined(value) {
|
|
742
|
+
return value === void 0 || typeof value === "number";
|
|
743
|
+
}
|
|
744
|
+
function isEnumValue(value, enumObj, name = "value") {
|
|
745
|
+
return getEnumValues(enumObj).some((v) => v === value);
|
|
746
|
+
}
|
|
747
|
+
function isEnumValueOrUndefined(value, enumObj, name = "value") {
|
|
748
|
+
return value === void 0 || getEnumValues(enumObj).some((v) => v === value);
|
|
749
|
+
}
|
|
750
|
+
function isInteger2(n) {
|
|
751
|
+
return typeof n === "number" && isFinite(n) && n === Math.trunc(n);
|
|
752
|
+
}
|
|
753
|
+
function isIntegerEq(value, compareTo) {
|
|
754
|
+
return isInteger2(value) && value === compareTo;
|
|
755
|
+
}
|
|
756
|
+
function isIntegerGt(value, compareTo) {
|
|
757
|
+
return isInteger2(value) && value > compareTo;
|
|
758
|
+
}
|
|
759
|
+
function isIntegerGte(value, compareTo) {
|
|
760
|
+
return isInteger2(value) && value >= compareTo;
|
|
761
|
+
}
|
|
762
|
+
function isIntegerLt(value, compareTo) {
|
|
763
|
+
return isInteger2(value) && value < compareTo;
|
|
764
|
+
}
|
|
765
|
+
function isIntegerLte(value, compareTo) {
|
|
766
|
+
return isInteger2(value) && value <= compareTo;
|
|
767
|
+
}
|
|
768
|
+
|
|
675
769
|
// src/utils/map/index.ts
|
|
676
770
|
var map_exports = {};
|
|
677
771
|
__export(map_exports, {
|
|
@@ -686,15 +780,16 @@ function getMapKeys(map) {
|
|
|
686
780
|
// src/utils/obj/index.ts
|
|
687
781
|
var obj_exports = {};
|
|
688
782
|
__export(obj_exports, {
|
|
689
|
-
isObject: () =>
|
|
783
|
+
isObject: () => isObject2
|
|
690
784
|
});
|
|
691
|
-
function
|
|
785
|
+
function isObject2(value) {
|
|
692
786
|
return typeof value === "object" && value !== null && !isArray(value);
|
|
693
787
|
}
|
|
694
788
|
|
|
695
789
|
// src/utils/str/index.ts
|
|
696
790
|
var str_exports = {};
|
|
697
791
|
__export(str_exports, {
|
|
792
|
+
charCount: () => charCount,
|
|
698
793
|
chunkString: () => chunkString,
|
|
699
794
|
insertAt: () => insertAt,
|
|
700
795
|
makeSentenceFromPascal: () => makeSentenceFromPascal,
|
|
@@ -737,6 +832,14 @@ function insertAt(str, pos, insertStr) {
|
|
|
737
832
|
function removeAt(str, pos, removeCount) {
|
|
738
833
|
return replaceAt(str, pos, removeCount, "");
|
|
739
834
|
}
|
|
835
|
+
function charCount(str, ch) {
|
|
836
|
+
if (ch.length !== 1 || str.length === 0) return 0;
|
|
837
|
+
let count = 0;
|
|
838
|
+
for (let i = 0; i < str.length; i++) {
|
|
839
|
+
if (str[i] === ch) count++;
|
|
840
|
+
}
|
|
841
|
+
return count;
|
|
842
|
+
}
|
|
740
843
|
function makeSentenceFromPascal(PascalString) {
|
|
741
844
|
if (PascalString === "") {
|
|
742
845
|
return "";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tspro/ts-utils-lib",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"author": "PahkaSoft",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -30,6 +30,16 @@
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
|
+
"files": [
|
|
34
|
+
"CHANGELOG.md",
|
|
35
|
+
"LICENSE",
|
|
36
|
+
"README.md",
|
|
37
|
+
"dist/**/*.js",
|
|
38
|
+
"dist/**/*.mjs",
|
|
39
|
+
"dist/**/*.d.ts",
|
|
40
|
+
"dist/**/*.d.mts",
|
|
41
|
+
"package.json"
|
|
42
|
+
],
|
|
33
43
|
"devDependencies": {
|
|
34
44
|
"@types/jasmine": "^5.1.8",
|
|
35
45
|
"benchmark": "^2.1.4",
|
|
@@ -42,6 +52,7 @@
|
|
|
42
52
|
"npm-watch": "^0.13.0",
|
|
43
53
|
"ts-loader": "^9.5.2",
|
|
44
54
|
"tsup": "^8.5.0",
|
|
55
|
+
"typedoc": "^0.28.7",
|
|
45
56
|
"typescript": "latest",
|
|
46
57
|
"webpack": "^5.100.0"
|
|
47
58
|
},
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/index.ts","../src/utils/arr/index.ts","../src/utils/math/index.ts","../src/utils/dom/index.ts","../src/utils/enum/index.ts","../src/modules/assert.ts","../src/modules/device.ts","../src/utils/map/index.ts","../src/utils/obj/index.ts","../src/utils/str/index.ts","../src/modules/cookies.ts","../src/core/stack.ts","../src/core/vec2.ts","../src/core/LRU-cache.ts","../src/core/small-int-cache.ts"],"sourcesContent":["export * as Utils from \"./utils\";\r\nexport * from \"./modules\";\r\nexport * from \"./core\";\r\n","export * as Arr from \"./arr\";\r\nexport * as Dom from \"./dom\";\r\nexport * as Enum from \"./enum\";\r\nexport * as Map from \"./map\";\r\nexport * as Math from \"./math\";\r\nexport * as Obj from \"./obj\";\r\nexport * as Str from \"./str\";\r\n","import { isInteger } from \"../math\";\r\n\r\nexport function isArray<T>(a: T[] | unknown): a is T[] {\r\n return !!a && Object.prototype.toString.call(a) === \"[object Array]\";\r\n}\r\n\r\nexport function toArray<T>(a: T | T[]): Array<T> {\r\n return isArray(a) ? a : [a];\r\n}\r\n\r\nexport function duplicate<T>(a: T[] | undefined) {\r\n return a === undefined ? a : a.slice();\r\n}\r\n\r\nexport function removeDuplicates<T>(a: T[]): T[] {\r\n return a.filter((item, pos, arr) => arr.indexOf(item) === pos);\r\n}\r\n\r\nexport function removeDuplicatesCmp<T>(arr: ReadonlyArray<T>, cmp: (t1: T, t2: T) => boolean): T[] {\r\n return arr.filter((t1, index, self) => index === self.findIndex(t2 => cmp(t1, t2)));\r\n}\r\n\r\nexport function fillArray<T>(fillValue: T, fillCount: number): T[] {\r\n if (!isInteger(fillCount) || fillCount < 0) {\r\n throw new Error(\"fillArray: Invalid fillCount = \" + fillCount);\r\n }\r\n return new Array<T>(fillCount).fill(fillValue);\r\n}\r\n\r\nexport function mapSequenceArray<T>(len: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(len) || len < 0) {\r\n throw new Error(\"mapSequenceArray: Invalid len = \" + len);\r\n }\r\n let arr: T[] = new Array(len);\r\n for (let i = 0; i < len; i++) { arr[i] = fn(i); }\r\n return arr;\r\n}\r\n\r\nexport function getSequenceArray(len: number): number[] {\r\n return mapSequenceArray(len, i => i);\r\n}\r\n\r\nexport function mapRangeArray<T>(start: number, end: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(start)) {\r\n throw new Error(\"mapRangeArray: Invalid start = \" + end);\r\n }\r\n if (!isInteger(end)) {\r\n throw new Error(\"mapRangeArray: Invalid end = \" + end);\r\n }\r\n let len = Math.abs(end - start) + 1;\r\n let arr: T[] = new Array(len);\r\n for (let i = 0, s = start, inc = Math.sign(end - start); i < len; s += inc, i++) { arr[i] = fn(s); }\r\n return arr;\r\n}\r\n\r\nexport function getRangeArray(start: number, end: number): number[] {\r\n return mapRangeArray(start, end, i => i);\r\n}\r\n\r\nexport function arrayContains<T extends unknown>(arg: T[], item: T): boolean {\r\n return arg.indexOf(item) >= 0;\r\n}\r\n\r\nexport function chunckArray<A>(arr: ReadonlyArray<A>, chunckSize: number): A[][] {\r\n if (!isInteger(chunckSize) || chunckSize < 1) {\r\n throw new Error(\"chunckArray: Invalid chunckSize = \" + chunckSize);\r\n }\r\n let result: A[][] = [];\r\n for (let i = 0; i < arr.length; i += chunckSize) {\r\n result.push(arr.slice(i, i + chunckSize));\r\n }\r\n return result;\r\n}\r\n","\r\nexport function isInteger(n: unknown): n is number {\r\n return typeof n === \"number\" && isFinite(n) && n === Math.trunc(n);\r\n}\r\n\r\nexport function linearToDecibels(linearVolume: number): number {\r\n if (!isFinite(linearVolume)) {\r\n throw new Error(\"linearToDecibel: Invalid linearVolume = \" + linearVolume);\r\n }\r\n else if (linearVolume <= 0) {\r\n return -Infinity;\r\n }\r\n else {\r\n return 20 * Math.log10(linearVolume);\r\n }\r\n}\r\n\r\nexport function mod(m: number, n: number) {\r\n return ((m % n) + n) % n;\r\n}\r\n\r\n/**\r\n * Convert number to roman number.\r\n * https://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter\r\n */\r\nexport function romanize(n: number) {\r\n if (!isInteger(n) || n < 0) {\r\n throw new Error(\"romanize: Invalid n = \" + n);\r\n }\r\n\r\n var digits = String(+n).split(\"\");\r\n var key = [\"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\",\r\n \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\",\r\n \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"];\r\n var roman = \"\", i = 3;\r\n while (i--) roman = (key[+digits.pop()! + (i * 10)] || \"\") + roman;\r\n return Array(+digits.join(\"\") + 1).join(\"M\") + roman;\r\n}\r\n\r\nexport function toOrdinalNumber(n: number) {\r\n if (!isInteger(n)) {\r\n throw new Error(\"toOrdinalNumber: Invalid n = \" + n);\r\n }\r\n\r\n const nStr = n.toString();\r\n const lastDigit = Number(nStr.charAt(nStr.length - 1));\r\n\r\n if (n === 1 || n >= 20 && lastDigit === 1) {\r\n return nStr + \"st\";\r\n }\r\n else if (n === 2 || n >= 20 && lastDigit === 2) {\r\n return nStr + \"nd\";\r\n }\r\n else if (n === 3 || n >= 20 && lastDigit === 3) {\r\n return nStr + \"rd\";\r\n }\r\n else {\r\n return nStr + \"th\";\r\n }\r\n}\r\n\r\nexport function interpolateCoord(startX: number, startY: number, endX: number, endY: number, t: number) {\r\n return {\r\n x: startX + (endX - startX) * t,\r\n y: startY + (endY - startY) * t\r\n }\r\n}\r\n\r\nexport function interpolateY(startX: number, startY: number, endX: number, endY: number, x: number) {\r\n let t = (x - startX) / (endX - startX);\r\n return startY + (endY - startY) * t;\r\n}\r\n\r\nexport function clamp(num: number, min: number, max: number) {\r\n return Math.min(Math.max(num, min), max);\r\n}\r\n\r\nexport function calcNormal(x1: number, y1: number, x2: number, y2: number) {\r\n let dx = x2 - x1;\r\n let dy = y2 - y1;\r\n\r\n let nx = -dy;\r\n let ny = dx;\r\n\r\n let len = Math.sqrt(nx * nx + ny * ny);\r\n\r\n if (len > 0) {\r\n nx /= len;\r\n ny /= len;\r\n }\r\n else {\r\n nx = 0;\r\n ny = 1;\r\n }\r\n\r\n return { nx, ny }\r\n}\r\n\r\nexport function sum(arr: number[]): number {\r\n return arr.reduce((prev, cur) => cur + prev, 0);\r\n}\r\n\r\n","import { Device } from \"../../modules/device\";\r\n\r\nexport interface CSSProperties {\r\n // Declare necessary css properties\r\n //[key: string]: string | number;\r\n padding?: string | number;\r\n paddingLeft?: string | number;\r\n paddingRight?: string | number;\r\n paddingTop?: string | number;\r\n paddingBottom?: string | number;\r\n left?: string | number;\r\n right?: string | number;\r\n top?: string | number;\r\n bottom?: string | number;\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nfunction toPx(value: string | number | undefined): number | undefined {\r\n return value === undefined ? undefined : Device.toPx(value);\r\n}\r\n\r\nexport function hasClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return false;\r\n }\r\n else if (el.classList) {\r\n return el.classList.contains(className);\r\n }\r\n else {\r\n return !!el.className.match(new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\"));\r\n }\r\n}\r\n\r\nexport function addClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.add(className)\r\n }\r\n else if (!hasClass(el, className)) {\r\n el.className += \" \" + className;\r\n }\r\n}\r\n\r\nexport function removeClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.remove(className)\r\n }\r\n else if (hasClass(el, className)) {\r\n var reg = new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\");\r\n el.className = el.className.replace(reg, \" \");\r\n }\r\n}\r\n\r\nexport function setOffset(el: HTMLElement, left: number, top: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n}\r\n\r\nexport function getOffset(el: HTMLElement): { left: number, top: number } {\r\n let box = el.getBoundingClientRect();\r\n let docElem = document.documentElement;\r\n return {\r\n top: box.top + window.pageYOffset - docElem.clientTop,\r\n left: box.left + window.pageXOffset - docElem.clientLeft\r\n }\r\n}\r\n\r\nexport function getWidth(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerWidth;\r\n }\r\n else {\r\n let w = parseFloat(getComputedStyle(el, null).width.replace(\"px\", \"\"));\r\n return isNaN(w) ? 0 : w;\r\n }\r\n}\r\n\r\nexport function setWidth(el: HTMLElement, val: number) {\r\n el.style.width = val + 'px';\r\n}\r\n\r\nexport function getHeight(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerHeight;\r\n }\r\n else {\r\n let h = parseFloat(getComputedStyle(el, null).height.replace(\"px\", \"\"));\r\n return isNaN(h) ? 0 : h;\r\n }\r\n}\r\n\r\nexport function setHeight(el: HTMLElement, val: number) {\r\n el.style.height = val + \"px\";\r\n}\r\n\r\nexport function appendTo(el: HTMLElement | SVGElement, to: HTMLElement | SVGElement) {\r\n to.appendChild(el);\r\n}\r\n\r\nexport function removeFromParent(el: HTMLElement | SVGElement) {\r\n el.remove();\r\n}\r\n\r\nexport function setVisibility(el: HTMLElement | SVGElement, visible: boolean) {\r\n el.style.display = visible ? \"block\" : \"none\";\r\n}\r\n\r\nexport function setRect(el: HTMLElement, left: number, top: number, width: number, height: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n el.style.width = width + unit;\r\n el.style.height = height + unit;\r\n}\r\n\r\nexport function getButton(btn: HTMLElement | string): HTMLButtonElement | undefined {\r\n let el = typeof btn === \"string\" ? document.getElementById(btn) : btn;\r\n return el instanceof HTMLButtonElement ? el : undefined;\r\n}\r\n\r\nexport function getCanvas(canvas: HTMLElement | string): HTMLCanvasElement | undefined {\r\n let el = typeof canvas === \"string\" ? document.getElementById(canvas) : canvas;\r\n return el instanceof HTMLCanvasElement ? el : undefined;\r\n}\r\n\r\nexport function getPadding(style?: CSSProperties): { top: number, right: number, bottom: number, left: number } {\r\n if (!style) {\r\n return { top: 0, right: 0, bottom: 0, left: 0 };\r\n }\r\n\r\n let top = toPx(style.paddingTop);\r\n let right = toPx(style.paddingRight);\r\n let bottom = toPx(style.paddingBottom);\r\n let left = toPx(style.paddingLeft);\r\n\r\n let padding = (style.padding ?? \"\").toString().split(\" \").filter(s => s.length > 0);\r\n\r\n switch (padding.length) {\r\n case 0:\r\n break;\r\n case 1:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[0]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[0]);\r\n break;\r\n case 2:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 3:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 4:\r\n default:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[3]);\r\n break;\r\n }\r\n\r\n top ??= 0;\r\n right ??= 0;\r\n bottom ??= 0;\r\n left ??= 0;\r\n\r\n return { top, right, bottom, left };\r\n}\r\n\r\nexport function getDimension(style?: CSSProperties) {\r\n let left = toPx(style?.left);\r\n let right = toPx(style?.right);\r\n let top = toPx(style?.top);\r\n let bottom = toPx(style?.bottom);\r\n let width = toPx(style?.width);\r\n let height = toPx(style?.height);\r\n\r\n if (width === undefined && left !== undefined && right !== undefined) {\r\n width = right - left;\r\n }\r\n\r\n if (height === undefined && top !== undefined && bottom !== undefined) {\r\n height = bottom - top;\r\n }\r\n\r\n return { left, top, width, height }\r\n}\r\n\r\nexport function styleLayoutChanged(style1?: CSSProperties, style2?: CSSProperties) {\r\n if (!style1 && !style2) {\r\n return false;\r\n }\r\n else if (!style1 || !style2) {\r\n return true;\r\n }\r\n else {\r\n return style1.left !== style2.left || style1.top !== style2.top ||\r\n style1.right !== style2.right || style1.bottom !== style2.bottom ||\r\n style1.width !== style2.width || style1.height !== style2.height;\r\n }\r\n}\r\n\r\nlet canvas: HTMLCanvasElement | undefined;\r\n\r\nexport function getCanvasTextWidth(text: string, font: string) {\r\n canvas ??= document.createElement(\"canvas\");\r\n\r\n let ctx = canvas.getContext(\"2d\");\r\n if (!ctx) {\r\n return 0;\r\n }\r\n\r\n ctx.font = font;\r\n\r\n return ctx.measureText(text).width;\r\n}\r\n","\r\nexport type EnumObject = { [key: string]: string | number; }\r\nexport type EnumValue<E extends EnumObject> = E extends { [key: string]: string | infer V; } ? V : never;\r\n\r\nexport function getEnumValues<E extends EnumObject>(e: E): Array<EnumValue<E>> {\r\n return Object.keys(e).filter(key => Number.isNaN(Number(key))).map(key => e[key] as EnumValue<E>);\r\n}\r\n","import { getEnumValues } from \"../utils/enum\";\r\n\r\nexport namespace Assert {\r\n\r\n export type ErrorConstructor = new (msg: string) => Error;\r\n\r\n let errorConstructor: ErrorConstructor = Error;\r\n\r\n export function setErrorClass(ec?: ErrorConstructor) {\r\n errorConstructor = ec ?? Error;\r\n }\r\n\r\n function throwError(errorMsg: string, userMsg?: string): never {\r\n throw new errorConstructor(\"Assertion Error: \" + errorMsg + (userMsg ? \" \" + userMsg : \"\"));\r\n }\r\n\r\n function is_int(a: unknown): a is number {\r\n return typeof a === \"number\" && isFinite(a) && a === Math.trunc(a);\r\n }\r\n\r\n function is_number(a: unknown): a is number {\r\n return typeof a === \"number\";\r\n }\r\n\r\n export function assert<T>(a: T, userMsg?: string) {\r\n if (!a) {\r\n throwError(userMsg ?? \"Assertion failed!\");\r\n }\r\n }\r\n\r\n export function assertEnum<E extends Record<string, string | number>>(value: unknown, enumObj: E, name = \"value\"): asserts value is E[keyof E] {\r\n if (!getEnumValues(enumObj).some(v => v === value)) {\r\n throw new TypeError(`Invalid ${name} enum value: ${value}`);\r\n }\r\n }\r\n\r\n export function interrupt(userMsg?: string): never {\r\n throwError(userMsg ?? \"Interrupted!\");\r\n }\r\n\r\n export function int(a: unknown, userMsg?: string): number {\r\n if (!is_int(a)) {\r\n throwError(`Expected ${a} to be integer.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function eq<T>(a: T, b: T, userMsg?: string): T {\r\n if (a !== b) {\r\n throwError(`Expected ${a} to equal ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_eq(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a === b)) {\r\n throwError(`Expected ${a} to be integer equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_lt(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a < b)) {\r\n throwError(`Expected ${a} to be integer less than ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_lte(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a <= b)) {\r\n throwError(`Expected ${a} to be integer less than or equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_gt(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a > b)) {\r\n throwError(`Expected ${a} to be integer greater than ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_gte(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a >= b)) {\r\n throwError(`Expected ${a} to be integer greater than or equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_between(a: unknown, min: unknown, max: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(min) && is_number(max) && a >= min && a <= max)) {\r\n throwError(`Expected ${a} to be integer between ${min} and ${max}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function odd(a: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && a % 2 === 1)) {\r\n throwError(`Expected ${a} to be odd number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function even(a: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && a % 2 === 0)) {\r\n throwError(`Expected ${a} to be even number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function in_group<T>(a: T, group: ReadonlyArray<T>, userMsg?: string): T {\r\n if (!(group.some(e => e === a))) {\r\n let strGroup = group.map(v => String(v)).join(\", \");\r\n throwError(`Expected ${a} to be in group [${strGroup}].`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function finite(a: unknown, userMsg?: string): number {\r\n if (!(is_number(a) && isFinite(a))) {\r\n throwError(`Expected ${a} to be finite number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function array_id<T>(arr: Readonly<T[]>, id: unknown, userMsg?: string): number {\r\n if (!(is_int(id) && id >= 0 && id < arr.length)) {\r\n throwError(`Expected ${id} to be array index in bounds [0..${arr.length - 1}].`, userMsg);\r\n }\r\n return id;\r\n }\r\n\r\n export function array_elem<T>(arr: Readonly<T[]>, id: number, userMsg?: string): T {\r\n return arr[array_id(arr, id, userMsg)];\r\n }\r\n\r\n export function require<T>(arg: T, userMsg?: string): NonNullable<T> {\r\n if (arg === undefined) {\r\n throwError(\"Required value is undefined.\", userMsg);\r\n }\r\n else {\r\n return arg!;\r\n }\r\n }\r\n}\r\n","import { Assert } from \"./assert\";\r\n\r\nexport namespace Device {\r\n function getDPI(): number {\r\n let el = document.createElement(\"div\");\r\n el.style.width = \"1in\";\r\n document.body.appendChild(el);\r\n let dpi = el.offsetWidth;\r\n el.remove();\r\n return dpi || 96;\r\n }\r\n\r\n function getScrollBarWidth(): number {\r\n try {\r\n let outer = document.createElement(\"div\");\r\n outer.style.visibility = \"hidden\";\r\n outer.style.width = \"100px\";\r\n //outer.style.msOverflowStyle = \"scrollbar\"; // needed for WinJS apps\r\n\r\n document.body.appendChild(outer);\r\n\r\n let widthNoScroll = outer.offsetWidth;\r\n // force scrollbars\r\n outer.style.overflow = \"scroll\";\r\n\r\n // add innerdiv\r\n let inner = document.createElement(\"div\");\r\n inner.style.width = \"100%\";\r\n outer.appendChild(inner);\r\n\r\n let widthWithScroll = inner.offsetWidth;\r\n\r\n // remove divs\r\n if (outer.parentNode) {\r\n outer.parentNode.removeChild(outer);\r\n }\r\n\r\n return widthNoScroll - widthWithScroll;\r\n }\r\n catch (e) {\r\n return 0;\r\n }\r\n }\r\n\r\n function getSystemFontSize(): number {\r\n let tmpDiv = document.createElement(\"div\");\r\n tmpDiv.style.cssText = \"display:inline-block; padding:0; line-height:1; position:absolute; visibility:hidden; font-size:1em\";\r\n tmpDiv.appendChild(document.createTextNode(\"M\"));\r\n document.body.appendChild(tmpDiv);\r\n let fontsize = tmpDiv.offsetHeight;\r\n document.body.removeChild(tmpDiv);\r\n return fontsize;\r\n }\r\n\r\n function getIsTouchDevice(): boolean {\r\n // Modified from: https://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript\r\n\r\n if (\"ontouchstart\" in window || \"DocumentTouch\" in window || \"createTouch\" in document && \"createTouchList\" in document) {\r\n return true;\r\n }\r\n\r\n // include the \"heartz\" as a way to have a non matching MQ to help terminate the join\r\n // https://git.io/vznFH\r\n\r\n var prefixes = \" -webkit- -moz- -o- -ms- \".split(\" \");\r\n var mq = function (query: string) {\r\n return window.matchMedia(query).matches;\r\n }\r\n var query = [\"(\", prefixes.join(\"touch-enabled),(\"), \"heartz\", \")\"].join(\"\");\r\n return mq(query);\r\n }\r\n\r\n function getIsMobileDevice() {\r\n let a = navigator.userAgent || navigator.vendor || (<any>window).opera;\r\n return (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4)));\r\n }\r\n\r\n function getHostAddress(): string {\r\n return location.protocol + \"//\" + location.host;\r\n }\r\n\r\n type UnitType = \"mm\" | \"cm\" | \"in\" | \"inch\" | \"px\" | \"em\";\r\n const UnitRegExp = /^(mm|cm|in|inch|px|em)$/;\r\n const ValueUnitRegExp = /^([0-9\\\\.]+)(.*)$/;\r\n\r\n export const DPI = getDPI();\r\n export const PxPerMm = DPI / 25.4;\r\n export const ScrollbarWidth = getScrollBarWidth();\r\n export const FontSize = getSystemFontSize();\r\n export const IsTouchDevice = getIsTouchDevice();\r\n export const IsMobileDevice = getIsMobileDevice();\r\n export const HostAddress = getHostAddress();\r\n\r\n export function pxToMm(px: number): number {\r\n return px / PxPerMm;\r\n }\r\n\r\n export function mmToPx(mm: number): number {\r\n return mm * PxPerMm;\r\n }\r\n\r\n export function toPx(input: string | number): number {\r\n if (typeof input === \"number\") {\r\n return input;\r\n }\r\n\r\n let value: number = NaN;\r\n let unit: UnitType | undefined = undefined;\r\n\r\n let match = input.toString().match(ValueUnitRegExp);\r\n\r\n if (match && match[1]) {\r\n value = parseFloat(match[1]);\r\n\r\n let unitStr = match[2] ? match[2].toLowerCase() : \"undefined\";\r\n let unitStrOk = UnitRegExp.test(unitStr);\r\n\r\n unit = unitStrOk ? unitStr as UnitType : undefined;\r\n if (!unit) {\r\n console.log(\"Unknown unit '\" + unitStr + \"' => using 'px'.\");\r\n }\r\n }\r\n else {\r\n value = parseFloat(input);\r\n }\r\n\r\n Assert.finite(value, \"value in function toPx\");\r\n\r\n switch (unit) {\r\n case \"mm\":\r\n return mmToPx(value);\r\n case \"cm\":\r\n return mmToPx(value) * 10;\r\n case \"in\":\r\n case \"inch\":\r\n return mmToPx(value) * 25.4;\r\n case \"em\":\r\n return Device.FontSize * value;\r\n default:\r\n case \"px\":\r\n return value;\r\n }\r\n }\r\n}\r\n","\r\nexport function getMapKeys<K, V>(map: Map<K, V>): K[] {\r\n let keys: K[] = [];\r\n map.forEach((value: V, key: K) => keys.push(key));\r\n return keys;\r\n}\r\n","import { isArray } from \"../arr\";\r\n\r\nexport function isObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === \"object\" && value !== null && !isArray(value);\r\n}\r\n","import { isInteger } from \"../math\";\r\n\r\n/**\r\n * toCharArray(\"abc\") => [\"a\", \"b\", \"c\"].\r\n * @param str \r\n */\r\nexport function toCharArray(str: string): string[] {\r\n return str.split(\"\");\r\n}\r\n\r\n/**\r\n * repeat(\"abc\", 3) => \"abcabcabc\".\r\n * repeat(\"abc\", 0) => \"\".\r\n * @param repeatString \r\n * @param repeatCount \r\n */\r\nexport function repeatString(repeatString: string, repeatCount: number): string {\r\n if (!isInteger(repeatCount) || repeatCount < 0) {\r\n throw new Error(\"repeatStr: Invalid repeatCount = \" + repeatCount);\r\n }\r\n\r\n return new Array(repeatCount + 1).join(repeatString);\r\n}\r\n\r\n/**\r\n * \"abcdefgh\":chunkSize = 3 => [\"abc\", \"def\", \"gh\"]\r\n * @param str \r\n * @param chunkSize\r\n */\r\nexport function chunkString(str: string, chunkSize: number): string[] {\r\n if (!isInteger(chunkSize) || chunkSize < 1) {\r\n throw new Error(\"chunckString: Invalid chuckSize = \" + chunkSize);\r\n }\r\n let result: string[] = [];\r\n for (let i = 0; i < str.length; i += chunkSize) {\r\n result.push(str.slice(i, i + chunkSize));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Replaces part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n * @param insert \r\n */\r\nexport function replaceAt(str: string, pos: number, removeCount: number, insert: string) {\r\n if (!isInteger(removeCount) || removeCount < 0) {\r\n throw new Error(\"replaceAt: Invalid removeCount = \" + removeCount);\r\n }\r\n else if (!isInteger(pos) || pos < 0 || pos + removeCount > str.length) {\r\n throw new Error(\"replaceAt: Invalid pos = \" + pos + \", removeCount = \" + removeCount + \", str.length = \" + str.length);\r\n }\r\n else {\r\n return str.substring(0, pos) + insert + str.substring(pos + removeCount);\r\n }\r\n}\r\n\r\n/**\r\n * Insert string to another.\r\n * @param str \r\n * @param pos \r\n * @param insertStr \r\n */\r\nexport function insertAt(str: string, pos: number, insertStr: string) {\r\n return replaceAt(str, pos, 0, insertStr);\r\n}\r\n\r\n/**\r\n * Remove part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n */\r\nexport function removeAt(str: string, pos: number, removeCount: number) {\r\n return replaceAt(str, pos, removeCount, \"\");\r\n}\r\n\r\n/**\r\n * \"UndeclaredVariable\" => \"Undeclared variable\"\r\n * @param PascalString \r\n */\r\nexport function makeSentenceFromPascal(PascalString: string) {\r\n if (PascalString === \"\") {\r\n return \"\";\r\n }\r\n let word = PascalString.charAt(0);\r\n let sentence = \"\";\r\n\r\n const addWord = () => {\r\n if (word !== \"\") {\r\n if (sentence === \"\") {\r\n sentence += word.charAt(0).toUpperCase() + word.substring(1);\r\n }\r\n else {\r\n sentence += \" \" + word;\r\n }\r\n word = \"\";\r\n }\r\n }\r\n\r\n const isLetterAndCapital = (c: string) => {\r\n return c.toUpperCase() !== c.toLowerCase() && c === c.toUpperCase();\r\n }\r\n\r\n for (let i = 1; i < PascalString.length; i++) {\r\n let c = PascalString.charAt(i);\r\n if (isLetterAndCapital(c)) {\r\n addWord();\r\n }\r\n word += c.toLowerCase();\r\n }\r\n\r\n addWord();\r\n\r\n return sentence;\r\n}\r\n","export namespace Cookies {\r\n\r\n const ConsentCookieName = \"ConsentCookie\";\r\n\r\n enum ConsentState {\r\n Accept = \"accept\",\r\n Decline = \"decline\"\r\n }\r\n\r\n let _consent: ConsentState | undefined;\r\n let _expires: Date | undefined;\r\n\r\n let str = _read(ConsentCookieName);\r\n _consent = (str === ConsentState.Accept || str === ConsentState.Decline) ? str : undefined;\r\n\r\n export function setExpireDays(days: number) {\r\n _expires = new Date();\r\n _expires.setDate(_expires.getDate() + days);\r\n }\r\n\r\n export function isConsentPending() {\r\n return _consent === undefined;\r\n }\r\n\r\n export function accept() {\r\n _consent = ConsentState.Accept;\r\n _save(ConsentCookieName, _consent);\r\n }\r\n\r\n export function decline() {\r\n _consent = ConsentState.Decline;\r\n _save(ConsentCookieName, _consent);\r\n }\r\n\r\n function _getList(): string[] {\r\n let s = document.cookie;\r\n return s.split(\";\").map(c => c.trim());\r\n }\r\n\r\n function _save<T extends string | number | boolean>(name: string, value: T): T {\r\n let cookie = name + \"=\" + value.toString() + \";sameSite=Lax;\";\r\n\r\n if (_expires) {\r\n cookie += \"expires=\" + _expires.toUTCString() + \";\";\r\n }\r\n\r\n document.cookie = cookie;\r\n\r\n return value;\r\n }\r\n\r\n function _read(name: string, defaultValue?: string): string | undefined {\r\n let str = _getList().find(c => c.startsWith(name + \"=\"));\r\n return str === undefined ? defaultValue : str.substring(name.length + 1);\r\n }\r\n\r\n function _erase(name: string) {\r\n document.cookie = name + \"=;\" + \"expires=Thu, 01 Jan 1970 00:00:00 UTC;\";\r\n }\r\n\r\n export function save<T extends string | number | boolean>(name: string, value: T): T {\r\n if (_consent === ConsentState.Accept) {\r\n _save(name, value);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n export function read(name: string, defaultValue: string): string {\r\n if (_consent === ConsentState.Accept) {\r\n return _read(name, defaultValue) || defaultValue;\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function readInt(name: string, defaultValue: number): number {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : parseInt(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function readBool(name: string, defaultValue: boolean): boolean {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : (/true|1/i).test(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function erase(name: string) {\r\n if (_consent === ConsentState.Accept || name === ConsentCookieName) {\r\n _erase(name);\r\n }\r\n }\r\n\r\n export function eraseAll() {\r\n document.cookie.split(';').forEach(c => erase(c.trim().split('=')[0]));\r\n }\r\n}\r\n","import { Assert } from \"../modules/assert\";\r\n\r\nexport class Stack<T> {\r\n private readonly list: T[] = [];\r\n\r\n push(e: T) {\r\n this.list.push(e);\r\n return e;\r\n }\r\n\r\n pop(): T {\r\n Assert.int_gt(this.list.length, 0);\r\n return this.list.pop()!;\r\n }\r\n\r\n top() {\r\n return Assert.array_elem(this.list, this.list.length - 1, \"Stack is empty!\");\r\n }\r\n\r\n toArray() {\r\n return this.list;\r\n }\r\n\r\n get length() {\r\n return this.list.length;\r\n }\r\n\r\n clear() {\r\n this.list.length = 0;\r\n }\r\n}\r\n","export class Vec2 {\r\n readonly x: number;\r\n readonly y: number;\r\n\r\n constructor(x?: number, y?: number) {\r\n this.x = x ?? 0;\r\n this.y = y ?? 0;\r\n }\r\n\r\n length() {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n\r\n add(a: Vec2) {\r\n return new Vec2(this.x + a.x, this.y + a.y);\r\n }\r\n\r\n sub(a: Vec2) {\r\n return new Vec2(this.x - a.x, this.y - a.y);\r\n }\r\n\r\n mul(a: number) {\r\n return new Vec2(this.x * a, this.y * a);\r\n }\r\n\r\n div(a: number) {\r\n return new Vec2(this.x / a, this.y / a);\r\n }\r\n}\r\n","/**\r\n * LRUCache class: Least Recently Used cache with a fixed capacity\r\n * \r\n * Provided by ChatGPT.\r\n */\r\nexport class LRUCache<K extends string, V> {\r\n private cache: Record<K, V>; // Stores the actual key-value pairs\r\n private next: Record<K, K>; // Linked list: points to the next newer key\r\n private prev: Record<K, K>; // Linked list: points to the previous older key\r\n private head: K | null; // The least recently used key (oldest)\r\n private tail: K | null; // The most recently used key (newest)\r\n private capacity: number; // Maximum number of items allowed\r\n private size: number; // Current number of items\r\n private maxKeyLength: number; // Maximum key length.\r\n\r\n constructor(maxSize: number, maxKeyLength: number = Infinity) {\r\n this.cache = Object.create(null);\r\n this.next = Object.create(null);\r\n this.prev = Object.create(null);\r\n this.head = null;\r\n this.tail = null;\r\n this.capacity = maxSize;\r\n this.size = 0;\r\n this.maxKeyLength = maxKeyLength;\r\n }\r\n\r\n // Retrieves a value from the cache\r\n get(key: K): V | undefined {\r\n if (key.length > this.maxKeyLength) return undefined;\r\n\r\n if (this.cache[key] !== undefined) {\r\n this.touch(key); // Mark as recently used\r\n return this.cache[key];\r\n }\r\n return undefined; // Key not found\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (key.length > this.maxKeyLength) {\r\n // Skip caching for keys that are too large\r\n return;\r\n }\r\n\r\n if (this.cache[key] !== undefined) {\r\n // Update value and mark as recently used\r\n this.cache[key] = value;\r\n this.touch(key);\r\n return;\r\n }\r\n\r\n // If cache is full, evict the least recently used item\r\n if (this.size >= this.capacity) {\r\n this.evict();\r\n }\r\n\r\n // Add new entry to the cache and to the tail (most recent)\r\n this.cache[key] = value;\r\n this.addToTail(key);\r\n this.size++;\r\n }\r\n\r\n // Marks a key as most recently used\r\n private touch(key: K): void {\r\n if (this.tail === key) return; // Already the most recently used\r\n\r\n this.removeKey(key); // Remove from current position\r\n this.addToTail(key); // Re-add at the tail\r\n }\r\n\r\n // Evicts the least recently used item (at the head)\r\n private evict(): void {\r\n if (this.head !== null) {\r\n const oldestKey = this.head;\r\n this.removeKey(oldestKey); // Remove from the linked list\r\n delete this.cache[oldestKey]; // Remove from cache storage\r\n this.size--;\r\n }\r\n }\r\n\r\n // Removes a key from the linked list\r\n private removeKey(key: K): void {\r\n const prevKey = this.prev[key];\r\n const nextKey = this.next[key];\r\n\r\n if (prevKey !== undefined) {\r\n this.next[prevKey] = nextKey;\r\n }\r\n else {\r\n // If no previous key, this was the head\r\n this.head = nextKey ?? null;\r\n }\r\n\r\n if (nextKey !== undefined) {\r\n this.prev[nextKey] = prevKey;\r\n }\r\n else {\r\n // If no next key, this was the tail\r\n this.tail = prevKey ?? null;\r\n }\r\n\r\n // Clean up links\r\n delete this.prev[key];\r\n delete this.next[key];\r\n }\r\n\r\n // Adds a key to the tail (most recently used position)\r\n private addToTail(key: K): void {\r\n if (this.tail !== null) {\r\n // Link the current tail to the new key\r\n this.next[this.tail] = key;\r\n this.prev[key] = this.tail;\r\n }\r\n else {\r\n // If the cache was empty, set as head\r\n this.head = key;\r\n }\r\n this.tail = key; // Always set as new tail\r\n }\r\n}\r\n","import { isInteger } from \"../utils/math\";\r\n\r\n/**\r\n * A cache-like structure optimized for small-range integer keys, including negatives.\r\n *\r\n * Internally implemented using two sparse arrays: one for non-negative keys,\r\n * and one for negative keys (stored by index `-key - 1`).\r\n *\r\n * @remarks\r\n * - Fast access for small integer keys.\r\n * - Not suitable for large or sparse key ranges — memory usage may grow significantly.\r\n * - Supports `get`, `set`, `delete`, `has` and `clear`\r\n *\r\n * @example\r\n * ```ts\r\n * const cache = new SmallIntCache<string>();\r\n * cache.set(-2, 'A');\r\n * cache.set(3, 'B');\r\n * console.log(cache.get(-2)); // 'A'\r\n * ```\r\n */\r\nexport class SmallIntCache<V> {\r\n private pos: V[]; // for keys >= 0\r\n private neg: V[]; // for keys < 0\r\n\r\n constructor() {\r\n this.pos = [];\r\n this.neg = [];\r\n }\r\n\r\n set(key: number, value: V): void {\r\n if (!isInteger(key)) {\r\n throw new Error(\"Key must be an integer\");\r\n }\r\n else if (key >= 0) {\r\n this.pos[key] = value;\r\n }\r\n else {\r\n this.neg[-key - 1] = value; // e.g., key = -1 => index = 0\r\n }\r\n }\r\n\r\n get(key: number): V | undefined {\r\n if (!isInteger(key)) {\r\n throw new Error(\"Key must be an integer\");\r\n }\r\n else if (key >= 0) {\r\n return this.pos[key];\r\n }\r\n else {\r\n return this.neg[-key - 1];\r\n }\r\n }\r\n\r\n has(key: number): boolean {\r\n if (!isInteger(key)) {\r\n return false;\r\n }\r\n else if (key >= 0) {\r\n return key in this.pos;\r\n }\r\n else {\r\n return (-key - 1) in this.neg;\r\n }\r\n }\r\n\r\n delete(key: number): void {\r\n if (!isInteger(key)) {\r\n return;\r\n }\r\n else if (key >= 0) {\r\n delete this.pos[key];\r\n }\r\n else {\r\n delete this.neg[-key - 1];\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.pos = [];\r\n this.neg = [];\r\n }\r\n}\r\n"],"mappings":"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","names":["Assert","require","Device","query","toPx","canvas","repeatString","Cookies","ConsentState","str"]}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/index.ts","../src/utils/arr/index.ts","../src/utils/math/index.ts","../src/utils/dom/index.ts","../src/utils/enum/index.ts","../src/modules/assert.ts","../src/modules/device.ts","../src/utils/map/index.ts","../src/utils/obj/index.ts","../src/utils/str/index.ts","../src/modules/cookies.ts","../src/core/stack.ts","../src/core/vec2.ts","../src/core/LRU-cache.ts","../src/core/small-int-cache.ts"],"sourcesContent":["export * as Arr from \"./arr\";\r\nexport * as Dom from \"./dom\";\r\nexport * as Enum from \"./enum\";\r\nexport * as Map from \"./map\";\r\nexport * as Math from \"./math\";\r\nexport * as Obj from \"./obj\";\r\nexport * as Str from \"./str\";\r\n","import { isInteger } from \"../math\";\r\n\r\nexport function isArray<T>(a: T[] | unknown): a is T[] {\r\n return !!a && Object.prototype.toString.call(a) === \"[object Array]\";\r\n}\r\n\r\nexport function toArray<T>(a: T | T[]): Array<T> {\r\n return isArray(a) ? a : [a];\r\n}\r\n\r\nexport function duplicate<T>(a: T[] | undefined) {\r\n return a === undefined ? a : a.slice();\r\n}\r\n\r\nexport function removeDuplicates<T>(a: T[]): T[] {\r\n return a.filter((item, pos, arr) => arr.indexOf(item) === pos);\r\n}\r\n\r\nexport function removeDuplicatesCmp<T>(arr: ReadonlyArray<T>, cmp: (t1: T, t2: T) => boolean): T[] {\r\n return arr.filter((t1, index, self) => index === self.findIndex(t2 => cmp(t1, t2)));\r\n}\r\n\r\nexport function fillArray<T>(fillValue: T, fillCount: number): T[] {\r\n if (!isInteger(fillCount) || fillCount < 0) {\r\n throw new Error(\"fillArray: Invalid fillCount = \" + fillCount);\r\n }\r\n return new Array<T>(fillCount).fill(fillValue);\r\n}\r\n\r\nexport function mapSequenceArray<T>(len: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(len) || len < 0) {\r\n throw new Error(\"mapSequenceArray: Invalid len = \" + len);\r\n }\r\n let arr: T[] = new Array(len);\r\n for (let i = 0; i < len; i++) { arr[i] = fn(i); }\r\n return arr;\r\n}\r\n\r\nexport function getSequenceArray(len: number): number[] {\r\n return mapSequenceArray(len, i => i);\r\n}\r\n\r\nexport function mapRangeArray<T>(start: number, end: number, fn: (i: number) => T): T[] {\r\n if (!isInteger(start)) {\r\n throw new Error(\"mapRangeArray: Invalid start = \" + end);\r\n }\r\n if (!isInteger(end)) {\r\n throw new Error(\"mapRangeArray: Invalid end = \" + end);\r\n }\r\n let len = Math.abs(end - start) + 1;\r\n let arr: T[] = new Array(len);\r\n for (let i = 0, s = start, inc = Math.sign(end - start); i < len; s += inc, i++) { arr[i] = fn(s); }\r\n return arr;\r\n}\r\n\r\nexport function getRangeArray(start: number, end: number): number[] {\r\n return mapRangeArray(start, end, i => i);\r\n}\r\n\r\nexport function arrayContains<T extends unknown>(arg: T[], item: T): boolean {\r\n return arg.indexOf(item) >= 0;\r\n}\r\n\r\nexport function chunckArray<A>(arr: ReadonlyArray<A>, chunckSize: number): A[][] {\r\n if (!isInteger(chunckSize) || chunckSize < 1) {\r\n throw new Error(\"chunckArray: Invalid chunckSize = \" + chunckSize);\r\n }\r\n let result: A[][] = [];\r\n for (let i = 0; i < arr.length; i += chunckSize) {\r\n result.push(arr.slice(i, i + chunckSize));\r\n }\r\n return result;\r\n}\r\n","\r\nexport function isInteger(n: unknown): n is number {\r\n return typeof n === \"number\" && isFinite(n) && n === Math.trunc(n);\r\n}\r\n\r\nexport function linearToDecibels(linearVolume: number): number {\r\n if (!isFinite(linearVolume)) {\r\n throw new Error(\"linearToDecibel: Invalid linearVolume = \" + linearVolume);\r\n }\r\n else if (linearVolume <= 0) {\r\n return -Infinity;\r\n }\r\n else {\r\n return 20 * Math.log10(linearVolume);\r\n }\r\n}\r\n\r\nexport function mod(m: number, n: number) {\r\n return ((m % n) + n) % n;\r\n}\r\n\r\n/**\r\n * Convert number to roman number.\r\n * https://blog.stevenlevithan.com/archives/javascript-roman-numeral-converter\r\n */\r\nexport function romanize(n: number) {\r\n if (!isInteger(n) || n < 0) {\r\n throw new Error(\"romanize: Invalid n = \" + n);\r\n }\r\n\r\n var digits = String(+n).split(\"\");\r\n var key = [\"\", \"C\", \"CC\", \"CCC\", \"CD\", \"D\", \"DC\", \"DCC\", \"DCCC\", \"CM\",\r\n \"\", \"X\", \"XX\", \"XXX\", \"XL\", \"L\", \"LX\", \"LXX\", \"LXXX\", \"XC\",\r\n \"\", \"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\"];\r\n var roman = \"\", i = 3;\r\n while (i--) roman = (key[+digits.pop()! + (i * 10)] || \"\") + roman;\r\n return Array(+digits.join(\"\") + 1).join(\"M\") + roman;\r\n}\r\n\r\nexport function toOrdinalNumber(n: number) {\r\n if (!isInteger(n)) {\r\n throw new Error(\"toOrdinalNumber: Invalid n = \" + n);\r\n }\r\n\r\n const nStr = n.toString();\r\n const lastDigit = Number(nStr.charAt(nStr.length - 1));\r\n\r\n if (n === 1 || n >= 20 && lastDigit === 1) {\r\n return nStr + \"st\";\r\n }\r\n else if (n === 2 || n >= 20 && lastDigit === 2) {\r\n return nStr + \"nd\";\r\n }\r\n else if (n === 3 || n >= 20 && lastDigit === 3) {\r\n return nStr + \"rd\";\r\n }\r\n else {\r\n return nStr + \"th\";\r\n }\r\n}\r\n\r\nexport function interpolateCoord(startX: number, startY: number, endX: number, endY: number, t: number) {\r\n return {\r\n x: startX + (endX - startX) * t,\r\n y: startY + (endY - startY) * t\r\n }\r\n}\r\n\r\nexport function interpolateY(startX: number, startY: number, endX: number, endY: number, x: number) {\r\n let t = (x - startX) / (endX - startX);\r\n return startY + (endY - startY) * t;\r\n}\r\n\r\nexport function clamp(num: number, min: number, max: number) {\r\n return Math.min(Math.max(num, min), max);\r\n}\r\n\r\nexport function calcNormal(x1: number, y1: number, x2: number, y2: number) {\r\n let dx = x2 - x1;\r\n let dy = y2 - y1;\r\n\r\n let nx = -dy;\r\n let ny = dx;\r\n\r\n let len = Math.sqrt(nx * nx + ny * ny);\r\n\r\n if (len > 0) {\r\n nx /= len;\r\n ny /= len;\r\n }\r\n else {\r\n nx = 0;\r\n ny = 1;\r\n }\r\n\r\n return { nx, ny }\r\n}\r\n\r\nexport function sum(arr: number[]): number {\r\n return arr.reduce((prev, cur) => cur + prev, 0);\r\n}\r\n\r\n","import { Device } from \"../../modules/device\";\r\n\r\nexport interface CSSProperties {\r\n // Declare necessary css properties\r\n //[key: string]: string | number;\r\n padding?: string | number;\r\n paddingLeft?: string | number;\r\n paddingRight?: string | number;\r\n paddingTop?: string | number;\r\n paddingBottom?: string | number;\r\n left?: string | number;\r\n right?: string | number;\r\n top?: string | number;\r\n bottom?: string | number;\r\n width?: string | number;\r\n height?: string | number;\r\n}\r\n\r\nfunction toPx(value: string | number | undefined): number | undefined {\r\n return value === undefined ? undefined : Device.toPx(value);\r\n}\r\n\r\nexport function hasClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return false;\r\n }\r\n else if (el.classList) {\r\n return el.classList.contains(className);\r\n }\r\n else {\r\n return !!el.className.match(new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\"));\r\n }\r\n}\r\n\r\nexport function addClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.add(className)\r\n }\r\n else if (!hasClass(el, className)) {\r\n el.className += \" \" + className;\r\n }\r\n}\r\n\r\nexport function removeClass(el: HTMLElement, className: string) {\r\n if (className.length === 0) {\r\n return;\r\n }\r\n else if (el.classList) {\r\n el.classList.remove(className)\r\n }\r\n else if (hasClass(el, className)) {\r\n var reg = new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\");\r\n el.className = el.className.replace(reg, \" \");\r\n }\r\n}\r\n\r\nexport function setOffset(el: HTMLElement, left: number, top: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n}\r\n\r\nexport function getOffset(el: HTMLElement): { left: number, top: number } {\r\n let box = el.getBoundingClientRect();\r\n let docElem = document.documentElement;\r\n return {\r\n top: box.top + window.pageYOffset - docElem.clientTop,\r\n left: box.left + window.pageXOffset - docElem.clientLeft\r\n }\r\n}\r\n\r\nexport function getWidth(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerWidth;\r\n }\r\n else {\r\n let w = parseFloat(getComputedStyle(el, null).width.replace(\"px\", \"\"));\r\n return isNaN(w) ? 0 : w;\r\n }\r\n}\r\n\r\nexport function setWidth(el: HTMLElement, val: number) {\r\n el.style.width = val + 'px';\r\n}\r\n\r\nexport function getHeight(el: HTMLElement | Window) {\r\n if (el instanceof Window) {\r\n return el.innerHeight;\r\n }\r\n else {\r\n let h = parseFloat(getComputedStyle(el, null).height.replace(\"px\", \"\"));\r\n return isNaN(h) ? 0 : h;\r\n }\r\n}\r\n\r\nexport function setHeight(el: HTMLElement, val: number) {\r\n el.style.height = val + \"px\";\r\n}\r\n\r\nexport function appendTo(el: HTMLElement | SVGElement, to: HTMLElement | SVGElement) {\r\n to.appendChild(el);\r\n}\r\n\r\nexport function removeFromParent(el: HTMLElement | SVGElement) {\r\n el.remove();\r\n}\r\n\r\nexport function setVisibility(el: HTMLElement | SVGElement, visible: boolean) {\r\n el.style.display = visible ? \"block\" : \"none\";\r\n}\r\n\r\nexport function setRect(el: HTMLElement, left: number, top: number, width: number, height: number, unit: string = \"px\") {\r\n el.style.left = left + unit;\r\n el.style.top = top + unit;\r\n el.style.width = width + unit;\r\n el.style.height = height + unit;\r\n}\r\n\r\nexport function getButton(btn: HTMLElement | string): HTMLButtonElement | undefined {\r\n let el = typeof btn === \"string\" ? document.getElementById(btn) : btn;\r\n return el instanceof HTMLButtonElement ? el : undefined;\r\n}\r\n\r\nexport function getCanvas(canvas: HTMLElement | string): HTMLCanvasElement | undefined {\r\n let el = typeof canvas === \"string\" ? document.getElementById(canvas) : canvas;\r\n return el instanceof HTMLCanvasElement ? el : undefined;\r\n}\r\n\r\nexport function getPadding(style?: CSSProperties): { top: number, right: number, bottom: number, left: number } {\r\n if (!style) {\r\n return { top: 0, right: 0, bottom: 0, left: 0 };\r\n }\r\n\r\n let top = toPx(style.paddingTop);\r\n let right = toPx(style.paddingRight);\r\n let bottom = toPx(style.paddingBottom);\r\n let left = toPx(style.paddingLeft);\r\n\r\n let padding = (style.padding ?? \"\").toString().split(\" \").filter(s => s.length > 0);\r\n\r\n switch (padding.length) {\r\n case 0:\r\n break;\r\n case 1:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[0]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[0]);\r\n break;\r\n case 2:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[0]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 3:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[1]);\r\n break;\r\n case 4:\r\n default:\r\n top ??= toPx(padding[0]);\r\n right ??= toPx(padding[1]);\r\n bottom ??= toPx(padding[2]);\r\n left ??= toPx(padding[3]);\r\n break;\r\n }\r\n\r\n top ??= 0;\r\n right ??= 0;\r\n bottom ??= 0;\r\n left ??= 0;\r\n\r\n return { top, right, bottom, left };\r\n}\r\n\r\nexport function getDimension(style?: CSSProperties) {\r\n let left = toPx(style?.left);\r\n let right = toPx(style?.right);\r\n let top = toPx(style?.top);\r\n let bottom = toPx(style?.bottom);\r\n let width = toPx(style?.width);\r\n let height = toPx(style?.height);\r\n\r\n if (width === undefined && left !== undefined && right !== undefined) {\r\n width = right - left;\r\n }\r\n\r\n if (height === undefined && top !== undefined && bottom !== undefined) {\r\n height = bottom - top;\r\n }\r\n\r\n return { left, top, width, height }\r\n}\r\n\r\nexport function styleLayoutChanged(style1?: CSSProperties, style2?: CSSProperties) {\r\n if (!style1 && !style2) {\r\n return false;\r\n }\r\n else if (!style1 || !style2) {\r\n return true;\r\n }\r\n else {\r\n return style1.left !== style2.left || style1.top !== style2.top ||\r\n style1.right !== style2.right || style1.bottom !== style2.bottom ||\r\n style1.width !== style2.width || style1.height !== style2.height;\r\n }\r\n}\r\n\r\nlet canvas: HTMLCanvasElement | undefined;\r\n\r\nexport function getCanvasTextWidth(text: string, font: string) {\r\n canvas ??= document.createElement(\"canvas\");\r\n\r\n let ctx = canvas.getContext(\"2d\");\r\n if (!ctx) {\r\n return 0;\r\n }\r\n\r\n ctx.font = font;\r\n\r\n return ctx.measureText(text).width;\r\n}\r\n","\r\nexport type EnumObject = { [key: string]: string | number; }\r\nexport type EnumValue<E extends EnumObject> = E extends { [key: string]: string | infer V; } ? V : never;\r\n\r\nexport function getEnumValues<E extends EnumObject>(e: E): Array<EnumValue<E>> {\r\n return Object.keys(e).filter(key => Number.isNaN(Number(key))).map(key => e[key] as EnumValue<E>);\r\n}\r\n","import { getEnumValues } from \"../utils/enum\";\r\n\r\nexport namespace Assert {\r\n\r\n export type ErrorConstructor = new (msg: string) => Error;\r\n\r\n let errorConstructor: ErrorConstructor = Error;\r\n\r\n export function setErrorClass(ec?: ErrorConstructor) {\r\n errorConstructor = ec ?? Error;\r\n }\r\n\r\n function throwError(errorMsg: string, userMsg?: string): never {\r\n throw new errorConstructor(\"Assertion Error: \" + errorMsg + (userMsg ? \" \" + userMsg : \"\"));\r\n }\r\n\r\n function is_int(a: unknown): a is number {\r\n return typeof a === \"number\" && isFinite(a) && a === Math.trunc(a);\r\n }\r\n\r\n function is_number(a: unknown): a is number {\r\n return typeof a === \"number\";\r\n }\r\n\r\n export function assert<T>(a: T, userMsg?: string) {\r\n if (!a) {\r\n throwError(userMsg ?? \"Assertion failed!\");\r\n }\r\n }\r\n\r\n export function assertEnum<E extends Record<string, string | number>>(value: unknown, enumObj: E, name = \"value\"): asserts value is E[keyof E] {\r\n if (!getEnumValues(enumObj).some(v => v === value)) {\r\n throw new TypeError(`Invalid ${name} enum value: ${value}`);\r\n }\r\n }\r\n\r\n export function interrupt(userMsg?: string): never {\r\n throwError(userMsg ?? \"Interrupted!\");\r\n }\r\n\r\n export function int(a: unknown, userMsg?: string): number {\r\n if (!is_int(a)) {\r\n throwError(`Expected ${a} to be integer.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function eq<T>(a: T, b: T, userMsg?: string): T {\r\n if (a !== b) {\r\n throwError(`Expected ${a} to equal ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_eq(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a === b)) {\r\n throwError(`Expected ${a} to be integer equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_lt(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a < b)) {\r\n throwError(`Expected ${a} to be integer less than ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_lte(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a <= b)) {\r\n throwError(`Expected ${a} to be integer less than or equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_gt(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a > b)) {\r\n throwError(`Expected ${a} to be integer greater than ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_gte(a: unknown, b: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(b) && a >= b)) {\r\n throwError(`Expected ${a} to be integer greater than or equal to ${b}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function int_between(a: unknown, min: unknown, max: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && is_number(min) && is_number(max) && a >= min && a <= max)) {\r\n throwError(`Expected ${a} to be integer between ${min} and ${max}.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function odd(a: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && a % 2 === 1)) {\r\n throwError(`Expected ${a} to be odd number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function even(a: unknown, userMsg?: string): number {\r\n if (!(is_int(a) && a % 2 === 0)) {\r\n throwError(`Expected ${a} to be even number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function in_group<T>(a: T, group: ReadonlyArray<T>, userMsg?: string): T {\r\n if (!(group.some(e => e === a))) {\r\n let strGroup = group.map(v => String(v)).join(\", \");\r\n throwError(`Expected ${a} to be in group [${strGroup}].`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function finite(a: unknown, userMsg?: string): number {\r\n if (!(is_number(a) && isFinite(a))) {\r\n throwError(`Expected ${a} to be finite number.`, userMsg);\r\n }\r\n return a;\r\n }\r\n\r\n export function array_id<T>(arr: Readonly<T[]>, id: unknown, userMsg?: string): number {\r\n if (!(is_int(id) && id >= 0 && id < arr.length)) {\r\n throwError(`Expected ${id} to be array index in bounds [0..${arr.length - 1}].`, userMsg);\r\n }\r\n return id;\r\n }\r\n\r\n export function array_elem<T>(arr: Readonly<T[]>, id: number, userMsg?: string): T {\r\n return arr[array_id(arr, id, userMsg)];\r\n }\r\n\r\n export function require<T>(arg: T, userMsg?: string): NonNullable<T> {\r\n if (arg === undefined) {\r\n throwError(\"Required value is undefined.\", userMsg);\r\n }\r\n else {\r\n return arg!;\r\n }\r\n }\r\n}\r\n","import { Assert } from \"./assert\";\r\n\r\nexport namespace Device {\r\n function getDPI(): number {\r\n let el = document.createElement(\"div\");\r\n el.style.width = \"1in\";\r\n document.body.appendChild(el);\r\n let dpi = el.offsetWidth;\r\n el.remove();\r\n return dpi || 96;\r\n }\r\n\r\n function getScrollBarWidth(): number {\r\n try {\r\n let outer = document.createElement(\"div\");\r\n outer.style.visibility = \"hidden\";\r\n outer.style.width = \"100px\";\r\n //outer.style.msOverflowStyle = \"scrollbar\"; // needed for WinJS apps\r\n\r\n document.body.appendChild(outer);\r\n\r\n let widthNoScroll = outer.offsetWidth;\r\n // force scrollbars\r\n outer.style.overflow = \"scroll\";\r\n\r\n // add innerdiv\r\n let inner = document.createElement(\"div\");\r\n inner.style.width = \"100%\";\r\n outer.appendChild(inner);\r\n\r\n let widthWithScroll = inner.offsetWidth;\r\n\r\n // remove divs\r\n if (outer.parentNode) {\r\n outer.parentNode.removeChild(outer);\r\n }\r\n\r\n return widthNoScroll - widthWithScroll;\r\n }\r\n catch (e) {\r\n return 0;\r\n }\r\n }\r\n\r\n function getSystemFontSize(): number {\r\n let tmpDiv = document.createElement(\"div\");\r\n tmpDiv.style.cssText = \"display:inline-block; padding:0; line-height:1; position:absolute; visibility:hidden; font-size:1em\";\r\n tmpDiv.appendChild(document.createTextNode(\"M\"));\r\n document.body.appendChild(tmpDiv);\r\n let fontsize = tmpDiv.offsetHeight;\r\n document.body.removeChild(tmpDiv);\r\n return fontsize;\r\n }\r\n\r\n function getIsTouchDevice(): boolean {\r\n // Modified from: https://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript\r\n\r\n if (\"ontouchstart\" in window || \"DocumentTouch\" in window || \"createTouch\" in document && \"createTouchList\" in document) {\r\n return true;\r\n }\r\n\r\n // include the \"heartz\" as a way to have a non matching MQ to help terminate the join\r\n // https://git.io/vznFH\r\n\r\n var prefixes = \" -webkit- -moz- -o- -ms- \".split(\" \");\r\n var mq = function (query: string) {\r\n return window.matchMedia(query).matches;\r\n }\r\n var query = [\"(\", prefixes.join(\"touch-enabled),(\"), \"heartz\", \")\"].join(\"\");\r\n return mq(query);\r\n }\r\n\r\n function getIsMobileDevice() {\r\n let a = navigator.userAgent || navigator.vendor || (<any>window).opera;\r\n return (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4)));\r\n }\r\n\r\n function getHostAddress(): string {\r\n return location.protocol + \"//\" + location.host;\r\n }\r\n\r\n type UnitType = \"mm\" | \"cm\" | \"in\" | \"inch\" | \"px\" | \"em\";\r\n const UnitRegExp = /^(mm|cm|in|inch|px|em)$/;\r\n const ValueUnitRegExp = /^([0-9\\\\.]+)(.*)$/;\r\n\r\n export const DPI = getDPI();\r\n export const PxPerMm = DPI / 25.4;\r\n export const ScrollbarWidth = getScrollBarWidth();\r\n export const FontSize = getSystemFontSize();\r\n export const IsTouchDevice = getIsTouchDevice();\r\n export const IsMobileDevice = getIsMobileDevice();\r\n export const HostAddress = getHostAddress();\r\n\r\n export function pxToMm(px: number): number {\r\n return px / PxPerMm;\r\n }\r\n\r\n export function mmToPx(mm: number): number {\r\n return mm * PxPerMm;\r\n }\r\n\r\n export function toPx(input: string | number): number {\r\n if (typeof input === \"number\") {\r\n return input;\r\n }\r\n\r\n let value: number = NaN;\r\n let unit: UnitType | undefined = undefined;\r\n\r\n let match = input.toString().match(ValueUnitRegExp);\r\n\r\n if (match && match[1]) {\r\n value = parseFloat(match[1]);\r\n\r\n let unitStr = match[2] ? match[2].toLowerCase() : \"undefined\";\r\n let unitStrOk = UnitRegExp.test(unitStr);\r\n\r\n unit = unitStrOk ? unitStr as UnitType : undefined;\r\n if (!unit) {\r\n console.log(\"Unknown unit '\" + unitStr + \"' => using 'px'.\");\r\n }\r\n }\r\n else {\r\n value = parseFloat(input);\r\n }\r\n\r\n Assert.finite(value, \"value in function toPx\");\r\n\r\n switch (unit) {\r\n case \"mm\":\r\n return mmToPx(value);\r\n case \"cm\":\r\n return mmToPx(value) * 10;\r\n case \"in\":\r\n case \"inch\":\r\n return mmToPx(value) * 25.4;\r\n case \"em\":\r\n return Device.FontSize * value;\r\n default:\r\n case \"px\":\r\n return value;\r\n }\r\n }\r\n}\r\n","\r\nexport function getMapKeys<K, V>(map: Map<K, V>): K[] {\r\n let keys: K[] = [];\r\n map.forEach((value: V, key: K) => keys.push(key));\r\n return keys;\r\n}\r\n","import { isArray } from \"../arr\";\r\n\r\nexport function isObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === \"object\" && value !== null && !isArray(value);\r\n}\r\n","import { isInteger } from \"../math\";\r\n\r\n/**\r\n * toCharArray(\"abc\") => [\"a\", \"b\", \"c\"].\r\n * @param str \r\n */\r\nexport function toCharArray(str: string): string[] {\r\n return str.split(\"\");\r\n}\r\n\r\n/**\r\n * repeat(\"abc\", 3) => \"abcabcabc\".\r\n * repeat(\"abc\", 0) => \"\".\r\n * @param repeatString \r\n * @param repeatCount \r\n */\r\nexport function repeatString(repeatString: string, repeatCount: number): string {\r\n if (!isInteger(repeatCount) || repeatCount < 0) {\r\n throw new Error(\"repeatStr: Invalid repeatCount = \" + repeatCount);\r\n }\r\n\r\n return new Array(repeatCount + 1).join(repeatString);\r\n}\r\n\r\n/**\r\n * \"abcdefgh\":chunkSize = 3 => [\"abc\", \"def\", \"gh\"]\r\n * @param str \r\n * @param chunkSize\r\n */\r\nexport function chunkString(str: string, chunkSize: number): string[] {\r\n if (!isInteger(chunkSize) || chunkSize < 1) {\r\n throw new Error(\"chunckString: Invalid chuckSize = \" + chunkSize);\r\n }\r\n let result: string[] = [];\r\n for (let i = 0; i < str.length; i += chunkSize) {\r\n result.push(str.slice(i, i + chunkSize));\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Replaces part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n * @param insert \r\n */\r\nexport function replaceAt(str: string, pos: number, removeCount: number, insert: string) {\r\n if (!isInteger(removeCount) || removeCount < 0) {\r\n throw new Error(\"replaceAt: Invalid removeCount = \" + removeCount);\r\n }\r\n else if (!isInteger(pos) || pos < 0 || pos + removeCount > str.length) {\r\n throw new Error(\"replaceAt: Invalid pos = \" + pos + \", removeCount = \" + removeCount + \", str.length = \" + str.length);\r\n }\r\n else {\r\n return str.substring(0, pos) + insert + str.substring(pos + removeCount);\r\n }\r\n}\r\n\r\n/**\r\n * Insert string to another.\r\n * @param str \r\n * @param pos \r\n * @param insertStr \r\n */\r\nexport function insertAt(str: string, pos: number, insertStr: string) {\r\n return replaceAt(str, pos, 0, insertStr);\r\n}\r\n\r\n/**\r\n * Remove part of string.\r\n * @param str \r\n * @param pos \r\n * @param removeCount \r\n */\r\nexport function removeAt(str: string, pos: number, removeCount: number) {\r\n return replaceAt(str, pos, removeCount, \"\");\r\n}\r\n\r\n/**\r\n * \"UndeclaredVariable\" => \"Undeclared variable\"\r\n * @param PascalString \r\n */\r\nexport function makeSentenceFromPascal(PascalString: string) {\r\n if (PascalString === \"\") {\r\n return \"\";\r\n }\r\n let word = PascalString.charAt(0);\r\n let sentence = \"\";\r\n\r\n const addWord = () => {\r\n if (word !== \"\") {\r\n if (sentence === \"\") {\r\n sentence += word.charAt(0).toUpperCase() + word.substring(1);\r\n }\r\n else {\r\n sentence += \" \" + word;\r\n }\r\n word = \"\";\r\n }\r\n }\r\n\r\n const isLetterAndCapital = (c: string) => {\r\n return c.toUpperCase() !== c.toLowerCase() && c === c.toUpperCase();\r\n }\r\n\r\n for (let i = 1; i < PascalString.length; i++) {\r\n let c = PascalString.charAt(i);\r\n if (isLetterAndCapital(c)) {\r\n addWord();\r\n }\r\n word += c.toLowerCase();\r\n }\r\n\r\n addWord();\r\n\r\n return sentence;\r\n}\r\n","export namespace Cookies {\r\n\r\n const ConsentCookieName = \"ConsentCookie\";\r\n\r\n enum ConsentState {\r\n Accept = \"accept\",\r\n Decline = \"decline\"\r\n }\r\n\r\n let _consent: ConsentState | undefined;\r\n let _expires: Date | undefined;\r\n\r\n let str = _read(ConsentCookieName);\r\n _consent = (str === ConsentState.Accept || str === ConsentState.Decline) ? str : undefined;\r\n\r\n export function setExpireDays(days: number) {\r\n _expires = new Date();\r\n _expires.setDate(_expires.getDate() + days);\r\n }\r\n\r\n export function isConsentPending() {\r\n return _consent === undefined;\r\n }\r\n\r\n export function accept() {\r\n _consent = ConsentState.Accept;\r\n _save(ConsentCookieName, _consent);\r\n }\r\n\r\n export function decline() {\r\n _consent = ConsentState.Decline;\r\n _save(ConsentCookieName, _consent);\r\n }\r\n\r\n function _getList(): string[] {\r\n let s = document.cookie;\r\n return s.split(\";\").map(c => c.trim());\r\n }\r\n\r\n function _save<T extends string | number | boolean>(name: string, value: T): T {\r\n let cookie = name + \"=\" + value.toString() + \";sameSite=Lax;\";\r\n\r\n if (_expires) {\r\n cookie += \"expires=\" + _expires.toUTCString() + \";\";\r\n }\r\n\r\n document.cookie = cookie;\r\n\r\n return value;\r\n }\r\n\r\n function _read(name: string, defaultValue?: string): string | undefined {\r\n let str = _getList().find(c => c.startsWith(name + \"=\"));\r\n return str === undefined ? defaultValue : str.substring(name.length + 1);\r\n }\r\n\r\n function _erase(name: string) {\r\n document.cookie = name + \"=;\" + \"expires=Thu, 01 Jan 1970 00:00:00 UTC;\";\r\n }\r\n\r\n export function save<T extends string | number | boolean>(name: string, value: T): T {\r\n if (_consent === ConsentState.Accept) {\r\n _save(name, value);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n export function read(name: string, defaultValue: string): string {\r\n if (_consent === ConsentState.Accept) {\r\n return _read(name, defaultValue) || defaultValue;\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function readInt(name: string, defaultValue: number): number {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : parseInt(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function readBool(name: string, defaultValue: boolean): boolean {\r\n if (_consent === ConsentState.Accept) {\r\n let str = _read(name);\r\n return str === undefined ? defaultValue : (/true|1/i).test(str);\r\n }\r\n else {\r\n return defaultValue;\r\n }\r\n }\r\n\r\n export function erase(name: string) {\r\n if (_consent === ConsentState.Accept || name === ConsentCookieName) {\r\n _erase(name);\r\n }\r\n }\r\n\r\n export function eraseAll() {\r\n document.cookie.split(';').forEach(c => erase(c.trim().split('=')[0]));\r\n }\r\n}\r\n","import { Assert } from \"../modules/assert\";\r\n\r\nexport class Stack<T> {\r\n private readonly list: T[] = [];\r\n\r\n push(e: T) {\r\n this.list.push(e);\r\n return e;\r\n }\r\n\r\n pop(): T {\r\n Assert.int_gt(this.list.length, 0);\r\n return this.list.pop()!;\r\n }\r\n\r\n top() {\r\n return Assert.array_elem(this.list, this.list.length - 1, \"Stack is empty!\");\r\n }\r\n\r\n toArray() {\r\n return this.list;\r\n }\r\n\r\n get length() {\r\n return this.list.length;\r\n }\r\n\r\n clear() {\r\n this.list.length = 0;\r\n }\r\n}\r\n","export class Vec2 {\r\n readonly x: number;\r\n readonly y: number;\r\n\r\n constructor(x?: number, y?: number) {\r\n this.x = x ?? 0;\r\n this.y = y ?? 0;\r\n }\r\n\r\n length() {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n\r\n add(a: Vec2) {\r\n return new Vec2(this.x + a.x, this.y + a.y);\r\n }\r\n\r\n sub(a: Vec2) {\r\n return new Vec2(this.x - a.x, this.y - a.y);\r\n }\r\n\r\n mul(a: number) {\r\n return new Vec2(this.x * a, this.y * a);\r\n }\r\n\r\n div(a: number) {\r\n return new Vec2(this.x / a, this.y / a);\r\n }\r\n}\r\n","/**\r\n * LRUCache class: Least Recently Used cache with a fixed capacity\r\n * \r\n * Provided by ChatGPT.\r\n */\r\nexport class LRUCache<K extends string, V> {\r\n private cache: Record<K, V>; // Stores the actual key-value pairs\r\n private next: Record<K, K>; // Linked list: points to the next newer key\r\n private prev: Record<K, K>; // Linked list: points to the previous older key\r\n private head: K | null; // The least recently used key (oldest)\r\n private tail: K | null; // The most recently used key (newest)\r\n private capacity: number; // Maximum number of items allowed\r\n private size: number; // Current number of items\r\n private maxKeyLength: number; // Maximum key length.\r\n\r\n constructor(maxSize: number, maxKeyLength: number = Infinity) {\r\n this.cache = Object.create(null);\r\n this.next = Object.create(null);\r\n this.prev = Object.create(null);\r\n this.head = null;\r\n this.tail = null;\r\n this.capacity = maxSize;\r\n this.size = 0;\r\n this.maxKeyLength = maxKeyLength;\r\n }\r\n\r\n // Retrieves a value from the cache\r\n get(key: K): V | undefined {\r\n if (key.length > this.maxKeyLength) return undefined;\r\n\r\n if (this.cache[key] !== undefined) {\r\n this.touch(key); // Mark as recently used\r\n return this.cache[key];\r\n }\r\n return undefined; // Key not found\r\n }\r\n\r\n set(key: K, value: V): void {\r\n if (key.length > this.maxKeyLength) {\r\n // Skip caching for keys that are too large\r\n return;\r\n }\r\n\r\n if (this.cache[key] !== undefined) {\r\n // Update value and mark as recently used\r\n this.cache[key] = value;\r\n this.touch(key);\r\n return;\r\n }\r\n\r\n // If cache is full, evict the least recently used item\r\n if (this.size >= this.capacity) {\r\n this.evict();\r\n }\r\n\r\n // Add new entry to the cache and to the tail (most recent)\r\n this.cache[key] = value;\r\n this.addToTail(key);\r\n this.size++;\r\n }\r\n\r\n // Marks a key as most recently used\r\n private touch(key: K): void {\r\n if (this.tail === key) return; // Already the most recently used\r\n\r\n this.removeKey(key); // Remove from current position\r\n this.addToTail(key); // Re-add at the tail\r\n }\r\n\r\n // Evicts the least recently used item (at the head)\r\n private evict(): void {\r\n if (this.head !== null) {\r\n const oldestKey = this.head;\r\n this.removeKey(oldestKey); // Remove from the linked list\r\n delete this.cache[oldestKey]; // Remove from cache storage\r\n this.size--;\r\n }\r\n }\r\n\r\n // Removes a key from the linked list\r\n private removeKey(key: K): void {\r\n const prevKey = this.prev[key];\r\n const nextKey = this.next[key];\r\n\r\n if (prevKey !== undefined) {\r\n this.next[prevKey] = nextKey;\r\n }\r\n else {\r\n // If no previous key, this was the head\r\n this.head = nextKey ?? null;\r\n }\r\n\r\n if (nextKey !== undefined) {\r\n this.prev[nextKey] = prevKey;\r\n }\r\n else {\r\n // If no next key, this was the tail\r\n this.tail = prevKey ?? null;\r\n }\r\n\r\n // Clean up links\r\n delete this.prev[key];\r\n delete this.next[key];\r\n }\r\n\r\n // Adds a key to the tail (most recently used position)\r\n private addToTail(key: K): void {\r\n if (this.tail !== null) {\r\n // Link the current tail to the new key\r\n this.next[this.tail] = key;\r\n this.prev[key] = this.tail;\r\n }\r\n else {\r\n // If the cache was empty, set as head\r\n this.head = key;\r\n }\r\n this.tail = key; // Always set as new tail\r\n }\r\n}\r\n","import { isInteger } from \"../utils/math\";\r\n\r\n/**\r\n * A cache-like structure optimized for small-range integer keys, including negatives.\r\n *\r\n * Internally implemented using two sparse arrays: one for non-negative keys,\r\n * and one for negative keys (stored by index `-key - 1`).\r\n *\r\n * @remarks\r\n * - Fast access for small integer keys.\r\n * - Not suitable for large or sparse key ranges — memory usage may grow significantly.\r\n * - Supports `get`, `set`, `delete`, `has` and `clear`\r\n *\r\n * @example\r\n * ```ts\r\n * const cache = new SmallIntCache<string>();\r\n * cache.set(-2, 'A');\r\n * cache.set(3, 'B');\r\n * console.log(cache.get(-2)); // 'A'\r\n * ```\r\n */\r\nexport class SmallIntCache<V> {\r\n private pos: V[]; // for keys >= 0\r\n private neg: V[]; // for keys < 0\r\n\r\n constructor() {\r\n this.pos = [];\r\n this.neg = [];\r\n }\r\n\r\n set(key: number, value: V): void {\r\n if (!isInteger(key)) {\r\n throw new Error(\"Key must be an integer\");\r\n }\r\n else if (key >= 0) {\r\n this.pos[key] = value;\r\n }\r\n else {\r\n this.neg[-key - 1] = value; // e.g., key = -1 => index = 0\r\n }\r\n }\r\n\r\n get(key: number): V | undefined {\r\n if (!isInteger(key)) {\r\n throw new Error(\"Key must be an integer\");\r\n }\r\n else if (key >= 0) {\r\n return this.pos[key];\r\n }\r\n else {\r\n return this.neg[-key - 1];\r\n }\r\n }\r\n\r\n has(key: number): boolean {\r\n if (!isInteger(key)) {\r\n return false;\r\n }\r\n else if (key >= 0) {\r\n return key in this.pos;\r\n }\r\n else {\r\n return (-key - 1) in this.neg;\r\n }\r\n }\r\n\r\n delete(key: number): void {\r\n if (!isInteger(key)) {\r\n return;\r\n }\r\n else if (key >= 0) {\r\n delete this.pos[key];\r\n }\r\n else {\r\n delete this.neg[-key - 1];\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.pos = [];\r\n this.neg = [];\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,SAAS,UAAU,GAAyB;AAC/C,SAAO,OAAO,MAAM,YAAY,SAAS,CAAC,KAAK,MAAM,KAAK,MAAM,CAAC;AACrE;AAEO,SAAS,iBAAiB,cAA8B;AAC3D,MAAI,CAAC,SAAS,YAAY,GAAG;AACzB,UAAM,IAAI,MAAM,6CAA6C,YAAY;AAAA,EAC7E,WACS,gBAAgB,GAAG;AACxB,WAAO;AAAA,EACX,OACK;AACD,WAAO,KAAK,KAAK,MAAM,YAAY;AAAA,EACvC;AACJ;AAEO,SAAS,IAAI,GAAW,GAAW;AACtC,UAAS,IAAI,IAAK,KAAK;AAC3B;AAMO,SAAS,SAAS,GAAW;AAChC,MAAI,CAAC,UAAU,CAAC,KAAK,IAAI,GAAG;AACxB,UAAM,IAAI,MAAM,2BAA2B,CAAC;AAAA,EAChD;AAEA,MAAI,SAAS,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE;AAChC,MAAI,MAAM;AAAA,IAAC;AAAA,IAAI;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAM;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAQ;AAAA,IAC7D;AAAA,IAAI;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAM;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAQ;AAAA,IACtD;AAAA,IAAI;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAM;AAAA,IAAK;AAAA,IAAM;AAAA,IAAO;AAAA,IAAQ;AAAA,EAAI;AAC9D,MAAI,QAAQ,IAAI,IAAI;AACpB,SAAO,IAAK,UAAS,IAAI,CAAC,OAAO,IAAI,IAAM,IAAI,EAAG,KAAK,MAAM;AAC7D,SAAO,MAAM,CAAC,OAAO,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,IAAI;AACnD;AAEO,SAAS,gBAAgB,GAAW;AACvC,MAAI,CAAC,UAAU,CAAC,GAAG;AACf,UAAM,IAAI,MAAM,kCAAkC,CAAC;AAAA,EACvD;AAEA,QAAM,OAAO,EAAE,SAAS;AACxB,QAAM,YAAY,OAAO,KAAK,OAAO,KAAK,SAAS,CAAC,CAAC;AAErD,MAAI,MAAM,KAAK,KAAK,MAAM,cAAc,GAAG;AACvC,WAAO,OAAO;AAAA,EAClB,WACS,MAAM,KAAK,KAAK,MAAM,cAAc,GAAG;AAC5C,WAAO,OAAO;AAAA,EAClB,WACS,MAAM,KAAK,KAAK,MAAM,cAAc,GAAG;AAC5C,WAAO,OAAO;AAAA,EAClB,OACK;AACD,WAAO,OAAO;AAAA,EAClB;AACJ;AAEO,SAAS,iBAAiB,QAAgB,QAAgB,MAAc,MAAc,GAAW;AACpG,SAAO;AAAA,IACH,GAAG,UAAU,OAAO,UAAU;AAAA,IAC9B,GAAG,UAAU,OAAO,UAAU;AAAA,EAClC;AACJ;AAEO,SAAS,aAAa,QAAgB,QAAgB,MAAc,MAAc,GAAW;AAChG,MAAI,KAAK,IAAI,WAAW,OAAO;AAC/B,SAAO,UAAU,OAAO,UAAU;AACtC;AAEO,SAAS,MAAM,KAAa,KAAa,KAAa;AACzD,SAAO,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG;AAC3C;AAEO,SAAS,WAAW,IAAY,IAAY,IAAY,IAAY;AACvE,MAAI,KAAK,KAAK;AACd,MAAI,KAAK,KAAK;AAEd,MAAI,KAAK,CAAC;AACV,MAAI,KAAK;AAET,MAAI,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;AAErC,MAAI,MAAM,GAAG;AACT,UAAM;AACN,UAAM;AAAA,EACV,OACK;AACD,SAAK;AACL,SAAK;AAAA,EACT;AAEA,SAAO,EAAE,IAAI,GAAG;AACpB;AAEO,SAAS,IAAI,KAAuB;AACvC,SAAO,IAAI,OAAO,CAAC,MAAM,QAAQ,MAAM,MAAM,CAAC;AAClD;;;ADlGO,SAAS,QAAW,GAA4B;AACnD,SAAO,CAAC,CAAC,KAAK,OAAO,UAAU,SAAS,KAAK,CAAC,MAAM;AACxD;AAEO,SAAS,QAAW,GAAsB;AAC7C,SAAO,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;AAC9B;AAEO,SAAS,UAAa,GAAoB;AAC7C,SAAO,MAAM,SAAY,IAAI,EAAE,MAAM;AACzC;AAEO,SAAS,iBAAoB,GAAa;AAC7C,SAAO,EAAE,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,QAAQ,IAAI,MAAM,GAAG;AACjE;AAEO,SAAS,oBAAuB,KAAuB,KAAqC;AAC/F,SAAO,IAAI,OAAO,CAAC,IAAI,OAAO,SAAS,UAAU,KAAK,UAAU,QAAM,IAAI,IAAI,EAAE,CAAC,CAAC;AACtF;AAEO,SAAS,UAAa,WAAc,WAAwB;AAC/D,MAAI,CAAC,UAAU,SAAS,KAAK,YAAY,GAAG;AACxC,UAAM,IAAI,MAAM,oCAAoC,SAAS;AAAA,EACjE;AACA,SAAO,IAAI,MAAS,SAAS,EAAE,KAAK,SAAS;AACjD;AAEO,SAAS,iBAAoB,KAAa,IAA2B;AACxE,MAAI,CAAC,UAAU,GAAG,KAAK,MAAM,GAAG;AAC5B,UAAM,IAAI,MAAM,qCAAqC,GAAG;AAAA,EAC5D;AACA,MAAI,MAAW,IAAI,MAAM,GAAG;AAC5B,WAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAAE,QAAI,CAAC,IAAI,GAAG,CAAC;AAAA,EAAG;AAChD,SAAO;AACX;AAEO,SAAS,iBAAiB,KAAuB;AACpD,SAAO,iBAAiB,KAAK,OAAK,CAAC;AACvC;AAEO,SAAS,cAAiB,OAAe,KAAa,IAA2B;AACpF,MAAI,CAAC,UAAU,KAAK,GAAG;AACnB,UAAM,IAAI,MAAM,oCAAoC,GAAG;AAAA,EAC3D;AACA,MAAI,CAAC,UAAU,GAAG,GAAG;AACjB,UAAM,IAAI,MAAM,kCAAkC,GAAG;AAAA,EACzD;AACA,MAAI,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;AAClC,MAAI,MAAW,IAAI,MAAM,GAAG;AAC5B,WAAS,IAAI,GAAG,IAAI,OAAO,MAAM,KAAK,KAAK,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK;AAAE,QAAI,CAAC,IAAI,GAAG,CAAC;AAAA,EAAG;AACnG,SAAO;AACX;AAEO,SAAS,cAAc,OAAe,KAAuB;AAChE,SAAO,cAAc,OAAO,KAAK,OAAK,CAAC;AAC3C;AAEO,SAAS,cAAiC,KAAU,MAAkB;AACzE,SAAO,IAAI,QAAQ,IAAI,KAAK;AAChC;AAEO,SAAS,YAAe,KAAuB,YAA2B;AAC7E,MAAI,CAAC,UAAU,UAAU,KAAK,aAAa,GAAG;AAC1C,UAAM,IAAI,MAAM,uCAAuC,UAAU;AAAA,EACrE;AACA,MAAI,SAAgB,CAAC;AACrB,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,YAAY;AAC7C,WAAO,KAAK,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC;AAAA,EAC5C;AACA,SAAO;AACX;;;AExEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAIO,SAAS,cAAoC,GAA2B;AAC3E,SAAO,OAAO,KAAK,CAAC,EAAE,OAAO,SAAO,OAAO,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,SAAO,EAAE,GAAG,CAAiB;AACpG;;;ACJO,IAAU;AAAA,CAAV,CAAUA,YAAV;AAIH,MAAI,mBAAqC;AAElC,WAAS,cAAc,IAAuB;AACjD,uBAAmB,MAAM;AAAA,EAC7B;AAFO,EAAAA,QAAS;AAIhB,WAAS,WAAW,UAAkB,SAAyB;AAC3D,UAAM,IAAI,iBAAiB,sBAAsB,YAAY,UAAU,MAAM,UAAU,GAAG;AAAA,EAC9F;AAEA,WAAS,OAAO,GAAyB;AACrC,WAAO,OAAO,MAAM,YAAY,SAAS,CAAC,KAAK,MAAM,KAAK,MAAM,CAAC;AAAA,EACrE;AAEA,WAAS,UAAU,GAAyB;AACxC,WAAO,OAAO,MAAM;AAAA,EACxB;AAEO,WAAS,OAAU,GAAM,SAAkB;AAC9C,QAAI,CAAC,GAAG;AACJ,iBAAW,WAAW,mBAAmB;AAAA,IAC7C;AAAA,EACJ;AAJO,EAAAA,QAAS;AAMT,WAAS,WAAsD,OAAgB,SAAY,OAAO,SAAsC;AAC3I,QAAI,CAAC,cAAc,OAAO,EAAE,KAAK,OAAK,MAAM,KAAK,GAAG;AAChD,YAAM,IAAI,UAAU,WAAW,IAAI,gBAAgB,KAAK,EAAE;AAAA,IAC9D;AAAA,EACJ;AAJO,EAAAA,QAAS;AAMT,WAAS,UAAU,SAAyB;AAC/C,eAAW,WAAW,cAAc;AAAA,EACxC;AAFO,EAAAA,QAAS;AAIT,WAAS,IAAI,GAAY,SAA0B;AACtD,QAAI,CAAC,OAAO,CAAC,GAAG;AACZ,iBAAW,YAAY,CAAC,mBAAmB,OAAO;AAAA,IACtD;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,GAAM,GAAM,GAAM,SAAqB;AACnD,QAAI,MAAM,GAAG;AACT,iBAAW,YAAY,CAAC,aAAa,CAAC,KAAK,OAAO;AAAA,IACtD;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,OAAO,GAAY,GAAY,SAA0B;AACrE,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC,KAAK,MAAM,IAAI;AACzC,iBAAW,YAAY,CAAC,2BAA2B,CAAC,KAAK,OAAO;AAAA,IACpE;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,OAAO,GAAY,GAAY,SAA0B;AACrE,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC,KAAK,IAAI,IAAI;AACvC,iBAAW,YAAY,CAAC,4BAA4B,CAAC,KAAK,OAAO;AAAA,IACrE;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,QAAQ,GAAY,GAAY,SAA0B;AACtE,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC,KAAK,KAAK,IAAI;AACxC,iBAAW,YAAY,CAAC,wCAAwC,CAAC,KAAK,OAAO;AAAA,IACjF;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,OAAO,GAAY,GAAY,SAA0B;AACrE,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC,KAAK,IAAI,IAAI;AACvC,iBAAW,YAAY,CAAC,+BAA+B,CAAC,KAAK,OAAO;AAAA,IACxE;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,QAAQ,GAAY,GAAY,SAA0B;AACtE,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC,KAAK,KAAK,IAAI;AACxC,iBAAW,YAAY,CAAC,2CAA2C,CAAC,KAAK,OAAO;AAAA,IACpF;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,YAAY,GAAY,KAAc,KAAc,SAA0B;AAC1F,QAAI,EAAE,OAAO,CAAC,KAAK,UAAU,GAAG,KAAK,UAAU,GAAG,KAAK,KAAK,OAAO,KAAK,MAAM;AAC1E,iBAAW,YAAY,CAAC,0BAA0B,GAAG,QAAQ,GAAG,KAAK,OAAO;AAAA,IAChF;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,IAAI,GAAY,SAA0B;AACtD,QAAI,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM,IAAI;AAC7B,iBAAW,YAAY,CAAC,sBAAsB,OAAO;AAAA,IACzD;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,KAAK,GAAY,SAA0B;AACvD,QAAI,EAAE,OAAO,CAAC,KAAK,IAAI,MAAM,IAAI;AAC7B,iBAAW,YAAY,CAAC,uBAAuB,OAAO;AAAA,IAC1D;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,SAAY,GAAM,OAAyB,SAAqB;AAC5E,QAAI,CAAE,MAAM,KAAK,OAAK,MAAM,CAAC,GAAI;AAC7B,UAAI,WAAW,MAAM,IAAI,OAAK,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI;AAClD,iBAAW,YAAY,CAAC,oBAAoB,QAAQ,MAAM,OAAO;AAAA,IACrE;AACA,WAAO;AAAA,EACX;AANO,EAAAA,QAAS;AAQT,WAAS,OAAO,GAAY,SAA0B;AACzD,QAAI,EAAE,UAAU,CAAC,KAAK,SAAS,CAAC,IAAI;AAChC,iBAAW,YAAY,CAAC,yBAAyB,OAAO;AAAA,IAC5D;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,SAAY,KAAoB,IAAa,SAA0B;AACnF,QAAI,EAAE,OAAO,EAAE,KAAK,MAAM,KAAK,KAAK,IAAI,SAAS;AAC7C,iBAAW,YAAY,EAAE,oCAAoC,IAAI,SAAS,CAAC,MAAM,OAAO;AAAA,IAC5F;AACA,WAAO;AAAA,EACX;AALO,EAAAA,QAAS;AAOT,WAAS,WAAc,KAAoB,IAAY,SAAqB;AAC/E,WAAO,IAAI,SAAS,KAAK,IAAI,OAAO,CAAC;AAAA,EACzC;AAFO,EAAAA,QAAS;AAIT,WAASC,SAAW,KAAQ,SAAkC;AACjE,QAAI,QAAQ,QAAW;AACnB,iBAAW,gCAAgC,OAAO;AAAA,IACtD,OACK;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AAPO,EAAAD,QAAS,UAAAC;AAAA,GAtIH;;;ACAV,IAAU;AAAA,CAAV,CAAUC,YAAV;AACH,WAAS,SAAiB;AACtB,QAAI,KAAK,SAAS,cAAc,KAAK;AACrC,OAAG,MAAM,QAAQ;AACjB,aAAS,KAAK,YAAY,EAAE;AAC5B,QAAI,MAAM,GAAG;AACb,OAAG,OAAO;AACV,WAAO,OAAO;AAAA,EAClB;AAEA,WAAS,oBAA4B;AACjC,QAAI;AACA,UAAI,QAAQ,SAAS,cAAc,KAAK;AACxC,YAAM,MAAM,aAAa;AACzB,YAAM,MAAM,QAAQ;AAGpB,eAAS,KAAK,YAAY,KAAK;AAE/B,UAAI,gBAAgB,MAAM;AAE1B,YAAM,MAAM,WAAW;AAGvB,UAAI,QAAQ,SAAS,cAAc,KAAK;AACxC,YAAM,MAAM,QAAQ;AACpB,YAAM,YAAY,KAAK;AAEvB,UAAI,kBAAkB,MAAM;AAG5B,UAAI,MAAM,YAAY;AAClB,cAAM,WAAW,YAAY,KAAK;AAAA,MACtC;AAEA,aAAO,gBAAgB;AAAA,IAC3B,SACO,GAAG;AACN,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,WAAS,oBAA4B;AACjC,QAAI,SAAS,SAAS,cAAc,KAAK;AACzC,WAAO,MAAM,UAAU;AACvB,WAAO,YAAY,SAAS,eAAe,GAAG,CAAC;AAC/C,aAAS,KAAK,YAAY,MAAM;AAChC,QAAI,WAAW,OAAO;AACtB,aAAS,KAAK,YAAY,MAAM;AAChC,WAAO;AAAA,EACX;AAEA,WAAS,mBAA4B;AAGjC,QAAI,kBAAkB,UAAU,mBAAmB,UAAU,iBAAiB,YAAY,qBAAqB,UAAU;AACrH,aAAO;AAAA,IACX;AAKA,QAAI,WAAW,4BAA4B,MAAM,GAAG;AACpD,QAAI,KAAK,SAAUC,QAAe;AAC9B,aAAO,OAAO,WAAWA,MAAK,EAAE;AAAA,IACpC;AACA,QAAI,QAAQ,CAAC,KAAK,SAAS,KAAK,kBAAkB,GAAG,UAAU,GAAG,EAAE,KAAK,EAAE;AAC3E,WAAO,GAAG,KAAK;AAAA,EACnB;AAEA,WAAS,oBAAoB;AACzB,QAAI,IAAI,UAAU,aAAa,UAAU,UAAgB,OAAQ;AACjE,WAAQ,2TAA2T,KAAK,CAAC,KAAK,0kDAA0kD,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC;AAAA,EAC/6D;AAEA,WAAS,iBAAyB;AAC9B,WAAO,SAAS,WAAW,OAAO,SAAS;AAAA,EAC/C;AAGA,QAAM,aAAa;AACnB,QAAM,kBAAkB;AAEjB,EAAMD,QAAA,MAAM,OAAO;AACnB,EAAMA,QAAA,UAAUA,QAAA,MAAM;AACtB,EAAMA,QAAA,iBAAiB,kBAAkB;AACzC,EAAMA,QAAA,WAAW,kBAAkB;AACnC,EAAMA,QAAA,gBAAgB,iBAAiB;AACvC,EAAMA,QAAA,iBAAiB,kBAAkB;AACzC,EAAMA,QAAA,cAAc,eAAe;AAEnC,WAAS,OAAO,IAAoB;AACvC,WAAO,KAAKA,QAAA;AAAA,EAChB;AAFO,EAAAA,QAAS;AAIT,WAAS,OAAO,IAAoB;AACvC,WAAO,KAAKA,QAAA;AAAA,EAChB;AAFO,EAAAA,QAAS;AAIT,WAASE,MAAK,OAAgC;AACjD,QAAI,OAAO,UAAU,UAAU;AAC3B,aAAO;AAAA,IACX;AAEA,QAAI,QAAgB;AACpB,QAAI,OAA6B;AAEjC,QAAI,QAAQ,MAAM,SAAS,EAAE,MAAM,eAAe;AAElD,QAAI,SAAS,MAAM,CAAC,GAAG;AACnB,cAAQ,WAAW,MAAM,CAAC,CAAC;AAE3B,UAAI,UAAU,MAAM,CAAC,IAAI,MAAM,CAAC,EAAE,YAAY,IAAI;AAClD,UAAI,YAAY,WAAW,KAAK,OAAO;AAEvC,aAAO,YAAY,UAAsB;AACzC,UAAI,CAAC,MAAM;AACP,gBAAQ,IAAI,mBAAmB,UAAU,kBAAkB;AAAA,MAC/D;AAAA,IACJ,OACK;AACD,cAAQ,WAAW,KAAK;AAAA,IAC5B;AAEA,WAAO,OAAO,OAAO,wBAAwB;AAE7C,YAAQ,MAAM;AAAA,MACV,KAAK;AACD,eAAO,OAAO,KAAK;AAAA,MACvB,KAAK;AACD,eAAO,OAAO,KAAK,IAAI;AAAA,MAC3B,KAAK;AAAA,MACL,KAAK;AACD,eAAO,OAAO,KAAK,IAAI;AAAA,MAC3B,KAAK;AACD,eAAOF,QAAO,WAAW;AAAA,MAC7B;AAAA,MACA,KAAK;AACD,eAAO;AAAA,IACf;AAAA,EACJ;AAzCO,EAAAA,QAAS,OAAAE;AAAA,GAnGH;;;AHgBjB,SAAS,KAAK,OAAwD;AAClE,SAAO,UAAU,SAAY,SAAY,OAAO,KAAK,KAAK;AAC9D;AAEO,SAAS,SAAS,IAAiB,WAAmB;AACzD,MAAI,UAAU,WAAW,GAAG;AACxB,WAAO;AAAA,EACX,WACS,GAAG,WAAW;AACnB,WAAO,GAAG,UAAU,SAAS,SAAS;AAAA,EAC1C,OACK;AACD,WAAO,CAAC,CAAC,GAAG,UAAU,MAAM,IAAI,OAAO,YAAY,YAAY,SAAS,CAAC;AAAA,EAC7E;AACJ;AAEO,SAAS,SAAS,IAAiB,WAAmB;AACzD,MAAI,UAAU,WAAW,GAAG;AACxB;AAAA,EACJ,WACS,GAAG,WAAW;AACnB,OAAG,UAAU,IAAI,SAAS;AAAA,EAC9B,WACS,CAAC,SAAS,IAAI,SAAS,GAAG;AAC/B,OAAG,aAAa,MAAM;AAAA,EAC1B;AACJ;AAEO,SAAS,YAAY,IAAiB,WAAmB;AAC5D,MAAI,UAAU,WAAW,GAAG;AACxB;AAAA,EACJ,WACS,GAAG,WAAW;AACnB,OAAG,UAAU,OAAO,SAAS;AAAA,EACjC,WACS,SAAS,IAAI,SAAS,GAAG;AAC9B,QAAI,MAAM,IAAI,OAAO,YAAY,YAAY,SAAS;AACtD,OAAG,YAAY,GAAG,UAAU,QAAQ,KAAK,GAAG;AAAA,EAChD;AACJ;AAEO,SAAS,UAAU,IAAiB,MAAc,KAAa,OAAe,MAAM;AACvF,KAAG,MAAM,OAAO,OAAO;AACvB,KAAG,MAAM,MAAM,MAAM;AACzB;AAEO,SAAS,UAAU,IAAgD;AACtE,MAAI,MAAM,GAAG,sBAAsB;AACnC,MAAI,UAAU,SAAS;AACvB,SAAO;AAAA,IACH,KAAK,IAAI,MAAM,OAAO,cAAc,QAAQ;AAAA,IAC5C,MAAM,IAAI,OAAO,OAAO,cAAc,QAAQ;AAAA,EAClD;AACJ;AAEO,SAAS,SAAS,IAA0B;AAC/C,MAAI,cAAc,QAAQ;AACtB,WAAO,GAAG;AAAA,EACd,OACK;AACD,QAAI,IAAI,WAAW,iBAAiB,IAAI,IAAI,EAAE,MAAM,QAAQ,MAAM,EAAE,CAAC;AACrE,WAAO,MAAM,CAAC,IAAI,IAAI;AAAA,EAC1B;AACJ;AAEO,SAAS,SAAS,IAAiB,KAAa;AACnD,KAAG,MAAM,QAAQ,MAAM;AAC3B;AAEO,SAAS,UAAU,IAA0B;AAChD,MAAI,cAAc,QAAQ;AACtB,WAAO,GAAG;AAAA,EACd,OACK;AACD,QAAI,IAAI,WAAW,iBAAiB,IAAI,IAAI,EAAE,OAAO,QAAQ,MAAM,EAAE,CAAC;AACtE,WAAO,MAAM,CAAC,IAAI,IAAI;AAAA,EAC1B;AACJ;AAEO,SAAS,UAAU,IAAiB,KAAa;AACpD,KAAG,MAAM,SAAS,MAAM;AAC5B;AAEO,SAAS,SAAS,IAA8B,IAA8B;AACjF,KAAG,YAAY,EAAE;AACrB;AAEO,SAAS,iBAAiB,IAA8B;AAC3D,KAAG,OAAO;AACd;AAEO,SAAS,cAAc,IAA8B,SAAkB;AAC1E,KAAG,MAAM,UAAU,UAAU,UAAU;AAC3C;AAEO,SAAS,QAAQ,IAAiB,MAAc,KAAa,OAAe,QAAgB,OAAe,MAAM;AACpH,KAAG,MAAM,OAAO,OAAO;AACvB,KAAG,MAAM,MAAM,MAAM;AACrB,KAAG,MAAM,QAAQ,QAAQ;AACzB,KAAG,MAAM,SAAS,SAAS;AAC/B;AAEO,SAAS,UAAU,KAA0D;AAChF,MAAI,KAAK,OAAO,QAAQ,WAAW,SAAS,eAAe,GAAG,IAAI;AAClE,SAAO,cAAc,oBAAoB,KAAK;AAClD;AAEO,SAAS,UAAUC,SAA6D;AACnF,MAAI,KAAK,OAAOA,YAAW,WAAW,SAAS,eAAeA,OAAM,IAAIA;AACxE,SAAO,cAAc,oBAAoB,KAAK;AAClD;AAEO,SAAS,WAAW,OAAqF;AAC5G,MAAI,CAAC,OAAO;AACR,WAAO,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE;AAAA,EAClD;AAEA,MAAI,MAAM,KAAK,MAAM,UAAU;AAC/B,MAAI,QAAQ,KAAK,MAAM,YAAY;AACnC,MAAI,SAAS,KAAK,MAAM,aAAa;AACrC,MAAI,OAAO,KAAK,MAAM,WAAW;AAEjC,MAAI,WAAW,MAAM,WAAW,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE,OAAO,OAAK,EAAE,SAAS,CAAC;AAElF,UAAQ,QAAQ,QAAQ;AAAA,IACpB,KAAK;AACD;AAAA,IACJ,KAAK;AACD,oBAAQ,KAAK,QAAQ,CAAC,CAAC;AACvB,wBAAU,KAAK,QAAQ,CAAC,CAAC;AACzB,0BAAW,KAAK,QAAQ,CAAC,CAAC;AAC1B,sBAAS,KAAK,QAAQ,CAAC,CAAC;AACxB;AAAA,IACJ,KAAK;AACD,oBAAQ,KAAK,QAAQ,CAAC,CAAC;AACvB,wBAAU,KAAK,QAAQ,CAAC,CAAC;AACzB,0BAAW,KAAK,QAAQ,CAAC,CAAC;AAC1B,sBAAS,KAAK,QAAQ,CAAC,CAAC;AACxB;AAAA,IACJ,KAAK;AACD,oBAAQ,KAAK,QAAQ,CAAC,CAAC;AACvB,wBAAU,KAAK,QAAQ,CAAC,CAAC;AACzB,0BAAW,KAAK,QAAQ,CAAC,CAAC;AAC1B,sBAAS,KAAK,QAAQ,CAAC,CAAC;AACxB;AAAA,IACJ,KAAK;AAAA,IACL;AACI,oBAAQ,KAAK,QAAQ,CAAC,CAAC;AACvB,wBAAU,KAAK,QAAQ,CAAC,CAAC;AACzB,0BAAW,KAAK,QAAQ,CAAC,CAAC;AAC1B,sBAAS,KAAK,QAAQ,CAAC,CAAC;AACxB;AAAA,EACR;AAEA,gBAAQ;AACR,oBAAU;AACV,sBAAW;AACX,kBAAS;AAET,SAAO,EAAE,KAAK,OAAO,QAAQ,KAAK;AACtC;AAEO,SAAS,aAAa,OAAuB;AAChD,MAAI,OAAO,KAAK,OAAO,IAAI;AAC3B,MAAI,QAAQ,KAAK,OAAO,KAAK;AAC7B,MAAI,MAAM,KAAK,OAAO,GAAG;AACzB,MAAI,SAAS,KAAK,OAAO,MAAM;AAC/B,MAAI,QAAQ,KAAK,OAAO,KAAK;AAC7B,MAAI,SAAS,KAAK,OAAO,MAAM;AAE/B,MAAI,UAAU,UAAa,SAAS,UAAa,UAAU,QAAW;AAClE,YAAQ,QAAQ;AAAA,EACpB;AAEA,MAAI,WAAW,UAAa,QAAQ,UAAa,WAAW,QAAW;AACnE,aAAS,SAAS;AAAA,EACtB;AAEA,SAAO,EAAE,MAAM,KAAK,OAAO,OAAO;AACtC;AAEO,SAAS,mBAAmB,QAAwB,QAAwB;AAC/E,MAAI,CAAC,UAAU,CAAC,QAAQ;AACpB,WAAO;AAAA,EACX,WACS,CAAC,UAAU,CAAC,QAAQ;AACzB,WAAO;AAAA,EACX,OACK;AACD,WAAO,OAAO,SAAS,OAAO,QAAQ,OAAO,QAAQ,OAAO,OACxD,OAAO,UAAU,OAAO,SAAS,OAAO,WAAW,OAAO,UAC1D,OAAO,UAAU,OAAO,SAAS,OAAO,WAAW,OAAO;AAAA,EAClE;AACJ;AAEA,IAAI;AAEG,SAAS,mBAAmB,MAAc,MAAc;AAC3D,sBAAW,SAAS,cAAc,QAAQ;AAE1C,MAAI,MAAM,OAAO,WAAW,IAAI;AAChC,MAAI,CAAC,KAAK;AACN,WAAO;AAAA,EACX;AAEA,MAAI,OAAO;AAEX,SAAO,IAAI,YAAY,IAAI,EAAE;AACjC;;;AIlOA;AAAA;AAAA;AAAA;AACO,SAAS,WAAiB,KAAqB;AAClD,MAAI,OAAY,CAAC;AACjB,MAAI,QAAQ,CAAC,OAAU,QAAW,KAAK,KAAK,GAAG,CAAC;AAChD,SAAO;AACX;;;ACLA;AAAA;AAAA;AAAA;AAEO,SAAS,SAAS,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,QAAQ,KAAK;AACxE;;;ACJA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,SAAS,YAAY,KAAuB;AAC/C,SAAO,IAAI,MAAM,EAAE;AACvB;AAQO,SAAS,aAAaC,eAAsB,aAA6B;AAC5E,MAAI,CAAC,UAAU,WAAW,KAAK,cAAc,GAAG;AAC5C,UAAM,IAAI,MAAM,sCAAsC,WAAW;AAAA,EACrE;AAEA,SAAO,IAAI,MAAM,cAAc,CAAC,EAAE,KAAKA,aAAY;AACvD;AAOO,SAAS,YAAY,KAAa,WAA6B;AAClE,MAAI,CAAC,UAAU,SAAS,KAAK,YAAY,GAAG;AACxC,UAAM,IAAI,MAAM,uCAAuC,SAAS;AAAA,EACpE;AACA,MAAI,SAAmB,CAAC;AACxB,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,WAAW;AAC5C,WAAO,KAAK,IAAI,MAAM,GAAG,IAAI,SAAS,CAAC;AAAA,EAC3C;AACA,SAAO;AACX;AASO,SAAS,UAAU,KAAa,KAAa,aAAqB,QAAgB;AACrF,MAAI,CAAC,UAAU,WAAW,KAAK,cAAc,GAAG;AAC5C,UAAM,IAAI,MAAM,sCAAsC,WAAW;AAAA,EACrE,WACS,CAAC,UAAU,GAAG,KAAK,MAAM,KAAK,MAAM,cAAc,IAAI,QAAQ;AACnE,UAAM,IAAI,MAAM,8BAA8B,MAAM,qBAAqB,cAAc,oBAAoB,IAAI,MAAM;AAAA,EACzH,OACK;AACD,WAAO,IAAI,UAAU,GAAG,GAAG,IAAI,SAAS,IAAI,UAAU,MAAM,WAAW;AAAA,EAC3E;AACJ;AAQO,SAAS,SAAS,KAAa,KAAa,WAAmB;AAClE,SAAO,UAAU,KAAK,KAAK,GAAG,SAAS;AAC3C;AAQO,SAAS,SAAS,KAAa,KAAa,aAAqB;AACpE,SAAO,UAAU,KAAK,KAAK,aAAa,EAAE;AAC9C;AAMO,SAAS,uBAAuB,cAAsB;AACzD,MAAI,iBAAiB,IAAI;AACrB,WAAO;AAAA,EACX;AACA,MAAI,OAAO,aAAa,OAAO,CAAC;AAChC,MAAI,WAAW;AAEf,QAAM,UAAU,MAAM;AAClB,QAAI,SAAS,IAAI;AACb,UAAI,aAAa,IAAI;AACjB,oBAAY,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,UAAU,CAAC;AAAA,MAC/D,OACK;AACD,oBAAY,MAAM;AAAA,MACtB;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AAEA,QAAM,qBAAqB,CAAC,MAAc;AACtC,WAAO,EAAE,YAAY,MAAM,EAAE,YAAY,KAAK,MAAM,EAAE,YAAY;AAAA,EACtE;AAEA,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,QAAI,IAAI,aAAa,OAAO,CAAC;AAC7B,QAAI,mBAAmB,CAAC,GAAG;AACvB,cAAQ;AAAA,IACZ;AACA,YAAQ,EAAE,YAAY;AAAA,EAC1B;AAEA,UAAQ;AAER,SAAO;AACX;;;ACrHO,IAAU;AAAA,CAAV,CAAUC,aAAV;AAEH,QAAM,oBAAoB;AAE1B,MAAK;AAAL,IAAKC,kBAAL;AACI,IAAAA,cAAA,YAAS;AACT,IAAAA,cAAA,aAAU;AAAA,KAFT;AAKL,MAAI;AACJ,MAAI;AAEJ,MAAI,MAAM,MAAM,iBAAiB;AACjC,aAAY,QAAQ,yBAAuB,QAAQ,0BAAwB,MAAM;AAE1E,WAAS,cAAc,MAAc;AACxC,eAAW,oBAAI,KAAK;AACpB,aAAS,QAAQ,SAAS,QAAQ,IAAI,IAAI;AAAA,EAC9C;AAHO,EAAAD,SAAS;AAKT,WAAS,mBAAmB;AAC/B,WAAO,aAAa;AAAA,EACxB;AAFO,EAAAA,SAAS;AAIT,WAAS,SAAS;AACrB,eAAW;AACX,UAAM,mBAAmB,QAAQ;AAAA,EACrC;AAHO,EAAAA,SAAS;AAKT,WAAS,UAAU;AACtB,eAAW;AACX,UAAM,mBAAmB,QAAQ;AAAA,EACrC;AAHO,EAAAA,SAAS;AAKhB,WAAS,WAAqB;AAC1B,QAAI,IAAI,SAAS;AACjB,WAAO,EAAE,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC;AAAA,EACzC;AAEA,WAAS,MAA2C,MAAc,OAAa;AAC3E,QAAI,SAAS,OAAO,MAAM,MAAM,SAAS,IAAI;AAE7C,QAAI,UAAU;AACV,gBAAU,aAAa,SAAS,YAAY,IAAI;AAAA,IACpD;AAEA,aAAS,SAAS;AAElB,WAAO;AAAA,EACX;AAEA,WAAS,MAAM,MAAc,cAA2C;AACpE,QAAIE,OAAM,SAAS,EAAE,KAAK,OAAK,EAAE,WAAW,OAAO,GAAG,CAAC;AACvD,WAAOA,SAAQ,SAAY,eAAeA,KAAI,UAAU,KAAK,SAAS,CAAC;AAAA,EAC3E;AAEA,WAAS,OAAO,MAAc;AAC1B,aAAS,SAAS,OAAO;AAAA,EAC7B;AAEO,WAAS,KAA0C,MAAc,OAAa;AACjF,QAAI,aAAa,uBAAqB;AAClC,YAAM,MAAM,KAAK;AAAA,IACrB;AAEA,WAAO;AAAA,EACX;AANO,EAAAF,SAAS;AAQT,WAAS,KAAK,MAAc,cAA8B;AAC7D,QAAI,aAAa,uBAAqB;AAClC,aAAO,MAAM,MAAM,YAAY,KAAK;AAAA,IACxC,OACK;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AAPO,EAAAA,SAAS;AAST,WAAS,QAAQ,MAAc,cAA8B;AAChE,QAAI,aAAa,uBAAqB;AAClC,UAAIE,OAAM,MAAM,IAAI;AACpB,aAAOA,SAAQ,SAAY,eAAe,SAASA,IAAG;AAAA,IAC1D,OACK;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AARO,EAAAF,SAAS;AAUT,WAAS,SAAS,MAAc,cAAgC;AACnE,QAAI,aAAa,uBAAqB;AAClC,UAAIE,OAAM,MAAM,IAAI;AACpB,aAAOA,SAAQ,SAAY,eAAgB,UAAW,KAAKA,IAAG;AAAA,IAClE,OACK;AACD,aAAO;AAAA,IACX;AAAA,EACJ;AARO,EAAAF,SAAS;AAUT,WAAS,MAAM,MAAc;AAChC,QAAI,aAAa,yBAAuB,SAAS,mBAAmB;AAChE,aAAO,IAAI;AAAA,IACf;AAAA,EACJ;AAJO,EAAAA,SAAS;AAMT,WAAS,WAAW;AACvB,aAAS,OAAO,MAAM,GAAG,EAAE,QAAQ,OAAK,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,EACzE;AAFO,EAAAA,SAAS;AAAA,GAvGH;;;ACEV,IAAM,QAAN,MAAe;AAAA,EAAf;AACH,wBAAiB,QAAY,CAAC;AAAA;AAAA,EAE9B,KAAK,GAAM;AACP,SAAK,KAAK,KAAK,CAAC;AAChB,WAAO;AAAA,EACX;AAAA,EAEA,MAAS;AACL,WAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACjC,WAAO,KAAK,KAAK,IAAI;AAAA,EACzB;AAAA,EAEA,MAAM;AACF,WAAO,OAAO,WAAW,KAAK,MAAM,KAAK,KAAK,SAAS,GAAG,iBAAiB;AAAA,EAC/E;AAAA,EAEA,UAAU;AACN,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,SAAS;AACT,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EAEA,QAAQ;AACJ,SAAK,KAAK,SAAS;AAAA,EACvB;AACJ;;;AC9BO,IAAM,OAAN,MAAM,MAAK;AAAA,EAId,YAAY,GAAY,GAAY;AAHpC,wBAAS;AACT,wBAAS;AAGL,SAAK,IAAI,KAAK;AACd,SAAK,IAAI,KAAK;AAAA,EAClB;AAAA,EAEA,SAAS;AACL,WAAO,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AAAA,EACtD;AAAA,EAEA,IAAI,GAAS;AACT,WAAO,IAAI,MAAK,KAAK,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;AAAA,EAC9C;AAAA,EAEA,IAAI,GAAS;AACT,WAAO,IAAI,MAAK,KAAK,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC;AAAA,EAC9C;AAAA,EAEA,IAAI,GAAW;AACX,WAAO,IAAI,MAAK,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC;AAAA,EAC1C;AAAA,EAEA,IAAI,GAAW;AACX,WAAO,IAAI,MAAK,KAAK,IAAI,GAAG,KAAK,IAAI,CAAC;AAAA,EAC1C;AACJ;;;ACvBO,IAAM,WAAN,MAAoC;AAAA;AAAA,EAUvC,YAAY,SAAiB,eAAuB,UAAU;AAT9D,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AACR;AAAA,wBAAQ;AAGJ,SAAK,QAAQ,uBAAO,OAAO,IAAI;AAC/B,SAAK,OAAO,uBAAO,OAAO,IAAI;AAC9B,SAAK,OAAO,uBAAO,OAAO,IAAI;AAC9B,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,WAAW;AAChB,SAAK,OAAO;AACZ,SAAK,eAAe;AAAA,EACxB;AAAA;AAAA,EAGA,IAAI,KAAuB;AACvB,QAAI,IAAI,SAAS,KAAK,aAAc,QAAO;AAE3C,QAAI,KAAK,MAAM,GAAG,MAAM,QAAW;AAC/B,WAAK,MAAM,GAAG;AACd,aAAO,KAAK,MAAM,GAAG;AAAA,IACzB;AACA,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,KAAQ,OAAgB;AACxB,QAAI,IAAI,SAAS,KAAK,cAAc;AAEhC;AAAA,IACJ;AAEA,QAAI,KAAK,MAAM,GAAG,MAAM,QAAW;AAE/B,WAAK,MAAM,GAAG,IAAI;AAClB,WAAK,MAAM,GAAG;AACd;AAAA,IACJ;AAGA,QAAI,KAAK,QAAQ,KAAK,UAAU;AAC5B,WAAK,MAAM;AAAA,IACf;AAGA,SAAK,MAAM,GAAG,IAAI;AAClB,SAAK,UAAU,GAAG;AAClB,SAAK;AAAA,EACT;AAAA;AAAA,EAGQ,MAAM,KAAc;AACxB,QAAI,KAAK,SAAS,IAAK;AAEvB,SAAK,UAAU,GAAG;AAClB,SAAK,UAAU,GAAG;AAAA,EACtB;AAAA;AAAA,EAGQ,QAAc;AAClB,QAAI,KAAK,SAAS,MAAM;AACpB,YAAM,YAAY,KAAK;AACvB,WAAK,UAAU,SAAS;AACxB,aAAO,KAAK,MAAM,SAAS;AAC3B,WAAK;AAAA,IACT;AAAA,EACJ;AAAA;AAAA,EAGQ,UAAU,KAAc;AAC5B,UAAM,UAAU,KAAK,KAAK,GAAG;AAC7B,UAAM,UAAU,KAAK,KAAK,GAAG;AAE7B,QAAI,YAAY,QAAW;AACvB,WAAK,KAAK,OAAO,IAAI;AAAA,IACzB,OACK;AAED,WAAK,OAAO,WAAW;AAAA,IAC3B;AAEA,QAAI,YAAY,QAAW;AACvB,WAAK,KAAK,OAAO,IAAI;AAAA,IACzB,OACK;AAED,WAAK,OAAO,WAAW;AAAA,IAC3B;AAGA,WAAO,KAAK,KAAK,GAAG;AACpB,WAAO,KAAK,KAAK,GAAG;AAAA,EACxB;AAAA;AAAA,EAGQ,UAAU,KAAc;AAC5B,QAAI,KAAK,SAAS,MAAM;AAEpB,WAAK,KAAK,KAAK,IAAI,IAAI;AACvB,WAAK,KAAK,GAAG,IAAI,KAAK;AAAA,IAC1B,OACK;AAED,WAAK,OAAO;AAAA,IAChB;AACA,SAAK,OAAO;AAAA,EAChB;AACJ;;;ACjGO,IAAM,gBAAN,MAAuB;AAAA;AAAA,EAI1B,cAAc;AAHd,wBAAQ;AACR;AAAA,wBAAQ;AAGJ,SAAK,MAAM,CAAC;AACZ,SAAK,MAAM,CAAC;AAAA,EAChB;AAAA,EAEA,IAAI,KAAa,OAAgB;AAC7B,QAAI,CAAC,UAAU,GAAG,GAAG;AACjB,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC5C,WACS,OAAO,GAAG;AACf,WAAK,IAAI,GAAG,IAAI;AAAA,IACpB,OACK;AACD,WAAK,IAAI,CAAC,MAAM,CAAC,IAAI;AAAA,IACzB;AAAA,EACJ;AAAA,EAEA,IAAI,KAA4B;AAC5B,QAAI,CAAC,UAAU,GAAG,GAAG;AACjB,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC5C,WACS,OAAO,GAAG;AACf,aAAO,KAAK,IAAI,GAAG;AAAA,IACvB,OACK;AACD,aAAO,KAAK,IAAI,CAAC,MAAM,CAAC;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEA,IAAI,KAAsB;AACtB,QAAI,CAAC,UAAU,GAAG,GAAG;AACjB,aAAO;AAAA,IACX,WACS,OAAO,GAAG;AACf,aAAO,OAAO,KAAK;AAAA,IACvB,OACK;AACD,aAAQ,CAAC,MAAM,KAAM,KAAK;AAAA,IAC9B;AAAA,EACJ;AAAA,EAEA,OAAO,KAAmB;AACtB,QAAI,CAAC,UAAU,GAAG,GAAG;AACjB;AAAA,IACJ,WACS,OAAO,GAAG;AACf,aAAO,KAAK,IAAI,GAAG;AAAA,IACvB,OACK;AACD,aAAO,KAAK,IAAI,CAAC,MAAM,CAAC;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEA,QAAc;AACV,SAAK,MAAM,CAAC;AACZ,SAAK,MAAM,CAAC;AAAA,EAChB;AACJ;","names":["Assert","require","Device","query","toPx","canvas","repeatString","Cookies","ConsentState","str"]}
|