toosoon-utils 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/README.md +651 -144
- package/lib/classes/_pool.d.ts +56 -0
- package/lib/classes/_pool.js +92 -0
- package/lib/classes/color-scale.d.ts +52 -0
- package/lib/classes/color-scale.js +160 -0
- package/lib/classes/frame-rate.d.ts +25 -0
- package/lib/classes/frame-rate.js +48 -0
- package/lib/colors.d.ts +9 -1
- package/lib/colors.js +59 -64
- package/lib/constants.d.ts +155 -155
- package/lib/constants.js +161 -164
- package/lib/dom.d.ts +2 -2
- package/lib/dom.js +5 -11
- package/lib/files.d.ts +1 -1
- package/lib/files.js +3 -8
- package/lib/functions.d.ts +6 -2
- package/lib/functions.js +30 -10
- package/lib/geometry.d.ts +2 -2
- package/lib/geometry.js +15 -27
- package/lib/maths.d.ts +11 -9
- package/lib/maths.js +32 -51
- package/lib/random.d.ts +24 -24
- package/lib/random.js +36 -53
- package/lib/strings.js +2 -7
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/types.d.ts +8 -5
- package/lib/types.js +1 -2
- package/package.json +4 -3
- package/src/classes/_pool.ts +92 -0
- package/src/classes/color-scale.ts +181 -0
- package/src/classes/frame-rate.ts +49 -0
- package/src/colors.ts +32 -19
- package/src/constants.ts +155 -155
- package/src/dom.ts +3 -3
- package/src/files.ts +1 -1
- package/src/functions.ts +27 -2
- package/src/geometry.ts +2 -2
- package/src/maths.ts +23 -12
- package/src/random.ts +24 -24
- package/src/types.ts +18 -9
- package/tsconfig.json +2 -1
- package/src/now.ts +0 -26
package/src/constants.ts
CHANGED
|
@@ -14,159 +14,159 @@ export const QUARTER_PI = Math.PI / 4;
|
|
|
14
14
|
// X11 colors
|
|
15
15
|
// -> https://www.w3.org/TR/css-color-3/#svg-color
|
|
16
16
|
export const W3CX11 = {
|
|
17
|
-
aliceblue:
|
|
18
|
-
antiquewhite:
|
|
19
|
-
aqua:
|
|
20
|
-
aquamarine:
|
|
21
|
-
azure:
|
|
22
|
-
beige:
|
|
23
|
-
bisque:
|
|
24
|
-
black:
|
|
25
|
-
blanchedalmond:
|
|
26
|
-
blue:
|
|
27
|
-
blueviolet:
|
|
28
|
-
brown:
|
|
29
|
-
burlywood:
|
|
30
|
-
cadetblue:
|
|
31
|
-
chartreuse:
|
|
32
|
-
chocolate:
|
|
33
|
-
coral:
|
|
34
|
-
cornflower:
|
|
35
|
-
cornflowerblue:
|
|
36
|
-
cornsilk:
|
|
37
|
-
crimson:
|
|
38
|
-
cyan:
|
|
39
|
-
darkblue:
|
|
40
|
-
darkcyan:
|
|
41
|
-
darkgoldenrod:
|
|
42
|
-
darkgray:
|
|
43
|
-
darkgreen:
|
|
44
|
-
darkgrey:
|
|
45
|
-
darkkhaki:
|
|
46
|
-
darkmagenta:
|
|
47
|
-
darkolivegreen:
|
|
48
|
-
darkorange:
|
|
49
|
-
darkorchid:
|
|
50
|
-
darkred:
|
|
51
|
-
darksalmon:
|
|
52
|
-
darkseagreen:
|
|
53
|
-
darkslateblue:
|
|
54
|
-
darkslategray:
|
|
55
|
-
darkslategrey:
|
|
56
|
-
darkturquoise:
|
|
57
|
-
darkviolet:
|
|
58
|
-
deeppink:
|
|
59
|
-
deepskyblue:
|
|
60
|
-
dimgray:
|
|
61
|
-
dimgrey:
|
|
62
|
-
dodgerblue:
|
|
63
|
-
firebrick:
|
|
64
|
-
floralwhite:
|
|
65
|
-
forestgreen:
|
|
66
|
-
fuchsia:
|
|
67
|
-
gainsboro:
|
|
68
|
-
ghostwhite:
|
|
69
|
-
gold:
|
|
70
|
-
goldenrod:
|
|
71
|
-
gray:
|
|
72
|
-
green:
|
|
73
|
-
greenyellow:
|
|
74
|
-
grey:
|
|
75
|
-
honeydew:
|
|
76
|
-
hotpink:
|
|
77
|
-
indianred:
|
|
78
|
-
indigo:
|
|
79
|
-
ivory:
|
|
80
|
-
khaki:
|
|
81
|
-
laserlemon:
|
|
82
|
-
lavender:
|
|
83
|
-
lavenderblush:
|
|
84
|
-
lawngreen:
|
|
85
|
-
lemonchiffon:
|
|
86
|
-
lightblue:
|
|
87
|
-
lightcoral:
|
|
88
|
-
lightcyan:
|
|
89
|
-
lightgoldenrod:
|
|
90
|
-
lightgoldenrodyellow:
|
|
91
|
-
lightgray:
|
|
92
|
-
lightgreen:
|
|
93
|
-
lightgrey:
|
|
94
|
-
lightpink:
|
|
95
|
-
lightsalmon:
|
|
96
|
-
lightseagreen:
|
|
97
|
-
lightskyblue:
|
|
98
|
-
lightslategray:
|
|
99
|
-
lightslategrey:
|
|
100
|
-
lightsteelblue:
|
|
101
|
-
lightyellow:
|
|
102
|
-
lime:
|
|
103
|
-
limegreen:
|
|
104
|
-
linen:
|
|
105
|
-
magenta:
|
|
106
|
-
maroon:
|
|
107
|
-
maroon2:
|
|
108
|
-
maroon3:
|
|
109
|
-
mediumaquamarine:
|
|
110
|
-
mediumblue:
|
|
111
|
-
mediumorchid:
|
|
112
|
-
mediumpurple:
|
|
113
|
-
mediumseagreen:
|
|
114
|
-
mediumslateblue:
|
|
115
|
-
mediumspringgreen:
|
|
116
|
-
mediumturquoise:
|
|
117
|
-
mediumvioletred:
|
|
118
|
-
midnightblue:
|
|
119
|
-
mintcream:
|
|
120
|
-
mistyrose:
|
|
121
|
-
moccasin:
|
|
122
|
-
navajowhite:
|
|
123
|
-
navy:
|
|
124
|
-
oldlace:
|
|
125
|
-
olive:
|
|
126
|
-
olivedrab:
|
|
127
|
-
orange:
|
|
128
|
-
orangered:
|
|
129
|
-
orchid:
|
|
130
|
-
palegoldenrod:
|
|
131
|
-
palegreen:
|
|
132
|
-
paleturquoise:
|
|
133
|
-
palevioletred:
|
|
134
|
-
papayawhip:
|
|
135
|
-
peachpuff:
|
|
136
|
-
peru:
|
|
137
|
-
pink:
|
|
138
|
-
plum:
|
|
139
|
-
powderblue:
|
|
140
|
-
purple:
|
|
141
|
-
purple2:
|
|
142
|
-
purple3:
|
|
143
|
-
rebeccapurple:
|
|
144
|
-
red:
|
|
145
|
-
rosybrown:
|
|
146
|
-
royalblue:
|
|
147
|
-
saddlebrown:
|
|
148
|
-
salmon:
|
|
149
|
-
sandybrown:
|
|
150
|
-
seagreen:
|
|
151
|
-
seashell:
|
|
152
|
-
sienna:
|
|
153
|
-
silver:
|
|
154
|
-
skyblue:
|
|
155
|
-
slateblue:
|
|
156
|
-
slategray:
|
|
157
|
-
slategrey:
|
|
158
|
-
snow:
|
|
159
|
-
springgreen:
|
|
160
|
-
steelblue:
|
|
161
|
-
tan:
|
|
162
|
-
teal:
|
|
163
|
-
thistle:
|
|
164
|
-
tomato:
|
|
165
|
-
turquoise:
|
|
166
|
-
violet:
|
|
167
|
-
wheat:
|
|
168
|
-
white:
|
|
169
|
-
whitesmoke:
|
|
170
|
-
yellow:
|
|
171
|
-
yellowgreen:
|
|
17
|
+
aliceblue: 0xf0f8ff,
|
|
18
|
+
antiquewhite: 0xfaebd7,
|
|
19
|
+
aqua: 0x00ffff,
|
|
20
|
+
aquamarine: 0x7fffd4,
|
|
21
|
+
azure: 0xf0ffff,
|
|
22
|
+
beige: 0xf5f5dc,
|
|
23
|
+
bisque: 0xffe4c4,
|
|
24
|
+
black: 0x000000,
|
|
25
|
+
blanchedalmond: 0xffebcd,
|
|
26
|
+
blue: 0x0000ff,
|
|
27
|
+
blueviolet: 0x8a2be2,
|
|
28
|
+
brown: 0xa52a2a,
|
|
29
|
+
burlywood: 0xdeb887,
|
|
30
|
+
cadetblue: 0x5f9ea0,
|
|
31
|
+
chartreuse: 0x7fff00,
|
|
32
|
+
chocolate: 0xd2691e,
|
|
33
|
+
coral: 0xff7f50,
|
|
34
|
+
cornflower: 0x6495ed,
|
|
35
|
+
cornflowerblue: 0x6495ed,
|
|
36
|
+
cornsilk: 0xfff8dc,
|
|
37
|
+
crimson: 0xdc143c,
|
|
38
|
+
cyan: 0x00ffff,
|
|
39
|
+
darkblue: 0x00008b,
|
|
40
|
+
darkcyan: 0x008b8b,
|
|
41
|
+
darkgoldenrod: 0xb8860b,
|
|
42
|
+
darkgray: 0xa9a9a9,
|
|
43
|
+
darkgreen: 0x006400,
|
|
44
|
+
darkgrey: 0xa9a9a9,
|
|
45
|
+
darkkhaki: 0xbdb76b,
|
|
46
|
+
darkmagenta: 0x8b008b,
|
|
47
|
+
darkolivegreen: 0x556b2f,
|
|
48
|
+
darkorange: 0xff8c00,
|
|
49
|
+
darkorchid: 0x9932cc,
|
|
50
|
+
darkred: 0x8b0000,
|
|
51
|
+
darksalmon: 0xe9967a,
|
|
52
|
+
darkseagreen: 0x8fbc8f,
|
|
53
|
+
darkslateblue: 0x483d8b,
|
|
54
|
+
darkslategray: 0x2f4f4f,
|
|
55
|
+
darkslategrey: 0x2f4f4f,
|
|
56
|
+
darkturquoise: 0x00ced1,
|
|
57
|
+
darkviolet: 0x9400d3,
|
|
58
|
+
deeppink: 0xff1493,
|
|
59
|
+
deepskyblue: 0x00bfff,
|
|
60
|
+
dimgray: 0x696969,
|
|
61
|
+
dimgrey: 0x696969,
|
|
62
|
+
dodgerblue: 0x1e90ff,
|
|
63
|
+
firebrick: 0xb22222,
|
|
64
|
+
floralwhite: 0xfffaf0,
|
|
65
|
+
forestgreen: 0x228b22,
|
|
66
|
+
fuchsia: 0xff00ff,
|
|
67
|
+
gainsboro: 0xdcdcdc,
|
|
68
|
+
ghostwhite: 0xf8f8ff,
|
|
69
|
+
gold: 0xffd700,
|
|
70
|
+
goldenrod: 0xdaa520,
|
|
71
|
+
gray: 0x808080,
|
|
72
|
+
green: 0x008000,
|
|
73
|
+
greenyellow: 0xadff2f,
|
|
74
|
+
grey: 0x808080,
|
|
75
|
+
honeydew: 0xf0fff0,
|
|
76
|
+
hotpink: 0xff69b4,
|
|
77
|
+
indianred: 0xcd5c5c,
|
|
78
|
+
indigo: 0x4b0082,
|
|
79
|
+
ivory: 0xfffff0,
|
|
80
|
+
khaki: 0xf0e68c,
|
|
81
|
+
laserlemon: 0xffff54,
|
|
82
|
+
lavender: 0xe6e6fa,
|
|
83
|
+
lavenderblush: 0xfff0f5,
|
|
84
|
+
lawngreen: 0x7cfc00,
|
|
85
|
+
lemonchiffon: 0xfffacd,
|
|
86
|
+
lightblue: 0xadd8e6,
|
|
87
|
+
lightcoral: 0xf08080,
|
|
88
|
+
lightcyan: 0xe0ffff,
|
|
89
|
+
lightgoldenrod: 0xfafad2,
|
|
90
|
+
lightgoldenrodyellow: 0xfafad2,
|
|
91
|
+
lightgray: 0xd3d3d3,
|
|
92
|
+
lightgreen: 0x90ee90,
|
|
93
|
+
lightgrey: 0xd3d3d3,
|
|
94
|
+
lightpink: 0xffb6c1,
|
|
95
|
+
lightsalmon: 0xffa07a,
|
|
96
|
+
lightseagreen: 0x20b2aa,
|
|
97
|
+
lightskyblue: 0x87cefa,
|
|
98
|
+
lightslategray: 0x778899,
|
|
99
|
+
lightslategrey: 0x778899,
|
|
100
|
+
lightsteelblue: 0xb0c4de,
|
|
101
|
+
lightyellow: 0xffffe0,
|
|
102
|
+
lime: 0x00ff00,
|
|
103
|
+
limegreen: 0x32cd32,
|
|
104
|
+
linen: 0xfaf0e6,
|
|
105
|
+
magenta: 0xff00ff,
|
|
106
|
+
maroon: 0x800000,
|
|
107
|
+
maroon2: 0x7f0000,
|
|
108
|
+
maroon3: 0xb03060,
|
|
109
|
+
mediumaquamarine: 0x66cdaa,
|
|
110
|
+
mediumblue: 0x0000cd,
|
|
111
|
+
mediumorchid: 0xba55d3,
|
|
112
|
+
mediumpurple: 0x9370db,
|
|
113
|
+
mediumseagreen: 0x3cb371,
|
|
114
|
+
mediumslateblue: 0x7b68ee,
|
|
115
|
+
mediumspringgreen: 0x00fa9a,
|
|
116
|
+
mediumturquoise: 0x48d1cc,
|
|
117
|
+
mediumvioletred: 0xc71585,
|
|
118
|
+
midnightblue: 0x191970,
|
|
119
|
+
mintcream: 0xf5fffa,
|
|
120
|
+
mistyrose: 0xffe4e1,
|
|
121
|
+
moccasin: 0xffe4b5,
|
|
122
|
+
navajowhite: 0xffdead,
|
|
123
|
+
navy: 0x000080,
|
|
124
|
+
oldlace: 0xfdf5e6,
|
|
125
|
+
olive: 0x808000,
|
|
126
|
+
olivedrab: 0x6b8e23,
|
|
127
|
+
orange: 0xffa500,
|
|
128
|
+
orangered: 0xff4500,
|
|
129
|
+
orchid: 0xda70d6,
|
|
130
|
+
palegoldenrod: 0xeee8aa,
|
|
131
|
+
palegreen: 0x98fb98,
|
|
132
|
+
paleturquoise: 0xafeeee,
|
|
133
|
+
palevioletred: 0xdb7093,
|
|
134
|
+
papayawhip: 0xffefd5,
|
|
135
|
+
peachpuff: 0xffdab9,
|
|
136
|
+
peru: 0xcd853f,
|
|
137
|
+
pink: 0xffc0cb,
|
|
138
|
+
plum: 0xdda0dd,
|
|
139
|
+
powderblue: 0xb0e0e6,
|
|
140
|
+
purple: 0x800080,
|
|
141
|
+
purple2: 0x7f007f,
|
|
142
|
+
purple3: 0xa020f0,
|
|
143
|
+
rebeccapurple: 0x663399,
|
|
144
|
+
red: 0xff0000,
|
|
145
|
+
rosybrown: 0xbc8f8f,
|
|
146
|
+
royalblue: 0x4169e1,
|
|
147
|
+
saddlebrown: 0x8b4513,
|
|
148
|
+
salmon: 0xfa8072,
|
|
149
|
+
sandybrown: 0xf4a460,
|
|
150
|
+
seagreen: 0x2e8b57,
|
|
151
|
+
seashell: 0xfff5ee,
|
|
152
|
+
sienna: 0xa0522d,
|
|
153
|
+
silver: 0xc0c0c0,
|
|
154
|
+
skyblue: 0x87ceeb,
|
|
155
|
+
slateblue: 0x6a5acd,
|
|
156
|
+
slategray: 0x708090,
|
|
157
|
+
slategrey: 0x708090,
|
|
158
|
+
snow: 0xfffafa,
|
|
159
|
+
springgreen: 0x00ff7f,
|
|
160
|
+
steelblue: 0x4682b4,
|
|
161
|
+
tan: 0xd2b48c,
|
|
162
|
+
teal: 0x008080,
|
|
163
|
+
thistle: 0xd8bfd8,
|
|
164
|
+
tomato: 0xff6347,
|
|
165
|
+
turquoise: 0x40e0d0,
|
|
166
|
+
violet: 0xee82ee,
|
|
167
|
+
wheat: 0xf5deb3,
|
|
168
|
+
white: 0xffffff,
|
|
169
|
+
whitesmoke: 0xf5f5f5,
|
|
170
|
+
yellow: 0xffff00,
|
|
171
|
+
yellowgreen: 0x9acd32
|
|
172
172
|
};
|
package/src/dom.ts
CHANGED
|
@@ -39,11 +39,11 @@ export function createCanvas(
|
|
|
39
39
|
/**
|
|
40
40
|
* Inject CSS styles in `document.head`
|
|
41
41
|
*
|
|
42
|
-
* @param {string}
|
|
42
|
+
* @param {string} styles CSS styles to inject
|
|
43
43
|
*/
|
|
44
|
-
export function injectStyles(
|
|
44
|
+
export function injectStyles(styles: string): void {
|
|
45
45
|
const $style = document.createElement('style');
|
|
46
|
-
$style.innerHTML =
|
|
46
|
+
$style.innerHTML = styles;
|
|
47
47
|
const $before = document.querySelector('head link[rel=stylesheet], head style');
|
|
48
48
|
if ($before) document.head.insertBefore($style, $before);
|
|
49
49
|
else document.head.appendChild($style);
|
package/src/files.ts
CHANGED
|
@@ -20,7 +20,7 @@ export function download(blob: Blob, filename: string): void {
|
|
|
20
20
|
* Upload a file from user files
|
|
21
21
|
*
|
|
22
22
|
* @param {Function} onLoad Callback called once the file is loaded
|
|
23
|
-
* @param {string} [accept='']
|
|
23
|
+
* @param {string} [accept=''] MIME type the file input should accept
|
|
24
24
|
*/
|
|
25
25
|
export function upload(onLoad: (dataUrl: string) => void, accept: string = ''): void {
|
|
26
26
|
const input = document.createElement('input');
|
package/src/functions.ts
CHANGED
|
@@ -8,10 +8,10 @@ export const noop: () => void = () => {};
|
|
|
8
8
|
/**
|
|
9
9
|
* Promise wrapped setTimeout
|
|
10
10
|
*
|
|
11
|
-
* @param {number} timeout Time in
|
|
11
|
+
* @param {number} [timeout=0] Time to wait (in milliseconds)
|
|
12
12
|
* @returns {Promise}
|
|
13
13
|
*/
|
|
14
|
-
export function wait(timeout: number): Promise<void> {
|
|
14
|
+
export function wait(timeout: number = 0): Promise<void> {
|
|
15
15
|
return new Promise((resolve) => setTimeout(resolve, timeout));
|
|
16
16
|
}
|
|
17
17
|
|
|
@@ -29,3 +29,28 @@ export function defer<T = void>(): Deferred<T> {
|
|
|
29
29
|
});
|
|
30
30
|
return { promise, resolve, reject };
|
|
31
31
|
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Polyfill for `now()` functions
|
|
35
|
+
*/
|
|
36
|
+
export let now: () => number;
|
|
37
|
+
|
|
38
|
+
// In node.js, use `process.hrtime`
|
|
39
|
+
if (typeof process !== 'undefined' && process.hrtime) {
|
|
40
|
+
now = function () {
|
|
41
|
+
// Convert [seconds, nanoseconds] to milliseconds
|
|
42
|
+
const time = process.hrtime();
|
|
43
|
+
return time[0] * 1000 + time[1] / 1000000;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// In a browser use `performance` or `Date`
|
|
47
|
+
else if (typeof performance !== 'undefined') {
|
|
48
|
+
// This must be bound, because directly assigning this function leads to an invocation exception in Chrome
|
|
49
|
+
now = performance.now.bind(performance);
|
|
50
|
+
} else if (typeof Date.now !== 'undefined') {
|
|
51
|
+
now = Date.now;
|
|
52
|
+
} else {
|
|
53
|
+
now = function () {
|
|
54
|
+
return new Date().getTime();
|
|
55
|
+
};
|
|
56
|
+
}
|
package/src/geometry.ts
CHANGED
|
@@ -76,8 +76,8 @@ export function diagonal(width: number, height: number): number {
|
|
|
76
76
|
* Convert radians to a 3D point on the surface of a unit sphere
|
|
77
77
|
*
|
|
78
78
|
* @param {number} radius Radius of the sphere
|
|
79
|
-
* @param {number} phi Polar angle from the y (up) axis : 0
|
|
80
|
-
* @param {number} theta Equator angle around the y (up) axis : 0
|
|
79
|
+
* @param {number} phi Polar angle from the y (up) axis : [0, PI]
|
|
80
|
+
* @param {number} theta Equator angle around the y (up) axis : [0, 2*PI]
|
|
81
81
|
* @param {Vector3} target Target vector
|
|
82
82
|
* @returns {Vector3}
|
|
83
83
|
*/
|
package/src/maths.ts
CHANGED
|
@@ -42,12 +42,12 @@ export function toPowerOf2(value: number, mode: 'floor' | 'ceil' | 'round' = 'ce
|
|
|
42
42
|
/**
|
|
43
43
|
* Return the sign (positive or negative) of a number
|
|
44
44
|
*
|
|
45
|
-
* @param {number}
|
|
45
|
+
* @param {number} value Value to check
|
|
46
46
|
* @returns {number} 1 if the given number is positive, -1 if it is negative, otherwise 0
|
|
47
47
|
*/
|
|
48
|
-
export function sign(
|
|
49
|
-
if (
|
|
50
|
-
else if (
|
|
48
|
+
export function sign(value: number): number {
|
|
49
|
+
if (value > 0) return 1;
|
|
50
|
+
else if (value < 0) return -1;
|
|
51
51
|
return 0;
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -92,13 +92,24 @@ export function triLerp(value: number, min: number, max: number, target: number)
|
|
|
92
92
|
/**
|
|
93
93
|
* Exponential interpolation between two values
|
|
94
94
|
*
|
|
95
|
-
* @param {number} value
|
|
96
|
-
* @param {number}
|
|
97
|
-
* @param {number}
|
|
95
|
+
* @param {number} value Value to interpolate
|
|
96
|
+
* @param {number} currentMin Lower bound of the value's current range
|
|
97
|
+
* @param {number} currentMax Upper bound of the value's current range
|
|
98
|
+
* @param {number} targetMin Lower bound of the value's target range
|
|
99
|
+
* @param {number} targetMax Upper bound of the value's target range
|
|
98
100
|
* @returns {number} Interpolated value
|
|
99
101
|
*/
|
|
100
|
-
export function expLerp(
|
|
101
|
-
|
|
102
|
+
export function expLerp(
|
|
103
|
+
value: number,
|
|
104
|
+
currentMin: number,
|
|
105
|
+
currentMax: number,
|
|
106
|
+
targetMin: number,
|
|
107
|
+
targetMax: number
|
|
108
|
+
): number {
|
|
109
|
+
return (
|
|
110
|
+
targetMin *
|
|
111
|
+
Math.pow(targetMax / targetMin, (clamp(value, currentMin, currentMax) - currentMin) / (currentMax - currentMin))
|
|
112
|
+
);
|
|
102
113
|
}
|
|
103
114
|
|
|
104
115
|
/**
|
|
@@ -137,7 +148,7 @@ export function map(
|
|
|
137
148
|
* Round a number up to a nearest multiple
|
|
138
149
|
*
|
|
139
150
|
* @param {number} value Value to round
|
|
140
|
-
* @param {number} [multiple=1] Multiple
|
|
151
|
+
* @param {number} [multiple=1] Multiple to round to
|
|
141
152
|
* @returns {number} Closest multiple
|
|
142
153
|
*/
|
|
143
154
|
export function roundTo(value: number, multiple: number = 1): number {
|
|
@@ -199,7 +210,7 @@ export function parabola(x: number, power: number = 1): number {
|
|
|
199
210
|
/**
|
|
200
211
|
* Return the sum of numbers
|
|
201
212
|
*
|
|
202
|
-
* @param {number[]} array Array of
|
|
213
|
+
* @param {number[]} array Array of numbers
|
|
203
214
|
* @returns {number} Total sum
|
|
204
215
|
*/
|
|
205
216
|
export function sum(array: number[]): number {
|
|
@@ -209,7 +220,7 @@ export function sum(array: number[]): number {
|
|
|
209
220
|
/**
|
|
210
221
|
* Return the average of numbers
|
|
211
222
|
*
|
|
212
|
-
* @param {number[]} array Array of
|
|
223
|
+
* @param {number[]} array Array of numbers
|
|
213
224
|
* @returns {number} Total average
|
|
214
225
|
*/
|
|
215
226
|
export function average(array: number[]): number {
|
package/src/random.ts
CHANGED
|
@@ -2,10 +2,10 @@ import { radToSphere } from './geometry';
|
|
|
2
2
|
import { Vector2, Vector3 } from './types';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* Generate a random boolean (true or false)
|
|
5
|
+
* Generate a random boolean (`true` or `false`)
|
|
6
6
|
*
|
|
7
|
-
* @param {number} [probability=0.5] Probability to get true
|
|
8
|
-
* @returns {boolean} Either true or false
|
|
7
|
+
* @param {number} [probability=0.5] Probability to get `true`
|
|
8
|
+
* @returns {boolean} Either `true` or `false`
|
|
9
9
|
*/
|
|
10
10
|
export function randomBoolean(probability: number = 0.5): boolean {
|
|
11
11
|
return Math.random() < probability;
|
|
@@ -22,11 +22,11 @@ export function randomSign(probability: number = 0.5): number {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
* Generate a random
|
|
25
|
+
* Generate a random floating-point number within a specified range
|
|
26
26
|
*
|
|
27
|
-
* @param
|
|
28
|
-
* @param
|
|
29
|
-
* @param
|
|
27
|
+
* @param {number} [min=0] Minimum boundary
|
|
28
|
+
* @param {number} [max=1] Maximum boundary
|
|
29
|
+
* @param {number} [precision=2] Number of digits after the decimal point
|
|
30
30
|
* @returns {number} Generated float
|
|
31
31
|
*/
|
|
32
32
|
export function randomFloat(min: number = 0, max: number = 1, precision: number = 2): number {
|
|
@@ -34,7 +34,7 @@ export function randomFloat(min: number = 0, max: number = 1, precision: number
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
|
-
* Generate a random integer number
|
|
37
|
+
* Generate a random integer number within a specified range
|
|
38
38
|
*
|
|
39
39
|
* @param {number} min Minimum boundary
|
|
40
40
|
* @param {number} max Maximum boundary
|
|
@@ -47,28 +47,28 @@ export function randomInt(min: number, max: number): number {
|
|
|
47
47
|
/**
|
|
48
48
|
* Generate a random hexadecimal color
|
|
49
49
|
*
|
|
50
|
-
* @returns {string}
|
|
50
|
+
* @returns {string} Generated hexadecimal color
|
|
51
51
|
*/
|
|
52
52
|
export function randomHexColor(): string {
|
|
53
53
|
return '#' + ('00000' + ((Math.random() * (1 << 24)) | 0).toString(16)).slice(-6);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
|
-
* Pick a random item from
|
|
57
|
+
* Pick a random item from a given array
|
|
58
58
|
*
|
|
59
|
-
* @param {T[]}
|
|
59
|
+
* @param {T[]} array Array to pick the item from
|
|
60
60
|
* @returns {T|undefined} Random item picked
|
|
61
61
|
*/
|
|
62
|
-
export function randomItem<T = unknown>(array: T[]
|
|
62
|
+
export function randomItem<T = unknown>(array: T[]): T | undefined {
|
|
63
63
|
if (array.length === 0) return undefined;
|
|
64
64
|
return array[randomInt(0, array.length - 1)];
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
|
-
* Pick a random property from
|
|
68
|
+
* Pick a random property value from a given object
|
|
69
69
|
*
|
|
70
70
|
* @param {object} object Object to pick the property from
|
|
71
|
-
* @returns {
|
|
71
|
+
* @returns {T|undefined} Random item picked
|
|
72
72
|
*/
|
|
73
73
|
export function randomObjectProperty<T = unknown>(object: { [key: string]: T }): T | undefined {
|
|
74
74
|
const keys = Object.keys(object);
|
|
@@ -79,12 +79,12 @@ export function randomObjectProperty<T = unknown>(object: { [key: string]: T }):
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
/**
|
|
82
|
-
*
|
|
82
|
+
* Select a random index from an array of weighted items
|
|
83
83
|
*
|
|
84
84
|
* @param {number[]} weights Array of weights
|
|
85
85
|
* @returns {number} Random index based on weights
|
|
86
86
|
*/
|
|
87
|
-
export function randomIndex(weights: number[]
|
|
87
|
+
export function randomIndex(weights: number[]): number {
|
|
88
88
|
if (weights.length === 0) return -1;
|
|
89
89
|
|
|
90
90
|
let totalWeight = 0;
|
|
@@ -111,8 +111,8 @@ export function randomIndex(weights: number[] = []): number {
|
|
|
111
111
|
/**
|
|
112
112
|
* Produce a random 2D point around the perimiter of a unit circle
|
|
113
113
|
*
|
|
114
|
-
* @param {number} [radius=1]
|
|
115
|
-
* @param {Vector2} target
|
|
114
|
+
* @param {number} [radius=1] Radius of the circle
|
|
115
|
+
* @param {Vector2} [target] Target vector
|
|
116
116
|
* @returns {Vector2} Random 2D point on circle
|
|
117
117
|
*/
|
|
118
118
|
export function onCircle(radius: number = 1, target: Vector2 = { x: 0, y: 0 }): Vector2 {
|
|
@@ -125,8 +125,8 @@ export function onCircle(radius: number = 1, target: Vector2 = { x: 0, y: 0 }):
|
|
|
125
125
|
/**
|
|
126
126
|
* Produce a random 2D point inside a unit circle
|
|
127
127
|
*
|
|
128
|
-
* @param {number} [radius=1]
|
|
129
|
-
* @param {Vector2} target
|
|
128
|
+
* @param {number} [radius=1] Radius of the circle
|
|
129
|
+
* @param {Vector2} [target] Target vector
|
|
130
130
|
* @returns {Vector2} Random 2D point inside circle
|
|
131
131
|
*/
|
|
132
132
|
export function insideCircle(radius: number = 1, target: Vector2 = { x: 0, y: 0 }): Vector2 {
|
|
@@ -137,8 +137,8 @@ export function insideCircle(radius: number = 1, target: Vector2 = { x: 0, y: 0
|
|
|
137
137
|
/**
|
|
138
138
|
* Produce a random 3D point on the surface of a unit sphere
|
|
139
139
|
*
|
|
140
|
-
* @param {number} [radius=1]
|
|
141
|
-
* @param {Vector3} target
|
|
140
|
+
* @param {number} [radius=1] Radius of the sphere
|
|
141
|
+
* @param {Vector3} [target] Target vector
|
|
142
142
|
* @returns {Vector3} Random 3D point on sphere
|
|
143
143
|
*/
|
|
144
144
|
export function onSphere(radius: number = 1, target: Vector3 = { x: 0, y: 0, z: 0 }): Vector3 {
|
|
@@ -152,8 +152,8 @@ export function onSphere(radius: number = 1, target: Vector3 = { x: 0, y: 0, z:
|
|
|
152
152
|
/**
|
|
153
153
|
* Produce a random 3D point inside a unit sphere
|
|
154
154
|
*
|
|
155
|
-
* @param {number} [radius=1]
|
|
156
|
-
* @param {Vector3} target
|
|
155
|
+
* @param {number} [radius=1] Radius of the sphere
|
|
156
|
+
* @param {Vector3} [target] Target vector
|
|
157
157
|
* @returns {Vector3} Random 3D point inside sphere
|
|
158
158
|
*/
|
|
159
159
|
export function insideSphere(radius: number = 1, target: Vector3 = { x: 0, y: 0, z: 0 }): Vector3 {
|
package/src/types.ts
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
import { W3CX11 } from './constants';
|
|
2
|
+
|
|
3
|
+
// *********************
|
|
4
|
+
// Colors
|
|
5
|
+
// *********************
|
|
6
|
+
export type ColorName = keyof typeof W3CX11;
|
|
7
|
+
|
|
8
|
+
export type ColorRepresentation = ColorName | string | number | [number, number, number];
|
|
9
|
+
|
|
10
|
+
// *********************
|
|
11
|
+
// Functions
|
|
12
|
+
// *********************
|
|
13
|
+
export interface Deferred<T> {
|
|
14
|
+
promise: Promise<T>;
|
|
15
|
+
resolve: (value: T | PromiseLike<T>) => void;
|
|
16
|
+
reject: (reason?: unknown) => void;
|
|
17
|
+
}
|
|
18
|
+
|
|
1
19
|
// *********************
|
|
2
20
|
// Geometry
|
|
3
21
|
// *********************
|
|
@@ -13,12 +31,3 @@ export interface Vector3 extends Vector2 {
|
|
|
13
31
|
export interface Vector4 extends Vector3 {
|
|
14
32
|
w: number;
|
|
15
33
|
}
|
|
16
|
-
|
|
17
|
-
// *********************
|
|
18
|
-
// Functions
|
|
19
|
-
// *********************
|
|
20
|
-
export interface Deferred<T> {
|
|
21
|
-
promise: Promise<T>;
|
|
22
|
-
resolve: (value: T | PromiseLike<T>) => void;
|
|
23
|
-
reject: (reason?: unknown) => void;
|
|
24
|
-
}
|
package/tsconfig.json
CHANGED
package/src/now.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Polyfill for "now()" functions
|
|
3
|
-
*/
|
|
4
|
-
let now: () => number;
|
|
5
|
-
|
|
6
|
-
// In node.js, use process.hrtime
|
|
7
|
-
if (typeof process !== 'undefined' && process.hrtime) {
|
|
8
|
-
now = function () {
|
|
9
|
-
// Convert [seconds, nanoseconds] to milliseconds
|
|
10
|
-
const time = process.hrtime();
|
|
11
|
-
return time[0] * 1000 + time[1] / 1000000;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
// In a browser use performance or Date
|
|
15
|
-
else if (typeof performance !== 'undefined') {
|
|
16
|
-
// This must be bound, because directly assigning this function leads to an invocation exception in Chrome
|
|
17
|
-
now = performance.now.bind(performance);
|
|
18
|
-
} else if (typeof Date.now !== 'undefined') {
|
|
19
|
-
now = Date.now;
|
|
20
|
-
} else {
|
|
21
|
-
now = function () {
|
|
22
|
-
return new Date().getTime();
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export default now;
|