@oscarpalmer/atoms 0.190.0 → 0.191.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 (42) hide show
  1. package/dist/color/constants.d.mts +7 -1
  2. package/dist/color/constants.mjs +7 -1
  3. package/dist/color/index.d.mts +3 -3
  4. package/dist/color/index.mjs +2 -2
  5. package/dist/color/instance.mjs +27 -25
  6. package/dist/color/misc/alpha.d.mts +1 -1
  7. package/dist/color/misc/alpha.mjs +10 -7
  8. package/dist/color/misc/format.d.mts +7 -0
  9. package/dist/color/misc/format.mjs +20 -0
  10. package/dist/color/misc/get.mjs +16 -16
  11. package/dist/color/misc/is.d.mts +0 -36
  12. package/dist/color/misc/is.mjs +1 -37
  13. package/dist/color/misc/state.d.mts +3 -2
  14. package/dist/color/misc/state.mjs +69 -83
  15. package/dist/color/models.d.mts +28 -5
  16. package/dist/color/space/hex.d.mts +3 -2
  17. package/dist/color/space/hex.mjs +13 -1
  18. package/dist/color/space/hsl.d.mts +3 -2
  19. package/dist/color/space/hsl.mjs +13 -1
  20. package/dist/color/space/hwb.d.mts +3 -2
  21. package/dist/color/space/hwb.mjs +13 -1
  22. package/dist/color/space/rgb.d.mts +3 -2
  23. package/dist/color/space/rgb.mjs +14 -2
  24. package/dist/index.d.mts +23 -29
  25. package/dist/index.mjs +198 -184
  26. package/package.json +4 -4
  27. package/src/color/constants.ts +12 -0
  28. package/src/color/index.ts +26 -8
  29. package/src/color/instance.ts +60 -45
  30. package/src/color/misc/alpha.ts +12 -6
  31. package/src/color/misc/format.ts +29 -0
  32. package/src/color/misc/get.ts +20 -13
  33. package/src/color/misc/is.ts +7 -37
  34. package/src/color/misc/state.ts +115 -127
  35. package/src/color/models.ts +32 -4
  36. package/src/color/space/hex.ts +34 -1
  37. package/src/color/space/hsl.ts +40 -2
  38. package/src/color/space/hwb.ts +32 -2
  39. package/src/color/space/rgb.ts +33 -3
  40. package/dist/color/misc/index.d.mts +0 -7
  41. package/dist/color/misc/index.mjs +0 -15
  42. package/src/color/misc/index.ts +0 -29
@@ -8,6 +8,7 @@ declare const DEFAULT_ALPHA: Alpha;
8
8
  declare const DEFAULT_HSL: HSLColor;
9
9
  declare const DEFAULT_HWB: HWBColor;
10
10
  declare const DEFAULT_RGB: RGBColor;
11
+ declare const EXPRESSION_ALPHA_HEX: RegExp;
11
12
  declare const EXPRESSION_HEX_LONG: RegExp;
12
13
  declare const EXPRESSION_HEX_SHORT: RegExp;
13
14
  declare const EXPRESSION_PREFIX: RegExp;
@@ -24,6 +25,11 @@ declare const KEYS_RGBA: Array<keyof RGBAColor>;
24
25
  declare const MAX_DEGREE = 360;
25
26
  declare const MAX_HEX = 255;
26
27
  declare const MAX_PERCENT = 100;
28
+ declare const PROPERTY_COLOR = "$color";
29
+ declare const TYPE_HEX = "hex";
30
+ declare const TYPE_HSL = "hsl";
31
+ declare const TYPE_HWB = "hwb";
32
+ declare const TYPE_RGB = "rgb";
27
33
  declare const SRGB_LUMINANCE_BLUE = 0.0722;
28
34
  declare const SRGB_LUMINANCE_EXPONENT = 2.4;
29
35
  declare const SRGB_LUMINANCE_GREEN = 0.7152;
@@ -34,4 +40,4 @@ declare const SRGB_LUMINANCE_OFFSET = 0.055;
34
40
  declare const SRGB_LUMINANCE_RED = 0.2126;
35
41
  declare const SRGB_LUMINANCE_THRESHOLD = 0.625;
36
42
  //#endregion
