@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.
- package/dist/cjs/Entities/RangedNumber.js +36 -0
- package/dist/cjs/Entities/RangedNumber.js.map +1 -0
- package/dist/cjs/Entities/RangedNumber.test.js +96 -0
- package/dist/cjs/Entities/RangedNumber.test.js.map +1 -0
- package/dist/cjs/Entities/index.js +3 -2
- package/dist/cjs/Entities/index.js.map +1 -1
- package/dist/esm/Entities/RangedNumber.js +32 -0
- package/dist/esm/Entities/RangedNumber.js.map +1 -0
- package/dist/esm/Entities/RangedNumber.test.js +94 -0
- package/dist/esm/Entities/RangedNumber.test.js.map +1 -0
- package/dist/esm/Entities/index.js +3 -2
- package/dist/esm/Entities/index.js.map +1 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/Entities/RangedNumber.d.ts +17 -0
- package/dist/types/Entities/RangedNumber.d.ts.map +1 -0
- package/dist/types/Entities/RangedNumber.test.d.ts +2 -0
- package/dist/types/Entities/RangedNumber.test.d.ts.map +1 -0
- package/dist/types/Entities/index.d.ts +3 -2
- package/dist/types/Entities/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Entities/RangedNumber.test.ts +118 -0
- package/src/Entities/RangedNumber.ts +45 -0
- package/src/Entities/index.ts +3 -2
|
@@ -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,
|
|
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,
|
|
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 @@
|
|
|
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,
|
|
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
|
@@ -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
|
+
}
|
package/src/Entities/index.ts
CHANGED
|
@@ -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";
|