@vived/core 1.1.0 → 1.2.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.
@@ -0,0 +1,36 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,96 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangedNumber.test.js","sourceRoot":"","sources":["../../../src/Entities/RangedNumber.test.ts"],"names":[],"mappings":"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"}
@@ -14,8 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./ObservableEntity"), exports);
18
- __exportStar(require("./ObserverList"), exports);
19
17
  __exportStar(require("./MemoizedAngle"), exports);
20
18
  __exportStar(require("./MemoizedBoolean"), exports);
21
19
  __exportStar(require("./MemoizedColor"), exports);
@@ -24,4 +22,7 @@ __exportStar(require("./MemoizedQuaternion"), exports);
24
22
  __exportStar(require("./MemoizedString"), exports);
25
23
  __exportStar(require("./MemoizedVector2"), exports);
26
24
  __exportStar(require("./MemoizedVector3"), exports);
25
+ __exportStar(require("./ObservableEntity"), exports);
26
+ __exportStar(require("./ObserverList"), exports);
27
+ __exportStar(require("./RangedNumber"), exports);
27
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Entities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,iDAA+B;AAC/B,kDAAgC;AAChC,oDAAkC;AAClC,kDAAgC;AAChC,mDAAiC;AACjC,uDAAqC;AACrC,mDAAiC;AACjC,oDAAkC;AAClC,oDAAkC"}
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"}
@@ -0,0 +1,32 @@
1
+ export class RangedNumber {
2
+ get val() {
3
+ return this._val;
4
+ }
5
+ set val(x) {
6
+ const y = this.clamp(x);
7
+ if (this._val === y)
8
+ return;
9
+ this._val = y;
10
+ this.onChangeCallback();
11
+ }
12
+ setValQuietly(val) {
13
+ this._val = this.clamp(val);
14
+ }
15
+ clamp(x) {
16
+ let rVal = x;
17
+ if (x > this.maxValue) {
18
+ rVal = this.maxValue;
19
+ }
20
+ else if (x < this.minValue) {
21
+ rVal = this.minValue;
22
+ }
23
+ return rVal;
24
+ }
25
+ constructor(props, onChangeCallback) {
26
+ this.maxValue = props.max;
27
+ this.minValue = props.min;
28
+ this._val = this.clamp(props.initialValue);
29
+ this.onChangeCallback = onChangeCallback;
30
+ }
31
+ }
32
+ //# sourceMappingURL=RangedNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangedNumber.js","sourceRoot":"","sources":["../../../src/Entities/RangedNumber.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,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"}
@@ -0,0 +1,94 @@
1
+ import { RangedNumber } from "./RangedNumber";
2
+ it("Stores the initial value", () => {
3
+ const props = {
4
+ initialValue: 5,
5
+ max: 10,
6
+ min: 1,
7
+ };
8
+ const memoizedNumber = new RangedNumber(props, jest.fn());
9
+ expect(memoizedNumber.val).toEqual(5);
10
+ });
11
+ it("Clamps the initial value", () => {
12
+ const props = {
13
+ initialValue: 50,
14
+ max: 10,
15
+ min: 1,
16
+ };
17
+ const memoizedNumber = new RangedNumber(props, jest.fn());
18
+ expect(memoizedNumber.val).toEqual(10);
19
+ });
20
+ it("Clamps the value", () => {
21
+ const props = {
22
+ initialValue: 5,
23
+ max: 10,
24
+ min: 1,
25
+ };
26
+ const memoizedNumber = new RangedNumber(props, jest.fn());
27
+ expect(memoizedNumber.val).toEqual(5);
28
+ memoizedNumber.val = 11;
29
+ expect(memoizedNumber.val).toEqual(10);
30
+ memoizedNumber.val = 0;
31
+ expect(memoizedNumber.val).toEqual(1);
32
+ });
33
+ it("Triggers the callback when something changes", () => {
34
+ const cb = jest.fn();
35
+ const props = {
36
+ initialValue: 5,
37
+ max: 10,
38
+ min: 1,
39
+ };
40
+ const memoizedNumber = new RangedNumber(props, cb);
41
+ expect(cb).not.toBeCalled();
42
+ memoizedNumber.val = 6;
43
+ expect(cb).toBeCalled();
44
+ });
45
+ it("Only triggers the CB when something changes", () => {
46
+ const cb = jest.fn();
47
+ const props = {
48
+ initialValue: 5,
49
+ max: 10,
50
+ min: 1,
51
+ };
52
+ const memoizedNumber = new RangedNumber(props, cb);
53
+ memoizedNumber.val = 5;
54
+ memoizedNumber.val = 5;
55
+ memoizedNumber.val = 5;
56
+ expect(cb).not.toBeCalled();
57
+ });
58
+ it("Checks the clamped value before triggering", () => {
59
+ const cb = jest.fn();
60
+ const props = {
61
+ initialValue: 10,
62
+ max: 10,
63
+ min: 1,
64
+ };
65
+ const memoizedNumber = new RangedNumber(props, cb);
66
+ memoizedNumber.val = 11;
67
+ memoizedNumber.val = 12;
68
+ memoizedNumber.val = 13;
69
+ expect(cb).not.toBeCalled();
70
+ });
71
+ it("Does not notify if set quietly", () => {
72
+ const cb = jest.fn();
73
+ const props = {
74
+ initialValue: 5,
75
+ max: 10,
76
+ min: 1,
77
+ };
78
+ const memoizedNumber = new RangedNumber(props, cb);
79
+ memoizedNumber.setValQuietly(6);
80
+ expect(memoizedNumber.val).toEqual(6);
81
+ expect(cb).not.toBeCalled();
82
+ });
83
+ it("Setting quietly is clamped", () => {
84
+ const cb = jest.fn();
85
+ const props = {
86
+ initialValue: 5,
87
+ max: 10,
88
+ min: 1,
89
+ };
90
+ const memoizedNumber = new RangedNumber(props, cb);
91
+ memoizedNumber.setValQuietly(-1);
92
+ expect(memoizedNumber.val).toEqual(1);
93
+ });
94
+ //# sourceMappingURL=RangedNumber.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangedNumber.test.js","sourceRoot":"","sources":["../../../src/Entities/RangedNumber.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,3 @@
1
- export * from "./ObservableEntity";
2
- export * from "./ObserverList";
3
1
  export * from "./MemoizedAngle";
