@oscarpalmer/atoms 0.191.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.
Files changed (44) hide show
  1. package/dist/beacon.d.mts +6 -44
  2. package/dist/beacon.mjs +20 -67
  3. package/dist/color/constants.d.mts +82 -41
  4. package/dist/color/constants.mjs +102 -63
  5. package/dist/color/instance.mjs +36 -13
  6. package/dist/color/misc/alpha.mjs +9 -10
  7. package/dist/color/misc/format.mjs +4 -4
  8. package/dist/color/misc/get.mjs +18 -18
  9. package/dist/color/misc/is.mjs +22 -21
  10. package/dist/color/misc/state.d.mts +6 -5
  11. package/dist/color/misc/state.mjs +31 -26
  12. package/dist/color/models.d.mts +78 -1
  13. package/dist/color/space/hex.mjs +12 -12
  14. package/dist/color/space/hsl.mjs +16 -16
  15. package/dist/color/space/hwb.mjs +10 -10
  16. package/dist/color/space/rgb.mjs +16 -16
  17. package/dist/herald.d.mts +2 -3
  18. package/dist/index.d.mts +117 -45
  19. package/dist/index.mjs +522 -360
  20. package/dist/internal/subscription.d.mts +52 -0
  21. package/dist/internal/subscription.mjs +127 -0
  22. package/dist/models.d.mts +5 -1
  23. package/package.json +1 -1
  24. package/src/beacon.ts +32 -117
  25. package/src/color/constants.ts +115 -78
  26. package/src/color/instance.ts +65 -12
  27. package/src/color/misc/alpha.ts +13 -21
  28. package/src/color/misc/format.ts +4 -4
  29. package/src/color/misc/get.ts +23 -40
  30. package/src/color/misc/is.ts +29 -39
  31. package/src/color/misc/state.ts +77 -41
  32. package/src/color/models.ts +94 -1
  33. package/src/color/space/hex.ts +18 -23
  34. package/src/color/space/hsl.ts +16 -24
  35. package/src/color/space/hwb.ts +10 -10
  36. package/src/color/space/rgb.ts +19 -16
  37. package/src/herald.ts +1 -3
  38. package/src/index.ts +1 -0
  39. package/src/internal/subscription.ts +264 -0
  40. package/src/models.ts +5 -0
  41. package/src/string/fuzzy.ts +1 -1
  42. package/src/value/freeze.ts +2 -2
  43. package/src/value/shake.ts +1 -1
  44. package/src/value/transform.ts +1 -1
@@ -1,4 +1,12 @@
1
- import {PROPERTY_COLOR, TYPE_HEX, TYPE_HSL, TYPE_HWB, TYPE_RGB} from './constants';
1
+ import {
2
+ clearSubscriptions,
3
+ getSubscription,
4
+ getSubscriptions,
5
+ type Subscription,
6
+ type SubscriptionProperty,
7
+ type Subscriptions,
8
+ } from '../internal/subscription';
9
+ import {COLOR_PROPERTY, COLOR_TYPE} from './constants';
2
10
  import {getAlpha} from './misc/alpha';
3
11
  import {formatHslColor, formatHwbColor, formatRgbColor} from './misc/format';
