@tspro/ts-utils-lib 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /* TsUtilsLib v1.0.1 | (c) 2023 PahkaSoft | Licensed under the MIT License */
1
+ /* TsUtilsLib v1.3.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;
@@ -29,26 +29,27 @@ __export(index_exports, {
29
29
  LRUCache: () => LRUCache,
30
30
  SmallIntCache: () => SmallIntCache,
31
31
  Stack: () => Stack,
32
- Utils: () => export_utils_exports,
32
+ Utils: () => utils_exports,
33
33
  Vec2: () => Vec2
34
34
  });
35
35
  module.exports = __toCommonJS(index_exports);
36
36
 
37
- // src/export-utils.ts
38
- var export_utils_exports = {};
39
- __export(export_utils_exports, {
40
- Arr: () => array_exports,
37
+ // src/utils/index.ts
38
+ var utils_exports = {};
39
+ __export(utils_exports, {
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
- Obj: () => object_exports,
46
- Str: () => string_exports
46
+ Obj: () => obj_exports,
47
+ Str: () => str_exports
47
48
  });
48
49
 
49
- // src/array/index.ts
50
- var array_exports = {};
51
- __export(array_exports, {
50
+ // src/utils/arr/index.ts
51
+ var arr_exports = {};
52
+ __export(arr_exports, {
52
53
  arrayContains: () => arrayContains,
53
54
  chunckArray: () => chunckArray,
54
55
  duplicate: () => duplicate,
@@ -63,7 +64,7 @@ __export(array_exports, {
63
64
  toArray: () => toArray
64
65
  });
65
66
 
66
- // src/math/index.ts
67
+ // src/utils/math/index.ts
67
68
  var math_exports = {};
68
69
  __export(math_exports, {
69
70
  calcNormal: () => calcNormal,
@@ -181,7 +182,7 @@ function sum(arr) {
181
182
  return arr.reduce((prev, cur) => cur + prev, 0);
182
183
  }
183
184
 
184
- // src/array/index.ts
185
+ // src/utils/arr/index.ts
185
186
  function isArray(a) {
186
187
  return !!a && Object.prototype.toString.call(a) === "[object Array]";
187
188
  }
@@ -247,7 +248,7 @@ function chunckArray(arr, chunckSize) {
247
248
  return result;
248
249
  }
249
250
 
250
- // src/dom/index.ts
251
+ // src/utils/dom/index.ts
251
252
  var dom_exports = {};
252
253
  __export(dom_exports, {
253
254
  addClass: () => addClass,
@@ -271,6 +272,15 @@ __export(dom_exports, {
271
272
  styleLayoutChanged: () => styleLayoutChanged
272
273
  });
273
274
 
275
+ // src/utils/enum/index.ts
276
+ var enum_exports = {};
277
+ __export(enum_exports, {
278
+ getEnumValues: () => getEnumValues
279
+ });
280
+ function getEnumValues(e) {
281
+ return Object.keys(e).filter((key) => Number.isNaN(Number(key))).map((key) => e[key]);
282
+ }
283
+
274
284
  // src/modules/assert.ts
275
285
  var Assert;
276
286
  ((Assert2) => {
@@ -294,6 +304,12 @@ var Assert;
294
304
  }
295
305
  }
296
306
  Assert2.assert = assert;
307
+ function assertEnum(value, enumObj, name = "value") {
308
+ if (!getEnumValues(enumObj).some((v) => v === value)) {
309
+ throw new TypeError(`Invalid ${name} enum value: ${value}`);
310
+ }
311
+ }
312
+ Assert2.assertEnum = assertEnum;
297
313
  function interrupt(userMsg) {
298
314
  throwError(userMsg ?? "Interrupted!");
299
315
  }
@@ -516,7 +532,7 @@ var Device;
516
532
  Device2.toPx = toPx2;
517
533
  })(Device || (Device = {}));
518
534
 
519
- // src/dom/index.ts
535
+ // src/utils/dom/index.ts
520
536
  function toPx(value) {
521
537
  return value === void 0 ? void 0 : Device.toPx(value);
522
538
  }
@@ -684,16 +700,100 @@ function getCanvasTextWidth(text, font) {
684
700
  return ctx.measureText(text).width;
685
701
  }
686
702
 
687
- // src/enum/index.ts
688
- var enum_exports = {};
689
- __export(enum_exports, {
690
- getEnumValues: () => getEnumValues
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
691
728
  });
692
- function getEnumValues(e) {
693
- return Object.keys(e).filter((key) => Number.isNaN(Number(key))).map((key) => e[key]);
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;
694
794
  }
695
795
 
696
- // src/map/index.ts
796
+ // src/utils/map/index.ts
697
797
  var map_exports = {};
698
798
  __export(map_exports, {
699
799
  getMapKeys: () => getMapKeys
@@ -704,18 +804,18 @@ function getMapKeys(map) {
704
804
  return keys;
705
805
  }
706
806
 
707
- // src/object/index.ts
708
- var object_exports = {};
709
- __export(object_exports, {
710
- isObject: () => isObject
807
+ // src/utils/obj/index.ts
808
+ var obj_exports = {};
809
+ __export(obj_exports, {
810
+ isObject: () => isObject2
711
811
  });
712
- function isObject(value) {
812
+ function isObject2(value) {
713
813
  return typeof value === "object" && value !== null && !isArray(value);
714
814
  }
715
815
 
716
- // src/string/index.ts
717
- var string_exports = {};
718
- __export(string_exports, {
816
+ // src/utils/str/index.ts
817
+ var str_exports = {};
818
+ __export(str_exports, {
719
819
  chunkString: () => chunkString,
720
820
  insertAt: () => insertAt,
721
821
  makeSentenceFromPascal: () => makeSentenceFromPascal,
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /* TsUtilsLib v1.0.1 | (c) 2023 PahkaSoft | Licensed under the MIT License */
1
+ /* TsUtilsLib v1.3.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) => {
@@ -7,21 +7,22 @@ var __export = (target, all) => {
7
7
  };
8
8
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
9
9
 
10
- // src/export-utils.ts
11
- var export_utils_exports = {};
12
- __export(export_utils_exports, {
13
- Arr: () => array_exports,
10
+ // src/utils/index.ts
11
+ var utils_exports = {};
12
+ __export(utils_exports, {
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
- Obj: () => object_exports,
19
- Str: () => string_exports
19
+ Obj: () => obj_exports,
20
+ Str: () => str_exports
20
21
  });
21
22
 
22
- // src/array/index.ts
23
- var array_exports = {};
24
- __export(array_exports, {
23
+ // src/utils/arr/index.ts
24
+ var arr_exports = {};
25
+ __export(arr_exports, {
25
26
  arrayContains: () => arrayContains,
26
27
  chunckArray: () => chunckArray,
27
28
  duplicate: () => duplicate,
@@ -36,7 +37,7 @@ __export(array_exports, {
36
37
  toArray: () => toArray
37
38
  });
38
39
 
39
- // src/math/index.ts
40
+ // src/utils/math/index.ts
40
41
  var math_exports = {};
41
42
  __export(math_exports, {
42
43
  calcNormal: () => calcNormal,
@@ -154,7 +155,7 @@ function sum(arr) {
154
155
  return arr.reduce((prev, cur) => cur + prev, 0);
155
156
  }
156
157
 
157
- // src/array/index.ts
158
+ // src/utils/arr/index.ts
158
159
  function isArray(a) {
159
160
  return !!a && Object.prototype.toString.call(a) === "[object Array]";
160
161
  }
@@ -220,7 +221,7 @@ function chunckArray(arr, chunckSize) {
220
221
  return result;
221
222
  }
222
223
 
223
- // src/dom/index.ts
224
+ // src/utils/dom/index.ts
224
225
  var dom_exports = {};
225
226
  __export(dom_exports, {
226
227
  addClass: () => addClass,
@@ -244,6 +245,15 @@ __export(dom_exports, {
244
245
  styleLayoutChanged: () => styleLayoutChanged
245
246
  });
246
247
 
248
+ // src/utils/enum/index.ts
249
+ var enum_exports = {};
250
+ __export(enum_exports, {
251
+ getEnumValues: () => getEnumValues
252
+ });
253
+ function getEnumValues(e) {
254
+ return Object.keys(e).filter((key) => Number.isNaN(Number(key))).map((key) => e[key]);
255
+ }
256
+
247
257
  // src/modules/assert.ts
248
258
  var Assert;
249
259
  ((Assert2) => {
@@ -267,6 +277,12 @@ var Assert;
267
277
  }
268
278
  }
269
279
  Assert2.assert = assert;
280
+ function assertEnum(value, enumObj, name = "value") {
281
+ if (!getEnumValues(enumObj).some((v) => v === value)) {
282
+ throw new TypeError(`Invalid ${name} enum value: ${value}`);
283
+ }
284
+ }
285
+ Assert2.assertEnum = assertEnum;
270
286
  function interrupt(userMsg) {
271
287
  throwError(userMsg ?? "Interrupted!");
272
288
  }
@@ -489,7 +505,7 @@ var Device;
489
505
  Device2.toPx = toPx2;
490
506
  })(Device || (Device = {}));
491
507
 
492
- // src/dom/index.ts
508
+ // src/utils/dom/index.ts
493
509
  function toPx(value) {
494
510
  return value === void 0 ? void 0 : Device.toPx(value);
495
511
  }
@@ -657,16 +673,100 @@ function getCanvasTextWidth(text, font) {
657
673
  return ctx.measureText(text).width;
658
674
  }
659
675
 
660
- // src/enum/index.ts
661
- var enum_exports = {};
662
- __export(enum_exports, {
663
- getEnumValues: () => getEnumValues
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
664
701
  });
665
- function getEnumValues(e) {
666
- return Object.keys(e).filter((key) => Number.isNaN(Number(key))).map((key) => e[key]);
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;
667
767
  }
668
768
 
669
- // src/map/index.ts
769
+ // src/utils/map/index.ts
670
770
  var map_exports = {};
671
771
  __export(map_exports, {
672
772
  getMapKeys: () => getMapKeys
@@ -677,18 +777,18 @@ function getMapKeys(map) {
677
777
  return keys;
678
778
  }
679
779
 
680
- // src/object/index.ts
681
- var object_exports = {};
682
- __export(object_exports, {
683
- isObject: () => isObject
780
+ // src/utils/obj/index.ts
781
+ var obj_exports = {};
782
+ __export(obj_exports, {
783
+ isObject: () => isObject2
684
784
  });
685
- function isObject(value) {
785
+ function isObject2(value) {
686
786
  return typeof value === "object" && value !== null && !isArray(value);
687
787
  }
688
788
 
689
- // src/string/index.ts
690
- var string_exports = {};
691
- __export(string_exports, {
789
+ // src/utils/str/index.ts
790
+ var str_exports = {};
791
+ __export(str_exports, {
692
792
  chunkString: () => chunkString,
693
793
  insertAt: () => insertAt,
694
794
  makeSentenceFromPascal: () => makeSentenceFromPascal,
@@ -1064,7 +1164,7 @@ export {
1064
1164
  LRUCache,
1065
1165
  SmallIntCache,
1066
1166
  Stack,
1067
- export_utils_exports as Utils,
1167
+ utils_exports as Utils,
1068
1168
  Vec2
1069
1169
  };
1070
1170
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tspro/ts-utils-lib",
3
- "version": "1.1.0",
3
+ "version": "1.3.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/export-utils.ts","../src/array/index.ts","../src/math/index.ts","../src/dom/index.ts","../src/modules/assert.ts","../src/modules/device.ts","../src/enum/index.ts","../src/map/index.ts","../src/object/index.ts","../src/string/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 \"./export-utils\";\r\n\r\nexport * from \"./modules\";\r\nexport * from \"./core\";\r\n","export * as Arr from \"./array\";\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 \"./object\";\r\nexport * as Str from \"./string\";\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","export 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 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 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","\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 \"../array\";\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 \"../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"]}