37
- export { ALPHA_FULL_HEX_LONG, ALPHA_FULL_HEX_SHORT, ALPHA_NONE_HEX, ALPHA_NONE_VALUE, DEFAULT_ALPHA, DEFAULT_HSL, DEFAULT_HWB, DEFAULT_RGB, EXPRESSION_HEX_LONG, EXPRESSION_HEX_SHORT, EXPRESSION_PREFIX, HEX_BLACK, HEX_WHITE, KEYS_HSL, KEYS_HSLA, KEYS_HWB, KEYS_HWBA, KEYS_RGB, KEYS_RGBA, LENGTH_LONG, LENGTH_SHORT, MAX_DEGREE, MAX_HEX, MAX_PERCENT, SRGB_LUMINANCE_BLUE, SRGB_LUMINANCE_EXPONENT, SRGB_LUMINANCE_GREEN, SRGB_LUMINANCE_MINIMUM, SRGB_LUMINANCE_MODIFIER, SRGB_LUMINANCE_MULTIPLIER, SRGB_LUMINANCE_OFFSET, SRGB_LUMINANCE_RED, SRGB_LUMINANCE_THRESHOLD };
43
+ export { ALPHA_FULL_HEX_LONG, ALPHA_FULL_HEX_SHORT, ALPHA_NONE_HEX, ALPHA_NONE_VALUE, DEFAULT_ALPHA, DEFAULT_HSL, DEFAULT_HWB, DEFAULT_RGB, EXPRESSION_ALPHA_HEX, EXPRESSION_HEX_LONG, EXPRESSION_HEX_SHORT, EXPRESSION_PREFIX, HEX_BLACK, HEX_WHITE, KEYS_HSL, KEYS_HSLA, KEYS_HWB, KEYS_HWBA, KEYS_RGB, KEYS_RGBA, LENGTH_LONG, LENGTH_SHORT, MAX_DEGREE, MAX_HEX, MAX_PERCENT, PROPERTY_COLOR, SRGB_LUMINANCE_BLUE, SRGB_LUMINANCE_EXPONENT, SRGB_LUMINANCE_GREEN, SRGB_LUMINANCE_MINIMUM, SRGB_LUMINANCE_MODIFIER, SRGB_LUMINANCE_MULTIPLIER, SRGB_LUMINANCE_OFFSET, SRGB_LUMINANCE_RED, SRGB_LUMINANCE_THRESHOLD, TYPE_HEX, TYPE_HSL, TYPE_HWB, TYPE_RGB };
@@ -22,6 +22,7 @@ const DEFAULT_RGB = {
22
22
  green: 0,
23
23
  red: 0
24
24
  };
25
+ const EXPRESSION_ALPHA_HEX = /^([a-f0-9]{1,2})$/i;
25
26
  const EXPRESSION_HEX_LONG = /^#?([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?$/i;
26
27
  const EXPRESSION_HEX_SHORT = /^#?([a-f0-9]{3,4})$/i;
27
28
  const EXPRESSION_PREFIX = /^#/;
@@ -50,6 +51,11 @@ const KEYS_RGBA = [...KEYS_RGB, "alpha"];
50
51
  const MAX_DEGREE = 360;
51
52
  const MAX_HEX = 255;
52
53
  const MAX_PERCENT = 100;
54
+ const PROPERTY_COLOR = "$color";
55
+ const TYPE_HEX = "hex";
56
+ const TYPE_HSL = "hsl";
57
+ const TYPE_HWB = "hwb";
58
+ const TYPE_RGB = "rgb";
53
59
  const SRGB_LUMINANCE_BLUE = .0722;
54
60
  const SRGB_LUMINANCE_EXPONENT = 2.4;
55
61
  const SRGB_LUMINANCE_GREEN = .7152;
@@ -60,4 +66,4 @@ const SRGB_LUMINANCE_OFFSET = .055;
60
66
  const SRGB_LUMINANCE_RED = .2126;
61
67
  const SRGB_LUMINANCE_THRESHOLD = .625;
62
68
  //#endregion