4
2
  export * from "./MemoizedBoolean";
5
3
  export * from "./MemoizedColor";
@@ -8,4 +6,7 @@ export * from "./MemoizedQuaternion";
8
6
  export * from "./MemoizedString";
9
7
  export * from "./MemoizedVector2";
10
8
  export * from "./MemoizedVector3";
9
+ export * from "./ObservableEntity";
10
+ export * from "./ObserverList";
11
+ export * from "./RangedNumber";
11
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/appobject/appobject.test.ts","../src/appobject/appobject.ts","../src/appobject/appobjectcomponent.test.ts","../src/appobject/appobjectcomponent.ts","../src/appobject/appobjectcontroller.ts","../src/appobject/appobjectentity.test.ts","../src/appobject/appobjectentity.ts","../src/appobject/appobjectentityrepo.test.ts","../src/appobject/appobjectentityrepo.ts","../src/appobject/appobjectpm.test.ts","../src/appobject/appobjectpm.ts","../src/appobject/appobjectrepo.test.ts","../src/appobject/appobjectrepo.ts","../src/appobject/appobjectuc.ts","../src/appobject/appobjectview.ts","../src/appobject/getsingletoncomponent.test.ts","../src/appobject/getsingletoncomponent.ts","../src/appobject/index.ts","../src/appobject/printappobjectdetails.ts","../src/entities/memoizedangle.test.ts","../src/entities/memoizedangle.ts","../src/entities/memoizedboolean.test.ts","../src/entities/memoizedboolean.ts","../src/entities/memoizedcolor.test.ts","../src/entities/memoizedcolor.ts","../src/entities/memoizednumber.test.ts","../src/entities/memoizednumber.ts","../src/entities/memoizedquaternion.test.ts","../src/entities/memoizedquaternion.ts","../src/entities/memoizedstring.test.ts","../src/entities/memoizedstring.ts","../src/entities/memoizedvector2.test.ts","../src/entities/memoizedvector2.ts","../src/entities/memoizedvector3.test.ts","../src/entities/memoizedvector3.ts","../src/entities/observableentity.test.ts","../src/entities/observableentity.ts","../src/entities/observerlist.test.ts","../src/entities/observerlist.ts","../src/entities/index.ts","../src/types/appboundary.ts","../src/types/easefn.ts","../src/types/pmadapter.ts","../src/types/singletonpmadapter.ts","../src/types/index.ts","../src/utilities/lengthconverters.test.ts","../src/utilities/lengthconverters.ts","../src/utilities/lerpnumber.test.ts","../src/utilities/lerpnumber.ts","../src/utilities/degreestoradians.test.ts","../src/utilities/degreestoradians.ts","../src/utilities/easefunctions.test.ts","../src/utilities/easefunctions.ts","../src/utilities/generateuniqueid.ts","../src/utilities/index.ts","../src/utilities/interpolatenumber.test.ts","../src/utilities/interpolatenumber.ts","../src/valueobjects/angle.test.ts","../src/valueobjects/angle.ts","../src/valueobjects/color.test.ts","../src/valueobjects/color.ts","../src/valueobjects/linesegment2d.test.ts","../src/valueobjects/linesegment2d.ts","../src/valueobjects/matrix.test.ts","../src/valueobjects/matrix.ts","../src/valueobjects/parametricline.test.ts","../src/valueobjects/parametricline.ts","../src/valueobjects/parametricplane.test.ts","../src/valueobjects/parametricplane.ts","../src/valueobjects/quaternion.test.ts","../src/valueobjects/quaternion.ts","../src/valueobjects/rectangle.test.ts","../src/valueobjects/rectangle.ts","../src/valueobjects/vector2.test.ts","../src/valueobjects/vector2.ts","../src/valueobjects/vector3.test.ts","../src/valueobjects/vector3.ts","../src/valueobjects/index.ts"],"version":"5.8.2"}
1
+ {"root":["../src/index.ts","../src/appobject/appobject.test.ts","../src/appobject/appobject.ts","../src/appobject/appobjectcomponent.test.ts","../src/appobject/appobjectcomponent.ts","../src/appobject/appobjectcontroller.ts","../src/appobject/appobjectentity.test.ts","../src/appobject/appobjectentity.ts","../src/appobject/appobjectentityrepo.test.ts","../src/appobject/appobjectentityrepo.ts","../src/appobject/appobjectpm.test.ts","../src/appobject/appobjectpm.ts","../src/appobject/appobjectrepo.test.ts","../src/appobject/appobjectrepo.ts","../src/appobject/appobjectuc.ts","../src/appobject/appobjectview.ts","../src/appobject/getsingletoncomponent.test.ts","../src/appobject/getsingletoncomponent.ts","../src/appobject/index.ts","../src/appobject/printappobjectdetails.ts","../src/entities/memoizedangle.test.ts","../src/entities/memoizedangle.ts","../src/entities/memoizedboolean.test.ts","../src/entities/memoizedboolean.ts","../src/entities/memoizedcolor.test.ts","../src/entities/memoizedcolor.ts","../src/entities/memoizednumber.test.ts","../src/entities/memoizednumber.ts","../src/entities/memoizedquaternion.test.ts","../src/entities/memoizedquaternion.ts","../src/entities/memoizedstring.test.ts","../src/entities/memoizedstring.ts","../src/entities/memoizedvector2.test.ts","../src/entities/memoizedvector2.ts","../src/entities/memoizedvector3.test.ts","../src/entities/memoizedvector3.ts","../src/entities/observableentity.test.ts","../src/entities/observableentity.ts","../src/entities/observerlist.test.ts","../src/entities/observerlist.ts","../src/entities/rangednumber.test.ts","../src/entities/rangednumber.ts","../src/entities/index.ts","../src/types/appboundary.ts","../src/types/easefn.ts","../src/types/pmadapter.ts","../src/types/singletonpmadapter.ts","../src/types/index.ts","../src/utilities/lengthconverters.test.ts","../src/utilities/lengthconverters.ts","../src/utilities/lerpnumber.test.ts","../src/utilities/lerpnumber.ts","../src/utilities/degreestoradians.test.ts","../src/utilities/degreestoradians.ts","../src/utilities/easefunctions.test.ts","../src/utilities/easefunctions.ts","../src/utilities/generateuniqueid.ts","../src/utilities/index.ts","../src/utilities/interpolatenumber.test.ts","../src/utilities/interpolatenumber.ts","../src/valueobjects/angle.test.ts","../src/valueobjects/angle.ts","../src/valueobjects/color.test.ts","../src/valueobjects/color.ts","../src/valueobjects/linesegment2d.test.ts","../src/valueobjects/linesegment2d.ts","../src/valueobjects/matrix.test.ts","../src/valueobjects/matrix.ts","../src/valueobjects/parametricline.test.ts","../src/valueobjects/parametricline.ts","../src/valueobjects/parametricplane.test.ts","../src/valueobjects/parametricplane.ts","../src/valueobjects/quaternion.test.ts","../src/valueobjects/quaternion.ts","../src/valueobjects/rectangle.test.ts","../src/valueobjects/rectangle.ts","../src/valueobjects/vector2.test.ts","../src/valueobjects/vector2.ts","../src/valueobjects/vector3.test.ts","../src/valueobjects/vector3.ts","../src/valueobjects/index.ts"],"version":"5.8.2"}
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/appobject/appobject.test.ts","../src/appobject/appobject.ts","../src/appobject/appobjectcomponent.test.ts","../src/appobject/appobjectcomponent.ts","../src/appobject/appobjectcontroller.ts","../src/appobject/appobjectentity.test.ts","../src/appobject/appobjectentity.ts","../src/appobject/appobjectentityrepo.test.ts","../src/appobject/appobjectentityrepo.ts","../src/appobject/appobjectpm.test.ts","../src/appobject/appobjectpm.ts","../src/appobject/appobjectrepo.test.ts","../src/appobject/appobjectrepo.ts","../src/appobject/appobjectuc.ts","../src/appobject/appobjectview.ts","../src/appobject/getsingletoncomponent.test.ts","../src/appobject/getsingletoncomponent.ts","../src/appobject/index.ts","../src/appobject/printappobjectdetails.ts","../src/entities/memoizedangle.test.ts","../src/entities/memoizedangle.ts","../src/entities/memoizedboolean.test.ts","../src/entities/memoizedboolean.ts","../src/entities/memoizedcolor.test.ts","../src/entities/memoizedcolor.ts","../src/entities/memoizednumber.test.ts","../src/entities/memoizednumber.ts","../src/entities/memoizedquaternion.test.ts","../src/entities/memoizedquaternion.ts","../src/entities/memoizedstring.test.ts","../src/entities/memoizedstring.ts","../src/entities/memoizedvector2.test.ts","../src/entities/memoizedvector2.ts","../src/entities/memoizedvector3.test.ts","../src/entities/memoizedvector3.ts","../src/entities/observableentity.test.ts","../src/entities/observableentity.ts","../src/entities/observerlist.test.ts","../src/entities/observerlist.ts","../src/entities/index.ts","../src/types/appboundary.ts","../src/types/easefn.ts","../src/types/pmadapter.ts","../src/types/singletonpmadapter.ts","../src/types/index.ts","../src/utilities/lengthconverters.test.ts","../src/utilities/lengthconverters.ts","../src/utilities/lerpnumber.test.ts","../src/utilities/lerpnumber.ts","../src/utilities/degreestoradians.test.ts","../src/utilities/degreestoradians.ts","../src/utilities/easefunctions.test.ts","../src/utilities/easefunctions.ts","../src/utilities/generateuniqueid.ts","../src/utilities/index.ts","../src/utilities/interpolatenumber.test.ts","../src/utilities/interpolatenumber.ts","../src/valueobjects/angle.test.ts","../src/valueobjects/angle.ts","../src/valueobjects/color.test.ts","../src/valueobjects/color.ts","../src/valueobjects/linesegment2d.test.ts","../src/valueobjects/linesegment2d.ts","../src/valueobjects/matrix.test.ts","../src/valueobjects/matrix.ts","../src/valueobjects/parametricline.test.ts","../src/valueobjects/parametricline.ts","../src/valueobjects/parametricplane.test.ts","../src/valueobjects/parametricplane.ts","../src/valueobjects/quaternion.test.ts","../src/valueobjects/quaternion.ts","../src/valueobjects/rectangle.test.ts","../src/valueobjects/rectangle.ts","../src/valueobjects/vector2.test.ts","../src/valueobjects/vector2.ts","../src/valueobjects/vector3.test.ts","../src/valueobjects/vector3.ts","../src/valueobjects/index.ts"],"version":"5.8.2"}
1
+ {"root":["../src/index.ts","../src/appobject/appobject.test.ts","../src/appobject/appobject.ts","../src/appobject/appobjectcomponent.test.ts","../src/appobject/appobjectcomponent.ts","../src/appobject/appobjectcontroller.ts","../src/appobject/appobjectentity.test.ts","../src/appobject/appobjectentity.ts","../src/appobject/appobjectentityrepo.test.ts","../src/appobject/appobjectentityrepo.ts","../src/appobject/appobjectpm.test.ts","../src/appobject/appobjectpm.ts","../src/appobject/appobjectrepo.test.ts","../src/appobject/appobjectrepo.ts","../src/appobject/appobjectuc.ts","../src/appobject/appobjectview.ts","../src/appobject/getsingletoncomponent.test.ts","../src/appobject/getsingletoncomponent.ts","../src/appobject/index.ts","../src/appobject/printappobjectdetails.ts","../src/entities/memoizedangle.test.ts","../src/entities/memoizedangle.ts","../src/entities/memoizedboolean.test.ts","../src/entities/memoizedboolean.ts","../src/entities/memoizedcolor.test.ts","../src/entities/memoizedcolor.ts","../src/entities/memoizednumber.test.ts","../src/entities/memoizednumber.ts","../src/entities/memoizedquaternion.test.ts","../src/entities/memoizedquaternion.ts","../src/entities/memoizedstring.test.ts","../src/entities/memoizedstring.ts","../src/entities/memoizedvector2.test.ts","../src/entities/memoizedvector2.ts","../src/entities/memoizedvector3.test.ts","../src/entities/memoizedvector3.ts","../src/entities/observableentity.test.ts","../src/entities/observableentity.ts","../src/entities/observerlist.test.ts","../src/entities/observerlist.ts","../src/entities/rangednumber.test.ts","../src/entities/rangednumber.ts","../src/entities/index.ts","../src/types/appboundary.ts","../src/types/easefn.ts","../src/types/pmadapter.ts","../src/types/singletonpmadapter.ts","../src/types/index.ts","../src/utilities/lengthconverters.test.ts","../src/utilities/lengthconverters.ts","../src/utilities/lerpnumber.test.ts","../src/utilities/lerpnumber.ts","../src/utilities/degreestoradians.test.ts","../src/utilities/degreestoradians.ts","../src/utilities/easefunctions.test.ts","../src/utilities/easefunctions.ts","../src/utilities/generateuniqueid.ts","../src/utilities/index.ts","../src/utilities/interpolatenumber.test.ts","../src/utilities/interpolatenumber.ts","../src/valueobjects/angle.test.ts","../src/valueobjects/angle.ts","../src/valueobjects/color.test.ts","../src/valueobjects/color.ts","../src/valueobjects/linesegment2d.test.ts","../src/valueobjects/linesegment2d.ts","../src/valueobjects/matrix.test.ts","../src/valueobjects/matrix.ts","../src/valueobjects/parametricline.test.ts","../src/valueobjects/parametricline.ts","../src/valueobjects/parametricplane.test.ts","../src/valueobjects/parametricplane.ts","../src/valueobjects/quaternion.test.ts","../src/valueobjects/quaternion.ts","../src/valueobjects/rectangle.test.ts","../src/valueobjects/rectangle.ts","../src/valueobjects/vector2.test.ts","../src/valueobjects/vector2.ts","../src/valueobjects/vector3.test.ts","../src/valueobjects/vector3.ts","../src/valueobjects/index.ts"],"version":"5.8.2"}
@@ -0,0 +1,17 @@
1
+ export interface RangedNumberProperties {
2
+ min: number;
3
+ max: number;
4
+ initialValue: number;
5
+ }
6
+ export declare class RangedNumber {
7
+ readonly maxValue: number;
8
+ readonly minValue: number;
9
+ private _val;
10
+ get val(): number;
11
+ set val(x: number);
12
+ setValQuietly(val: number): void;
13
+ private clamp;
14
+ private onChangeCallback;
15
+ constructor(props: RangedNumberProperties, onChangeCallback: () => void);
16
+ }
17
+ //# sourceMappingURL=RangedNumber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangedNumber.d.ts","sourceRoot":"","sources":["../../../src/Entities/RangedNumber.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,YAAY;IACvB,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,OAAO,CAAC,IAAI,CAAS;IACrB,IAAI,GAAG,IAAI,MAAM,CAEhB;IACD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAMhB;IAEM,aAAa,CAAC,GAAG,EAAE,MAAM;IAIhC,OAAO,CAAC,KAAK;IAUb,OAAO,CAAC,gBAAgB,CAAa;gBAEzB,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,IAAI;CAOxE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RangedNumber.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangedNumber.test.d.ts","sourceRoot":"","sources":["../../../src/Entities/RangedNumber.test.ts"],"names":[],"mappings":""}
@@ -1,5 +1,3 @@
1
- export * from "./ObservableEntity";
2
- export * from "./ObserverList";
3
1
  export * from "./MemoizedAngle";
