@oscarpalmer/atoms 0.190.0 → 0.192.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/beacon.d.mts +6 -44
- package/dist/beacon.mjs +20 -67
- package/dist/color/constants.d.mts +82 -35
- package/dist/color/constants.mjs +106 -61
- package/dist/color/index.d.mts +3 -3
- package/dist/color/index.mjs +2 -2
- package/dist/color/instance.mjs +60 -35
- package/dist/color/misc/alpha.d.mts +1 -1
- package/dist/color/misc/alpha.mjs +12 -10
- package/dist/color/misc/format.d.mts +7 -0
- package/dist/color/misc/format.mjs +20 -0
- package/dist/color/misc/get.mjs +25 -25
- package/dist/color/misc/is.d.mts +0 -36
- package/dist/color/misc/is.mjs +22 -57
- package/dist/color/misc/state.d.mts +8 -6
- package/dist/color/misc/state.mjs +79 -88
- package/dist/color/models.d.mts +106 -6
- package/dist/color/space/hex.d.mts +3 -2
- package/dist/color/space/hex.mjs +22 -10
- package/dist/color/space/hsl.d.mts +3 -2
- package/dist/color/space/hsl.mjs +26 -14
- package/dist/color/space/hwb.d.mts +3 -2
- package/dist/color/space/hwb.mjs +20 -8
- package/dist/color/space/rgb.d.mts +3 -2
- package/dist/color/space/rgb.mjs +27 -15
- package/dist/herald.d.mts +2 -3
- package/dist/index.d.mts +139 -73
- package/dist/index.mjs +653 -477
- package/dist/internal/subscription.d.mts +52 -0
- package/dist/internal/subscription.mjs +127 -0
- package/dist/models.d.mts +5 -1
- package/package.json +4 -4
- package/src/beacon.ts +32 -117
- package/src/color/constants.ts +115 -66
- package/src/color/index.ts +26 -8
- package/src/color/instance.ts +113 -45
- package/src/color/misc/alpha.ts +18 -20
- package/src/color/misc/format.ts +29 -0
- package/src/color/misc/get.ts +31 -41
- package/src/color/misc/is.ts +31 -71
- package/src/color/misc/state.ts +165 -141
- package/src/color/models.ts +126 -5
- package/src/color/space/hex.ts +46 -18
- package/src/color/space/hsl.ts +44 -14
- package/src/color/space/hwb.ts +38 -8
- package/src/color/space/rgb.ts +48 -15
- package/src/herald.ts +1 -3
- package/src/index.ts +1 -0
- package/src/internal/subscription.ts +264 -0
- package/src/models.ts +5 -0
- package/src/string/fuzzy.ts +1 -1
- package/src/value/freeze.ts +2 -2
- package/src/value/shake.ts +1 -1
- package/src/value/transform.ts +1 -1
- package/dist/color/misc/index.d.mts +0 -7
- package/dist/color/misc/index.mjs +0 -15
- package/src/color/misc/index.ts +0 -29
package/src/color/misc/is.ts
CHANGED
|
@@ -1,21 +1,13 @@
|
|
|
1
|
+
import {isPlainObject} from '../../internal/is';
|
|
1
2
|
import {between} from '../../internal/number';
|
|
2
3
|
import type {PlainObject} from '../../models';
|
|
3
4
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
KEYS_HWB,
|
|
11
|
-
KEYS_HWBA,
|
|
12
|
-
KEYS_RGB,
|
|
13
|
-
KEYS_RGBA,
|
|
14
|
-
LENGTH_LONG,
|
|
15
|
-
LENGTH_SHORT,
|
|
16
|
-
MAX_DEGREE,
|
|
17
|
-
MAX_HEX,
|
|
18
|
-
MAX_PERCENT,
|
|
5
|
+
COLOR_ALPHA,
|
|
6
|
+
COLOR_EXPRESSION,
|
|
7
|
+
COLOR_KEYS,
|
|
8
|
+
COLOR_LENGTHS,
|
|
9
|
+
COLOR_MAX,
|
|
10
|
+
COLOR_PROPERTY,
|
|
19
11
|
} from '../constants';
|
|
20
12
|
import type {Color} from '../index';
|
|
21
13
|
import type {
|
|
@@ -35,11 +27,11 @@ function hasKeys(value: unknown, keys: ColorProperty[]): boolean {
|
|
|
35
27
|
}
|
|
36
28
|
|
|
37
29
|
function isAlpha(value: unknown): value is number {
|
|
38
|
-
return typeof value === 'number' && between(value,
|
|
30
|
+
return typeof value === 'number' && between(value, COLOR_ALPHA.noneValue, COLOR_MAX.percent);
|
|
39
31
|
}
|
|
40
32
|
|
|
41
33
|
function isBytey(value: unknown): value is number {
|
|
42
|
-
return typeof value === 'number' && between(value, 0,
|
|
34
|
+
return typeof value === 'number' && between(value, 0, COLOR_MAX.hex);
|
|
43
35
|
}
|
|
44
36
|
|
|
45
37
|
/**
|
|
@@ -49,7 +41,9 @@ function isBytey(value: unknown): value is number {
|
|
|
49
41
|
* @returns `true` if the value is a _Color_, otherwise `false`
|
|
50
42
|
*/
|
|
51
43
|
export function isColor(value: unknown): value is Color {
|
|
52
|
-
return
|
|
44
|
+
return (
|
|
45
|
+
isPlainObject(value) && COLOR_PROPERTY.name in value && value[COLOR_PROPERTY.name] === true
|
|
46
|
+
);
|
|
53
47
|
}
|
|
54
48
|
|
|
55
49
|
function isColorValue(obj: unknown, properties: ColorProperty[]): boolean {
|
|
@@ -81,7 +75,7 @@ function isColorValue(obj: unknown, properties: ColorProperty[]): boolean {
|
|
|
81
75
|
}
|
|
82
76
|
|
|
83
77
|
function isDegree(value: unknown): value is number {
|
|
84
|
-
return typeof value === 'number' && between(value, 0,
|
|
78
|
+
return typeof value === 'number' && between(value, 0, COLOR_MAX.degree);
|
|
85
79
|
}
|
|
86
80
|
|
|
87
81
|
/**
|
|
@@ -105,14 +99,16 @@ export function isHexColor(value: unknown, alpha?: boolean): value is string {
|
|
|
105
99
|
return false;
|
|
106
100
|
}
|
|
107
101
|
|
|
108
|
-
if (!(
|
|
102
|
+
if (!(COLOR_EXPRESSION.hexShort.test(value) || COLOR_EXPRESSION.hexLong.test(value))) {
|
|
109
103
|
return false;
|
|
110
104
|
}
|
|
111
105
|
|
|
112
106
|
if (alpha === false) {
|
|
113
|
-
const unprefixed = value.replace(
|
|
107
|
+
const unprefixed = value.replace(COLOR_EXPRESSION.prefix, '');
|
|
114
108
|
|
|
115
|
-
return
|
|
109
|
+
return (
|
|
110
|
+
unprefixed.length === COLOR_LENGTHS.hexShort || unprefixed.length === COLOR_LENGTHS.hexLong
|
|
111
|
+
);
|
|
116
112
|
}
|
|
117
113
|
|
|
118
114
|
return true;
|
|
@@ -125,17 +121,11 @@ export function isHexColor(value: unknown, alpha?: boolean): value is string {
|
|
|
125
121
|
* @returns `true` if the value is an _HSLA_ color, otherwise `false`
|
|
126
122
|
*/
|
|
127
123
|
export function isHslaColor(value: unknown): value is HSLAColor {
|
|
128
|
-
return isColorValue(value,
|
|
124
|
+
return isColorValue(value, COLOR_KEYS.hsla);
|
|
129
125
|
}
|
|
130
126
|
|
|
131
|
-
/**
|
|
132
|
-
* Is the value like an _HSLA_ color?
|
|
133
|
-
*
|
|
134
|
-
* @param value Value to check
|
|
135
|
-
* @returns `true` if the value is like an _HSLA_ color, otherwise `false`
|
|
136
|
-
*/
|
|
137
127
|
export function isHslaLike(value: unknown): value is Record<keyof HSLAColor, unknown> {
|
|
138
|
-
return hasKeys(value,
|
|
128
|
+
return hasKeys(value, COLOR_KEYS.hsla);
|
|
139
129
|
}
|
|
140
130
|
|
|
141
131
|
/**
|
|
@@ -145,17 +135,11 @@ export function isHslaLike(value: unknown): value is Record<keyof HSLAColor, unk
|
|
|
145
135
|
* @returns `true` if the value is an _HSL_ color, otherwise `false`
|
|
146
136
|
*/
|
|
147
137
|
export function isHslColor(value: unknown): value is HSLColor {
|
|
148
|
-
return isColorValue(value,
|
|
138
|
+
return isColorValue(value, COLOR_KEYS.hsla) || isColorValue(value, COLOR_KEYS.hsl);
|
|
149
139
|
}
|
|
150
140
|
|
|
151
|
-
/**
|
|
152
|
-
* Is the value like an _HSL_ color?
|
|
153
|
-
*
|
|
154
|
-
* @param value Value to check
|
|
155
|
-
* @returns `true` if the value is like an _HSL_ color, otherwise `false`
|
|
156
|
-
*/
|
|
157
141
|
export function isHslLike(value: unknown): value is Record<keyof HSLColor, unknown> {
|
|
158
|
-
return hasKeys(value,
|
|
142
|
+
return hasKeys(value, COLOR_KEYS.hsl);
|
|
159
143
|
}
|
|
160
144
|
|
|
161
145
|
/**
|
|
@@ -165,17 +149,11 @@ export function isHslLike(value: unknown): value is Record<keyof HSLColor, unkno
|
|
|
165
149
|
* @returns `true` if the value is an _HWBA_ color, otherwise `false`
|
|
166
150
|
*/
|
|
167
151
|
export function isHwbaColor(value: unknown): value is HWBAColor {
|
|
168
|
-
return isColorValue(value,
|
|
152
|
+
return isColorValue(value, COLOR_KEYS.hwba);
|
|
169
153
|
}
|
|
170
154
|
|
|
171
|
-
/**
|
|
172
|
-
* Is the value like an _HWBA_ color?
|
|
173
|
-
*
|
|
174
|
-
* @param value Value to check
|
|
175
|
-
* @returns `true` if the value is like an _HWBA_ color, otherwise `false`
|
|
176
|
-
*/
|
|
177
155
|
export function isHwbaLike(value: unknown): value is Record<keyof HWBAColor, unknown> {
|
|
178
|
-
return hasKeys(value,
|
|
156
|
+
return hasKeys(value, COLOR_KEYS.hwba);
|
|
179
157
|
}
|
|
180
158
|
|
|
181
159
|
/**
|
|
@@ -185,17 +163,11 @@ export function isHwbaLike(value: unknown): value is Record<keyof HWBAColor, unk
|
|
|
185
163
|
* @returns `true` if the value is an _HWB_ color, otherwise `false`
|
|
186
164
|
*/
|
|
187
165
|
export function isHwbColor(value: unknown): value is HWBColor {
|
|
188
|
-
return isColorValue(value,
|
|
166
|
+
return isColorValue(value, COLOR_KEYS.hwb) || isColorValue(value, COLOR_KEYS.hwba);
|
|
189
167
|
}
|
|
190
168
|
|
|
191
|
-
/**
|
|
192
|
-
* Is the value like an _HWB_ color?
|
|
193
|
-
*
|
|
194
|
-
* @param value Value to check
|
|
195
|
-
* @returns `true` if the value is like an _HWB_ color, otherwise `false`
|
|
196
|
-
*/
|
|
197
169
|
export function isHwbLike(value: unknown): value is Record<keyof HWBColor, unknown> {
|
|
198
|
-
return hasKeys(value,
|
|
170
|
+
return hasKeys(value, COLOR_KEYS.hwb);
|
|
199
171
|
}
|
|
200
172
|
|
|
201
173
|
/**
|
|
@@ -205,17 +177,11 @@ export function isHwbLike(value: unknown): value is Record<keyof HWBColor, unkno
|
|
|
205
177
|
* @returns `true` if the value is an _RGBA_ color, otherwise `false`
|
|
206
178
|
*/
|
|
207
179
|
export function isRgbaColor(value: unknown): value is RGBAColor {
|
|
208
|
-
return isColorValue(value,
|
|
180
|
+
return isColorValue(value, COLOR_KEYS.rgba);
|
|
209
181
|
}
|
|
210
182
|
|
|
211
|
-
/**
|
|
212
|
-
* Is the value like an _RGBA_ color?
|
|
213
|
-
*
|
|
214
|
-
* @param value Value to check
|
|
215
|
-
* @returns `true` if the value is like an _RGBA_ color, otherwise `false`
|
|
216
|
-
*/
|
|
217
183
|
export function isRgbaLike(value: unknown): value is Record<keyof RGBAColor, unknown> {
|
|
218
|
-
return hasKeys(value,
|
|
184
|
+
return hasKeys(value, COLOR_KEYS.rgba);
|
|
219
185
|
}
|
|
220
186
|
|
|
221
187
|
/**
|
|
@@ -225,21 +191,15 @@ export function isRgbaLike(value: unknown): value is Record<keyof RGBAColor, unk
|
|
|
225
191
|
* @returns `true` if the value is an _RGB_ color, otherwise `false`
|
|
226
192
|
*/
|
|
227
193
|
export function isRgbColor(value: unknown): value is RGBColor {
|
|
228
|
-
return isColorValue(value,
|
|
194
|
+
return isColorValue(value, COLOR_KEYS.rgba) || isColorValue(value, COLOR_KEYS.rgb);
|
|
229
195
|
}
|
|
230
196
|
|
|
231
|
-
/**
|
|
232
|
-
* Is the value like an _RGB_ color?
|
|
233
|
-
*
|
|
234
|
-
* @param value Value to check
|
|
235
|
-
* @returns `true` if the value is like an _RGB_ color, otherwise `false`
|
|
236
|
-
*/
|
|
237
197
|
export function isRgbLike(value: unknown): value is Record<keyof RGBColor, unknown> {
|
|
238
|
-
return hasKeys(value,
|
|
198
|
+
return hasKeys(value, COLOR_KEYS.rgb);
|
|
239
199
|
}
|
|
240
200
|
|
|
241
201
|
function isPercentage(value: unknown): value is number {
|
|
242
|
-
return typeof value === 'number' && between(value, 0,
|
|
202
|
+
return typeof value === 'number' && between(value, 0, COLOR_MAX.percent);
|
|
243
203
|
}
|
|
244
204
|
|
|
245
205
|
// #endregion
|
package/src/color/misc/state.ts
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
DEFAULT_HWB,
|
|
4
|
-
DEFAULT_RGB,
|
|
5
|
-
HEX_BLACK,
|
|
6
|
-
KEYS_HSL,
|
|
7
|
-
KEYS_HWB,
|
|
8
|
-
KEYS_RGB,
|
|
9
|
-
LENGTH_LONG,
|
|
10
|
-
MAX_PERCENT,
|
|
11
|
-
} from '../constants';
|
|
1
|
+
import type {Subscriptions} from '../../internal/subscription';
|
|
2
|
+
import {COLOR_DEFAULTS, COLOR_KEYS, COLOR_LENGTHS, COLOR_MAX, COLOR_TYPE} from '../constants';
|
|
12
3
|
import type {
|
|
4
|
+
Color,
|
|
13
5
|
ColorState,
|
|
6
|
+
ColorType,
|
|
14
7
|
HSLAColor,
|
|
15
8
|
HSLColor,
|
|
16
9
|
HWBAColor,
|
|
@@ -18,202 +11,233 @@ import type {
|
|
|
18
11
|
RGBAColor,
|
|
19
12
|
RGBColor,
|
|
20
13
|
} from '../models';
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
14
|
+
import {getColorFromHex, getNormalizedHex} from '../space/hex';
|
|
15
|
+
import {getColorFromHsl, getHslValue} from '../space/hsl';
|
|
16
|
+
import {getColorFromHwb, getHwbValue} from '../space/hwb';
|
|
17
|
+
import {getColorFromRgb, getRgbValue} from '../space/rgb';
|
|
25
18
|
import {getAlpha} from './alpha';
|
|
26
19
|
import {getDegrees, getHexValue, getPercentage} from './get';
|
|
27
20
|
import {isColor, isHexColor, isHslLike, isHwbLike, isRgbLike} from './is';
|
|
28
21
|
|
|
29
22
|
// #region Functions
|
|
30
23
|
|
|
24
|
+
export function getColorFromState<Type extends ColorType>(
|
|
25
|
+
state: ColorState,
|
|
26
|
+
type: Type,
|
|
27
|
+
): NonNullable<ColorState[Type]> {
|
|
28
|
+
const {origin} = state;
|
|
29
|
+
|
|
30
|
+
if (type === origin) {
|
|
31
|
+
return state[origin] as NonNullable<ColorState[Type]>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return state[type] ?? (getters[origin](state, type) as NonNullable<ColorState[Type]>);
|
|
35
|
+
}
|
|
36
|
+
|
|
31
37
|
export function getColorState(value: unknown): ColorState {
|
|
32
38
|
if (typeof value === 'string') {
|
|
33
39
|
return getColorStateForHex(value);
|
|
34
40
|
}
|
|
35
41
|
|
|
36
42
|
if (isColor(value)) {
|
|
43
|
+
const {origin} = value;
|
|
44
|
+
|
|
37
45
|
return {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
rgb: value.rgb,
|
|
42
|
-
alpha: getAlpha(value.alpha),
|
|
46
|
+
origin,
|
|
47
|
+
[origin]: value[origin],
|
|
48
|
+
alpha: getAlpha(value.alpha, false),
|
|
43
49
|
};
|
|
44
50
|
}
|
|
45
51
|
|
|
46
|
-
const state: Partial<ColorState> = {};
|
|
47
|
-
|
|
48
52
|
if (typeof value === 'object' && value !== null) {
|
|
49
|
-
state
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
53
|
+
const state: ColorState = {
|
|
54
|
+
alpha: getAlpha((value as HSLAColor).alpha, false),
|
|
55
|
+
origin: undefined as never,
|
|
56
|
+
};
|
|
54
57
|
|
|
55
|
-
if (
|
|
56
|
-
|
|
58
|
+
if (COLOR_KEYS.hsl.every(key => key in value)) {
|
|
59
|
+
state.hsl = getHslValue(value as Record<keyof HSLColor, unknown>);
|
|
60
|
+
state.origin = COLOR_TYPE.hsl;
|
|
61
|
+
} else if (COLOR_KEYS.hwb.every(key => key in value)) {
|
|
62
|
+
state.hwb = getHwbValue(value as Record<keyof HWBColor, unknown>);
|
|
63
|
+
state.origin = COLOR_TYPE.hwb;
|
|
64
|
+
} else if (COLOR_KEYS.rgb.every(key => key in value)) {
|
|
65
|
+
state.rgb = getRgbValue(value as Record<keyof RGBColor, unknown>);
|
|
66
|
+
state.origin = COLOR_TYPE.rgb;
|
|
57
67
|
}
|
|
58
68
|
|
|
59
|
-
if (
|
|
60
|
-
return
|
|
69
|
+
if (state.origin != null) {
|
|
70
|
+
return state;
|
|
61
71
|
}
|
|
62
72
|
}
|
|
63
73
|
|
|
64
|
-
return getDefaultColorState(
|
|
74
|
+
return getDefaultColorState();
|
|
65
75
|
}
|
|
66
76
|
|
|
67
77
|
function getColorStateForHex(value: string): ColorState {
|
|
68
78
|
const normalized = getNormalizedHex(value, true);
|
|
69
|
-
const hex = normalized.slice(0,
|
|
70
|
-
|
|
71
|
-
const hsl = hexToHsl(hex);
|
|
79
|
+
const hex = normalized.slice(0, COLOR_LENGTHS.hexLong);
|
|
72
80
|
|
|
73
81
|
return {
|
|
74
82
|
hex,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
hwb: hslToHwb(hsl),
|
|
78
|
-
rgb: hslToRgb(hsl),
|
|
83
|
+
alpha: getAlpha(normalized.slice(COLOR_LENGTHS.hexLong), true),
|
|
84
|
+
origin: COLOR_TYPE.hex,
|
|
79
85
|
};
|
|
80
86
|
}
|
|
81
87
|
|
|
82
|
-
function
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return state as ColorState;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function getColorStateForHwb(
|
|
96
|
-
state: Partial<ColorState>,
|
|
97
|
-
value: Record<keyof HWBColor, unknown>,
|
|
98
|
-
): ColorState {
|
|
99
|
-
state.hwb = getHwbValue(value);
|
|
100
|
-
|
|
101
|
-
state.hsl = hwbToHsl(state.hwb);
|
|
102
|
-
state.rgb = hwbToRgb(state.hwb);
|
|
103
|
-
state.hex = hwbToHex(state.hwb);
|
|
104
|
-
|
|
105
|
-
return state as ColorState;
|
|
88
|
+
function getDefaultColorState(): ColorState {
|
|
89
|
+
return {
|
|
90
|
+
alpha: getAlpha(COLOR_MAX.percent, false),
|
|
91
|
+
hex: COLOR_DEFAULTS.hexBlack,
|
|
92
|
+
hsl: {...COLOR_DEFAULTS.hsl},
|
|
93
|
+
hwb: {...COLOR_DEFAULTS.hwb},
|
|
94
|
+
rgb: {...COLOR_DEFAULTS.rgb},
|
|
95
|
+
origin: COLOR_TYPE.hex,
|
|
96
|
+
};
|
|
106
97
|
}
|
|
107
98
|
|
|
108
|
-
function
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
state.
|
|
99
|
+
function setColorValue<Type extends ColorType>(
|
|
100
|
+
color: Color,
|
|
101
|
+
state: ColorState,
|
|
102
|
+
subscriptions: Subscriptions<Function>,
|
|
103
|
+
type: Type,
|
|
104
|
+
value: ColorState[Type],
|
|
105
|
+
alpha?: number | string,
|
|
106
|
+
): void {
|
|
107
|
+
state.hex = undefined;
|
|
108
|
+
state.hsl = undefined;
|
|
109
|
+
state.hwb = undefined;
|
|
110
|
+
state.rgb = undefined;
|
|
111
|
+
|
|
112
|
+
state.origin = type;
|
|
113
|
+
state[type] = value;
|
|
114
|
+
|
|
115
|
+
if (alpha != null) {
|
|
116
|
+
state.alpha = getAlpha(alpha, type === COLOR_TYPE.hex);
|
|
117
|
+
}
|
|
117
118
|
|
|
118
|
-
|
|
119
|
-
|
|
119
|
+
for (const type of COLOR_TYPE.all) {
|
|
120
|
+
const callbacks = subscriptions.values.to.keyed?.get(type);
|
|
120
121
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
122
|
+
if (callbacks != null) {
|
|
123
|
+
for (const callback of callbacks.values()) {
|
|
124
|
+
callback(color[type]);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
127
128
|
|
|
128
|
-
|
|
129
|
+
for (const callback of subscriptions.values.to.any.values()) {
|
|
130
|
+
callback(color);
|
|
131
|
+
}
|
|
129
132
|
}
|
|
130
133
|
|
|
131
|
-
export function setHexColor(
|
|
134
|
+
export function setHexColor(
|
|
135
|
+
color: Color,
|
|
136
|
+
state: ColorState,
|
|
137
|
+
subscriptions: Subscriptions<Function>,
|
|
138
|
+
value: string,
|
|
139
|
+
alpha: boolean,
|
|
140
|
+
): void {
|
|
132
141
|
if (!isHexColor(value) || (!alpha && value === state.hex)) {
|
|
133
142
|
return;
|
|
134
143
|
}
|
|
135
144
|
|
|
136
145
|
const normalized = getNormalizedHex(value, true);
|
|
137
|
-
const hex = normalized.slice(0, LENGTH_LONG);
|
|
138
|
-
const hsl = hexToHsl(hex);
|
|
139
146
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
147
|
+
setColorValue(
|
|
148
|
+
color,
|
|
149
|
+
state,
|
|
150
|
+
subscriptions,
|
|
151
|
+
COLOR_TYPE.hex,
|
|
152
|
+
normalized.slice(0, COLOR_LENGTHS.hexLong),
|
|
153
|
+
alpha ? normalized.slice(COLOR_LENGTHS.hexLong) : undefined,
|
|
154
|
+
);
|
|
149
155
|
}
|
|
150
156
|
|
|
151
|
-
export function setHSLColor(
|
|
157
|
+
export function setHSLColor(
|
|
158
|
+
color: Color,
|
|
159
|
+
state: ColorState,
|
|
160
|
+
subscriptions: Subscriptions<Function>,
|
|
161
|
+
value: unknown,
|
|
162
|
+
alpha: boolean,
|
|
163
|
+
): void {
|
|
152
164
|
if (!isHslLike(value)) {
|
|
153
165
|
return;
|
|
154
166
|
}
|
|
155
167
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
if (alpha) {
|
|
169
|
-
state.alpha = getAlpha((value as HSLAColor).alpha);
|
|
170
|
-
}
|
|
168
|
+
setColorValue(
|
|
169
|
+
color,
|
|
170
|
+
state,
|
|
171
|
+
subscriptions,
|
|
172
|
+
COLOR_TYPE.hsl,
|
|
173
|
+
{
|
|
174
|
+
hue: getDegrees((value as HSLColor).hue),
|
|
175
|
+
saturation: getPercentage((value as HSLColor).saturation),
|
|
176
|
+
lightness: getPercentage((value as HSLColor).lightness),
|
|
177
|
+
},
|
|
178
|
+
alpha ? (value as HSLAColor).alpha : undefined,
|
|
179
|
+
);
|
|
171
180
|
}
|
|
172
181
|
|
|
173
|
-
export function setHWBColor(
|
|
182
|
+
export function setHWBColor(
|
|
183
|
+
color: Color,
|
|
184
|
+
state: ColorState,
|
|
185
|
+
subscriptions: Subscriptions<Function>,
|
|
186
|
+
value: unknown,
|
|
187
|
+
alpha: boolean,
|
|
188
|
+
): void {
|
|
174
189
|
if (!isHwbLike(value)) {
|
|
175
190
|
return;
|
|
176
191
|
}
|
|
177
192
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
if (alpha) {
|
|
191
|
-
state.alpha = getAlpha((value as HWBAColor).alpha);
|
|
192
|
-
}
|
|
193
|
+
setColorValue(
|
|
194
|
+
color,
|
|
195
|
+
state,
|
|
196
|
+
subscriptions,
|
|
197
|
+
COLOR_TYPE.hwb,
|
|
198
|
+
{
|
|
199
|
+
hue: getDegrees((value as HWBColor).hue),
|
|
200
|
+
whiteness: getPercentage((value as HWBColor).whiteness),
|
|
201
|
+
blackness: getPercentage((value as HWBColor).blackness),
|
|
202
|
+
},
|
|
203
|
+
alpha ? (value as HWBAColor).alpha : undefined,
|
|
204
|
+
);
|
|
193
205
|
}
|
|
194
206
|
|
|
195
|
-
export function setRGBColor(
|
|
207
|
+
export function setRGBColor(
|
|
208
|
+
color: Color,
|
|
209
|
+
state: ColorState,
|
|
210
|
+
subscriptions: Subscriptions<Function>,
|
|
211
|
+
value: unknown,
|
|
212
|
+
alpha: boolean,
|
|
213
|
+
): void {
|
|
196
214
|
if (!isRgbLike(value)) {
|
|
197
215
|
return;
|
|
198
216
|
}
|
|
199
217
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
218
|
+
setColorValue(
|
|
219
|
+
color,
|
|
220
|
+
state,
|
|
221
|
+
subscriptions,
|
|
222
|
+
COLOR_TYPE.rgb,
|
|
223
|
+
{
|
|
224
|
+
red: getHexValue((value as RGBColor).red),
|
|
225
|
+
green: getHexValue((value as RGBColor).green),
|
|
226
|
+
blue: getHexValue((value as RGBColor).blue),
|
|
227
|
+
},
|
|
228
|
+
alpha ? (value as RGBAColor).alpha : undefined,
|
|
229
|
+
);
|
|
230
|
+
}
|
|
207
231
|
|
|
208
|
-
|
|
209
|
-
state.rgb = rgb;
|
|
232
|
+
// #endregion
|
|
210
233
|
|
|
211
|
-
|
|
212
|
-
state.hwb = hslToHwb(hsl);
|
|
234
|
+
// #region Variables
|
|
213
235
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
236
|
+
const getters: Record<ColorType, (state: ColorState, type: ColorType) => any> = {
|
|
237
|
+
hex: getColorFromHex,
|
|
238
|
+
hsl: getColorFromHsl,
|
|
239
|
+
hwb: getColorFromHwb,
|
|
240
|
+
rgb: getColorFromRgb,
|
|
241
|
+
};
|
|
218
242
|
|
|
219
243
|
// #endregion
|