63
- export { ALPHA_FULL_HEX_LONG, ALPHA_FULL_HEX_SHORT, ALPHA_NONE_HEX, ALPHA_NONE_VALUE, DEFAULT_ALPHA, DEFAULT_HSL, DEFAULT_HWB, DEFAULT_RGB, EXPRESSION_HEX_LONG, EXPRESSION_HEX_SHORT, EXPRESSION_PREFIX, HEX_BLACK, HEX_WHITE, KEYS_HSL, KEYS_HSLA, KEYS_HWB, KEYS_HWBA, KEYS_RGB, KEYS_RGBA, LENGTH_LONG, LENGTH_SHORT, MAX_DEGREE, MAX_HEX, MAX_PERCENT, SRGB_LUMINANCE_BLUE, SRGB_LUMINANCE_EXPONENT, SRGB_LUMINANCE_GREEN, SRGB_LUMINANCE_MINIMUM, SRGB_LUMINANCE_MODIFIER, SRGB_LUMINANCE_MULTIPLIER, SRGB_LUMINANCE_OFFSET, SRGB_LUMINANCE_RED, SRGB_LUMINANCE_THRESHOLD };
69
+ export { ALPHA_FULL_HEX_LONG, ALPHA_FULL_HEX_SHORT, ALPHA_NONE_HEX, ALPHA_NONE_VALUE, DEFAULT_ALPHA, DEFAULT_HSL, DEFAULT_HWB, DEFAULT_RGB, EXPRESSION_ALPHA_HEX, EXPRESSION_HEX_LONG, EXPRESSION_HEX_SHORT, EXPRESSION_PREFIX, HEX_BLACK, HEX_WHITE, KEYS_HSL, KEYS_HSLA, KEYS_HWB, KEYS_HWBA, KEYS_RGB, KEYS_RGBA, LENGTH_LONG, LENGTH_SHORT, MAX_DEGREE, MAX_HEX, MAX_PERCENT, PROPERTY_COLOR, SRGB_LUMINANCE_BLUE, SRGB_LUMINANCE_EXPONENT, SRGB_LUMINANCE_GREEN, SRGB_LUMINANCE_MINIMUM, SRGB_LUMINANCE_MODIFIER, SRGB_LUMINANCE_MULTIPLIER, SRGB_LUMINANCE_OFFSET, SRGB_LUMINANCE_RED, SRGB_LUMINANCE_THRESHOLD, TYPE_HEX, TYPE_HSL, TYPE_HWB, TYPE_RGB };
@@ -1,6 +1,6 @@
1
- import { Color, HSLAColor, HSLColor, HWBAColor, HWBColor, RGBAColor, RGBColor } from "./models.mjs";
1
+ import { Color, ColorType, ColorTypeExtended, ColorValue, ColorValueExtended, HSLAColor, HSLColor, HWBAColor, HWBColor, RGBAColor, RGBColor } from "./models.mjs";
2
2
  import { getForegroundColor, getHexColor, getHexaColor, getHslColor, getHslaColor, getHwbColor, getHwbaColor, getRgbColor, getRgbaColor } from "./misc/get.mjs";
3
- import { isColor, isHexColor, isHslColor, isHslLike, isHslaColor, isHwbColor, isHwbLike, isHwbaColor, isHwbaLike, isRgbColor, isRgbLike, isRgbaColor } from "./misc/is.mjs";
3
+ import { isColor, isHexColor, isHslColor, isHslaColor, isHwbColor, isHwbaColor, isRgbColor, isRgbaColor } from "./misc/is.mjs";
4
4
  import { getNormalizedHex, hexToHsl, hexToHsla, hexToHwb, hexToHwba, hexToRgb, hexToRgba } from "./space/hex.mjs";
5
5
  import { hslToHex, hslToHwb, hslToHwba, hslToRgb, hslToRgba } from "./space/hsl.mjs";
6
6
  import { hwbToHex, hwbToHsl, hwbToHsla, hwbToRgb, hwbToRgba } from "./space/hwb.mjs";
@@ -17,4 +17,4 @@ import { rgbToHex, rgbToHsl, rgbToHsla, rgbToHwb, rgbToHwba } from "./space/rgb.
17
17
  */
18
18
  declare function getColor(value: unknown): Color;
19
19
  //#endregion
20
- export { type Color, type HSLAColor, type HSLColor, type HWBAColor, type HWBColor, type RGBAColor, type RGBColor, getColor, getForegroundColor, getHexColor, getHexaColor, getHslColor, getHslaColor, getHwbColor, getHwbaColor, getNormalizedHex, getRgbColor, getRgbaColor, hexToHsl, hexToHsla, hexToHwb, hexToHwba, hexToRgb, hexToRgba, hslToHex, hslToHwb, hslToHwba, hslToRgb, hslToRgba, hwbToHex, hwbToHsl, hwbToHsla, hwbToRgb, hwbToRgba, isColor, isHexColor, isHslColor, isHslLike, isHslaColor, isHwbColor, isHwbLike, isHwbaColor, isHwbaLike, isRgbColor, isRgbLike, isRgbaColor, rgbToHex, rgbToHsl, rgbToHsla, rgbToHwb, rgbToHwba };
20
+ export { type Color, type ColorType, type ColorTypeExtended, type ColorValue, type ColorValueExtended, type HSLAColor, type HSLColor, type HWBAColor, type HWBColor, type RGBAColor, type RGBColor, getColor, getForegroundColor, getHexColor, getHexaColor, getHslColor, getHslaColor, getHwbColor, getHwbaColor, getNormalizedHex, getRgbColor, getRgbaColor, hexToHsl, hexToHsla, hexToHwb, hexToHwba, hexToRgb, hexToRgba, hslToHex, hslToHwb, hslToHwba, hslToRgb, hslToRgba, hwbToHex, hwbToHsl, hwbToHsla, hwbToRgb, hwbToRgba, isColor, isHexColor, isHslColor, isHslaColor, isHwbColor, isHwbaColor, isRgbColor, isRgbaColor, rgbToHex, rgbToHsl, rgbToHsla, rgbToHwb, rgbToHwba };
@@ -1,5 +1,5 @@
1
1
  import { getForegroundColor, getHexColor, getHexaColor, getHslColor, getHslaColor, getHwbColor, getHwbaColor, getRgbColor, getRgbaColor } from "./misc/get.mjs";