4
12
  import {
@@ -13,7 +21,13 @@ import type {Color, ColorState, ColorType} from './models';
13
21
 
14
22
  // #region Types
15
23
 
16
- type SetValue = (state: ColorState, value: any, alpha: boolean) => void;
24
+ type SetValue = (
25
+ color: Color,
26
+ state: ColorState,
27
+ subscriptions: Subscriptions<Function>,
28
+ value: any,
29
+ alpha: boolean,
30
+ ) => void;
17
31
 
18
32
  type SetValues = Record<ColorType, SetValue>;
19
33
 
@@ -24,17 +38,22 @@ type SetValues = Record<ColorType, SetValue>;
24
38
  export function color(value: unknown): Color {
25
39
  const state = getColorState(value);
26
40
 
41
+ const subscriptions = getSubscriptions<Function>(COLOR_TYPE.all);
42
+
27
43
  const instance = {
44
+ subscribe: (first?: unknown, second?: unknown) =>
45
+ subscribeToColor(subscriptions, first, second),
28
46
  toHexString: (alpha?: boolean) =>
29
47
  `#${alpha === true ? (instance as Color).hexa : (instance as Color).hex}`,
30
48
  toHslString: (alpha?: boolean) => formatHslColor(state, alpha),
31
49
  toHwbString: (alpha?: boolean) => formatHwbColor(state, alpha),
32
50
  toRgbString: (alpha?: boolean) => formatRgbColor(state, alpha),
33
51
  toString: () => (instance as Color).toHexString(),
52
+ unsubscribe: () => clearSubscriptions(subscriptions),
34
53
  };
35
54
 
36
55
  Object.defineProperties(instance, {
37
- [PROPERTY_COLOR]: {
56
+ [COLOR_PROPERTY.name]: {
38
57
  enumerable: false,
39
58
  value: true,
40
59
  },
@@ -43,18 +62,18 @@ export function color(value: unknown): Color {
43
62
  get: () => state.alpha.value,
44
63
  set: (value: unknown) => setAlphaValue(state, value),
45
64
  },
46
- hex: getProperty(TYPE_HEX, state, false),
47
- hexa: getProperty(TYPE_HEX, state, true),
48
- hsl: getProperty(TYPE_HSL, state, false),
49
- hsla: getProperty(TYPE_HSL, state, true),
50
- hwb: getProperty(TYPE_HWB, state, false),
51
- hwba: getProperty(TYPE_HWB, state, true),
65
+ hex: getProperty(COLOR_TYPE.hex, instance as Color, state, subscriptions, false),
66
+ hexa: getProperty(COLOR_TYPE.hex, instance as Color, state, subscriptions, true),
67
+ hsl: getProperty(COLOR_TYPE.hsl, instance as Color, state, subscriptions, false),
68
+ hsla: getProperty(COLOR_TYPE.hsl, instance as Color, state, subscriptions, true),
69
+ hwb: getProperty(COLOR_TYPE.hwb, instance as Color, state, subscriptions, false),
70
+ hwba: getProperty(COLOR_TYPE.hwb, instance as Color, state, subscriptions, true),
52
71
  origin: {
53
72
  enumerable: true,
54
73
  get: () => state.origin,
55
74
  },
56
- rgb: getProperty(TYPE_RGB, state, false),
57
- rgba: getProperty(TYPE_RGB, state, true),
75
+ rgb: getProperty(COLOR_TYPE.rgb, instance as Color, state, subscriptions, false),
76
+ rgba: getProperty(COLOR_TYPE.rgb, instance as Color, state, subscriptions, true),
58
77
  });
59
78
 
60
79
  return Object.freeze(instance) as Color;
@@ -62,7 +81,9 @@ export function color(value: unknown): Color {
62
81
 
63
82
  function getProperty(
64
83
  space: keyof typeof setters,
84
+ color: Color,
65
85
  state: ColorState,
86
+ subscriptions: Subscriptions<Function>,
66
87
  alpha: boolean,
67
88
  ): PropertyDescriptor {
68
89
  const setValue = setters[space];
@@ -70,7 +91,7 @@ function getProperty(
70
91
  return {
71
92
  enumerable: true,
72
93
  get: () => getValue(space, state, alpha),
73
- set: (value: unknown) => setValue(state, value, alpha),
94
+ set: (value: unknown) => setValue(color, state, subscriptions, value, alpha),
74
95
  };
75
96
  }
76
97
 
@@ -95,10 +116,42 @@ function setAlphaValue(state: ColorState, value: unknown): void {
95
116
  }
96
117
  }
97
118
 
119
+ function subscribeToColor(
120
+ subscriptions: Subscriptions,
121
+ first: unknown,
122
+ second?: unknown,
123
+ ): Subscription {
124
+ let key: string | undefined;
125
+ let value: Function | undefined;
126
+
127
+ if (typeof first === 'string') {
128
+ key = first;
129
+ value = second as Function;
130
+ } else if (typeof first === 'function') {
131
+ value = first;
132
+ }
133
+
134
+ if (typeof value !== 'function') {
135
+ throw new Error();
136
+ }
137
+
138
+ return getSubscription({
139
+ key,
140
+ subscriptions,
141
+ value,
142
+ property: colorSubscription,
143
+ });
144
+ }
145
+
98
146
  // #endregion
99
147
 
100
148
  // #region Variables
101
149
 
150
+ const colorSubscription: SubscriptionProperty = {
151
+ key: COLOR_PROPERTY.name,
152
+ value: COLOR_PROPERTY.subscription,
153
+ };
154
+
102
155
  const setters: SetValues = {
103
156
  hex: setHexColor,
104
157
  hsl: setHSLColor,
@@ -1,14 +1,6 @@
1
- import {clamp} from '../..';
2
1
  import {round} from '../../internal/math/misc';
3
- import {
4
- ALPHA_FULL_HEX_LONG,
5
- ALPHA_NONE_HEX,
6
- ALPHA_NONE_VALUE,
7
- DEFAULT_ALPHA,
8
- EXPRESSION_ALPHA_HEX,
9
- MAX_HEX,
10
- MAX_PERCENT,
11
- } from '../constants';
2
+ import {clamp} from '../../internal/number';
3
+ import {COLOR_ALPHA, COLOR_DEFAULTS, COLOR_EXPRESSION, COLOR_MAX} from '../constants';
12
4
  import type {Alpha} from '../models';
13
5
 
14
6
  // #region Functions
@@ -18,14 +10,14 @@ export function getAlpha(value: unknown, hex: boolean): Alpha {
18
10
  return getAlphaFromValue(value);
19
11
  }
20
12
 
21
- if (typeof value !== 'string' || value.toLowerCase() === ALPHA_FULL_HEX_LONG) {
22
- return {...DEFAULT_ALPHA};
13
+ if (typeof value !== 'string' || value.toLowerCase() === COLOR_ALPHA.fullHexLong) {
14
+ return {...COLOR_DEFAULTS.alpha};
23
15
  }
24
16
 
25
- if (hex && EXPRESSION_ALPHA_HEX.test(value)) {
17
+ if (hex && COLOR_EXPRESSION.alphaHex.test(value)) {
26
18
  return {
27
19
  hex: value,
28
- value: Number.parseInt(value, 16) / MAX_HEX,
20
+ value: Number.parseInt(value, 16) / COLOR_MAX.hex,
29
21
  };
30
22
  }
31
23
 
@@ -33,15 +25,15 @@ export function getAlpha(value: unknown, hex: boolean): Alpha {
33
25
  }
34
26
 
35
27
  export function getAlphaHexadecimal(value: number): string {
36
- if (value === ALPHA_NONE_VALUE) {
37
- return ALPHA_NONE_HEX;
28
+ if (value === COLOR_ALPHA.noneValue) {
29
+ return COLOR_ALPHA.noneHex;
38
30
  }
39
31
 
40
- if (value === MAX_PERCENT) {
41
- return ALPHA_FULL_HEX_LONG;
32
+ if (value === COLOR_MAX.percent) {
33
+ return COLOR_ALPHA.fullHexLong;
42
34
  }
43
35
 
44
- return round((value / MAX_PERCENT) * MAX_HEX).toString(16);
36
+ return round((value / COLOR_MAX.percent) * COLOR_MAX.hex).toString(16);
45
37
  }
46
38
 
47
39
  function getAlphaFromValue(value: number): Alpha {
@@ -55,10 +47,10 @@ function getAlphaFromValue(value: number): Alpha {
55
47
 
56
48
  export function getAlphaValue(original: number): number {
57
49
  if (Number.isNaN(original)) {
58
- return MAX_PERCENT;
50
+ return COLOR_MAX.percent;
59
51
  }
60
52
 
61
- return clamp(original, ALPHA_NONE_VALUE, MAX_PERCENT);
53
+ return clamp(original, COLOR_ALPHA.noneValue, COLOR_MAX.percent);
62
54
  }
63
55
 
64
56
  // #endregion
@@ -1,23 +1,23 @@
1
- import {TYPE_HSL, TYPE_HWB, TYPE_RGB} from '../constants';
1
+ import {COLOR_TYPE} from '../constants';
2
2
  import type {ColorState} from '../models';
3
3
  import {getColorFromState} from './state';
4
4
 
5
5
  // #region Functions
6
6
 
7
7
  export function formatHslColor(state: ColorState, alpha?: boolean): string {
8
- const {hue, lightness, saturation} = getColorFromState(state, TYPE_HSL);
8
+ const {hue, lightness, saturation} = getColorFromState(state, COLOR_TYPE.hsl);
9
9
 
10
10
  return `hsl(${hue}deg ${saturation}% ${lightness}%${getSuffix(state, alpha)})`;
11
11
  }
12
12
 
13
13
  export function formatHwbColor(state: ColorState, alpha?: boolean): string {
14
- const {blackness, hue, whiteness} = getColorFromState(state, TYPE_HWB);
14
+ const {blackness, hue, whiteness} = getColorFromState(state, COLOR_TYPE.hwb);
15
15
 
16
16
  return `hwb(${hue}deg ${whiteness}% ${blackness}%${getSuffix(state, alpha)})`;
17
17
  }
18
18
 
19
19
  export function formatRgbColor(state: ColorState, alpha?: boolean): string {
20
- const {blue, green, red} = getColorFromState(state, TYPE_RGB);
20
+ const {blue, green, red} = getColorFromState(state, COLOR_TYPE.rgb);
21
21
 
22
22
  return `rgb(${red} ${green} ${blue}${getSuffix(state, alpha)})`;
23
23
  }
@@ -1,25 +1,6 @@
1
1
  import {round} from '../../internal/math/misc';
2
- import {clamp} from '../../number';
3
- import {
4
- HEX_BLACK,
5
- HEX_WHITE,
6
- MAX_DEGREE,
7
- MAX_HEX,
8
- MAX_PERCENT,
9
- SRGB_LUMINANCE_BLUE,
10
- SRGB_LUMINANCE_EXPONENT,
11
- SRGB_LUMINANCE_GREEN,
12
- SRGB_LUMINANCE_MINIMUM,
13
- SRGB_LUMINANCE_MODIFIER,
14
- SRGB_LUMINANCE_MULTIPLIER,
15
- SRGB_LUMINANCE_OFFSET,
16
- SRGB_LUMINANCE_RED,
17
- SRGB_LUMINANCE_THRESHOLD,
18
- TYPE_HEX,
19
- TYPE_HSL,
20
- TYPE_HWB,
21
- TYPE_RGB,
22
- } from '../constants';
2
+ import {clamp} from '../../internal/number';
3
+ import {COLOR_DEFAULTS, COLOR_MAX, COLOR_SRGB, COLOR_TYPE} from '../constants';
23
4
  import {color} from '../instance';
24
5
  import type {Color, HSLAColor, HSLColor, HWBAColor, HWBColor, RGBAColor, RGBColor} from '../models';
25
6
  import {getColorFromState, getColorState} from './state';
@@ -60,30 +41,32 @@ export function getForegroundColor(value: unknown, hex: true): string;
60
41
  export function getForegroundColor(value: unknown): Color;
61
42
 
62
43
  export function getForegroundColor(value: unknown, hex?: unknown): string | Color {
63
- const rgb = getColorFromState(getColorState(value), TYPE_RGB);
44
+ const rgb = getColorFromState(getColorState(value), COLOR_TYPE.rgb);
64
45
  const {blue, green, red} = rgb;
65
46
 
66
- const values = [blue / MAX_HEX, green / MAX_HEX, red / MAX_HEX];
47
+ const values = [blue / COLOR_MAX.hex, green / COLOR_MAX.hex, red / COLOR_MAX.hex];
67
48
  const {length} = values;
68
49
 
69
50
  for (let index = 0; index < length; index += 1) {
70
51
  const color = values[index];
71
52
 
72
- if (color <= SRGB_LUMINANCE_MINIMUM) {
73
- values[index] /= SRGB_LUMINANCE_MULTIPLIER;
53
+ if (color <= COLOR_SRGB.luminanceMinimum) {
54
+ values[index] /= COLOR_SRGB.luminanceMultiplier;
74
55
  } else {
75
56
  values[index] =
76
- ((color + SRGB_LUMINANCE_OFFSET) / SRGB_LUMINANCE_MODIFIER) ** SRGB_LUMINANCE_EXPONENT;
57
+ ((color + COLOR_SRGB.luminanceOffset) / COLOR_SRGB.luminanceModifier) **
58
+ COLOR_SRGB.luminanceExponent;
77
59
  }
78
60
  }
79
61
 
80
62
  const luminance =
81
- SRGB_LUMINANCE_RED * values[2] +
82
- SRGB_LUMINANCE_GREEN * values[1] +
83
- SRGB_LUMINANCE_BLUE * values[0];
63
+ COLOR_SRGB.luminanceRed * values[2] +
64
+ COLOR_SRGB.luminanceGreen * values[1] +
65
+ COLOR_SRGB.luminanceBlue * values[0];
84
66
 
85
67
  // Rudimentary and ureliable?; implement APCA for more reliable results?
86
- const foreground = luminance > SRGB_LUMINANCE_THRESHOLD ? HEX_BLACK : HEX_WHITE;
68
+ const foreground =
69
+ luminance > COLOR_SRGB.luminanceThreshold ? COLOR_DEFAULTS.hexBlack : COLOR_DEFAULTS.hexWhite;
87
70
 
88
71
  return hex === true ? foreground : color(foreground);
89
72
  }
@@ -113,15 +96,15 @@ export function getHexaColor(value: unknown): string {
113
96
  * @returns Hex color string
114
97
  */
115
98
  export function getHexColor(value: unknown): string {
116
- return getColorFromState(getColorState(value), TYPE_HEX);
99
+ return getColorFromState(getColorState(value), COLOR_TYPE.hex);
117
100
  }
118
101
 
119
102
  export function getHexValue(value: unknown): number {
120
- return getClampedValue(value, 0, MAX_HEX, true);
103
+ return getClampedValue(value, 0, COLOR_MAX.hex, true);
121
104
  }
122
105
 
123
106
  export function getDegrees(value: unknown): number {
124
- return getClampedValue(value, 0, MAX_DEGREE);
107
+ return getClampedValue(value, 0, COLOR_MAX.degree);
125
108
  }
126
109
 
127
110
  /**
@@ -135,7 +118,7 @@ export function getDegrees(value: unknown): number {
135
118
  */
136
119
  export function getHslaColor(value: unknown): HSLAColor {
137
120
  const state = getColorState(value);
138
- const hsl = getColorFromState(state, TYPE_HSL);
121
+ const hsl = getColorFromState(state, COLOR_TYPE.hsl);
139
122
 
140
123
  return {
141
124
  ...hsl,
@@ -153,7 +136,7 @@ export function getHslaColor(value: unknown): HSLAColor {
153
136
  * @returns _HWB_ color
154
137
  */
155
138
  export function getHwbColor(value: unknown): HWBColor {
156
- return getColorFromState(getColorState(value), TYPE_HWB);
139
+ return getColorFromState(getColorState(value), COLOR_TYPE.hwb);
157
140
  }
158
141
 
159
142
  /**
@@ -167,7 +150,7 @@ export function getHwbColor(value: unknown): HWBColor {
167
150
  */
168
151
  export function getHwbaColor(value: unknown): HWBAColor {
169
152
  const state = getColorState(value);
170
- const hwb = getColorFromState(state, TYPE_HWB);
153
+ const hwb = getColorFromState(state, COLOR_TYPE.hwb);
171
154
 
172
155
  return {
173
156
  ...hwb,
@@ -185,11 +168,11 @@ export function getHwbaColor(value: unknown): HWBAColor {
185
168
  * @returns _HSL_ color
186
169
  */
187
170
  export function getHslColor(value: unknown): HSLColor {
188
- return getColorFromState(getColorState(value), TYPE_HSL);
171
+ return getColorFromState(getColorState(value), COLOR_TYPE.hsl);
189
172
  }
190
173
 
191
174
  export function getPercentage(value: unknown): number {
192
- return getClampedValue(value, 0, MAX_PERCENT);
175
+ return getClampedValue(value, 0, COLOR_MAX.percent);
193
176
  }
194
177
 
195
178
  /**
@@ -203,7 +186,7 @@ export function getPercentage(value: unknown): number {
203
186
  */
204
187
  export function getRgbaColor(value: unknown): RGBAColor {
205
188
  const state = getColorState(value);
206
- const rgb = getColorFromState(state, TYPE_RGB);
189
+ const rgb = getColorFromState(state, COLOR_TYPE.rgb);
207
190
 
208
191
  return {
209
192
  ...rgb,
@@ -221,7 +204,7 @@ export function getRgbaColor(value: unknown): RGBAColor {
221
204
  * @returns _RGB_ color
222
205
  */
223
206
  export function getRgbColor(value: unknown): RGBColor {
224
- return getColorFromState(getColorState(value), TYPE_RGB);
207
+ return getColorFromState(getColorState(value), COLOR_TYPE.rgb);
225
208
  }
226
209
 
227
210
  // #endregion
@@ -1,22 +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
- ALPHA_NONE_VALUE,
5
- EXPRESSION_HEX_LONG,
6
- EXPRESSION_HEX_SHORT,
7
- EXPRESSION_PREFIX,
8
- KEYS_HSL,
9
- KEYS_HSLA,
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,
19
- PROPERTY_COLOR,
5
+ COLOR_ALPHA,
6
+ COLOR_EXPRESSION,
7
+ COLOR_KEYS,
8
+ COLOR_LENGTHS,
9
+ COLOR_MAX,
10
+ COLOR_PROPERTY,
20
11
  } from '../constants';
21
12
  import type {Color} from '../index';
22
13
  import type {
@@ -36,11 +27,11 @@ function hasKeys(value: unknown, keys: ColorProperty[]): boolean {
36
27
  }
37
28
 
38
29
  function isAlpha(value: unknown): value is number {
39
- return typeof value === 'number' && between(value, ALPHA_NONE_VALUE, MAX_PERCENT);
30
+ return typeof value === 'number' && between(value, COLOR_ALPHA.noneValue, COLOR_MAX.percent);
40
31
  }
41
32
 
42
33
  function isBytey(value: unknown): value is number {
43
- return typeof value === 'number' && between(value, 0, MAX_HEX);
34
+ return typeof value === 'number' && between(value, 0, COLOR_MAX.hex);
44
35
  }
45
36
 
46
37
  /**
@@ -51,10 +42,7 @@ function isBytey(value: unknown): value is number {
51
42
  */
52
43
  export function isColor(value: unknown): value is Color {
53
44
  return (
54
- typeof value === 'object' &&
55
- value !== null &&
56
- PROPERTY_COLOR in value &&
57
- value[PROPERTY_COLOR] === true
45
+ isPlainObject(value) && COLOR_PROPERTY.name in value && value[COLOR_PROPERTY.name] === true
58
46
  );
59
47
  }
60
48
 
@@ -87,7 +75,7 @@ function isColorValue(obj: unknown, properties: ColorProperty[]): boolean {
87
75
  }
88
76
 
89
77
  function isDegree(value: unknown): value is number {
90
- return typeof value === 'number' && between(value, 0, MAX_DEGREE);
78
+ return typeof value === 'number' && between(value, 0, COLOR_MAX.degree);
91
79
  }
92
80
 
93
81
  /**
@@ -111,14 +99,16 @@ export function isHexColor(value: unknown, alpha?: boolean): value is string {
111
99
  return false;
112
100
  }
113
101
 
114
- if (!(EXPRESSION_HEX_SHORT.test(value) || EXPRESSION_HEX_LONG.test(value))) {
102
+ if (!(COLOR_EXPRESSION.hexShort.test(value) || COLOR_EXPRESSION.hexLong.test(value))) {
115
103
  return false;
116
104
  }
117
105
 
118
106
  if (alpha === false) {
119
- const unprefixed = value.replace(EXPRESSION_PREFIX, '');
107
+ const unprefixed = value.replace(COLOR_EXPRESSION.prefix, '');
120
108
 
121
- return unprefixed.length === LENGTH_SHORT || unprefixed.length === LENGTH_LONG;
109
+ return (
110
+ unprefixed.length === COLOR_LENGTHS.hexShort || unprefixed.length === COLOR_LENGTHS.hexLong
111
+ );
122
112
  }
123
113
 
124
114
  return true;
@@ -131,11 +121,11 @@ export function isHexColor(value: unknown, alpha?: boolean): value is string {
131
121
  * @returns `true` if the value is an _HSLA_ color, otherwise `false`
132
122
  */
133
123
  export function isHslaColor(value: unknown): value is HSLAColor {
134
- return isColorValue(value, KEYS_HSLA);
124
+ return isColorValue(value, COLOR_KEYS.hsla);
135
125
  }
136
126
 
137
127
  export function isHslaLike(value: unknown): value is Record<keyof HSLAColor, unknown> {
138
- return hasKeys(value, KEYS_HSLA);
128
+ return hasKeys(value, COLOR_KEYS.hsla);
139
129
  }
140
130
 
141
131
  /**
@@ -145,11 +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, KEYS_HSLA) || isColorValue(value, KEYS_HSL);
138
+ return isColorValue(value, COLOR_KEYS.hsla) || isColorValue(value, COLOR_KEYS.hsl);
149
139
  }
150
140
 
151
141
  export function isHslLike(value: unknown): value is Record<keyof HSLColor, unknown> {
152
- return hasKeys(value, KEYS_HSL);
142
+ return hasKeys(value, COLOR_KEYS.hsl);
153
143
  }
154
144
 
155
145
  /**
@@ -159,11 +149,11 @@ export function isHslLike(value: unknown): value is Record<keyof HSLColor, unkno
159
149
  * @returns `true` if the value is an _HWBA_ color, otherwise `false`
160
150
  */
161
151
  export function isHwbaColor(value: unknown): value is HWBAColor {
162
- return isColorValue(value, KEYS_HWBA);
152
+ return isColorValue(value, COLOR_KEYS.hwba);
163
153
  }
164
154
 
165
155
  export function isHwbaLike(value: unknown): value is Record<keyof HWBAColor, unknown> {
166
- return hasKeys(value, KEYS_HWBA);
156
+ return hasKeys(value, COLOR_KEYS.hwba);
167
157
  }
168
158
 
169
159
  /**
@@ -173,11 +163,11 @@ export function isHwbaLike(value: unknown): value is Record<keyof HWBAColor, unk
173
163
  * @returns `true` if the value is an _HWB_ color, otherwise `false`
174
164
  */
175
165
  export function isHwbColor(value: unknown): value is HWBColor {
176
- return isColorValue(value, KEYS_HWB) || isColorValue(value, KEYS_HWBA);
166
+ return isColorValue(value, COLOR_KEYS.hwb) || isColorValue(value, COLOR_KEYS.hwba);
177
167
  }
178
168
 
179
169
  export function isHwbLike(value: unknown): value is Record<keyof HWBColor, unknown> {
180
- return hasKeys(value, KEYS_HWB);
170
+ return hasKeys(value, COLOR_KEYS.hwb);
181
171
  }
182
172
 
183
173
  /**
@@ -187,11 +177,11 @@ export function isHwbLike(value: unknown): value is Record<keyof HWBColor, unkno
187
177
  * @returns `true` if the value is an _RGBA_ color, otherwise `false`
188
178
  */
189
179
  export function isRgbaColor(value: unknown): value is RGBAColor {
190
- return isColorValue(value, KEYS_RGBA);
180
+ return isColorValue(value, COLOR_KEYS.rgba);
191
181
  }
192
182
 
193
183
  export function isRgbaLike(value: unknown): value is Record<keyof RGBAColor, unknown> {
194
- return hasKeys(value, KEYS_RGBA);
184
+ return hasKeys(value, COLOR_KEYS.rgba);
195
185
  }
196
186
 
197
187
  /**
@@ -201,15 +191,15 @@ export function isRgbaLike(value: unknown): value is Record<keyof RGBAColor, unk
201
191
  * @returns `true` if the value is an _RGB_ color, otherwise `false`
202
192
  */
203
193
  export function isRgbColor(value: unknown): value is RGBColor {
204
- return isColorValue(value, KEYS_RGBA) || isColorValue(value, KEYS_RGB);
194
+ return isColorValue(value, COLOR_KEYS.rgba) || isColorValue(value, COLOR_KEYS.rgb);
205
195
  }
206
196
 
207
197
  export function isRgbLike(value: unknown): value is Record<keyof RGBColor, unknown> {
208
- return hasKeys(value, KEYS_RGB);
198
+ return hasKeys(value, COLOR_KEYS.rgb);
209
199
  }
210
200
 
211
201
  function isPercentage(value: unknown): value is number {
212
- return typeof value === 'number' && between(value, 0, MAX_PERCENT);
202
+ return typeof value === 'number' && between(value, 0, COLOR_MAX.percent);
213
203
  }
214
204
 
215
205
  // #endregion