chromametry 0.3.2 → 0.3.4
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 +153 -127
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +18 -1
- package/dist/index.d.ts +18 -1
- package/dist/index.global.js +1 -1
- package/dist/index.js +1 -1
- package/dist/palettes.js +1 -0
- package/package.json +10 -2
package/README.md
CHANGED
|
@@ -23,17 +23,17 @@
|
|
|
23
23
|
Comparison of popular design systems based on Chromametry metrics.
|
|
24
24
|
| Design System | Steps | Span (K) | Contrast Efficiency | Lightness Linearity | Chroma Smoothness | Hue Stability | Spacing Uniformity | **SCORE** |
|
|
25
25
|
| :--------------------- | :---: | :------: | :-----------------: | :-----------------: | :---------------: | :-----------: | :----------------: | :-------: |
|
|
26
|
-
| Adobe Spectrum | 18 | 9 | 0.
|
|
27
|
-
| IBM Carbon | 12 | 6 | 0.
|
|
28
|
-
| U.S. Web Design System | 12 | 6 | 0.
|
|
29
|
-
| Salesforce Lightning 2 | 14 | 7 | 0.
|
|
30
|
-
| GitHub Primer Brand | 12 | 6 | 0.
|
|
31
|
-
| Atlassian | 14 | 8 | 0.
|
|
32
|
-
| Tailwind CSS | 13 | 8 | 0.
|
|
33
|
-
| Ant Design | 12 | 9 | 0.
|
|
34
|
-
| Material UI | 12 | 11 | 0.
|
|
35
|
-
| Radix UI | 13 | 10 | 0.
|
|
36
|
-
| Shopify Polaris | 17 | 15 | 0.
|
|
26
|
+
| Adobe Spectrum | 18 | 9 | 0.9431 | 0.9333 | 0.8786 | 0.9138 | 0.7722 | **88.59** |
|
|
27
|
+
| IBM Carbon | 12 | 6 | 0.9109 | 0.9303 | 0.8688 | 0.9288 | 0.7919 | **88.46** |
|
|
28
|
+
| U.S. Web Design System | 12 | 6 | 0.9109 | 0.9359 | 0.8096 | 0.9380 | 0.7997 | **87.67** |
|
|
29
|
+
| Salesforce Lightning 2 | 14 | 7 | 0.9249 | 0.9187 | 0.8464 | 0.9372 | 0.7107 | **86.31** |
|
|
30
|
+
| GitHub Primer Brand | 12 | 6 | 0.9109 | 0.9243 | 0.8405 | 0.9408 | 0.6841 | **85.45** |
|
|
31
|
+
| Atlassian | 14 | 8 | 0.7708 | 0.8964 | 0.9094 | 0.9465 | 0.7129 | **84.23** |
|
|
32
|
+
| Tailwind CSS | 13 | 8 | 0.7561 | 0.8705 | 0.8565 | 0.9147 | 0.6780 | **81.04** |
|
|
33
|
+
| Ant Design | 12 | 9 | 0.6652 | 0.8586 | 0.8734 | 0.9276 | 0.6550 | **78.76** |
|
|
34
|
+
| Material UI | 12 | 11 | 0.5067 | 0.7967 | 0.7861 | 0.9239 | 0.5500 | **69.43** |
|
|
35
|
+
| Radix UI | 13 | 10 | 0.4742 | 0.7979 | 0.7679 | 0.9468 | 0.5207 | **67.80** |
|
|
36
|
+
| Shopify Polaris | 17 | 15 | 0.2824 | 0.7281 | 0.6892 | 0.9223 | 0.4667 | **57.16** |
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
|
|
@@ -42,7 +42,7 @@ Comparison of popular design systems based on Chromametry metrics.
|
|
|
42
42
|
|
|
43
43
|
> **Note:** Design systems like Bootstrap,Google Material 3, Apple Human Interface or Fluent UI are excluded as they define discrete semantic tokens rather than algorithmic sequential ramps.
|
|
44
44
|
|
|
45
|
-
> **Overall Score** is computed as the
|
|
45
|
+
> **Overall Score** is computed as the geometric mean of the five normalized metrics.
|
|
46
46
|
|
|
47
47
|
### Example: A Typical Report
|
|
48
48
|
|
|
@@ -57,134 +57,160 @@ Comparison of popular design systems based on Chromametry metrics.
|
|
|
57
57
|
|
|
58
58
|
## Benchmark result page
|
|
59
59
|
|
|
60
|
-
- Online Report : [Benchmark page](https://chromametry.github.io/chromametry/benchmark/)
|
|
61
|
-
- Local `/benchmark/index.html` (double click)
|
|
62
|
-
|
|
63
|
-
## API
|
|
64
|
-
### Installation
|
|
65
|
-
```bash
|
|
66
|
-
npm install chromametry
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### Usage
|
|
70
|
-
```ts
|
|
71
|
-
import { Ramp, Swatch } from "chromametry";
|
|
72
|
-
|
|
73
|
-
const blue = new Ramp([
|
|
74
|
-
"#ffffff",
|
|
75
|
-
"#eff6fb",
|
|
76
|
-
"#d9e8f6",
|
|
77
|
-
"#aacdec",
|
|
78
|
-
"#73b3e7",
|
|
79
|
-
"#4f97d1",
|
|
80
|
-
"#2378c3",
|
|
81
|
-
"#2c608a",
|
|
82
|
-
"#274863",
|
|
83
|
-
"#1f303e",
|
|
84
|
-
"#11181d",
|
|
85
|
-
"#000000",
|
|
86
|
-
], "blue");
|
|
87
|
-
|
|
88
|
-
console.log(blue.baseColor);
|
|
89
|
-
console.log(blue.wcag[45].span);
|
|
90
|
-
console.log(blue.metrics);
|
|
91
|
-
console.log(blue.score);
|
|
92
|
-
console.log(blue.direction);
|
|
93
|
-
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const ramp = new
|
|
115
|
-
console.log(ramp.score);
|
|
116
|
-
</script>
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
|
131
|
-
|
|
|
132
|
-
| `
|
|
133
|
-
| `
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
|
137
|
-
|
|
|
138
|
-
| `
|
|
139
|
-
| `
|
|
140
|
-
| `
|
|
141
|
-
| `
|
|
142
|
-
| `
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
|
146
|
-
|
|
|
147
|
-
| `
|
|
148
|
-
| `
|
|
149
|
-
| `
|
|
150
|
-
| `
|
|
151
|
-
| `
|
|
152
|
-
| `
|
|
153
|
-
| `
|
|
154
|
-
| `
|
|
155
|
-
| `
|
|
156
|
-
| `
|
|
157
|
-
| `
|
|
158
|
-
| `
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
60
|
+
- Online Report : [Benchmark page](https://chromametry.github.io/chromametry/benchmark/)
|
|
61
|
+
- Local `/benchmark/index.html` (double click)
|
|
62
|
+
|
|
63
|
+
## API
|
|
64
|
+
### Installation
|
|
65
|
+
```bash
|
|
66
|
+
npm install chromametry
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Usage
|
|
70
|
+
```ts
|
|
71
|
+
import { Palette, Ramp, Swatch } from "chromametry";
|
|
72
|
+
|
|
73
|
+
const blue = new Ramp([
|
|
74
|
+
"#ffffff",
|
|
75
|
+
"#eff6fb",
|
|
76
|
+
"#d9e8f6",
|
|
77
|
+
"#aacdec",
|
|
78
|
+
"#73b3e7",
|
|
79
|
+
"#4f97d1",
|
|
80
|
+
"#2378c3",
|
|
81
|
+
"#2c608a",
|
|
82
|
+
"#274863",
|
|
83
|
+
"#1f303e",
|
|
84
|
+
"#11181d",
|
|
85
|
+
"#000000",
|
|
86
|
+
], "blue");
|
|
87
|
+
|
|
88
|
+
console.log(blue.baseColor);
|
|
89
|
+
console.log(blue.wcag[45].span);
|
|
90
|
+
console.log(blue.metrics);
|
|
91
|
+
console.log(blue.score);
|
|
92
|
+
console.log(blue.direction);
|
|
93
|
+
|
|
94
|
+
const palette = new Palette({
|
|
95
|
+
blue: blue.colors,
|
|
96
|
+
gray: ["#ffffff", "#dfe1e2", "#71767a", "#000000"],
|
|
97
|
+
}, "example");
|
|
98
|
+
|
|
99
|
+
console.log(palette.contrastEfficiency);
|
|
100
|
+
console.log(palette.lightnessLinearity);
|
|
101
|
+
console.log(palette.score);
|
|
102
|
+
|
|
103
|
+
const swatch = new Swatch("#2378c3");
|
|
104
|
+
console.log(swatch.lab);
|
|
105
|
+
console.log(swatch.chroma);
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Browser
|
|
109
|
+
**ESM**
|
|
110
|
+
```html
|
|
111
|
+
<script type="module">
|
|
112
|
+
import { Ramp } from "https://esm.sh/chromametry";
|
|
113
|
+
|
|
114
|
+
const ramp = new Ramp(["#ffffff", "#2378c3", "#000000"], "blue");
|
|
115
|
+
console.log(ramp.score);
|
|
116
|
+
</script>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Global**
|
|
120
|
+
```html
|
|
121
|
+
<script src="https://unpkg.com/chromametry/dist/index.global.js"></script>
|
|
122
|
+
<script>
|
|
123
|
+
const ramp = new Chromametry.Ramp(["#ffffff", "#2378c3", "#000000"], "blue");
|
|
124
|
+
console.log(ramp.score);
|
|
125
|
+
</script>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Class Reference
|
|
129
|
+
#### Swatch
|
|
130
|
+
| Property | Description |
|
|
131
|
+
| :--- | :--- |
|
|
132
|
+
| `constructor(hex)` | Create a swatch from a hex color string. |
|
|
133
|
+
| `hex` | Original hex color. |
|
|
134
|
+
| `rgb` | Linear RGB values. |
|
|
135
|
+
| `lab` | CIELAB coordinates. |
|
|
136
|
+
| `lch` | LCH coordinates derived from LAB. |
|
|
137
|
+
| `lightness` | Perceptual lightness with Helmholtz-Kohlrausch correction. |
|
|
138
|
+
| `chroma` | Chroma of the swatch. |
|
|
139
|
+
| `hue` | Hue angle in degrees. |
|
|
140
|
+
| `luminance` | Relative luminance used for contrast. |
|
|
141
|
+
| `wcag` | WCAG contrast ratio against white. |
|
|
142
|
+
| `apca` | APCA contrast value against white. |
|
|
143
|
+
|
|
144
|
+
#### Ramp
|
|
145
|
+
| Property | Description |
|
|
146
|
+
| :--- | :--- |
|
|
147
|
+
| `constructor(colors, name?)` | Create a sequential ramp from hex colors. |
|
|
148
|
+
| `name` | Ramp name. |
|
|
149
|
+
| `swatches` | `Swatch[]` built from the input colors. |
|
|
150
|
+
| `colors` | Original ramp colors as hex strings. |
|
|
151
|
+
| `steps` | Number of steps in the ramp. |
|
|
152
|
+
| `direction` | Whether the ramp trends from light to dark or dark to light. |
|
|
153
|
+
| `peakChroma` | Hex color with the highest chroma in the inner ramp. |
|
|
154
|
+
| `baseColor` | Base color used as the ramp anchor. |
|
|
155
|
+
| `baseIndex` | Index of the base color. |
|
|
156
|
+
| `wcag` | WCAG contrast spans for levels `30`, `45`, and `70`. |
|
|
157
|
+
| `apca` | APCA contrast spans for levels `45`, `60`, and `75`. |
|
|
158
|
+
| `contrasts` | Combined contrast object with `wcag` and `apca`. |
|
|
159
|
+
| `deltaECurve` | Cumulative DeltaE curve across ramp steps. |
|
|
160
|
+
| `unwrapHues` | Hue sequence with wrap-around discontinuities removed. |
|
|
161
|
+
| `lightnessLinearity` | Linearity score of the lightness curve. |
|
|
162
|
+
| `chromaSmoothness` | Smoothness score of the chroma curve. |
|
|
163
|
+
| `spacingUniformity` | Uniformity score of DeltaE spacing. |
|
|
164
|
+
| `hueStability` | Stability score of hue drift across the ramp. |
|
|
165
|
+
| `contrastEfficiency` | Efficiency score of using contrast span for WCAG 4.5. |
|
|
166
|
+
| `metrics` | Object containing the five ramp metrics. |
|
|
167
|
+
| `score` | Composite ramp score. |
|
|
168
|
+
|
|
169
|
+
#### Palette
|
|
170
|
+
| Property | Description |
|
|
171
|
+
| :--- | :--- |
|
|
172
|
+
| `constructor(colors, name?)` | Create a named palette from multiple ramps. |
|
|
173
|
+
| `name` | Palette name. |
|
|
174
|
+
| `ramps` | `Ramp[]` built from the input color map. |
|
|
175
|
+
| `colors` | Original colors as `Record<string, string[]>`. |
|
|
176
|
+
| `steps` | Number of steps in each ramp. |
|
|
177
|
+
| `wcag` | Aggregated WCAG contrast spans across ramps. |
|
|
178
|
+
| `apca` | Aggregated APCA contrast spans across ramps. |
|
|
179
|
+
| `contrastEfficiency` | RMS aggregate of ramp contrast-efficiency scores. |
|
|
180
|
+
| `lightnessLinearity` | RMS aggregate of ramp lightness-linearity scores. |
|
|
181
|
+
| `chromaSmoothness` | RMS aggregate of ramp chroma-smoothness scores. |
|
|
182
|
+
| `hueStability` | RMS aggregate of ramp hue-stability scores. |
|
|
183
|
+
| `spacingUniformity` | RMS aggregate of ramp spacing-uniformity scores. |
|
|
184
|
+
| `score` | Composite palette score. |
|
|
185
|
+
|
|
186
|
+
## Reproducing Benchmarks
|
|
187
|
+
To run the benchmark generator locally:
|
|
188
|
+
```bash
|
|
189
|
+
git clone https://github.com/chromametry/chromametry.git
|
|
164
190
|
cd chromametry
|
|
165
191
|
npm install
|
|
166
192
|
npm run generate
|
|
167
193
|
```
|
|
168
194
|
|
|
169
195
|
## Adding Custom Palettes to Benchmark
|
|
170
|
-
Create a new .ts file in benchmark/input/ (e.g., my-palette.ts).
|
|
196
|
+
Create a new .ts file in benchmark/input/ (e.g., my-palette.ts).
|
|
197
|
+
|
|
198
|
+
```ts
|
|
199
|
+
import { red, volcano, gold } from '@ant-design/colors';
|
|
171
200
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
// Define colors (imported or inline object)
|
|
176
|
-
let colors: Record<string, string[]> = { red, volcano, gold };
|
|
201
|
+
// Define colors (imported or inline object)
|
|
202
|
+
let colors: Record<string, string[]> = { red, volcano, gold };
|
|
177
203
|
|
|
178
204
|
// Ensure white/black anchors exist if your ramp misses them
|
|
179
205
|
for (let name in colors) {
|
|
180
206
|
if (colors[name][0] !== "#ffffff") colors[name].unshift("#ffffff");
|
|
181
207
|
if (colors[name][colors[name].length - 1] !== "#000000") colors[name].push("#000000");
|
|
182
208
|
}
|
|
183
|
-
export default {
|
|
184
|
-
name: "Ant Design",
|
|
185
|
-
colors,
|
|
186
|
-
};
|
|
187
|
-
```
|
|
209
|
+
export default {
|
|
210
|
+
name: "Ant Design",
|
|
211
|
+
colors,
|
|
212
|
+
};
|
|
213
|
+
```
|
|
188
214
|
Then regenerate the report:
|
|
189
215
|
```bash
|
|
190
216
|
npm run generate
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var L=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var V=(u,n)=>{for(var t in n)L(u,t,{get:n[t],enumerable:!0})},W=(u,n,t,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let e of N(n))!U.call(u,e)&&e!==t&&L(u,e,{get:()=>n[e],enumerable:!(s=G(n,e))||s.enumerable});return u};var $=u=>W(L({},"__esModule",{value:!0}),u);var st={};V(st,{Ramp:()=>y,Swatch:()=>I,calcDeltaE2000:()=>v,calcScore:()=>P,calcStatistics:()=>nt,createMonotone:()=>k,cssRgbToRgb:()=>Q,fromLightnessEAL:()=>j,hexToRgb:()=>w,labToLch:()=>R,labToRgb:()=>J,lchToLab:()=>O,rgbToHex:()=>Z,rgbToLab:()=>C,rootMeanSquare:()=>tt,toLightnessEAL:()=>_});module.exports=$(st);var F=u=>{let n=t=>{let s=Math.max(0,Math.min(1,t)),e=s<=.0031308?12.92*s:1.055*Math.pow(s,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return u.map(n)},K=u=>{let n=t=>t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92;return u.map(n)},Z=u=>{let[n,t,s]=F(u);return n=n.toString(16).padStart(2,"0"),t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),`#${n}${t}${s}`},w=u=>{let n=parseInt(u.slice(1,3),16)/255,t=parseInt(u.slice(3,5),16)/255,s=parseInt(u.slice(5,7),16)/255;return K([n,t,s])},_=u=>{let[n,t,s]=u,e=Math.sqrt(t*t+s*s),a=(Math.atan2(s,t)*180/Math.PI+360)%360,c=.1644,m=.0603,r=.1307,i=.006,l=c*Math.abs(Math.sin((a-90)/2*(Math.PI/180)))+m,o=0;return(a<=90||a>=270)&&(o=r*Math.abs(Math.cos(a*(Math.PI/180)))+i),n+(l+o)*e},j=(u,n)=>{let[,t,s]=n,e=Math.sqrt(t*t+s*s),a=(Math.atan2(s,t)*180/Math.PI+360)%360,c=.1644,m=.0603,r=.1307,i=.006,l=c*Math.abs(Math.sin((a-90)/2*(Math.PI/180)))+m,o=0;return(a<=90||a>=270)&&(o=r*Math.abs(Math.cos(a*(Math.PI/180)))+i),Math.max(0,u-(l+o)*e)},O=u=>{let[n,t,s]=u,e=s*Math.PI/180;return[n,t*Math.cos(e),t*Math.sin(e)]},C=u=>{let[n,t,s]=u,e=.4124564*n+.3575761*t+.1804375*s,h=.2126729*n+.7151522*t+.072175*s,a=.0193339*n+.119192*t+.9503041*s,c=.95047,m=1,r=1.08883,i=b=>b>.008856?Math.cbrt(b):7.787*b+16/116,l=i(e/c),o=i(h/m),M=i(a/r);return[116*o-16,500*(l-o),200*(o-M)]},J=u=>{let[n,t,s]=u,e=(n+16)/116,h=t/500+e,a=e-s/200,c=b=>b**3>.008856?b**3:(b-16/116)/7.787,m=.95047,r=1,i=1.08883,l=c(h)*m,o=c(e)*r,M=c(a)*i;return[3.2404542*l-1.5371385*o-.4985314*M,-.969266*l+1.8760108*o+.041556*M,.0556434*l-.2040259*o+1.0572252*M]},R=u=>{let[n,t,s]=u,e=Math.sqrt(t*t+s*s);if(e<1e-4)return[n,0,0];let a=(Math.atan2(s,t)*180/Math.PI+360)%360;return a>=359.9999&&(a=0),[n,e,a]},v=(u,n)=>{let[t,s,e]=u,[h,a,c]=n,m=(t+h)/2,r=Math.sqrt(s*s+e*e),i=Math.sqrt(a*a+c*c),l=(r+i)/2,o=.5*(1-Math.sqrt(Math.pow(l,7)/(Math.pow(l,7)+Math.pow(25,7)))),M=s*(1+o),b=a*(1+o),f=Math.sqrt(M*M+e*e),p=Math.sqrt(b*b+c*c),d=(f+p)/2,x=Math.atan2(e,M)*180/Math.PI+(Math.atan2(e,M)<0?360:0),g=Math.atan2(c,b)*180/Math.PI+(Math.atan2(c,b)<0?360:0),q=g-x;Math.abs(q)>180&&(q+=g<=x?360:-360);let S=Math.abs(x-g)>180?(x+g+360)/2:(x+g)/2,H=1-.17*Math.cos((S-30)*Math.PI/180)+.24*Math.cos(2*S*Math.PI/180)+.32*Math.cos((3*S+6)*Math.PI/180)-.2*Math.cos((4*S-63)*Math.PI/180),Y=h-t,E=p-f,T=2*Math.sqrt(f*p)*Math.sin(q/2*Math.PI/180),A=1+.015*Math.pow(m-50,2)/Math.sqrt(20+Math.pow(m-50,2)),B=1+.045*d,D=1+.015*d*H,X=30*Math.exp(-Math.pow((S-275)/25,2)),z=-(2*Math.sqrt(Math.pow(d,7)/(Math.pow(d,7)+Math.pow(25,7))))*Math.sin(2*X*Math.PI/180);return Math.sqrt(Math.pow(Y/A,2)+Math.pow(E/B,2)+Math.pow(T/D,2)+z*(E/B)*(T/D))},Q=u=>{let n=u.match(/\d+(\.\d+)?/g);if(!n||n.length<3)throw new Error("Invalid CSS rgb()");let t=s=>{let e=s/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[t(Number(n[0])),t(Number(n[1])),t(Number(n[2]))]},k=u=>{if(u.length<1)return r=>0;let n=[...u].sort((r,i)=>r[0]-i[0]),t=[];for(let r=0;r<n.length;r++)(r===0||n[r][0]!==n[r-1][0])&&t.push(n[r]);let s=t.length;if(s===1)return r=>t[0][1];let e=t.map(r=>r[0]),h=t.map(r=>r[1]),a=[],c=[];for(let r=0;r<s-1;r++)a[r]=e[r+1]-e[r],c[r]=(h[r+1]-h[r])/a[r];let m=new Array(s);m[0]=c[0],m[s-1]=c[s-2];for(let r=1;r<s-1;r++){let i=c[r-1],l=c[r];if(i*l<=0)m[r]=0;else{let o=(1+a[r]/(a[r-1]+a[r]))/3;m[r]=i*l/((1-o)*i+o*l)}}return r=>{if(r<=e[0])return h[0];if(r>=e[s-1])return h[s-1];let i=0,l=s-2,o=0;for(;i<=l;){let g=Math.floor((i+l)/2);if(r>=e[g]&&r<=e[g+1]){o=g;break}r<e[g]?l=g-1:i=g+1}let M=a[o],b=(r-e[o])/M,f=b*b,p=f*b,d=m[o]*M,x=m[o+1]*M;return(2*p-3*f+1)*h[o]+(p-2*f+b)*d+(-2*p+3*f)*h[o+1]+(p-f)*x}};function tt(u){let n=u.length;if(n===0)return 0;let t=0;for(let s=0;s<n;s++)t+=u[s]*u[s];return Math.sqrt(t/n)}var nt=u=>{let n=u.length;if(n===0)return{min:0,max:0,avg:0};let t=u[0],s=u[0],e=0;for(let h=0;h<n;h++){let a=u[h];a<t&&(t=a),a>s&&(s=a),e+=a}return{min:t,max:s,avg:e/n}},P=u=>{let n=u.length;if(n===0)return 0;let t=1e-6,s=u.reduce((a,c)=>a*(c+t),1),e=Math.pow(s,1/n),h=Math.max(0,Math.min(1,e));return parseFloat((h*100).toFixed(2))};var I=class{constructor(n){this.hex=n}get rgb(){return w(this.hex)}get lab(){return C(this.rgb)}get lch(){return R(this.lab)}get lightness(){let[n,t,s]=this.lab,e=Math.sqrt(t*t+s*s),a=(Math.atan2(s,t)*180/Math.PI+360)%360,c=.1644,m=.0603,r=.1307,i=.006,l=c*Math.abs(Math.sin((a-90)/2*(Math.PI/180)))+m,o=0;return(a<=90||a>=270)&&(o=r*Math.abs(Math.cos(a*(Math.PI/180)))+i),n+(l+o)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[n,t,s]=this.rgb;return .2126*n+.7152*t+.0722*s}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let n=h=>h>5e-4?h:h+Math.pow(5e-4-h,.8),t=n(this.luminance),s=n(1),e=(Math.pow(t,.56)-Math.pow(s,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var y=class{constructor(n=[],t="brand"){this.swatches=n.map(s=>new I(s)),this.name=t}get colors(){return this.swatches.map(n=>n.hex)}get peakChroma(){let n=this.colors.slice(2,-2),t="",s=-1/0;for(let e of n){let h=new I(e);h.chroma>s&&(s=h.chroma,t=e)}return s<6?this.colors[Math.ceil(this.steps/2)]:t}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let n=C(w(this.colors[0])),t=C(w(this.colors[this.colors.length-1]));return n[0]>t[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(n=>n.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let n=this.swatches,t=n.length,s=t-1,e={};for(let h of[30,45,70]){let a=h/10,c=s,m=0;for(let r=1;r<t;r++){let i=1/0;for(let l=0;l<t-r;l++){let o=n[l].luminance,M=n[l+r].luminance,b=(Math.max(o,M)+.05)/(Math.min(o,M)+.05);b<i&&(i=b)}if(i>=a){c=r,m=i;break}r===s&&(m=i)}e[h]={efficiency:c/s,target:a,span:c,value:m}}return e}get apca(){let n=this.swatches,t=n.length,s=t-1,e={},h=(a,c)=>{let i=a<.022?a+Math.pow(.022-a,1.414):a,l=c<.022?c+Math.pow(.022-c,1.414):c,o=l>=i?(Math.pow(l,.56)-Math.pow(i,.57))*114:(Math.pow(l,.65)-Math.pow(i,.62))*114;return Math.abs(o)<10?0:(o=o>0?o-2.7:o+2.7,Math.round(o))};for(let a of[45,60,75]){let c=a,m=s,r=0;for(let i=1;i<t;i++){let l=1/0;for(let o=0;o<t-i;o++){let M=n[o].luminance>n[o+i].luminance?n[o].luminance:n[o+i].luminance,b=n[o].luminance>n[o+i].luminance?n[o+i].luminance:n[o].luminance,f=Math.abs(h(b,M));f<l&&(l=f)}if(l>=c){m=i,r=l;break}i===s&&(r=l)}e[a]={efficiency:m/s,target:c,span:m,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let n=[0];for(let t=1;t<this.swatches.length;t++){let s=v(this.swatches[t-1].lab,this.swatches[t].lab);n.push(n[t-1]+s)}return n}get unwrapHues(){let n=this.swatches.map(s=>s.hue).slice(1,-1);if(n.length===0)return[];let t=[n[0]];for(let s=1;s<n.length;s++){let e=n[s]-n[s-1];e>180?e-=360:e<-180&&(e+=360),t.push(t[s-1]+e)}return t}get lightnessLinearity(){let n=this.swatches.map(M=>M.lightness),t=n.length;if(t<2)return 1;let s=0,e=0,h=0,a=0;for(let M=0;M<t;M++)s+=M,e+=n[M],h+=M*n[M],a+=M*M;let c=t*a-s*s;if(Math.abs(c)<1e-10)return 1;let m=(t*h-s*e)/c,r=(e-m*s)/t;if(Math.abs(m*(t-1))<.001)return 1;let l=0,o=0;for(let M=0;M<t;M++){let b=m*M+r,f=n[M]-b;l+=f*f;let p=Math.max(b-Math.min(r,m*(t-1)+r),Math.max(r,m*(t-1)+r)-b);o+=p*p}return Math.max(0,Math.min(1,1-Math.sqrt(l/t)/Math.sqrt(o/t)))}get chromaSmoothness(){let n=this.swatches.map(o=>o.chroma),t=n.length;if(t<3)return 1;let s=133.8,e=Math.max(...n);if(e<=.01)return 1;let h=n.map(o=>o/e*s),a=Math.min(...h),c=Math.max(...h),m=h.findIndex(o=>o===c),r=k([[0,h[0]],[m,c],[t-1,h[t-1]]]),i=0,l=0;for(let o=0;o<t;o++){let M=r(o),b=h[o]-M;i+=b*b,l+=Math.pow(Math.max(M-a,c-M),2)}return Math.max(0,Math.min(1,1-Math.sqrt(i/t)/Math.sqrt(l/t)))}get spacingUniformity(){let n=this.deltaECurve,t=n.length;if(t<2)return 1;let s=[];for(let c=1;c<t;c++){let m=n[c]-n[c-1];if(m<0)return 0;s.push(m)}let e=s.reduce((c,m)=>c+m,0)/s.length;if(e<=1e-6)return 0;let h=0;for(let c of s)h+=Math.pow(c-e,2);let a=Math.sqrt(h/s.length)/e;return Math.max(0,Math.min(1,1/(1+a)))}get hueStability(){var a,c,m;let n=this.unwrapHues,t=n.length;if(t<2)return 1;let s=(m=(c=n[this.baseIndex-1])!=null?c:(a=this.swatches[this.baseIndex])==null?void 0:a.hue)!=null?m:0,e=0,h=0;for(let r=0;r<t;r++){let i=Math.abs(n[r]-s)%360;i>180&&(i=360-i),e+=i*i;let l=r/(t-1)*180;h+=l*l}return Math.max(0,Math.min(1,1-Math.sqrt(e/t)/(Math.sqrt(h/t)||1)))}get contrastEfficiency(){let n=this.wcag[45].span,t=this.steps;if(t<=1)return 1;let s=.5,e=n/t,h=s*((t-1)/t);return e<=h?1:e>=1?0:(1-e)/(1-h)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return P(Object.values(this.metrics))}};0&&(module.exports={Ramp,Swatch,calcDeltaE2000,calcScore,calcStatistics,createMonotone,cssRgbToRgb,fromLightnessEAL,hexToRgb,labToLch,labToRgb,lchToLab,rgbToHex,rgbToLab,rootMeanSquare,toLightnessEAL});
|
|
1
|
+
"use strict";var v=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var O=(l,t)=>{for(var s in t)v(l,s,{get:t[s],enumerable:!0})},V=(l,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of j(t))!N.call(l,e)&&e!==s&&v(l,e,{get:()=>t[e],enumerable:!(n=G(t,e))||n.enumerable});return l};var $=l=>V(v({},"__esModule",{value:!0}),l);var et={};O(et,{Palette:()=>T,Ramp:()=>q,Swatch:()=>y,calcDeltaE2000:()=>k,calcScore:()=>L,calcStatistics:()=>nt,createMonotone:()=>E,cssRgbToRgb:()=>st,fromLightnessEAL:()=>J,hexToRgb:()=>C,labToLch:()=>P,labToRgb:()=>tt,lchToLab:()=>Q,rgbToHex:()=>Z,rgbToLab:()=>S,rootMeanSquare:()=>d,toLightnessEAL:()=>_});module.exports=$(et);var F=l=>{let t=s=>{let n=Math.max(0,Math.min(1,s)),e=n<=.0031308?12.92*n:1.055*Math.pow(n,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return l.map(t)},K=l=>{let t=s=>s>.04045?Math.pow((s+.055)/1.055,2.4):s/12.92;return l.map(t)},Z=l=>{let[t,s,n]=F(l);return t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),n=n.toString(16).padStart(2,"0"),`#${t}${s}${n}`},C=l=>{let t=parseInt(l.slice(1,3),16)/255,s=parseInt(l.slice(3,5),16)/255,n=parseInt(l.slice(5,7),16)/255;return K([t,s,n])},_=l=>{let[t,s,n]=l,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(m+c)*e},J=(l,t)=>{let[,s,n]=t,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),Math.max(0,l-(m+c)*e)},Q=l=>{let[t,s,n]=l,e=n*Math.PI/180;return[t,s*Math.cos(e),s*Math.sin(e)]},S=l=>{let[t,s,n]=l,e=.4124564*t+.3575761*s+.1804375*n,h=.2126729*t+.7151522*s+.072175*n,o=.0193339*t+.119192*s+.9503041*n,a=.95047,u=1,r=1.08883,i=g=>g>.008856?Math.cbrt(g):7.787*g+16/116,m=i(e/a),c=i(h/u),p=i(o/r);return[116*c-16,500*(m-c),200*(c-p)]},tt=l=>{let[t,s,n]=l,e=(t+16)/116,h=s/500+e,o=e-n/200,a=g=>g**3>.008856?g**3:(g-16/116)/7.787,u=.95047,r=1,i=1.08883,m=a(h)*u,c=a(e)*r,p=a(o)*i;return[3.2404542*m-1.5371385*c-.4985314*p,-.969266*m+1.8760108*c+.041556*p,.0556434*m-.2040259*c+1.0572252*p]},P=l=>{let[t,s,n]=l,e=Math.sqrt(s*s+n*n);if(e<1e-4)return[t,0,0];let o=(Math.atan2(n,s)*180/Math.PI+360)%360;return o>=359.9999&&(o=0),[t,e,o]},k=(l,t)=>{let[s,n,e]=l,[h,o,a]=t,u=(s+h)/2,r=Math.sqrt(n*n+e*e),i=Math.sqrt(o*o+a*a),m=(r+i)/2,c=.5*(1-Math.sqrt(Math.pow(m,7)/(Math.pow(m,7)+Math.pow(25,7)))),p=n*(1+c),g=o*(1+c),M=Math.sqrt(p*p+e*e),b=Math.sqrt(g*g+a*a),w=(M+b)/2,x=Math.atan2(e,p)*180/Math.PI+(Math.atan2(e,p)<0?360:0),f=Math.atan2(a,g)*180/Math.PI+(Math.atan2(a,g)<0?360:0),R=f-x;Math.abs(R)>180&&(R+=f<=x?360:-360);let I=Math.abs(x-f)>180?(x+f+360)/2:(x+f)/2,Y=1-.17*Math.cos((I-30)*Math.PI/180)+.24*Math.cos(2*I*Math.PI/180)+.32*Math.cos((3*I+6)*Math.PI/180)-.2*Math.cos((4*I-63)*Math.PI/180),U=h-s,B=b-M,A=2*Math.sqrt(M*b)*Math.sin(R/2*Math.PI/180),W=1+.015*Math.pow(u-50,2)/Math.sqrt(20+Math.pow(u-50,2)),D=1+.045*w,H=1+.015*w*Y,X=30*Math.exp(-Math.pow((I-275)/25,2)),z=-(2*Math.sqrt(Math.pow(w,7)/(Math.pow(w,7)+Math.pow(25,7))))*Math.sin(2*X*Math.PI/180);return Math.sqrt(Math.pow(U/W,2)+Math.pow(B/D,2)+Math.pow(A/H,2)+z*(B/D)*(A/H))},st=l=>{let t=l.match(/\d+(\.\d+)?/g);if(!t||t.length<3)throw new Error("Invalid CSS rgb()");let s=n=>{let e=n/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[s(Number(t[0])),s(Number(t[1])),s(Number(t[2]))]},E=l=>{if(l.length<1)return r=>0;let t=[...l].sort((r,i)=>r[0]-i[0]),s=[];for(let r=0;r<t.length;r++)(r===0||t[r][0]!==t[r-1][0])&&s.push(t[r]);let n=s.length;if(n===1)return r=>s[0][1];let e=s.map(r=>r[0]),h=s.map(r=>r[1]),o=[],a=[];for(let r=0;r<n-1;r++)o[r]=e[r+1]-e[r],a[r]=(h[r+1]-h[r])/o[r];let u=new Array(n);u[0]=a[0],u[n-1]=a[n-2];for(let r=1;r<n-1;r++){let i=a[r-1],m=a[r];if(i*m<=0)u[r]=0;else{let c=(1+o[r]/(o[r-1]+o[r]))/3;u[r]=i*m/((1-c)*i+c*m)}}return r=>{if(r<=e[0])return h[0];if(r>=e[n-1])return h[n-1];let i=0,m=n-2,c=0;for(;i<=m;){let f=Math.floor((i+m)/2);if(r>=e[f]&&r<=e[f+1]){c=f;break}r<e[f]?m=f-1:i=f+1}let p=o[c],g=(r-e[c])/p,M=g*g,b=M*g,w=u[c]*p,x=u[c+1]*p;return(2*b-3*M+1)*h[c]+(b-2*M+g)*w+(-2*b+3*M)*h[c+1]+(b-M)*x}};function d(l){let t=l.length;if(t===0)return 0;let s=0;for(let n=0;n<t;n++)s+=l[n]*l[n];return Math.sqrt(s/t)}var nt=l=>{let t=l.length;if(t===0)return{min:0,max:0,avg:0};let s=l[0],n=l[0],e=0;for(let h=0;h<t;h++){let o=l[h];o<s&&(s=o),o>n&&(n=o),e+=o}return{min:s,max:n,avg:e/t}},L=l=>{let t=l.length;if(t===0)return 0;let s=1e-6,n=l.reduce((o,a)=>o*(a+s),1),e=Math.pow(n,1/t),h=Math.max(0,Math.min(1,e));return parseFloat((h*100).toFixed(2))};var y=class{constructor(t){this.hex=t}get rgb(){return C(this.hex)}get lab(){return S(this.rgb)}get lch(){return P(this.lab)}get lightness(){let[t,s,n]=this.lab,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(m+c)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[t,s,n]=this.rgb;return .2126*t+.7152*s+.0722*n}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let t=h=>h>5e-4?h:h+Math.pow(5e-4-h,.8),s=t(this.luminance),n=t(1),e=(Math.pow(s,.56)-Math.pow(n,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var q=class{constructor(t=[],s="brand"){this.swatches=t.map(n=>new y(n)),this.name=s}get colors(){return this.swatches.map(t=>t.hex)}get peakChroma(){let t=this.colors.slice(2,-2),s="",n=-1/0;for(let e of t){let h=new y(e);h.chroma>n&&(n=h.chroma,s=e)}return n<6?this.colors[Math.ceil(this.steps/2)]:s}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let t=S(C(this.colors[0])),s=S(C(this.colors[this.colors.length-1]));return t[0]>s[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(t=>t.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let t=this.swatches,s=t.length,n=s-1,e={};for(let h of[30,45,70]){let o=h/10,a=n,u=0;for(let r=1;r<s;r++){let i=1/0;for(let m=0;m<s-r;m++){let c=t[m].luminance,p=t[m+r].luminance,g=(Math.max(c,p)+.05)/(Math.min(c,p)+.05);g<i&&(i=g)}if(i>=o){a=r,u=i;break}r===n&&(u=i)}e[h]={efficiency:a/n,target:o,span:a,value:u}}return e}get apca(){let t=this.swatches,s=t.length,n=s-1,e={},h=(o,a)=>{let i=o<.022?o+Math.pow(.022-o,1.414):o,m=a<.022?a+Math.pow(.022-a,1.414):a,c=m>=i?(Math.pow(m,.56)-Math.pow(i,.57))*114:(Math.pow(m,.65)-Math.pow(i,.62))*114;return Math.abs(c)<10?0:(c=c>0?c-2.7:c+2.7,Math.round(c))};for(let o of[45,60,75]){let a=o,u=n,r=0;for(let i=1;i<s;i++){let m=1/0;for(let c=0;c<s-i;c++){let p=t[c].luminance>t[c+i].luminance?t[c].luminance:t[c+i].luminance,g=t[c].luminance>t[c+i].luminance?t[c+i].luminance:t[c].luminance,M=Math.abs(h(g,p));M<m&&(m=M)}if(m>=a){u=i,r=m;break}i===n&&(r=m)}e[o]={efficiency:u/n,target:a,span:u,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let t=[0];for(let s=1;s<this.swatches.length;s++){let n=k(this.swatches[s-1].lab,this.swatches[s].lab);t.push(t[s-1]+n)}return t}get unwrapHues(){let t=this.swatches.map(n=>n.hue).slice(1,-1);if(t.length===0)return[];let s=[t[0]];for(let n=1;n<t.length;n++){let e=t[n]-t[n-1];e>180?e-=360:e<-180&&(e+=360),s.push(s[n-1]+e)}return s}get lightnessLinearity(){let t=this.swatches.map(p=>p.lightness),s=t.length;if(s<2)return 1;let n=0,e=0,h=0,o=0;for(let p=0;p<s;p++)n+=p,e+=t[p],h+=p*t[p],o+=p*p;let a=s*o-n*n;if(Math.abs(a)<1e-10)return 1;let u=(s*h-n*e)/a,r=(e-u*n)/s;if(Math.abs(u*(s-1))<.001)return 1;let m=0,c=0;for(let p=0;p<s;p++){let g=u*p+r,M=t[p]-g;m+=M*M;let b=Math.max(g-Math.min(r,u*(s-1)+r),Math.max(r,u*(s-1)+r)-g);c+=b*b}return Math.max(0,Math.min(1,1-Math.sqrt(m/s)/Math.sqrt(c/s)))}get chromaSmoothness(){let t=this.swatches.map(c=>c.chroma),s=t.length;if(s<3)return 1;let n=133.8,e=Math.max(...t);if(e<=.01)return 1;let h=t.map(c=>c/e*n),o=Math.min(...h),a=Math.max(...h),u=h.findIndex(c=>c===a),r=E([[0,h[0]],[u,a],[s-1,h[s-1]]]),i=0,m=0;for(let c=0;c<s;c++){let p=r(c),g=h[c]-p;i+=g*g,m+=Math.pow(Math.max(p-o,a-p),2)}return Math.max(0,Math.min(1,1-Math.sqrt(i/s)/Math.sqrt(m/s)))}get spacingUniformity(){let t=this.deltaECurve,s=t.length;if(s<2)return 1;let n=[];for(let a=1;a<s;a++){let u=t[a]-t[a-1];if(u<0)return 0;n.push(u)}let e=n.reduce((a,u)=>a+u,0)/n.length;if(e<=1e-6)return 0;let h=0;for(let a of n)h+=Math.pow(a-e,2);let o=Math.sqrt(h/n.length)/e;return Math.max(0,Math.min(1,1/(1+o)))}get hueStability(){var o,a,u;let t=this.unwrapHues,s=t.length;if(s<2)return 1;let n=(u=(a=t[this.baseIndex-1])!=null?a:(o=this.swatches[this.baseIndex])==null?void 0:o.hue)!=null?u:0,e=0,h=0;for(let r=0;r<s;r++){let i=Math.abs(t[r]-n)%360;i>180&&(i=360-i),e+=i*i;let m=r/(s-1)*180;h+=m*m}return Math.max(0,Math.min(1,1-Math.sqrt(e/s)/(Math.sqrt(h/s)||1)))}get contrastEfficiency(){let t=this.wcag[45].span,s=this.steps;if(s<=1)return 1;let n=.501,e=t/(s-1);return e<=n?1:e>=1?0:1-(e-n)/(1-n)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return L(Object.values(this.metrics))}};var T=class{constructor(t={},s="Collection 1"){this.ramps=Object.entries(t).map(([n,e])=>new q(e,n)),this.name=s}get colors(){return Object.fromEntries(this.ramps.map(t=>[t.name,t.colors]))}get steps(){var t;return((t=this.ramps[0])==null?void 0:t.steps)||0}get wcag(){let t={},s=this.steps;for(let n of[30,45,70]){let e=this.ramps.map(a=>a.wcag[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n/10,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get apca(){let t={},s=this.steps;for(let n of[45,60,75]){let e=this.ramps.map(a=>a.apca[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get contrastEfficiency(){return d(this.ramps.map(t=>t.contrastEfficiency))}get lightnessLinearity(){return d(this.ramps.map(t=>t.lightnessLinearity))}get chromaSmoothness(){return d(this.ramps.map(t=>t.chromaSmoothness))}get hueStability(){return d(this.ramps.map(t=>t.hueStability))}get spacingUniformity(){return d(this.ramps.map(t=>t.spacingUniformity))}get score(){return L([this.contrastEfficiency,this.lightnessLinearity,this.chromaSmoothness,this.hueStability,this.spacingUniformity])}};0&&(module.exports={Palette,Ramp,Swatch,calcDeltaE2000,calcScore,calcStatistics,createMonotone,cssRgbToRgb,fromLightnessEAL,hexToRgb,labToLch,labToRgb,lchToLab,rgbToHex,rgbToLab,rootMeanSquare,toLightnessEAL});
|
package/dist/index.d.cts
CHANGED
|
@@ -90,4 +90,21 @@ declare class Ramp {
|
|
|
90
90
|
get score(): number;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
type PaletteColors = Record<string, string[]>;
|
|
94
|
+
declare class Palette {
|
|
95
|
+
ramps: Ramp[];
|
|
96
|
+
name: string;
|
|
97
|
+
constructor(colors?: PaletteColors, name?: string);
|
|
98
|
+
get colors(): PaletteColors;
|
|
99
|
+
get steps(): number;
|
|
100
|
+
get wcag(): WcagContrasts;
|
|
101
|
+
get apca(): ApcaContrasts;
|
|
102
|
+
get contrastEfficiency(): number;
|
|
103
|
+
get lightnessLinearity(): number;
|
|
104
|
+
get chromaSmoothness(): number;
|
|
105
|
+
get hueStability(): number;
|
|
106
|
+
get spacingUniformity(): number;
|
|
107
|
+
get score(): number;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export { type ApcaContrasts, type ContrastValue, Palette, type PaletteColors, Ramp, Swatch, type WcagContrasts, calcDeltaE2000, calcScore, calcStatistics, createMonotone, cssRgbToRgb, fromLightnessEAL, hexToRgb, labToLch, labToRgb, lchToLab, rgbToHex, rgbToLab, rootMeanSquare, toLightnessEAL };
|
package/dist/index.d.ts
CHANGED
|
@@ -90,4 +90,21 @@ declare class Ramp {
|
|
|
90
90
|
get score(): number;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
type PaletteColors = Record<string, string[]>;
|
|
94
|
+
declare class Palette {
|
|
95
|
+
ramps: Ramp[];
|
|
96
|
+
name: string;
|
|
97
|
+
constructor(colors?: PaletteColors, name?: string);
|
|
98
|
+
get colors(): PaletteColors;
|
|
99
|
+
get steps(): number;
|
|
100
|
+
get wcag(): WcagContrasts;
|
|
101
|
+
get apca(): ApcaContrasts;
|
|
102
|
+
get contrastEfficiency(): number;
|
|
103
|
+
get lightnessLinearity(): number;
|
|
104
|
+
get chromaSmoothness(): number;
|
|
105
|
+
get hueStability(): number;
|
|
106
|
+
get spacingUniformity(): number;
|
|
107
|
+
get score(): number;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export { type ApcaContrasts, type ContrastValue, Palette, type PaletteColors, Ramp, Swatch, type WcagContrasts, calcDeltaE2000, calcScore, calcStatistics, createMonotone, cssRgbToRgb, fromLightnessEAL, hexToRgb, labToLch, labToRgb, lchToLab, rgbToHex, rgbToLab, rootMeanSquare, toLightnessEAL };
|
package/dist/index.global.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var Chromametry=(()=>{var L=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var V=(u,n)=>{for(var t in n)L(u,t,{get:n[t],enumerable:!0})},W=(u,n,t,s)=>{if(n&&typeof n=="object"||typeof n=="function")for(let e of N(n))!U.call(u,e)&&e!==t&&L(u,e,{get:()=>n[e],enumerable:!(s=G(n,e))||s.enumerable});return u};var $=u=>W(L({},"__esModule",{value:!0}),u);var st={};V(st,{Ramp:()=>y,Swatch:()=>I,calcDeltaE2000:()=>v,calcScore:()=>P,calcStatistics:()=>nt,createMonotone:()=>k,cssRgbToRgb:()=>Q,fromLightnessEAL:()=>j,hexToRgb:()=>w,labToLch:()=>R,labToRgb:()=>J,lchToLab:()=>O,rgbToHex:()=>Z,rgbToLab:()=>C,rootMeanSquare:()=>tt,toLightnessEAL:()=>_});var F=u=>{let n=t=>{let s=Math.max(0,Math.min(1,t)),e=s<=.0031308?12.92*s:1.055*Math.pow(s,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return u.map(n)},K=u=>{let n=t=>t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92;return u.map(n)},Z=u=>{let[n,t,s]=F(u);return n=n.toString(16).padStart(2,"0"),t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),`#${n}${t}${s}`},w=u=>{let n=parseInt(u.slice(1,3),16)/255,t=parseInt(u.slice(3,5),16)/255,s=parseInt(u.slice(5,7),16)/255;return K([n,t,s])},_=u=>{let[n,t,s]=u,e=Math.sqrt(t*t+s*s),a=(Math.atan2(s,t)*180/Math.PI+360)%360,c=.1644,m=.0603,r=.1307,i=.006,l=c*Math.abs(Math.sin((a-90)/2*(Math.PI/180)))+m,o=0;return(a<=90||a>=270)&&(o=r*Math.abs(Math.cos(a*(Math.PI/180)))+i),n+(l+o)*e},j=(u,n)=>{let[,t,s]=n,e=Math.sqrt(t*t+s*s),a=(Math.atan2(s,t)*180/Math.PI+360)%360,c=.1644,m=.0603,r=.1307,i=.006,l=c*Math.abs(Math.sin((a-90)/2*(Math.PI/180)))+m,o=0;return(a<=90||a>=270)&&(o=r*Math.abs(Math.cos(a*(Math.PI/180)))+i),Math.max(0,u-(l+o)*e)},O=u=>{let[n,t,s]=u,e=s*Math.PI/180;return[n,t*Math.cos(e),t*Math.sin(e)]},C=u=>{let[n,t,s]=u,e=.4124564*n+.3575761*t+.1804375*s,h=.2126729*n+.7151522*t+.072175*s,a=.0193339*n+.119192*t+.9503041*s,c=.95047,m=1,r=1.08883,i=b=>b>.008856?Math.cbrt(b):7.787*b+16/116,l=i(e/c),o=i(h/m),M=i(a/r);return[116*o-16,500*(l-o),200*(o-M)]},J=u=>{let[n,t,s]=u,e=(n+16)/116,h=t/500+e,a=e-s/200,c=b=>b**3>.008856?b**3:(b-16/116)/7.787,m=.95047,r=1,i=1.08883,l=c(h)*m,o=c(e)*r,M=c(a)*i;return[3.2404542*l-1.5371385*o-.4985314*M,-.969266*l+1.8760108*o+.041556*M,.0556434*l-.2040259*o+1.0572252*M]},R=u=>{let[n,t,s]=u,e=Math.sqrt(t*t+s*s);if(e<1e-4)return[n,0,0];let a=(Math.atan2(s,t)*180/Math.PI+360)%360;return a>=359.9999&&(a=0),[n,e,a]},v=(u,n)=>{let[t,s,e]=u,[h,a,c]=n,m=(t+h)/2,r=Math.sqrt(s*s+e*e),i=Math.sqrt(a*a+c*c),l=(r+i)/2,o=.5*(1-Math.sqrt(Math.pow(l,7)/(Math.pow(l,7)+Math.pow(25,7)))),M=s*(1+o),b=a*(1+o),f=Math.sqrt(M*M+e*e),p=Math.sqrt(b*b+c*c),d=(f+p)/2,x=Math.atan2(e,M)*180/Math.PI+(Math.atan2(e,M)<0?360:0),g=Math.atan2(c,b)*180/Math.PI+(Math.atan2(c,b)<0?360:0),q=g-x;Math.abs(q)>180&&(q+=g<=x?360:-360);let S=Math.abs(x-g)>180?(x+g+360)/2:(x+g)/2,H=1-.17*Math.cos((S-30)*Math.PI/180)+.24*Math.cos(2*S*Math.PI/180)+.32*Math.cos((3*S+6)*Math.PI/180)-.2*Math.cos((4*S-63)*Math.PI/180),Y=h-t,E=p-f,T=2*Math.sqrt(f*p)*Math.sin(q/2*Math.PI/180),A=1+.015*Math.pow(m-50,2)/Math.sqrt(20+Math.pow(m-50,2)),B=1+.045*d,D=1+.015*d*H,X=30*Math.exp(-Math.pow((S-275)/25,2)),z=-(2*Math.sqrt(Math.pow(d,7)/(Math.pow(d,7)+Math.pow(25,7))))*Math.sin(2*X*Math.PI/180);return Math.sqrt(Math.pow(Y/A,2)+Math.pow(E/B,2)+Math.pow(T/D,2)+z*(E/B)*(T/D))},Q=u=>{let n=u.match(/\d+(\.\d+)?/g);if(!n||n.length<3)throw new Error("Invalid CSS rgb()");let t=s=>{let e=s/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[t(Number(n[0])),t(Number(n[1])),t(Number(n[2]))]},k=u=>{if(u.length<1)return r=>0;let n=[...u].sort((r,i)=>r[0]-i[0]),t=[];for(let r=0;r<n.length;r++)(r===0||n[r][0]!==n[r-1][0])&&t.push(n[r]);let s=t.length;if(s===1)return r=>t[0][1];let e=t.map(r=>r[0]),h=t.map(r=>r[1]),a=[],c=[];for(let r=0;r<s-1;r++)a[r]=e[r+1]-e[r],c[r]=(h[r+1]-h[r])/a[r];let m=new Array(s);m[0]=c[0],m[s-1]=c[s-2];for(let r=1;r<s-1;r++){let i=c[r-1],l=c[r];if(i*l<=0)m[r]=0;else{let o=(1+a[r]/(a[r-1]+a[r]))/3;m[r]=i*l/((1-o)*i+o*l)}}return r=>{if(r<=e[0])return h[0];if(r>=e[s-1])return h[s-1];let i=0,l=s-2,o=0;for(;i<=l;){let g=Math.floor((i+l)/2);if(r>=e[g]&&r<=e[g+1]){o=g;break}r<e[g]?l=g-1:i=g+1}let M=a[o],b=(r-e[o])/M,f=b*b,p=f*b,d=m[o]*M,x=m[o+1]*M;return(2*p-3*f+1)*h[o]+(p-2*f+b)*d+(-2*p+3*f)*h[o+1]+(p-f)*x}};function tt(u){let n=u.length;if(n===0)return 0;let t=0;for(let s=0;s<n;s++)t+=u[s]*u[s];return Math.sqrt(t/n)}var nt=u=>{let n=u.length;if(n===0)return{min:0,max:0,avg:0};let t=u[0],s=u[0],e=0;for(let h=0;h<n;h++){let a=u[h];a<t&&(t=a),a>s&&(s=a),e+=a}return{min:t,max:s,avg:e/n}},P=u=>{let n=u.length;if(n===0)return 0;let t=1e-6,s=u.reduce((a,c)=>a*(c+t),1),e=Math.pow(s,1/n),h=Math.max(0,Math.min(1,e));return parseFloat((h*100).toFixed(2))};var I=class{constructor(n){this.hex=n}get rgb(){return w(this.hex)}get lab(){return C(this.rgb)}get lch(){return R(this.lab)}get lightness(){let[n,t,s]=this.lab,e=Math.sqrt(t*t+s*s),a=(Math.atan2(s,t)*180/Math.PI+360)%360,c=.1644,m=.0603,r=.1307,i=.006,l=c*Math.abs(Math.sin((a-90)/2*(Math.PI/180)))+m,o=0;return(a<=90||a>=270)&&(o=r*Math.abs(Math.cos(a*(Math.PI/180)))+i),n+(l+o)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[n,t,s]=this.rgb;return .2126*n+.7152*t+.0722*s}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let n=h=>h>5e-4?h:h+Math.pow(5e-4-h,.8),t=n(this.luminance),s=n(1),e=(Math.pow(t,.56)-Math.pow(s,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var y=class{constructor(n=[],t="brand"){this.swatches=n.map(s=>new I(s)),this.name=t}get colors(){return this.swatches.map(n=>n.hex)}get peakChroma(){let n=this.colors.slice(2,-2),t="",s=-1/0;for(let e of n){let h=new I(e);h.chroma>s&&(s=h.chroma,t=e)}return s<6?this.colors[Math.ceil(this.steps/2)]:t}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let n=C(w(this.colors[0])),t=C(w(this.colors[this.colors.length-1]));return n[0]>t[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(n=>n.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let n=this.swatches,t=n.length,s=t-1,e={};for(let h of[30,45,70]){let a=h/10,c=s,m=0;for(let r=1;r<t;r++){let i=1/0;for(let l=0;l<t-r;l++){let o=n[l].luminance,M=n[l+r].luminance,b=(Math.max(o,M)+.05)/(Math.min(o,M)+.05);b<i&&(i=b)}if(i>=a){c=r,m=i;break}r===s&&(m=i)}e[h]={efficiency:c/s,target:a,span:c,value:m}}return e}get apca(){let n=this.swatches,t=n.length,s=t-1,e={},h=(a,c)=>{let i=a<.022?a+Math.pow(.022-a,1.414):a,l=c<.022?c+Math.pow(.022-c,1.414):c,o=l>=i?(Math.pow(l,.56)-Math.pow(i,.57))*114:(Math.pow(l,.65)-Math.pow(i,.62))*114;return Math.abs(o)<10?0:(o=o>0?o-2.7:o+2.7,Math.round(o))};for(let a of[45,60,75]){let c=a,m=s,r=0;for(let i=1;i<t;i++){let l=1/0;for(let o=0;o<t-i;o++){let M=n[o].luminance>n[o+i].luminance?n[o].luminance:n[o+i].luminance,b=n[o].luminance>n[o+i].luminance?n[o+i].luminance:n[o].luminance,f=Math.abs(h(b,M));f<l&&(l=f)}if(l>=c){m=i,r=l;break}i===s&&(r=l)}e[a]={efficiency:m/s,target:c,span:m,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let n=[0];for(let t=1;t<this.swatches.length;t++){let s=v(this.swatches[t-1].lab,this.swatches[t].lab);n.push(n[t-1]+s)}return n}get unwrapHues(){let n=this.swatches.map(s=>s.hue).slice(1,-1);if(n.length===0)return[];let t=[n[0]];for(let s=1;s<n.length;s++){let e=n[s]-n[s-1];e>180?e-=360:e<-180&&(e+=360),t.push(t[s-1]+e)}return t}get lightnessLinearity(){let n=this.swatches.map(M=>M.lightness),t=n.length;if(t<2)return 1;let s=0,e=0,h=0,a=0;for(let M=0;M<t;M++)s+=M,e+=n[M],h+=M*n[M],a+=M*M;let c=t*a-s*s;if(Math.abs(c)<1e-10)return 1;let m=(t*h-s*e)/c,r=(e-m*s)/t;if(Math.abs(m*(t-1))<.001)return 1;let l=0,o=0;for(let M=0;M<t;M++){let b=m*M+r,f=n[M]-b;l+=f*f;let p=Math.max(b-Math.min(r,m*(t-1)+r),Math.max(r,m*(t-1)+r)-b);o+=p*p}return Math.max(0,Math.min(1,1-Math.sqrt(l/t)/Math.sqrt(o/t)))}get chromaSmoothness(){let n=this.swatches.map(o=>o.chroma),t=n.length;if(t<3)return 1;let s=133.8,e=Math.max(...n);if(e<=.01)return 1;let h=n.map(o=>o/e*s),a=Math.min(...h),c=Math.max(...h),m=h.findIndex(o=>o===c),r=k([[0,h[0]],[m,c],[t-1,h[t-1]]]),i=0,l=0;for(let o=0;o<t;o++){let M=r(o),b=h[o]-M;i+=b*b,l+=Math.pow(Math.max(M-a,c-M),2)}return Math.max(0,Math.min(1,1-Math.sqrt(i/t)/Math.sqrt(l/t)))}get spacingUniformity(){let n=this.deltaECurve,t=n.length;if(t<2)return 1;let s=[];for(let c=1;c<t;c++){let m=n[c]-n[c-1];if(m<0)return 0;s.push(m)}let e=s.reduce((c,m)=>c+m,0)/s.length;if(e<=1e-6)return 0;let h=0;for(let c of s)h+=Math.pow(c-e,2);let a=Math.sqrt(h/s.length)/e;return Math.max(0,Math.min(1,1/(1+a)))}get hueStability(){var a,c,m;let n=this.unwrapHues,t=n.length;if(t<2)return 1;let s=(m=(c=n[this.baseIndex-1])!=null?c:(a=this.swatches[this.baseIndex])==null?void 0:a.hue)!=null?m:0,e=0,h=0;for(let r=0;r<t;r++){let i=Math.abs(n[r]-s)%360;i>180&&(i=360-i),e+=i*i;let l=r/(t-1)*180;h+=l*l}return Math.max(0,Math.min(1,1-Math.sqrt(e/t)/(Math.sqrt(h/t)||1)))}get contrastEfficiency(){let n=this.wcag[45].span,t=this.steps;if(t<=1)return 1;let s=.5,e=n/t,h=s*((t-1)/t);return e<=h?1:e>=1?0:(1-e)/(1-h)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return P(Object.values(this.metrics))}};return $(st);})();
|
|
1
|
+
"use strict";var Chromametry=(()=>{var v=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var O=(l,t)=>{for(var s in t)v(l,s,{get:t[s],enumerable:!0})},V=(l,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of j(t))!N.call(l,e)&&e!==s&&v(l,e,{get:()=>t[e],enumerable:!(n=G(t,e))||n.enumerable});return l};var $=l=>V(v({},"__esModule",{value:!0}),l);var et={};O(et,{Palette:()=>T,Ramp:()=>q,Swatch:()=>y,calcDeltaE2000:()=>k,calcScore:()=>L,calcStatistics:()=>nt,createMonotone:()=>E,cssRgbToRgb:()=>st,fromLightnessEAL:()=>J,hexToRgb:()=>C,labToLch:()=>P,labToRgb:()=>tt,lchToLab:()=>Q,rgbToHex:()=>Z,rgbToLab:()=>S,rootMeanSquare:()=>d,toLightnessEAL:()=>_});var F=l=>{let t=s=>{let n=Math.max(0,Math.min(1,s)),e=n<=.0031308?12.92*n:1.055*Math.pow(n,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return l.map(t)},K=l=>{let t=s=>s>.04045?Math.pow((s+.055)/1.055,2.4):s/12.92;return l.map(t)},Z=l=>{let[t,s,n]=F(l);return t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),n=n.toString(16).padStart(2,"0"),`#${t}${s}${n}`},C=l=>{let t=parseInt(l.slice(1,3),16)/255,s=parseInt(l.slice(3,5),16)/255,n=parseInt(l.slice(5,7),16)/255;return K([t,s,n])},_=l=>{let[t,s,n]=l,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(m+c)*e},J=(l,t)=>{let[,s,n]=t,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),Math.max(0,l-(m+c)*e)},Q=l=>{let[t,s,n]=l,e=n*Math.PI/180;return[t,s*Math.cos(e),s*Math.sin(e)]},S=l=>{let[t,s,n]=l,e=.4124564*t+.3575761*s+.1804375*n,h=.2126729*t+.7151522*s+.072175*n,o=.0193339*t+.119192*s+.9503041*n,a=.95047,u=1,r=1.08883,i=g=>g>.008856?Math.cbrt(g):7.787*g+16/116,m=i(e/a),c=i(h/u),p=i(o/r);return[116*c-16,500*(m-c),200*(c-p)]},tt=l=>{let[t,s,n]=l,e=(t+16)/116,h=s/500+e,o=e-n/200,a=g=>g**3>.008856?g**3:(g-16/116)/7.787,u=.95047,r=1,i=1.08883,m=a(h)*u,c=a(e)*r,p=a(o)*i;return[3.2404542*m-1.5371385*c-.4985314*p,-.969266*m+1.8760108*c+.041556*p,.0556434*m-.2040259*c+1.0572252*p]},P=l=>{let[t,s,n]=l,e=Math.sqrt(s*s+n*n);if(e<1e-4)return[t,0,0];let o=(Math.atan2(n,s)*180/Math.PI+360)%360;return o>=359.9999&&(o=0),[t,e,o]},k=(l,t)=>{let[s,n,e]=l,[h,o,a]=t,u=(s+h)/2,r=Math.sqrt(n*n+e*e),i=Math.sqrt(o*o+a*a),m=(r+i)/2,c=.5*(1-Math.sqrt(Math.pow(m,7)/(Math.pow(m,7)+Math.pow(25,7)))),p=n*(1+c),g=o*(1+c),M=Math.sqrt(p*p+e*e),b=Math.sqrt(g*g+a*a),w=(M+b)/2,x=Math.atan2(e,p)*180/Math.PI+(Math.atan2(e,p)<0?360:0),f=Math.atan2(a,g)*180/Math.PI+(Math.atan2(a,g)<0?360:0),R=f-x;Math.abs(R)>180&&(R+=f<=x?360:-360);let I=Math.abs(x-f)>180?(x+f+360)/2:(x+f)/2,Y=1-.17*Math.cos((I-30)*Math.PI/180)+.24*Math.cos(2*I*Math.PI/180)+.32*Math.cos((3*I+6)*Math.PI/180)-.2*Math.cos((4*I-63)*Math.PI/180),U=h-s,B=b-M,A=2*Math.sqrt(M*b)*Math.sin(R/2*Math.PI/180),W=1+.015*Math.pow(u-50,2)/Math.sqrt(20+Math.pow(u-50,2)),D=1+.045*w,H=1+.015*w*Y,X=30*Math.exp(-Math.pow((I-275)/25,2)),z=-(2*Math.sqrt(Math.pow(w,7)/(Math.pow(w,7)+Math.pow(25,7))))*Math.sin(2*X*Math.PI/180);return Math.sqrt(Math.pow(U/W,2)+Math.pow(B/D,2)+Math.pow(A/H,2)+z*(B/D)*(A/H))},st=l=>{let t=l.match(/\d+(\.\d+)?/g);if(!t||t.length<3)throw new Error("Invalid CSS rgb()");let s=n=>{let e=n/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[s(Number(t[0])),s(Number(t[1])),s(Number(t[2]))]},E=l=>{if(l.length<1)return r=>0;let t=[...l].sort((r,i)=>r[0]-i[0]),s=[];for(let r=0;r<t.length;r++)(r===0||t[r][0]!==t[r-1][0])&&s.push(t[r]);let n=s.length;if(n===1)return r=>s[0][1];let e=s.map(r=>r[0]),h=s.map(r=>r[1]),o=[],a=[];for(let r=0;r<n-1;r++)o[r]=e[r+1]-e[r],a[r]=(h[r+1]-h[r])/o[r];let u=new Array(n);u[0]=a[0],u[n-1]=a[n-2];for(let r=1;r<n-1;r++){let i=a[r-1],m=a[r];if(i*m<=0)u[r]=0;else{let c=(1+o[r]/(o[r-1]+o[r]))/3;u[r]=i*m/((1-c)*i+c*m)}}return r=>{if(r<=e[0])return h[0];if(r>=e[n-1])return h[n-1];let i=0,m=n-2,c=0;for(;i<=m;){let f=Math.floor((i+m)/2);if(r>=e[f]&&r<=e[f+1]){c=f;break}r<e[f]?m=f-1:i=f+1}let p=o[c],g=(r-e[c])/p,M=g*g,b=M*g,w=u[c]*p,x=u[c+1]*p;return(2*b-3*M+1)*h[c]+(b-2*M+g)*w+(-2*b+3*M)*h[c+1]+(b-M)*x}};function d(l){let t=l.length;if(t===0)return 0;let s=0;for(let n=0;n<t;n++)s+=l[n]*l[n];return Math.sqrt(s/t)}var nt=l=>{let t=l.length;if(t===0)return{min:0,max:0,avg:0};let s=l[0],n=l[0],e=0;for(let h=0;h<t;h++){let o=l[h];o<s&&(s=o),o>n&&(n=o),e+=o}return{min:s,max:n,avg:e/t}},L=l=>{let t=l.length;if(t===0)return 0;let s=1e-6,n=l.reduce((o,a)=>o*(a+s),1),e=Math.pow(n,1/t),h=Math.max(0,Math.min(1,e));return parseFloat((h*100).toFixed(2))};var y=class{constructor(t){this.hex=t}get rgb(){return C(this.hex)}get lab(){return S(this.rgb)}get lch(){return P(this.lab)}get lightness(){let[t,s,n]=this.lab,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,m=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(m+c)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[t,s,n]=this.rgb;return .2126*t+.7152*s+.0722*n}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let t=h=>h>5e-4?h:h+Math.pow(5e-4-h,.8),s=t(this.luminance),n=t(1),e=(Math.pow(s,.56)-Math.pow(n,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var q=class{constructor(t=[],s="brand"){this.swatches=t.map(n=>new y(n)),this.name=s}get colors(){return this.swatches.map(t=>t.hex)}get peakChroma(){let t=this.colors.slice(2,-2),s="",n=-1/0;for(let e of t){let h=new y(e);h.chroma>n&&(n=h.chroma,s=e)}return n<6?this.colors[Math.ceil(this.steps/2)]:s}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let t=S(C(this.colors[0])),s=S(C(this.colors[this.colors.length-1]));return t[0]>s[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(t=>t.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let t=this.swatches,s=t.length,n=s-1,e={};for(let h of[30,45,70]){let o=h/10,a=n,u=0;for(let r=1;r<s;r++){let i=1/0;for(let m=0;m<s-r;m++){let c=t[m].luminance,p=t[m+r].luminance,g=(Math.max(c,p)+.05)/(Math.min(c,p)+.05);g<i&&(i=g)}if(i>=o){a=r,u=i;break}r===n&&(u=i)}e[h]={efficiency:a/n,target:o,span:a,value:u}}return e}get apca(){let t=this.swatches,s=t.length,n=s-1,e={},h=(o,a)=>{let i=o<.022?o+Math.pow(.022-o,1.414):o,m=a<.022?a+Math.pow(.022-a,1.414):a,c=m>=i?(Math.pow(m,.56)-Math.pow(i,.57))*114:(Math.pow(m,.65)-Math.pow(i,.62))*114;return Math.abs(c)<10?0:(c=c>0?c-2.7:c+2.7,Math.round(c))};for(let o of[45,60,75]){let a=o,u=n,r=0;for(let i=1;i<s;i++){let m=1/0;for(let c=0;c<s-i;c++){let p=t[c].luminance>t[c+i].luminance?t[c].luminance:t[c+i].luminance,g=t[c].luminance>t[c+i].luminance?t[c+i].luminance:t[c].luminance,M=Math.abs(h(g,p));M<m&&(m=M)}if(m>=a){u=i,r=m;break}i===n&&(r=m)}e[o]={efficiency:u/n,target:a,span:u,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let t=[0];for(let s=1;s<this.swatches.length;s++){let n=k(this.swatches[s-1].lab,this.swatches[s].lab);t.push(t[s-1]+n)}return t}get unwrapHues(){let t=this.swatches.map(n=>n.hue).slice(1,-1);if(t.length===0)return[];let s=[t[0]];for(let n=1;n<t.length;n++){let e=t[n]-t[n-1];e>180?e-=360:e<-180&&(e+=360),s.push(s[n-1]+e)}return s}get lightnessLinearity(){let t=this.swatches.map(p=>p.lightness),s=t.length;if(s<2)return 1;let n=0,e=0,h=0,o=0;for(let p=0;p<s;p++)n+=p,e+=t[p],h+=p*t[p],o+=p*p;let a=s*o-n*n;if(Math.abs(a)<1e-10)return 1;let u=(s*h-n*e)/a,r=(e-u*n)/s;if(Math.abs(u*(s-1))<.001)return 1;let m=0,c=0;for(let p=0;p<s;p++){let g=u*p+r,M=t[p]-g;m+=M*M;let b=Math.max(g-Math.min(r,u*(s-1)+r),Math.max(r,u*(s-1)+r)-g);c+=b*b}return Math.max(0,Math.min(1,1-Math.sqrt(m/s)/Math.sqrt(c/s)))}get chromaSmoothness(){let t=this.swatches.map(c=>c.chroma),s=t.length;if(s<3)return 1;let n=133.8,e=Math.max(...t);if(e<=.01)return 1;let h=t.map(c=>c/e*n),o=Math.min(...h),a=Math.max(...h),u=h.findIndex(c=>c===a),r=E([[0,h[0]],[u,a],[s-1,h[s-1]]]),i=0,m=0;for(let c=0;c<s;c++){let p=r(c),g=h[c]-p;i+=g*g,m+=Math.pow(Math.max(p-o,a-p),2)}return Math.max(0,Math.min(1,1-Math.sqrt(i/s)/Math.sqrt(m/s)))}get spacingUniformity(){let t=this.deltaECurve,s=t.length;if(s<2)return 1;let n=[];for(let a=1;a<s;a++){let u=t[a]-t[a-1];if(u<0)return 0;n.push(u)}let e=n.reduce((a,u)=>a+u,0)/n.length;if(e<=1e-6)return 0;let h=0;for(let a of n)h+=Math.pow(a-e,2);let o=Math.sqrt(h/n.length)/e;return Math.max(0,Math.min(1,1/(1+o)))}get hueStability(){var o,a,u;let t=this.unwrapHues,s=t.length;if(s<2)return 1;let n=(u=(a=t[this.baseIndex-1])!=null?a:(o=this.swatches[this.baseIndex])==null?void 0:o.hue)!=null?u:0,e=0,h=0;for(let r=0;r<s;r++){let i=Math.abs(t[r]-n)%360;i>180&&(i=360-i),e+=i*i;let m=r/(s-1)*180;h+=m*m}return Math.max(0,Math.min(1,1-Math.sqrt(e/s)/(Math.sqrt(h/s)||1)))}get contrastEfficiency(){let t=this.wcag[45].span,s=this.steps;if(s<=1)return 1;let n=.501,e=t/(s-1);return e<=n?1:e>=1?0:1-(e-n)/(1-n)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return L(Object.values(this.metrics))}};var T=class{constructor(t={},s="Collection 1"){this.ramps=Object.entries(t).map(([n,e])=>new q(e,n)),this.name=s}get colors(){return Object.fromEntries(this.ramps.map(t=>[t.name,t.colors]))}get steps(){var t;return((t=this.ramps[0])==null?void 0:t.steps)||0}get wcag(){let t={},s=this.steps;for(let n of[30,45,70]){let e=this.ramps.map(a=>a.wcag[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n/10,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get apca(){let t={},s=this.steps;for(let n of[45,60,75]){let e=this.ramps.map(a=>a.apca[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get contrastEfficiency(){return d(this.ramps.map(t=>t.contrastEfficiency))}get lightnessLinearity(){return d(this.ramps.map(t=>t.lightnessLinearity))}get chromaSmoothness(){return d(this.ramps.map(t=>t.chromaSmoothness))}get hueStability(){return d(this.ramps.map(t=>t.hueStability))}get spacingUniformity(){return d(this.ramps.map(t=>t.spacingUniformity))}get score(){return L([this.contrastEfficiency,this.lightnessLinearity,this.chromaSmoothness,this.hueStability,this.spacingUniformity])}};return $(et);})();
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var z=m=>{let n=t=>{let s=Math.max(0,Math.min(1,t)),e=s<=.0031308?12.92*s:1.055*Math.pow(s,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return m.map(n)},G=m=>{let n=t=>t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92;return m.map(n)},U=m=>{let[n,t,s]=z(m);return n=n.toString(16).padStart(2,"0"),t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),`#${n}${t}${s}`},C=m=>{let n=parseInt(m.slice(1,3),16)/255,t=parseInt(m.slice(3,5),16)/255,s=parseInt(m.slice(5,7),16)/255;return G([n,t,s])},V=m=>{let[n,t,s]=m,e=Math.sqrt(t*t+s*s),a=(Math.atan2(s,t)*180/Math.PI+360)%360,c=.1644,l=.0603,r=.1307,i=.006,u=c*Math.abs(Math.sin((a-90)/2*(Math.PI/180)))+l,o=0;return(a<=90||a>=270)&&(o=r*Math.abs(Math.cos(a*(Math.PI/180)))+i),n+(u+o)*e},W=(m,n)=>{let[,t,s]=n,e=Math.sqrt(t*t+s*s),a=(Math.atan2(s,t)*180/Math.PI+360)%360,c=.1644,l=.0603,r=.1307,i=.006,u=c*Math.abs(Math.sin((a-90)/2*(Math.PI/180)))+l,o=0;return(a<=90||a>=270)&&(o=r*Math.abs(Math.cos(a*(Math.PI/180)))+i),Math.max(0,m-(u+o)*e)},$=m=>{let[n,t,s]=m,e=s*Math.PI/180;return[n,t*Math.cos(e),t*Math.sin(e)]},I=m=>{let[n,t,s]=m,e=.4124564*n+.3575761*t+.1804375*s,h=.2126729*n+.7151522*t+.072175*s,a=.0193339*n+.119192*t+.9503041*s,c=.95047,l=1,r=1.08883,i=b=>b>.008856?Math.cbrt(b):7.787*b+16/116,u=i(e/c),o=i(h/l),M=i(a/r);return[116*o-16,500*(u-o),200*(o-M)]},F=m=>{let[n,t,s]=m,e=(n+16)/116,h=t/500+e,a=e-s/200,c=b=>b**3>.008856?b**3:(b-16/116)/7.787,l=.95047,r=1,i=1.08883,u=c(h)*l,o=c(e)*r,M=c(a)*i;return[3.2404542*u-1.5371385*o-.4985314*M,-.969266*u+1.8760108*o+.041556*M,.0556434*u-.2040259*o+1.0572252*M]},P=m=>{let[n,t,s]=m,e=Math.sqrt(t*t+s*s);if(e<1e-4)return[n,0,0];let a=(Math.atan2(s,t)*180/Math.PI+360)%360;return a>=359.9999&&(a=0),[n,e,a]},y=(m,n)=>{let[t,s,e]=m,[h,a,c]=n,l=(t+h)/2,r=Math.sqrt(s*s+e*e),i=Math.sqrt(a*a+c*c),u=(r+i)/2,o=.5*(1-Math.sqrt(Math.pow(u,7)/(Math.pow(u,7)+Math.pow(25,7)))),M=s*(1+o),b=a*(1+o),f=Math.sqrt(M*M+e*e),p=Math.sqrt(b*b+c*c),d=(f+p)/2,x=Math.atan2(e,M)*180/Math.PI+(Math.atan2(e,M)<0?360:0),g=Math.atan2(c,b)*180/Math.PI+(Math.atan2(c,b)<0?360:0),q=g-x;Math.abs(q)>180&&(q+=g<=x?360:-360);let w=Math.abs(x-g)>180?(x+g+360)/2:(x+g)/2,D=1-.17*Math.cos((w-30)*Math.PI/180)+.24*Math.cos(2*w*Math.PI/180)+.32*Math.cos((3*w+6)*Math.PI/180)-.2*Math.cos((4*w-63)*Math.PI/180),H=h-t,L=p-f,R=2*Math.sqrt(f*p)*Math.sin(q/2*Math.PI/180),Y=1+.015*Math.pow(l-50,2)/Math.sqrt(20+Math.pow(l-50,2)),v=1+.045*d,k=1+.015*d*D,A=30*Math.exp(-Math.pow((w-275)/25,2)),X=-(2*Math.sqrt(Math.pow(d,7)/(Math.pow(d,7)+Math.pow(25,7))))*Math.sin(2*A*Math.PI/180);return Math.sqrt(Math.pow(H/Y,2)+Math.pow(L/v,2)+Math.pow(R/k,2)+X*(L/v)*(R/k))},K=m=>{let n=m.match(/\d+(\.\d+)?/g);if(!n||n.length<3)throw new Error("Invalid CSS rgb()");let t=s=>{let e=s/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[t(Number(n[0])),t(Number(n[1])),t(Number(n[2]))]},E=m=>{if(m.length<1)return r=>0;let n=[...m].sort((r,i)=>r[0]-i[0]),t=[];for(let r=0;r<n.length;r++)(r===0||n[r][0]!==n[r-1][0])&&t.push(n[r]);let s=t.length;if(s===1)return r=>t[0][1];let e=t.map(r=>r[0]),h=t.map(r=>r[1]),a=[],c=[];for(let r=0;r<s-1;r++)a[r]=e[r+1]-e[r],c[r]=(h[r+1]-h[r])/a[r];let l=new Array(s);l[0]=c[0],l[s-1]=c[s-2];for(let r=1;r<s-1;r++){let i=c[r-1],u=c[r];if(i*u<=0)l[r]=0;else{let o=(1+a[r]/(a[r-1]+a[r]))/3;l[r]=i*u/((1-o)*i+o*u)}}return r=>{if(r<=e[0])return h[0];if(r>=e[s-1])return h[s-1];let i=0,u=s-2,o=0;for(;i<=u;){let g=Math.floor((i+u)/2);if(r>=e[g]&&r<=e[g+1]){o=g;break}r<e[g]?u=g-1:i=g+1}let M=a[o],b=(r-e[o])/M,f=b*b,p=f*b,d=l[o]*M,x=l[o+1]*M;return(2*p-3*f+1)*h[o]+(p-2*f+b)*d+(-2*p+3*f)*h[o+1]+(p-f)*x}};function Z(m){let n=m.length;if(n===0)return 0;let t=0;for(let s=0;s<n;s++)t+=m[s]*m[s];return Math.sqrt(t/n)}var _=m=>{let n=m.length;if(n===0)return{min:0,max:0,avg:0};let t=m[0],s=m[0],e=0;for(let h=0;h<n;h++){let a=m[h];a<t&&(t=a),a>s&&(s=a),e+=a}return{min:t,max:s,avg:e/n}},T=m=>{let n=m.length;if(n===0)return 0;let t=1e-6,s=m.reduce((a,c)=>a*(c+t),1),e=Math.pow(s,1/n),h=Math.max(0,Math.min(1,e));return parseFloat((h*100).toFixed(2))};var S=class{constructor(n){this.hex=n}get rgb(){return C(this.hex)}get lab(){return I(this.rgb)}get lch(){return P(this.lab)}get lightness(){let[n,t,s]=this.lab,e=Math.sqrt(t*t+s*s),a=(Math.atan2(s,t)*180/Math.PI+360)%360,c=.1644,l=.0603,r=.1307,i=.006,u=c*Math.abs(Math.sin((a-90)/2*(Math.PI/180)))+l,o=0;return(a<=90||a>=270)&&(o=r*Math.abs(Math.cos(a*(Math.PI/180)))+i),n+(u+o)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[n,t,s]=this.rgb;return .2126*n+.7152*t+.0722*s}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let n=h=>h>5e-4?h:h+Math.pow(5e-4-h,.8),t=n(this.luminance),s=n(1),e=(Math.pow(t,.56)-Math.pow(s,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var B=class{constructor(n=[],t="brand"){this.swatches=n.map(s=>new S(s)),this.name=t}get colors(){return this.swatches.map(n=>n.hex)}get peakChroma(){let n=this.colors.slice(2,-2),t="",s=-1/0;for(let e of n){let h=new S(e);h.chroma>s&&(s=h.chroma,t=e)}return s<6?this.colors[Math.ceil(this.steps/2)]:t}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let n=I(C(this.colors[0])),t=I(C(this.colors[this.colors.length-1]));return n[0]>t[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(n=>n.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let n=this.swatches,t=n.length,s=t-1,e={};for(let h of[30,45,70]){let a=h/10,c=s,l=0;for(let r=1;r<t;r++){let i=1/0;for(let u=0;u<t-r;u++){let o=n[u].luminance,M=n[u+r].luminance,b=(Math.max(o,M)+.05)/(Math.min(o,M)+.05);b<i&&(i=b)}if(i>=a){c=r,l=i;break}r===s&&(l=i)}e[h]={efficiency:c/s,target:a,span:c,value:l}}return e}get apca(){let n=this.swatches,t=n.length,s=t-1,e={},h=(a,c)=>{let i=a<.022?a+Math.pow(.022-a,1.414):a,u=c<.022?c+Math.pow(.022-c,1.414):c,o=u>=i?(Math.pow(u,.56)-Math.pow(i,.57))*114:(Math.pow(u,.65)-Math.pow(i,.62))*114;return Math.abs(o)<10?0:(o=o>0?o-2.7:o+2.7,Math.round(o))};for(let a of[45,60,75]){let c=a,l=s,r=0;for(let i=1;i<t;i++){let u=1/0;for(let o=0;o<t-i;o++){let M=n[o].luminance>n[o+i].luminance?n[o].luminance:n[o+i].luminance,b=n[o].luminance>n[o+i].luminance?n[o+i].luminance:n[o].luminance,f=Math.abs(h(b,M));f<u&&(u=f)}if(u>=c){l=i,r=u;break}i===s&&(r=u)}e[a]={efficiency:l/s,target:c,span:l,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let n=[0];for(let t=1;t<this.swatches.length;t++){let s=y(this.swatches[t-1].lab,this.swatches[t].lab);n.push(n[t-1]+s)}return n}get unwrapHues(){let n=this.swatches.map(s=>s.hue).slice(1,-1);if(n.length===0)return[];let t=[n[0]];for(let s=1;s<n.length;s++){let e=n[s]-n[s-1];e>180?e-=360:e<-180&&(e+=360),t.push(t[s-1]+e)}return t}get lightnessLinearity(){let n=this.swatches.map(M=>M.lightness),t=n.length;if(t<2)return 1;let s=0,e=0,h=0,a=0;for(let M=0;M<t;M++)s+=M,e+=n[M],h+=M*n[M],a+=M*M;let c=t*a-s*s;if(Math.abs(c)<1e-10)return 1;let l=(t*h-s*e)/c,r=(e-l*s)/t;if(Math.abs(l*(t-1))<.001)return 1;let u=0,o=0;for(let M=0;M<t;M++){let b=l*M+r,f=n[M]-b;u+=f*f;let p=Math.max(b-Math.min(r,l*(t-1)+r),Math.max(r,l*(t-1)+r)-b);o+=p*p}return Math.max(0,Math.min(1,1-Math.sqrt(u/t)/Math.sqrt(o/t)))}get chromaSmoothness(){let n=this.swatches.map(o=>o.chroma),t=n.length;if(t<3)return 1;let s=133.8,e=Math.max(...n);if(e<=.01)return 1;let h=n.map(o=>o/e*s),a=Math.min(...h),c=Math.max(...h),l=h.findIndex(o=>o===c),r=E([[0,h[0]],[l,c],[t-1,h[t-1]]]),i=0,u=0;for(let o=0;o<t;o++){let M=r(o),b=h[o]-M;i+=b*b,u+=Math.pow(Math.max(M-a,c-M),2)}return Math.max(0,Math.min(1,1-Math.sqrt(i/t)/Math.sqrt(u/t)))}get spacingUniformity(){let n=this.deltaECurve,t=n.length;if(t<2)return 1;let s=[];for(let c=1;c<t;c++){let l=n[c]-n[c-1];if(l<0)return 0;s.push(l)}let e=s.reduce((c,l)=>c+l,0)/s.length;if(e<=1e-6)return 0;let h=0;for(let c of s)h+=Math.pow(c-e,2);let a=Math.sqrt(h/s.length)/e;return Math.max(0,Math.min(1,1/(1+a)))}get hueStability(){var a,c,l;let n=this.unwrapHues,t=n.length;if(t<2)return 1;let s=(l=(c=n[this.baseIndex-1])!=null?c:(a=this.swatches[this.baseIndex])==null?void 0:a.hue)!=null?l:0,e=0,h=0;for(let r=0;r<t;r++){let i=Math.abs(n[r]-s)%360;i>180&&(i=360-i),e+=i*i;let u=r/(t-1)*180;h+=u*u}return Math.max(0,Math.min(1,1-Math.sqrt(e/t)/(Math.sqrt(h/t)||1)))}get contrastEfficiency(){let n=this.wcag[45].span,t=this.steps;if(t<=1)return 1;let s=.5,e=n/t,h=s*((t-1)/t);return e<=h?1:e>=1?0:(1-e)/(1-h)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return T(Object.values(this.metrics))}};export{B as Ramp,S as Swatch,y as calcDeltaE2000,T as calcScore,_ as calcStatistics,E as createMonotone,K as cssRgbToRgb,W as fromLightnessEAL,C as hexToRgb,P as labToLch,F as labToRgb,$ as lchToLab,U as rgbToHex,I as rgbToLab,Z as rootMeanSquare,V as toLightnessEAL};
|
|
1
|
+
var z=m=>{let t=s=>{let n=Math.max(0,Math.min(1,s)),e=n<=.0031308?12.92*n:1.055*Math.pow(n,1/2.4)-.055;return Math.max(0,Math.min(255,Math.round(e*255)))};return m.map(t)},G=m=>{let t=s=>s>.04045?Math.pow((s+.055)/1.055,2.4):s/12.92;return m.map(t)},N=m=>{let[t,s,n]=z(m);return t=t.toString(16).padStart(2,"0"),s=s.toString(16).padStart(2,"0"),n=n.toString(16).padStart(2,"0"),`#${t}${s}${n}`},S=m=>{let t=parseInt(m.slice(1,3),16)/255,s=parseInt(m.slice(3,5),16)/255,n=parseInt(m.slice(5,7),16)/255;return G([t,s,n])},O=m=>{let[t,s,n]=m,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,l=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(l+c)*e},V=(m,t)=>{let[,s,n]=t,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,l=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),Math.max(0,m-(l+c)*e)},$=m=>{let[t,s,n]=m,e=n*Math.PI/180;return[t,s*Math.cos(e),s*Math.sin(e)]},y=m=>{let[t,s,n]=m,e=.4124564*t+.3575761*s+.1804375*n,h=.2126729*t+.7151522*s+.072175*n,o=.0193339*t+.119192*s+.9503041*n,a=.95047,u=1,r=1.08883,i=g=>g>.008856?Math.cbrt(g):7.787*g+16/116,l=i(e/a),c=i(h/u),p=i(o/r);return[116*c-16,500*(l-c),200*(c-p)]},F=m=>{let[t,s,n]=m,e=(t+16)/116,h=s/500+e,o=e-n/200,a=g=>g**3>.008856?g**3:(g-16/116)/7.787,u=.95047,r=1,i=1.08883,l=a(h)*u,c=a(e)*r,p=a(o)*i;return[3.2404542*l-1.5371385*c-.4985314*p,-.969266*l+1.8760108*c+.041556*p,.0556434*l-.2040259*c+1.0572252*p]},T=m=>{let[t,s,n]=m,e=Math.sqrt(s*s+n*n);if(e<1e-4)return[t,0,0];let o=(Math.atan2(n,s)*180/Math.PI+360)%360;return o>=359.9999&&(o=0),[t,e,o]},B=(m,t)=>{let[s,n,e]=m,[h,o,a]=t,u=(s+h)/2,r=Math.sqrt(n*n+e*e),i=Math.sqrt(o*o+a*a),l=(r+i)/2,c=.5*(1-Math.sqrt(Math.pow(l,7)/(Math.pow(l,7)+Math.pow(25,7)))),p=n*(1+c),g=o*(1+c),M=Math.sqrt(p*p+e*e),b=Math.sqrt(g*g+a*a),d=(M+b)/2,x=Math.atan2(e,p)*180/Math.PI+(Math.atan2(e,p)<0?360:0),f=Math.atan2(a,g)*180/Math.PI+(Math.atan2(a,g)<0?360:0),R=f-x;Math.abs(R)>180&&(R+=f<=x?360:-360);let C=Math.abs(x-f)>180?(x+f+360)/2:(x+f)/2,H=1-.17*Math.cos((C-30)*Math.PI/180)+.24*Math.cos(2*C*Math.PI/180)+.32*Math.cos((3*C+6)*Math.PI/180)-.2*Math.cos((4*C-63)*Math.PI/180),Y=h-s,v=b-M,P=2*Math.sqrt(M*b)*Math.sin(R/2*Math.PI/180),U=1+.015*Math.pow(u-50,2)/Math.sqrt(20+Math.pow(u-50,2)),k=1+.045*d,E=1+.015*d*H,W=30*Math.exp(-Math.pow((C-275)/25,2)),X=-(2*Math.sqrt(Math.pow(d,7)/(Math.pow(d,7)+Math.pow(25,7))))*Math.sin(2*W*Math.PI/180);return Math.sqrt(Math.pow(Y/U,2)+Math.pow(v/k,2)+Math.pow(P/E,2)+X*(v/k)*(P/E))},K=m=>{let t=m.match(/\d+(\.\d+)?/g);if(!t||t.length<3)throw new Error("Invalid CSS rgb()");let s=n=>{let e=n/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)};return[s(Number(t[0])),s(Number(t[1])),s(Number(t[2]))]},A=m=>{if(m.length<1)return r=>0;let t=[...m].sort((r,i)=>r[0]-i[0]),s=[];for(let r=0;r<t.length;r++)(r===0||t[r][0]!==t[r-1][0])&&s.push(t[r]);let n=s.length;if(n===1)return r=>s[0][1];let e=s.map(r=>r[0]),h=s.map(r=>r[1]),o=[],a=[];for(let r=0;r<n-1;r++)o[r]=e[r+1]-e[r],a[r]=(h[r+1]-h[r])/o[r];let u=new Array(n);u[0]=a[0],u[n-1]=a[n-2];for(let r=1;r<n-1;r++){let i=a[r-1],l=a[r];if(i*l<=0)u[r]=0;else{let c=(1+o[r]/(o[r-1]+o[r]))/3;u[r]=i*l/((1-c)*i+c*l)}}return r=>{if(r<=e[0])return h[0];if(r>=e[n-1])return h[n-1];let i=0,l=n-2,c=0;for(;i<=l;){let f=Math.floor((i+l)/2);if(r>=e[f]&&r<=e[f+1]){c=f;break}r<e[f]?l=f-1:i=f+1}let p=o[c],g=(r-e[c])/p,M=g*g,b=M*g,d=u[c]*p,x=u[c+1]*p;return(2*b-3*M+1)*h[c]+(b-2*M+g)*d+(-2*b+3*M)*h[c+1]+(b-M)*x}};function w(m){let t=m.length;if(t===0)return 0;let s=0;for(let n=0;n<t;n++)s+=m[n]*m[n];return Math.sqrt(s/t)}var Z=m=>{let t=m.length;if(t===0)return{min:0,max:0,avg:0};let s=m[0],n=m[0],e=0;for(let h=0;h<t;h++){let o=m[h];o<s&&(s=o),o>n&&(n=o),e+=o}return{min:s,max:n,avg:e/t}},L=m=>{let t=m.length;if(t===0)return 0;let s=1e-6,n=m.reduce((o,a)=>o*(a+s),1),e=Math.pow(n,1/t),h=Math.max(0,Math.min(1,e));return parseFloat((h*100).toFixed(2))};var I=class{constructor(t){this.hex=t}get rgb(){return S(this.hex)}get lab(){return y(this.rgb)}get lch(){return T(this.lab)}get lightness(){let[t,s,n]=this.lab,e=Math.sqrt(s*s+n*n),o=(Math.atan2(n,s)*180/Math.PI+360)%360,a=.1644,u=.0603,r=.1307,i=.006,l=a*Math.abs(Math.sin((o-90)/2*(Math.PI/180)))+u,c=0;return(o<=90||o>=270)&&(c=r*Math.abs(Math.cos(o*(Math.PI/180)))+i),t+(l+c)*e}get chroma(){return this.lch[1]}get hue(){return this.lch[2]}get luminance(){let[t,s,n]=this.rgb;return .2126*t+.7152*s+.0722*n}get wcag(){return(Math.max(this.luminance,1)+.05)/(Math.min(this.luminance,1)+.05)}get apca(){let t=h=>h>5e-4?h:h+Math.pow(5e-4-h,.8),s=t(this.luminance),n=t(1),e=(Math.pow(s,.56)-Math.pow(n,.56))*100;return Math.abs(e)<.1?0:(e=e>0?e<1?0:e-.25:e>-1?0:e+.25,Math.round(e))}};var q=class{constructor(t=[],s="brand"){this.swatches=t.map(n=>new I(n)),this.name=s}get colors(){return this.swatches.map(t=>t.hex)}get peakChroma(){let t=this.colors.slice(2,-2),s="",n=-1/0;for(let e of t){let h=new I(e);h.chroma>n&&(n=h.chroma,s=e)}return n<6?this.colors[Math.ceil(this.steps/2)]:s}get steps(){return this.colors.length}get direction(){if(this.colors.length===0)return"lighten";let t=y(S(this.colors[0])),s=y(S(this.colors[this.colors.length-1]));return t[0]>s[0]?"darken":"lighten"}get baseColor(){return this.colors.length===0?"":this.peakChroma||this.colors[Math.floor(this.colors.length/2)]}get baseIndex(){return this.colors.length===0?-1:this.colors.findIndex(t=>t.toLowerCase()===this.baseColor.toLowerCase())}get wcag(){let t=this.swatches,s=t.length,n=s-1,e={};for(let h of[30,45,70]){let o=h/10,a=n,u=0;for(let r=1;r<s;r++){let i=1/0;for(let l=0;l<s-r;l++){let c=t[l].luminance,p=t[l+r].luminance,g=(Math.max(c,p)+.05)/(Math.min(c,p)+.05);g<i&&(i=g)}if(i>=o){a=r,u=i;break}r===n&&(u=i)}e[h]={efficiency:a/n,target:o,span:a,value:u}}return e}get apca(){let t=this.swatches,s=t.length,n=s-1,e={},h=(o,a)=>{let i=o<.022?o+Math.pow(.022-o,1.414):o,l=a<.022?a+Math.pow(.022-a,1.414):a,c=l>=i?(Math.pow(l,.56)-Math.pow(i,.57))*114:(Math.pow(l,.65)-Math.pow(i,.62))*114;return Math.abs(c)<10?0:(c=c>0?c-2.7:c+2.7,Math.round(c))};for(let o of[45,60,75]){let a=o,u=n,r=0;for(let i=1;i<s;i++){let l=1/0;for(let c=0;c<s-i;c++){let p=t[c].luminance>t[c+i].luminance?t[c].luminance:t[c+i].luminance,g=t[c].luminance>t[c+i].luminance?t[c+i].luminance:t[c].luminance,M=Math.abs(h(g,p));M<l&&(l=M)}if(l>=a){u=i,r=l;break}i===n&&(r=l)}e[o]={efficiency:u/n,target:a,span:u,value:r}}return e}get contrasts(){return{wcag:this.wcag,apca:this.apca}}get deltaECurve(){let t=[0];for(let s=1;s<this.swatches.length;s++){let n=B(this.swatches[s-1].lab,this.swatches[s].lab);t.push(t[s-1]+n)}return t}get unwrapHues(){let t=this.swatches.map(n=>n.hue).slice(1,-1);if(t.length===0)return[];let s=[t[0]];for(let n=1;n<t.length;n++){let e=t[n]-t[n-1];e>180?e-=360:e<-180&&(e+=360),s.push(s[n-1]+e)}return s}get lightnessLinearity(){let t=this.swatches.map(p=>p.lightness),s=t.length;if(s<2)return 1;let n=0,e=0,h=0,o=0;for(let p=0;p<s;p++)n+=p,e+=t[p],h+=p*t[p],o+=p*p;let a=s*o-n*n;if(Math.abs(a)<1e-10)return 1;let u=(s*h-n*e)/a,r=(e-u*n)/s;if(Math.abs(u*(s-1))<.001)return 1;let l=0,c=0;for(let p=0;p<s;p++){let g=u*p+r,M=t[p]-g;l+=M*M;let b=Math.max(g-Math.min(r,u*(s-1)+r),Math.max(r,u*(s-1)+r)-g);c+=b*b}return Math.max(0,Math.min(1,1-Math.sqrt(l/s)/Math.sqrt(c/s)))}get chromaSmoothness(){let t=this.swatches.map(c=>c.chroma),s=t.length;if(s<3)return 1;let n=133.8,e=Math.max(...t);if(e<=.01)return 1;let h=t.map(c=>c/e*n),o=Math.min(...h),a=Math.max(...h),u=h.findIndex(c=>c===a),r=A([[0,h[0]],[u,a],[s-1,h[s-1]]]),i=0,l=0;for(let c=0;c<s;c++){let p=r(c),g=h[c]-p;i+=g*g,l+=Math.pow(Math.max(p-o,a-p),2)}return Math.max(0,Math.min(1,1-Math.sqrt(i/s)/Math.sqrt(l/s)))}get spacingUniformity(){let t=this.deltaECurve,s=t.length;if(s<2)return 1;let n=[];for(let a=1;a<s;a++){let u=t[a]-t[a-1];if(u<0)return 0;n.push(u)}let e=n.reduce((a,u)=>a+u,0)/n.length;if(e<=1e-6)return 0;let h=0;for(let a of n)h+=Math.pow(a-e,2);let o=Math.sqrt(h/n.length)/e;return Math.max(0,Math.min(1,1/(1+o)))}get hueStability(){var o,a,u;let t=this.unwrapHues,s=t.length;if(s<2)return 1;let n=(u=(a=t[this.baseIndex-1])!=null?a:(o=this.swatches[this.baseIndex])==null?void 0:o.hue)!=null?u:0,e=0,h=0;for(let r=0;r<s;r++){let i=Math.abs(t[r]-n)%360;i>180&&(i=360-i),e+=i*i;let l=r/(s-1)*180;h+=l*l}return Math.max(0,Math.min(1,1-Math.sqrt(e/s)/(Math.sqrt(h/s)||1)))}get contrastEfficiency(){let t=this.wcag[45].span,s=this.steps;if(s<=1)return 1;let n=.501,e=t/(s-1);return e<=n?1:e>=1?0:1-(e-n)/(1-n)}get metrics(){return{lightnessLinearity:this.lightnessLinearity,chromaSmoothness:this.chromaSmoothness,spacingUniformity:this.spacingUniformity,hueStability:this.hueStability,contrastEfficiency:this.contrastEfficiency}}get score(){return L(Object.values(this.metrics))}};var D=class{constructor(t={},s="Collection 1"){this.ramps=Object.entries(t).map(([n,e])=>new q(e,n)),this.name=s}get colors(){return Object.fromEntries(this.ramps.map(t=>[t.name,t.colors]))}get steps(){var t;return((t=this.ramps[0])==null?void 0:t.steps)||0}get wcag(){let t={},s=this.steps;for(let n of[30,45,70]){let e=this.ramps.map(a=>a.wcag[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n/10,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get apca(){let t={},s=this.steps;for(let n of[45,60,75]){let e=this.ramps.map(a=>a.apca[n]),h=Math.max(0,...e.map(a=>(a==null?void 0:a.span)||0)),o=e.reduce((a,u)=>a+((u==null?void 0:u.value)||0),0);t[n]={target:n,span:h,value:o/(this.ramps.length||1),efficiency:s>1?h/(s-1):0}}return t}get contrastEfficiency(){return w(this.ramps.map(t=>t.contrastEfficiency))}get lightnessLinearity(){return w(this.ramps.map(t=>t.lightnessLinearity))}get chromaSmoothness(){return w(this.ramps.map(t=>t.chromaSmoothness))}get hueStability(){return w(this.ramps.map(t=>t.hueStability))}get spacingUniformity(){return w(this.ramps.map(t=>t.spacingUniformity))}get score(){return L([this.contrastEfficiency,this.lightnessLinearity,this.chromaSmoothness,this.hueStability,this.spacingUniformity])}};export{D as Palette,q as Ramp,I as Swatch,B as calcDeltaE2000,L as calcScore,Z as calcStatistics,A as createMonotone,K as cssRgbToRgb,V as fromLightnessEAL,S as hexToRgb,T as labToLch,F as labToRgb,$ as lchToLab,N as rgbToHex,y as rgbToLab,w as rootMeanSquare,O as toLightnessEAL};
|
package/dist/palettes.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default [{"name":"Adobe Spectrum","colors":{"blue":["#ffffff","#f5f9ff","#e5f0fe","#cbe2fe","#accffd","#8eb9fc","#729efd","#5d89ff","#4b75ff","#3b63fb","#274dea","#1d3ecf","#1532ad","#10288c","#0c1f69","#0e1843","#070b1e","#000000"],"red":["#ffffff","#fff6f5","#ffebe8","#ffd6d1","#ffbcb4","#ff9d91","#ff7665","#ff513d","#f03823","#d73220","#b72818","#9c2113","#811b0e","#68150a","#501006","#3b0b04","#1d0502","#000000"],"orange":["#ffffff","#fff6e7","#ffeccf","#ffda9e","#ffc15e","#ffa213","#fc7d00","#e86a00","#d45b00","#c24e00","#a73e00","#903300","#762900","#5f2000","#491800","#341200","#190800","#000000"],"yellow":["#ffffff","#fff8cc","#fff197","#ffde2c","#f5c700","#e6af00","#d29500","#c18300","#af7400","#9e6600","#865500","#724800","#5d3b00","#4b2f00","#382300","#281900","#120b00","#000000"],"green":["#ffffff","#edfcf1","#d7f7e1","#adeec5","#6be3a2","#2bd17d","#12b867","#0ba45d","#079355","#05834e","#036e45","#025d3c","#014c34","#003d2c","#002e22","#002119","#000f0c","#000000"],"cyan":["#ffffff","#eefafe","#d9f4fd","#b7e7fc","#8ad5ff","#5cc0ff","#30a7fe","#1d95e7","#1286cd","#0b78b3","#046691","#005779","#004762","#00394e","#002b3b","#001f2b","#000e14","#000000"],"purple":["#ffffff","#fbf7fe","#f4ebfc","#ebdaf9","#ddc1f6","#d0a7f3","#bf8aee","#b272eb","#a65ce7","#9a47e2","#8628d9","#730dcc","#5d00b1","#4b0090","#3b006f","#2c0054","#17002d","#000000"],"pink":["#ffffff","#fff6fc","#ffe8f7","#ffd3f0","#ffb5e6","#ff94db","#ff67cc","#f24cb8","#e434a3","#ce2a92","#b01f7b","#981668","#800c55","#690344","#530035","#3e0027","#210015","#000000"],"brown":["#ffffff","#fcf7f2","#f7eee1","#efddc3","#e5c89d","#d6b17b","#be9b68","#ab8a5a","#9a7b4d","#8b6d42","#775b32","#674c23","#583d15","#463111","#34250d","#261a09","#100c04","#000000"],"silver":["#ffffff","#f7f7f7","#efefef","#dfdfdf","#cccccc","#b7b7b7","#a0a0a0","#8f8f8f","#808080","#727272","#606060","#515151","#424242","#343434","#272727","#1c1c1c","#0c0c0c","#000000"]}},{"name":"Ant Design","colors":{"red":["#ffffff","#fff1f0","#ffccc7","#ffa39e","#ff7875","#ff4d4f","#f5222d","#cf1322","#a8071a","#820014","#5c0011","#000000"],"volcano":["#ffffff","#fff2e8","#ffd8bf","#ffbb96","#ff9c6e","#ff7a45","#fa541c","#d4380d","#ad2102","#871400","#610b00","#000000"],"gold":["#ffffff","#fffbe6","#fff1b8","#ffe58f","#ffd666","#ffc53d","#faad14","#d48806","#ad6800","#874d00","#613400","#000000"],"yellow":["#ffffff","#feffe6","#ffffb8","#fffb8f","#fff566","#ffec3d","#fadb14","#d4b106","#ad8b00","#876800","#614700","#000000"],"lime":["#ffffff","#fcffe6","#f4ffb8","#eaff8f","#d3f261","#bae637","#a0d911","#7cb305","#5b8c00","#3f6600","#254000","#000000"],"green":["#ffffff","#f6ffed","#d9f7be","#b7eb8f","#95de64","#73d13d","#52c41a","#389e0d","#237804","#135200","#092b00","#000000"],"cyan":["#ffffff","#e6fffb","#b5f5ec","#87e8de","#5cdbd3","#36cfc9","#13c2c2","#08979c","#006d75","#00474f","#002329","#000000"],"blue":["#ffffff","#e6f4ff","#bae0ff","#91caff","#69b1ff","#4096ff","#1677ff","#0958d9","#003eb3","#002c8c","#001d66","#000000"],"geekblue":["#ffffff","#f0f5ff","#d6e4ff","#adc6ff","#85a5ff","#597ef7","#2f54eb","#1d39c4","#10239e","#061178","#030852","#000000"],"purple":["#ffffff","#f9f0ff","#efdbff","#d3adf7","#b37feb","#9254de","#722ed1","#531dab","#391085","#22075e","#120338","#000000"],"magenta":["#ffffff","#fff0f6","#ffd6e7","#ffadd2","#ff85c0","#f759ab","#eb2f96","#c41d7f","#9e1068","#780650","#520339","#000000"],"grey":["#ffffff","#a6a6a6","#999999","#8c8c8c","#808080","#737373","#666666","#404040","#1a1a1a","#000000","#000000","#000000"]}},{"name":"Atlassian","colors":{"lime":["#FFFFFF","#EFFFD6","#D3F1A7","#BDE97C","#B3DF72","#94C748","#82B536","#6A9A23","#5B7F24","#4C6B1F","#3F5224","#37471F","#28311B","#000000"],"red":["#FFFFFF","#FFECEB","#FFD5D2","#FFB8B2","#FD9891","#F87168","#F15B50","#E2483D","#C9372C","#AE2E24","#872821","#5D1F1A","#42221F","#000000"],"orange":["#FFFFFF","#FFF5DB","#FCE4A6","#FBD779","#FBC828","#FCA700","#F68909","#E06C00","#BD5B00","#9E4C00","#7A3B00","#693200","#3A2C1F","#000000"],"yellow":["#FFFFFF","#FEF7C8","#F5E989","#EFDD4E","#EED12B","#DDB30E","#CF9F02","#B38600","#946F00","#7F5F01","#614A05","#533F04","#332E1B","#000000"],"green":["#FFFFFF","#DCFFF1","#BAF3DB","#97EDC9","#7EE2B8","#4BCE97","#2ABB7F","#22A06B","#1F845A","#216E4E","#19573D","#164B35","#1C3329","#000000"],"teal":["#FFFFFF","#E7F9FF","#C6EDFB","#B1E4F7","#9DD9EE","#6CC3E0","#42B2D7","#2898BD","#227D9B","#206A83","#1A5265","#164555","#1E3137","#000000"],"blue":["#FFFFFF","#E9F2FE","#CFE1FD","#ADCBFB","#8FB8F6","#669DF1","#4688EC","#357DE8","#1868DB","#1558BC","#144794","#123263","#1C2B42","#000000"],"purple":["#FFFFFF","#F8EEFE","#EED7FC","#E3BDFA","#D8A0F7","#C97CF4","#BF63F3","#AF59E1","#964AC0","#803FA5","#673286","#48245D","#35243F","#000000"],"magenta":["#FFFFFF","#FFECF8","#FDD0EC","#FCB6E1","#F797D2","#E774BB","#DA62AC","#CD519D","#AE4787","#943D73","#77325B","#50253F","#3D2232","#000000"]}},{"name":"IBM Carbon","colors":{"yellow":["#ffffff","#fcf4d6","#fddc69","#f1c21b","#d2a106","#b28600","#8e6a00","#684e00","#483700","#302400","#1c1500","#000000"],"orange":["#ffffff","#fff2e8","#ffd9be","#ffb784","#ff832b","#eb6200","#ba4e00","#8a3800","#5e2900","#3e1a00","#231000","#000000"],"red":["#ffffff","#fff1f1","#ffd7d9","#ffb3b8","#ff8389","#fa4d56","#da1e28","#a2191f","#750e13","#520408","#2d0709","#000000"],"magenta":["#ffffff","#fff0f7","#ffd6e8","#ffafd2","#ff7eb6","#ee5396","#d02670","#9f1853","#740937","#510224","#2a0a18","#000000"],"purple":["#ffffff","#f6f2ff","#e8daff","#d4bbff","#be95ff","#a56eff","#8a3ffc","#6929c4","#491d8b","#31135e","#1c0f30","#000000"],"blue":["#ffffff","#edf5ff","#d0e2ff","#a6c8ff","#78a9ff","#4589ff","#0f62fe","#0043ce","#002d9c","#001d6c","#001141","#000000"],"cyan":["#ffffff","#e5f6ff","#bae6ff","#82cfff","#33b1ff","#1192e8","#0072c3","#00539a","#003a6d","#012749","#061727","#000000"],"teal":["#ffffff","#d9fbfb","#9ef0f0","#3ddbd9","#08bdba","#009d9a","#007d79","#005d5d","#004144","#022b30","#081a1c","#000000"],"green":["#ffffff","#defbe6","#a7f0ba","#6fdc8c","#42be65","#24a148","#198038","#0e6027","#044317","#022d0d","#071908","#000000"],"gray":["#ffffff","#f4f4f4","#e0e0e0","#c6c6c6","#a8a8a8","#8d8d8d","#6f6f6f","#525252","#393939","#262626","#161616","#000000"],"coolGray":["#ffffff","#f2f4f8","#dde1e6","#c1c7cd","#a2a9b0","#878d96","#697077","#4d5358","#343a3f","#21272a","#121619","#000000"],"warmGray":["#ffffff","#f7f3f2","#e5e0df","#cac5c4","#ada8a8","#8f8b8b","#726e6e","#565151","#3c3838","#272525","#171414","#000000"]}},{"name":"Github Primer Brand","colors":{"gray":["#ffffff","#f6f8fa","#eaeef2","#d0d7de","#afb8c1","#8c959f","#6e7781","#57606a","#424a53","#32383f","#24292f","#000000"],"blue":["#ffffff","#ddf4ff","#b6e3ff","#80ccff","#54aeff","#218bff","#0969da","#0550ae","#033d8b","#0a3069","#002155","#000000"],"green":["#ffffff","#dafbe1","#aceebb","#6fdd8b","#4ac26b","#2da44e","#1a7f37","#116329","#044f1e","#003d16","#002d11","#000000"],"yellow":["#ffffff","#fff8c5","#fae17d","#eac54f","#d4a72c","#bf8700","#9a6700","#7d4e00","#633c01","#4d2d00","#3b2300","#000000"],"orange":["#ffffff","#fff1e5","#ffd8b5","#ffb77c","#fb8f44","#e16f24","#bc4c00","#953800","#762c00","#5c2200","#471700","#000000"],"red":["#ffffff","#ffebe9","#ffcecb","#ffaba8","#ff8182","#fa4549","#cf222e","#a40e26","#82071e","#660018","#4c0014","#000000"],"purple":["#ffffff","#fbefff","#ecd8ff","#d8b9ff","#c297ff","#a475f9","#8250df","#6639ba","#512a97","#3e1f79","#2e1461","#000000"],"pink":["#ffffff","#ffeff7","#ffd3eb","#ffadda","#ff80c8","#e85aad","#bf3989","#99286e","#772057","#611347","#4d0336","#000000"],"coral":["#ffffff","#fff0eb","#ffd6cc","#ffb4a1","#fd8c73","#ec6547","#c4432b","#9e2f1c","#801f0f","#691105","#510901","#000000"],"lemon":["#ffffff","#FDF5B3","#F4E162","#DEC741","#C5AA20","#A88D02","#866D00","#685400","#534100","#413200","#322400","#000000"],"lime":["#ffffff","#EAFABA","#CDEC78","#B1D353","#94B83B","#799A2A","#5A791B","#425E13","#2F4A06","#233B03","#182C01","#000000"],"teal":["#ffffff","#DAF9F5","#B0EAE3","#6BD6D0","#49BCB7","#339D9B","#197B7B","#136061","#024B4D","#063A3C","#052B2C","#000000"],"indigo":["#ffffff","#EFF2FF","#D7DDFF","#B9C2FF","#9AA4FF","#7683FF","#545DF0","#3C42D0","#2C33A5","#22297F","#191F5C","#000000"]}},{"name":"Material UI","colors":{"red":["#ffffff","#ffebee","#ffcdd2","#ef9a9a","#e57373","#ef5350","#f44336","#e53935","#d32f2f","#c62828","#b71c1c","#000000"],"pink":["#ffffff","#fce4ec","#f8bbd0","#f48fb1","#f06292","#ec407a","#e91e63","#d81b60","#c2185b","#ad1457","#880e4f","#000000"],"purple":["#ffffff","#f3e5f5","#e1bee7","#ce93d8","#ba68c8","#ab47bc","#9c27b0","#8e24aa","#7b1fa2","#6a1b9a","#4a148c","#000000"],"deeppurple":["#ffffff","#ede7f6","#d1c4e9","#b39ddb","#9575cd","#7e57c2","#673ab7","#5e35b1","#512da8","#4527a0","#311b92","#000000"],"indigo":["#ffffff","#e8eaf6","#c5cae9","#9fa8da","#7986cb","#5c6bc0","#3f51b5","#3949ab","#303f9f","#283593","#1a237e","#000000"],"blue":["#ffffff","#e3f2fd","#bbdefb","#90caf9","#64b5f6","#42a5f5","#2196f3","#1e88e5","#1976d2","#1565c0","#0d47a1","#000000"],"lightblue":["#ffffff","#e1f5fe","#b3e5fc","#81d4fa","#4fc3f7","#29b6f6","#03a9f4","#039be5","#0288d1","#0277bd","#01579b","#000000"],"cyan":["#ffffff","#e0f7fa","#b2ebf2","#80deea","#4dd0e1","#26c6da","#00bcd4","#00acc1","#0097a7","#00838f","#006064","#000000"],"teal":["#ffffff","#e0f2f1","#b2dfdb","#80cbc4","#4db6ac","#26a69a","#009688","#00897b","#00796b","#00695c","#004d40","#000000"],"green":["#ffffff","#e8f5e9","#c8e6c9","#a5d6a7","#81c784","#66bb6a","#4caf50","#43a047","#388e3c","#2e7d32","#1b5e20","#000000"],"lightgreen":["#ffffff","#f1f8e9","#dcedc8","#c5e1a5","#aed581","#9ccc65","#8bc34a","#7cb342","#689f38","#558b2f","#33691e","#000000"],"lime":["#ffffff","#f9fbe7","#f0f4c3","#e6ee9c","#dce775","#d4e157","#cddc39","#c0ca33","#afb42b","#9e9d24","#827717","#000000"],"yellow":["#ffffff","#fffde7","#fff9c4","#fff59d","#fff176","#ffee58","#ffeb3b","#fdd835","#fbc02d","#f9a825","#f57f17","#000000"],"amber":["#ffffff","#fff8e1","#ffecb3","#ffe082","#ffd54f","#ffca28","#ffc107","#ffb300","#ffa000","#ff8f00","#ff6f00","#000000"],"orange":["#ffffff","#fff3e0","#ffe0b2","#ffcc80","#ffb74d","#ffa726","#ff9800","#fb8c00","#f57c00","#ef6c00","#e65100","#000000"],"deeporange":["#ffffff","#fbe9e7","#ffccbc","#ffab91","#ff8a65","#ff7043","#ff5722","#f4511e","#e64a19","#d84315","#bf360c","#000000"],"brown":["#ffffff","#efebe9","#d7ccc8","#bcaaa4","#a1887f","#8d6e63","#795548","#6d4c41","#5d4037","#4e342e","#3e2723","#000000"],"grey":["#ffffff","#fafafa","#f5f5f5","#eeeeee","#e0e0e0","#bdbdbd","#9e9e9e","#757575","#616161","#424242","#212121","#000000"],"bluegrey":["#ffffff","#eceff1","#cfd8dc","#b0bec5","#90a4ae","#78909c","#607d8b","#546e7a","#455a64","#37474f","#263238","#000000"]}},{"name":"RadixUI","colors":{"gray":["#ffffff","#f9f9f9","#f0f0f0","#e8e8e8","#e0e0e0","#d9d9d9","#cecece","#bbbbbb","#8d8d8d","#838383","#646464","#202020","#000000"],"mauve":["#ffffff","#faf8fb","#f5f2f7","#ede9ef","#e6e1e8","#dfdae0","#d3cdd7","#c1bac7","#8e8896","#837d8b","#65636d","#211f26","#000000"],"slate":["#ffffff","#f8f9fa","#f1f3f5","#eceef0","#e6e8eb","#dfe3e6","#d7dbdf","#c1c8cd","#889096","#7e868c","#687076","#11181c","#000000"],"sage":["#ffffff","#f7f9f8","#eef1f0","#e6e9e8","#dfe2e0","#d7dad9","#cbcfcd","#b8bcba","#868e8b","#7c8481","#5f6563","#1a211e","#000000"],"olive":["#ffffff","#f8faf8","#f2f4f2","#ecefec","#e6e9e6","#dfe3df","#d2d7d2","#bdc3bd","#8b918b","#808780","#60655f","#1d211c","#000000"],"sand":["#ffffff","#f9f9f8","#f3f3f2","#eeeeec","#e9e9e6","#e3e3df","#d6d6d0","#c0c0b8","#90908c","#868682","#696965","#21201c","#000000"],"tomato":["#ffffff","#fff8f7","#feebe7","#ffdcd3","#ffcdc2","#fdbdaf","#f5a898","#ec8e7b","#e54d2e","#dd4425","#d13415","#5c271f","#000000"],"red":["#ffffff","#fff7f7","#feebec","#ffdbdc","#ffcdce","#fdbdbe","#f4a9aa","#eb8e90","#e5484d","#dc3d43","#cd2b31","#381316","#000000"],"ruby":["#ffffff","#fff7f8","#feeaed","#ffdce1","#ffced6","#f8bfc8","#efacb8","#e592a3","#e54666","#dc3b5d","#ca244d","#3a141e","#000000"],"crimson":["#ffffff","#fff7fb","#feecf4","#ffdcec","#ffcee4","#f9bdd9","#f0a9cd","#e58fbf","#e93d82","#df3478","#cb1d63","#381525","#000000"],"pink":["#ffffff","#fff7fc","#fee9f5","#fbdcef","#f6cee7","#efbfdd","#e7acd0","#dd90c3","#d6409f","#cf3897","#c2298a","#3b0a2a","#000000"],"plum":["#ffffff","#fdf7fd","#fbebfb","#f7def8","#f2d1f3","#e9c2ec","#deade3","#cf91d8","#ab4aba","#a144af","#953ea3","#3d0f3f","#000000"],"purple":["#ffffff","#fbf7fe","#f7edfe","#f2e2fc","#ead5f9","#e0c4f4","#d1afec","#be93e4","#8e4ec6","#8445bc","#793aaf","#2b0e44","#000000"],"violet":["#ffffff","#faf8ff","#f4f0fe","#ebe4ff","#e1d9ff","#d4cafe","#c2b5f5","#aa99ec","#6e56cf","#644fc1","#5746af","#20134b","#000000"],"iris":["#ffffff","#f8f8ff","#f0f1fe","#e6e7ff","#dadcff","#cbcdff","#b8baf8","#9b9ef0","#5b5bd6","#5151cd","#4646b7","#171764","#000000"],"indigo":["#ffffff","#f8faff","#f0f4ff","#e6edfe","#d9e2fc","#c6d4f9","#aec0f5","#8da4ef","#3e63dd","#3358d4","#2a4cb2","#1f2d5c","#000000"]}},{"name":"Salesforce Lightning 2","colors":{"neutral":["#000000","#181818","#242424","#2E2E2E","#444444","#5C5C5C","#747474","#939393","#A0A0A0","#AEAEAE","#C9C9C9","#E5E5E5","#F3F3F3","#ffffff"],"blue":["#000000","#001639","#03234D","#032D60","#014486","#0B5CAB","#0176D3","#1B96FF","#57A3FD","#78B0FD","#AACBFF","#D8E6FE","#EEF4FF","#ffffff"],"cloud-blue":["#000000","#001A28","#0A2636","#023248","#084968","#05628A","#107CAD","#0D9DDA","#08ABED","#1AB9FF","#90D0FE","#CFE9FE","#EAF5FE","#ffffff"],"electric-blue":["#000000","#001642","#001E5B","#002775","#022AC0","#0250D9","#066AFE","#4992FE","#5F9FFE","#7CB1FE","#A8CBFF","#D6E6FF","#EDF4FF","#ffffff"],"indigo":["#000000","#200647","#1F0974","#321D71","#2F2CB7","#3A49DA","#5867E8","#7F8CED","#8E9BEF","#9EA9F1","#BEC7F6","#E0E5F8","#F1F3FB","#ffffff"],"purple":["#000000","#240643","#300B60","#401075","#5A1BA9","#7526E3","#9050E9","#AD7BEE","#B78DEF","#C29EF1","#D7BFF2","#ECE1F9","#F6F2FB","#ffffff"],"red":["#000000","#300C01","#4A0C04","#640103","#8E030F","#BA0517","#EA001E","#FE5C4C","#FE7765","#FE8F7D","#FEB8AB","#FEDED8","#FEF1EE","#ffffff"],"pink":["#000000","#370114","#4B0620","#61022A","#8A033E","#B60554","#E3066A","#FF538A","#FE7298","#FE8AA7","#FDB6C5","#FDDDE3","#FEF0F3","#ffffff"],"hot-orange":["#000000","#281202","#421604","#4A2413","#7E2600","#AA3001","#D83A00","#FF5D2D","#FF784F","#FF906E","#FEB9A5","#FFDED5","#FEF1ED","#ffffff"],"orange":["#000000","#201600","#371E03","#3E2B02","#5F3E02","#825101","#A96404","#DD7A01","#F38303","#FE9339","#FFBA90","#FEDFD0","#FFF1EA","#ffffff"],"yellow":["#000000","#281202","#2E2204","#4F2100","#6F3400","#8C4B02","#A86403","#CA8501","#D79304","#E4A201","#FCC003","#F9E3B6","#FBF3E0","#ffffff"],"teal":["#000000","#071B12","#072825","#023434","#024D4C","#056764","#0B827C","#06A59A","#03B4A7","#01C3B3","#04E1CB","#ACF3E4","#DEF9F3","#ffffff"],"green":["#000000","#071B12","#0C2912","#1C3326","#194E31","#396547","#2E844A","#3BA755","#41B658","#45C65A","#91DB8B","#CDEFC4","#EBF7E6","#ffffff"]}},{"name":"Shopify Polaris","colors":{"azure":["#ffffff","#f9fcff","#f6faff","#f1f8ff","#ecf6ff","#e6f4ff","#e1f1ff","#d4edff","#c7e9ff","#99e1ff","#00c8ec","#00b9db","#00aacd","#009ab9","#0083a0","#00657c","#000000"],"blue":["#ffffff","#fbfcff","#f8f9ff","#f6f7ff","#f2f4ff","#eef1ff","#ecefff","#e4e9ff","#dee5ff","#cad7ff","#8ac1ff","#00b2f5","#00a1eb","#008bcb","#0076ad","#00537c","#000000"],"gray":["#ffffff","#fefefe","#fdfdfd","#fbfbfb","#fafafa","#f9f9f9","#f6f6f6","#f2f2f2","#ebebeb","#e7e7e7","#dbdbdb","#c2c2c2","#a6a6a6","#939393","#787878","#5a5a5a","#000000"],"green":["#ffffff","#f4fff6","#e8ffeb","#d8ffe0","#c7fed6","#affbcb","#9afac6","#73f7be","#49f0b9","#56e0b7","#40cdad","#22b9a3","#1ca394","#0d9489","#2e7f78","#166c66","#000000"],"lime":["#ffffff","#f3fff3","#e9ffea","#deffe0","#ceffd0","#b6ffb8","#81ff87","#6ef977","#6af572","#63e96d","#56d45f","#49c051","#3db245","#3b9c40","#1c8626","#1c6522","#000000"],"magenta":["#ffffff","#fffbff","#fef8fe","#fff4ff","#fef0fe","#fdedfd","#fde9fd","#fce0fc","#fcd9fc","#fbc4fb","#f19df1","#e478e4","#cf6ccf","#b75ab7","#9d479d","#7d2a7d","#000000"],"orange":["#ffffff","#fffbf7","#fff9f2","#fff6ec","#fff3e4","#ffefdc","#ffecd2","#ffe5b7","#ffdd00","#f3d200","#dabe00","#c9b000","#b99f00","#a38b00","#8a7500","#6a5a00","#000000"],"purple":["#ffffff","#fcfbff","#faf9ff","#f8f6ff","#f5f3ff","#f3f0ff","#f0eeff","#ebe7ff","#e5dfff","#d5c9ff","#c8b4ff","#bc99ff","#b26cff","#9e00ea","#8400c8","#5d0097","#000000"],"red":["#ffffff","#fffbfc","#fff6f8","#fff5f6","#fff1f4","#ffeef0","#ffeaed","#ffe2e5","#fed6d9","#fbbcc0","#f27381","#e53869","#d13869","#c53b65","#a42e53","#77223b","#000000"],"rose":["#ffffff","#fffbfc","#fff8fa","#fff5f7","#fff1f5","#ffeef2","#ffeaef","#ffe2ea","#ffdbe6","#ffc5d9","#fe94c7","#f23db5","#dd2ea4","#c42291","#a81679","#870d5d","#000000"],"teal":["#ffffff","#f5fefd","#edfdfb","#e3fbf9","#d5fbf8","#c2fbf6","#b1f8f3","#a0f4ee","#73f1eb","#60e5df","#00d0cb","#4bbeb9","#3dada8","#3d9b97","#1c8582","#2a7370","#000000"],"yellow":["#ffffff","#fffcee","#fffae0","#fff8ce","#fff6b6","#fff400","#fbf000","#f6eb00","#f1e700","#e4da00","#cbc200","#bdb400","#aca400","#979000","#7c7600","#625d00","#000000"]}},{"name":"Tailwind CSS","colors":{"neutral":["#ffffff","#fafafa","#f5f5f5","#e5e5e5","#d4d4d4","#a3a3a3","#737373","#525252","#404040","#262626","#171717","#0a0a0a","#000000"],"red":["#ffffff","#fef2f2","#fee2e2","#fecaca","#fca5a5","#f87171","#ef4444","#dc2626","#b91c1c","#991b1b","#7f1d1d","#450a0a","#000000"],"orange":["#ffffff","#fff7ed","#ffedd5","#fed7aa","#fdba74","#fb923c","#f97316","#ea580c","#c2410c","#9a3412","#7c2d12","#431407","#000000"],"amber":["#ffffff","#fffbeb","#fef3c7","#fde68a","#fcd34d","#fbbf24","#f59e0b","#d97706","#b45309","#92400e","#78350f","#451a03","#000000"],"yellow":["#ffffff","#fefce8","#fef9c3","#fef08a","#fde047","#facc15","#eab308","#ca8a04","#a16207","#854d0e","#713f12","#422006","#000000"],"lime":["#ffffff","#f7fee7","#ecfccb","#d9f99d","#bef264","#a3e635","#84cc16","#65a30d","#4d7c0f","#3f6212","#365314","#1a2e05","#000000"],"green":["#ffffff","#f0fdf4","#dcfce7","#bbf7d0","#86efac","#4ade80","#22c55e","#16a34a","#15803d","#166534","#14532d","#052e16","#000000"],"emerald":["#ffffff","#ecfdf5","#d1fae5","#a7f3d0","#6ee7b7","#34d399","#10b981","#059669","#047857","#065f46","#064e3b","#022c22","#000000"],"teal":["#ffffff","#f0fdfa","#ccfbf1","#99f6e4","#5eead4","#2dd4bf","#14b8a6","#0d9488","#0f766e","#115e59","#134e4a","#042f2e","#000000"],"cyan":["#ffffff","#ecfeff","#cffafe","#a5f3fc","#67e8f9","#22d3ee","#06b6d4","#0891b2","#0e7490","#155e75","#164e63","#083344","#000000"],"sky":["#ffffff","#f0f9ff","#e0f2fe","#bae6fd","#7dd3fc","#38bdf8","#0ea5e9","#0284c7","#0369a1","#075985","#0c4a6e","#082f49","#000000"],"blue":["#ffffff","#eff6ff","#dbeafe","#bfdbfe","#93c5fd","#60a5fa","#3b82f6","#2563eb","#1d4ed8","#1e40af","#1e3a8a","#172554","#000000"],"indigo":["#ffffff","#eef2ff","#e0e7ff","#c7d2fe","#a5b4fc","#818cf8","#6366f1","#4f46e5","#4338ca","#3730a3","#312e81","#1e1b4b","#000000"],"violet":["#ffffff","#f5f3ff","#ede9fe","#ddd6fe","#c4b5fd","#a78bfa","#8b5cf6","#7c3aed","#6d28d9","#5b21b6","#4c1d95","#2e1065","#000000"],"purple":["#ffffff","#faf5ff","#f3e8ff","#e9d5ff","#d8b4fe","#c084fc","#a855f7","#9333ea","#7e22ce","#6b21a8","#581c87","#3b0764","#000000"],"fuchsia":["#ffffff","#fdf4ff","#fae8ff","#f5d0fe","#f0abfc","#e879f9","#d946ef","#c026d3","#a21caf","#86198f","#701a75","#4a044e","#000000"],"pink":["#ffffff","#fdf2f8","#fce7f3","#fbcfe8","#f9a8d4","#f472b6","#ec4899","#db2777","#be185d","#9d174d","#831843","#500724","#000000"],"rose":["#ffffff","#fff1f2","#ffe4e6","#fecdd3","#fda4af","#fb7185","#f43f5e","#e11d48","#be123c","#9f1239","#881337","#4c0519","#000000"]}},{"name":"U.S. Web Design System","colors":{"red-cool":["#ffffff","#f8eff1","#f3e1e4","#ecbec6","#e09aa6","#e16b80","#cd425b","#9e394b","#68363f","#40282c","#1e1517","#000000"],"red":["#ffffff","#f9eeee","#f8e1de","#f7bbb1","#f2938c","#e9695f","#d83933","#a23737","#6f3331","#3e2927","#1b1616","#000000"],"red-warm":["#ffffff","#f6efea","#f4e3db","#ecc0a7","#dca081","#d27a56","#c3512c","#805039","#524236","#332d29","#1f1c18","#000000"],"orange":["#ffffff","#f6efe9","#f2e4d4","#f3bf90","#f09860","#dd7533","#a86437","#775540","#524236","#332d27","#1b1614","#000000"],"orange-warm":["#ffffff","#faeee5","#fbe0d0","#f7bca2","#f3966d","#e17141","#bd5727","#914734","#633a32","#3d2925","#1c1615","#000000"],"gold":["#ffffff","#f5f0e6","#f1e5cd","#dec69a","#c7a97b","#ad8b65","#8e704f","#6b5947","#4d4438","#322d26","#191714","#000000"],"yellow":["#ffffff","#faf3d1","#f5e6af","#e6c74c","#c9ab48","#a88f48","#8a7237","#6b5a39","#504332","#332d27","#1a1614","#000000"],"green":["#ffffff","#eaf4dd","#dfeacd","#b8d293","#9bb672","#7d9b4e","#607f35","#4c6424","#3c4a29","#293021","#161814","#000000"],"green-warm":["#ffffff","#f1f4d7","#e7eab7","#cbd17a","#a6b557","#8a984b","#6f7a41","#5a5f38","#45472f","#2d2f21","#171712","#000000"],"green-cool":["#ffffff","#ecf3ec","#dbebde","#b4d0b9","#86b98e","#5e9f69","#4d8055","#446443","#37493b","#28312a","#1a1f1a","#000000"],"mint":["#ffffff","#dbf6ed","#c7efe2","#92d9bb","#5abf95","#34a37e","#2e8367","#286846","#204e34","#193324","#0d1a12","#000000"],"mint-cool":["#ffffff","#e0f7f6","#c4eeeb","#9bd4cf","#6fbab3","#4f9e99","#40807e","#376462","#2a4b45","#203131","#111818","#000000"],"cyan":["#ffffff","#e7f6f8","#ccecf2","#99deea","#5dc0d1","#449dac","#168092","#2a646d","#2c4a4e","#203133","#111819","#000000"],"blue":["#ffffff","#eff6fb","#d9e8f6","#aacdec","#73b3e7","#4f97d1","#2378c3","#2c608a","#274863","#1f303e","#11181d","#000000"],"blue-cool":["#ffffff","#e7f2f5","#dae9ee","#adcfdc","#82b4c9","#6499af","#3a7d95","#2e6276","#224a58","#14333d","#0f191c","#000000"],"blue-warm":["#ffffff","#ecf1f7","#e1e7f1","#bbcae4","#98afd2","#7292c7","#4a77b4","#345d96","#2f4668","#252f3e","#13171f","#000000"],"indigo":["#ffffff","#efeff8","#e5e4fa","#c5c5f3","#a5a8eb","#8889db","#676cc8","#4d52af","#3d4076","#2b2c40","#16171f","#000000"],"indigo-cool":["#ffffff","#eef0f9","#e1e6f9","#bbc8f5","#96abee","#6b8ee8","#496fd8","#3f57a6","#374274","#292d42","#151622","#000000"],"indigo-warm":["#ffffff","#f1eff7","#e7e3fa","#cbc4f2","#afa5e8","#9287d8","#7665d1","#5e519e","#453c7b","#2e2c40","#18161d","#000000"],"violet":["#ffffff","#f4f1f9","#ebe3f9","#d0c3e9","#b8a2e3","#9d84d2","#8168b3","#665190","#4c3d69","#312b3f","#18161d","#000000"],"violet-warm":["#ffffff","#f8f0f9","#f6dff8","#e2bee4","#d29ad8","#bf77c8","#b04abd","#864381","#5c395a","#382936","#1b151b","#000000"],"magenta":["#ffffff","#f9f0f2","#f6e1e8","#f0bbcc","#e895b3","#e0699f","#c84281","#8b4566","#66364b","#402731","#1b1617","#000000"],"gray":["#ffffff","#f0f0f0","#e6e6e6","#c9c9c9","#adadad","#919191","#757575","#5c5c5c","#454545","#2e2e2e","#1b1b1b","#000000"],"gray-cool":["#ffffff","#edeff0","#dfe1e2","#c6cace","#a9aeb1","#8d9297","#71767a","#565c65","#3d4551","#2d2e2f","#1c1d1f","#000000"],"gray-warm":["#ffffff","#f0f0ec","#e6e6e2","#cac9c0","#afaea2","#929285","#76766a","#5d5d52","#454540","#2e2e2a","#171716","#000000"]}}];
|
package/package.json
CHANGED
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chromametry",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Web-accessible Color Palette Metrics",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
8
|
"type": "module",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
},
|
|
15
|
+
"./palettes": "./dist/palettes.js"
|
|
16
|
+
},
|
|
9
17
|
"scripts": {
|
|
10
18
|
"test": "vitest",
|
|
11
19
|
"generate": "tsx scripts/generate.ts",
|
|
12
20
|
"build": "tsup",
|
|
13
|
-
"prepublishOnly": "npm run build"
|
|
21
|
+
"prepublishOnly": "npm run build && npm run generate"
|
|
14
22
|
},
|
|
15
23
|
"keywords": [
|
|
16
24
|
"color",
|