2
- import { isColor, isHexColor, isHslColor, isHslLike, isHslaColor, isHwbColor, isHwbLike, isHwbaColor, isHwbaLike, isRgbColor, isRgbLike, isRgbaColor } from "./misc/is.mjs";
2
+ import { isColor, isHexColor, isHslColor, isHslaColor, isHwbColor, isHwbaColor, isRgbColor, isRgbaColor } from "./misc/is.mjs";
3
3
  import { rgbToHex, rgbToHsl, rgbToHsla, rgbToHwb, rgbToHwba } from "./space/rgb.mjs";
4
4
  import { getNormalizedHex, hexToHsl, hexToHsla, hexToHwb, hexToHwba, hexToRgb, hexToRgba } from "./space/hex.mjs";
5
5
  import { hslToHex, hslToHwb, hslToHwba, hslToRgb, hslToRgba } from "./space/hsl.mjs";
@@ -19,4 +19,4 @@ function getColor(value) {
19
19
  return isColor(value) ? value : color(value);
20
20
  }
21
21
  //#endregion
22
- export { getColor, getForegroundColor, getHexColor, getHexaColor, getHslColor, getHslaColor, getHwbColor, getHwbaColor, getNormalizedHex, getRgbColor, getRgbaColor, hexToHsl, hexToHsla, hexToHwb, hexToHwba, hexToRgb, hexToRgba, hslToHex, hslToHwb, hslToHwba, hslToRgb, hslToRgba, hwbToHex, hwbToHsl, hwbToHsla, hwbToRgb, hwbToRgba, isColor, isHexColor, isHslColor, isHslLike, isHslaColor, isHwbColor, isHwbLike, isHwbaColor, isHwbaLike, isRgbColor, isRgbLike, isRgbaColor, rgbToHex, rgbToHsl, rgbToHsla, rgbToHwb, rgbToHwba };
22
+ export { getColor, getForegroundColor, getHexColor, getHexaColor, getHslColor, getHslaColor, getHwbColor, getHwbaColor, getNormalizedHex, getRgbColor, getRgbaColor, hexToHsl, hexToHsla, hexToHwb, hexToHwba, hexToRgb, hexToRgba, hslToHex, hslToHwb, hslToHwba, hslToRgb, hslToRgba, hwbToHex, hwbToHsl, hwbToHsla, hwbToRgb, hwbToRgba, isColor, isHexColor, isHslColor, isHslaColor, isHwbColor, isHwbaColor, isRgbColor, isRgbaColor, rgbToHex, rgbToHsl, rgbToHsla, rgbToHwb, rgbToHwba };
@@ -1,27 +1,26 @@
1
- import { formatHslColor, formatHwbColor, formatRgbColor } from "./misc/index.mjs";
1
+ import { PROPERTY_COLOR } from "./constants.mjs";
2
2
  import { getAlpha } from "./misc/alpha.mjs";
3
- import { getColorState, setHSLColor, setHWBColor, setHexColor, setRGBColor } from "./misc/state.mjs";
3
+ import { getColorFromState, getColorState, setHSLColor, setHWBColor, setHexColor, setRGBColor } from "./misc/state.mjs";
4
+ import { formatHslColor, formatHwbColor, formatRgbColor } from "./misc/format.mjs";
4
5
  //#region src/color/instance.ts
