@oscarpalmer/atoms 0.193.0 → 0.194.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.
Files changed (204) hide show
  1. package/dist/array/difference.mjs +2 -2
  2. package/dist/array/intersection.mjs +2 -2
  3. package/dist/array/match.mjs +13 -13
  4. package/dist/array/slice.mjs +5 -5
  5. package/dist/array/sort.d.mts +5 -1
  6. package/dist/array/sort.mjs +4 -2
  7. package/dist/array/union.mjs +2 -2
  8. package/dist/beacon.d.mts +8 -1
  9. package/dist/beacon.mjs +52 -60
  10. package/dist/color/constants.d.mts +1 -1
  11. package/dist/color/constants.mjs +3 -5
  12. package/dist/color/instance.mjs +34 -41
  13. package/dist/color/misc/format.d.mts +3 -2
  14. package/dist/color/misc/format.mjs +4 -1
  15. package/dist/color/misc/is.d.mts +9 -1
  16. package/dist/color/misc/is.mjs +11 -1
  17. package/dist/color/misc/state.d.mts +6 -6
  18. package/dist/color/misc/state.mjs +11 -14
  19. package/dist/color/models.d.mts +23 -68
  20. package/dist/function/assert.mjs +2 -2
  21. package/dist/function/limit.d.mts +0 -6
  22. package/dist/function/limit.mjs +2 -2
  23. package/dist/function/memoize.mjs +19 -32
  24. package/dist/function/once.d.mts +0 -3
  25. package/dist/function/once.mjs +16 -13
  26. package/dist/function/retry.d.mts +1 -24
  27. package/dist/function/retry.mjs +1 -1
  28. package/dist/function/work.mjs +13 -11
  29. package/dist/herald.d.mts +30 -31
  30. package/dist/herald.mjs +74 -56
  31. package/dist/index.d.mts +100 -185
  32. package/dist/index.mjs +680 -702
  33. package/dist/internal/abort.d.mts +10 -0
  34. package/dist/internal/abort.mjs +14 -0
  35. package/dist/internal/array/chunk.mjs +2 -2
  36. package/dist/internal/array/find.mjs +2 -2
  37. package/dist/internal/array/sets.d.mts +4 -4
  38. package/dist/internal/array/sets.mjs +7 -7
  39. package/dist/internal/function/timer.mjs +19 -15
  40. package/dist/internal/number.mjs +7 -7
  41. package/dist/internal/result.mjs +3 -3
  42. package/dist/internal/sized.mjs +4 -4
  43. package/dist/internal/string.mjs +4 -4
  44. package/dist/internal/subscription.d.mts +24 -8
  45. package/dist/internal/subscription.mjs +49 -36
  46. package/dist/internal/value/equal.mjs +6 -6
  47. package/dist/internal/value/misc.mjs +14 -14
  48. package/dist/internal/value/set.mjs +2 -2
  49. package/dist/logger.mjs +15 -39
  50. package/dist/promise/constants.d.mts +17 -0
  51. package/dist/promise/constants.mjs +14 -0
  52. package/dist/promise/delay.mjs +7 -10
  53. package/dist/promise/helpers.mjs +1 -1
  54. package/dist/promise/index.mjs +14 -17
  55. package/dist/promise/misc.d.mts +2 -1
  56. package/dist/promise/misc.mjs +8 -7
  57. package/dist/promise/models.d.mts +4 -16
  58. package/dist/promise/models.mjs +4 -13
  59. package/dist/promise/timed.mjs +9 -10
  60. package/dist/query.mjs +15 -15
  61. package/dist/queue.mjs +103 -116
  62. package/dist/random.mjs +7 -7
  63. package/dist/result/index.d.mts +0 -3
  64. package/dist/result/index.mjs +1 -1
  65. package/dist/result/match.d.mts +0 -3
  66. package/dist/result/match.mjs +4 -4
  67. package/dist/result/misc.mjs +2 -2
  68. package/dist/result/work/flow.d.mts +0 -3
  69. package/dist/result/work/flow.mjs +5 -5
  70. package/dist/result/work/pipe.d.mts +0 -3
  71. package/dist/result/work/pipe.mjs +3 -3
  72. package/dist/string/case.mjs +20 -20
  73. package/dist/string/fuzzy.mjs +23 -18
  74. package/dist/string/index.mjs +7 -7
  75. package/dist/string/normalize.mjs +14 -14
  76. package/dist/string/template.mjs +2 -2
  77. package/dist/value/clone.mjs +10 -10
  78. package/dist/value/smush.mjs +2 -2
  79. package/package.json +13 -5
  80. package/src/array/difference.ts +0 -73
  81. package/src/array/exists.ts +0 -93
  82. package/src/array/filter.ts +0 -182
  83. package/src/array/find.ts +0 -183
  84. package/src/array/first.ts +0 -196
  85. package/src/array/flatten.ts +0 -20
  86. package/src/array/from.ts +0 -129
  87. package/src/array/get.ts +0 -131
  88. package/src/array/group-by.ts +0 -369
  89. package/src/array/index.ts +0 -26
  90. package/src/array/insert.ts +0 -52
  91. package/src/array/intersection.ts +0 -72
  92. package/src/array/last.ts +0 -194
  93. package/src/array/match.ts +0 -436
  94. package/src/array/move.ts +0 -315
  95. package/src/array/partition.ts +0 -91
  96. package/src/array/push.ts +0 -23
  97. package/src/array/reverse.ts +0 -33
  98. package/src/array/select.ts +0 -260
  99. package/src/array/single.ts +0 -93
  100. package/src/array/slice.ts +0 -335
  101. package/src/array/sort.ts +0 -607
  102. package/src/array/splice.ts +0 -106
  103. package/src/array/swap.ts +0 -322
  104. package/src/array/to-map.ts +0 -371
  105. package/src/array/to-record.ts +0 -351
  106. package/src/array/to-set.ts +0 -80
  107. package/src/array/toggle.ts +0 -79
  108. package/src/array/union.ts +0 -72
  109. package/src/array/unique.ts +0 -67
  110. package/src/array/update.ts +0 -75
  111. package/src/beacon.ts +0 -378
  112. package/src/color/constants.ts +0 -137
  113. package/src/color/index.ts +0 -83
  114. package/src/color/instance.ts +0 -162
  115. package/src/color/misc/alpha.ts +0 -56
  116. package/src/color/misc/format.ts +0 -29
  117. package/src/color/misc/get.ts +0 -210
  118. package/src/color/misc/is.ts +0 -221
  119. package/src/color/misc/state.ts +0 -243
  120. package/src/color/models.ts +0 -389
  121. package/src/color/space/hex.ts +0 -184
  122. package/src/color/space/hsl.ts +0 -174
  123. package/src/color/space/hwb.ts +0 -153
  124. package/src/color/space/rgb.ts +0 -240
  125. package/src/function/assert.ts +0 -174
  126. package/src/function/index.ts +0 -2
  127. package/src/function/limit.ts +0 -83
  128. package/src/function/memoize.ts +0 -202
  129. package/src/function/once.ts +0 -200
  130. package/src/function/retry.ts +0 -175
  131. package/src/function/work.ts +0 -1007
  132. package/src/herald.ts +0 -216
  133. package/src/index.ts +0 -68
  134. package/src/internal/array/callbacks.ts +0 -46
  135. package/src/internal/array/chunk.ts +0 -51
  136. package/src/internal/array/compact.ts +0 -56
  137. package/src/internal/array/find.ts +0 -200
  138. package/src/internal/array/group.ts +0 -42
  139. package/src/internal/array/index-of.ts +0 -182
  140. package/src/internal/array/insert.ts +0 -80
  141. package/src/internal/array/overlap.ts +0 -35
  142. package/src/internal/array/sets.ts +0 -74
  143. package/src/internal/array/shuffle.ts +0 -33
  144. package/src/internal/array/update.ts +0 -52
  145. package/src/internal/function/misc.ts +0 -8
  146. package/src/internal/function/timer.ts +0 -168
  147. package/src/internal/is.ts +0 -244
  148. package/src/internal/math/aggregate.ts +0 -164
  149. package/src/internal/math/misc.ts +0 -28
  150. package/src/internal/number.ts +0 -129
  151. package/src/internal/random.ts +0 -49
  152. package/src/internal/result.ts +0 -92
  153. package/src/internal/sized.ts +0 -25
  154. package/src/internal/string.ts +0 -128
  155. package/src/internal/subscription.ts +0 -264
  156. package/src/internal/value/compare.ts +0 -170
  157. package/src/internal/value/equal.ts +0 -465
  158. package/src/internal/value/get.ts +0 -57
  159. package/src/internal/value/handlers.ts +0 -95
  160. package/src/internal/value/has.ts +0 -118
  161. package/src/internal/value/misc.ts +0 -125
  162. package/src/internal/value/partial.ts +0 -46
  163. package/src/internal/value/set.ts +0 -132
  164. package/src/is.ts +0 -182
  165. package/src/logger.ts +0 -230
  166. package/src/math.ts +0 -281
  167. package/src/models.ts +0 -286
  168. package/src/number.ts +0 -1
  169. package/src/promise/delay.ts +0 -62
  170. package/src/promise/helpers.ts +0 -96
  171. package/src/promise/index.ts +0 -300
  172. package/src/promise/misc.ts +0 -96
  173. package/src/promise/models.ts +0 -195
  174. package/src/promise/timed.ts +0 -91
  175. package/src/query.ts +0 -147
  176. package/src/queue.ts +0 -814
  177. package/src/random.ts +0 -125
  178. package/src/result/index.ts +0 -105
  179. package/src/result/match.ts +0 -124
  180. package/src/result/misc.ts +0 -129
  181. package/src/result/models.ts +0 -83
  182. package/src/result/work/flow.ts +0 -488
  183. package/src/result/work/pipe.ts +0 -496
  184. package/src/sized/map.ts +0 -110
  185. package/src/sized/set.ts +0 -107
  186. package/src/string/case.ts +0 -236
  187. package/src/string/fuzzy.ts +0 -444
  188. package/src/string/index.ts +0 -199
  189. package/src/string/match.ts +0 -80
  190. package/src/string/normalize.ts +0 -205
  191. package/src/string/template.ts +0 -161
  192. package/src/value/clone.ts +0 -319
  193. package/src/value/collection.ts +0 -63
  194. package/src/value/diff.ts +0 -232
  195. package/src/value/freeze.ts +0 -322
  196. package/src/value/handle.ts +0 -3
  197. package/src/value/index.ts +0 -5
  198. package/src/value/merge.ts +0 -278
  199. package/src/value/omit.ts +0 -20
  200. package/src/value/pick.ts +0 -20
  201. package/src/value/shake.ts +0 -45
  202. package/src/value/smush.ts +0 -89
  203. package/src/value/transform.ts +0 -153
  204. package/src/value/unsmush.ts +0 -84
