@a_ng_d/utils-ui-color-palette 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -43,45 +43,33 @@ yarn add @a_ng_d/utils-ui-color-palette
43
43
  ## Usage
44
44
 
45
45
  ```typescript
46
- import {
47
- calculateContrast,
48
- generatePalette,
49
- } from '@a_ng_d/utils-ui-color-palette'
46
+ import { Color, Contrast, Data } from '@a_ng_d/utils-ui-color-palette'
50
47
 
51
- // Calculate contrast between two colors
52
- const contrast = calculateContrast('#000000', '#FFFFFF')
53
-
54
- // Generate a color palette
55
- const palette = generatePalette('#FF0000', { steps: 10 })
56
- ```
57
-
58
- ## Examples
59
-
60
- ### Contrast Calculations
61
-
62
- ```typescript
63
- import { Contrast } from '@a_ng_d/utils-ui-color-palette'
48
+ // Use Color class for color manipulation
49
+ const color = new Color({
50
+ sourceColor: [255, 0, 0], // RGB values
51
+ lightness: 50,
52
+ hueShifting: 0,
53
+ chromaShifting: 100,
54
+ })
64
55
 
65
- // Create a contrast checker instance
56
+ // Use Contrast class for accessibility checks
66
57
  const contrast = new Contrast({
67
- backgroundColor: [255, 255, 255], // White background
68
- textColor: '#000000', // Black text
58
+ backgroundColor: [255, 255, 255],
59
+ textColor: '#000000',
69
60
  })
70
61
 
71
- // Get WCAG contrast ratio
72
- const wcagScore = contrast.getWCAGScore() // Returns: 'AAA'
73
-
74
- // Get APCA contrast value
75
- const apcaScore = contrast.getAPCAContrast() // Returns: ~106
76
-
77
- // Get recommended usage
78
- const usage = contrast.getRecommendedUsage() // Returns: 'FLUENT_TEXT'
79
-
80
- // Get minimum font sizes
81
- const sizes = contrast.getMinFontSizes() // Returns recommended font sizes
62
+ // Use Data class for palette generation
63
+ const data = new Data({
64
+ base: baseConfig,
65
+ themes: themesConfig,
66
+ meta: metaConfig,
67
+ })
82
68
  ```
83
69
 
84
- ### Color Space Conversions
70
+ ## Examples
71
+
72
+ ### Color Manipulation
85
73
 
86
74
  ```typescript
87
75
  import { Color } from '@a_ng_d/utils-ui-color-palette'
@@ -94,32 +82,80 @@ const color = new Color({
94
82
  })
95
83
 
96
84
  // Convert to different color spaces
97
- const lchColor = color.lch()
98
- const oklchColor = color.oklch()
99
- const hsluvColor = color.hsluv()
100
-
101
- // Handle color blindness simulation
102
- const protanopiaColor = new Color({
103
- sourceColor: [255, 0, 0],
104
- visionSimulationMode: 'PROTANOPIA',
105
- }).setColor()
85
+ const lchColor = color.lch() // Returns LCH color
86
+ const oklchColor = color.oklch() // Returns OKLCH color
87
+ const hslColor = color.hsl() // Returns HSL color
88
+ const labColor = color.lab() // Returns LAB color
89
+
90
+ // Mix colors
91
+ const mixedRgb = color.mixColorsRgb(
92
+ [255, 0, 0, 0.5], // Semi-transparent red
93
+ [0, 0, 255, 1] // Solid blue
94
+ )
95
+
96
+ const mixedHex = color.mixColorsHex('#FF0000', '#0000FF')
106
97
  ```
107
98
 
108
- ### Color Mixing
99
+ ### Contrast Calculations
109
100
 
110
101
  ```typescript
111
- import { Color } from '@a_ng_d/utils-ui-color-palette'
102
+ import { Contrast } from '@a_ng_d/utils-ui-color-palette'
103
+
104
+ // Create a contrast checker instance
105
+ const contrast = new Contrast({
106
+ backgroundColor: [255, 255, 255], // White background
107
+ textColor: '#000000', // Black text
108
+ })
112
109
 
113
- const color = new Color({})
110
+ // Get contrast values
111
+ const wcagContrast = contrast.getWCAGContrast() // WCAG 2.1 contrast ratio
112
+ const apcaContrast = contrast.getAPCAContrast() // APCA contrast value
113
+ const wcagScore = contrast.getWCAGScore() // Returns: 'AAA', 'AA', or 'A'
114
114
 
115
- // Mix RGB colors with alpha
116
- const mixed = color.mixColorsRgb(
117
- [255, 0, 0, 0.5], // Semi-transparent red
118
- [0, 0, 255, 1] // Solid blue
119
- )
115
+ // Get accessibility recommendations
116
+ const usage = contrast.getRecommendedUsage() // Returns usage recommendation
117
+ const minSizes = contrast.getMinFontSizes() // Returns minimum font sizes
120
118
 
121
- // Mix hex colors
122
- const mixedHex = color.mixColorsHex('#FF0000', '#0000FF')
119
+ // Find specific contrast values
120
+ const lightness = contrast.getLightnessForContrastRatio(4.5) // For WCAG AA
121
+ ```
122
+
123
+ ### Palette Generation
124
+
125
+ ```typescript
126
+ import { Data } from '@a_ng_d/utils-ui-color-palette'
127
+
128
+ // Configure your palette
129
+ const config = {
130
+ base: {
131
+ name: 'My Palette',
132
+ colors: [
133
+ /* your colors */
134
+ ],
135
+ colorSpace: 'LAB',
136
+ algorithmVersion: 'v3',
137
+ },
138
+ themes: [
139
+ {
140
+ id: 'light',
141
+ name: 'Light Theme',
142
+ scale: {
143
+ /* lightness values */
144
+ },
145
+ visionSimulationMode: 'NONE',
146
+ },
147
+ ],
148
+ meta: {
149
+ /* metadata */
150
+ },
151
+ }
152
+
153
+ // Create a data instance
154
+ const data = new Data(config)
155
+
156
+ // Generate palette data
157
+ const paletteData = data.makePaletteData()
158
+ const fullData = data.makePaletteFullData()
123
159
  ```
124
160
 
125
161
  ## Testing
@@ -223,7 +223,7 @@ const u = {
223
223
  Math.round(h * a[0] + r * a[1] + o * a[2])
224
224
  ];
225
225
  };
226
- class R {
226
+ class p {
227
227
  constructor({
228
228
  render: t = "HEX",
229
229
  sourceColor: h = [0, 0, 0],
@@ -470,16 +470,17 @@ class R {
470
470
  return this.simulateColorBlindRgb([C, d, x]);
471
471
  });
472
472
  l(this, "mixColorsHex", (t, h) => {
473
- if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(t)) return t;
474
- if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(h)) return h;
475
- const r = n(t).rgba(), o = n(h).rgba(), i = this.mixColorsRgb(r, o);
476
- return n(i).hex();
473
+ const r = /^#([0-9A-Fa-f]{3}){1,2}([0-9A-Fa-f]{2})?$/;
474
+ if (!r.test(t)) return t;
475
+ if (!r.test(h)) return h;
476
+ const o = n(t).rgba(), i = n(h).rgba(), e = this.mixColorsRgb(o, i);
477
+ return n(e).hex();
477
478
  });
478
479
  this.render = t, this.sourceColor = h, this.lightness = r, this.alpha = o, this.hueShifting = i, this.chromaShifting = e, this.algorithmVersion = a, this.visionSimulationMode = g;
479
480
  }
480
481
  }
481
482
  export {
482
- R as C,
483
+ p as C,
483
484
  s as H
484
485
  };