5
6
  function color(value) {
6
7
  const state = getColorState(value);
7
8
  const instance = {
8
9
  toHexString: (alpha) => `#${alpha === true ? instance.hexa : instance.hex}`,
9
- toHslString: (alpha) => formatHslColor(state, alpha === true),
10
- toHwbString: (alpha) => formatHwbColor(state, alpha === true),
11
- toRgbString: (alpha) => formatRgbColor(state, alpha === true),
10
+ toHslString: (alpha) => formatHslColor(state, alpha),
11
+ toHwbString: (alpha) => formatHwbColor(state, alpha),
12
+ toRgbString: (alpha) => formatRgbColor(state, alpha),
12
13
  toString: () => instance.toHexString()
13
14
  };
14
15
  Object.defineProperties(instance, {
15
- $color: {
16
+ [PROPERTY_COLOR]: {
16
17
  enumerable: false,
17
- get: () => true
18
+ value: true
18
19
  },
19
20
  alpha: {
20
21
  enumerable: true,
21
22
  get: () => state.alpha.value,
22
- set: (value) => {
23
- if (typeof value === "number" && !Number.isNaN(value)) state.alpha = getAlpha(value);
24
- }
23
+ set: (value) => setAlphaValue(state, value)
25
24
  },
26
25
  hex: getProperty("hex", state, false),
27
26
  hexa: getProperty("hex", state, true),
@@ -29,31 +28,34 @@ function color(value) {
29
28
  hsla: getProperty("hsl", state, true),
30
29
  hwb: getProperty("hwb", state, false),
31
30
  hwba: getProperty("hwb", state, true),
31
+ origin: {
32
+ enumerable: true,
33
+ get: () => state.origin
34
+ },
32
35
  rgb: getProperty("rgb", state, false),
33
36
  rgba: getProperty("rgb", state, true)
34
37
  });
35
38
  return Object.freeze(instance);
36
39
  }
37
- function getHex(state, alpha) {
38
- return alpha ? `${state.hex}${state.alpha.hex}` : state.hex;
39
- }
40
40
  function getProperty(space, state, alpha) {
41
- const setter = setters[space];
41
+ const setValue = setters[space];
42
42
  return {
43
43
  enumerable: true,
44
- get: () => {
45
- const value = state[space];
46
- if (typeof value === "string") return getHex(state, alpha);
47
- return alpha ? {
48
- ...value,
49
- alpha: state.alpha.value
50
- } : { ...value };
51
- },
52
- set: (value) => {
53
- setter(state, value, alpha);
54
- }
44
+ get: () => getValue(space, state, alpha),
45
+ set: (value) => setValue(state, value, alpha)
55
46
  };
56
47
  }
48
+ function getValue(space, state, alpha) {
49
+ const value = getColorFromState(state, space);
50
+ if (typeof value === "string") return alpha ? `${value}${state.alpha.hex}` : value;
51
+ return alpha ? {
52
+ ...value,
53
+ alpha: state.alpha.value
54
+ } : { ...value };
55
+ }
56
+ function setAlphaValue(state, value) {
57
+ if (typeof value === "number" && !Number.isNaN(value)) state.alpha = getAlpha(value, false);
58
+ }
57
59
  const setters = {
58
60
  hex: setHexColor,
59
61
  hsl: setHSLColor,
@@ -1,6 +1,6 @@
1
1
  import { Alpha } from "../models.mjs";
2
2
  //#region src/color/misc/alpha.d.ts
3
- declare function getAlpha(value: unknown): Alpha;
3
+ declare function getAlpha(value: unknown, hex: boolean): Alpha;
4
4
  declare function getAlphaHexadecimal(value: number): string;
5
5
  declare function getAlphaValue(original: number): number;
6
6
  //#endregion
@@ -1,18 +1,21 @@
1
+ import { clamp } from "../../internal/number.mjs";
2
+ import { ALPHA_FULL_HEX_LONG, DEFAULT_ALPHA, EXPRESSION_ALPHA_HEX } from "../constants.mjs";
1
3
  import { round } from "../../internal/math/misc.mjs";
2
- import { ALPHA_FULL_HEX_LONG, DEFAULT_ALPHA } from "../constants.mjs";
4
+ import "../../index.mjs";
3
5
  //#region src/color/misc/alpha.ts
4
- function getAlpha(value) {
6
+ function getAlpha(value, hex) {
5
7
  if (typeof value === "number") return getAlphaFromValue(value);
6
- if (typeof value === "string" && value !== ALPHA_FULL_HEX_LONG) return {
8
+ if (typeof value !== "string" || value.toLowerCase() === ALPHA_FULL_HEX_LONG) return { ...DEFAULT_ALPHA };
9
+ if (hex && EXPRESSION_ALPHA_HEX.test(value)) return {
7
10
  hex: value,
8
11
  value: Number.parseInt(value, 16) / 255
9
12
  };
10
- return { ...DEFAULT_ALPHA };
13
+ return getAlphaFromValue(Number.parseFloat(value));
11
14
  }
12
15
  function getAlphaHexadecimal(value) {
13
16
  if (value === 0) return "00";
14
17
  if (value === 100) return ALPHA_FULL_HEX_LONG;
15
- return round(value * 255).toString(16);
18
+ return round(value / 100 * 255).toString(16);
16
19
  }
17
20
  function getAlphaFromValue(value) {
18
21
  const alpha = getAlphaValue(value);
@@ -22,8 +25,8 @@ function getAlphaFromValue(value) {
22
25
  };
23
26
  }
24
27
  function getAlphaValue(original) {
25
- if (Number.isNaN(original) || original >= 100) return 100;
26
- return original <= 0 ? 0 : original;
28
+ if (Number.isNaN(original)) return 100;
29
+ return clamp(original, 0, 100);
27
30
  }
28
31
  //#endregion
29
32
  export { getAlpha, getAlphaHexadecimal, getAlphaValue };
@@ -0,0 +1,7 @@
1
+ import { ColorState } from "../models.mjs";
2
+ //#region src/color/misc/format.d.ts
3
+ declare function formatHslColor(state: ColorState, alpha?: boolean): string;
4
+ declare function formatHwbColor(state: ColorState, alpha?: boolean): string;
5
+ declare function formatRgbColor(state: ColorState, alpha?: boolean): string;
6
+ //#endregion
7
+ export { formatHslColor, formatHwbColor, formatRgbColor };
@@ -0,0 +1,20 @@
1
+ import "../constants.mjs";
2
+ import { getColorFromState } from "./state.mjs";
3
+ //#region src/color/misc/format.ts
4
+ function formatHslColor(state, alpha) {
5
+ const { hue, lightness, saturation } = getColorFromState(state, "hsl");
6
+ return `hsl(${hue}deg ${saturation}% ${lightness}%${getSuffix(state, alpha)})`;
7
+ }
8
+ function formatHwbColor(state, alpha) {
9
+ const { blackness, hue, whiteness } = getColorFromState(state, "hwb");
10
+ return `hwb(${hue}deg ${whiteness}% ${blackness}%${getSuffix(state, alpha)})`;
11
+ }
12
+ function formatRgbColor(state, alpha) {
13
+ const { blue, green, red } = getColorFromState(state, "rgb");
14
+ return `rgb(${red} ${green} ${blue}${getSuffix(state, alpha)})`;
15
+ }
16
+ function getSuffix(state, alpha) {
17
+ return alpha === true ? ` / ${state.alpha.value}%` : "";
18
+ }
19
+ //#endregion
20
+ export { formatHslColor, formatHwbColor, formatRgbColor };
@@ -1,14 +1,14 @@
1
1
  import { clamp } from "../../internal/number.mjs";
2
- import { round } from "../../internal/math/misc.mjs";
3
2
  import { HEX_BLACK, HEX_WHITE, SRGB_LUMINANCE_EXPONENT, SRGB_LUMINANCE_MODIFIER, SRGB_LUMINANCE_MULTIPLIER, SRGB_LUMINANCE_OFFSET } from "../constants.mjs";
4
- import { getColorState } from "./state.mjs";
3
+ import { round } from "../../internal/math/misc.mjs";
4
+ import { getColorFromState, getColorState } from "./state.mjs";
5
5
  import { color } from "../instance.mjs";
6
6
  //#region src/color/misc/get.ts
7
7
  function getClampedValue(value, minimum, maximum, rounding) {
8
8
  return typeof value === "number" && !Number.isNaN(value) ? clamp(rounding ?? false ? round(value) : value, minimum, maximum) : minimum;
9
9
  }
10
10
  function getForegroundColor(value, hex) {
11
- const { blue, green, red } = getColorState(value).rgb;
11
+ const { blue, green, red } = getColorFromState(getColorState(value), "rgb");
12
12
  const values = [
13
13
  blue / 255,
14
14
  green / 255,
@@ -46,7 +46,7 @@ function getHexaColor(value) {
46
46
  * @returns Hex color string
47
47
  */
48
48
  function getHexColor(value) {
49
- return getColorState(value).hex;
49
+ return getColorFromState(getColorState(value), "hex");
50
50
  }
51
51
  function getHexValue(value) {
52
52
  return getClampedValue(value, 0, 255, true);
@@ -64,10 +64,10 @@ function getDegrees(value) {
64
64
  * @returns _HSLA_ color
65
65
  */
66
66
  function getHslaColor(value) {
67
- const { alpha, hsl } = getColorState(value);
67
+ const state = getColorState(value);
68
68
  return {
69
- ...hsl,
70
- alpha: alpha.value
69
+ ...getColorFromState(state, "hsl"),
70
+ alpha: state.alpha.value
71
71
  };
72
72
  }
73
73
  /**
@@ -80,7 +80,7 @@ function getHslaColor(value) {
80
80
  * @returns _HWB_ color
81
81
  */
82
82
  function getHwbColor(value) {
83
- return getColorState(value).hwb;
83
+ return getColorFromState(getColorState(value), "hwb");
84
84
  }
85
85
  /**
86
86
  * Get the _HWBA_ color from any kind of value
@@ -92,10 +92,10 @@ function getHwbColor(value) {
92
92
  * @returns _HWBA_ color
93
93
  */
94
94
  function getHwbaColor(value) {
95
- const { alpha, hwb } = getColorState(value);
95
+ const state = getColorState(value);
96
96
  return {
97
- ...hwb,
98
- alpha: alpha.value
97
+ ...getColorFromState(state, "hwb"),
98
+ alpha: state.alpha.value
99
99
  };
100
100
  }
101
101
  /**
@@ -108,7 +108,7 @@ function getHwbaColor(value) {
108
108
  * @returns _HSL_ color
109
109
  */
110
110
  function getHslColor(value) {
111
- return getColorState(value).hsl;
111
+ return getColorFromState(getColorState(value), "hsl");
112
112
  }
113
113
  function getPercentage(value) {
114
114
  return getClampedValue(value, 0, 100);
@@ -123,10 +123,10 @@ function getPercentage(value) {
123
123
  * @returns _RGBA_ color
124
124
  */
125
125
  function getRgbaColor(value) {
126
- const { alpha, rgb } = getColorState(value);
126
+ const state = getColorState(value);
127
127
  return {
128
- ...rgb,
129
- alpha: alpha.value
128
+ ...getColorFromState(state, "rgb"),
129
+ alpha: state.alpha.value
130
130
  };
131
131
  }
132
132
  /**
@@ -139,7 +139,7 @@ function getRgbaColor(value) {
139
139
  * @returns _RGB_ color
140
140
  */
141
141
  function getRgbColor(value) {
142
- return getColorState(value).rgb;
142
+ return getColorFromState(getColorState(value), "rgb");
143
143
  }
144
144
  //#endregion
145
145
  export { getDegrees, getForegroundColor, getHexColor, getHexValue, getHexaColor, getHslColor, getHslaColor, getHwbColor, getHwbaColor, getPercentage, getRgbColor, getRgbaColor };
@@ -31,12 +31,6 @@ declare function isHexColor(value: unknown, alpha?: boolean): value is string;
31
31
  * @returns `true` if the value is an _HSLA_ color, otherwise `false`
32
32
  */
33
33
  declare function isHslaColor(value: unknown): value is HSLAColor;
34
- /**
35
- * Is the value like an _HSLA_ color?
36
- *
37
- * @param value Value to check
38
- * @returns `true` if the value is like an _HSLA_ color, otherwise `false`
39
- */
40
34
  declare function isHslaLike(value: unknown): value is Record<keyof HSLAColor, unknown>;
41
35
  /**
42
36
  * Is the value an _HSL_ color?
@@ -45,12 +39,6 @@ declare function isHslaLike(value: unknown): value is Record<keyof HSLAColor, un
45
39
  * @returns `true` if the value is an _HSL_ color, otherwise `false`
46
40
  */
47
41
  declare function isHslColor(value: unknown): value is HSLColor;
48
- /**
49
- * Is the value like an _HSL_ color?
50
- *
51
- * @param value Value to check
52
- * @returns `true` if the value is like an _HSL_ color, otherwise `false`
53
- */
54
42
  declare function isHslLike(value: unknown): value is Record<keyof HSLColor, unknown>;
55
43
  /**
56
44
  * Is the value an _HWBA_ color?
@@ -59,12 +47,6 @@ declare function isHslLike(value: unknown): value is Record<keyof HSLColor, unkn
59
47
  * @returns `true` if the value is an _HWBA_ color, otherwise `false`
60
48
  */
61
49
  declare function isHwbaColor(value: unknown): value is HWBAColor;
62
- /**
63
- * Is the value like an _HWBA_ color?
64
- *
65
- * @param value Value to check
66
- * @returns `true` if the value is like an _HWBA_ color, otherwise `false`
67
- */
68
50
  declare function isHwbaLike(value: unknown): value is Record<keyof HWBAColor, unknown>;
69
51
  /**
70
52
  * Is the value an _HWB_ color?
@@ -73,12 +55,6 @@ declare function isHwbaLike(value: unknown): value is Record<keyof HWBAColor, un
73
55
  * @returns `true` if the value is an _HWB_ color, otherwise `false`
74
56
  */
75
57
  declare function isHwbColor(value: unknown): value is HWBColor;
76
- /**
77
- * Is the value like an _HWB_ color?
78
- *
79
- * @param value Value to check
80
- * @returns `true` if the value is like an _HWB_ color, otherwise `false`
81
- */
82
58
  declare function isHwbLike(value: unknown): value is Record<keyof HWBColor, unknown>;
83
59
  /**
84
60
  * Is the value an _RGBA_ color?
@@ -87,12 +63,6 @@ declare function isHwbLike(value: unknown): value is Record<keyof HWBColor, unkn
87
63
  * @returns `true` if the value is an _RGBA_ color, otherwise `false`
88
64
  */
89
65
  declare function isRgbaColor(value: unknown): value is RGBAColor;
90
- /**
91
- * Is the value like an _RGBA_ color?
92
- *
93
- * @param value Value to check
94
- * @returns `true` if the value is like an _RGBA_ color, otherwise `false`
95
- */
96
66
  declare function isRgbaLike(value: unknown): value is Record<keyof RGBAColor, unknown>;
97
67
  /**
98
68
  * Is the value an _RGB_ color?
@@ -101,12 +71,6 @@ declare function isRgbaLike(value: unknown): value is Record<keyof RGBAColor, un
101
71
  * @returns `true` if the value is an _RGB_ color, otherwise `false`
102
72
  */
103
73
  declare function isRgbColor(value: unknown): value is RGBColor;
104
- /**
105
- * Is the value like an _RGB_ color?
106
- *
107
- * @param value Value to check
108
- * @returns `true` if the value is like an _RGB_ color, otherwise `false`
109
- */
110
74
  declare function isRgbLike(value: unknown): value is Record<keyof RGBColor, unknown>;
111
75
  //#endregion
112
76
  export { isColor, isHexColor, isHslColor, isHslLike, isHslaColor, isHslaLike, isHwbColor, isHwbLike, isHwbaColor, isHwbaLike, isRgbColor, isRgbLike, isRgbaColor, isRgbaLike };
@@ -17,7 +17,7 @@ function isBytey(value) {
17
17
  * @returns `true` if the value is a _Color_, otherwise `false`
18
18
  */
19
19
  function isColor(value) {
20
- return typeof value === "object" && value !== null && "$color" in value && value.$color === true;
20
+ return typeof value === "object" && value !== null && "$color" in value && value["$color"] === true;
21
21
  }
22
22
  function isColorValue(obj, properties) {
23
23
  if (typeof obj !== "object" || obj === null) return false;
@@ -67,12 +67,6 @@ function isHexColor(value, alpha) {
67
67
  function isHslaColor(value) {
68
68
  return isColorValue(value, KEYS_HSLA);
69
69
  }
70
- /**
71
- * Is the value like an _HSLA_ color?
72
- *
73
- * @param value Value to check
74
- * @returns `true` if the value is like an _HSLA_ color, otherwise `false`
75
- */
76
70
  function isHslaLike(value) {
77
71
  return hasKeys(value, KEYS_HSLA);
78
72
  }
@@ -85,12 +79,6 @@ function isHslaLike(value) {
85
79
  function isHslColor(value) {
86
80
  return isColorValue(value, KEYS_HSLA) || isColorValue(value, KEYS_HSL);
87
81
  }
88
- /**
89
- * Is the value like an _HSL_ color?
90
- *
91
- * @param value Value to check
92
- * @returns `true` if the value is like an _HSL_ color, otherwise `false`
93
- */
94
82
  function isHslLike(value) {
95
83
  return hasKeys(value, KEYS_HSL);
96
84
  }
@@ -103,12 +91,6 @@ function isHslLike(value) {
103
91
  function isHwbaColor(value) {
104
92
  return isColorValue(value, KEYS_HWBA);
105
93
  }
106
- /**
107
- * Is the value like an _HWBA_ color?
108
- *
109
- * @param value Value to check
110
- * @returns `true` if the value is like an _HWBA_ color, otherwise `false`
111
- */
112
94
  function isHwbaLike(value) {
113
95
  return hasKeys(value, KEYS_HWBA);
114
96
  }
@@ -121,12 +103,6 @@ function isHwbaLike(value) {
121
103
  function isHwbColor(value) {
122
104
  return isColorValue(value, KEYS_HWB) || isColorValue(value, KEYS_HWBA);
123
105
  }
124
- /**
125
- * Is the value like an _HWB_ color?
126
- *
127
- * @param value Value to check
128
- * @returns `true` if the value is like an _HWB_ color, otherwise `false`
129
- */
130
106
  function isHwbLike(value) {
131
107
  return hasKeys(value, KEYS_HWB);
132
108
  }
@@ -139,12 +115,6 @@ function isHwbLike(value) {
139
115
  function isRgbaColor(value) {
140
116
  return isColorValue(value, KEYS_RGBA);
141
117
  }
142
- /**
143
- * Is the value like an _RGBA_ color?
144
- *
145
- * @param value Value to check
146
- * @returns `true` if the value is like an _RGBA_ color, otherwise `false`
147
- */
148
118
  function isRgbaLike(value) {
149
119
  return hasKeys(value, KEYS_RGBA);
150
120
  }
@@ -157,12 +127,6 @@ function isRgbaLike(value) {
157
127
  function isRgbColor(value) {
158
128
  return isColorValue(value, KEYS_RGBA) || isColorValue(value, KEYS_RGB);
159
129
  }
160
- /**
161
- * Is the value like an _RGB_ color?
162
- *
163
- * @param value Value to check
164
- * @returns `true` if the value is like an _RGB_ color, otherwise `false`
165
- */
166
130
  function isRgbLike(value) {
167
131
  return hasKeys(value, KEYS_RGB);
168
132
  }
@@ -1,9 +1,10 @@
1
- import { ColorState } from "../models.mjs";
1
+ import { ColorState, ColorType } from "../models.mjs";
2
2
  //#region src/color/misc/state.d.ts
3
+ declare function getColorFromState<Type extends ColorType>(state: ColorState, type: Type): NonNullable<ColorState[Type]>;
3
4
  declare function getColorState(value: unknown): ColorState;
4
5
  declare function setHexColor(state: ColorState, value: string, alpha: boolean): void;
5
6
  declare function setHSLColor(state: ColorState, value: unknown, alpha: boolean): void;
6
7
  declare function setHWBColor(state: ColorState, value: unknown, alpha: boolean): void;
7
8
  declare function setRGBColor(state: ColorState, value: unknown, alpha: boolean): void;
8
9
  //#endregion
9
- export { getColorState, setHSLColor, setHWBColor, setHexColor, setRGBColor };
10
+ export { getColorFromState, getColorState, setHSLColor, setHWBColor, setHexColor, setRGBColor };