@fbltd/math 1.0.24 → 1.0.25

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.
@@ -1,17 +1,52 @@
1
+ import { validateType } from "../type.utils.js";
2
+ import { normalizeShade } from './utils.js';
1
3
  export class Color {
2
- red;
3
- green;
4
- blue;
5
- constructor(red, green, blue) {
6
- this.red = red;
7
- this.green = green;
8
- this.blue = blue;
9
- this.red = Math.max(Math.min(Math.round(red), 255), 0);
10
- this.green = Math.max(Math.min(Math.round(green), 255), 0);
11
- this.blue = Math.max(Math.min(Math.round(blue), 255), 0);
12
- }
13
- toCSS() {
14
- return Color.toCSS(this);
4
+ _red;
5
+ _green;
6
+ _blue;
7
+ _alpha;
8
+ constructor(_red, _green, _blue, _alpha = 255) {
9
+ this._red = _red;
10
+ this._green = _green;
11
+ this._blue = _blue;
12
+ this._alpha = _alpha;
13
+ this.red = _red;
14
+ this.green = _green;
15
+ this.blue = _blue;
16
+ this.alpha = _alpha;
17
+ }
18
+ set red(value) {
19
+ this._red = Math.max(Math.min(Math.round(value), 255), 0);
20
+ }
21
+ set green(value) {
22
+ this._green = Math.max(Math.min(Math.round(value), 255), 0);
23
+ }
24
+ set blue(value) {
25
+ this._blue = Math.max(Math.min(Math.round(value), 255), 0);
26
+ }
27
+ set alpha(value) {
28
+ this._alpha = Math.max(Math.min(Math.round(value), 255), 0);
29
+ }
30
+ get red() {
31
+ return this._red;
32
+ }
33
+ get green() {
34
+ return this._green;
35
+ }
36
+ get blue() {
37
+ return this._blue;
38
+ }
39
+ get alpha() {
40
+ return this._alpha;
41
+ }
42
+ [Symbol.toPrimitive]() {
43
+ return this.toString();
44
+ }
45
+ toString(format = 'hex') {
46
+ return Color.toString(this, format);
47
+ }
48
+ toNumber() {
49
+ return Color.toNumber(this);
15
50
  }
16
51
  isEqual(c) {
17
52
  return Color.areEquals(this, c);
@@ -19,13 +54,23 @@ export class Color {
19
54
  static ofNumber(value) {
20
55
  return new Color((value & 0xFF0000) >> 16, (value & 0xFF00) >> 8, value & 0xFF);
21
56
  }
57
+ static ofNumberAlpha(value) {
58
+ return new Color((value & 0xFF0000) >> 24, (value & 0xFF0000) >> 16, (value & 0xFF00) >> 8, value & 0xFF);
59
+ }
22
60
  static toNumber(color) {
23
61
  return (((color.red << 16) | color.green) << 16) | color.blue;
24
62
  }
25
63
  static areEquals(c1, c2) {
26
64
  return Color.toNumber(c1) === Color.toNumber(c2);
27
65
  }
28
- static toCSS(color) {
29
- return `rgb(${color.red},${color.green},${color.blue})`;
66
+ static toString(color, format = 'hex') {
67
+ switch (format) {
68
+ case "rgba":
69
+ return `rgba(${color.red},${color.green},${color.blue},${normalizeShade(color.alpha)})`;
70
+ case "hex":
71
+ return `#${color.red.toString(16)}${color.green.toString(16)}${color.blue.toString(16)}${color.alpha.toString(16)}`;
72
+ default:
73
+ validateType(format);
74
+ }
30
75
  }
31
76
  }
@@ -60,7 +60,7 @@ export class ConicGradient {
60
60
  toCanvas(ctx, center) {
61
61
  const gradient = ctx.createConicGradient(0, ...center);
62
62
  for (let color of this.colors) {
63
- gradient.addColorStop(color.angle, color.color.toCSS());
63
+ gradient.addColorStop(color.angle, color.color.toString());
64
64
  }
65
65
  return gradient;
66
66
  }
@@ -0,0 +1,7 @@
1
+ import { denormalize, normalize } from "../utils.js";
2
+ export function normalizeShade(value) {
3
+ return normalize(value, 255);
4
+ }
5
+ export function denormalizeShade(value) {
6
+ return denormalize(value, 255);
7
+ }
@@ -90,8 +90,8 @@ export class Matrix3d {
90
90
  static rotateZ(m, angle, units = AngleUnits.Deg) {
91
91
  return Matrix3d.multiply(m, Matrix3d.rotateIdentityZ(angle, units));
92
92
  }
93
- static isApproximatelyEqual(m1, m2) {
94
- return m1.every((element, index) => approximately(element, m2[index]));
93
+ static isApproximatelyEqual(m1, m2, withPrecision) {
94
+ return m1.every((element, index) => approximately(element, m2[index], withPrecision));
95
95
  }
96
96
  static isEqual(m1, m2) {
97
97
  return m1.every((element, index) => element === m2[index]);
@@ -14,3 +14,9 @@ export function isCorrectNumber(value) {
14
14
  }
15
15
  return false;
16
16
  }
17
+ export function normalize(value, top, bottom = 0) {
18
+ return (value - bottom) / (top - bottom);
19
+ }
20
+ export function denormalize(value, top, bottom = 0) {
21
+ return (top - bottom) * value + bottom;
22
+ }
@@ -1,13 +1,25 @@
1
1
  export declare class Color {
2
- red: number;
3
- green: number;
4
- blue: number;
5
- constructor(red: number, green: number, blue: number);
6
- toCSS(): string;
2
+ private _red;
3
+ private _green;
4
+ private _blue;
5
+ private _alpha;
6
+ constructor(_red: number, _green: number, _blue: number, _alpha?: number);
7
+ set red(value: number);
8
+ set green(value: number);
9
+ set blue(value: number);
10
+ set alpha(value: number);
11
+ get red(): number;
12
+ get green(): number;
13
+ get blue(): number;
14
+ get alpha(): number;
15
+ [Symbol.toPrimitive](): string;
16
+ toString(format?: Parameters<typeof Color.toString>[1]): string;
17
+ toNumber(): number;
7
18
  isEqual(c: Color): boolean;
8
19
  static ofNumber(value: number): Color;
20
+ static ofNumberAlpha(value: number): Color;
9
21
  static toNumber(color: Color): number;
10
22
  static areEquals(c1: Color, c2: Color): boolean;
11
- static toCSS(color: Color): string;
23
+ static toString(color: Color, format?: 'rgba' | 'hex'): string;
12
24
  }
13
25
  //# sourceMappingURL=color.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../../src/colors/color.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK;IACK,GAAG,EAAE,MAAM;IAAS,KAAK,EAAE,MAAM;IAAS,IAAI,EAAE,MAAM;gBAAtD,GAAG,EAAE,MAAM,EAAS,KAAK,EAAE,MAAM,EAAS,IAAI,EAAE,MAAM;IAMzE,KAAK;IAIL,OAAO,CAAC,CAAC,EAAE,KAAK;IAIhB,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAQ7B,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK;IAI5B,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK;IAIrC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK;CAI5B"}
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../../src/colors/color.ts"],"names":[],"mappings":"AAGA,qBAAa,KAAK;IACF,OAAO,CAAC,IAAI;IAAU,OAAO,CAAC,MAAM;IAAU,OAAO,CAAC,KAAK;IAAU,OAAO,CAAC,MAAM;gBAA3E,IAAI,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,EAAU,MAAM,SAAM;IAOrG,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,EAEpB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAEtB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAEtB;IAED,IAAI,GAAG,IAhBQ,MAAM,CAkBpB;IAED,IAAI,KAAK,IAhBQ,MAAM,CAkBtB;IAED,IAAI,IAAI,IAhBQ,MAAM,CAkBrB;IAED,IAAI,KAAK,IAhBQ,MAAM,CAkBtB;IAED,CAAC,MAAM,CAAC,WAAW,CAAC;IAIpB,QAAQ,CAAC,MAAM,GAAE,UAAU,CAAC,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAS;IAI7D,QAAQ;IAIR,OAAO,CAAC,CAAC,EAAE,KAAK;IAIhB,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAQ7B,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM;IASlC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK;IAI5B,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK;IAIrC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,MAAM,GAAG,KAAa;CAW/D"}
@@ -0,0 +1,3 @@
1
+ export declare function normalizeShade(value: number): number;
2
+ export declare function denormalizeShade(value: number): number;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/colors/utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,UAE3C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,UAE7C"}
@@ -21,7 +21,7 @@ export declare class Matrix3d {
21
21
  static rotateX(m: IMatrix3d, angle: number, units?: AngleUnits): [number, number, number, number, number, number, number, number, number, number, number, number];
22
22
  static rotateY(m: IMatrix3d, angle: number, units?: AngleUnits): [number, number, number, number, number, number, number, number, number, number, number, number];
23
23
  static rotateZ(m: IMatrix3d, angle: number, units?: AngleUnits): [number, number, number, number, number, number, number, number, number, number, number, number];
24
- static isApproximatelyEqual(m1: IMatrix3d, m2: IMatrix3d): boolean;
24
+ static isApproximatelyEqual(m1: IMatrix3d, m2: IMatrix3d, withPrecision?: number): boolean;
25
25
  static isEqual(m1: IMatrix3d, m2: IMatrix3d): boolean;
26
26
  }
27
27
  //# sourceMappingURL=matrix3d.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"matrix3d.d.ts","sourceRoot":"","sources":["../../../../src/matrices/matrix3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAiB,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE7F,MAAM,MAAM,SAAS,GAAG,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;AAErD,eAAO,MAAM,gBAAgB,EAAE,SAAgD,CAAC;AAGhF,qBAAa,QAAQ;IACjB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC;IAyBrE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAQxD,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,GAAG,SAAS;IAM5D,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,GAAG,SAAS;IAMxD,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,UAA2B,GAAG,SAAS;IAOnF,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,UAA2B,GAAG,SAAS;IAOnF,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,UAA2B,GAAG,SAAS;IAOnF,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,GAAG,SAAS;IAIlE,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIrD,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIrD,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIrD,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS;IAOxE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIjD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIjD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIjD,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,UAA2B;IAO9E,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,UAA2B;IAO9E,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,UAA2B;IAQ9E,MAAM,CAAC,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS;IAIxD,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS;CAG9C"}
1
+ {"version":3,"file":"matrix3d.d.ts","sourceRoot":"","sources":["../../../../src/matrices/matrix3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,UAAU,EAAiB,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE7F,MAAM,MAAM,SAAS,GAAG,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;AAErD,eAAO,MAAM,gBAAgB,EAAE,SAAgD,CAAC;AAGhF,qBAAa,QAAQ;IACjB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC;IAyBrE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO;IAQxD,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,GAAG,SAAS;IAM5D,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,GAAG,SAAS;IAMxD,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,UAA2B,GAAG,SAAS;IAOnF,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,UAA2B,GAAG,SAAS;IAOnF,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,UAA2B,GAAG,SAAS;IAOnF,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,SAAI,EAAE,CAAC,SAAI,GAAG,SAAS;IAIlE,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIrD,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIrD,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIrD,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS;IAOxE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIjD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIjD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS;IAIjD,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,UAA2B;IAO9E,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,UAA2B;IAO9E,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,UAA2B;IAQ9E,MAAM,CAAC,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM;IAIhF,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS;CAG9C"}
@@ -1,4 +1,6 @@
1
1
  export declare function approximately(theValue: number, is: number, withPrecision?: number): boolean;
2
2
  export declare function toPositive(value: number, range: number): number;
3
3
  export declare function isCorrectNumber(value: any): boolean;
4
+ export declare function normalize(value: number, top: number, bottom?: number): number;
5
+ export declare function denormalize(value: number, top: number, bottom?: number): number;
4
6
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,GAAE,MAAa,WAEvF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAGtD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,WAOzC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,GAAE,MAAa,WAEvF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAGtD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,GAAG,WAOzC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,UAE/D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAI,UAEjE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fbltd/math",
3
- "version": "1.0.24",
3
+ "version": "1.0.25",
4
4
  "description": "Math and geometry utilities",
5
5
  "sideEffects": false,
6
6
  "main": "dist/bin/index.js",