485
- //# sourceMappingURL=color-BND6T00o.js.map
486
+ //# sourceMappingURL=color-1CXTuV84.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-1CXTuV84.js","sources":["../node_modules/hsluv/dist/hsluv.mjs","../src/modules/color/color.ts"],"sourcesContent":["export class Hsluv {\n constructor() {\n // RGB\n this.hex = '#000000';\n this.rgb_r = 0;\n this.rgb_g = 0;\n this.rgb_b = 0;\n // CIE XYZ\n this.xyz_x = 0;\n this.xyz_y = 0;\n this.xyz_z = 0;\n // CIE LUV\n this.luv_l = 0;\n this.luv_u = 0;\n this.luv_v = 0;\n // CIE LUV LCh\n this.lch_l = 0;\n this.lch_c = 0;\n this.lch_h = 0;\n // HSLuv\n this.hsluv_h = 0;\n this.hsluv_s = 0;\n this.hsluv_l = 0;\n // HPLuv\n this.hpluv_h = 0;\n this.hpluv_p = 0;\n this.hpluv_l = 0;\n // 6 lines in slope-intercept format: R < 0, R > 1, G < 0, G > 1, B < 0, B > 1\n this.r0s = 0;\n this.r0i = 0;\n this.r1s = 0;\n this.r1i = 0;\n this.g0s = 0;\n this.g0i = 0;\n this.g1s = 0;\n this.g1i = 0;\n this.b0s = 0;\n this.b0i = 0;\n this.b1s = 0;\n this.b1i = 0;\n }\n static fromLinear(c) {\n if (c <= 0.0031308) {\n return 12.92 * c;\n }\n else {\n return 1.055 * Math.pow(c, 1 / 2.4) - 0.055;\n }\n }\n static toLinear(c) {\n if (c > 0.04045) {\n return Math.pow((c + 0.055) / 1.055, 2.4);\n }\n else {\n return c / 12.92;\n }\n }\n static yToL(Y) {\n if (Y <= Hsluv.epsilon) {\n return Y / Hsluv.refY * Hsluv.kappa;\n }\n else {\n return 116 * Math.pow(Y / Hsluv.refY, 1 / 3) - 16;\n }\n }\n static lToY(L) {\n if (L <= 8) {\n return Hsluv.refY * L / Hsluv.kappa;\n }\n else {\n return Hsluv.refY * Math.pow((L + 16) / 116, 3);\n }\n }\n static rgbChannelToHex(chan) {\n const c = Math.round(chan * 255);\n const digit2 = c % 16;\n const digit1 = (c - digit2) / 16 | 0;\n return Hsluv.hexChars.charAt(digit1) + Hsluv.hexChars.charAt(digit2);\n }\n static hexToRgbChannel(hex, offset) {\n const digit1 = Hsluv.hexChars.indexOf(hex.charAt(offset));\n const digit2 = Hsluv.hexChars.indexOf(hex.charAt(offset + 1));\n const n = digit1 * 16 + digit2;\n return n / 255.0;\n }\n static distanceFromOriginAngle(slope, intercept, angle) {\n const d = intercept / (Math.sin(angle) - slope * Math.cos(angle));\n if (d < 0) {\n return Infinity;\n }\n else {\n return d;\n }\n }\n static distanceFromOrigin(slope, intercept) {\n return Math.abs(intercept) / Math.sqrt(Math.pow(slope, 2) + 1);\n }\n static min6(f1, f2, f3, f4, f5, f6) {\n return Math.min(f1, Math.min(f2, Math.min(f3, Math.min(f4, Math.min(f5, f6)))));\n }\n rgbToHex() {\n this.hex = \"#\";\n this.hex += Hsluv.rgbChannelToHex(this.rgb_r);\n this.hex += Hsluv.rgbChannelToHex(this.rgb_g);\n this.hex += Hsluv.rgbChannelToHex(this.rgb_b);\n }\n hexToRgb() {\n this.hex = this.hex.toLowerCase();\n this.rgb_r = Hsluv.hexToRgbChannel(this.hex, 1);\n this.rgb_g = Hsluv.hexToRgbChannel(this.hex, 3);\n this.rgb_b = Hsluv.hexToRgbChannel(this.hex, 5);\n }\n xyzToRgb() {\n this.rgb_r = Hsluv.fromLinear(Hsluv.m_r0 * this.xyz_x + Hsluv.m_r1 * this.xyz_y + Hsluv.m_r2 * this.xyz_z);\n this.rgb_g = Hsluv.fromLinear(Hsluv.m_g0 * this.xyz_x + Hsluv.m_g1 * this.xyz_y + Hsluv.m_g2 * this.xyz_z);\n this.rgb_b = Hsluv.fromLinear(Hsluv.m_b0 * this.xyz_x + Hsluv.m_b1 * this.xyz_y + Hsluv.m_b2 * this.xyz_z);\n }\n rgbToXyz() {\n const lr = Hsluv.toLinear(this.rgb_r);\n const lg = Hsluv.toLinear(this.rgb_g);\n const lb = Hsluv.toLinear(this.rgb_b);\n this.xyz_x = 0.41239079926595 * lr + 0.35758433938387 * lg + 0.18048078840183 * lb;\n this.xyz_y = 0.21263900587151 * lr + 0.71516867876775 * lg + 0.072192315360733 * lb;\n this.xyz_z = 0.019330818715591 * lr + 0.11919477979462 * lg + 0.95053215224966 * lb;\n }\n xyzToLuv() {\n const divider = this.xyz_x + 15 * this.xyz_y + 3 * this.xyz_z;\n let varU = 4 * this.xyz_x;\n let varV = 9 * this.xyz_y;\n if (divider !== 0) {\n varU /= divider;\n varV /= divider;\n }\n else {\n varU = NaN;\n varV = NaN;\n }\n this.luv_l = Hsluv.yToL(this.xyz_y);\n if (this.luv_l === 0) {\n this.luv_u = 0;\n this.luv_v = 0;\n }\n else {\n this.luv_u = 13 * this.luv_l * (varU - Hsluv.refU);\n this.luv_v = 13 * this.luv_l * (varV - Hsluv.refV);\n }\n }\n luvToXyz() {\n if (this.luv_l === 0) {\n this.xyz_x = 0;\n this.xyz_y = 0;\n this.xyz_z = 0;\n return;\n }\n const varU = this.luv_u / (13 * this.luv_l) + Hsluv.refU;\n const varV = this.luv_v / (13 * this.luv_l) + Hsluv.refV;\n this.xyz_y = Hsluv.lToY(this.luv_l);\n this.xyz_x = 0 - 9 * this.xyz_y * varU / ((varU - 4) * varV - varU * varV);\n this.xyz_z = (9 * this.xyz_y - 15 * varV * this.xyz_y - varV * this.xyz_x) / (3 * varV);\n }\n luvToLch() {\n this.lch_l = this.luv_l;\n this.lch_c = Math.sqrt(this.luv_u * this.luv_u + this.luv_v * this.luv_v);\n if (this.lch_c < 0.00000001) {\n this.lch_h = 0;\n }\n else {\n const hrad = Math.atan2(this.luv_v, this.luv_u);\n this.lch_h = hrad * 180.0 / Math.PI;\n if (this.lch_h < 0) {\n this.lch_h = 360 + this.lch_h;\n }\n }\n }\n lchToLuv() {\n const hrad = this.lch_h / 180.0 * Math.PI;\n this.luv_l = this.lch_l;\n this.luv_u = Math.cos(hrad) * this.lch_c;\n this.luv_v = Math.sin(hrad) * this.lch_c;\n }\n calculateBoundingLines(l) {\n const sub1 = Math.pow(l + 16, 3) / 1560896;\n const sub2 = sub1 > Hsluv.epsilon ? sub1 : l / Hsluv.kappa;\n const s1r = sub2 * (284517 * Hsluv.m_r0 - 94839 * Hsluv.m_r2);\n const s2r = sub2 * (838422 * Hsluv.m_r2 + 769860 * Hsluv.m_r1 + 731718 * Hsluv.m_r0);\n const s3r = sub2 * (632260 * Hsluv.m_r2 - 126452 * Hsluv.m_r1);\n const s1g = sub2 * (284517 * Hsluv.m_g0 - 94839 * Hsluv.m_g2);\n const s2g = sub2 * (838422 * Hsluv.m_g2 + 769860 * Hsluv.m_g1 + 731718 * Hsluv.m_g0);\n const s3g = sub2 * (632260 * Hsluv.m_g2 - 126452 * Hsluv.m_g1);\n const s1b = sub2 * (284517 * Hsluv.m_b0 - 94839 * Hsluv.m_b2);\n const s2b = sub2 * (838422 * Hsluv.m_b2 + 769860 * Hsluv.m_b1 + 731718 * Hsluv.m_b0);\n const s3b = sub2 * (632260 * Hsluv.m_b2 - 126452 * Hsluv.m_b1);\n this.r0s = s1r / s3r;\n this.r0i = s2r * l / s3r;\n this.r1s = s1r / (s3r + 126452);\n this.r1i = (s2r - 769860) * l / (s3r + 126452);\n this.g0s = s1g / s3g;\n this.g0i = s2g * l / s3g;\n this.g1s = s1g / (s3g + 126452);\n this.g1i = (s2g - 769860) * l / (s3g + 126452);\n this.b0s = s1b / s3b;\n this.b0i = s2b * l / s3b;\n this.b1s = s1b / (s3b + 126452);\n this.b1i = (s2b - 769860) * l / (s3b + 126452);\n }\n calcMaxChromaHpluv() {\n const r0 = Hsluv.distanceFromOrigin(this.r0s, this.r0i);\n const r1 = Hsluv.distanceFromOrigin(this.r1s, this.r1i);\n const g0 = Hsluv.distanceFromOrigin(this.g0s, this.g0i);\n const g1 = Hsluv.distanceFromOrigin(this.g1s, this.g1i);\n const b0 = Hsluv.distanceFromOrigin(this.b0s, this.b0i);\n const b1 = Hsluv.distanceFromOrigin(this.b1s, this.b1i);\n return Hsluv.min6(r0, r1, g0, g1, b0, b1);\n }\n calcMaxChromaHsluv(h) {\n const hueRad = h / 360 * Math.PI * 2;\n const r0 = Hsluv.distanceFromOriginAngle(this.r0s, this.r0i, hueRad);\n const r1 = Hsluv.distanceFromOriginAngle(this.r1s, this.r1i, hueRad);\n const g0 = Hsluv.distanceFromOriginAngle(this.g0s, this.g0i, hueRad);\n const g1 = Hsluv.distanceFromOriginAngle(this.g1s, this.g1i, hueRad);\n const b0 = Hsluv.distanceFromOriginAngle(this.b0s, this.b0i, hueRad);\n const b1 = Hsluv.distanceFromOriginAngle(this.b1s, this.b1i, hueRad);\n return Hsluv.min6(r0, r1, g0, g1, b0, b1);\n }\n hsluvToLch() {\n if (this.hsluv_l > 99.9999999) {\n this.lch_l = 100;\n this.lch_c = 0;\n }\n else if (this.hsluv_l < 0.00000001) {\n this.lch_l = 0;\n this.lch_c = 0;\n }\n else {\n this.lch_l = this.hsluv_l;\n this.calculateBoundingLines(this.hsluv_l);\n const max = this.calcMaxChromaHsluv(this.hsluv_h);\n this.lch_c = max / 100 * this.hsluv_s;\n }\n this.lch_h = this.hsluv_h;\n }\n lchToHsluv() {\n if (this.lch_l > 99.9999999) {\n this.hsluv_s = 0;\n this.hsluv_l = 100;\n }\n else if (this.lch_l < 0.00000001) {\n this.hsluv_s = 0;\n this.hsluv_l = 0;\n }\n else {\n this.calculateBoundingLines(this.lch_l);\n const max = this.calcMaxChromaHsluv(this.lch_h);\n this.hsluv_s = this.lch_c / max * 100;\n this.hsluv_l = this.lch_l;\n }\n this.hsluv_h = this.lch_h;\n }\n hpluvToLch() {\n if (this.hpluv_l > 99.9999999) {\n this.lch_l = 100;\n this.lch_c = 0;\n }\n else if (this.hpluv_l < 0.00000001) {\n this.lch_l = 0;\n this.lch_c = 0;\n }\n else {\n this.lch_l = this.hpluv_l;\n this.calculateBoundingLines(this.hpluv_l);\n const max = this.calcMaxChromaHpluv();\n this.lch_c = max / 100 * this.hpluv_p;\n }\n this.lch_h = this.hpluv_h;\n }\n lchToHpluv() {\n if (this.lch_l > 99.9999999) {\n this.hpluv_p = 0;\n this.hpluv_l = 100;\n }\n else if (this.lch_l < 0.00000001) {\n this.hpluv_p = 0;\n this.hpluv_l = 0;\n }\n else {\n this.calculateBoundingLines(this.lch_l);\n const max = this.calcMaxChromaHpluv();\n this.hpluv_p = this.lch_c / max * 100;\n this.hpluv_l = this.lch_l;\n }\n this.hpluv_h = this.lch_h;\n }\n hsluvToRgb() {\n this.hsluvToLch();\n this.lchToLuv();\n this.luvToXyz();\n this.xyzToRgb();\n }\n hpluvToRgb() {\n this.hpluvToLch();\n this.lchToLuv();\n this.luvToXyz();\n this.xyzToRgb();\n }\n hsluvToHex() {\n this.hsluvToRgb();\n this.rgbToHex();\n }\n hpluvToHex() {\n this.hpluvToRgb();\n this.rgbToHex();\n }\n rgbToHsluv() {\n this.rgbToXyz();\n this.xyzToLuv();\n this.luvToLch();\n this.lchToHpluv();\n this.lchToHsluv();\n }\n rgbToHpluv() {\n this.rgbToXyz();\n this.xyzToLuv();\n this.luvToLch();\n this.lchToHpluv();\n this.lchToHpluv();\n }\n hexToHsluv() {\n this.hexToRgb();\n this.rgbToHsluv();\n }\n hexToHpluv() {\n this.hexToRgb();\n this.rgbToHpluv();\n }\n}\nHsluv.hexChars = \"0123456789abcdef\";\nHsluv.refY = 1.0;\nHsluv.refU = 0.19783000664283;\nHsluv.refV = 0.46831999493879;\nHsluv.kappa = 903.2962962;\nHsluv.epsilon = 0.0088564516;\nHsluv.m_r0 = 3.240969941904521;\nHsluv.m_r1 = -1.537383177570093;\nHsluv.m_r2 = -0.498610760293;\nHsluv.m_g0 = -0.96924363628087;\nHsluv.m_g1 = 1.87596750150772;\nHsluv.m_g2 = 0.041555057407175;\nHsluv.m_b0 = 0.055630079696993;\nHsluv.m_b1 = -0.20397695888897;\nHsluv.m_b2 = 1.056971514242878;\n","import {\n AlgorithmVersionConfiguration,\n VisionSimulationModeConfiguration,\n} from '@tps/configuration.types'\nimport chroma from 'chroma-js'\nimport { Hsluv } from 'hsluv'\nimport { ColorFormat } from '@tps/model.types'\nimport { Channel, ChannelWithAlpha, HexModel } from '@tps/color.types'\n\nconst colorBlindMatrices = {\n PROTANOPIA: [\n [0.567, 0.433, 0],\n [0.558, 0.442, 0],\n [0, 0.242, 0.758],\n ],\n PROTANOMALY: [\n [0.817, 0.183, 0],\n [0.333, 0.667, 0],\n [0, 0.125, 0.875],\n ],\n DEUTERANOPIA: [\n [0.625, 0.375, 0],\n [0.7, 0.3, 0],\n [0, 0.3, 0.7],\n ],\n DEUTERANOMALY: [\n [0.8, 0.2, 0],\n [0.258, 0.742, 0],\n [0, 0.142, 0.858],\n ],\n TRITANOPIA: [\n [0.95, 0.05, 0],\n [0, 0.433, 0.567],\n [0, 0.475, 0.525],\n ],\n TRITANOMALY: [\n [0.967, 0.033, 0],\n [0, 0.733, 0.267],\n [0, 0.183, 0.817],\n ],\n ACHROMATOPSIA: [\n [0.299, 0.587, 0.114],\n [0.299, 0.587, 0.114],\n [0.299, 0.587, 0.114],\n ],\n ACHROMATOMALY: [\n [0.618, 0.32, 0.062],\n [0.163, 0.775, 0.062],\n [0.163, 0.32, 0.516],\n ],\n}\n\nconst applyColorMatrix = (color: Channel, matrix: number[][]): Channel => {\n const [r, g, b] = color\n const [m1, m2, m3] = matrix\n\n return [\n Math.round(r * m1[0] + g * m1[1] + b * m1[2]),\n Math.round(r * m2[0] + g * m2[1] + b * m2[2]),\n Math.round(r * m3[0] + g * m3[1] + b * m3[2]),\n ]\n}\n\nexport default class Color {\n private render: 'HEX' | 'RGB'\n private sourceColor: Channel\n private lightness: number\n private alpha: number\n private hueShifting: number\n private chromaShifting: number\n private algorithmVersion: AlgorithmVersionConfiguration\n private visionSimulationMode: VisionSimulationModeConfiguration\n\n constructor({\n render = 'HEX',\n sourceColor = [0, 0, 0],\n lightness = parseFloat((chroma(sourceColor).luminance() * 100).toFixed(1)),\n alpha = 1,\n hueShifting = 0,\n chromaShifting = 100,\n algorithmVersion = 'v3',\n visionSimulationMode = 'NONE',\n }: {\n render?: 'HEX' | 'RGB'\n sourceColor?: Channel\n lightness?: number\n alpha?: number\n hueShifting?: number\n chromaShifting?: number\n algorithmVersion?: AlgorithmVersionConfiguration\n visionSimulationMode?: VisionSimulationModeConfiguration\n }) {\n this.render = render\n this.sourceColor = sourceColor\n this.lightness = lightness\n this.alpha = alpha\n this.hueShifting = hueShifting\n this.chromaShifting = chromaShifting\n this.algorithmVersion = algorithmVersion\n this.visionSimulationMode = visionSimulationMode\n }\n\n adjustHue = (hue: number): number => {\n if (hue + this.hueShifting < 0) return hue + this.hueShifting + 360\n if (hue + this.hueShifting > 360) return hue + this.hueShifting - 360\n\n return hue + this.hueShifting\n }\n\n adjustChroma = (chroma: number): number => {\n if (this.algorithmVersion === 'v1') return chroma\n if (this.algorithmVersion === 'v2')\n return Math.sin((this.lightness / 100) * Math.PI) * chroma\n if (this.algorithmVersion === 'v3') {\n const lightnessFactor = this.lightness / 100\n const sinComponent = Math.sin(lightnessFactor * Math.PI)\n const tanhComponent = Math.tanh(lightnessFactor * Math.PI)\n const weightedComponent = sinComponent * 0.5 + tanhComponent * 0.5\n const smoothedComponent = Math.pow(weightedComponent, 0.5)\n\n return smoothedComponent * chroma\n }\n\n return chroma\n }\n\n setColor = (): ColorFormat<typeof this.render> => {\n if (this.render === 'HEX')\n return this.simulateColorBlindHex(this.sourceColor)\n\n return this.simulateColorBlindRgb(this.sourceColor)\n }\n\n setColorWithAlpha = (): ColorFormat<typeof this.render> => {\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(this.sourceColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(this.sourceColor), this.alpha]\n }\n\n lch = (): ColorFormat<typeof this.render> => {\n const lch = chroma(this.sourceColor).lch(),\n newColor = chroma\n .lch(\n this.lightness,\n this.adjustChroma(lch[1] * (this.chromaShifting / 100)),\n this.adjustHue(lch[2])\n )\n .rgb()\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n lcha = (): ColorFormat<typeof this.render> => {\n const lch = chroma(this.sourceColor).lch(),\n newColor = chroma\n .lch(\n lch[0],\n this.adjustChroma(lch[1] * (this.chromaShifting / 100)),\n this.adjustHue(lch[2])\n )\n .rgb()\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n oklch = (): ColorFormat<typeof this.render> => {\n const oklch = chroma(this.sourceColor).oklch(),\n newColor = chroma\n .oklch(\n this.lightness / 100,\n this.adjustChroma(oklch[1] * (this.chromaShifting / 100)),\n this.adjustHue(oklch[2])\n )\n .rgb()\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n oklcha = (): ColorFormat<typeof this.render> => {\n const oklch = chroma(this.sourceColor).oklch(),\n newColor = chroma\n .oklch(\n oklch[0],\n this.adjustChroma(oklch[1] * (this.chromaShifting / 100)),\n this.adjustHue(oklch[2])\n )\n .rgb()\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n lab = (): ColorFormat<typeof this.render> => {\n const labA = chroma(this.sourceColor).get('lab.a'),\n labB = chroma(this.sourceColor).get('lab.b'),\n chr = Math.sqrt(labA ** 2 + labB ** 2) * (this.chromaShifting / 100)\n let h = Math.atan(labB / labA) + this.hueShifting * (Math.PI / 180)\n\n if (h > Math.PI) h = Math.PI\n else if (h < -Math.PI) h = Math.PI\n\n let newLabA = chr * Math.cos(h),\n newLabB = chr * Math.sin(h)\n\n if (Math.sign(labA) === -1 && Math.sign(labB) === 1) {\n newLabA *= -1\n newLabB *= -1\n }\n if (Math.sign(labA) === -1 && Math.sign(labB) === -1) {\n newLabA *= -1\n newLabB *= -1\n }\n\n const newColor = chroma\n .lab(\n this.lightness,\n this.adjustChroma(newLabA),\n this.adjustChroma(newLabB)\n )\n .rgb()\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n laba = (): ColorFormat<typeof this.render> => {\n const labA = chroma(this.sourceColor).get('lab.a'),\n labB = chroma(this.sourceColor).get('lab.b'),\n labL = chroma(this.sourceColor).get('lab.l'),\n chr = Math.sqrt(labA ** 2 + labB ** 2) * (this.chromaShifting / 100)\n let h = Math.atan(labB / labA) + this.hueShifting * (Math.PI / 180)\n\n if (h > Math.PI) h = Math.PI\n else if (h < -Math.PI) h = Math.PI\n\n let newLabA = chr * Math.cos(h),\n newLabB = chr * Math.sin(h)\n\n if (Math.sign(labA) === -1 && Math.sign(labB) === 1) {\n newLabA *= -1\n newLabB *= -1\n }\n if (Math.sign(labA) === -1 && Math.sign(labB) === -1) {\n newLabA *= -1\n newLabB *= -1\n }\n\n const newColor = chroma\n .lab(labL, this.adjustChroma(newLabA), this.adjustChroma(newLabB))\n .rgb()\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n oklab = (): ColorFormat<typeof this.render> => {\n const labA = chroma(this.sourceColor).get('oklab.a'),\n labB = chroma(this.sourceColor).get('oklab.b'),\n chr = Math.sqrt(labA ** 2 + labB ** 2) * (this.chromaShifting / 100)\n let h = Math.atan(labB / labA) + this.hueShifting * (Math.PI / 180)\n\n if (h > Math.PI) h = Math.PI\n else if (h < -Math.PI) h = Math.PI\n\n let newLabA = chr * Math.cos(h),\n newLabB = chr * Math.sin(h)\n\n if (Math.sign(labA) === -1 && Math.sign(labB) === 1) {\n newLabA *= -1\n newLabB *= -1\n }\n if (Math.sign(labA) === -1 && Math.sign(labB) === -1) {\n newLabA *= -1\n newLabB *= -1\n }\n\n if (Number.isNaN(newLabA)) newLabA = 0\n if (Number.isNaN(newLabB)) newLabB = 0\n\n const newColor = chroma\n .oklab(\n this.lightness / 100,\n this.adjustChroma(newLabA),\n this.adjustChroma(newLabB)\n )\n .rgb()\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n oklaba = (): ColorFormat<typeof this.render> => {\n const labA = chroma(this.sourceColor).get('oklab.a'),\n labB = chroma(this.sourceColor).get('oklab.b'),\n labL = chroma(this.sourceColor).get('oklab.l'),\n chr = Math.sqrt(labA ** 2 + labB ** 2) * (this.chromaShifting / 100)\n let h = Math.atan(labB / labA) + this.hueShifting * (Math.PI / 180)\n\n if (h > Math.PI) h = Math.PI\n else if (h < -Math.PI) h = Math.PI\n\n let newLabA = chr * Math.cos(h),\n newLabB = chr * Math.sin(h)\n\n if (Math.sign(labA) === -1 && Math.sign(labB) === 1) {\n newLabA *= -1\n newLabB *= -1\n }\n if (Math.sign(labA) === -1 && Math.sign(labB) === -1) {\n newLabA *= -1\n newLabB *= -1\n }\n\n if (Number.isNaN(newLabA)) newLabA = 0\n if (Number.isNaN(newLabB)) newLabB = 0\n\n const newColor = chroma\n .oklab(labL, this.adjustChroma(newLabA), this.adjustChroma(newLabB))\n .rgb()\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n hsl = (): ColorFormat<typeof this.render> => {\n const hsl = chroma(this.sourceColor).hsl(),\n newColor = chroma\n .hsl(\n this.adjustHue(hsl[0]),\n this.adjustChroma(hsl[1] * (this.chromaShifting / 100)),\n this.lightness / 100\n )\n .rgb()\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n hsla = (): ColorFormat<typeof this.render> => {\n const hsl = chroma(this.sourceColor).hsl(),\n newColor = chroma\n .hsl(\n this.adjustHue(hsl[0]),\n this.adjustChroma(hsl[1] * (this.chromaShifting / 100)),\n hsl[2]\n )\n .rgb()\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n hsluv = (): ColorFormat<typeof this.render> => {\n const hsluv = new Hsluv()\n\n hsluv.rgb_r = this.sourceColor[0] / 255\n hsluv.rgb_g = this.sourceColor[1] / 255\n hsluv.rgb_b = this.sourceColor[2] / 255\n\n hsluv.rgbToHsluv()\n\n hsluv.hsluv_l = this.lightness\n hsluv.hsluv_s = this.adjustChroma(\n hsluv.hsluv_s * (this.chromaShifting / 100)\n )\n hsluv.hsluv_h = this.adjustHue(hsluv.hsluv_h)\n\n if (Number.isNaN(hsluv.hsluv_s)) hsluv.hsluv_s = 0\n if (Number.isNaN(hsluv.hsluv_h)) hsluv.hsluv_h = 0\n\n hsluv.hsluvToRgb()\n\n const newColor: Channel = [\n hsluv.rgb_r * 255,\n hsluv.rgb_g * 255,\n hsluv.rgb_b * 255,\n ]\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n hsluva = (): ColorFormat<typeof this.render> => {\n const hsluv = new Hsluv()\n\n hsluv.rgb_r = this.sourceColor[0] / 255\n hsluv.rgb_g = this.sourceColor[1] / 255\n hsluv.rgb_b = this.sourceColor[2] / 255\n\n hsluv.rgbToHsluv()\n\n hsluv.hsluv_s = this.adjustChroma(\n hsluv.hsluv_s * (this.chromaShifting / 100)\n )\n hsluv.hsluv_h = this.adjustHue(hsluv.hsluv_h)\n\n if (Number.isNaN(hsluv.hsluv_s)) hsluv.hsluv_s = 0\n if (Number.isNaN(hsluv.hsluv_h)) hsluv.hsluv_h = 0\n\n hsluv.hsluvToRgb()\n\n const newColor: Channel = [\n hsluv.rgb_r * 255,\n hsluv.rgb_g * 255,\n hsluv.rgb_b * 255,\n ]\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n getHsluv = (): Channel => {\n const hsluv = new Hsluv()\n hsluv.rgb_r = this.sourceColor[0] / 255\n hsluv.rgb_g = this.sourceColor[1] / 255\n hsluv.rgb_b = this.sourceColor[2] / 255\n hsluv.rgbToHsluv()\n\n return [hsluv.hsluv_h, hsluv.hsluv_s, hsluv.hsluv_l]\n }\n\n simulateColorBlindHex = (color: Channel): HexModel => {\n const actions: {\n [action: string]: () => void\n } = {\n NONE: () => chroma(color).hex(),\n PROTANOMALY: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.PROTANOMALY\n )\n return chroma(transformed).hex()\n },\n PROTANOPIA: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.PROTANOPIA\n )\n return chroma(transformed).hex()\n },\n DEUTERANOMALY: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.DEUTERANOMALY\n )\n return chroma(transformed).hex()\n },\n DEUTERANOPIA: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.DEUTERANOPIA\n )\n return chroma(transformed).hex()\n },\n TRITANOMALY: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.TRITANOMALY\n )\n return chroma(transformed).hex()\n },\n TRITANOPIA: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.TRITANOPIA\n )\n return chroma(transformed).hex()\n },\n ACHROMATOMALY: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.ACHROMATOMALY\n )\n return chroma(transformed).hex()\n },\n ACHROMATOPSIA: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.ACHROMATOPSIA\n )\n return chroma(transformed).hex()\n },\n }\n\n const result = actions[this.visionSimulationMode]?.()\n return result !== undefined ? result : '#000000'\n }\n\n simulateColorBlindRgb = (color: Channel): Channel => {\n const actions: {\n [action: string]: () => void\n } = {\n NONE: () => chroma(color).rgb(),\n PROTANOMALY: () =>\n applyColorMatrix(color, colorBlindMatrices.PROTANOMALY),\n PROTANOPIA: () => applyColorMatrix(color, colorBlindMatrices.PROTANOPIA),\n DEUTERANOMALY: () =>\n applyColorMatrix(color, colorBlindMatrices.DEUTERANOMALY),\n DEUTERANOPIA: () =>\n applyColorMatrix(color, colorBlindMatrices.DEUTERANOPIA),\n TRITANOMALY: () =>\n applyColorMatrix(color, colorBlindMatrices.TRITANOMALY),\n TRITANOPIA: () => applyColorMatrix(color, colorBlindMatrices.TRITANOPIA),\n ACHROMATOMALY: () =>\n applyColorMatrix(color, colorBlindMatrices.ACHROMATOMALY),\n ACHROMATOPSIA: () =>\n applyColorMatrix(color, colorBlindMatrices.ACHROMATOPSIA),\n }\n\n const result = actions[this.visionSimulationMode]?.()\n return result !== undefined ? result : [0, 0, 0]\n }\n\n mixColorsRgb = (\n colorA: ChannelWithAlpha,\n colorB: ChannelWithAlpha\n ): Channel => {\n const [r1, g1, b1, a1] = colorA\n const [r2, g2, b2, a2] = colorB\n\n if (a1 === 1) return [r1, g1, b1]\n if (a1 === 0) return [r2, g2, b2]\n\n const alpha = a1 + a2 * (1 - a1)\n const r = Math.min(\n 255,\n Math.max(0, Math.round((r1 * a1 + r2 * a2 * (1 - a1)) / alpha))\n )\n const g = Math.min(\n 255,\n Math.max(0, Math.round((g1 * a1 + g2 * a2 * (1 - a1)) / alpha))\n )\n const b = Math.min(\n 255,\n Math.max(0, Math.round((b1 * a1 + b2 * a2 * (1 - a1)) / alpha))\n )\n\n return this.simulateColorBlindRgb([r, g, b])\n }\n\n mixColorsHex = (colorA: HexModel, colorB: HexModel): HexModel => {\n const hexRegex = /^#([0-9A-Fa-f]{3}){1,2}([0-9A-Fa-f]{2})?$/\n if (!hexRegex.test(colorA)) return colorA\n if (!hexRegex.test(colorB)) return colorB\n\n const rgbA = chroma(colorA).rgba()\n const rgbB = chroma(colorB).rgba()\n const mixed = this.mixColorsRgb(rgbA, rgbB)\n\n return chroma(mixed).hex()\n }\n}\n"],"names":["Hsluv","c","Y","L","chan","digit2","digit1","hex","offset","slope","intercept","angle","d","f1","f2","f3","f4","f5","f6","lr","lg","lb","divider","varU","varV","hrad","l","sub1","sub2","s1r","s2r","s3r","s1g","s2g","s3g","s1b","s2b","s3b","r0","r1","g0","g1","b0","b1","h","hueRad","max","colorBlindMatrices","applyColorMatrix","color","matrix","r","g","b","m1","m2","m3","Color","render","sourceColor","lightness","chroma","alpha","hueShifting","chromaShifting","algorithmVersion","visionSimulationMode","__publicField","hue","lightnessFactor","sinComponent","tanhComponent","weightedComponent","lch","newColor","oklch","labA","labB","chr","newLabA","newLabB","labL","hsl","hsluv","actions","transformed","result","_a","colorA","colorB","a1","r2","g2","b2","a2","hexRegex","rgbA","rgbB","mixed"],"mappings":"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","x_google_ignoreList":[0]}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { C as r } from "./color-BND6T00o.js";
1
+ import { C as r } from "./color-1CXTuV84.js";
2
2
  import { default as e } from "./modules/contrast/contrast.js";
3
3
  import { default as s } from "./modules/data/data.js";
4
4
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/modules/color/color.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,EAClC,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAe,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAwDtE,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,oBAAoB,CAAmC;gBAEnD,EACV,MAAc,EACd,WAAuB,EACvB,SAA0E,EAC1E,KAAS,EACT,WAAe,EACf,cAAoB,EACpB,gBAAuB,EACvB,oBAA6B,GAC9B,EAAE;QACD,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;QACtB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,gBAAgB,CAAC,EAAE,6BAA6B,CAAA;QAChD,oBAAoB,CAAC,EAAE,iCAAiC,CAAA;KACzD;IAWD,SAAS,QAAS,MAAM,KAAG,MAAM,CAKhC;IAED,YAAY,WAAY,MAAM,KAAG,MAAM,CAetC;IAED,QAAQ,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAK7C;IAED,iBAAiB,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAOtD;IAED,GAAG,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAaxC;IAED,IAAI,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAgBzC;IAED,KAAK,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAa1C;IAED,MAAM,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAgB3C;IAED,GAAG,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAgCxC;IAED,IAAI,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAgCzC;IAED,KAAK,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAmC1C;IAED,MAAM,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAmC3C;IAED,GAAG,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAaxC;IAED,IAAI,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAgBzC;IAED,KAAK,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CA6B1C;IAED,MAAM,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CA+B3C;IAED,QAAQ,QAAO,OAAO,CAQrB;IAED,qBAAqB,UAAW,OAAO,KAAG,QAAQ,CA+DjD;IAED,qBAAqB,UAAW,OAAO,KAAG,OAAO,CAqBhD;IAED,YAAY,WACF,gBAAgB,UAChB,gBAAgB,KACvB,OAAO,CAsBT;IAED,YAAY,WAAY,QAAQ,UAAU,QAAQ,KAAG,QAAQ,CAQ5D;CACF"}
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/modules/color/color.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,iCAAiC,EAClC,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAwDtE,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,oBAAoB,CAAmC;gBAEnD,EACV,MAAc,EACd,WAAuB,EACvB,SAA0E,EAC1E,KAAS,EACT,WAAe,EACf,cAAoB,EACpB,gBAAuB,EACvB,oBAA6B,GAC9B,EAAE;QACD,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;QACtB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,gBAAgB,CAAC,EAAE,6BAA6B,CAAA;QAChD,oBAAoB,CAAC,EAAE,iCAAiC,CAAA;KACzD;IAWD,SAAS,QAAS,MAAM,KAAG,MAAM,CAKhC;IAED,YAAY,WAAY,MAAM,KAAG,MAAM,CAetC;IAED,QAAQ,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAK7C;IAED,iBAAiB,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAOtD;IAED,GAAG,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAaxC;IAED,IAAI,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAgBzC;IAED,KAAK,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAa1C;IAED,MAAM,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAgB3C;IAED,GAAG,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAgCxC;IAED,IAAI,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAgCzC;IAED,KAAK,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAmC1C;IAED,MAAM,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAmC3C;IAED,GAAG,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAaxC;IAED,IAAI,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CAgBzC;IAED,KAAK,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CA6B1C;IAED,MAAM,QAAO,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,CA+B3C;IAED,QAAQ,QAAO,OAAO,CAQrB;IAED,qBAAqB,UAAW,OAAO,KAAG,QAAQ,CAiEjD;IAED,qBAAqB,UAAW,OAAO,KAAG,OAAO,CAuBhD;IAED,YAAY,WACF,gBAAgB,UAChB,gBAAgB,KACvB,OAAO,CAsBT;IAED,YAAY,WAAY,QAAQ,UAAU,QAAQ,KAAG,QAAQ,CAU5D;CACF"}
@@ -1,5 +1,5 @@
1
1
  import "../../index-Beb8qoyd.js";
2
- import { C as a } from "../../color-BND6T00o.js";
2
+ import { C as a } from "../../color-1CXTuV84.js";
3
3
  export {
4
4
  a as default
5
5
  };