@@ -1,184 +0,0 @@
1
- import {join} from '../../internal/string';
2
- import {
3
- COLOR_ALPHA,
4
- COLOR_DEFAULTS,
5
- COLOR_EXPRESSION,
6
- COLOR_LENGTHS,
7
- COLOR_MAX,
8
- COLOR_TYPE,
9
- } from '../constants';
10
- import {getHexValue, getPercentage} from '../misc/get';
11
- import {isHexColor} from '../misc/is';
12
- import type {
13
- ColorState,
14
- ColorType,
15
- HSLAColor,
16
- HSLColor,
17
- HWBAColor,
18
- HWBColor,
19
- RGBAColor,
20
- RGBColor,
21
- } from '../models';
22
- import {convertRgbToHsla, convertRgbToHwba} from './rgb';
23
-
24
- // #region Functions
25
-
26
- function convertHexToRgba(value: string): RGBAColor {
27
- const normalized = getNormalizedHex(value, true);
28
- const pairs = COLOR_EXPRESSION.hexLong.exec(normalized) as RegExpExecArray;
29
- const values: number[] = [];
30
-
31
- const {length} = pairs;
32
-
33
- for (let index = 1; index < length; index += 1) {
34
- values.push(Number.parseInt(pairs[index], 16));
35
- }
36
-
37
- return {
38
- alpha: getPercentage((values[3] / COLOR_MAX.hex) * 100),
39
- blue: getHexValue(values[2]),
40
- green: getHexValue(values[1]),
41
- red: getHexValue(values[0]),
42
- };
43
- }
44
-
45
- export function getColorFromHex<Type extends ColorType>(
46
- state: ColorState,
47
- type: Type,
48
- ): NonNullable<ColorState[Type]> {
49
- switch (type) {
50
- case COLOR_TYPE.hsl:
51
- state.hsl ??= hexToHsl(state.hex!);
52
- break;
53
-
54
- case COLOR_TYPE.hwb:
55
- state.hwb ??= hexToHwb(state.hex!);
56
- break;
57
-
58
- case COLOR_TYPE.rgb:
59
- state.rgb ??= hexToRgb(state.hex!);
60
- break;
61
- }
62
-
63
- return state[type]!;
64
- }
65
-
66
- /**
67
- * Get the normalized hex color from a value
68
- *
69
- * _If the value is unable to be parsed or normalized, a hex color of `000000` will be returned, with the alpha channel _(opacity)_ value `0` included, if specified_
70
- *
71
- * @param value Value to normalize
72
- * @param alpha Include alpha channel _(opacity)_? _(defaults to `false`)_
73
- * @returns Normalized hex color
74
- */
75
- export function getNormalizedHex(value: unknown, alpha?: boolean): string {
76
- const includeAlpha = alpha ?? false;
77
-
78
- if (!isHexColor(value)) {
79
- return `${COLOR_DEFAULTS.hexBlack}${includeAlpha ? COLOR_ALPHA.fullHexLong : ''}`;
80
- }
81
-
82
- const normalized = value.replace(COLOR_EXPRESSION.prefix, '');
83
-
84
- if (normalized.length < COLOR_LENGTHS.hexLong) {
85
- const hex = normalized.slice(0, COLOR_LENGTHS.hexShort);
86
- const a = includeAlpha ? (normalized[COLOR_LENGTHS.hexShort] ?? COLOR_ALPHA.fullHexShort) : '';
87
-
88
- return join(`${hex}${a}`.split('').map(character => character.repeat(2)));
89
- }
90
-
91
- const hex = normalized.slice(0, COLOR_LENGTHS.hexLong);
92
-
93
- const a = includeAlpha ? normalized.slice(COLOR_LENGTHS.hexLong) || COLOR_ALPHA.fullHexLong : '';
94
-
95
- return `${hex}${a}`;
96
- }
97
-
98
- /**
99
- * Convert a hex color string to a _HSL_ color
100
- *
101
- * _If the value is unable to be converted, a black _HSL_ color will be returned_
102
- *
103
- * @param value Hex color string
104
- * @returns _HSL_ color
105
- */
106
- export function hexToHsl(value: string): HSLColor {
107
- const {hue, lightness, saturation} = hexToHsla(value);
108
-
109
- return {
110
- hue,
111
- lightness,
112
- saturation,
113
- };
114
- }
115
-
116
- /**
117
- * Convert a hex color string to a _HSLA_ color
118
- *
119
- * _If the value is unable to be converted, a black _HSLA_ color will be returned_
120
- *
121
- * @param value Hex color string
122
- * @returns _HSLA_ color
123
- */
124
- export function hexToHsla(value: string): HSLAColor {
125
- return convertRgbToHsla(convertHexToRgba(value));
126
- }
127
-
128
- /**
129
- * Convert a hex color string to a _HWB_ color
130
- *
131
- * _If the value is unable to be converted, a black _HWB_ color will be returned_
132
- *
133
- * @param value Hex color string
134
- * @returns _HWB_ color
135
- */
136
- export function hexToHwb(value: string): HWBColor {
137
- const {blackness, hue, whiteness} = hexToHwba(value);
138
-
139
- return {
140
- hue,
141
- whiteness,
142
- blackness,
143
- };
144
- }
145
-
146
- /**
147
- * Convert a hex color string to a _HWBA_ color
148
- *
149
- * _If the value is unable to be converted, a black _HWBA_ color will be returned_
150
- *
151
- * @param value Hex color string
152
- * @returns _HWBA_ color
153
- */
154
- export function hexToHwba(value: string): HWBAColor {
155
- return convertRgbToHwba(convertHexToRgba(value));
156
- }
157
-
158
- /**
159
- * Convert a hex color to an _RGB_ color
160
- *
161
- * _If the value is unable to be converted, a black _RGB_ color will be returned_
162
- *
163
- * @param value Original value
164
- * @returns _RGB_ color
165
- */
166
- export function hexToRgb(value: string): RGBColor {
167
- const {blue, green, red} = convertHexToRgba(value);
168
-
169
- return {blue, green, red};
170
- }
171
-
172
- /**
173
- * Convert a hex color to an _RGBA_ color
174
- *
175
- * _If the value is unable to be converted, a black _RGBA_ color will be returned_
176
- *
177
- * @param value Original value
178
- * @returns _RGBA_ color
179
- */
180
- export function hexToRgba(value: string): RGBAColor {
181
- return convertHexToRgba(value);
182
- }
183
-
184
- // #endregion
@@ -1,174 +0,0 @@
1
- import {COLOR_DEFAULTS, COLOR_MAX, COLOR_TYPE} from '../constants';
2
- import {getAlphaValue} from '../misc/alpha';
3
- import {getDegrees, getHexValue, getPercentage} from '../misc/get';
4
- import {isHslLike} from '../misc/is';
5
- import type {
6
- ColorState,
7
- ColorType,
8
- HSLAColor,
9
- HSLColor,
10
- HWBAColor,
11
- HWBColor,
12
- RGBAColor,
13
- RGBColor,
14
- } from '../models';
15
- import {convertRgbToHex} from './rgb';
16
-
17
- // #region Functions
18
-
19
- function convertHslToHwba(input: unknown): HWBAColor {
20
- const hsl = isHslLike(input) ? getHslValue(input) : {...COLOR_DEFAULTS.hsl};
21
-
22
- let {hue, lightness, saturation} = hsl;
23
-
24
- lightness /= COLOR_MAX.percent;
25
- saturation /= COLOR_MAX.percent;
26
-
27
- const value = lightness + saturation * Math.min(lightness, 1 - lightness);
28
-
29
- if (value === 0) {
30
- saturation = 0;
31
- } else {
32
- saturation = 2 * (1 - lightness / value);
33
- }
34
-
35
- const blackness = 1 - value;
36
- const whiteness = (1 - saturation) * value;
37
-
38
- return {
39
- hue,
40
- whiteness: whiteness * COLOR_MAX.percent,
41
- blackness: blackness * COLOR_MAX.percent,
42
- alpha: getAlphaValue((input as HSLAColor)?.alpha ?? COLOR_MAX.percent),
43
- };
44
- }
45
-
46
- function convertHslToRgba(input: unknown): RGBAColor {
47
- const hsl = isHslLike(input) ? getHslValue(input) : {...COLOR_DEFAULTS.hsl};
48
-
49
- const hue = hsl.hue % COLOR_MAX.degree;
50
- const saturation = hsl.saturation / COLOR_MAX.percent;
51
- const lightness = hsl.lightness / COLOR_MAX.percent;
52
-
53
- return {
54
- alpha: getAlphaValue((input as HSLAColor)?.alpha ?? COLOR_MAX.percent),
55
- blue: getHexValue(getHexyValue(hue, lightness, saturation, 4)),
56
- green: getHexValue(getHexyValue(hue, lightness, saturation, 8)),
57
- red: getHexValue(getHexyValue(hue, lightness, saturation, 0)),
58
- };
59
- }
60
-
61
- export function getColorFromHsl<Type extends ColorType>(
62
- state: ColorState,
63
- type: Type,
64
- ): NonNullable<ColorState[Type]> {
65
- switch (type) {
66
- case COLOR_TYPE.hex:
67
- state.hex = hslToHex(state.hsl!);
68
- break;
69
-
70
- case COLOR_TYPE.hwb:
71
- state.hwb = hslToHwb(state.hsl!);
72
- break;
73
-
74
- case COLOR_TYPE.rgb:
75
- state.rgb = hslToRgb(state.hsl!);
76
- break;
77
- }
78
-
79
- return state[type]!;
80
- }
81
-
82
- function getHexyValue(hue: number, lightness: number, saturation: number, value: number): number {
83
- const part = (value + hue / 30) % 12;
84
- const mod = saturation * Math.min(lightness, 1 - lightness);
85
-
86
- return (lightness - mod * Math.max(-1, Math.min(part - 3, 9 - part, 1))) * COLOR_MAX.hex;
87
- }
88
-
89
- export function getHslValue(value: Record<keyof HSLColor, unknown>): HSLColor {
90
- return {
91
- hue: getDegrees(value.hue),
92
- saturation: getPercentage(value.saturation),
93
- lightness: getPercentage(value.lightness),
94
- };
95
- }
96
-
97
- /**
98
- * Convert an _HSL(A)_ color to a hex color _(with optional alpha channel, i.e., opacity)_
99
- *
100
- * _If the value is unable to be converted, a black hex color will be returned_
101
- *
102
- * @param hsl _HSL(A)_ color
103
- * @param alpha Include alpha channel _(opacity)_? _(defaults to `false`)_
104
- * @returns Hex color string
105
- */
106
- export function hslToHex(hsl: HSLAColor | HSLColor, alpha?: boolean): string {
107
- return convertRgbToHex(convertHslToRgba(hsl), alpha ?? false);
108
- }
109
-
110
- /**
111
- * Convert an _HSL(A)_ color to an _HWB_ color
112
- *
113
- * _If the value is unable to be converted, a black _HWB_ color will be returned_
114
- *
115
- * @param hsl HSL(A) color
116
- * @returns _HWB_ color
117
- */
118
- export function hslToHwb(hsl: HSLAColor | HSLColor): HWBColor {
119
- const {blackness, hue, whiteness} = convertHslToHwba(hsl);
120
-
121
- return {
122
- hue,
123
- whiteness,
124
- blackness,
125
- };
126
- }
127
-
128
- /**
129
- * Convert an _HSL(A)_ color to an _HWBA_ color
130
- *
131
- * _If the value is unable to be converted, a black _HWBA_ color will be returned_
132
- *
133
- * @param hsl HSL(A) color
134
- * @returns _HWBA_ color
135
- */
136
- export function hslToHwba(hsl: HSLAColor | HSLColor): HWBAColor {
137
- return convertHslToHwba(hsl);
138
- }
139
-
140
- /**
141
- * Convert an _HSL(A)_ color to an _RGB_ color
142
- *
143
- * _If the value is unable to be converted, a black _RGB_ color will be returned_
144
- *
145
- * _Thanks, https://github.com/color-js/color.js/blob/main/src/spaces/hsl.js#L61_
146
- *
147
- * @param hsl HSL(A) color
148
- * @returns _RGB_ color
149
- */
150
- export function hslToRgb(hsl: HSLAColor | HSLColor): RGBColor {
151
- const {blue, green, red} = convertHslToRgba(hsl);
152
-
153
- return {
154
- blue,
155
- green,
156
- red,
157
- };
158
- }
159
-
160
- /**
161
- * Convert an _HSL(A)_ color to an _RGBA_ color
162
- *
163
- * _If the value is unable to be converted, a black _RGBA_ color will be returned_
164
- *
165
- * _Thanks, https://github.com/color-js/color.js/blob/main/src/spaces/hsl.js#L61_
166
- *
167
- * @param hsl HSL(A) color
168
- * @returns _RGBA_ color
169
- */
170
- export function hslToRgba(hsl: HSLAColor | HSLColor): RGBAColor {
171
- return convertHslToRgba(hsl);
172
- }
173
-
174
- // #endregion
@@ -1,153 +0,0 @@
1
- import {COLOR_DEFAULTS, COLOR_MAX, COLOR_TYPE} from '../constants';
2
- import {getAlphaValue} from '../misc/alpha';
3
- import {getDegrees, getPercentage} from '../misc/get';
4
- import {isHwbLike} from '../misc/is';
5
- import type {
6
- ColorState,
7
- ColorType,
8
- HSLAColor,
9
- HSLColor,
10
- HWBAColor,
11
- HWBColor,
12
- RGBAColor,
13
- RGBColor,
14
- } from '../models';
15
- import {hslToRgb, hslToRgba} from './hsl';
16
- import {rgbToHex} from './rgb';
17
-
18
- // #region Functions
19
-
20
- export function convertHwbToHsl(input: HWBAColor | HWBColor): HSLAColor {
21
- let {blackness, hue, whiteness} = isHwbLike(input) ? getHwbValue(input) : COLOR_DEFAULTS.hwb;
22
-
23
- blackness /= COLOR_MAX.percent;
24
- whiteness /= COLOR_MAX.percent;
25
-
26
- if (blackness + whiteness > 1) {
27
- const total = blackness + whiteness;
28
-
29
- blackness /= total;
30
- whiteness /= total;
31
- }
32
-
33
- const lightness = (1 - blackness + whiteness) / 2;
34
-
35
- const saturation = getHwbSaturation(blackness, whiteness, lightness);
36
-
37
- return {
38
- hue,
39
- saturation: saturation * COLOR_MAX.percent,
40
- lightness: lightness * COLOR_MAX.percent,
41
- alpha: getAlphaValue((input as HWBAColor)?.alpha ?? COLOR_MAX.percent),
42
- };
43
- }
44
-
45
- export function getColorFromHwb<Type extends ColorType>(
46
- state: ColorState,
47
- type: Type,
48
- ): NonNullable<ColorState[Type]> {
49
- switch (type) {
50
- case COLOR_TYPE.hex:
51
- state.hex = hwbToHex(state.hwb!);
52
- break;
53
-
54
- case COLOR_TYPE.hsl:
55
- state.hsl = hwbToHsl(state.hwb!);
56
- break;
57
-
58
- case COLOR_TYPE.rgb:
59
- state.rgb = hwbToRgb(state.hwb!);
60
- break;
61
- }
62
-
63
- return state[type]!;
64
- }
65
-
66
- function getHwbSaturation(blackness: number, whiteness: number, lightness: number): number {
67
- const value = 1 - blackness;
68
-
69
- const hue = value - whiteness;
70
-
71
- if (hue <= 0) {
72
- return 0;
73
- }
74
-
75
- return hue / Math.min(2 * lightness, 2 - 2 * lightness);
76
- }
77
-
78
- export function getHwbValue(value: Record<keyof HWBColor, unknown>): HWBColor {
79
- return {
80
- hue: getDegrees(value.hue),
81
- whiteness: getPercentage(value.whiteness),
82
- blackness: getPercentage(value.blackness),
83
- };
84
- }
85
-
86
- /**
87
- * Convert an _HWB(A)_ color to a hex color _(with optional alpha channel, i.e., opacity)_
88
- *
89
- * _If the value is unable to be converted, a black hex color will be returned_
90
- *
91
- * @param hwb _HWB(A)_ color
92
- * @param alpha Include alpha channel _(opacity)_? _(defaults to `false`)_
93
- * @returns Hex color string
94
- */
95
- export function hwbToHex(hwb: HWBAColor | HWBColor, alpha?: boolean): string {
96
- return rgbToHex(hwbToRgb(hwb), alpha);
97
- }
98
-
99
- /**
100
- * Convert an _HWB(A)_ color to an _RGB_ color
101
- *
102
- * _If the value is unable to be converted, a black _RGB_ color will be returned_
103
- *
104
- * @param hwb _HWB(A)_ color
105
- * @returns _RGB_ color
106
- */
107
- export function hwbToHsl(hwb: HWBAColor | HWBColor): HSLColor {
108
- const {hue, lightness, saturation} = convertHwbToHsl(hwb);
109
-
110
- return {
111
- hue,
112
- lightness,
113
- saturation,
114
- };
115
- }
116
-
117
- /**
118
- * Convert an _HWB(A)_ color to an _HSLA_ color
119
- *
120
- * _If the value is unable to be converted, a black _HSLA_ color will be returned_
121
- *
122
- * @param hwb _HWB(A)_ color
123
- * @returns _HSLA_ color
124
- */
125
- export function hwbToHsla(hwb: HWBAColor | HWBColor): HSLAColor {
126
- return convertHwbToHsl(hwb);
127
- }
128
-
129
- /**
130
- * Convert an _HWB(A)_ color to an _RGB_ color
131
- *
132
- * _If the value is unable to be converted, a black _RGB_ color will be returned_
133
- *
134
- * @param hwb _HWB(A)_ color
135
- * @returns _RGB_ color
136
- */
137
- export function hwbToRgb(hwb: HWBAColor | HWBColor): RGBColor {
138
- return hslToRgb(hwbToHsl(hwb));
139
- }
140
-
141
- /**
142
- * Convert an _HWB(A)_ color to an _RGBA_ color
143
- *
144
- * _If the value is unable to be converted, a black _RGBA_ color will be returned_
145
- *
146
- * @param hwb _HWB(A)_ color
147
- * @returns _RGBA_ color
148
- */
149
- export function hwbToRgba(hwb: HWBAColor | HWBColor): RGBAColor {
150
- return hslToRgba(hwbToHsla(hwb));
151
- }
152
-
153
- // #endregion