4
2
  export * from "./MemoizedBoolean";
5
3
  export * from "./MemoizedColor";
@@ -8,4 +6,7 @@ export * from "./MemoizedQuaternion";
8
6
  export * from "./MemoizedString";
9
7
  export * from "./MemoizedVector2";
10
8
  export * from "./MemoizedVector3";
9
+ export * from "./ObservableEntity";
10
+ export * from "./ObserverList";
11
+ export * from "./RangedNumber";
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Entities/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vived/core",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Core Components for VIVED Apps and Hosts",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -0,0 +1,118 @@
1
+ import { RangedNumber, RangedNumberProperties } from "./RangedNumber";
2
+
3
+ it("Stores the initial value", () => {
4
+ const props: RangedNumberProperties = {
5
+ initialValue: 5,
6
+ max: 10,
7
+ min: 1,
8
+ };
9
+
10
+ const memoizedNumber = new RangedNumber(props, jest.fn());
11
+ expect(memoizedNumber.val).toEqual(5);
12
+ });
13
+
14
+ it("Clamps the initial value", () => {
15
+ const props: RangedNumberProperties = {
16
+ initialValue: 50,
17
+ max: 10,
18
+ min: 1,
19
+ };
20
+
21
+ const memoizedNumber = new RangedNumber(props, jest.fn());
22
+ expect(memoizedNumber.val).toEqual(10);
23
+ });
24
+
25
+ it("Clamps the value", () => {
26
+ const props: RangedNumberProperties = {
27
+ initialValue: 5,
28
+ max: 10,
29
+ min: 1,
30
+ };
31
+
32
+ const memoizedNumber = new RangedNumber(props, jest.fn());
33
+
34
+ expect(memoizedNumber.val).toEqual(5);
35
+
36
+ memoizedNumber.val = 11;
37
+ expect(memoizedNumber.val).toEqual(10);
38
+
39
+ memoizedNumber.val = 0;
40
+ expect(memoizedNumber.val).toEqual(1);
41
+ });
42
+
43
+ it("Triggers the callback when something changes", () => {
44
+ const cb = jest.fn();
45
+
46
+ const props: RangedNumberProperties = {
47
+ initialValue: 5,
48
+ max: 10,
49
+ min: 1,
50
+ };
51
+ const memoizedNumber = new RangedNumber(props, cb);
52
+
53
+ expect(cb).not.toBeCalled();
54
+
55
+ memoizedNumber.val = 6;
56
+
57
+ expect(cb).toBeCalled();
58
+ });
59
+
60
+ it("Only triggers the CB when something changes", () => {
61
+ const cb = jest.fn();
62
+ const props: RangedNumberProperties = {
63
+ initialValue: 5,
64
+ max: 10,
65
+ min: 1,
66
+ };
67
+ const memoizedNumber = new RangedNumber(props, cb);
68
+
69
+ memoizedNumber.val = 5;
70
+ memoizedNumber.val = 5;
71
+ memoizedNumber.val = 5;
72
+
73
+ expect(cb).not.toBeCalled();
74
+ });
75
+
76
+ it("Checks the clamped value before triggering", () => {
77
+ const cb = jest.fn();
78
+ const props: RangedNumberProperties = {
79
+ initialValue: 10,
80
+ max: 10,
81
+ min: 1,
82
+ };
83
+ const memoizedNumber = new RangedNumber(props, cb);
84
+
85
+ memoizedNumber.val = 11;
86
+ memoizedNumber.val = 12;
87
+ memoizedNumber.val = 13;
88
+
89
+ expect(cb).not.toBeCalled();
90
+ });
91
+
92
+ it("Does not notify if set quietly", () => {
93
+ const cb = jest.fn();
94
+ const props: RangedNumberProperties = {
95
+ initialValue: 5,
96
+ max: 10,
97
+ min: 1,
98
+ };
99
+ const memoizedNumber = new RangedNumber(props, cb);
100
+
101
+ memoizedNumber.setValQuietly(6);
102
+
103
+ expect(memoizedNumber.val).toEqual(6);
104
+ expect(cb).not.toBeCalled();
105
+ });
106
+
107
+ it("Setting quietly is clamped", () => {
108
+ const cb = jest.fn();
109
+ const props: RangedNumberProperties = {
110
+ initialValue: 5,
111
+ max: 10,
112
+ min: 1,
113
+ };
114
+ const memoizedNumber = new RangedNumber(props, cb);
115
+
116
+ memoizedNumber.setValQuietly(-1);
117
+ expect(memoizedNumber.val).toEqual(1);
118
+ });
@@ -0,0 +1,45 @@
1
+ export interface RangedNumberProperties {
2
+ min: number;
3
+ max: number;
4
+ initialValue: number;
5
+ }
6
+
7
+ export class RangedNumber {
8
+ public readonly maxValue: number;
9
+ public readonly minValue: number;
10
+ private _val: number;
11
+ get val(): number {
12
+ return this._val;
13
+ }
14
+ set val(x: number) {
15
+ const y = this.clamp(x);
16
+ if (this._val === y) return;
17
+
18
+ this._val = y;
19
+ this.onChangeCallback();
20
+ }
21
+
22
+ public setValQuietly(val: number) {
23
+ this._val = this.clamp(val);
24
+ }
25
+
26
+ private clamp(x: number): number {
27
+ let rVal = x;
28
+ if (x > this.maxValue) {
29
+ rVal = this.maxValue;
30
+ } else if (x < this.minValue) {
31
+ rVal = this.minValue;
32
+ }
33
+
34
+ return rVal;
35
+ }
36
+ private onChangeCallback: () => void;
37
+
38
+ constructor(props: RangedNumberProperties, onChangeCallback: () => void) {
39
+ this.maxValue = props.max;
40
+ this.minValue = props.min;
41
+
42
+ this._val = this.clamp(props.initialValue);
43
+ this.onChangeCallback = onChangeCallback;
44
+ }
45
+ }
@@ -1,5 +1,3 @@
1
- export * from "./ObservableEntity";
2
- export * from "./ObserverList";
3
1
  export * from "./MemoizedAngle";
4
2
  export * from "./MemoizedBoolean";
5
3
  export * from "./MemoizedColor";
@@ -8,3 +6,6 @@ export * from "./MemoizedQuaternion";
8
6
  export * from "./MemoizedString";
9
7
  export * from "./MemoizedVector2";
10
8
  export * from "./MemoizedVector3";
9
+ export * from "./ObservableEntity";
10
+ export * from "./ObserverList";
11
+ export * from "./RangedNumber";