@@ -1,6 +1,6 @@
1
- var m = Object.defineProperty;
2
- var T = (e, t, o) => t in e ? m(e, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[t] = o;
3
- var C = (e, t, o) => T(e, typeof t != "symbol" ? t + "" : t, o);
1
+ var T = Object.defineProperty;
2
+ var m = (e, t, r) => t in e ? T(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;
3
+ var a = (e, t, r) => m(e, typeof t != "symbol" ? t + "" : t, r);
4
4
  import { c as A } from "../../index-Beb8qoyd.js";
5
5
  /** @preserve
6
6
  ///// SAPC APCA - Advanced Perceptual Contrast Algorithm
@@ -28,13 +28,9 @@ import { c as A } from "../../index-Beb8qoyd.js";
28
28
  /////
29
29
  ///// Live Demonstrator at https://www.myndex.com/APCA/
30
30
  // */
31
- const r = {
31
+ const o = {
32
32
  mainTRC: 2.4,
33
33
  // 2.4 exponent for emulating actual monitor perception
34
- // For reverseAPCA
35
- get mainTRCencode() {
36
- return 1 / this.mainTRC;
37
- },
38
34
  // sRGB coefficients
39
35
  sRco: 0.2126729,
40
36
  sGco: 0.7151522,
@@ -52,29 +48,17 @@ const r = {
52
48
  loBoWoffset: 0.027,
53
49
  loWoBoffset: 0.027,
54
50
  deltaYmin: 5e-4,
55
- loClip: 0.1,
56
- ///// MAGIC NUMBERS for UNCLAMP, for use with 0.022 & 1.414 /////
57
- // Magic Numbers for reverseAPCA
58
- mFactor: 1.9468554433171,
59
- get mFactInv() {
60
- return 1 / this.mFactor;
61
- },
62
- mOffsetIn: 0.0387393816571401,
63
- mExpAdj: 0.283343396420869,
64
- get mExp() {
65
- return this.mExpAdj / this.blkClmp;
66
- },
67
- mOffsetOut: 0.312865795870758
51
+ loClip: 0.1
68
52
  };
69
- function p(e, t, o = -1) {
53
+ function d(e, t, r = -1) {
70
54
  const h = [0, 1.1];
71
55
  if (isNaN(e) || isNaN(t) || Math.min(e, t) < h[0] || Math.max(e, t) > h[1])
72
56
  return 0;
73
57
  let n = 0, i = 0, s = "BoW";
74
- return e = e > r.blkThrs ? e : e + Math.pow(r.blkThrs - e, r.blkClmp), t = t > r.blkThrs ? t : t + Math.pow(r.blkThrs - t, r.blkClmp), Math.abs(t - e) < r.deltaYmin ? 0 : (t > e ? (n = (Math.pow(t, r.normBG) - Math.pow(e, r.normTXT)) * r.scaleBoW, i = n < r.loClip ? 0 : n - r.loBoWoffset) : (s = "WoB", n = (Math.pow(t, r.revBG) - Math.pow(e, r.revTXT)) * r.scaleWoB, i = n > -r.loClip ? 0 : n + r.loWoBoffset), o < 0 ? i * 100 : o == 0 ? Math.round(Math.abs(i) * 100) + "<sub>" + s + "</sub>" : Number.isInteger(o) ? (i * 100).toFixed(o) : 0);
58
+ return e = e > o.blkThrs ? e : e + Math.pow(o.blkThrs - e, o.blkClmp), t = t > o.blkThrs ? t : t + Math.pow(o.blkThrs - t, o.blkClmp), Math.abs(t - e) < o.deltaYmin ? 0 : (t > e ? (n = (Math.pow(t, o.normBG) - Math.pow(e, o.normTXT)) * o.scaleBoW, i = n < o.loClip ? 0 : n - o.loBoWoffset) : (s = "WoB", n = (Math.pow(t, o.revBG) - Math.pow(e, o.revTXT)) * o.scaleWoB, i = n > -0.1 ? 0 : n + o.loWoBoffset), r < 0 ? i * 100 : r == 0 ? Math.round(Math.abs(i) * 100) + "<sub>" + s + "</sub>" : Number.isInteger(r) ? (i * 100).toFixed(r) : 0);
75
59
  }
76
- function d(e, t = 2) {
77
- const o = [
60
+ function P(e, t = 2) {
61
+ const r = [
78
62
  ["Lc", 100, 200, 300, 400, 500, 600, 700, 800, 900],
79
63
  [0, 999, 999, 999, 999, 999, 999, 999, 999, 999],
80
64
  [10, 999, 999, 999, 999, 999, 999, 999, 999, 999],
@@ -134,33 +118,33 @@ function d(e, t = 2) {
134
118
  let l = 777;
135
119
  e = Math.abs(e);
136
120
  const c = 0.2, u = e == 0 ? 1 : e * c | 0;
137
- let a = 0, f = (e - o[u][a]) * c;
138
- for (a++; a < i; a++)
139
- l = o[u][a], l > 400 ? s[a] = l : e < 14.5 ? s[a] = 999 : e < 29.5 ? s[a] = 777 : l > 24 ? s[a] = Math.round(l - h[u][a] * f) : s[a] = l - (2 * h[u][a] * f | 0) * 0.5;
121
+ let C = 0, f = (e - r[u][C]) * c;
122
+ for (C++; C < i; C++)
123
+ l = r[u][C], l > 400 ? s[C] = l : e < 14.5 ? s[C] = 999 : e < 29.5 ? s[C] = 777 : l > 24 ? s[C] = Math.round(l - h[u][C] * f) : s[C] = l - (2 * h[u][C] * f | 0) * 0.5;
140
124
  return s;
141
125
  }
142
126
  function g(e = [0, 0, 0]) {
143
- function t(o) {
144
- return Math.pow(o / 255, r.mainTRC);
127
+ function t(r) {
128
+ return Math.pow(r / 255, o.mainTRC);
145
129
  }
146
- return r.sRco * t(e[0]) + r.sGco * t(e[1]) + r.sBco * t(e[2]);
130
+ return o.sRco * t(e[0]) + o.sGco * t(e[1]) + o.sBco * t(e[2]);
147
131
  }
148
132
  class W {
149
133
  constructor({
150
134
  backgroundColor: t = [0, 0, 0],
151
- textColor: o = "#FFFFFF"
135
+ textColor: r = "#FFFFFF"
152
136
  }) {
153
- C(this, "backgroundColor");
154
- C(this, "textColor");
155
- C(this, "getWCAGContrast", () => A.contrast(A(this.backgroundColor).hex(), this.textColor));
156
- C(this, "getAPCAContrast", () => Math.abs(
157
- p(
137
+ a(this, "backgroundColor");
138
+ a(this, "textColor");
139
+ a(this, "getWCAGContrast", () => A.contrast(A(this.backgroundColor).hex(), this.textColor));
140
+ a(this, "getAPCAContrast", () => Math.abs(
141
+ d(
158
142
  g(A(this.textColor).rgb()),
159
143
  g(this.backgroundColor)
160
144
  )
161
145
  ));
162
- C(this, "getWCAGScore", () => this.getWCAGContrast() < 4.5 ? "A" : this.getWCAGContrast() >= 4.5 && this.getWCAGContrast() < 7 ? "AA" : "AAA");
163
- C(this, "getWCAGScoreColor", () => this.getWCAGScore() !== "A" ? {
146
+ a(this, "getWCAGScore", () => this.getWCAGContrast() < 4.5 ? "A" : this.getWCAGContrast() >= 4.5 && this.getWCAGContrast() < 7 ? "AA" : "AAA");
147
+ a(this, "getWCAGScoreColor", () => this.getWCAGScore() !== "A" ? {
164
148
  r: 0.5294117647,
165
149
  g: 0.8156862745,
166
150
  b: 0.6941176471
@@ -169,7 +153,7 @@ class W {
169
153
  g: 0.7019607843,
170
154
  b: 0.7803921569
171
155
  });
172
- C(this, "getAPCAScoreColor", () => this.getRecommendedUsage() !== "AVOID" ? {
156
+ a(this, "getAPCAScoreColor", () => this.getRecommendedUsage() !== "AVOID" ? {
173
157
  r: 0.5294117647,
174
158
  g: 0.8156862745,
175
159
  b: 0.6941176471
@@ -178,23 +162,23 @@ class W {
178
162
  g: 0.7019607843,
179
163
  b: 0.7803921569
180
164
  });
181
- C(this, "getMinFontSizes", () => d(this.getAPCAContrast()));
182
- C(this, "getRecommendedUsage", () => this.getAPCAContrast() >= 90 ? "FLUENT_TEXT" : this.getAPCAContrast() >= 75 && this.getAPCAContrast() < 90 ? "CONTENT_TEXT" : this.getAPCAContrast() >= 60 && this.getAPCAContrast() < 75 ? "BODY_TEXT" : this.getAPCAContrast() >= 45 && this.getAPCAContrast() < 60 ? "HEADLINES" : this.getAPCAContrast() >= 30 && this.getAPCAContrast() < 45 ? "SPOT_TEXT" : this.getAPCAContrast() >= 15 && this.getAPCAContrast() < 30 ? "NON_TEXT" : this.getAPCAContrast() < 15 ? "AVOID" : "UNKNOWN");
183
- C(this, "getContrastRatioForLightness", (t) => {
184
- const o = A.lch(t, 0, 0).rgb();
185
- return A.contrast(A(o).hex(), this.textColor);
165
+ a(this, "getMinFontSizes", () => P(this.getAPCAContrast()));
166
+ a(this, "getRecommendedUsage", () => this.getAPCAContrast() >= 90 ? "FLUENT_TEXT" : this.getAPCAContrast() >= 75 && this.getAPCAContrast() < 90 ? "CONTENT_TEXT" : this.getAPCAContrast() >= 60 && this.getAPCAContrast() < 75 ? "BODY_TEXT" : this.getAPCAContrast() >= 45 && this.getAPCAContrast() < 60 ? "HEADLINES" : this.getAPCAContrast() >= 30 && this.getAPCAContrast() < 45 ? "SPOT_TEXT" : this.getAPCAContrast() >= 15 && this.getAPCAContrast() < 30 ? "NON_TEXT" : this.getAPCAContrast() < 15 ? "AVOID" : "UNKNOWN");
167
+ a(this, "getContrastRatioForLightness", (t) => {
168
+ const r = A.lch(t, 0, 0).rgb();
169
+ return A.contrast(A(r).hex(), this.textColor);
186
170
  });
187
- C(this, "getLightnessForContrastRatio", (t, o = 0.1) => {
171
+ a(this, "getLightnessForContrastRatio", (t, r = 0.1) => {
188
172
  const h = A(this.textColor).luminance() > 0.5;
189
173
  let n = 0, i = 100, s = h ? 20 : 80;
190
- for (; i - n > o; ) {
174
+ for (; i - n > r; ) {
191
175
  s = (n + i) / 2;
192
176
  const l = this.getContrastRatioForLightness(s);
193
177
  h ? l < t ? i = s : n = s : l < t ? n = s : i = s;
194
178
  }
195
179
  return s;
196
180
  });
197
- this.backgroundColor = t, this.textColor = o;
181
+ this.backgroundColor = t, this.textColor = r;
198
182
  }
199
183
  }
200
184
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"contrast.js","sources":["../../../node_modules/apca-w3/src/apca-w3.js","../../../src/modules/contrast/contrast.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n/** @preserve\n///// SAPC APCA - Advanced Perceptual Contrast Algorithm\n///// Beta 0.1.9 W3 • contrast function only\n///// DIST: W3 • Revision date: July 3, 2022\n///// Function to parse color values and determine Lc contrast\n///// Copyright © 2019-2022 by Andrew Somers. All Rights Reserved.\n///// LICENSE: W3 LICENSE\n///// CONTACT: Please use the ISSUES or DISCUSSIONS tab at:\n///// https://github.com/Myndex/SAPC-APCA/\n/////\n///////////////////////////////////////////////////////////////////////////////\n/////\n///// MINIMAL IMPORTS:\n///// import { APCAcontrast, sRGBtoY, displayP3toY,\n///// calcAPCA, fontLookupAPCA } from 'apca-w3';\n///// import { colorParsley } from 'colorparsley';\n/////\n///// FORWARD CONTRAST USAGE:\n///// Lc = APCAcontrast( sRGBtoY( TEXTcolor ) , sRGBtoY( BACKGNDcolor ) );\n///// Where the colors are sent as an rgba array [255,255,255,1]\n/////\n///// Retrieving an array of font sizes for the contrast:\n///// fontArray = fontLookupAPCA(Lc);\n/////\n///// Live Demonstrator at https://www.myndex.com/APCA/\n// */\n///////////////////////////////////////////////////////////////////////////////\n\n////////////////////////////////////////////////////////////////////////////////\n/////\n///// SAPC Method and APCA Algorithm\n///// W3 Licensed Version: https://github.com/Myndex/apca-w3\n///// GITHUB MAIN REPO: https://github.com/Myndex/SAPC-APCA\n///// DEVELOPER SITE: https://git.myndex.com/\n/////\n///// Acknowledgments and Thanks To:\n///// • This project references the research & work of M.Fairchild, R.W.Hunt,\n///// Drs. Bailey/Lovie-Kitchin, G.Legge, A.Arditi, M.Stone, C.Poynton, \n///// L.Arend, M.Luo, E.Burns, R.Blackwell, P.Barton, M.Brettel, and many \n///// others — see refs at https://www.myndex.com/WEB/WCAG_CE17polarity\n///// • Bruce Bailey of USAccessBoard for his encouragement, ideas, & feedback\n///// • Chris Lilly of W3C for continued review, examination, & oversight\n///// • Chris Loiselle of Oracle for getting us back on track in a pandemic\n///// • The many volunteer test subjects for participating in the studies.\n///// • The many early adopters, beta testers, and code/issue contributors\n///// • Principal research conducted at Myndex by A.Somers.\n/////\n////////////////////////////////////////////////////////////////////////////////\n\n////////////////////////////////////////////////////////////////////////////////\n/////\n///// ***** SAPC BLOCK *****\n/////\n///// For Evaluations, refer to this as: SAPC-8, 0.0.98G-series constant 4g\n///// SAPC • S-LUV Advanced Predictive Color\n/////\n///// SIMPLE VERSION — Only the basic APCA contrast predictor.\n/////\n///// Included Extensions & Model Features in this file:\n///// • SAPC-8 Core Contrast (Base APCA, non-clinical use only) \n///// • G series constants, group \"G-4g\" using a 2.4 monitor exponent\n///// • sRGB to Y, parses numeric sRGB color to luminance\n///// • SoftToe black level soft clamp and flare compensation.\n/////\n/////\n////////////////////////////////////////////////////////////////////////////////\n/////\n///// DISCLAIMER AND LIMITATIONS OF USE\n///// APCA is an embodiment of certain suprathreshold contrast\n///// prediction technologies and it is licensed to the W3 on a\n///// limited basis for use in certain specific accessibility\n///// guidelines for web content only. APCA may be used for \n///// predicting colors for web content use without royalty.\n/////\n///// However, Any such license excludes other use cases\n///// not related to web content. Prohibited uses include\n///// medical, clinical evaluation, human safety related,\n///// aerospace, transportation, military applications, \n///// and uses which are not specific to web based content\n///// presented on self-illuminated displays or devices.\n/////\n////////////////////////////////////////////////////////////////////////////////\n\n////////// APCA 0.1.9 G 4g USAGE ///////////////////////////////////////////\n///\n/// The API for \"APCA 0.1.9\" is trivially simple.\n/// Send text and background sRGB numeric values to the sRGBtoY() function,\n/// and send the resulting text-Y and background-Y to the APCAcontrast function\n/// it returns a signed float with the numeric Lc contrast result.\n/// \n/// The two inputs are TEXT color and BACKGROUND color in that order.\n/// Each must be a numeric NOT a string, as this simple version has\n/// no string parsing utilities. EXAMPLE:\n/// ________________________________________________________________________\n///\n/// txtColor = colorParsley(0x123456); // color of the text\n/// bgColor = colorParsley(0xabcdef); // color for the background\n///\n/// contrastLc = APCAcontrast( sRGBtoY(txtColor) , sRGBtoY(bgColor) );\n/// ________________________________________________________________________\n///\n/// ********** QUICK START **********\n///\n/// Each color must be a 24bit color (8 bit per channel) as a single integer\n/// (or 0x) sRGB encoded color, i.e. White is either the integer 16777216 or\n/// the hex 0xffffff. A float is returned with a positive or negative value.\n/// Negative values mean light text and a dark background, positive values\n/// mean dark text and a light background. 60.0, or -60.0 is a contrast\n/// \"sort of like\" the old WCAG 2's 4.5:1. NOTE: the total range is now less\n/// than ± 110, so output can be rounded to a signed INT but DO NOT output\n/// an absolute value - light text on dark BG should return a negative number.\n///\n/// ***** IMPORTANT: Do Not Mix Up Text and Background inputs. *****\n/// **************** APCA is polarity sensitive! *****************\n/// \n////////////////////////////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////\n///// BEGIN APCA 0.1.9 BLOCK \\/////////////////////////////////////\n//// \\///////////////////////////////////\n/// \\/////////////////////////////////\n// \\///////////////////////////////\n\n\n///// DEPENDENCIES /////\n\n// The following imports are not needed for the main APCA function,\n// but are needed for the shortcut/alias calcAPCA(), and for the\n// future invertAPCA function, which examines hue.\n\n //// (add slash to line start for local test mode, remove before push)\n/* //// LOCAL TESTING SWITCH for using test.html\n import{colorParsley}from'../node_modules/colorparsley/src/colorparsley.js';\n/*/ //// TOGGLE\n import { colorParsley } from 'colorparsley';\n// */ //// END LOCAL TESTING SWITCH\n\n\n///// Module Scope Object Containing Constants /////\n///// APCA 0.0.98G - 4g - W3 Compatible Constants\n\n///// 𝒦 SA98G ///////////////////////////////////\n const SA98G = {\n\n mainTRC: 2.4, // 2.4 exponent for emulating actual monitor perception\n\n // For reverseAPCA\n get mainTRCencode() { return 1 / this.mainTRC },\n\n // sRGB coefficients\n sRco: 0.2126729, \n sGco: 0.7151522, \n sBco: 0.0721750, \n\n // G-4g constants for use with 2.4 exponent\n normBG: 0.56, \n normTXT: 0.57,\n revTXT: 0.62,\n revBG: 0.65,\n\n // G-4g Clamps and Scalers\n blkThrs: 0.022,\n blkClmp: 1.414, \n scaleBoW: 1.14,\n scaleWoB: 1.14,\n loBoWoffset: 0.027,\n loWoBoffset: 0.027,\n deltaYmin: 0.0005,\n loClip: 0.1,\n\n ///// MAGIC NUMBERS for UNCLAMP, for use with 0.022 & 1.414 /////\n // Magic Numbers for reverseAPCA\n mFactor: 1.94685544331710,\n get mFactInv() { return 1 / this.mFactor},\n mOffsetIn: 0.03873938165714010,\n mExpAdj: 0.2833433964208690,\n get mExp() { return this.mExpAdj / this.blkClmp},\n mOffsetOut: 0.3128657958707580,\n }\n\n\n\n\n//////////////////////////////////////////////////////////////////////////////\n////////// APCA CALCULATION FUNCTIONS \\/////////////////////////////////////\n\n////////// ƒ APCAcontrast() ////////////////////////////////////////////\nexport function APCAcontrast (txtY,bgY,places = -1) {\n // send linear Y (luminance) for text and background.\n // txtY and bgY must be between 0.0-1.0\n // IMPORTANT: Do not swap, polarity is important.\n\n const icp = [0.0,1.1]; // input range clamp / input error check\n\n if(isNaN(txtY)||isNaN(bgY)||Math.min(txtY,bgY)<icp[0]||\n Math.max(txtY,bgY)>icp[1]){\n return 0.0; // return zero on error\n // return 'error'; // optional string return for error\n };\n\n////////// SAPC LOCAL VARS /////////////////////////////////////////\n\n let SAPC = 0.0; // For raw SAPC values\n let outputContrast = 0.0; // For weighted final values\n let polCat = 'BoW'; // Alternate Polarity Indicator. N normal R reverse\n\n // TUTORIAL\n\n // Use Y for text and BG, and soft clamp black,\n // return 0 for very close luminances, determine\n // polarity, and calculate SAPC raw contrast\n // Then scale for easy to remember levels.\n\n // Note that reverse contrast (white text on black)\n // intentionally returns a negative number\n // Proper polarity is important!\n\n////////// BLACK SOFT CLAMP ////////////////////////////////////////\n\n // Soft clamps Y for either color if it is near black.\n txtY = (txtY > SA98G.blkThrs) ? txtY :\n txtY + Math.pow(SA98G.blkThrs - txtY, SA98G.blkClmp);\n bgY = (bgY > SA98G.blkThrs) ? bgY :\n bgY + Math.pow(SA98G.blkThrs - bgY, SA98G.blkClmp);\n\n ///// Return 0 Early for extremely low ∆Y\n if ( Math.abs(bgY - txtY) < SA98G.deltaYmin ) { return 0.0; }\n\n\n////////// APCA/SAPC CONTRAST - LOW CLIP (W3 LICENSE) ///////////////\n\n if ( bgY > txtY ) { // For normal polarity, black text on white (BoW)\n\n // Calculate the SAPC contrast value and scale\n SAPC = ( Math.pow(bgY, SA98G.normBG) - \n Math.pow(txtY, SA98G.normTXT) ) * SA98G.scaleBoW;\n\n // Low Contrast smooth rollout to prevent polarity reversal\n // and also a low-clip for very low contrasts\n outputContrast = (SAPC < SA98G.loClip) ? 0.0 : SAPC - SA98G.loBoWoffset;\n\n } else { // For reverse polarity, light text on dark (WoB)\n // WoB should always return negative value.\n polCat = 'WoB';\n\n SAPC = ( Math.pow(bgY, SA98G.revBG) - \n Math.pow(txtY, SA98G.revTXT) ) * SA98G.scaleWoB;\n\n outputContrast = (SAPC > -SA98G.loClip) ? 0.0 : SAPC + SA98G.loWoBoffset;\n }\n\n // return Lc (lightness contrast) as a signed numeric value \n // Round to the nearest whole number as string is optional.\n // Rounded can be a signed INT as output will be within ± 127 \n // places = -1 returns signed float, 1 or more set that many places\n // 0 returns rounded string, uses BoW or WoB instead of minus sign\n\n if(places < 0 ){ // Default (-1) number out, all others are strings\n return outputContrast * 100.0;\n } else if(places == 0 ){\n return Math.round(Math.abs(outputContrast)*100.0)+'<sub>'+polCat+'</sub>';\n } else if(Number.isInteger(places)){\n return (outputContrast * 100.0).toFixed(places);\n } else { return 0.0 }\n\n} // End APCAcontrast()\n\n\n\n\n/* SWITCH -- WORK IN PROGRESS DO NOT USE\n////////// ƒ invertAPCA() //////////////////////////////////////////////////\nexport function invertAPCA (\n {knownColor: [128,128,128], knownType: 'bg', targetCnst: 75,\n returnAs: 'object', unknownType: 'txt', hueInvert: false,\n hueRange: 5, preserveSat: false }) {\n\n //if (Math.abs(targetCnst) < 15) { return false }; // abs contrast must be > 15\n\n let knownY = sRGBtoY (knownColor);\n let unknownY = knownY, knownExp, unknownExp;\n let min,max,knownLs,isBG = true;\n\n\n if (knownType == 'bg' || knownType == 'background') {\n knownLs = Math.pow(knownY, );\n black = APCAcontrast(0,knownY);\n white = APCAcontrast(1,knownY);\n } else if (knownType == 'txt' || knownType == 'text') {\n isBG = false;\n black = APCAcontrast(knownY,0);\n white = APCAcontrast(knownY,1);\n } else { return false } // return false on error\n\n\n///// APCA 0.0.98G - 4g - W3 Compatible Constants ////////////////////\n\n const scale = contrast > 0 ? SA98G.scaleBoW : SA98G.scaleWoB;\n const offset = contrast > 0 ? SA98G.loBoWoffset : -SA98G.loWoBoffset;\n\n\n targetCnst = ( parseFloat(targetCnst) * 0.01 + offset ) / scale;\n\n // Soft clamps Y if it is near black.\n knownY = (knownY > SA98G.blkThrs) ? knownY :\n knownY + Math.pow(SA98G.blkThrs - knownY, SA98G.blkClmp);\n \n // set the known and unknown exponents\n if (isBG) {\n knownExp = targetCnst > 0 ? SA98G.normBG : SA98G.revBG;\n unknownExp = targetCnst > 0 ? SA98G.normTXT : SA98G.revTXT;\n unknownY = Math.pow( Math.pow(knownY,knownExp) - targetCnst, 1/unknownExp );\n if (isNaN(unknownY)) return false;\n } else if (!isBG) {\n knownExp = targetCnst > 0 ? SA98G.normTXT : SA98G.revTXT;\n unknownExp = targetCnst > 0 ? SA98G.normBG : SA98G.revBG;\n unknownY = Math.pow(targetCnst + Math.pow(knownY,knownExp), 1/unknownExp );\n if (isNaN(unknownY)) return false;\n }\n\n //return contrast +'----'+unknownY;\n\n if (unknownY > 1.06 || unknownY < 0) { return false } // return false on overflow\n // if (unknownY < 0) { return false } // return false on underflow\n //unknownY = Math.max(unknownY,0.0);\n \n // unclamp\n unknownY = (unknownY > SA98G.blkThrs) ? unknownY : \n (Math.pow(((unknownY + SA98G.mOffsetIn)m* SA98G.mFactor),\n SA98G.mExp) * SA98G.mFactInv) - SA98G.mOffsetOut;\n \n// unknownY - 0.22 * Math.pow(unknownY*0.5, 1/blkClmp);\n\n unknownY = Math.max(Math.min(unknownY,1.0),0.0);\n\n let testedCnst = (isBG) ? APCAcontrast(unknownY,knownY) : \n APCAcontrast(knownY,unknownY);\n\n if (returnAs === 'object') {\n let hexB = ( Math.round(Math.pow(unknownY,SA98G.mainTRCencode) * 255)\n ).toString(16).padStart(2,'0');\n hexB = '#' + hexB + hexB + hexB;\n return {color: hexB, Lc: testedCnst, whiteLc: white, blackLc: black};\n } else if (returnAs === 'hex') {\n let hexB = ( Math.round(Math.pow(unknownY,SA98G.mainTRCencode) * 255)\n ).toString(16).padStart(2,'0');\n return '#' + hexB + hexB + hexB;\n } else if (returnAs === 'array') {\n let colorB = Math.round(Math.pow(unknownY,SA98G.mainTRCencode) * 255);\n let retUse = (knownType == 'bg') ? 'txtColor' : 'bgColor'\n return [colorB,colorB,colorB,1,retUse];\n } else if (returnAs === 'Y' || returnAs === 'y') {\n return Math.max(0.0,unknownY);\n } else { return false } // return knownY on error\n}\n// */ // END SWITCH\n\n\n\n\n////////// ƒ reverseAPCA() DEPRECATED SOON ///////////////////////////////\nexport function reverseAPCA (contrast = 0,knownY = 1.0,\n knownType = 'bg',returnAs = 'hex') {\n \n if (Math.abs(contrast) < 9) { return false }; // abs contrast must be > 9\n \n let unknownY = knownY, knownExp, unknownExp;\n \n///// APCA 0.0.98G - 4g - W3 Compatible Constants ////////////////////\n\n const scale = contrast > 0 ? SA98G.scaleBoW : SA98G.scaleWoB;\n const offset = contrast > 0 ? SA98G.loBoWoffset : -SA98G.loWoBoffset;\n\n\n contrast = ( parseFloat(contrast) * 0.01 + offset ) / scale;\n\n // Soft clamps Y if it is near black.\n knownY = (knownY > SA98G.blkThrs) ? knownY :\n knownY + Math.pow(SA98G.blkThrs - knownY, SA98G.blkClmp);\n \n // set the known and unknown exponents\n if (knownType == 'bg' || knownType == 'background') {\n knownExp = contrast > 0 ? SA98G.normBG : SA98G.revBG;\n unknownExp = contrast > 0 ? SA98G.normTXT : SA98G.revTXT;\n unknownY = Math.pow( Math.pow(knownY,knownExp) - contrast, 1/unknownExp );\n if (isNaN(unknownY)) return false;\n } else if (knownType == 'txt' || knownType == 'text') {\n knownExp = contrast > 0 ? SA98G.normTXT : SA98G.revTXT;\n unknownExp = contrast > 0 ? SA98G.normBG : SA98G.revBG;\n unknownY = Math.pow(contrast + Math.pow(knownY,knownExp), 1/unknownExp );\n if (isNaN(unknownY)) return false;\n } else { return false } // return false on error\n\n //return contrast +'----'+unknownY;\n\n if (unknownY > 1.06 || unknownY < 0) { return false } // return false on overflow\n // if (unknownY < 0) { return false } // return false on underflow\n //unknownY = Math.max(unknownY,0.0);\n \n // unclamp\n unknownY = (unknownY > SA98G.blkThrs) ? unknownY : \n (Math.pow(((unknownY + SA98G.mOffsetIn) * SA98G.mFactor),\n SA98G.mExp) * SA98G.mFactInv) - SA98G.mOffsetOut;\n \n// unknownY - 0.22 * Math.pow(unknownY*0.5, 1/blkClmp);\n\n unknownY = Math.max(Math.min(unknownY,1.0),0.0);\n\n if (returnAs === 'hex') {\n let hexB = ( Math.round(Math.pow(unknownY,SA98G.mainTRCencode) * 255)\n ).toString(16).padStart(2,'0');\n\n return '#' + hexB + hexB + hexB;\n } else if (returnAs === 'color') {\n let colorB = Math.round(Math.pow(unknownY,SA98G.mainTRCencode) * 255);\n let retUse = (knownType == 'bg') ? 'txtColor' : 'bgColor'\n return [colorB,colorB,colorB,1,retUse];\n } else if (returnAs === 'Y' || returnAs === 'y') {\n return Math.max(0.0,unknownY);\n } else { return false } // return knownY on error\n}\n\n\n\n\n////////// ƒ calcAPCA() /////////////////////////////////////////////\nexport function calcAPCA (textColor, bgColor, places = -1, round = true) {\n\n // Note that this function requires colorParsley !!\n\tlet bgClr = colorParsley(bgColor);\n\tlet txClr = colorParsley(textColor);\n\tlet hasAlpha = (txClr[3] == '' || txClr[3] == 1) ? false : true ;\n\n\tif (hasAlpha) { txClr = alphaBlend( txClr, bgClr, round); };\n\n\treturn APCAcontrast( sRGBtoY(txClr), sRGBtoY(bgClr), places)\n} // End calcAPCA()\n\n\n\n\n//////////////////////////////////////////////////////////////////////////////\n////////// ƒ fontLookupAPCA() 0.1.7 (G) \\////////////////////////////////\n///////// \\//////////////////////////////\n\nexport function fontLookupAPCA (contrast,places=2) {\n\n////////////////////////////////////////////////////////////////////////////\n///// CONTRAST * FONT WEIGHT & SIZE /////////////////////////////////////\n\n// Font size interpolations. Here the chart was re-ordered to put\n// the main contrast levels each on one line, instead of font size per line.\n// First column is LC value, then each following column is font size by weight\n\n// G G G G G G Public Beta 0.1.7 (G) • MAY 28 2022\n\n// Lc values under 70 should have Lc 15 ADDED if used for body text\n// All font sizes are in px and reference font is Barlow\n\n// 999: prohibited - too low contrast\n// 777: NON TEXT at this minimum weight stroke\n// 666 - this is for spot text, not fluent-Things like copyright or placeholder.\n// 5xx - minimum font at this weight for content, 5xx % 500 for font-size\n// 4xx - minimum font at this weight for any purpose], 4xx % 400 for font-size\n\n// MAIN FONT SIZE LOOKUP\n\n//// ASCENDING SORTED Public Beta 0.1.7 (G) • MAY 28 2022 ////\n\n//// Lc 45 * 0.2 = 9 which is the index for the row for Lc 45\n\n// MAIN FONT LOOKUP May 28 2022 EXPANDED\n// Sorted by Lc Value\n// First row is standard weights 100-900\n// First column is font size in px\n// All other values are the Lc contrast \n// 999 = too low. 777 = non-text and spot text only\n\n\nconst fontMatrixAscend = [\n ['Lc',100,200,300,400,500,600,700,800,900],\n [0,999,999,999,999,999,999,999,999,999],\n [10,999,999,999,999,999,999,999,999,999],\n [15,777,777,777,777,777,777,777,777,777],\n [20,777,777,777,777,777,777,777,777,777],\n [25,777,777,777,120,120,108,96,96,96],\n [30,777,777,120,108,108,96,72,72,72],\n [35,777,120,108,96,72,60,48,48,48],\n [40,120,108,96,60,48,42,32,32,32],\n [45,108,96,72,42,32,28,24,24,24],\n [50,96,72,60,32,28,24,21,21,21],\n [55,80,60,48,28,24,21,18,18,18],\n [60,72,48,42,24,21,18,16,16,18],\n [65,68,46,32,21.75,19,17,15,16,18],\n [70,64,44,28,19.5,18,16,14.5,16,18],\n [75,60,42,24,18,16,15,14,16,18],\n [80,56,38.25,23,17.25,15.81,14.81,14,16,18],\n [85,52,34.5,22,16.5,15.625,14.625,14,16,18],\n [90,48,32,21,16,15.5,14.5,14,16,18],\n [95,45,28,19.5,15.5,15,14,13.5,16,18],\n [100,42,26.5,18.5,15,14.5,13.5,13,16,18],\n [105,39,25,18,14.5,14,13,12,16,18],\n [110,36,24,18,14,13,12,11,16,18],\n [115,34.5,22.5,17.25,12.5,11.875,11.25,10.625,14.5,16.5],\n [120,33,21,16.5,11,10.75,10.5,10.25,13,15],\n [125,32,20,16,10,10,10,10,12,14],\n ];\n\n\n// ASCENDING SORTED Public Beta 0.1.7 (G) • MAY 28 2022 ////\n\n// DELTA - MAIN FONT LOOKUP May 28 2022 EXPANDED\n// EXPANDED Sorted by Lc Value •• DELTA\n// The pre-calculated deltas of the above array\n\nconst fontDeltaAscend = [\n ['∆Lc',100,200,300,400,500,600,700,800,900],\n [0,0,0,0,0,0,0,0,0,0],\n [10,0,0,0,0,0,0,0,0,0],\n [15,0,0,0,0,0,0,0,0,0],\n [20,0,0,0,0,0,0,0,0,0],\n [25,0,0,0,12,12,12,24,24,24],\n [30,0,0,12,12,36,36,24,24,24],\n [35,0,12,12,36,24,18,16,16,16],\n [40,12,12,24,18,16,14,8,8,8],\n [45,12,24,12,10,4,4,3,3,3],\n [50,16,12,12,4,4,3,3,3,3],\n [55,8,12,6,4,3,3,2,2,0],\n [60,4,2,10,2.25,2,1,1,0,0],\n [65,4,2,4,2.25,1,1,0.5,0,0],\n [70,4,2,4,1.5,2,1,0.5,0,0],\n [75,4,3.75,1,0.75,0.188,0.188,0,0,0],\n [80,4,3.75,1,0.75,0.188,0.188,0,0,0],\n [85,4,2.5,1,0.5,0.125,0.125,0,0,0],\n [90,3,4,1.5,0.5,0.5,0.5,0.5,0,0],\n [95,3,1.5,1,0.5,0.5,0.5,0.5,0,0],\n [100,3,1.5,0.5,0.5,0.5,0.5,1,0,0],\n [105,3,1,0,0.5,1,1,1,0,0],\n [110,1.5,1.5,0.75,1.5,1.125,0.75,0.375,1.5,1.5],\n [115,1.5,1.5,0.75,1.5,1.125,0.75,0.375,1.5,1.5],\n [120,1,1,0.5,1,0.75,0.5,0.25,1,1],\n [125,0,0,0,0,0,0,0,0,0],\n ];\n\n // APCA CONTRAST FONT LOOKUP TABLES\n // Copyright © 2022 by Myndex Research and Andrew Somers. All Rights Reserved\n // Public Beta 0.1.7 (G) • MAY 28 2022\n // For the following arrays, the Y axis is contrastArrayLen\n // The two x axis are weightArrayLen and scoreArrayLen\n\n // MAY 28 2022\n\n const weightArray = [0,100,200,300,400,500,600,700,800,900];\n const weightArrayLen = weightArray.length; // X axis\n\n let returnArray = [contrast.toFixed(places),0,0,0,0,0,0,0,0,0,];\n const returnArrayLen = returnArray.length; // X axis\n\n\n const contrastArrayAscend = ['lc',0,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,];\n const contrastArrayLenAsc = contrastArrayAscend.length; // Y azis\n\n//// Lc 45 * 0.2 = 9, and 9 is the index for the row for Lc 45\n\n let tempFont = 777;\n contrast = Math.abs(contrast); // Polarity unneeded for LUT\n const factor = 0.2; // 1/5 as LUT is in increments of 5\n const index = (contrast == 0) ?\n 1 : (contrast * factor) | 0 ; // LUT row... n|0 is bw floor\n let w = 0; \n // scoreAdj interpolates the needed font side per the Lc\n let scoreAdj = (contrast - fontMatrixAscend[index][w]) * factor;\n\n w++; // determines column in font matrix LUT\n\n\n///////// Font and Score Interpolation \\/////////////////////////////////\n\n// populate returnArray with interpolated values\n\n for (; w < weightArrayLen; w++) {\n\n tempFont = fontMatrixAscend[index][w]; \n\n if (tempFont > 400) { // declares a specific minimum for the weight.\n returnArray[w] = tempFont;\n } else if (contrast < 14.5 ) {\n returnArray[w] = 999; // 999 = do not use for anything\n } else if (contrast < 29.5 ) {\n returnArray[w] = 777; // 777 = non-text only\n } else {\n // INTERPOLATION OF FONT SIZE\n // sets level for 0.5px size increments of smaller fonts\n // Note bitwise (n|0) instead of floor\n (tempFont > 24) ?\n returnArray[w] =\n Math.round(tempFont - (fontDeltaAscend[index][w] * scoreAdj)) :\n returnArray[w] =\n tempFont - ((2.0 * fontDeltaAscend[index][w] * scoreAdj) | 0) * 0.5;\n // (n|0) is bitwise floor\n }\n }\n///////// End Interpolation ////////////////////////////////////////////\n\n return returnArray\n} // end fontLookupAPCA\n\n/////////\\ ///////////////////////////\\\n//////////\\ END fontLookupAPCA() 0.1.7 (G) /////////////////////////////\\\n/////////////////////////////////////////////////////////////////////////////\\\n\n\n\n\n//////////////////////////////////////////////////////////////////////////////\n////////// LUMINANCE CONVERTERS |//////////////////////////////////////////\n\n\n////////// ƒ sRGBtoY() //////////////////////////////////////////////////\nexport function sRGBtoY (rgb = [0,0,0]) { // send sRGB 8bpc (0xFFFFFF) or string\n\n// NOTE: Currently expects 0-255\n\n///// APCA 0.0.98G - 4g - W3 Compatible Constants ////////////////////\n/*\nconst mainTRC = 2.4; // 2.4 exponent emulates actual monitor perception\n \nconst sRco = 0.2126729, \n sGco = 0.7151522, \n sBco = 0.0721750; // sRGB coefficients\n */\n// Future:\n// 0.2126478133913640\t0.7151791475336150\t0.0721730390750208\n// Derived from:\n// xW\tyW\tK\txR\tyR\txG\tyG\txB\tyB\n// 0.312720\t0.329030\t6504\t0.640\t0.330\t0.300\t0.600\t0.150\t0.060\n\n // linearize r, g, or b then apply coefficients\n // and sum then return the resulting luminance\n\n function simpleExp (chan) { return Math.pow(chan/255.0, SA98G.mainTRC); };\n\n return SA98G.sRco * simpleExp(rgb[0]) +\n SA98G.sGco * simpleExp(rgb[1]) +\n SA98G.sBco * simpleExp(rgb[2]);\n \n} // End sRGBtoY()\n\n\n\n\n////////// ƒ displayP3toY() /////////////////////////////////////////////\nexport function displayP3toY (rgb = [0,0,0]) { // send rgba array\n\n// NOTE: Currently Apple has the tuple as 0.0 to 1.0, NOT 255\n\n///// APCA 0.0.98G - 4g - W3 Compatible Constants ////////////////////\n\nconst mainTRC = 2.4; // 2.4 exponent emulates actual monitor perception\n // Pending evaluation, because, Apple...\n \nconst sRco = 0.2289829594805780, \n sGco = 0.6917492625852380, \n sBco = 0.0792677779341829; // displayP3 coefficients\n\n// Derived from:\n// xW\tyW\tK\txR\tyR\txG\tyG\txB\tyB\n// 0.312720\t0.329030\t6504\t0.680\t0.320\t0.265\t0.690\t0.150\t0.060\n\n // linearize r, g, or b then apply coefficients\n // and sum then return the resulting luminance\n\n function simpleExp (chan) { return Math.pow(chan, mainTRC); };\n\n return sRco * simpleExp(rgb[0]) +\n sGco * simpleExp(rgb[1]) +\n sBco * simpleExp(rgb[2]);\n\n} // End displayP3toY()\n\n\n\n\n////////// ƒ adobeRGBtoY() /////////////////////////////////////////////\nexport function adobeRGBtoY (rgb = [0,0,0]) { // send rgba array\n\n// NOTE: Currently expects 0-255\n\n///// APCA 0.0.98G - 4g - W3 Compatible Constants ////////////////////\n\nconst mainTRC = 2.35; // 2.35 exponent emulates actual monitor perception\n // Pending evaluation...\n \nconst sRco = 0.2973550227113810, \n sGco = 0.6273727497145280, \n sBco = 0.0752722275740913; // adobeRGB coefficients\n\n// Derived from:\n// xW\tyW\tK\txR\tyR\txG\tyG\txB\tyB\n// 0.312720\t0.329030\t6504\t0.640\t0.330\t0.210\t0.710\t0.150\t0.060\n\n // linearize r, g, or b then apply coefficients\n // and sum then return the resulting luminance\n\n function simpleExp (chan) { return Math.pow(chan/255.0, mainTRC); };\n\n return sRco * simpleExp(rgb[0]) +\n sGco * simpleExp(rgb[1]) +\n sBco * simpleExp(rgb[2]);\n\n} // End displayP3toY()\n\n\n\n\n////////////////////////////////////////////////////////////////////////////\n////////// UTILITIES \\///////////////////////////////////////////////////\n\n\n////////// ƒ alphaBlend() /////////////////////////////////////////////\n\n // send rgba array for text/icon, rgb for background.\n // Only foreground allows alpha of 0.0 to 1.0 \n // This blends using gamma encoded space (standard)\n // rounded 0-255 or set round=false for number 0.0-255.0\nexport function alphaBlend (rgbaFG=[0,0,0,1.0], rgbBG=[0,0,0], round = true ) {\n\t\n\trgbaFG[3] = Math.max(Math.min(rgbaFG[3], 1.0), 0.0); // clamp alpha 0-1\n\tlet compBlend = 1.0 - rgbaFG[3];\n\tlet rgbOut = [0,0,0,1,true]; // or just use rgbBG to retain other elements?\n\t\n\tfor (let i=0;i<3;i++) {\n\t\trgbOut[i] = rgbBG[i] * compBlend + rgbaFG[i] * rgbaFG[3];\n\t\tif (round) rgbOut[i] = Math.min(Math.round(rgbOut[i]),255);\n\t};\n return rgbOut;\n} // End alphaBlend()\n\n\n\n\n//\\ ////////////////////////////////////////\n///\\ ////////////////////////////////////////\n////\\ ////////////////////////////////////////\n/////\\ END APCA 0.1.9 G-4g BLOCK ////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////\n","import { APCAcontrast, fontLookupAPCA, sRGBtoY } from 'apca-w3'\nimport chroma from 'chroma-js'\nimport { Channel, HexModel, RgbModel } from '@tps/color.types'\n\nexport default class Contrast {\n private backgroundColor: Channel\n private textColor: HexModel\n\n constructor({\n backgroundColor = [0, 0, 0],\n textColor = '#FFFFFF',\n }: {\n backgroundColor?: Channel\n textColor?: HexModel\n }) {\n this.backgroundColor = backgroundColor\n this.textColor = textColor\n }\n\n getWCAGContrast = (): number => {\n return chroma.contrast(chroma(this.backgroundColor).hex(), this.textColor)\n }\n\n getAPCAContrast = (): number => {\n return Math.abs(\n APCAcontrast(\n sRGBtoY(chroma(this.textColor).rgb()),\n sRGBtoY(this.backgroundColor)\n ) as number\n )\n }\n\n getWCAGScore = (): 'A' | 'AA' | 'AAA' => {\n return this.getWCAGContrast() < 4.5\n ? 'A'\n : this.getWCAGContrast() >= 4.5 && this.getWCAGContrast() < 7\n ? 'AA'\n : 'AAA'\n }\n\n getWCAGScoreColor = (): RgbModel => {\n if (this.getWCAGScore() !== 'A')\n return {\n r: 0.5294117647,\n g: 0.8156862745,\n b: 0.6941176471,\n }\n else\n return {\n r: 0.8274509804,\n g: 0.7019607843,\n b: 0.7803921569,\n }\n }\n\n getAPCAScoreColor = (): RgbModel => {\n if (this.getRecommendedUsage() !== 'AVOID')\n return {\n r: 0.5294117647,\n g: 0.8156862745,\n b: 0.6941176471,\n }\n else\n return {\n r: 0.8274509804,\n g: 0.7019607843,\n b: 0.7803921569,\n }\n }\n\n getMinFontSizes = (): Array<string | number> => {\n return fontLookupAPCA(this.getAPCAContrast())\n }\n\n getRecommendedUsage = (): string => {\n if (this.getAPCAContrast() >= 90) return 'FLUENT_TEXT'\n if (this.getAPCAContrast() >= 75 && this.getAPCAContrast() < 90)\n return 'CONTENT_TEXT'\n if (this.getAPCAContrast() >= 60 && this.getAPCAContrast() < 75)\n return 'BODY_TEXT'\n if (this.getAPCAContrast() >= 45 && this.getAPCAContrast() < 60)\n return 'HEADLINES'\n if (this.getAPCAContrast() >= 30 && this.getAPCAContrast() < 45)\n return 'SPOT_TEXT'\n if (this.getAPCAContrast() >= 15 && this.getAPCAContrast() < 30)\n return 'NON_TEXT'\n if (this.getAPCAContrast() < 15) return 'AVOID'\n\n return 'UNKNOWN'\n }\n\n getContrastRatioForLightness = (lightness: number): number => {\n const bgColor = chroma.lch(lightness, 0, 0).rgb()\n return chroma.contrast(chroma(bgColor).hex(), this.textColor)\n }\n\n getLightnessForContrastRatio = (\n targetRatio: number,\n precision = 0.1\n ): number => {\n const isLightText = chroma(this.textColor).luminance() > 0.5\n let min = 0\n let max = 100\n let currentLightness = isLightText ? 20 : 80\n\n while (max - min > precision) {\n currentLightness = (min + max) / 2\n const currentRatio = this.getContrastRatioForLightness(currentLightness)\n\n if (isLightText)\n if (currentRatio < targetRatio) max = currentLightness\n else min = currentLightness\n else if (currentRatio < targetRatio) min = currentLightness\n else max = currentLightness\n }\n\n return currentLightness\n }\n}\n"],"names":["SA98G","APCAcontrast","txtY","bgY","places","icp","SAPC","outputContrast","polCat","fontLookupAPCA","contrast","fontMatrixAscend","fontDeltaAscend","weightArrayLen","returnArray","tempFont","factor","index","w","scoreAdj","sRGBtoY","rgb","simpleExp","chan","Contrast","backgroundColor","textColor","__publicField","chroma","lightness","bgColor","targetRatio","precision","isLightText","min","max","currentLightness","currentRatio"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"contrast.js","sources":["../../../node_modules/apca-w3/src/apca-w3.js","../../../src/modules/contrast/contrast.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n/** @preserve\n///// SAPC APCA - Advanced Perceptual Contrast Algorithm\n///// Beta 0.1.9 W3 • contrast function only\n///// DIST: W3 • Revision date: July 3, 2022\n///// Function to parse color values and determine Lc contrast\n///// Copyright © 2019-2022 by Andrew Somers. All Rights Reserved.\n///// LICENSE: W3 LICENSE\n///// CONTACT: Please use the ISSUES or DISCUSSIONS tab at:\n///// https://github.com/Myndex/SAPC-APCA/\n/////\n///////////////////////////////////////////////////////////////////////////////\n/////\n///// MINIMAL IMPORTS:\n///// import { APCAcontrast, sRGBtoY, displayP3toY,\n///// calcAPCA, fontLookupAPCA } from 'apca-w3';\n///// import { colorParsley } from 'colorparsley';\n/////\n///// FORWARD CONTRAST USAGE:\n///// Lc = APCAcontrast( sRGBtoY( TEXTcolor ) , sRGBtoY( BACKGNDcolor ) );\n///// Where the colors are sent as an rgba array [255,255,255,1]\n/////\n///// Retrieving an array of font sizes for the contrast:\n///// fontArray = fontLookupAPCA(Lc);\n/////\n///// Live Demonstrator at https://www.myndex.com/APCA/\n// */\n///////////////////////////////////////////////////////////////////////////////\n\n////////////////////////////////////////////////////////////////////////////////\n/////\n///// SAPC Method and APCA Algorithm\n///// W3 Licensed Version: https://github.com/Myndex/apca-w3\n///// GITHUB MAIN REPO: https://github.com/Myndex/SAPC-APCA\n///// DEVELOPER SITE: https://git.myndex.com/\n/////\n///// Acknowledgments and Thanks To:\n///// • This project references the research & work of M.Fairchild, R.W.Hunt,\n///// Drs. Bailey/Lovie-Kitchin, G.Legge, A.Arditi, M.Stone, C.Poynton, \n///// L.Arend, M.Luo, E.Burns, R.Blackwell, P.Barton, M.Brettel, and many \n///// others — see refs at https://www.myndex.com/WEB/WCAG_CE17polarity\n///// • Bruce Bailey of USAccessBoard for his encouragement, ideas, & feedback\n///// • Chris Lilly of W3C for continued review, examination, & oversight\n///// • Chris Loiselle of Oracle for getting us back on track in a pandemic\n///// • The many volunteer test subjects for participating in the studies.\n///// • The many early adopters, beta testers, and code/issue contributors\n///// • Principal research conducted at Myndex by A.Somers.\n/////\n////////////////////////////////////////////////////////////////////////////////\n\n////////////////////////////////////////////////////////////////////////////////\n/////\n///// ***** SAPC BLOCK *****\n/////\n///// For Evaluations, refer to this as: SAPC-8, 0.0.98G-series constant 4g\n///// SAPC • S-LUV Advanced Predictive Color\n/////\n///// SIMPLE VERSION — Only the basic APCA contrast predictor.\n/////\n///// Included Extensions & Model Features in this file:\n///// • SAPC-8 Core Contrast (Base APCA, non-clinical use only) \n///// • G series constants, group \"G-4g\" using a 2.4 monitor exponent\n///// • sRGB to Y, parses numeric sRGB color to luminance\n///// • SoftToe black level soft clamp and flare compensation.\n/////\n/////\n////////////////////////////////////////////////////////////////////////////////\n/////\n///// DISCLAIMER AND LIMITATIONS OF USE\n///// APCA is an embodiment of certain suprathreshold contrast\n///// prediction technologies and it is licensed to the W3 on a\n///// limited basis for use in certain specific accessibility\n///// guidelines for web content only. APCA may be used for \n///// predicting colors for web content use without royalty.\n/////\n///// However, Any such license excludes other use cases\n///// not related to web content. Prohibited uses include\n///// medical, clinical evaluation, human safety related,\n///// aerospace, transportation, military applications, \n///// and uses which are not specific to web based content\n///// presented on self-illuminated displays or devices.\n/////\n////////////////////////////////////////////////////////////////////////////////\n\n////////// APCA 0.1.9 G 4g USAGE ///////////////////////////////////////////\n///\n/// The API for \"APCA 0.1.9\" is trivially simple.\n/// Send text and background sRGB numeric values to the sRGBtoY() function,\n/// and send the resulting text-Y and background-Y to the APCAcontrast function\n/// it returns a signed float with the numeric Lc contrast result.\n/// \n/// The two inputs are TEXT color and BACKGROUND color in that order.\n/// Each must be a numeric NOT a string, as this simple version has\n/// no string parsing utilities. EXAMPLE:\n/// ________________________________________________________________________\n///\n/// txtColor = colorParsley(0x123456); // color of the text\n/// bgColor = colorParsley(0xabcdef); // color for the background\n///\n/// contrastLc = APCAcontrast( sRGBtoY(txtColor) , sRGBtoY(bgColor) );\n/// ________________________________________________________________________\n///\n/// ********** QUICK START **********\n///\n/// Each color must be a 24bit color (8 bit per channel) as a single integer\n/// (or 0x) sRGB encoded color, i.e. White is either the integer 16777216 or\n/// the hex 0xffffff. A float is returned with a positive or negative value.\n/// Negative values mean light text and a dark background, positive values\n/// mean dark text and a light background. 60.0, or -60.0 is a contrast\n/// \"sort of like\" the old WCAG 2's 4.5:1. NOTE: the total range is now less\n/// than ± 110, so output can be rounded to a signed INT but DO NOT output\n/// an absolute value - light text on dark BG should return a negative number.\n///\n/// ***** IMPORTANT: Do Not Mix Up Text and Background inputs. *****\n/// **************** APCA is polarity sensitive! *****************\n/// \n////////////////////////////////////////////////////////////////////////////////\n\n\n////////////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////////\n///// BEGIN APCA 0.1.9 BLOCK \\/////////////////////////////////////\n//// \\///////////////////////////////////\n/// \\/////////////////////////////////\n// \\///////////////////////////////\n\n\n///// DEPENDENCIES /////\n\n// The following imports are not needed for the main APCA function,\n// but are needed for the shortcut/alias calcAPCA(), and for the\n// future invertAPCA function, which examines hue.\n\n //// (add slash to line start for local test mode, remove before push)\n/* //// LOCAL TESTING SWITCH for using test.html\n import{colorParsley}from'../node_modules/colorparsley/src/colorparsley.js';\n/*/ //// TOGGLE\n import { colorParsley } from 'colorparsley';\n// */ //// END LOCAL TESTING SWITCH\n\n\n///// Module Scope Object Containing Constants /////\n///// APCA 0.0.98G - 4g - W3 Compatible Constants\n\n///// 𝒦 SA98G ///////////////////////////////////\n const SA98G = {\n\n mainTRC: 2.4, // 2.4 exponent for emulating actual monitor perception\n\n // For reverseAPCA\n get mainTRCencode() { return 1 / this.mainTRC },\n\n // sRGB coefficients\n sRco: 0.2126729, \n sGco: 0.7151522, \n sBco: 0.0721750, \n\n // G-4g constants for use with 2.4 exponent\n normBG: 0.56, \n normTXT: 0.57,\n revTXT: 0.62,\n revBG: 0.65,\n\n // G-4g Clamps and Scalers\n blkThrs: 0.022,\n blkClmp: 1.414, \n scaleBoW: 1.14,\n scaleWoB: 1.14,\n loBoWoffset: 0.027,\n loWoBoffset: 0.027,\n deltaYmin: 0.0005,\n loClip: 0.1,\n\n ///// MAGIC NUMBERS for UNCLAMP, for use with 0.022 & 1.414 /////\n // Magic Numbers for reverseAPCA\n mFactor: 1.94685544331710,\n get mFactInv() { return 1 / this.mFactor},\n mOffsetIn: 0.03873938165714010,\n mExpAdj: 0.2833433964208690,\n get mExp() { return this.mExpAdj / this.blkClmp},\n mOffsetOut: 0.3128657958707580,\n }\n\n\n\n\n//////////////////////////////////////////////////////////////////////////////\n////////// APCA CALCULATION FUNCTIONS \\/////////////////////////////////////\n\n////////// ƒ APCAcontrast() ////////////////////////////////////////////\nexport function APCAcontrast (txtY,bgY,places = -1) {\n // send linear Y (luminance) for text and background.\n // txtY and bgY must be between 0.0-1.0\n // IMPORTANT: Do not swap, polarity is important.\n\n const icp = [0.0,1.1]; // input range clamp / input error check\n\n if(isNaN(txtY)||isNaN(bgY)||Math.min(txtY,bgY)<icp[0]||\n Math.max(txtY,bgY)>icp[1]){\n return 0.0; // return zero on error\n // return 'error'; // optional string return for error\n };\n\n////////// SAPC LOCAL VARS /////////////////////////////////////////\n\n let SAPC = 0.0; // For raw SAPC values\n let outputContrast = 0.0; // For weighted final values\n let polCat = 'BoW'; // Alternate Polarity Indicator. N normal R reverse\n\n // TUTORIAL\n\n // Use Y for text and BG, and soft clamp black,\n // return 0 for very close luminances, determine\n // polarity, and calculate SAPC raw contrast\n // Then scale for easy to remember levels.\n\n // Note that reverse contrast (white text on black)\n // intentionally returns a negative number\n // Proper polarity is important!\n\n////////// BLACK SOFT CLAMP ////////////////////////////////////////\n\n // Soft clamps Y for either color if it is near black.\n txtY = (txtY > SA98G.blkThrs) ? txtY :\n txtY + Math.pow(SA98G.blkThrs - txtY, SA98G.blkClmp);\n bgY = (bgY > SA98G.blkThrs) ? bgY :\n bgY + Math.pow(SA98G.blkThrs - bgY, SA98G.blkClmp);\n\n ///// Return 0 Early for extremely low ∆Y\n if ( Math.abs(bgY - txtY) < SA98G.deltaYmin ) { return 0.0; }\n\n\n////////// APCA/SAPC CONTRAST - LOW CLIP (W3 LICENSE) ///////////////\n\n if ( bgY > txtY ) { // For normal polarity, black text on white (BoW)\n\n // Calculate the SAPC contrast value and scale\n SAPC = ( Math.pow(bgY, SA98G.normBG) - \n Math.pow(txtY, SA98G.normTXT) ) * SA98G.scaleBoW;\n\n // Low Contrast smooth rollout to prevent polarity reversal\n // and also a low-clip for very low contrasts\n outputContrast = (SAPC < SA98G.loClip) ? 0.0 : SAPC - SA98G.loBoWoffset;\n\n } else { // For reverse polarity, light text on dark (WoB)\n // WoB should always return negative value.\n polCat = 'WoB';\n\n SAPC = ( Math.pow(bgY, SA98G.revBG) - \n Math.pow(txtY, SA98G.revTXT) ) * SA98G.scaleWoB;\n\n outputContrast = (SAPC > -SA98G.loClip) ? 0.0 : SAPC + SA98G.loWoBoffset;\n }\n\n // return Lc (lightness contrast) as a signed numeric value \n // Round to the nearest whole number as string is optional.\n // Rounded can be a signed INT as output will be within ± 127 \n // places = -1 returns signed float, 1 or more set that many places\n // 0 returns rounded string, uses BoW or WoB instead of minus sign\n\n if(places < 0 ){ // Default (-1) number out, all others are strings\n return outputContrast * 100.0;\n } else if(places == 0 ){\n return Math.round(Math.abs(outputContrast)*100.0)+'<sub>'+polCat+'</sub>';\n } else if(Number.isInteger(places)){\n return (outputContrast * 100.0).toFixed(places);\n } else { return 0.0 }\n\n} // End APCAcontrast()\n\n\n\n\n/* SWITCH -- WORK IN PROGRESS DO NOT USE\n////////// ƒ invertAPCA() //////////////////////////////////////////////////\nexport function invertAPCA (\n {knownColor: [128,128,128], knownType: 'bg', targetCnst: 75,\n returnAs: 'object', unknownType: 'txt', hueInvert: false,\n hueRange: 5, preserveSat: false }) {\n\n //if (Math.abs(targetCnst) < 15) { return false }; // abs contrast must be > 15\n\n let knownY = sRGBtoY (knownColor);\n let unknownY = knownY, knownExp, unknownExp;\n let min,max,knownLs,isBG = true;\n\n\n if (knownType == 'bg' || knownType == 'background') {\n knownLs = Math.pow(knownY, );\n black = APCAcontrast(0,knownY);\n white = APCAcontrast(1,knownY);\n } else if (knownType == 'txt' || knownType == 'text') {\n isBG = false;\n black = APCAcontrast(knownY,0);\n white = APCAcontrast(knownY,1);\n } else { return false } // return false on error\n\n\n///// APCA 0.0.98G - 4g - W3 Compatible Constants ////////////////////\n\n const scale = contrast > 0 ? SA98G.scaleBoW : SA98G.scaleWoB;\n const offset = contrast > 0 ? SA98G.loBoWoffset : -SA98G.loWoBoffset;\n\n\n targetCnst = ( parseFloat(targetCnst) * 0.01 + offset ) / scale;\n\n // Soft clamps Y if it is near black.\n knownY = (knownY > SA98G.blkThrs) ? knownY :\n knownY + Math.pow(SA98G.blkThrs - knownY, SA98G.blkClmp);\n \n // set the known and unknown exponents\n if (isBG) {\n knownExp = targetCnst > 0 ? SA98G.normBG : SA98G.revBG;\n unknownExp = targetCnst > 0 ? SA98G.normTXT : SA98G.revTXT;\n unknownY = Math.pow( Math.pow(knownY,knownExp) - targetCnst, 1/unknownExp );\n if (isNaN(unknownY)) return false;\n } else if (!isBG) {\n knownExp = targetCnst > 0 ? SA98G.normTXT : SA98G.revTXT;\n unknownExp = targetCnst > 0 ? SA98G.normBG : SA98G.revBG;\n unknownY = Math.pow(targetCnst + Math.pow(knownY,knownExp), 1/unknownExp );\n if (isNaN(unknownY)) return false;\n }\n\n //return contrast +'----'+unknownY;\n\n if (unknownY > 1.06 || unknownY < 0) { return false } // return false on overflow\n // if (unknownY < 0) { return false } // return false on underflow\n //unknownY = Math.max(unknownY,0.0);\n \n // unclamp\n unknownY = (unknownY > SA98G.blkThrs) ? unknownY : \n (Math.pow(((unknownY + SA98G.mOffsetIn)m* SA98G.mFactor),\n SA98G.mExp) * SA98G.mFactInv) - SA98G.mOffsetOut;\n \n// unknownY - 0.22 * Math.pow(unknownY*0.5, 1/blkClmp);\n\n unknownY = Math.max(Math.min(unknownY,1.0),0.0);\n\n let testedCnst = (isBG) ? APCAcontrast(unknownY,knownY) : \n APCAcontrast(knownY,unknownY);\n\n if (returnAs === 'object') {\n let hexB = ( Math.round(Math.pow(unknownY,SA98G.mainTRCencode) * 255)\n ).toString(16).padStart(2,'0');\n hexB = '#' + hexB + hexB + hexB;\n return {color: hexB, Lc: testedCnst, whiteLc: white, blackLc: black};\n } else if (returnAs === 'hex') {\n let hexB = ( Math.round(Math.pow(unknownY,SA98G.mainTRCencode) * 255)\n ).toString(16).padStart(2,'0');\n return '#' + hexB + hexB + hexB;\n } else if (returnAs === 'array') {\n let colorB = Math.round(Math.pow(unknownY,SA98G.mainTRCencode) * 255);\n let retUse = (knownType == 'bg') ? 'txtColor' : 'bgColor'\n return [colorB,colorB,colorB,1,retUse];\n } else if (returnAs === 'Y' || returnAs === 'y') {\n return Math.max(0.0,unknownY);\n } else { return false } // return knownY on error\n}\n// */ // END SWITCH\n\n\n\n\n////////// ƒ reverseAPCA() DEPRECATED SOON ///////////////////////////////\nexport function reverseAPCA (contrast = 0,knownY = 1.0,\n knownType = 'bg',returnAs = 'hex') {\n \n if (Math.abs(contrast) < 9) { return false }; // abs contrast must be > 9\n \n let unknownY = knownY, knownExp, unknownExp;\n \n///// APCA 0.0.98G - 4g - W3 Compatible Constants ////////////////////\n\n const scale = contrast > 0 ? SA98G.scaleBoW : SA98G.scaleWoB;\n const offset = contrast > 0 ? SA98G.loBoWoffset : -SA98G.loWoBoffset;\n\n\n contrast = ( parseFloat(contrast) * 0.01 + offset ) / scale;\n\n // Soft clamps Y if it is near black.\n knownY = (knownY > SA98G.blkThrs) ? knownY :\n knownY + Math.pow(SA98G.blkThrs - knownY, SA98G.blkClmp);\n \n // set the known and unknown exponents\n if (knownType == 'bg' || knownType == 'background') {\n knownExp = contrast > 0 ? SA98G.normBG : SA98G.revBG;\n unknownExp = contrast > 0 ? SA98G.normTXT : SA98G.revTXT;\n unknownY = Math.pow( Math.pow(knownY,knownExp) - contrast, 1/unknownExp );\n if (isNaN(unknownY)) return false;\n } else if (knownType == 'txt' || knownType == 'text') {\n knownExp = contrast > 0 ? SA98G.normTXT : SA98G.revTXT;\n unknownExp = contrast > 0 ? SA98G.normBG : SA98G.revBG;\n unknownY = Math.pow(contrast + Math.pow(knownY,knownExp), 1/unknownExp );\n if (isNaN(unknownY)) return false;\n } else { return false } // return false on error\n\n //return contrast +'----'+unknownY;\n\n if (unknownY > 1.06 || unknownY < 0) { return false } // return false on overflow\n // if (unknownY < 0) { return false } // return false on underflow\n //unknownY = Math.max(unknownY,0.0);\n \n // unclamp\n unknownY = (unknownY > SA98G.blkThrs) ? unknownY : \n (Math.pow(((unknownY + SA98G.mOffsetIn) * SA98G.mFactor),\n SA98G.mExp) * SA98G.mFactInv) - SA98G.mOffsetOut;\n \n// unknownY - 0.22 * Math.pow(unknownY*0.5, 1/blkClmp);\n\n unknownY = Math.max(Math.min(unknownY,1.0),0.0);\n\n if (returnAs === 'hex') {\n let hexB = ( Math.round(Math.pow(unknownY,SA98G.mainTRCencode) * 255)\n ).toString(16).padStart(2,'0');\n\n return '#' + hexB + hexB + hexB;\n } else if (returnAs === 'color') {\n let colorB = Math.round(Math.pow(unknownY,SA98G.mainTRCencode) * 255);\n let retUse = (knownType == 'bg') ? 'txtColor' : 'bgColor'\n return [colorB,colorB,colorB,1,retUse];\n } else if (returnAs === 'Y' || returnAs === 'y') {\n return Math.max(0.0,unknownY);\n } else { return false } // return knownY on error\n}\n\n\n\n\n////////// ƒ calcAPCA() /////////////////////////////////////////////\nexport function calcAPCA (textColor, bgColor, places = -1, round = true) {\n\n // Note that this function requires colorParsley !!\n\tlet bgClr = colorParsley(bgColor);\n\tlet txClr = colorParsley(textColor);\n\tlet hasAlpha = (txClr[3] == '' || txClr[3] == 1) ? false : true ;\n\n\tif (hasAlpha) { txClr = alphaBlend( txClr, bgClr, round); };\n\n\treturn APCAcontrast( sRGBtoY(txClr), sRGBtoY(bgClr), places)\n} // End calcAPCA()\n\n\n\n\n//////////////////////////////////////////////////////////////////////////////\n////////// ƒ fontLookupAPCA() 0.1.7 (G) \\////////////////////////////////\n///////// \\//////////////////////////////\n\nexport function fontLookupAPCA (contrast,places=2) {\n\n////////////////////////////////////////////////////////////////////////////\n///// CONTRAST * FONT WEIGHT & SIZE /////////////////////////////////////\n\n// Font size interpolations. Here the chart was re-ordered to put\n// the main contrast levels each on one line, instead of font size per line.\n// First column is LC value, then each following column is font size by weight\n\n// G G G G G G Public Beta 0.1.7 (G) • MAY 28 2022\n\n// Lc values under 70 should have Lc 15 ADDED if used for body text\n// All font sizes are in px and reference font is Barlow\n\n// 999: prohibited - too low contrast\n// 777: NON TEXT at this minimum weight stroke\n// 666 - this is for spot text, not fluent-Things like copyright or placeholder.\n// 5xx - minimum font at this weight for content, 5xx % 500 for font-size\n// 4xx - minimum font at this weight for any purpose], 4xx % 400 for font-size\n\n// MAIN FONT SIZE LOOKUP\n\n//// ASCENDING SORTED Public Beta 0.1.7 (G) • MAY 28 2022 ////\n\n//// Lc 45 * 0.2 = 9 which is the index for the row for Lc 45\n\n// MAIN FONT LOOKUP May 28 2022 EXPANDED\n// Sorted by Lc Value\n// First row is standard weights 100-900\n// First column is font size in px\n// All other values are the Lc contrast \n// 999 = too low. 777 = non-text and spot text only\n\n\nconst fontMatrixAscend = [\n ['Lc',100,200,300,400,500,600,700,800,900],\n [0,999,999,999,999,999,999,999,999,999],\n [10,999,999,999,999,999,999,999,999,999],\n [15,777,777,777,777,777,777,777,777,777],\n [20,777,777,777,777,777,777,777,777,777],\n [25,777,777,777,120,120,108,96,96,96],\n [30,777,777,120,108,108,96,72,72,72],\n [35,777,120,108,96,72,60,48,48,48],\n [40,120,108,96,60,48,42,32,32,32],\n [45,108,96,72,42,32,28,24,24,24],\n [50,96,72,60,32,28,24,21,21,21],\n [55,80,60,48,28,24,21,18,18,18],\n [60,72,48,42,24,21,18,16,16,18],\n [65,68,46,32,21.75,19,17,15,16,18],\n [70,64,44,28,19.5,18,16,14.5,16,18],\n [75,60,42,24,18,16,15,14,16,18],\n [80,56,38.25,23,17.25,15.81,14.81,14,16,18],\n [85,52,34.5,22,16.5,15.625,14.625,14,16,18],\n [90,48,32,21,16,15.5,14.5,14,16,18],\n [95,45,28,19.5,15.5,15,14,13.5,16,18],\n [100,42,26.5,18.5,15,14.5,13.5,13,16,18],\n [105,39,25,18,14.5,14,13,12,16,18],\n [110,36,24,18,14,13,12,11,16,18],\n [115,34.5,22.5,17.25,12.5,11.875,11.25,10.625,14.5,16.5],\n [120,33,21,16.5,11,10.75,10.5,10.25,13,15],\n [125,32,20,16,10,10,10,10,12,14],\n ];\n\n\n// ASCENDING SORTED Public Beta 0.1.7 (G) • MAY 28 2022 ////\n\n// DELTA - MAIN FONT LOOKUP May 28 2022 EXPANDED\n// EXPANDED Sorted by Lc Value •• DELTA\n// The pre-calculated deltas of the above array\n\nconst fontDeltaAscend = [\n ['∆Lc',100,200,300,400,500,600,700,800,900],\n [0,0,0,0,0,0,0,0,0,0],\n [10,0,0,0,0,0,0,0,0,0],\n [15,0,0,0,0,0,0,0,0,0],\n [20,0,0,0,0,0,0,0,0,0],\n [25,0,0,0,12,12,12,24,24,24],\n [30,0,0,12,12,36,36,24,24,24],\n [35,0,12,12,36,24,18,16,16,16],\n [40,12,12,24,18,16,14,8,8,8],\n [45,12,24,12,10,4,4,3,3,3],\n [50,16,12,12,4,4,3,3,3,3],\n [55,8,12,6,4,3,3,2,2,0],\n [60,4,2,10,2.25,2,1,1,0,0],\n [65,4,2,4,2.25,1,1,0.5,0,0],\n [70,4,2,4,1.5,2,1,0.5,0,0],\n [75,4,3.75,1,0.75,0.188,0.188,0,0,0],\n [80,4,3.75,1,0.75,0.188,0.188,0,0,0],\n [85,4,2.5,1,0.5,0.125,0.125,0,0,0],\n [90,3,4,1.5,0.5,0.5,0.5,0.5,0,0],\n [95,3,1.5,1,0.5,0.5,0.5,0.5,0,0],\n [100,3,1.5,0.5,0.5,0.5,0.5,1,0,0],\n [105,3,1,0,0.5,1,1,1,0,0],\n [110,1.5,1.5,0.75,1.5,1.125,0.75,0.375,1.5,1.5],\n [115,1.5,1.5,0.75,1.5,1.125,0.75,0.375,1.5,1.5],\n [120,1,1,0.5,1,0.75,0.5,0.25,1,1],\n [125,0,0,0,0,0,0,0,0,0],\n ];\n\n // APCA CONTRAST FONT LOOKUP TABLES\n // Copyright © 2022 by Myndex Research and Andrew Somers. All Rights Reserved\n // Public Beta 0.1.7 (G) • MAY 28 2022\n // For the following arrays, the Y axis is contrastArrayLen\n // The two x axis are weightArrayLen and scoreArrayLen\n\n // MAY 28 2022\n\n const weightArray = [0,100,200,300,400,500,600,700,800,900];\n const weightArrayLen = weightArray.length; // X axis\n\n let returnArray = [contrast.toFixed(places),0,0,0,0,0,0,0,0,0,];\n const returnArrayLen = returnArray.length; // X axis\n\n\n const contrastArrayAscend = ['lc',0,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,];\n const contrastArrayLenAsc = contrastArrayAscend.length; // Y azis\n\n//// Lc 45 * 0.2 = 9, and 9 is the index for the row for Lc 45\n\n let tempFont = 777;\n contrast = Math.abs(contrast); // Polarity unneeded for LUT\n const factor = 0.2; // 1/5 as LUT is in increments of 5\n const index = (contrast == 0) ?\n 1 : (contrast * factor) | 0 ; // LUT row... n|0 is bw floor\n let w = 0; \n // scoreAdj interpolates the needed font side per the Lc\n let scoreAdj = (contrast - fontMatrixAscend[index][w]) * factor;\n\n w++; // determines column in font matrix LUT\n\n\n///////// Font and Score Interpolation \\/////////////////////////////////\n\n// populate returnArray with interpolated values\n\n for (; w < weightArrayLen; w++) {\n\n tempFont = fontMatrixAscend[index][w]; \n\n if (tempFont > 400) { // declares a specific minimum for the weight.\n returnArray[w] = tempFont;\n } else if (contrast < 14.5 ) {\n returnArray[w] = 999; // 999 = do not use for anything\n } else if (contrast < 29.5 ) {\n returnArray[w] = 777; // 777 = non-text only\n } else {\n // INTERPOLATION OF FONT SIZE\n // sets level for 0.5px size increments of smaller fonts\n // Note bitwise (n|0) instead of floor\n (tempFont > 24) ?\n returnArray[w] =\n Math.round(tempFont - (fontDeltaAscend[index][w] * scoreAdj)) :\n returnArray[w] =\n tempFont - ((2.0 * fontDeltaAscend[index][w] * scoreAdj) | 0) * 0.5;\n // (n|0) is bitwise floor\n }\n }\n///////// End Interpolation ////////////////////////////////////////////\n\n return returnArray\n} // end fontLookupAPCA\n\n/////////\\ ///////////////////////////\\\n//////////\\ END fontLookupAPCA() 0.1.7 (G) /////////////////////////////\\\n/////////////////////////////////////////////////////////////////////////////\\\n\n\n\n\n//////////////////////////////////////////////////////////////////////////////\n////////// LUMINANCE CONVERTERS |//////////////////////////////////////////\n\n\n////////// ƒ sRGBtoY() //////////////////////////////////////////////////\nexport function sRGBtoY (rgb = [0,0,0]) { // send sRGB 8bpc (0xFFFFFF) or string\n\n// NOTE: Currently expects 0-255\n\n///// APCA 0.0.98G - 4g - W3 Compatible Constants ////////////////////\n/*\nconst mainTRC = 2.4; // 2.4 exponent emulates actual monitor perception\n \nconst sRco = 0.2126729, \n sGco = 0.7151522, \n sBco = 0.0721750; // sRGB coefficients\n */\n// Future:\n// 0.2126478133913640\t0.7151791475336150\t0.0721730390750208\n// Derived from:\n// xW\tyW\tK\txR\tyR\txG\tyG\txB\tyB\n// 0.312720\t0.329030\t6504\t0.640\t0.330\t0.300\t0.600\t0.150\t0.060\n\n // linearize r, g, or b then apply coefficients\n // and sum then return the resulting luminance\n\n function simpleExp (chan) { return Math.pow(chan/255.0, SA98G.mainTRC); };\n\n return SA98G.sRco * simpleExp(rgb[0]) +\n SA98G.sGco * simpleExp(rgb[1]) +\n SA98G.sBco * simpleExp(rgb[2]);\n \n} // End sRGBtoY()\n\n\n\n\n////////// ƒ displayP3toY() /////////////////////////////////////////////\nexport function displayP3toY (rgb = [0,0,0]) { // send rgba array\n\n// NOTE: Currently Apple has the tuple as 0.0 to 1.0, NOT 255\n\n///// APCA 0.0.98G - 4g - W3 Compatible Constants ////////////////////\n\nconst mainTRC = 2.4; // 2.4 exponent emulates actual monitor perception\n // Pending evaluation, because, Apple...\n \nconst sRco = 0.2289829594805780, \n sGco = 0.6917492625852380, \n sBco = 0.0792677779341829; // displayP3 coefficients\n\n// Derived from:\n// xW\tyW\tK\txR\tyR\txG\tyG\txB\tyB\n// 0.312720\t0.329030\t6504\t0.680\t0.320\t0.265\t0.690\t0.150\t0.060\n\n // linearize r, g, or b then apply coefficients\n // and sum then return the resulting luminance\n\n function simpleExp (chan) { return Math.pow(chan, mainTRC); };\n\n return sRco * simpleExp(rgb[0]) +\n sGco * simpleExp(rgb[1]) +\n sBco * simpleExp(rgb[2]);\n\n} // End displayP3toY()\n\n\n\n\n////////// ƒ adobeRGBtoY() /////////////////////////////////////////////\nexport function adobeRGBtoY (rgb = [0,0,0]) { // send rgba array\n\n// NOTE: Currently expects 0-255\n\n///// APCA 0.0.98G - 4g - W3 Compatible Constants ////////////////////\n\nconst mainTRC = 2.35; // 2.35 exponent emulates actual monitor perception\n // Pending evaluation...\n \nconst sRco = 0.2973550227113810, \n sGco = 0.6273727497145280, \n sBco = 0.0752722275740913; // adobeRGB coefficients\n\n// Derived from:\n// xW\tyW\tK\txR\tyR\txG\tyG\txB\tyB\n// 0.312720\t0.329030\t6504\t0.640\t0.330\t0.210\t0.710\t0.150\t0.060\n\n // linearize r, g, or b then apply coefficients\n // and sum then return the resulting luminance\n\n function simpleExp (chan) { return Math.pow(chan/255.0, mainTRC); };\n\n return sRco * simpleExp(rgb[0]) +\n sGco * simpleExp(rgb[1]) +\n sBco * simpleExp(rgb[2]);\n\n} // End displayP3toY()\n\n\n\n\n////////////////////////////////////////////////////////////////////////////\n////////// UTILITIES \\///////////////////////////////////////////////////\n\n\n////////// ƒ alphaBlend() /////////////////////////////////////////////\n\n // send rgba array for text/icon, rgb for background.\n // Only foreground allows alpha of 0.0 to 1.0 \n // This blends using gamma encoded space (standard)\n // rounded 0-255 or set round=false for number 0.0-255.0\nexport function alphaBlend (rgbaFG=[0,0,0,1.0], rgbBG=[0,0,0], round = true ) {\n\t\n\trgbaFG[3] = Math.max(Math.min(rgbaFG[3], 1.0), 0.0); // clamp alpha 0-1\n\tlet compBlend = 1.0 - rgbaFG[3];\n\tlet rgbOut = [0,0,0,1,true]; // or just use rgbBG to retain other elements?\n\t\n\tfor (let i=0;i<3;i++) {\n\t\trgbOut[i] = rgbBG[i] * compBlend + rgbaFG[i] * rgbaFG[3];\n\t\tif (round) rgbOut[i] = Math.min(Math.round(rgbOut[i]),255);\n\t};\n return rgbOut;\n} // End alphaBlend()\n\n\n\n\n//\\ ////////////////////////////////////////\n///\\ ////////////////////////////////////////\n////\\ ////////////////////////////////////////\n/////\\ END APCA 0.1.9 G-4g BLOCK ////////////////////////////////////////\n////////////////////////////////////////////////////////////////////////////\n///////////////////////////////////////////////////////////////////////////\n","import { APCAcontrast, fontLookupAPCA, sRGBtoY } from 'apca-w3'\nimport chroma from 'chroma-js'\nimport { Channel, HexModel, RgbModel } from '@tps/color.types'\n\nexport default class Contrast {\n private backgroundColor: Channel\n private textColor: HexModel\n\n constructor({\n backgroundColor = [0, 0, 0],\n textColor = '#FFFFFF',\n }: {\n backgroundColor?: Channel\n textColor?: HexModel\n }) {\n this.backgroundColor = backgroundColor\n this.textColor = textColor\n }\n\n getWCAGContrast = (): number => {\n return chroma.contrast(chroma(this.backgroundColor).hex(), this.textColor)\n }\n\n getAPCAContrast = (): number => {\n return Math.abs(\n APCAcontrast(\n sRGBtoY(chroma(this.textColor).rgb()),\n sRGBtoY(this.backgroundColor)\n ) as number\n )\n }\n\n getWCAGScore = (): 'A' | 'AA' | 'AAA' => {\n return this.getWCAGContrast() < 4.5\n ? 'A'\n : this.getWCAGContrast() >= 4.5 && this.getWCAGContrast() < 7\n ? 'AA'\n : 'AAA'\n }\n\n getWCAGScoreColor = (): RgbModel => {\n if (this.getWCAGScore() !== 'A')\n return {\n r: 0.5294117647,\n g: 0.8156862745,\n b: 0.6941176471,\n }\n else\n return {\n r: 0.8274509804,\n g: 0.7019607843,\n b: 0.7803921569,\n }\n }\n\n getAPCAScoreColor = (): RgbModel => {\n if (this.getRecommendedUsage() !== 'AVOID')\n return {\n r: 0.5294117647,\n g: 0.8156862745,\n b: 0.6941176471,\n }\n else\n return {\n r: 0.8274509804,\n g: 0.7019607843,\n b: 0.7803921569,\n }\n }\n\n getMinFontSizes = (): Array<string | number> => {\n return fontLookupAPCA(this.getAPCAContrast())\n }\n\n getRecommendedUsage = (): string => {\n if (this.getAPCAContrast() >= 90) return 'FLUENT_TEXT'\n if (this.getAPCAContrast() >= 75 && this.getAPCAContrast() < 90)\n return 'CONTENT_TEXT'\n if (this.getAPCAContrast() >= 60 && this.getAPCAContrast() < 75)\n return 'BODY_TEXT'\n if (this.getAPCAContrast() >= 45 && this.getAPCAContrast() < 60)\n return 'HEADLINES'\n if (this.getAPCAContrast() >= 30 && this.getAPCAContrast() < 45)\n return 'SPOT_TEXT'\n if (this.getAPCAContrast() >= 15 && this.getAPCAContrast() < 30)\n return 'NON_TEXT'\n if (this.getAPCAContrast() < 15) return 'AVOID'\n\n return 'UNKNOWN'\n }\n\n getContrastRatioForLightness = (lightness: number): number => {\n const bgColor = chroma.lch(lightness, 0, 0).rgb()\n return chroma.contrast(chroma(bgColor).hex(), this.textColor)\n }\n\n getLightnessForContrastRatio = (\n targetRatio: number,\n precision = 0.1\n ): number => {\n const isLightText = chroma(this.textColor).luminance() > 0.5\n let min = 0\n let max = 100\n let currentLightness = isLightText ? 20 : 80\n\n while (max - min > precision) {\n currentLightness = (min + max) / 2\n const currentRatio = this.getContrastRatioForLightness(currentLightness)\n\n if (isLightText)\n if (currentRatio < targetRatio) max = currentLightness\n else min = currentLightness\n else if (currentRatio < targetRatio) min = currentLightness\n else max = currentLightness\n }\n\n return currentLightness\n }\n}\n"],"names":["SA98G","APCAcontrast","txtY","bgY","places","icp","SAPC","outputContrast","polCat","fontLookupAPCA","contrast","fontMatrixAscend","fontDeltaAscend","weightArrayLen","returnArray","tempFont","factor","index","w","scoreAdj","sRGBtoY","rgb","simpleExp","chan","Contrast","backgroundColor","textColor","__publicField","chroma","lightness","bgColor","targetRatio","precision","isLightText","min","max","currentLightness","currentRatio"],"mappings":"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","x_google_ignoreList":[0]}
@@ -2,7 +2,7 @@ var E = Object.defineProperty;
2
2
  var y = (m, o, r) => o in m ? E(m, o, { enumerable: !0, configurable: !0, writable: !0, value: r }) : m[o] = r;
3
3
  var u = (m, o, r) => y(m, typeof o != "symbol" ? o + "" : o, r);
4
4
  import { c as s } from "../../index-Beb8qoyd.js";
5
- import { C as k, H as f } from "../../color-BND6T00o.js";
5
+ import { C as k, H as f } from "../../color-1CXTuV84.js";
6
6
  class M {
7
7
  constructor({
8
8
  base: o,
@@ -1 +1 @@
1
- {"version":3,"file":"data.js","sources":["../../../src/modules/data/data.ts"],"sourcesContent":["import chroma from 'chroma-js'\nimport { Hsluv } from 'hsluv'\nimport {\n MetaConfiguration,\n BaseConfiguration,\n ScaleConfiguration,\n ThemeConfiguration,\n FullConfiguration,\n} from '@tps/configuration.types'\nimport {\n PaletteData,\n PaletteDataColorItem,\n PaletteDataThemeItem,\n} from '@tps/data.types'\nimport Color from '@modules/color/color'\nimport { Channel, HexModel } from '@tps/color.types'\n\nexport default class Data {\n private base: BaseConfiguration\n private themes: Array<ThemeConfiguration>\n private meta: MetaConfiguration\n private paletteData: PaletteData\n private currentScale: ScaleConfiguration\n\n constructor({\n base,\n themes,\n meta,\n }: {\n base: BaseConfiguration\n themes: Array<ThemeConfiguration>\n meta: MetaConfiguration\n }) {\n this.base = base\n this.themes = themes\n this.meta = meta\n this.paletteData = {\n name: base.name ?? 'UI Color Palette',\n description: base.description,\n themes: [],\n version: process.env.VERSION ?? '1.0.0',\n type: 'palette',\n }\n this.currentScale =\n themes.find((theme) => theme.isEnabled)?.scale ??\n ({} as ScaleConfiguration)\n }\n\n searchForShadeStyleId = (\n themes: Array<PaletteDataThemeItem>,\n themeId: string,\n colorId: string,\n shadeName: string\n ) => {\n const themeMatch = themes.find((theme) => theme.id === themeId),\n colorMatch =\n themeMatch === undefined\n ? undefined\n : themeMatch.colors.find((color) => color.id === colorId),\n shadeMatch =\n colorMatch === undefined\n ? undefined\n : colorMatch.shades.find((shade) => shade.name === shadeName),\n styleId = shadeMatch === undefined ? '' : shadeMatch.styleId\n\n return styleId === undefined ? '' : styleId\n }\n\n makePaletteData = (previousData?: PaletteData) => {\n this.themes.forEach((theme) => {\n const paletteDataThemeItem: PaletteDataThemeItem = {\n id: theme.id,\n name: theme.name,\n description: theme.description,\n colors: [],\n type: theme.type,\n }\n this.base.colors.forEach((color) => {\n const scaledColors = Object.entries(theme.scale)\n .reverse()\n .map((lightness) => {\n if (color.alpha.isEnabled) {\n const foregroundColorData = new Color({\n render: 'RGB',\n sourceColor: [\n color.rgb.r * 255,\n color.rgb.g * 255,\n color.rgb.b * 255,\n ],\n alpha: parseFloat((lightness[1] / 100).toFixed(2)),\n hueShifting:\n color.hue.shift !== undefined ? color.hue.shift : 0,\n chromaShifting:\n color.chroma.shift !== undefined ? color.chroma.shift : 100,\n algorithmVersion: this.base.algorithmVersion,\n visionSimulationMode: theme.visionSimulationMode,\n })\n const backgroundColorData = new Color({\n render: 'RGB',\n sourceColor: chroma(color.alpha.backgroundColor).rgb(),\n algorithmVersion: this.base.algorithmVersion,\n visionSimulationMode: theme.visionSimulationMode,\n })\n\n switch (this.base.colorSpace) {\n case 'LCH':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.lcha(),\n backgroundColorData.lcha(),\n ]\n case 'OKLCH':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.oklcha(),\n backgroundColorData.oklcha(),\n ]\n case 'LAB':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.laba(),\n backgroundColorData.laba(),\n ]\n case 'OKLAB':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.oklaba(),\n backgroundColorData.oklaba(),\n ]\n case 'HSL':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.hsla(),\n backgroundColorData.hsla(),\n ]\n case 'HSLUV':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.hsluva(),\n backgroundColorData.hsluva(),\n ]\n default:\n return [lightness, [0, 0, 0], [255, 255, 255]]\n }\n } else {\n const colorData = new Color({\n render: 'RGB',\n sourceColor: [\n color.rgb.r * 255,\n color.rgb.g * 255,\n color.rgb.b * 255,\n ],\n lightness: lightness[1],\n hueShifting:\n color.hue.shift !== undefined ? color.hue.shift : 0,\n chromaShifting:\n color.chroma.shift !== undefined ? color.chroma.shift : 100,\n algorithmVersion: this.base.algorithmVersion,\n visionSimulationMode: theme.visionSimulationMode,\n })\n\n switch (this.base.colorSpace) {\n case 'LCH':\n return [lightness, colorData.lch()]\n case 'OKLCH':\n return [lightness, colorData.oklch()]\n case 'LAB':\n return [lightness, colorData.lab()]\n case 'OKLAB':\n return [lightness, colorData.oklab()]\n case 'HSL':\n return [lightness, colorData.hsl()]\n case 'HSLUV':\n return [lightness, colorData.hsluv()]\n default:\n return [lightness, [0, 0, 0]]\n }\n }\n })\n\n const paletteDataColorItem: PaletteDataColorItem = {\n id: color.id,\n name: color.name,\n description: color.description,\n shades: [],\n type: 'color',\n },\n sourceColor: Channel = [\n color.rgb.r * 255,\n color.rgb.g * 255,\n color.rgb.b * 255,\n ]\n\n const sourceHsluv = new Hsluv()\n sourceHsluv.rgb_r = color.rgb.r\n sourceHsluv.rgb_g = color.rgb.g\n sourceHsluv.rgb_b = color.rgb.b\n sourceHsluv.rgbToHsluv()\n\n paletteDataColorItem.shades.push({\n name: 'source',\n description: 'Source color',\n hex: chroma(sourceColor).hex(),\n rgb: sourceColor,\n gl: chroma(sourceColor).gl(),\n lch: chroma(sourceColor).lch(),\n oklch: chroma(sourceColor).oklch(),\n lab: chroma(sourceColor).lab(),\n oklab: chroma(sourceColor).oklab(),\n hsl: chroma(sourceColor).hsl(),\n hsluv: [\n sourceHsluv.hsluv_h,\n sourceHsluv.hsluv_s,\n sourceHsluv.hsluv_l,\n ],\n styleId: this.searchForShadeStyleId(\n previousData?.themes ?? this.paletteData.themes,\n theme.id,\n color.id,\n 'source'\n ),\n type: 'source color',\n })\n\n const distances = scaledColors.map((shade) =>\n chroma.distance(\n chroma(sourceColor).hex(),\n chroma(shade[1] as Channel).hex(),\n 'rgb'\n )\n )\n const minDistanceIndex = distances.indexOf(Math.min(...distances))\n\n scaledColors.forEach((scaledColor, index) => {\n const distance: number = chroma.distance(\n chroma(sourceColor).hex(),\n chroma(scaledColor[1] as Channel).hex(),\n 'rgb'\n )\n const scaleName: string =\n Object.keys(this.currentScale).find(\n (key) => key === scaledColor[0][0]\n ) ?? '0'\n const newHsluv = new Hsluv()\n const simulatedSourceColorRgb = new Color({\n render: 'RGB',\n sourceColor: chroma(sourceColor).rgb(),\n visionSimulationMode: theme.visionSimulationMode,\n }).setColor() as Channel\n const simulatedSourceColorHex = new Color({\n render: 'HEX',\n sourceColor: chroma(sourceColor).rgb(),\n visionSimulationMode: theme.visionSimulationMode,\n }).setColor() as HexModel\n\n if (\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ) {\n newHsluv.rgb_r = Number(simulatedSourceColorRgb[0]) / 255\n newHsluv.rgb_g = Number(simulatedSourceColorRgb[1]) / 255\n newHsluv.rgb_b = Number(simulatedSourceColorRgb[2]) / 255\n } else {\n newHsluv.rgb_r = Number(scaledColor[1][0]) / 255\n newHsluv.rgb_g = Number(scaledColor[1][1]) / 255\n newHsluv.rgb_b = Number(scaledColor[1][2]) / 255\n }\n newHsluv.rgbToHsluv()\n\n paletteDataColorItem.shades.push({\n name: scaleName,\n description: `Shade color with ${typeof scaledColor[0][1] === 'number' ? scaledColor[0][1].toFixed(1) : scaledColor[0][1]}% of ${\n color.alpha.isEnabled ? 'opacity' : 'lightness'\n }`,\n hex:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).hex()\n : chroma(scaledColor[1] as Channel).hex(),\n rgb:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).rgb()\n : chroma(scaledColor[1] as Channel).rgb(),\n gl:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).gl()\n : chroma(scaledColor[1] as Channel).gl(),\n lch:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).lch()\n : chroma(scaledColor[1] as Channel).lch(),\n oklch:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).oklch()\n : chroma(scaledColor[1] as Channel).oklch(),\n lab:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).lab()\n : chroma(scaledColor[1] as Channel).lab(),\n oklab:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).oklab()\n : chroma(scaledColor[1] as Channel).oklab(),\n hsl:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).hsl()\n : chroma(scaledColor[1] as Channel).hsl(),\n hsluv: [newHsluv.hsluv_h, newHsluv.hsluv_s, newHsluv.hsluv_l],\n alpha: color.alpha.isEnabled\n ? parseFloat(((scaledColor[0][1] as number) / 100).toFixed(2))\n : undefined,\n backgroundColor:\n color.alpha.isEnabled && color.alpha.backgroundColor\n ? chroma(scaledColor[2] as Channel).rgb()\n : undefined,\n mixedColor:\n color.alpha.isEnabled && color.alpha.backgroundColor\n ? new Color({\n visionSimulationMode: theme.visionSimulationMode,\n }).mixColorsRgb(\n [\n ...(scaledColor[1] as Channel),\n parseFloat(\n ((scaledColor[0][1] as number) / 100).toFixed(2)\n ),\n ],\n [...(scaledColor[2] as Channel), 1]\n )\n : undefined,\n styleId: this.searchForShadeStyleId(\n previousData?.themes ?? this.paletteData.themes,\n theme.id,\n color.id,\n scaleName\n ),\n isClosestToRef: distance < 4 && !this.base.areSourceColorsLocked,\n isSourceColorLocked:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled,\n isTransparent: color.alpha.isEnabled,\n type: 'color shade',\n })\n })\n\n paletteDataThemeItem.colors.push(paletteDataColorItem)\n })\n this.paletteData.themes.push(paletteDataThemeItem)\n })\n\n return this.paletteData\n }\n\n makePaletteFullData = () => {\n const fullPaletteData = {\n base: this.base,\n themes: this.themes,\n meta: this.meta,\n data: this.makePaletteData(),\n type: 'UI_COLOR_PALETTE',\n version: process.env.VERSION ?? '1.0.0',\n } as FullConfiguration\n\n return fullPaletteData\n }\n}\n"],"names":["Data","base","themes","meta","__publicField","themeId","colorId","shadeName","themeMatch","theme","colorMatch","color","shadeMatch","shade","styleId","previousData","paletteDataThemeItem","scaledColors","lightness","foregroundColorData","Color","backgroundColorData","chroma","colorData","paletteDataColorItem","sourceColor","sourceHsluv","Hsluv","distances","minDistanceIndex","scaledColor","index","distance","scaleName","key","newHsluv","simulatedSourceColorRgb","simulatedSourceColorHex","_a"],"mappings":"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"}
1
+ {"version":3,"file":"data.js","sources":["../../../src/modules/data/data.ts"],"sourcesContent":["import chroma from 'chroma-js'\nimport { Hsluv } from 'hsluv'\nimport {\n MetaConfiguration,\n BaseConfiguration,\n ScaleConfiguration,\n ThemeConfiguration,\n FullConfiguration,\n} from '@tps/configuration.types'\nimport {\n PaletteData,\n PaletteDataColorItem,\n PaletteDataThemeItem,\n} from '@tps/data.types'\nimport Color from '@modules/color/color'\nimport { Channel, HexModel } from '@tps/color.types'\n\nexport default class Data {\n private base: BaseConfiguration\n private themes: Array<ThemeConfiguration>\n private meta: MetaConfiguration\n private paletteData: PaletteData\n private currentScale: ScaleConfiguration\n\n constructor({\n base,\n themes,\n meta,\n }: {\n base: BaseConfiguration\n themes: Array<ThemeConfiguration>\n meta: MetaConfiguration\n }) {\n this.base = base\n this.themes = themes\n this.meta = meta\n this.paletteData = {\n name: base.name ?? 'UI Color Palette',\n description: base.description,\n themes: [],\n version: process.env.VERSION ?? '1.0.0',\n type: 'palette',\n }\n this.currentScale =\n themes.find((theme) => theme.isEnabled)?.scale ??\n ({} as ScaleConfiguration)\n }\n\n searchForShadeStyleId = (\n themes: Array<PaletteDataThemeItem>,\n themeId: string,\n colorId: string,\n shadeName: string\n ) => {\n const themeMatch = themes.find((theme) => theme.id === themeId),\n colorMatch =\n themeMatch === undefined\n ? undefined\n : themeMatch.colors.find((color) => color.id === colorId),\n shadeMatch =\n colorMatch === undefined\n ? undefined\n : colorMatch.shades.find((shade) => shade.name === shadeName),\n styleId = shadeMatch === undefined ? '' : shadeMatch.styleId\n\n return styleId === undefined ? '' : styleId\n }\n\n makePaletteData = (previousData?: PaletteData) => {\n this.themes.forEach((theme) => {\n const paletteDataThemeItem: PaletteDataThemeItem = {\n id: theme.id,\n name: theme.name,\n description: theme.description,\n colors: [],\n type: theme.type,\n }\n this.base.colors.forEach((color) => {\n const scaledColors = Object.entries(theme.scale)\n .reverse()\n .map((lightness) => {\n if (color.alpha.isEnabled) {\n const foregroundColorData = new Color({\n render: 'RGB',\n sourceColor: [\n color.rgb.r * 255,\n color.rgb.g * 255,\n color.rgb.b * 255,\n ],\n alpha: parseFloat((lightness[1] / 100).toFixed(2)),\n hueShifting:\n color.hue.shift !== undefined ? color.hue.shift : 0,\n chromaShifting:\n color.chroma.shift !== undefined ? color.chroma.shift : 100,\n algorithmVersion: this.base.algorithmVersion,\n visionSimulationMode: theme.visionSimulationMode,\n })\n const backgroundColorData = new Color({\n render: 'RGB',\n sourceColor: chroma(color.alpha.backgroundColor).rgb(),\n algorithmVersion: this.base.algorithmVersion,\n visionSimulationMode: theme.visionSimulationMode,\n })\n\n switch (this.base.colorSpace) {\n case 'LCH':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.lcha(),\n backgroundColorData.lcha(),\n ]\n case 'OKLCH':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.oklcha(),\n backgroundColorData.oklcha(),\n ]\n case 'LAB':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.laba(),\n backgroundColorData.laba(),\n ]\n case 'OKLAB':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.oklaba(),\n backgroundColorData.oklaba(),\n ]\n case 'HSL':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.hsla(),\n backgroundColorData.hsla(),\n ]\n case 'HSLUV':\n return this.base.areSourceColorsLocked\n ? [\n lightness,\n foregroundColorData.setColorWithAlpha(),\n backgroundColorData.setColorWithAlpha(),\n ]\n : [\n lightness,\n foregroundColorData.hsluva(),\n backgroundColorData.hsluva(),\n ]\n default:\n return [lightness, [0, 0, 0], [255, 255, 255]]\n }\n } else {\n const colorData = new Color({\n render: 'RGB',\n sourceColor: [\n color.rgb.r * 255,\n color.rgb.g * 255,\n color.rgb.b * 255,\n ],\n lightness: lightness[1],\n hueShifting:\n color.hue.shift !== undefined ? color.hue.shift : 0,\n chromaShifting:\n color.chroma.shift !== undefined ? color.chroma.shift : 100,\n algorithmVersion: this.base.algorithmVersion,\n visionSimulationMode: theme.visionSimulationMode,\n })\n\n switch (this.base.colorSpace) {\n case 'LCH':\n return [lightness, colorData.lch()]\n case 'OKLCH':\n return [lightness, colorData.oklch()]\n case 'LAB':\n return [lightness, colorData.lab()]\n case 'OKLAB':\n return [lightness, colorData.oklab()]\n case 'HSL':\n return [lightness, colorData.hsl()]\n case 'HSLUV':\n return [lightness, colorData.hsluv()]\n default:\n return [lightness, [0, 0, 0]]\n }\n }\n })\n\n const paletteDataColorItem: PaletteDataColorItem = {\n id: color.id,\n name: color.name,\n description: color.description,\n shades: [],\n type: 'color',\n },\n sourceColor: Channel = [\n color.rgb.r * 255,\n color.rgb.g * 255,\n color.rgb.b * 255,\n ]\n\n const sourceHsluv = new Hsluv()\n sourceHsluv.rgb_r = color.rgb.r\n sourceHsluv.rgb_g = color.rgb.g\n sourceHsluv.rgb_b = color.rgb.b\n sourceHsluv.rgbToHsluv()\n\n paletteDataColorItem.shades.push({\n name: 'source',\n description: 'Source color',\n hex: chroma(sourceColor).hex(),\n rgb: sourceColor,\n gl: chroma(sourceColor).gl(),\n lch: chroma(sourceColor).lch(),\n oklch: chroma(sourceColor).oklch(),\n lab: chroma(sourceColor).lab(),\n oklab: chroma(sourceColor).oklab(),\n hsl: chroma(sourceColor).hsl(),\n hsluv: [\n sourceHsluv.hsluv_h,\n sourceHsluv.hsluv_s,\n sourceHsluv.hsluv_l,\n ],\n styleId: this.searchForShadeStyleId(\n previousData?.themes ?? this.paletteData.themes,\n theme.id,\n color.id,\n 'source'\n ),\n type: 'source color',\n })\n\n const distances = scaledColors.map((shade) =>\n chroma.distance(\n chroma(sourceColor).hex(),\n chroma(shade[1] as Channel).hex(),\n 'rgb'\n )\n )\n const minDistanceIndex = distances.indexOf(Math.min(...distances))\n\n scaledColors.forEach((scaledColor, index) => {\n const distance: number = chroma.distance(\n chroma(sourceColor).hex(),\n chroma(scaledColor[1] as Channel).hex(),\n 'rgb'\n )\n const scaleName: string =\n Object.keys(this.currentScale).find(\n (key) => key === scaledColor[0][0]\n ) ?? '0'\n const newHsluv = new Hsluv()\n const simulatedSourceColorRgb = new Color({\n render: 'RGB',\n sourceColor: chroma(sourceColor).rgb(),\n visionSimulationMode: theme.visionSimulationMode,\n }).setColor() as Channel\n const simulatedSourceColorHex = new Color({\n render: 'HEX',\n sourceColor: chroma(sourceColor).rgb(),\n visionSimulationMode: theme.visionSimulationMode,\n }).setColor() as HexModel\n\n if (\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ) {\n newHsluv.rgb_r = Number(simulatedSourceColorRgb[0]) / 255\n newHsluv.rgb_g = Number(simulatedSourceColorRgb[1]) / 255\n newHsluv.rgb_b = Number(simulatedSourceColorRgb[2]) / 255\n } else {\n newHsluv.rgb_r = Number(scaledColor[1][0]) / 255\n newHsluv.rgb_g = Number(scaledColor[1][1]) / 255\n newHsluv.rgb_b = Number(scaledColor[1][2]) / 255\n }\n newHsluv.rgbToHsluv()\n\n paletteDataColorItem.shades.push({\n name: scaleName,\n description: `Shade color with ${typeof scaledColor[0][1] === 'number' ? scaledColor[0][1].toFixed(1) : scaledColor[0][1]}% of ${\n color.alpha.isEnabled ? 'opacity' : 'lightness'\n }`,\n hex:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).hex()\n : chroma(scaledColor[1] as Channel).hex(),\n rgb:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).rgb()\n : chroma(scaledColor[1] as Channel).rgb(),\n gl:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).gl()\n : chroma(scaledColor[1] as Channel).gl(),\n lch:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).lch()\n : chroma(scaledColor[1] as Channel).lch(),\n oklch:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).oklch()\n : chroma(scaledColor[1] as Channel).oklch(),\n lab:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).lab()\n : chroma(scaledColor[1] as Channel).lab(),\n oklab:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).oklab()\n : chroma(scaledColor[1] as Channel).oklab(),\n hsl:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled\n ? chroma(simulatedSourceColorHex).hsl()\n : chroma(scaledColor[1] as Channel).hsl(),\n hsluv: [newHsluv.hsluv_h, newHsluv.hsluv_s, newHsluv.hsluv_l],\n alpha: color.alpha.isEnabled\n ? parseFloat(((scaledColor[0][1] as number) / 100).toFixed(2))\n : undefined,\n backgroundColor:\n color.alpha.isEnabled && color.alpha.backgroundColor\n ? chroma(scaledColor[2] as Channel).rgb()\n : undefined,\n mixedColor:\n color.alpha.isEnabled && color.alpha.backgroundColor\n ? new Color({\n visionSimulationMode: theme.visionSimulationMode,\n }).mixColorsRgb(\n [\n ...(scaledColor[1] as Channel),\n parseFloat(\n ((scaledColor[0][1] as number) / 100).toFixed(2)\n ),\n ],\n [...(scaledColor[2] as Channel), 1]\n )\n : undefined,\n styleId: this.searchForShadeStyleId(\n previousData?.themes ?? this.paletteData.themes,\n theme.id,\n color.id,\n scaleName\n ),\n isClosestToRef: distance < 4 && !this.base.areSourceColorsLocked,\n isSourceColorLocked:\n index === minDistanceIndex &&\n this.base.areSourceColorsLocked &&\n !color.alpha.isEnabled,\n isTransparent: color.alpha.isEnabled,\n type: 'color shade',\n })\n })\n\n paletteDataThemeItem.colors.push(paletteDataColorItem)\n })\n this.paletteData.themes.push(paletteDataThemeItem)\n })\n\n return this.paletteData\n }\n\n makePaletteFullData = () => {\n const fullPaletteData = {\n base: this.base,\n themes: this.themes,\n meta: this.meta,\n data: this.makePaletteData(),\n type: 'UI_COLOR_PALETTE',\n version: process.env.VERSION ?? '1.0.0',\n } as FullConfiguration\n\n return fullPaletteData\n }\n}\n"],"names":["Data","base","themes","meta","__publicField","themeId","colorId","shadeName","themeMatch","theme","colorMatch","color","shadeMatch","shade","styleId","previousData","paletteDataThemeItem","scaledColors","lightness","foregroundColorData","Color","backgroundColorData","chroma","colorData","paletteDataColorItem","sourceColor","sourceHsluv","Hsluv","distances","minDistanceIndex","scaledColor","index","distance","scaleName","key","newHsluv","simulatedSourceColorRgb","simulatedSourceColorHex","_a"],"mappings":"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"}
@@ -1,7 +1,4 @@
1
1
  import { Channel, ChannelWithAlpha, HexModel } from './color.types';
2
2
 
3
3
  export type ColorFormat<T extends 'HEX' | 'RGB'> = T extends 'HEX' ? HexModel : Channel | ChannelWithAlpha;
4
- export interface ActionsList {
5
- [action: string]: () => void;
6
- }
7
4
  //# sourceMappingURL=model.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.types.d.ts","sourceRoot":"","sources":["../../src/types/model.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEnE,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,CAAC,SAAS,KAAK,GAC9D,QAAQ,GACR,OAAO,GAAG,gBAAgB,CAAA;AAE9B,MAAM,WAAW,WAAW;IAC1B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,CAAA;CAC7B"}
1
+ {"version":3,"file":"model.types.d.ts","sourceRoot":"","sources":["../../src/types/model.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEnE,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,IAAI,CAAC,SAAS,KAAK,GAC9D,QAAQ,GACR,OAAO,GAAG,gBAAgB,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@a_ng_d/utils-ui-color-palette",
3
3
  "private": false,
4
- "version": "1.0.4",
4
+ "version": "1.0.6",
5
5
  "description": "Core utilities library for UI Color Palette - a color management plugin for design tools. This library provides the foundational color manipulation, contrast calculation, and palette generation features used in the plugin.",
6
6
  "repository": {
7
7
  "type": "git",
@@ -41,17 +41,17 @@
41
41
  "@types/node": "^22.10.1",
42
42
  "@typescript-eslint/eslint-plugin": "^7.2.0",
43
43
  "@typescript-eslint/parser": "^7.2.0",
44
- "@vitest/coverage-v8": "^1.6.0",
44
+ "@vitest/coverage-v8": "^3.1.4",
45
45
  "dotenv-cli": "^7.4.2",
46
46
  "eslint": "^8.57.0",
47
47
  "eslint-config-prettier": "^9.1.0",
48
48
  "glob": "^10.3.12",
49
49
  "prettier": "^3.2.5",
50
50
  "typescript": "^5.4.3",
51
- "vite": "^5.2.0",
51
+ "vite": "^6.3.5",
52
52
  "vite-plugin-dts": "^3.9.1",
53
53
  "vite-tsconfig-paths": "^4.3.2",
54
- "vitest": "^1.6.0"
54
+ "vitest": "^3.1.4"
55
55
  },
56
56
  "dependencies": {
57
57
  "apca-w3": "^0.1.9",
@@ -1 +0,0 @@
1
- {"version":3,"file":"color-BND6T00o.js","sources":["../node_modules/hsluv/dist/hsluv.mjs","../src/modules/color/color.ts"],"sourcesContent":["export class Hsluv {\n constructor() {\n // RGB\n this.hex = '#000000';\n this.rgb_r = 0;\n this.rgb_g = 0;\n this.rgb_b = 0;\n // CIE XYZ\n this.xyz_x = 0;\n this.xyz_y = 0;\n this.xyz_z = 0;\n // CIE LUV\n this.luv_l = 0;\n this.luv_u = 0;\n this.luv_v = 0;\n // CIE LUV LCh\n this.lch_l = 0;\n this.lch_c = 0;\n this.lch_h = 0;\n // HSLuv\n this.hsluv_h = 0;\n this.hsluv_s = 0;\n this.hsluv_l = 0;\n // HPLuv\n this.hpluv_h = 0;\n this.hpluv_p = 0;\n this.hpluv_l = 0;\n // 6 lines in slope-intercept format: R < 0, R > 1, G < 0, G > 1, B < 0, B > 1\n this.r0s = 0;\n this.r0i = 0;\n this.r1s = 0;\n this.r1i = 0;\n this.g0s = 0;\n this.g0i = 0;\n this.g1s = 0;\n this.g1i = 0;\n this.b0s = 0;\n this.b0i = 0;\n this.b1s = 0;\n this.b1i = 0;\n }\n static fromLinear(c) {\n if (c <= 0.0031308) {\n return 12.92 * c;\n }\n else {\n return 1.055 * Math.pow(c, 1 / 2.4) - 0.055;\n }\n }\n static toLinear(c) {\n if (c > 0.04045) {\n return Math.pow((c + 0.055) / 1.055, 2.4);\n }\n else {\n return c / 12.92;\n }\n }\n static yToL(Y) {\n if (Y <= Hsluv.epsilon) {\n return Y / Hsluv.refY * Hsluv.kappa;\n }\n else {\n return 116 * Math.pow(Y / Hsluv.refY, 1 / 3) - 16;\n }\n }\n static lToY(L) {\n if (L <= 8) {\n return Hsluv.refY * L / Hsluv.kappa;\n }\n else {\n return Hsluv.refY * Math.pow((L + 16) / 116, 3);\n }\n }\n static rgbChannelToHex(chan) {\n const c = Math.round(chan * 255);\n const digit2 = c % 16;\n const digit1 = (c - digit2) / 16 | 0;\n return Hsluv.hexChars.charAt(digit1) + Hsluv.hexChars.charAt(digit2);\n }\n static hexToRgbChannel(hex, offset) {\n const digit1 = Hsluv.hexChars.indexOf(hex.charAt(offset));\n const digit2 = Hsluv.hexChars.indexOf(hex.charAt(offset + 1));\n const n = digit1 * 16 + digit2;\n return n / 255.0;\n }\n static distanceFromOriginAngle(slope, intercept, angle) {\n const d = intercept / (Math.sin(angle) - slope * Math.cos(angle));\n if (d < 0) {\n return Infinity;\n }\n else {\n return d;\n }\n }\n static distanceFromOrigin(slope, intercept) {\n return Math.abs(intercept) / Math.sqrt(Math.pow(slope, 2) + 1);\n }\n static min6(f1, f2, f3, f4, f5, f6) {\n return Math.min(f1, Math.min(f2, Math.min(f3, Math.min(f4, Math.min(f5, f6)))));\n }\n rgbToHex() {\n this.hex = \"#\";\n this.hex += Hsluv.rgbChannelToHex(this.rgb_r);\n this.hex += Hsluv.rgbChannelToHex(this.rgb_g);\n this.hex += Hsluv.rgbChannelToHex(this.rgb_b);\n }\n hexToRgb() {\n this.hex = this.hex.toLowerCase();\n this.rgb_r = Hsluv.hexToRgbChannel(this.hex, 1);\n this.rgb_g = Hsluv.hexToRgbChannel(this.hex, 3);\n this.rgb_b = Hsluv.hexToRgbChannel(this.hex, 5);\n }\n xyzToRgb() {\n this.rgb_r = Hsluv.fromLinear(Hsluv.m_r0 * this.xyz_x + Hsluv.m_r1 * this.xyz_y + Hsluv.m_r2 * this.xyz_z);\n this.rgb_g = Hsluv.fromLinear(Hsluv.m_g0 * this.xyz_x + Hsluv.m_g1 * this.xyz_y + Hsluv.m_g2 * this.xyz_z);\n this.rgb_b = Hsluv.fromLinear(Hsluv.m_b0 * this.xyz_x + Hsluv.m_b1 * this.xyz_y + Hsluv.m_b2 * this.xyz_z);\n }\n rgbToXyz() {\n const lr = Hsluv.toLinear(this.rgb_r);\n const lg = Hsluv.toLinear(this.rgb_g);\n const lb = Hsluv.toLinear(this.rgb_b);\n this.xyz_x = 0.41239079926595 * lr + 0.35758433938387 * lg + 0.18048078840183 * lb;\n this.xyz_y = 0.21263900587151 * lr + 0.71516867876775 * lg + 0.072192315360733 * lb;\n this.xyz_z = 0.019330818715591 * lr + 0.11919477979462 * lg + 0.95053215224966 * lb;\n }\n xyzToLuv() {\n const divider = this.xyz_x + 15 * this.xyz_y + 3 * this.xyz_z;\n let varU = 4 * this.xyz_x;\n let varV = 9 * this.xyz_y;\n if (divider !== 0) {\n varU /= divider;\n varV /= divider;\n }\n else {\n varU = NaN;\n varV = NaN;\n }\n this.luv_l = Hsluv.yToL(this.xyz_y);\n if (this.luv_l === 0) {\n this.luv_u = 0;\n this.luv_v = 0;\n }\n else {\n this.luv_u = 13 * this.luv_l * (varU - Hsluv.refU);\n this.luv_v = 13 * this.luv_l * (varV - Hsluv.refV);\n }\n }\n luvToXyz() {\n if (this.luv_l === 0) {\n this.xyz_x = 0;\n this.xyz_y = 0;\n this.xyz_z = 0;\n return;\n }\n const varU = this.luv_u / (13 * this.luv_l) + Hsluv.refU;\n const varV = this.luv_v / (13 * this.luv_l) + Hsluv.refV;\n this.xyz_y = Hsluv.lToY(this.luv_l);\n this.xyz_x = 0 - 9 * this.xyz_y * varU / ((varU - 4) * varV - varU * varV);\n this.xyz_z = (9 * this.xyz_y - 15 * varV * this.xyz_y - varV * this.xyz_x) / (3 * varV);\n }\n luvToLch() {\n this.lch_l = this.luv_l;\n this.lch_c = Math.sqrt(this.luv_u * this.luv_u + this.luv_v * this.luv_v);\n if (this.lch_c < 0.00000001) {\n this.lch_h = 0;\n }\n else {\n const hrad = Math.atan2(this.luv_v, this.luv_u);\n this.lch_h = hrad * 180.0 / Math.PI;\n if (this.lch_h < 0) {\n this.lch_h = 360 + this.lch_h;\n }\n }\n }\n lchToLuv() {\n const hrad = this.lch_h / 180.0 * Math.PI;\n this.luv_l = this.lch_l;\n this.luv_u = Math.cos(hrad) * this.lch_c;\n this.luv_v = Math.sin(hrad) * this.lch_c;\n }\n calculateBoundingLines(l) {\n const sub1 = Math.pow(l + 16, 3) / 1560896;\n const sub2 = sub1 > Hsluv.epsilon ? sub1 : l / Hsluv.kappa;\n const s1r = sub2 * (284517 * Hsluv.m_r0 - 94839 * Hsluv.m_r2);\n const s2r = sub2 * (838422 * Hsluv.m_r2 + 769860 * Hsluv.m_r1 + 731718 * Hsluv.m_r0);\n const s3r = sub2 * (632260 * Hsluv.m_r2 - 126452 * Hsluv.m_r1);\n const s1g = sub2 * (284517 * Hsluv.m_g0 - 94839 * Hsluv.m_g2);\n const s2g = sub2 * (838422 * Hsluv.m_g2 + 769860 * Hsluv.m_g1 + 731718 * Hsluv.m_g0);\n const s3g = sub2 * (632260 * Hsluv.m_g2 - 126452 * Hsluv.m_g1);\n const s1b = sub2 * (284517 * Hsluv.m_b0 - 94839 * Hsluv.m_b2);\n const s2b = sub2 * (838422 * Hsluv.m_b2 + 769860 * Hsluv.m_b1 + 731718 * Hsluv.m_b0);\n const s3b = sub2 * (632260 * Hsluv.m_b2 - 126452 * Hsluv.m_b1);\n this.r0s = s1r / s3r;\n this.r0i = s2r * l / s3r;\n this.r1s = s1r / (s3r + 126452);\n this.r1i = (s2r - 769860) * l / (s3r + 126452);\n this.g0s = s1g / s3g;\n this.g0i = s2g * l / s3g;\n this.g1s = s1g / (s3g + 126452);\n this.g1i = (s2g - 769860) * l / (s3g + 126452);\n this.b0s = s1b / s3b;\n this.b0i = s2b * l / s3b;\n this.b1s = s1b / (s3b + 126452);\n this.b1i = (s2b - 769860) * l / (s3b + 126452);\n }\n calcMaxChromaHpluv() {\n const r0 = Hsluv.distanceFromOrigin(this.r0s, this.r0i);\n const r1 = Hsluv.distanceFromOrigin(this.r1s, this.r1i);\n const g0 = Hsluv.distanceFromOrigin(this.g0s, this.g0i);\n const g1 = Hsluv.distanceFromOrigin(this.g1s, this.g1i);\n const b0 = Hsluv.distanceFromOrigin(this.b0s, this.b0i);\n const b1 = Hsluv.distanceFromOrigin(this.b1s, this.b1i);\n return Hsluv.min6(r0, r1, g0, g1, b0, b1);\n }\n calcMaxChromaHsluv(h) {\n const hueRad = h / 360 * Math.PI * 2;\n const r0 = Hsluv.distanceFromOriginAngle(this.r0s, this.r0i, hueRad);\n const r1 = Hsluv.distanceFromOriginAngle(this.r1s, this.r1i, hueRad);\n const g0 = Hsluv.distanceFromOriginAngle(this.g0s, this.g0i, hueRad);\n const g1 = Hsluv.distanceFromOriginAngle(this.g1s, this.g1i, hueRad);\n const b0 = Hsluv.distanceFromOriginAngle(this.b0s, this.b0i, hueRad);\n const b1 = Hsluv.distanceFromOriginAngle(this.b1s, this.b1i, hueRad);\n return Hsluv.min6(r0, r1, g0, g1, b0, b1);\n }\n hsluvToLch() {\n if (this.hsluv_l > 99.9999999) {\n this.lch_l = 100;\n this.lch_c = 0;\n }\n else if (this.hsluv_l < 0.00000001) {\n this.lch_l = 0;\n this.lch_c = 0;\n }\n else {\n this.lch_l = this.hsluv_l;\n this.calculateBoundingLines(this.hsluv_l);\n const max = this.calcMaxChromaHsluv(this.hsluv_h);\n this.lch_c = max / 100 * this.hsluv_s;\n }\n this.lch_h = this.hsluv_h;\n }\n lchToHsluv() {\n if (this.lch_l > 99.9999999) {\n this.hsluv_s = 0;\n this.hsluv_l = 100;\n }\n else if (this.lch_l < 0.00000001) {\n this.hsluv_s = 0;\n this.hsluv_l = 0;\n }\n else {\n this.calculateBoundingLines(this.lch_l);\n const max = this.calcMaxChromaHsluv(this.lch_h);\n this.hsluv_s = this.lch_c / max * 100;\n this.hsluv_l = this.lch_l;\n }\n this.hsluv_h = this.lch_h;\n }\n hpluvToLch() {\n if (this.hpluv_l > 99.9999999) {\n this.lch_l = 100;\n this.lch_c = 0;\n }\n else if (this.hpluv_l < 0.00000001) {\n this.lch_l = 0;\n this.lch_c = 0;\n }\n else {\n this.lch_l = this.hpluv_l;\n this.calculateBoundingLines(this.hpluv_l);\n const max = this.calcMaxChromaHpluv();\n this.lch_c = max / 100 * this.hpluv_p;\n }\n this.lch_h = this.hpluv_h;\n }\n lchToHpluv() {\n if (this.lch_l > 99.9999999) {\n this.hpluv_p = 0;\n this.hpluv_l = 100;\n }\n else if (this.lch_l < 0.00000001) {\n this.hpluv_p = 0;\n this.hpluv_l = 0;\n }\n else {\n this.calculateBoundingLines(this.lch_l);\n const max = this.calcMaxChromaHpluv();\n this.hpluv_p = this.lch_c / max * 100;\n this.hpluv_l = this.lch_l;\n }\n this.hpluv_h = this.lch_h;\n }\n hsluvToRgb() {\n this.hsluvToLch();\n this.lchToLuv();\n this.luvToXyz();\n this.xyzToRgb();\n }\n hpluvToRgb() {\n this.hpluvToLch();\n this.lchToLuv();\n this.luvToXyz();\n this.xyzToRgb();\n }\n hsluvToHex() {\n this.hsluvToRgb();\n this.rgbToHex();\n }\n hpluvToHex() {\n this.hpluvToRgb();\n this.rgbToHex();\n }\n rgbToHsluv() {\n this.rgbToXyz();\n this.xyzToLuv();\n this.luvToLch();\n this.lchToHpluv();\n this.lchToHsluv();\n }\n rgbToHpluv() {\n this.rgbToXyz();\n this.xyzToLuv();\n this.luvToLch();\n this.lchToHpluv();\n this.lchToHpluv();\n }\n hexToHsluv() {\n this.hexToRgb();\n this.rgbToHsluv();\n }\n hexToHpluv() {\n this.hexToRgb();\n this.rgbToHpluv();\n }\n}\nHsluv.hexChars = \"0123456789abcdef\";\nHsluv.refY = 1.0;\nHsluv.refU = 0.19783000664283;\nHsluv.refV = 0.46831999493879;\nHsluv.kappa = 903.2962962;\nHsluv.epsilon = 0.0088564516;\nHsluv.m_r0 = 3.240969941904521;\nHsluv.m_r1 = -1.537383177570093;\nHsluv.m_r2 = -0.498610760293;\nHsluv.m_g0 = -0.96924363628087;\nHsluv.m_g1 = 1.87596750150772;\nHsluv.m_g2 = 0.041555057407175;\nHsluv.m_b0 = 0.055630079696993;\nHsluv.m_b1 = -0.20397695888897;\nHsluv.m_b2 = 1.056971514242878;\n","import {\n AlgorithmVersionConfiguration,\n VisionSimulationModeConfiguration,\n} from '@tps/configuration.types'\nimport chroma from 'chroma-js'\nimport { Hsluv } from 'hsluv'\nimport { ActionsList, ColorFormat } from '@tps/model.types'\nimport { Channel, ChannelWithAlpha, HexModel } from '@tps/color.types'\n\nconst colorBlindMatrices = {\n PROTANOPIA: [\n [0.567, 0.433, 0],\n [0.558, 0.442, 0],\n [0, 0.242, 0.758],\n ],\n PROTANOMALY: [\n [0.817, 0.183, 0],\n [0.333, 0.667, 0],\n [0, 0.125, 0.875],\n ],\n DEUTERANOPIA: [\n [0.625, 0.375, 0],\n [0.7, 0.3, 0],\n [0, 0.3, 0.7],\n ],\n DEUTERANOMALY: [\n [0.8, 0.2, 0],\n [0.258, 0.742, 0],\n [0, 0.142, 0.858],\n ],\n TRITANOPIA: [\n [0.95, 0.05, 0],\n [0, 0.433, 0.567],\n [0, 0.475, 0.525],\n ],\n TRITANOMALY: [\n [0.967, 0.033, 0],\n [0, 0.733, 0.267],\n [0, 0.183, 0.817],\n ],\n ACHROMATOPSIA: [\n [0.299, 0.587, 0.114],\n [0.299, 0.587, 0.114],\n [0.299, 0.587, 0.114],\n ],\n ACHROMATOMALY: [\n [0.618, 0.32, 0.062],\n [0.163, 0.775, 0.062],\n [0.163, 0.32, 0.516],\n ],\n}\n\nconst applyColorMatrix = (color: Channel, matrix: number[][]): Channel => {\n const [r, g, b] = color\n const [m1, m2, m3] = matrix\n\n return [\n Math.round(r * m1[0] + g * m1[1] + b * m1[2]),\n Math.round(r * m2[0] + g * m2[1] + b * m2[2]),\n Math.round(r * m3[0] + g * m3[1] + b * m3[2]),\n ]\n}\n\nexport default class Color {\n private render: 'HEX' | 'RGB'\n private sourceColor: Channel\n private lightness: number\n private alpha: number\n private hueShifting: number\n private chromaShifting: number\n private algorithmVersion: AlgorithmVersionConfiguration\n private visionSimulationMode: VisionSimulationModeConfiguration\n\n constructor({\n render = 'HEX',\n sourceColor = [0, 0, 0],\n lightness = parseFloat((chroma(sourceColor).luminance() * 100).toFixed(1)),\n alpha = 1,\n hueShifting = 0,\n chromaShifting = 100,\n algorithmVersion = 'v3',\n visionSimulationMode = 'NONE',\n }: {\n render?: 'HEX' | 'RGB'\n sourceColor?: Channel\n lightness?: number\n alpha?: number\n hueShifting?: number\n chromaShifting?: number\n algorithmVersion?: AlgorithmVersionConfiguration\n visionSimulationMode?: VisionSimulationModeConfiguration\n }) {\n this.render = render\n this.sourceColor = sourceColor\n this.lightness = lightness\n this.alpha = alpha\n this.hueShifting = hueShifting\n this.chromaShifting = chromaShifting\n this.algorithmVersion = algorithmVersion\n this.visionSimulationMode = visionSimulationMode\n }\n\n adjustHue = (hue: number): number => {\n if (hue + this.hueShifting < 0) return hue + this.hueShifting + 360\n if (hue + this.hueShifting > 360) return hue + this.hueShifting - 360\n\n return hue + this.hueShifting\n }\n\n adjustChroma = (chroma: number): number => {\n if (this.algorithmVersion === 'v1') return chroma\n if (this.algorithmVersion === 'v2')\n return Math.sin((this.lightness / 100) * Math.PI) * chroma\n if (this.algorithmVersion === 'v3') {\n const lightnessFactor = this.lightness / 100\n const sinComponent = Math.sin(lightnessFactor * Math.PI)\n const tanhComponent = Math.tanh(lightnessFactor * Math.PI)\n const weightedComponent = sinComponent * 0.5 + tanhComponent * 0.5\n const smoothedComponent = Math.pow(weightedComponent, 0.5)\n\n return smoothedComponent * chroma\n }\n\n return chroma\n }\n\n setColor = (): ColorFormat<typeof this.render> => {\n if (this.render === 'HEX')\n return this.simulateColorBlindHex(this.sourceColor)\n\n return this.simulateColorBlindRgb(this.sourceColor)\n }\n\n setColorWithAlpha = (): ColorFormat<typeof this.render> => {\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(this.sourceColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(this.sourceColor), this.alpha]\n }\n\n lch = (): ColorFormat<typeof this.render> => {\n const lch = chroma(this.sourceColor).lch(),\n newColor = chroma\n .lch(\n this.lightness,\n this.adjustChroma(lch[1] * (this.chromaShifting / 100)),\n this.adjustHue(lch[2])\n )\n .rgb()\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n lcha = (): ColorFormat<typeof this.render> => {\n const lch = chroma(this.sourceColor).lch(),\n newColor = chroma\n .lch(\n lch[0],\n this.adjustChroma(lch[1] * (this.chromaShifting / 100)),\n this.adjustHue(lch[2])\n )\n .rgb()\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n oklch = (): ColorFormat<typeof this.render> => {\n const oklch = chroma(this.sourceColor).oklch(),\n newColor = chroma\n .oklch(\n this.lightness / 100,\n this.adjustChroma(oklch[1] * (this.chromaShifting / 100)),\n this.adjustHue(oklch[2])\n )\n .rgb()\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n oklcha = (): ColorFormat<typeof this.render> => {\n const oklch = chroma(this.sourceColor).oklch(),\n newColor = chroma\n .oklch(\n oklch[0],\n this.adjustChroma(oklch[1] * (this.chromaShifting / 100)),\n this.adjustHue(oklch[2])\n )\n .rgb()\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n lab = (): ColorFormat<typeof this.render> => {\n const labA = chroma(this.sourceColor).get('lab.a'),\n labB = chroma(this.sourceColor).get('lab.b'),\n chr = Math.sqrt(labA ** 2 + labB ** 2) * (this.chromaShifting / 100)\n let h = Math.atan(labB / labA) + this.hueShifting * (Math.PI / 180)\n\n if (h > Math.PI) h = Math.PI\n else if (h < -Math.PI) h = Math.PI\n\n let newLabA = chr * Math.cos(h),\n newLabB = chr * Math.sin(h)\n\n if (Math.sign(labA) === -1 && Math.sign(labB) === 1) {\n newLabA *= -1\n newLabB *= -1\n }\n if (Math.sign(labA) === -1 && Math.sign(labB) === -1) {\n newLabA *= -1\n newLabB *= -1\n }\n\n const newColor = chroma\n .lab(\n this.lightness,\n this.adjustChroma(newLabA),\n this.adjustChroma(newLabB)\n )\n .rgb()\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n laba = (): ColorFormat<typeof this.render> => {\n const labA = chroma(this.sourceColor).get('lab.a'),\n labB = chroma(this.sourceColor).get('lab.b'),\n labL = chroma(this.sourceColor).get('lab.l'),\n chr = Math.sqrt(labA ** 2 + labB ** 2) * (this.chromaShifting / 100)\n let h = Math.atan(labB / labA) + this.hueShifting * (Math.PI / 180)\n\n if (h > Math.PI) h = Math.PI\n else if (h < -Math.PI) h = Math.PI\n\n let newLabA = chr * Math.cos(h),\n newLabB = chr * Math.sin(h)\n\n if (Math.sign(labA) === -1 && Math.sign(labB) === 1) {\n newLabA *= -1\n newLabB *= -1\n }\n if (Math.sign(labA) === -1 && Math.sign(labB) === -1) {\n newLabA *= -1\n newLabB *= -1\n }\n\n const newColor = chroma\n .lab(labL, this.adjustChroma(newLabA), this.adjustChroma(newLabB))\n .rgb()\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n oklab = (): ColorFormat<typeof this.render> => {\n const labA = chroma(this.sourceColor).get('oklab.a'),\n labB = chroma(this.sourceColor).get('oklab.b'),\n chr = Math.sqrt(labA ** 2 + labB ** 2) * (this.chromaShifting / 100)\n let h = Math.atan(labB / labA) + this.hueShifting * (Math.PI / 180)\n\n if (h > Math.PI) h = Math.PI\n else if (h < -Math.PI) h = Math.PI\n\n let newLabA = chr * Math.cos(h),\n newLabB = chr * Math.sin(h)\n\n if (Math.sign(labA) === -1 && Math.sign(labB) === 1) {\n newLabA *= -1\n newLabB *= -1\n }\n if (Math.sign(labA) === -1 && Math.sign(labB) === -1) {\n newLabA *= -1\n newLabB *= -1\n }\n\n if (Number.isNaN(newLabA)) newLabA = 0\n if (Number.isNaN(newLabB)) newLabB = 0\n\n const newColor = chroma\n .oklab(\n this.lightness / 100,\n this.adjustChroma(newLabA),\n this.adjustChroma(newLabB)\n )\n .rgb()\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n oklaba = (): ColorFormat<typeof this.render> => {\n const labA = chroma(this.sourceColor).get('oklab.a'),\n labB = chroma(this.sourceColor).get('oklab.b'),\n labL = chroma(this.sourceColor).get('oklab.l'),\n chr = Math.sqrt(labA ** 2 + labB ** 2) * (this.chromaShifting / 100)\n let h = Math.atan(labB / labA) + this.hueShifting * (Math.PI / 180)\n\n if (h > Math.PI) h = Math.PI\n else if (h < -Math.PI) h = Math.PI\n\n let newLabA = chr * Math.cos(h),\n newLabB = chr * Math.sin(h)\n\n if (Math.sign(labA) === -1 && Math.sign(labB) === 1) {\n newLabA *= -1\n newLabB *= -1\n }\n if (Math.sign(labA) === -1 && Math.sign(labB) === -1) {\n newLabA *= -1\n newLabB *= -1\n }\n\n if (Number.isNaN(newLabA)) newLabA = 0\n if (Number.isNaN(newLabB)) newLabB = 0\n\n const newColor = chroma\n .oklab(labL, this.adjustChroma(newLabA), this.adjustChroma(newLabB))\n .rgb()\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n hsl = (): ColorFormat<typeof this.render> => {\n const hsl = chroma(this.sourceColor).hsl(),\n newColor = chroma\n .hsl(\n this.adjustHue(hsl[0]),\n this.adjustChroma(hsl[1] * (this.chromaShifting / 100)),\n this.lightness / 100\n )\n .rgb()\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n hsla = (): ColorFormat<typeof this.render> => {\n const hsl = chroma(this.sourceColor).hsl(),\n newColor = chroma\n .hsl(\n this.adjustHue(hsl[0]),\n this.adjustChroma(hsl[1] * (this.chromaShifting / 100)),\n hsl[2]\n )\n .rgb()\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n hsluv = (): ColorFormat<typeof this.render> => {\n const hsluv = new Hsluv()\n\n hsluv.rgb_r = this.sourceColor[0] / 255\n hsluv.rgb_g = this.sourceColor[1] / 255\n hsluv.rgb_b = this.sourceColor[2] / 255\n\n hsluv.rgbToHsluv()\n\n hsluv.hsluv_l = this.lightness\n hsluv.hsluv_s = this.adjustChroma(\n hsluv.hsluv_s * (this.chromaShifting / 100)\n )\n hsluv.hsluv_h = this.adjustHue(hsluv.hsluv_h)\n\n if (Number.isNaN(hsluv.hsluv_s)) hsluv.hsluv_s = 0\n if (Number.isNaN(hsluv.hsluv_h)) hsluv.hsluv_h = 0\n\n hsluv.hsluvToRgb()\n\n const newColor: Channel = [\n hsluv.rgb_r * 255,\n hsluv.rgb_g * 255,\n hsluv.rgb_b * 255,\n ]\n\n if (this.render === 'HEX') return this.simulateColorBlindHex(newColor)\n\n return this.simulateColorBlindRgb(newColor)\n }\n\n hsluva = (): ColorFormat<typeof this.render> => {\n const hsluv = new Hsluv()\n\n hsluv.rgb_r = this.sourceColor[0] / 255\n hsluv.rgb_g = this.sourceColor[1] / 255\n hsluv.rgb_b = this.sourceColor[2] / 255\n\n hsluv.rgbToHsluv()\n\n hsluv.hsluv_s = this.adjustChroma(\n hsluv.hsluv_s * (this.chromaShifting / 100)\n )\n hsluv.hsluv_h = this.adjustHue(hsluv.hsluv_h)\n\n if (Number.isNaN(hsluv.hsluv_s)) hsluv.hsluv_s = 0\n if (Number.isNaN(hsluv.hsluv_h)) hsluv.hsluv_h = 0\n\n hsluv.hsluvToRgb()\n\n const newColor: Channel = [\n hsluv.rgb_r * 255,\n hsluv.rgb_g * 255,\n hsluv.rgb_b * 255,\n ]\n\n if (this.render === 'HEX')\n return chroma\n .rgb(...this.simulateColorBlindRgb(newColor), this.alpha)\n .hex()\n\n return [...this.simulateColorBlindRgb(newColor), this.alpha]\n }\n\n getHsluv = (): Channel => {\n const hsluv = new Hsluv()\n hsluv.rgb_r = this.sourceColor[0] / 255\n hsluv.rgb_g = this.sourceColor[1] / 255\n hsluv.rgb_b = this.sourceColor[2] / 255\n hsluv.rgbToHsluv()\n\n return [hsluv.hsluv_h, hsluv.hsluv_s, hsluv.hsluv_l]\n }\n\n simulateColorBlindHex = (color: Channel): HexModel => {\n const actions: ActionsList = {\n NONE: () => chroma(color).hex(),\n PROTANOMALY: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.PROTANOMALY\n )\n return chroma(transformed).hex()\n },\n PROTANOPIA: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.PROTANOPIA\n )\n return chroma(transformed).hex()\n },\n DEUTERANOMALY: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.DEUTERANOMALY\n )\n return chroma(transformed).hex()\n },\n DEUTERANOPIA: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.DEUTERANOPIA\n )\n return chroma(transformed).hex()\n },\n TRITANOMALY: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.TRITANOMALY\n )\n return chroma(transformed).hex()\n },\n TRITANOPIA: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.TRITANOPIA\n )\n return chroma(transformed).hex()\n },\n ACHROMATOMALY: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.ACHROMATOMALY\n )\n return chroma(transformed).hex()\n },\n ACHROMATOPSIA: () => {\n const transformed = applyColorMatrix(\n color,\n colorBlindMatrices.ACHROMATOPSIA\n )\n return chroma(transformed).hex()\n },\n }\n\n const result = actions[this.visionSimulationMode]?.()\n return result !== undefined ? result : '#000000'\n }\n\n simulateColorBlindRgb = (color: Channel): Channel => {\n const actions: ActionsList = {\n NONE: () => chroma(color).rgb(),\n PROTANOMALY: () =>\n applyColorMatrix(color, colorBlindMatrices.PROTANOMALY),\n PROTANOPIA: () => applyColorMatrix(color, colorBlindMatrices.PROTANOPIA),\n DEUTERANOMALY: () =>\n applyColorMatrix(color, colorBlindMatrices.DEUTERANOMALY),\n DEUTERANOPIA: () =>\n applyColorMatrix(color, colorBlindMatrices.DEUTERANOPIA),\n TRITANOMALY: () =>\n applyColorMatrix(color, colorBlindMatrices.TRITANOMALY),\n TRITANOPIA: () => applyColorMatrix(color, colorBlindMatrices.TRITANOPIA),\n ACHROMATOMALY: () =>\n applyColorMatrix(color, colorBlindMatrices.ACHROMATOMALY),\n ACHROMATOPSIA: () =>\n applyColorMatrix(color, colorBlindMatrices.ACHROMATOPSIA),\n }\n\n const result = actions[this.visionSimulationMode]?.()\n return result !== undefined ? result : [0, 0, 0]\n }\n\n mixColorsRgb = (\n colorA: ChannelWithAlpha,\n colorB: ChannelWithAlpha\n ): Channel => {\n const [r1, g1, b1, a1] = colorA\n const [r2, g2, b2, a2] = colorB\n\n if (a1 === 1) return [r1, g1, b1]\n if (a1 === 0) return [r2, g2, b2]\n\n const alpha = a1 + a2 * (1 - a1)\n const r = Math.min(\n 255,\n Math.max(0, Math.round((r1 * a1 + r2 * a2 * (1 - a1)) / alpha))\n )\n const g = Math.min(\n 255,\n Math.max(0, Math.round((g1 * a1 + g2 * a2 * (1 - a1)) / alpha))\n )\n const b = Math.min(\n 255,\n Math.max(0, Math.round((b1 * a1 + b2 * a2 * (1 - a1)) / alpha))\n )\n\n return this.simulateColorBlindRgb([r, g, b])\n }\n\n mixColorsHex = (colorA: HexModel, colorB: HexModel): HexModel => {\n if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(colorA)) return colorA\n if (!/^#([0-9A-Fa-f]{3}){1,2}$/.test(colorB)) return colorB\n const rgbA = chroma(colorA).rgba()\n const rgbB = chroma(colorB).rgba()\n const mixed = this.mixColorsRgb(rgbA, rgbB)\n\n return chroma(mixed).hex()\n }\n}\n"],"names":["Hsluv","c","Y","L","chan","digit2","digit1","hex","offset","slope","intercept","angle","d","f1","f2","f3","f4","f5","f6","lr","lg","lb","divider","varU","varV","hrad","l","sub1","sub2","s1r","s2r","s3r","s1g","s2g","s3g","s1b","s2b","s3b","r0","r1","g0","g1","b0","b1","h","hueRad","max","colorBlindMatrices","applyColorMatrix","color","matrix","r","g","b","m1","m2","m3","Color","render","sourceColor","lightness","chroma","alpha","hueShifting","chromaShifting","algorithmVersion","visionSimulationMode","__publicField","hue","lightnessFactor","sinComponent","tanhComponent","weightedComponent","lch","newColor","oklch","labA","labB","chr","newLabA","newLabB","labL","hsl","hsluv","actions","transformed","result","_a","colorA","colorB","a1","r2","g2","b2","a2","rgbA","rgbB","mixed"],"mappings":"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","x_google_ignoreList":[0]}