@vived/core 1.4.0 → 1.4.1

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.
Files changed (177) hide show
  1. package/package.json +3 -6
  2. package/dist/cjs/AppObject/AppObject.js +0 -59
  3. package/dist/cjs/AppObject/AppObject.js.map +0 -1
  4. package/dist/cjs/AppObject/AppObject.test.js +0 -113
  5. package/dist/cjs/AppObject/AppObject.test.js.map +0 -1
  6. package/dist/cjs/AppObject/AppObjectComponent.js +0 -82
  7. package/dist/cjs/AppObject/AppObjectComponent.js.map +0 -1
  8. package/dist/cjs/AppObject/AppObjectComponent.test.js +0 -132
  9. package/dist/cjs/AppObject/AppObjectComponent.test.js.map +0 -1
  10. package/dist/cjs/AppObject/AppObjectController.js +0 -12
  11. package/dist/cjs/AppObject/AppObjectController.js.map +0 -1
  12. package/dist/cjs/AppObject/AppObjectEntity.js +0 -38
  13. package/dist/cjs/AppObject/AppObjectEntity.js.map +0 -1
  14. package/dist/cjs/AppObject/AppObjectEntity.test.js +0 -108
  15. package/dist/cjs/AppObject/AppObjectEntity.test.js.map +0 -1
  16. package/dist/cjs/AppObject/AppObjectEntityRepo.js +0 -56
  17. package/dist/cjs/AppObject/AppObjectEntityRepo.js.map +0 -1
  18. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js +0 -149
  19. package/dist/cjs/AppObject/AppObjectEntityRepo.test.js.map +0 -1
  20. package/dist/cjs/AppObject/AppObjectPM.js +0 -40
  21. package/dist/cjs/AppObject/AppObjectPM.js.map +0 -1
  22. package/dist/cjs/AppObject/AppObjectPM.test.js +0 -103
  23. package/dist/cjs/AppObject/AppObjectPM.test.js.map +0 -1
  24. package/dist/cjs/AppObject/AppObjectRepo.js +0 -133
  25. package/dist/cjs/AppObject/AppObjectRepo.js.map +0 -1
  26. package/dist/cjs/AppObject/AppObjectRepo.test.js +0 -213
  27. package/dist/cjs/AppObject/AppObjectRepo.test.js.map +0 -1
  28. package/dist/cjs/AppObject/AppObjectUC.js +0 -12
  29. package/dist/cjs/AppObject/AppObjectUC.js.map +0 -1
  30. package/dist/cjs/AppObject/AppObjectView.js +0 -12
  31. package/dist/cjs/AppObject/AppObjectView.js.map +0 -1
  32. package/dist/cjs/AppObject/getSingletonComponent.js +0 -7
  33. package/dist/cjs/AppObject/getSingletonComponent.js.map +0 -1
  34. package/dist/cjs/AppObject/getSingletonComponent.test.js +0 -13
  35. package/dist/cjs/AppObject/getSingletonComponent.test.js.map +0 -1
  36. package/dist/cjs/AppObject/index.js +0 -27
  37. package/dist/cjs/AppObject/index.js.map +0 -1
  38. package/dist/cjs/AppObject/printAppObjectDetails.js +0 -18
  39. package/dist/cjs/AppObject/printAppObjectDetails.js.map +0 -1
  40. package/dist/cjs/Entities/MemoizedAngle.js +0 -23
  41. package/dist/cjs/Entities/MemoizedAngle.js.map +0 -1
  42. package/dist/cjs/Entities/MemoizedAngle.test.js +0 -30
  43. package/dist/cjs/Entities/MemoizedAngle.test.js.map +0 -1
  44. package/dist/cjs/Entities/MemoizedBoolean.js +0 -23
  45. package/dist/cjs/Entities/MemoizedBoolean.js.map +0 -1
  46. package/dist/cjs/Entities/MemoizedBoolean.test.js +0 -34
  47. package/dist/cjs/Entities/MemoizedBoolean.test.js.map +0 -1
  48. package/dist/cjs/Entities/MemoizedColor.js +0 -24
  49. package/dist/cjs/Entities/MemoizedColor.js.map +0 -1
  50. package/dist/cjs/Entities/MemoizedColor.test.js +0 -32
  51. package/dist/cjs/Entities/MemoizedColor.test.js.map +0 -1
  52. package/dist/cjs/Entities/MemoizedNumber.js +0 -23
  53. package/dist/cjs/Entities/MemoizedNumber.js.map +0 -1
  54. package/dist/cjs/Entities/MemoizedNumber.test.js +0 -29
  55. package/dist/cjs/Entities/MemoizedNumber.test.js.map +0 -1
  56. package/dist/cjs/Entities/MemoizedQuaternion.js +0 -24
  57. package/dist/cjs/Entities/MemoizedQuaternion.js.map +0 -1
  58. package/dist/cjs/Entities/MemoizedQuaternion.test.js +0 -32
  59. package/dist/cjs/Entities/MemoizedQuaternion.test.js.map +0 -1
  60. package/dist/cjs/Entities/MemoizedString.js +0 -23
  61. package/dist/cjs/Entities/MemoizedString.js.map +0 -1
  62. package/dist/cjs/Entities/MemoizedString.test.js +0 -29
  63. package/dist/cjs/Entities/MemoizedString.test.js.map +0 -1
  64. package/dist/cjs/Entities/MemoizedVector2.js +0 -24
  65. package/dist/cjs/Entities/MemoizedVector2.js.map +0 -1
  66. package/dist/cjs/Entities/MemoizedVector2.test.js +0 -32
  67. package/dist/cjs/Entities/MemoizedVector2.test.js.map +0 -1
  68. package/dist/cjs/Entities/MemoizedVector3.js +0 -24
  69. package/dist/cjs/Entities/MemoizedVector3.js.map +0 -1
  70. package/dist/cjs/Entities/MemoizedVector3.test.js +0 -32
  71. package/dist/cjs/Entities/MemoizedVector3.test.js.map +0 -1
  72. package/dist/cjs/Entities/ObservableEntity.js +0 -20
  73. package/dist/cjs/Entities/ObservableEntity.js.map +0 -1
  74. package/dist/cjs/Entities/ObservableEntity.test.js +0 -25
  75. package/dist/cjs/Entities/ObservableEntity.test.js.map +0 -1
  76. package/dist/cjs/Entities/ObserverList.js +0 -27
  77. package/dist/cjs/Entities/ObserverList.js.map +0 -1
  78. package/dist/cjs/Entities/ObserverList.test.js +0 -44
  79. package/dist/cjs/Entities/ObserverList.test.js.map +0 -1
  80. package/dist/cjs/Entities/RangedNumber.js +0 -36
  81. package/dist/cjs/Entities/RangedNumber.js.map +0 -1
  82. package/dist/cjs/Entities/RangedNumber.test.js +0 -96
  83. package/dist/cjs/Entities/RangedNumber.test.js.map +0 -1
  84. package/dist/cjs/Entities/index.js +0 -28
  85. package/dist/cjs/Entities/index.js.map +0 -1
  86. package/dist/cjs/Types/AppBoundary.js +0 -3
  87. package/dist/cjs/Types/AppBoundary.js.map +0 -1
  88. package/dist/cjs/Types/EaseFn.js +0 -3
  89. package/dist/cjs/Types/EaseFn.js.map +0 -1
  90. package/dist/cjs/Types/PmAdapter.js +0 -3
  91. package/dist/cjs/Types/PmAdapter.js.map +0 -1
  92. package/dist/cjs/Types/SingletonPmAdapter.js +0 -3
  93. package/dist/cjs/Types/SingletonPmAdapter.js.map +0 -1
  94. package/dist/cjs/Types/index.js +0 -21
  95. package/dist/cjs/Types/index.js.map +0 -1
  96. package/dist/cjs/Utilities/LengthConverters.js +0 -21
  97. package/dist/cjs/Utilities/LengthConverters.js.map +0 -1
  98. package/dist/cjs/Utilities/LengthConverters.test.js +0 -24
  99. package/dist/cjs/Utilities/LengthConverters.test.js.map +0 -1
  100. package/dist/cjs/Utilities/LerpNumber.js +0 -85
  101. package/dist/cjs/Utilities/LerpNumber.js.map +0 -1
  102. package/dist/cjs/Utilities/LerpNumber.test.js +0 -90
  103. package/dist/cjs/Utilities/LerpNumber.test.js.map +0 -1
  104. package/dist/cjs/Utilities/addAlphaToHex.js +0 -16
  105. package/dist/cjs/Utilities/addAlphaToHex.js.map +0 -1
  106. package/dist/cjs/Utilities/addAlphaToHex.test.js +0 -34
  107. package/dist/cjs/Utilities/addAlphaToHex.test.js.map +0 -1
  108. package/dist/cjs/Utilities/alphaToHex.js +0 -21
  109. package/dist/cjs/Utilities/alphaToHex.js.map +0 -1
  110. package/dist/cjs/Utilities/alphaToHex.test.js +0 -75
  111. package/dist/cjs/Utilities/alphaToHex.test.js.map +0 -1
  112. package/dist/cjs/Utilities/degreesToRadians.js +0 -7
  113. package/dist/cjs/Utilities/degreesToRadians.js.map +0 -1
  114. package/dist/cjs/Utilities/degreesToRadians.test.js +0 -9
  115. package/dist/cjs/Utilities/degreesToRadians.test.js.map +0 -1
  116. package/dist/cjs/Utilities/downloadFile.js +0 -14
  117. package/dist/cjs/Utilities/downloadFile.js.map +0 -1
  118. package/dist/cjs/Utilities/easeFunctions.js +0 -208
  119. package/dist/cjs/Utilities/easeFunctions.js.map +0 -1
  120. package/dist/cjs/Utilities/easeFunctions.test.js +0 -209
  121. package/dist/cjs/Utilities/easeFunctions.test.js.map +0 -1
  122. package/dist/cjs/Utilities/generateUniqueID.js +0 -8
  123. package/dist/cjs/Utilities/generateUniqueID.js.map +0 -1
  124. package/dist/cjs/Utilities/index.js +0 -25
  125. package/dist/cjs/Utilities/index.js.map +0 -1
  126. package/dist/cjs/Utilities/interpolateNumber.js +0 -18
  127. package/dist/cjs/Utilities/interpolateNumber.js.map +0 -1
  128. package/dist/cjs/Utilities/interpolateNumber.test.js +0 -26
  129. package/dist/cjs/Utilities/interpolateNumber.test.js.map +0 -1
  130. package/dist/cjs/ValueObjects/Angle.js +0 -47
  131. package/dist/cjs/ValueObjects/Angle.js.map +0 -1
  132. package/dist/cjs/ValueObjects/Angle.test.js +0 -28
  133. package/dist/cjs/ValueObjects/Angle.test.js.map +0 -1
  134. package/dist/cjs/ValueObjects/Color.js +0 -859
  135. package/dist/cjs/ValueObjects/Color.js.map +0 -1
  136. package/dist/cjs/ValueObjects/Color.test.js +0 -147
  137. package/dist/cjs/ValueObjects/Color.test.js.map +0 -1
  138. package/dist/cjs/ValueObjects/LineSegment2D.js +0 -72
  139. package/dist/cjs/ValueObjects/LineSegment2D.js.map +0 -1
  140. package/dist/cjs/ValueObjects/LineSegment2D.test.js +0 -102
  141. package/dist/cjs/ValueObjects/LineSegment2D.test.js.map +0 -1
  142. package/dist/cjs/ValueObjects/Matrix.js +0 -466
  143. package/dist/cjs/ValueObjects/Matrix.js.map +0 -1
  144. package/dist/cjs/ValueObjects/Matrix.test.js +0 -385
  145. package/dist/cjs/ValueObjects/Matrix.test.js.map +0 -1
  146. package/dist/cjs/ValueObjects/ParametricLine.js +0 -77
  147. package/dist/cjs/ValueObjects/ParametricLine.js.map +0 -1
  148. package/dist/cjs/ValueObjects/ParametricLine.test.js +0 -126
  149. package/dist/cjs/ValueObjects/ParametricLine.test.js.map +0 -1
  150. package/dist/cjs/ValueObjects/ParametricPlane.js +0 -65
  151. package/dist/cjs/ValueObjects/ParametricPlane.js.map +0 -1
  152. package/dist/cjs/ValueObjects/ParametricPlane.test.js +0 -101
  153. package/dist/cjs/ValueObjects/ParametricPlane.test.js.map +0 -1
  154. package/dist/cjs/ValueObjects/Quaternion.js +0 -290
  155. package/dist/cjs/ValueObjects/Quaternion.js.map +0 -1
  156. package/dist/cjs/ValueObjects/Quaternion.test.js +0 -240
  157. package/dist/cjs/ValueObjects/Quaternion.test.js.map +0 -1
  158. package/dist/cjs/ValueObjects/Rectangle.js +0 -24
  159. package/dist/cjs/ValueObjects/Rectangle.js.map +0 -1
  160. package/dist/cjs/ValueObjects/Rectangle.test.js +0 -32
  161. package/dist/cjs/ValueObjects/Rectangle.test.js.map +0 -1
  162. package/dist/cjs/ValueObjects/Vector2.js +0 -184
  163. package/dist/cjs/ValueObjects/Vector2.js.map +0 -1
  164. package/dist/cjs/ValueObjects/Vector2.test.js +0 -136
  165. package/dist/cjs/ValueObjects/Vector2.test.js.map +0 -1
  166. package/dist/cjs/ValueObjects/Vector3.js +0 -231
  167. package/dist/cjs/ValueObjects/Vector3.js.map +0 -1
  168. package/dist/cjs/ValueObjects/Vector3.test.js +0 -188
  169. package/dist/cjs/ValueObjects/Vector3.test.js.map +0 -1
  170. package/dist/cjs/ValueObjects/Version.js +0 -171
  171. package/dist/cjs/ValueObjects/Version.js.map +0 -1
  172. package/dist/cjs/ValueObjects/Version.test.js +0 -310
  173. package/dist/cjs/ValueObjects/Version.test.js.map +0 -1
  174. package/dist/cjs/ValueObjects/index.js +0 -28
  175. package/dist/cjs/ValueObjects/index.js.map +0 -1
  176. package/dist/cjs/index.js +0 -22
  177. package/dist/cjs/index.js.map +0 -1
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RangedNumber = void 0;
4
- class RangedNumber {
5
- get val() {
6
- return this._val;
7
- }
8
- set val(x) {
9
- const y = this.clamp(x);
10
- if (this._val === y)
11
- return;
12
- this._val = y;
13
- this.onChangeCallback();
14
- }
15
- setValQuietly(val) {
16
- this._val = this.clamp(val);
17
- }
18
- clamp(x) {
19
- let rVal = x;
20
- if (x > this.maxValue) {
21
- rVal = this.maxValue;
22
- }
23
- else if (x < this.minValue) {
24
- rVal = this.minValue;
25
- }
26
- return rVal;
27
- }
28
- constructor(props, onChangeCallback) {
29
- this.maxValue = props.max;
30
- this.minValue = props.min;
31
- this._val = this.clamp(props.initialValue);
32
- this.onChangeCallback = onChangeCallback;
33
- }
34
- }
35
- exports.RangedNumber = RangedNumber;
36
- //# sourceMappingURL=RangedNumber.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RangedNumber.js","sourceRoot":"","sources":["../../../src/Entities/RangedNumber.ts"],"names":[],"mappings":";;;AAMA,MAAa,YAAY;IAIvB,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,GAAG,CAAC,CAAS;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAE5B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,aAAa,CAAC,GAAW;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,CAAS;QACrB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,YAAY,KAA6B,EAAE,gBAA4B;QACrE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC;QAE1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAtCD,oCAsCC","sourcesContent":["export interface RangedNumberProperties {\r\n min: number;\r\n max: number;\r\n initialValue: number;\r\n}\r\n\r\nexport class RangedNumber {\r\n public readonly maxValue: number;\r\n public readonly minValue: number;\r\n private _val: number;\r\n get val(): number {\r\n return this._val;\r\n }\r\n set val(x: number) {\r\n const y = this.clamp(x);\r\n if (this._val === y) return;\r\n\r\n this._val = y;\r\n this.onChangeCallback();\r\n }\r\n\r\n public setValQuietly(val: number) {\r\n this._val = this.clamp(val);\r\n }\r\n\r\n private clamp(x: number): number {\r\n let rVal = x;\r\n if (x > this.maxValue) {\r\n rVal = this.maxValue;\r\n } else if (x < this.minValue) {\r\n rVal = this.minValue;\r\n }\r\n\r\n return rVal;\r\n }\r\n private onChangeCallback: () => void;\r\n\r\n constructor(props: RangedNumberProperties, onChangeCallback: () => void) {\r\n this.maxValue = props.max;\r\n this.minValue = props.min;\r\n\r\n this._val = this.clamp(props.initialValue);\r\n this.onChangeCallback = onChangeCallback;\r\n }\r\n}\r\n"]}
@@ -1,96 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const RangedNumber_1 = require("./RangedNumber");
4
- it("Stores the initial value", () => {
5
- const props = {
6
- initialValue: 5,
7
- max: 10,
8
- min: 1,
9
- };
10
- const memoizedNumber = new RangedNumber_1.RangedNumber(props, jest.fn());
11
- expect(memoizedNumber.val).toEqual(5);
12
- });
13
- it("Clamps the initial value", () => {
14
- const props = {
15
- initialValue: 50,
16
- max: 10,
17
- min: 1,
18
- };
19
- const memoizedNumber = new RangedNumber_1.RangedNumber(props, jest.fn());
20
- expect(memoizedNumber.val).toEqual(10);
21
- });
22
- it("Clamps the value", () => {
23
- const props = {
24
- initialValue: 5,
25
- max: 10,
26
- min: 1,
27
- };
28
- const memoizedNumber = new RangedNumber_1.RangedNumber(props, jest.fn());
29
- expect(memoizedNumber.val).toEqual(5);
30
- memoizedNumber.val = 11;
31
- expect(memoizedNumber.val).toEqual(10);
32
- memoizedNumber.val = 0;
33
- expect(memoizedNumber.val).toEqual(1);
34
- });
35
- it("Triggers the callback when something changes", () => {
36
- const cb = jest.fn();
37
- const props = {
38
- initialValue: 5,
39
- max: 10,
40
- min: 1,
41
- };
42
- const memoizedNumber = new RangedNumber_1.RangedNumber(props, cb);
43
- expect(cb).not.toBeCalled();
44
- memoizedNumber.val = 6;
45
- expect(cb).toBeCalled();
46
- });
47
- it("Only triggers the CB when something changes", () => {
48
- const cb = jest.fn();
49
- const props = {
50
- initialValue: 5,
51
- max: 10,
52
- min: 1,
53
- };
54
- const memoizedNumber = new RangedNumber_1.RangedNumber(props, cb);
55
- memoizedNumber.val = 5;
56
- memoizedNumber.val = 5;
57
- memoizedNumber.val = 5;
58
- expect(cb).not.toBeCalled();
59
- });
60
- it("Checks the clamped value before triggering", () => {
61
- const cb = jest.fn();
62
- const props = {
63
- initialValue: 10,
64
- max: 10,
65
- min: 1,
66
- };
67
- const memoizedNumber = new RangedNumber_1.RangedNumber(props, cb);
68
- memoizedNumber.val = 11;
69
- memoizedNumber.val = 12;
70
- memoizedNumber.val = 13;
71
- expect(cb).not.toBeCalled();
72
- });
73
- it("Does not notify if set quietly", () => {
74
- const cb = jest.fn();
75
- const props = {
76
- initialValue: 5,
77
- max: 10,
78
- min: 1,
79
- };
80
- const memoizedNumber = new RangedNumber_1.RangedNumber(props, cb);
81
- memoizedNumber.setValQuietly(6);
82
- expect(memoizedNumber.val).toEqual(6);
83
- expect(cb).not.toBeCalled();
84
- });
85
- it("Setting quietly is clamped", () => {
86
- const cb = jest.fn();
87
- const props = {
88
- initialValue: 5,
89
- max: 10,
90
- min: 1,
91
- };
92
- const memoizedNumber = new RangedNumber_1.RangedNumber(props, cb);
93
- memoizedNumber.setValQuietly(-1);
94
- expect(memoizedNumber.val).toEqual(1);
95
- });
96
- //# sourceMappingURL=RangedNumber.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RangedNumber.test.js","sourceRoot":"","sources":["../../../src/Entities/RangedNumber.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { RangedNumber, RangedNumberProperties } from \"./RangedNumber\";\r\n\r\nit(\"Stores the initial value\", () => {\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n\r\n const memoizedNumber = new RangedNumber(props, jest.fn());\r\n expect(memoizedNumber.val).toEqual(5);\r\n});\r\n\r\nit(\"Clamps the initial value\", () => {\r\n const props: RangedNumberProperties = {\r\n initialValue: 50,\r\n max: 10,\r\n min: 1,\r\n };\r\n\r\n const memoizedNumber = new RangedNumber(props, jest.fn());\r\n expect(memoizedNumber.val).toEqual(10);\r\n});\r\n\r\nit(\"Clamps the value\", () => {\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n\r\n const memoizedNumber = new RangedNumber(props, jest.fn());\r\n\r\n expect(memoizedNumber.val).toEqual(5);\r\n\r\n memoizedNumber.val = 11;\r\n expect(memoizedNumber.val).toEqual(10);\r\n\r\n memoizedNumber.val = 0;\r\n expect(memoizedNumber.val).toEqual(1);\r\n});\r\n\r\nit(\"Triggers the callback when something changes\", () => {\r\n const cb = jest.fn();\r\n\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n const memoizedNumber = new RangedNumber(props, cb);\r\n\r\n expect(cb).not.toBeCalled();\r\n\r\n memoizedNumber.val = 6;\r\n\r\n expect(cb).toBeCalled();\r\n});\r\n\r\nit(\"Only triggers the CB when something changes\", () => {\r\n const cb = jest.fn();\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n const memoizedNumber = new RangedNumber(props, cb);\r\n\r\n memoizedNumber.val = 5;\r\n memoizedNumber.val = 5;\r\n memoizedNumber.val = 5;\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n\r\nit(\"Checks the clamped value before triggering\", () => {\r\n const cb = jest.fn();\r\n const props: RangedNumberProperties = {\r\n initialValue: 10,\r\n max: 10,\r\n min: 1,\r\n };\r\n const memoizedNumber = new RangedNumber(props, cb);\r\n\r\n memoizedNumber.val = 11;\r\n memoizedNumber.val = 12;\r\n memoizedNumber.val = 13;\r\n\r\n expect(cb).not.toBeCalled();\r\n});\r\n\r\nit(\"Does not notify if set quietly\", () => {\r\n const cb = jest.fn();\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n const memoizedNumber = new RangedNumber(props, cb);\r\n\r\n memoizedNumber.setValQuietly(6);\r\n\r\n expect(memoizedNumber.val).toEqual(6);\r\n expect(cb).not.toBeCalled();\r\n});\r\n\r\nit(\"Setting quietly is clamped\", () => {\r\n const cb = jest.fn();\r\n const props: RangedNumberProperties = {\r\n initialValue: 5,\r\n max: 10,\r\n min: 1,\r\n };\r\n const memoizedNumber = new RangedNumber(props, cb);\r\n\r\n memoizedNumber.setValQuietly(-1);\r\n expect(memoizedNumber.val).toEqual(1);\r\n});\r\n"]}
@@ -1,28 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./MemoizedAngle"), exports);
18
- __exportStar(require("./MemoizedBoolean"), exports);
19
- __exportStar(require("./MemoizedColor"), exports);
20
- __exportStar(require("./MemoizedNumber"), exports);
21
- __exportStar(require("./MemoizedQuaternion"), exports);
22
- __exportStar(require("./MemoizedString"), exports);
23
- __exportStar(require("./MemoizedVector2"), exports);
24
- __exportStar(require("./MemoizedVector3"), exports);
25
- __exportStar(require("./ObservableEntity"), exports);
26
- __exportStar(require("./ObserverList"), exports);
27
- __exportStar(require("./RangedNumber"), exports);
28
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Entities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,oDAAkC;AAClC,kDAAgC;AAChC,mDAAiC;AACjC,uDAAqC;AACrC,mDAAiC;AACjC,oDAAkC;AAClC,oDAAkC;AAClC,qDAAmC;AACnC,iDAA+B;AAC/B,iDAA+B","sourcesContent":["export * from \"./MemoizedAngle\";\r\nexport * from \"./MemoizedBoolean\";\r\nexport * from \"./MemoizedColor\";\r\nexport * from \"./MemoizedNumber\";\r\nexport * from \"./MemoizedQuaternion\";\r\nexport * from \"./MemoizedString\";\r\nexport * from \"./MemoizedVector2\";\r\nexport * from \"./MemoizedVector3\";\r\nexport * from \"./ObservableEntity\";\r\nexport * from \"./ObserverList\";\r\nexport * from \"./RangedNumber\";\r\n"]}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=AppBoundary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AppBoundary.js","sourceRoot":"","sources":["../../../src/Types/AppBoundary.ts"],"names":[],"mappings":"","sourcesContent":["export type Handler = (request: Request) => void;\r\n\r\nexport interface Request {\r\n type: string;\r\n version: number;\r\n payload?: unknown;\r\n}\r\n\r\n// tslint:disable-next-line: class-name\r\nexport interface VIVEDApp_3 {\r\n mount(hostRequestHandler: Handler): Handler;\r\n mountDev(container: HTMLElement): void;\r\n}\r\n"]}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=EaseFn.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EaseFn.js","sourceRoot":"","sources":["../../../src/Types/EaseFn.ts"],"names":[],"mappings":"","sourcesContent":["export type EaseFn = (p: number) => number;"]}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=PmAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PmAdapter.js","sourceRoot":"","sources":["../../../src/Types/PmAdapter.ts"],"names":[],"mappings":"","sourcesContent":["import { AppObjectRepo } from \"../AppObject\";\r\n\r\nexport interface PmAdapter<VM> {\r\n defaultVM: VM;\r\n subscribe(\r\n id: string,\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: VM) => void\r\n ): void;\r\n unsubscribe(\r\n id: string,\r\n appObjects: AppObjectRepo,\r\n setVM: (vm: VM) => void\r\n ): void;\r\n}\r\n"]}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=SingletonPmAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SingletonPmAdapter.js","sourceRoot":"","sources":["../../../src/Types/SingletonPmAdapter.ts"],"names":[],"mappings":"","sourcesContent":["import { AppObjectRepo } from \"../AppObject\";\r\n\r\nexport interface SingletonPmAdapter<VM> {\r\n defaultVM: VM;\r\n subscribe(appObjects: AppObjectRepo, setVM: (vm: VM) => void): void;\r\n unsubscribe(appObjects: AppObjectRepo, setVM: (vm: VM) => void): void;\r\n}\r\n"]}
@@ -1,21 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./AppBoundary"), exports);
18
- __exportStar(require("./EaseFn"), exports);
19
- __exportStar(require("./PmAdapter"), exports);
20
- __exportStar(require("./SingletonPmAdapter"), exports);
21
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,2CAAyB;AACzB,8CAA4B;AAC5B,uDAAqC","sourcesContent":["export * from \"./AppBoundary\";\r\nexport * from \"./EaseFn\";\r\nexport * from \"./PmAdapter\";\r\nexport * from \"./SingletonPmAdapter\";\r\n"]}
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.inchesToMeters = inchesToMeters;
4
- exports.metersToInches = metersToInches;
5
- exports.feetToMeters = feetToMeters;
6
- exports.metersToFeet = metersToFeet;
7
- const inchesPerMeter = 39.3701;
8
- const feetPerMeter = 3.28084;
9
- function inchesToMeters(inches) {
10
- return inches / inchesPerMeter;
11
- }
12
- function metersToInches(meters) {
13
- return meters * inchesPerMeter;
14
- }
15
- function feetToMeters(feet) {
16
- return feet / feetPerMeter;
17
- }
18
- function metersToFeet(meters) {
19
- return meters * feetPerMeter;
20
- }
21
- //# sourceMappingURL=LengthConverters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LengthConverters.js","sourceRoot":"","sources":["../../../src/Utilities/LengthConverters.ts"],"names":[],"mappings":";;AAGA,wCAEC;AAED,wCAEC;AAED,oCAEC;AAED,oCAEC;AAjBD,MAAM,cAAc,GAAG,OAAO,CAAC;AAC/B,MAAM,YAAY,GAAG,OAAO,CAAC;AAE7B,SAAgB,cAAc,CAAC,MAAc;IAC3C,OAAO,MAAM,GAAG,cAAc,CAAC;AACjC,CAAC;AAED,SAAgB,cAAc,CAAC,MAAc;IAC3C,OAAO,MAAM,GAAG,cAAc,CAAC;AACjC,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,GAAG,YAAY,CAAC;AAC7B,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,MAAM,GAAG,YAAY,CAAC;AAC/B,CAAC","sourcesContent":["const inchesPerMeter = 39.3701;\r\nconst feetPerMeter = 3.28084;\r\n\r\nexport function inchesToMeters(inches: number): number {\r\n return inches / inchesPerMeter;\r\n}\r\n\r\nexport function metersToInches(meters: number): number {\r\n return meters * inchesPerMeter;\r\n}\r\n\r\nexport function feetToMeters(feet: number): number {\r\n return feet / feetPerMeter;\r\n}\r\n\r\nexport function metersToFeet(meters: number): number {\r\n return meters * feetPerMeter;\r\n}\r\n"]}
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const LengthConverters_1 = require("./LengthConverters");
4
- test("Converting inches to meters", () => {
5
- expect((0, LengthConverters_1.inchesToMeters)(0)).toEqual(0);
6
- expect((0, LengthConverters_1.inchesToMeters)(12)).toEqual(0.30479983540808886);
7
- expect((0, LengthConverters_1.inchesToMeters)(-12)).toEqual(-0.30479983540808886);
8
- });
9
- test("Converting meters to inches", () => {
10
- expect((0, LengthConverters_1.metersToInches)(0)).toEqual(0);
11
- expect((0, LengthConverters_1.metersToInches)(2)).toEqual(78.7402);
12
- expect((0, LengthConverters_1.metersToInches)(-2)).toEqual(-78.7402);
13
- });
14
- test("Converting feet to meters", () => {
15
- expect((0, LengthConverters_1.feetToMeters)(0)).toEqual(0);
16
- expect((0, LengthConverters_1.feetToMeters)(5)).toEqual(1.5239999512320015);
17
- expect((0, LengthConverters_1.feetToMeters)(-5)).toEqual(-1.5239999512320015);
18
- });
19
- test("Converting meters to feet", () => {
20
- expect((0, LengthConverters_1.metersToFeet)(0)).toEqual(0);
21
- expect((0, LengthConverters_1.metersToFeet)(2)).toEqual(6.56168);
22
- expect((0, LengthConverters_1.metersToFeet)(-2)).toEqual(-6.56168);
23
- });
24
- //# sourceMappingURL=LengthConverters.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LengthConverters.test.js","sourceRoot":"","sources":["../../../src/Utilities/LengthConverters.test.ts"],"names":[],"mappings":";;AAAA,yDAK4B;AAE5B,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;IACvC,MAAM,CAAC,IAAA,iCAAc,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,IAAA,iCAAc,EAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACxD,MAAM,CAAC,IAAA,iCAAc,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;IACvC,MAAM,CAAC,IAAA,iCAAc,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,IAAA,iCAAc,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,CAAC,IAAA,iCAAc,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACrC,MAAM,CAAC,IAAA,+BAAY,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,IAAA,+BAAY,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpD,MAAM,CAAC,IAAA,+BAAY,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACrC,MAAM,CAAC,IAAA,+BAAY,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,IAAA,+BAAY,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,CAAC,IAAA,+BAAY,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC","sourcesContent":["import {\r\n feetToMeters,\r\n inchesToMeters,\r\n metersToFeet,\r\n metersToInches,\r\n} from \"./LengthConverters\";\r\n\r\ntest(\"Converting inches to meters\", () => {\r\n expect(inchesToMeters(0)).toEqual(0);\r\n expect(inchesToMeters(12)).toEqual(0.30479983540808886);\r\n expect(inchesToMeters(-12)).toEqual(-0.30479983540808886);\r\n});\r\n\r\ntest(\"Converting meters to inches\", () => {\r\n expect(metersToInches(0)).toEqual(0);\r\n expect(metersToInches(2)).toEqual(78.7402);\r\n expect(metersToInches(-2)).toEqual(-78.7402);\r\n});\r\n\r\ntest(\"Converting feet to meters\", () => {\r\n expect(feetToMeters(0)).toEqual(0);\r\n expect(feetToMeters(5)).toEqual(1.5239999512320015);\r\n expect(feetToMeters(-5)).toEqual(-1.5239999512320015);\r\n});\r\n\r\ntest(\"Converting meters to feet\", () => {\r\n expect(metersToFeet(0)).toEqual(0);\r\n expect(metersToFeet(2)).toEqual(6.56168);\r\n expect(metersToFeet(-2)).toEqual(-6.56168);\r\n});\r\n"]}
@@ -1,85 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LerpNumber = void 0;
4
- const easeFunctions_1 = require("./easeFunctions");
5
- /**
6
- * Utility class for smoothly interpolating between two numbers over time.
7
- * Uses requestAnimationFrame for smooth animation and supports custom easing functions.
8
- *
9
- * @example
10
- * const lerper = new LerpNumber();
11
- * // Animate from 0 to 100 over 2 seconds
12
- * await lerper.lerp({
13
- * start: 0,
14
- * end: 100,
15
- * durationMS: 2000,
16
- * update: (value) => console.log(value)
17
- * });
18
- */
19
- class LerpNumber {
20
- constructor() {
21
- this.defaultDurationMS = 1000;
22
- this.defaultEase = easeFunctions_1.quintInOut;
23
- this._isLerping = false;
24
- this._cancelLerp = false;
25
- /**
26
- * Initiates a lerp (linear interpolation) operation.
27
- * If a lerp is already in progress, it will be cancelled before starting the new one.
28
- *
29
- * @param data - Configuration object for the lerp operation
30
- * @returns Promise that resolves when the lerp completes or is cancelled
31
- * @throws Never throws, but may reject if the update function throws
32
- */
33
- this.lerp = (data) => {
34
- if (this._isLerping) {
35
- this.cancel();
36
- }
37
- const { start, end, durationMS, ease, onComplete, update, onCancel } = data;
38
- const durationToUse = durationMS ?? this.defaultDurationMS;
39
- const easeToUse = ease ?? this.defaultEase;
40
- return new Promise((resolve) => {
41
- const startTime = performance.now();
42
- this._isLerping = true;
43
- update(start);
44
- const interval = setInterval(() => {
45
- if (this._cancelLerp) {
46
- clearInterval(interval);
47
- this._isLerping = false;
48
- this._cancelLerp = false;
49
- if (onCancel)
50
- onCancel();
51
- return resolve();
52
- }
53
- const currentTime = performance.now();
54
- const elapsedTime = currentTime - startTime;
55
- const progress = Math.min(elapsedTime / durationToUse, 1);
56
- const easedProgress = easeToUse(progress);
57
- const value = start + (end - start) * easedProgress;
58
- update(value);
59
- if (progress >= 1) {
60
- clearInterval(interval);
61
- this._isLerping = false;
62
- update(end);
63
- if (onComplete)
64
- onComplete();
65
- resolve();
66
- }
67
- }, 10);
68
- });
69
- };
70
- }
71
- get isLerping() {
72
- return this._isLerping;
73
- }
74
- /**
75
- * Cancels the current lerp operation if one is in progress.
76
- * Triggers the onCancel callback if provided in the original lerp configuration.
77
- */
78
- cancel() {
79
- if (!this._isLerping)
80
- return;
81
- this._cancelLerp = true;
82
- }
83
- }
84
- exports.LerpNumber = LerpNumber;
85
- //# sourceMappingURL=LerpNumber.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LerpNumber.js","sourceRoot":"","sources":["../../../src/Utilities/LerpNumber.ts"],"names":[],"mappings":";;;AACA,mDAA6C;AAuB7C;;;;;;;;;;;;;GAaG;AACH,MAAa,UAAU;IAAvB;QACS,sBAAiB,GAAG,IAAI,CAAC;QACzB,gBAAW,GAAW,0BAAU,CAAC;QAKhC,eAAU,GAAG,KAAK,CAAC;QAYnB,gBAAW,GAAG,KAAK,CAAC;QAE5B;;;;;;;WAOG;QACH,SAAI,GAAG,CAAC,IAAmB,EAAiB,EAAE;YAC5C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;YAE5E,MAAM,aAAa,GAAG,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC;YAC3D,MAAM,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;YAE3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBACpC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBAEvB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEd,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;oBAChC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBACrB,aAAa,CAAC,QAAQ,CAAC,CAAC;wBACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;wBACxB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;wBACzB,IAAI,QAAQ;4BAAE,QAAQ,EAAE,CAAC;wBACzB,OAAO,OAAO,EAAE,CAAC;oBACnB,CAAC;oBAED,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;oBACtC,MAAM,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;oBAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC;oBAC1D,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;oBAC1C,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC;oBACpD,MAAM,CAAC,KAAK,CAAC,CAAC;oBAEd,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;wBAClB,aAAa,CAAC,QAAQ,CAAC,CAAC;wBACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;wBACxB,MAAM,CAAC,GAAG,CAAC,CAAC;wBACZ,IAAI,UAAU;4BAAE,UAAU,EAAE,CAAC;wBAC7B,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC,EAAE,EAAE,CAAC,CAAC;YACT,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;IAlEC,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAGD;;;OAGG;IACI,MAAM;QACX,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAE7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;CAqDF;AAtED,gCAsEC","sourcesContent":["import { EaseFn } from \"../Types\";\r\nimport { quintInOut } from \"./easeFunctions\";\r\n\r\n/**\r\n * Configuration object for performing a linear interpolation (lerp) operation.\r\n * @interface LerpNumberDTO\r\n */\r\nexport interface LerpNumberDTO {\r\n /** Starting value of the lerp */\r\n start: number;\r\n /** Target/ending value of the lerp */\r\n end: number;\r\n /** Callback function that receives the interpolated value on each update */\r\n update: (value: number) => void;\r\n /** Duration of the lerp in milliseconds. Defaults to LerpNumber.defaultDurationMS */\r\n durationMS?: number;\r\n /** Easing function to modify the interpolation curve. Defaults to LerpNumber.defaultEase */\r\n ease?: EaseFn;\r\n /** Optional callback function called when lerp completes naturally */\r\n onComplete?: () => void;\r\n /** Optional callback function called when lerp is cancelled */\r\n onCancel?: () => void;\r\n}\r\n\r\n/**\r\n * Utility class for smoothly interpolating between two numbers over time.\r\n * Uses requestAnimationFrame for smooth animation and supports custom easing functions.\r\n *\r\n * @example\r\n * const lerper = new LerpNumber();\r\n * // Animate from 0 to 100 over 2 seconds\r\n * await lerper.lerp({\r\n * start: 0,\r\n * end: 100,\r\n * durationMS: 2000,\r\n * update: (value) => console.log(value)\r\n * });\r\n */\r\nexport class LerpNumber {\r\n public defaultDurationMS = 1000;\r\n public defaultEase: EaseFn = quintInOut;\r\n\r\n public get isLerping() {\r\n return this._isLerping;\r\n }\r\n private _isLerping = false;\r\n\r\n /**\r\n * Cancels the current lerp operation if one is in progress.\r\n * Triggers the onCancel callback if provided in the original lerp configuration.\r\n */\r\n public cancel() {\r\n if (!this._isLerping) return;\r\n\r\n this._cancelLerp = true;\r\n }\r\n\r\n private _cancelLerp = false;\r\n\r\n /**\r\n * Initiates a lerp (linear interpolation) operation.\r\n * If a lerp is already in progress, it will be cancelled before starting the new one.\r\n *\r\n * @param data - Configuration object for the lerp operation\r\n * @returns Promise that resolves when the lerp completes or is cancelled\r\n * @throws Never throws, but may reject if the update function throws\r\n */\r\n lerp = (data: LerpNumberDTO): Promise<void> => {\r\n if (this._isLerping) {\r\n this.cancel();\r\n }\r\n const { start, end, durationMS, ease, onComplete, update, onCancel } = data;\r\n\r\n const durationToUse = durationMS ?? this.defaultDurationMS;\r\n const easeToUse = ease ?? this.defaultEase;\r\n\r\n return new Promise((resolve) => {\r\n const startTime = performance.now();\r\n this._isLerping = true;\r\n\r\n update(start);\r\n\r\n const interval = setInterval(() => {\r\n if (this._cancelLerp) {\r\n clearInterval(interval);\r\n this._isLerping = false;\r\n this._cancelLerp = false;\r\n if (onCancel) onCancel();\r\n return resolve();\r\n }\r\n\r\n const currentTime = performance.now();\r\n const elapsedTime = currentTime - startTime;\r\n const progress = Math.min(elapsedTime / durationToUse, 1);\r\n const easedProgress = easeToUse(progress);\r\n const value = start + (end - start) * easedProgress;\r\n update(value);\r\n\r\n if (progress >= 1) {\r\n clearInterval(interval);\r\n this._isLerping = false;\r\n update(end);\r\n if (onComplete) onComplete();\r\n resolve();\r\n }\r\n }, 10);\r\n });\r\n };\r\n}\r\n"]}
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const LerpNumber_1 = require("./LerpNumber");
4
- describe("Lerp Number", () => {
5
- let lerpNumber;
6
- let updateFn;
7
- beforeEach(() => {
8
- lerpNumber = new LerpNumber_1.LerpNumber();
9
- updateFn = jest.fn();
10
- jest.useFakeTimers();
11
- });
12
- afterEach(() => {
13
- jest.useRealTimers();
14
- });
15
- it("should lerp from start to end value", async () => {
16
- lerpNumber.defaultDurationMS = 1000;
17
- const promise = lerpNumber.lerp({
18
- start: 0,
19
- end: 100,
20
- update: updateFn,
21
- });
22
- // Test middle point (should have multiple updates by this point)
23
- jest.advanceTimersByTime(500);
24
- expect(updateFn).toHaveBeenCalledWith(expect.closeTo(50, 5)); // Allow some margin due to interval timing
25
- // Complete animation
26
- jest.advanceTimersByTime(500);
27
- await promise;
28
- expect(updateFn).toHaveBeenCalledWith(0); // Start value
29
- expect(updateFn).toHaveBeenLastCalledWith(100); // End value
30
- });
31
- it("should cancel lerp when requested", async () => {
32
- const onCancel = jest.fn();
33
- const promise = lerpNumber.lerp({
34
- start: 0,
35
- end: 100,
36
- update: updateFn,
37
- onCancel,
38
- });
39
- expect(lerpNumber.isLerping).toBe(true);
40
- lerpNumber.cancel();
41
- jest.advanceTimersByTime(10); // Allow interval to execute
42
- await promise;
43
- expect(lerpNumber.isLerping).toBe(false);
44
- expect(onCancel).toHaveBeenCalled();
45
- });
46
- it("should respect custom duration", async () => {
47
- const promise = lerpNumber.lerp({
48
- start: 0,
49
- end: 100,
50
- update: updateFn,
51
- durationMS: 500,
52
- });
53
- jest.advanceTimersByTime(250); // Half way
54
- expect(updateFn).toHaveBeenLastCalledWith(expect.any(Number));
55
- jest.advanceTimersByTime(250); // Complete
56
- await promise;
57
- expect(updateFn).toHaveBeenLastCalledWith(100);
58
- });
59
- it("should call onComplete when finished", async () => {
60
- const onComplete = jest.fn();
61
- const promise = lerpNumber.lerp({
62
- start: 0,
63
- end: 100,
64
- update: updateFn,
65
- onComplete,
66
- });
67
- jest.advanceTimersByTime(1000);
68
- await promise;
69
- expect(onComplete).toHaveBeenCalled();
70
- });
71
- it("should cancel existing lerp when starting a new one", async () => {
72
- const onCancel = jest.fn();
73
- const firstPromise = lerpNumber.lerp({
74
- start: 0,
75
- end: 100,
76
- update: updateFn,
77
- onCancel,
78
- });
79
- const secondPromise = lerpNumber.lerp({
80
- start: 200,
81
- end: 300,
82
- update: updateFn,
83
- });
84
- jest.advanceTimersByTime(1000);
85
- await Promise.all([firstPromise, secondPromise]);
86
- expect(onCancel).toHaveBeenCalled();
87
- expect(updateFn).toHaveBeenLastCalledWith(300);
88
- });
89
- });
90
- //# sourceMappingURL=LerpNumber.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LerpNumber.test.js","sourceRoot":"","sources":["../../../src/Utilities/LerpNumber.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { LerpNumber } from \"./LerpNumber\";\r\n\r\ndescribe(\"Lerp Number\", () => {\r\n let lerpNumber: LerpNumber;\r\n let updateFn: jest.Mock;\r\n\r\n beforeEach(() => {\r\n lerpNumber = new LerpNumber();\r\n updateFn = jest.fn();\r\n jest.useFakeTimers();\r\n });\r\n\r\n afterEach(() => {\r\n jest.useRealTimers();\r\n });\r\n\r\n it(\"should lerp from start to end value\", async () => {\r\n lerpNumber.defaultDurationMS = 1000;\r\n const promise = lerpNumber.lerp({\r\n start: 0,\r\n end: 100,\r\n update: updateFn,\r\n });\r\n\r\n // Test middle point (should have multiple updates by this point)\r\n jest.advanceTimersByTime(500);\r\n expect(updateFn).toHaveBeenCalledWith(expect.closeTo(50, 5)); // Allow some margin due to interval timing\r\n\r\n // Complete animation\r\n jest.advanceTimersByTime(500);\r\n await promise;\r\n\r\n expect(updateFn).toHaveBeenCalledWith(0); // Start value\r\n expect(updateFn).toHaveBeenLastCalledWith(100); // End value\r\n });\r\n\r\n it(\"should cancel lerp when requested\", async () => {\r\n const onCancel = jest.fn();\r\n const promise = lerpNumber.lerp({\r\n start: 0,\r\n end: 100,\r\n update: updateFn,\r\n onCancel,\r\n });\r\n\r\n expect(lerpNumber.isLerping).toBe(true);\r\n\r\n lerpNumber.cancel();\r\n jest.advanceTimersByTime(10); // Allow interval to execute\r\n await promise;\r\n\r\n expect(lerpNumber.isLerping).toBe(false);\r\n expect(onCancel).toHaveBeenCalled();\r\n });\r\n\r\n it(\"should respect custom duration\", async () => {\r\n const promise = lerpNumber.lerp({\r\n start: 0,\r\n end: 100,\r\n update: updateFn,\r\n durationMS: 500,\r\n });\r\n\r\n jest.advanceTimersByTime(250); // Half way\r\n expect(updateFn).toHaveBeenLastCalledWith(expect.any(Number));\r\n\r\n jest.advanceTimersByTime(250); // Complete\r\n await promise;\r\n\r\n expect(updateFn).toHaveBeenLastCalledWith(100);\r\n });\r\n\r\n it(\"should call onComplete when finished\", async () => {\r\n const onComplete = jest.fn();\r\n const promise = lerpNumber.lerp({\r\n start: 0,\r\n end: 100,\r\n update: updateFn,\r\n onComplete,\r\n });\r\n\r\n jest.advanceTimersByTime(1000);\r\n await promise;\r\n\r\n expect(onComplete).toHaveBeenCalled();\r\n });\r\n\r\n it(\"should cancel existing lerp when starting a new one\", async () => {\r\n const onCancel = jest.fn();\r\n const firstPromise = lerpNumber.lerp({\r\n start: 0,\r\n end: 100,\r\n update: updateFn,\r\n onCancel,\r\n });\r\n\r\n const secondPromise = lerpNumber.lerp({\r\n start: 200,\r\n end: 300,\r\n update: updateFn,\r\n });\r\n\r\n jest.advanceTimersByTime(1000);\r\n await Promise.all([firstPromise, secondPromise]);\r\n\r\n expect(onCancel).toHaveBeenCalled();\r\n expect(updateFn).toHaveBeenLastCalledWith(300);\r\n });\r\n});\r\n"]}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addAlphaToHex = addAlphaToHex;
4
- const alphaToHex_1 = require("./alphaToHex");
5
- function addAlphaToHex(hex, alpha) {
6
- if (!/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(hex)) {
7
- console.warn("[addAlphaToHex] Hex value is not valid.");
8
- return "#000";
9
- }
10
- if (hex.length === 4) {
11
- hex = "#" + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3];
12
- }
13
- const alphaHex = (0, alphaToHex_1.alphaToHex)(alpha);
14
- return `${hex}${alphaHex}`;
15
- }
16
- //# sourceMappingURL=addAlphaToHex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"addAlphaToHex.js","sourceRoot":"","sources":["../../../src/Utilities/addAlphaToHex.ts"],"names":[],"mappings":";;AAEA,sCAYC;AAdD,6CAA0C;AAE1C,SAAgB,aAAa,CAAC,GAAW,EAAE,KAAa;IACtD,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,uBAAU,EAAC,KAAK,CAAC,CAAC;IACnC,OAAO,GAAG,GAAG,GAAG,QAAQ,EAAE,CAAC;AAC7B,CAAC","sourcesContent":["import { alphaToHex } from \"./alphaToHex\";\r\n\r\nexport function addAlphaToHex(hex: string, alpha: number): string {\r\n if (!/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/.test(hex)) {\r\n console.warn(\"[addAlphaToHex] Hex value is not valid.\");\r\n return \"#000\";\r\n }\r\n\r\n if (hex.length === 4) {\r\n hex = \"#\" + hex[1] + hex[1] + hex[2] + hex[2] + hex[3] + hex[3];\r\n }\r\n\r\n const alphaHex = alphaToHex(alpha);\r\n return `${hex}${alphaHex}`;\r\n}\r\n"]}
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const addAlphaToHex_1 = require("./addAlphaToHex");
4
- describe("addAlphaToHex", () => {
5
- it("should add alpha channel to hex color code", () => {
6
- expect((0, addAlphaToHex_1.addAlphaToHex)("#ffffff", 0.5)).toBe("#ffffff80");
7
- expect((0, addAlphaToHex_1.addAlphaToHex)("#000000", 0.1)).toBe("#0000001a");
8
- expect((0, addAlphaToHex_1.addAlphaToHex)("#123456", 0)).toBe("#12345600");
9
- expect((0, addAlphaToHex_1.addAlphaToHex)("#abcdef", 1)).toBe("#abcdefff");
10
- });
11
- it("should add alpha channel to short hex color code", () => {
12
- expect((0, addAlphaToHex_1.addAlphaToHex)("#fff", 0.5)).toBe("#ffffff80");
13
- expect((0, addAlphaToHex_1.addAlphaToHex)("#000", 0.1)).toBe("#0000001a");
14
- });
15
- it("should log a warning and return Hex with alpha 0 if alpha value is out of bounds", () => {
16
- console.warn = jest.fn();
17
- expect((0, addAlphaToHex_1.addAlphaToHex)("#ffffff", -0.1)).toBe("#ffffff00");
18
- expect(console.warn).toHaveBeenCalledWith("[alphaToHex] Alpha value must be between 0 and 1.");
19
- expect((0, addAlphaToHex_1.addAlphaToHex)("#ffffff", 1.1)).toBe("#ffffff00");
20
- expect(console.warn).toHaveBeenCalledWith("[alphaToHex] Alpha value must be between 0 and 1.");
21
- });
22
- it("should log a warning and return #000 for invalid hex values", () => {
23
- console.warn = jest.fn();
24
- expect((0, addAlphaToHex_1.addAlphaToHex)("#gggggg", 0.5)).toBe("#000");
25
- expect(console.warn).toHaveBeenCalledWith("[addAlphaToHex] Hex value is not valid.");
26
- expect((0, addAlphaToHex_1.addAlphaToHex)("#ffff", 0.5)).toBe("#000");
27
- expect(console.warn).toHaveBeenCalledWith("[addAlphaToHex] Hex value is not valid.");
28
- expect((0, addAlphaToHex_1.addAlphaToHex)("ffffff", 0.5)).toBe("#000");
29
- expect(console.warn).toHaveBeenCalledWith("[addAlphaToHex] Hex value is not valid.");
30
- expect((0, addAlphaToHex_1.addAlphaToHex)("#fff0", 0.5)).toBe("#000");
31
- expect(console.warn).toHaveBeenCalledWith("[addAlphaToHex] Hex value is not valid.");
32
- });
33
- });
34
- //# sourceMappingURL=addAlphaToHex.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"addAlphaToHex.test.js","sourceRoot":"","sources":["../../../src/Utilities/addAlphaToHex.test.ts"],"names":[],"mappings":";;AAAA,mDAAgD;AAEhD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,IAAA,6BAAa,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,CAAC,IAAA,6BAAa,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,CAAC,IAAA,6BAAa,EAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtD,MAAM,CAAC,IAAA,6BAAa,EAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,IAAA,6BAAa,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,CAAC,IAAA,6BAAa,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,GAAG,EAAE;QAC1F,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACzB,MAAM,CAAC,IAAA,6BAAa,EAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACvC,mDAAmD,CACpD,CAAC;QACF,MAAM,CAAC,IAAA,6BAAa,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACvC,mDAAmD,CACpD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QACzB,MAAM,CAAC,IAAA,6BAAa,EAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACvC,yCAAyC,CAC1C,CAAC;QAEF,MAAM,CAAC,IAAA,6BAAa,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACvC,yCAAyC,CAC1C,CAAC;QAEF,MAAM,CAAC,IAAA,6BAAa,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACvC,yCAAyC,CAC1C,CAAC;QAEF,MAAM,CAAC,IAAA,6BAAa,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CACvC,yCAAyC,CAC1C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { addAlphaToHex } from \"./addAlphaToHex\";\r\n\r\ndescribe(\"addAlphaToHex\", () => {\r\n it(\"should add alpha channel to hex color code\", () => {\r\n expect(addAlphaToHex(\"#ffffff\", 0.5)).toBe(\"#ffffff80\");\r\n expect(addAlphaToHex(\"#000000\", 0.1)).toBe(\"#0000001a\");\r\n expect(addAlphaToHex(\"#123456\", 0)).toBe(\"#12345600\");\r\n expect(addAlphaToHex(\"#abcdef\", 1)).toBe(\"#abcdefff\");\r\n });\r\n\r\n it(\"should add alpha channel to short hex color code\", () => {\r\n expect(addAlphaToHex(\"#fff\", 0.5)).toBe(\"#ffffff80\");\r\n expect(addAlphaToHex(\"#000\", 0.1)).toBe(\"#0000001a\");\r\n });\r\n\r\n it(\"should log a warning and return Hex with alpha 0 if alpha value is out of bounds\", () => {\r\n console.warn = jest.fn();\r\n expect(addAlphaToHex(\"#ffffff\", -0.1)).toBe(\"#ffffff00\");\r\n expect(console.warn).toHaveBeenCalledWith(\r\n \"[alphaToHex] Alpha value must be between 0 and 1.\"\r\n );\r\n expect(addAlphaToHex(\"#ffffff\", 1.1)).toBe(\"#ffffff00\");\r\n expect(console.warn).toHaveBeenCalledWith(\r\n \"[alphaToHex] Alpha value must be between 0 and 1.\"\r\n );\r\n });\r\n\r\n it(\"should log a warning and return #000 for invalid hex values\", () => {\r\n console.warn = jest.fn();\r\n expect(addAlphaToHex(\"#gggggg\", 0.5)).toBe(\"#000\");\r\n expect(console.warn).toHaveBeenCalledWith(\r\n \"[addAlphaToHex] Hex value is not valid.\"\r\n );\r\n\r\n expect(addAlphaToHex(\"#ffff\", 0.5)).toBe(\"#000\");\r\n expect(console.warn).toHaveBeenCalledWith(\r\n \"[addAlphaToHex] Hex value is not valid.\"\r\n );\r\n\r\n expect(addAlphaToHex(\"ffffff\", 0.5)).toBe(\"#000\");\r\n expect(console.warn).toHaveBeenCalledWith(\r\n \"[addAlphaToHex] Hex value is not valid.\"\r\n );\r\n\r\n expect(addAlphaToHex(\"#fff0\", 0.5)).toBe(\"#000\");\r\n expect(console.warn).toHaveBeenCalledWith(\r\n \"[addAlphaToHex] Hex value is not valid.\"\r\n );\r\n });\r\n});\r\n"]}
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.roundHalfToEven = roundHalfToEven;
4
- exports.alphaToHex = alphaToHex;
5
- function roundHalfToEven(number) {
6
- const roundedNumber = Math.round(number);
7
- if (Math.abs(roundedNumber - number) === 0.5 && roundedNumber % 2 !== 0) {
8
- return roundedNumber > number ? roundedNumber - 1 : roundedNumber + 1;
9
- }
10
- return roundedNumber;
11
- }
12
- function alphaToHex(alpha) {
13
- if (alpha < 0 || alpha > 1) {
14
- console.warn("[alphaToHex] Alpha value must be between 0 and 1.");
15
- return "00";
16
- }
17
- const alpha255 = roundHalfToEven(alpha * 255);
18
- const alphaHex = alpha255.toString(16).padStart(2, "0");
19
- return alphaHex;
20
- }
21
- //# sourceMappingURL=alphaToHex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"alphaToHex.js","sourceRoot":"","sources":["../../../src/Utilities/alphaToHex.ts"],"names":[],"mappings":";;AAAA,0CAMC;AAED,gCAUC;AAlBD,SAAgB,eAAe,CAAC,MAAc;IAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,aAAa,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAgB,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAExD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["export function roundHalfToEven(number: number): number {\r\n const roundedNumber = Math.round(number);\r\n if (Math.abs(roundedNumber - number) === 0.5 && roundedNumber % 2 !== 0) {\r\n return roundedNumber > number ? roundedNumber - 1 : roundedNumber + 1;\r\n }\r\n return roundedNumber;\r\n}\r\n\r\nexport function alphaToHex(alpha: number): string {\r\n if (alpha < 0 || alpha > 1) {\r\n console.warn(\"[alphaToHex] Alpha value must be between 0 and 1.\");\r\n return \"00\";\r\n }\r\n\r\n const alpha255 = roundHalfToEven(alpha * 255);\r\n const alphaHex = alpha255.toString(16).padStart(2, \"0\");\r\n\r\n return alphaHex;\r\n}\r\n"]}