@asteby/metacore-theme 2.26.0 → 2.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/dist/contrast.d.ts +65 -0
- package/dist/contrast.d.ts.map +1 -0
- package/dist/contrast.js +196 -0
- package/dist/contrast.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/preset.d.ts +90 -54
- package/dist/preset.d.ts.map +1 -1
- package/dist/preset.js +45 -27
- package/dist/preset.js.map +1 -1
- package/package.json +5 -1
- package/styles/glass.css +27 -13
- package/styles/tokens.css +69 -23
package/README.md
CHANGED
|
@@ -94,6 +94,24 @@ behaves exactly as before.
|
|
|
94
94
|
}
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
+
### Brand backdrop
|
|
98
|
+
|
|
99
|
+
The backdrop is three radial blobs over a base color. A brand changes the hues
|
|
100
|
+
by overriding the variables only — never `background-image` — so pack updates
|
|
101
|
+
keep applying (import after `glass.css`):
|
|
102
|
+
|
|
103
|
+
```css
|
|
104
|
+
[data-ui-theme='glass'] {
|
|
105
|
+
--glass-gradient-1: radial-gradient(48rem 34rem at 10% -8%, oklch(0.42 0.1 255 / 0.55), transparent 70%);
|
|
106
|
+
--glass-gradient-2: radial-gradient(40rem 30rem at 105% 20%, oklch(0.5 0.09 250 / 0.4), transparent 68%);
|
|
107
|
+
--glass-gradient-3: radial-gradient(38rem 28rem at 60% 115%, oklch(0.6 0.07 235 / 0.35), transparent 70%);
|
|
108
|
+
}
|
|
109
|
+
.dark[data-ui-theme='glass'] { /* same three variables for dark */ }
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`--glass-backdrop` sets the base color under the blobs. Set a gradient to
|
|
113
|
+
`none` to drop it.
|
|
114
|
+
|
|
97
115
|
An inset with no sidebar sibling (chat-like screens) floats on desktop with
|
|
98
116
|
`<SidebarInset data-glass-float>`.
|
|
99
117
|
|
|
@@ -124,6 +142,29 @@ The bundled `<ThemeProvider>` (light/dark/system, cookie-persisted) is the
|
|
|
124
142
|
recommended entry; consumer apps can drop their local copies and use
|
|
125
143
|
`useTheme()` for the toggle UI.
|
|
126
144
|
|
|
145
|
+
## Contrast contract
|
|
146
|
+
|
|
147
|
+
Every semantic pair the UI paints is held to WCAG 2.x AA, in light, dark and
|
|
148
|
+
the glass pack (measured on the composited surface, over the brightest and
|
|
149
|
+
darkest point of the backdrop):
|
|
150
|
+
|
|
151
|
+
| Pair | Minimum |
|
|
152
|
+
| --- | --- |
|
|
153
|
+
| `*-foreground` on its surface, `--muted-foreground` on `--card`/`--muted` | 4.5:1 |
|
|
154
|
+
| `--primary`, `--destructive`, `--success`/`--warning`/`--info` as text on `--card` and on their own badge tint | 4.5:1 |
|
|
155
|
+
| `--input` (control boundary), `--ring` at 50% (focus halo), `--chart-1..8`, `--color-widget-*` on `--card` | 3:1 |
|
|
156
|
+
|
|
157
|
+
`src/tokens-contrast.test.ts` measures them and fails CI below the minimum,
|
|
158
|
+
so a token edit (or a brand pack in a fork) cannot silently regress. The same
|
|
159
|
+
math is exported for runtime-derived colors:
|
|
160
|
+
|
|
161
|
+
```ts
|
|
162
|
+
import { contrastRatio, ensureContrast, composite } from '@asteby/metacore-theme/contrast'
|
|
163
|
+
|
|
164
|
+
contrastRatio('oklch(0.8 0.07 255)', '#14202d') // ≈ 8.6
|
|
165
|
+
ensureContrast('#102E6B', '#14202d', 4.5) // same hue, lifted until it reads
|
|
166
|
+
```
|
|
167
|
+
|
|
127
168
|
## No flash on reload
|
|
128
169
|
|
|
129
170
|
`<ThemeProvider>` stores what `<html>` ends up painting — light/dark, the
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WCAG 2.x contrast helpers for theme tokens.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions, no DOM: they parse the color syntaxes the token files use
|
|
5
|
+
* (`oklch()`, `#hex`, `rgb()`, `white`/`black`/`transparent`), composite
|
|
6
|
+
* translucent colors over their backdrop (the glass pack paints text on
|
|
7
|
+
* `oklch(... / 0.45)` surfaces, so the contrast that matters is against the
|
|
8
|
+
* composited result, not the token) and compute the WCAG contrast ratio.
|
|
9
|
+
*
|
|
10
|
+
* Used by the token contrast test (fails CI below AA) and available to apps
|
|
11
|
+
* that derive colors at runtime (brand accents, chart series):
|
|
12
|
+
*
|
|
13
|
+
* import { contrastRatio, ensureContrast } from '@asteby/metacore-theme/contrast'
|
|
14
|
+
* contrastRatio('oklch(0.8 0.08 255)', 'oklch(0.2 0.03 255)') // ≈ 9.7
|
|
15
|
+
*/
|
|
16
|
+
/** sRGB color, channels 0..1 (gamma-encoded), alpha 0..1. */
|
|
17
|
+
export interface Rgba {
|
|
18
|
+
r: number;
|
|
19
|
+
g: number;
|
|
20
|
+
b: number;
|
|
21
|
+
a: number;
|
|
22
|
+
}
|
|
23
|
+
/** WCAG 2.x minimums. */
|
|
24
|
+
export declare const WCAG: {
|
|
25
|
+
/** 1.4.3 AA, normal text (< 18.66px bold / < 24px regular). */
|
|
26
|
+
readonly text: 4.5;
|
|
27
|
+
/** 1.4.3 AA, large text. */
|
|
28
|
+
readonly largeText: 3;
|
|
29
|
+
/** 1.4.11 non-text: control boundaries, focus indicators, chart marks. */
|
|
30
|
+
readonly nonText: 3;
|
|
31
|
+
/** 1.4.6 AAA, normal text. */
|
|
32
|
+
readonly textAAA: 7;
|
|
33
|
+
};
|
|
34
|
+
/** OKLCH → gamma-encoded sRGB, out-of-gamut channels clipped (as browsers paint). */
|
|
35
|
+
export declare function oklchToRgb(l: number, c: number, hDeg: number): [number, number, number];
|
|
36
|
+
/** Gamma-encoded sRGB → OKLCH (`[l, c, h]`). */
|
|
37
|
+
export declare function rgbToOklch(r: number, g: number, b: number): [number, number, number];
|
|
38
|
+
/**
|
|
39
|
+
* Parses a CSS color as used in token files. Returns null for anything it
|
|
40
|
+
* does not understand (`var()`, `color-mix()`, gradients).
|
|
41
|
+
*/
|
|
42
|
+
export declare function parseColor(input: string): Rgba | null;
|
|
43
|
+
/** Paints `top` over `bottom` (source-over, in gamma sRGB like browsers). */
|
|
44
|
+
export declare function composite(top: string | Rgba, bottom: string | Rgba): Rgba;
|
|
45
|
+
/** Composites a stack of layers, first = bottom-most (must end opaque). */
|
|
46
|
+
export declare function flatten(...layers: (string | Rgba)[]): Rgba;
|
|
47
|
+
/** WCAG relative luminance of an opaque color. */
|
|
48
|
+
export declare function relativeLuminance(color: string | Rgba): number;
|
|
49
|
+
/**
|
|
50
|
+
* WCAG contrast ratio (1..21). A translucent foreground is composited over
|
|
51
|
+
* the background first; the background must be opaque (flatten it first).
|
|
52
|
+
*/
|
|
53
|
+
export declare function contrastRatio(foreground: string | Rgba, background: string | Rgba): number;
|
|
54
|
+
/** `#rrggbb` of an opaque color, for reports. */
|
|
55
|
+
export declare function toHex(color: string | Rgba): string;
|
|
56
|
+
/**
|
|
57
|
+
* Moves the OKLCH lightness of `color` (keeping hue and chroma) away from the
|
|
58
|
+
* background until it reaches `min` contrast against it. Returns the color as
|
|
59
|
+
* an `oklch()` string; when the target is unreachable it returns the closest
|
|
60
|
+
* extreme (L 0 or 1). Use it to derive readable brand accents / chart series.
|
|
61
|
+
*/
|
|
62
|
+
export declare function ensureContrast(color: string, background: string, min?: number): string;
|
|
63
|
+
/** Picks whichever of `candidates` contrasts most with `background`. */
|
|
64
|
+
export declare function mostReadable(background: string | Rgba, candidates: string[]): string;
|
|
65
|
+
//# sourceMappingURL=contrast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contrast.d.ts","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,6DAA6D;AAC7D,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,yBAAyB;AACzB,eAAO,MAAM,IAAI;IACf,+DAA+D;;IAE/D,4BAA4B;;IAE5B,0EAA0E;;IAE1E,8BAA8B;;CAEtB,CAAA;AAUV,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAmBvF;AAED,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAepF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CA0BrD;AASD,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAOzE;AAED,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAE1D;AAED,kDAAkD;AAClD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAI9D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAS1F;AAED,iDAAiD;AACjD,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAIlD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAkB,GAAG,MAAM,CAYjG;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAWpF"}
|
package/dist/contrast.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WCAG 2.x contrast helpers for theme tokens.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions, no DOM: they parse the color syntaxes the token files use
|
|
5
|
+
* (`oklch()`, `#hex`, `rgb()`, `white`/`black`/`transparent`), composite
|
|
6
|
+
* translucent colors over their backdrop (the glass pack paints text on
|
|
7
|
+
* `oklch(... / 0.45)` surfaces, so the contrast that matters is against the
|
|
8
|
+
* composited result, not the token) and compute the WCAG contrast ratio.
|
|
9
|
+
*
|
|
10
|
+
* Used by the token contrast test (fails CI below AA) and available to apps
|
|
11
|
+
* that derive colors at runtime (brand accents, chart series):
|
|
12
|
+
*
|
|
13
|
+
* import { contrastRatio, ensureContrast } from '@asteby/metacore-theme/contrast'
|
|
14
|
+
* contrastRatio('oklch(0.8 0.08 255)', 'oklch(0.2 0.03 255)') // ≈ 9.7
|
|
15
|
+
*/
|
|
16
|
+
/** WCAG 2.x minimums. */
|
|
17
|
+
export const WCAG = {
|
|
18
|
+
/** 1.4.3 AA, normal text (< 18.66px bold / < 24px regular). */
|
|
19
|
+
text: 4.5,
|
|
20
|
+
/** 1.4.3 AA, large text. */
|
|
21
|
+
largeText: 3,
|
|
22
|
+
/** 1.4.11 non-text: control boundaries, focus indicators, chart marks. */
|
|
23
|
+
nonText: 3,
|
|
24
|
+
/** 1.4.6 AAA, normal text. */
|
|
25
|
+
textAAA: 7,
|
|
26
|
+
};
|
|
27
|
+
const clamp01 = (n) => Math.min(1, Math.max(0, n));
|
|
28
|
+
function parseNumber(token, percentScale = 1) {
|
|
29
|
+
const t = token.trim();
|
|
30
|
+
if (t.endsWith('%'))
|
|
31
|
+
return (parseFloat(t) / 100) * percentScale;
|
|
32
|
+
return parseFloat(t);
|
|
33
|
+
}
|
|
34
|
+
/** OKLCH → gamma-encoded sRGB, out-of-gamut channels clipped (as browsers paint). */
|
|
35
|
+
export function oklchToRgb(l, c, hDeg) {
|
|
36
|
+
const h = (hDeg * Math.PI) / 180;
|
|
37
|
+
const a = c * Math.cos(h);
|
|
38
|
+
const b = c * Math.sin(h);
|
|
39
|
+
const l_ = l + 0.3963377774 * a + 0.2158037573 * b;
|
|
40
|
+
const m_ = l - 0.1055613458 * a - 0.0638541728 * b;
|
|
41
|
+
const s_ = l - 0.0894841775 * a - 1.291485548 * b;
|
|
42
|
+
const L = l_ ** 3;
|
|
43
|
+
const M = m_ ** 3;
|
|
44
|
+
const S = s_ ** 3;
|
|
45
|
+
const lin = [
|
|
46
|
+
4.0767416621 * L - 3.3077115913 * M + 0.2309699292 * S,
|
|
47
|
+
-1.2684380046 * L + 2.6097574011 * M - 0.3413193965 * S,
|
|
48
|
+
-0.0041960863 * L - 0.7034186147 * M + 1.707614701 * S,
|
|
49
|
+
];
|
|
50
|
+
return lin.map((v) => {
|
|
51
|
+
const x = clamp01(v);
|
|
52
|
+
return x <= 0.0031308 ? 12.92 * x : 1.055 * x ** (1 / 2.4) - 0.055;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/** Gamma-encoded sRGB → OKLCH (`[l, c, h]`). */
|
|
56
|
+
export function rgbToOklch(r, g, b) {
|
|
57
|
+
const lin = (v) => (v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4);
|
|
58
|
+
const lr = lin(r);
|
|
59
|
+
const lg = lin(g);
|
|
60
|
+
const lb = lin(b);
|
|
61
|
+
const l = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);
|
|
62
|
+
const m = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);
|
|
63
|
+
const s = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);
|
|
64
|
+
const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s;
|
|
65
|
+
const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s;
|
|
66
|
+
const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s;
|
|
67
|
+
const C = Math.sqrt(A * A + B * B);
|
|
68
|
+
let H = (Math.atan2(B, A) * 180) / Math.PI;
|
|
69
|
+
if (H < 0)
|
|
70
|
+
H += 360;
|
|
71
|
+
return [L, C, H];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Parses a CSS color as used in token files. Returns null for anything it
|
|
75
|
+
* does not understand (`var()`, `color-mix()`, gradients).
|
|
76
|
+
*/
|
|
77
|
+
export function parseColor(input) {
|
|
78
|
+
const s = input.trim().toLowerCase();
|
|
79
|
+
if (s === 'transparent')
|
|
80
|
+
return { r: 0, g: 0, b: 0, a: 0 };
|
|
81
|
+
if (s === 'white')
|
|
82
|
+
return { r: 1, g: 1, b: 1, a: 1 };
|
|
83
|
+
if (s === 'black')
|
|
84
|
+
return { r: 0, g: 0, b: 0, a: 1 };
|
|
85
|
+
if (s.startsWith('#')) {
|
|
86
|
+
let hex = s.slice(1);
|
|
87
|
+
if (hex.length === 3 || hex.length === 4)
|
|
88
|
+
hex = [...hex].map((ch) => ch + ch).join('');
|
|
89
|
+
if (!/^[0-9a-f]{6}([0-9a-f]{2})?$/.test(hex))
|
|
90
|
+
return null;
|
|
91
|
+
const n = (i) => parseInt(hex.slice(i, i + 2), 16) / 255;
|
|
92
|
+
return { r: n(0), g: n(2), b: n(4), a: hex.length === 8 ? n(6) : 1 };
|
|
93
|
+
}
|
|
94
|
+
const fn = /^(oklch|rgba?)\((.*)\)$/.exec(s);
|
|
95
|
+
if (!fn)
|
|
96
|
+
return null;
|
|
97
|
+
const [body, alphaPart] = fn[2].split('/');
|
|
98
|
+
const parts = body.replace(/,/g, ' ').trim().split(/\s+/);
|
|
99
|
+
if (parts.length < 3)
|
|
100
|
+
return null;
|
|
101
|
+
let alpha = 1;
|
|
102
|
+
if (alphaPart !== undefined)
|
|
103
|
+
alpha = parseNumber(alphaPart);
|
|
104
|
+
else if (fn[1] !== 'oklch' && parts.length === 4)
|
|
105
|
+
alpha = parseNumber(parts[3]);
|
|
106
|
+
if (fn[1] === 'oklch') {
|
|
107
|
+
const [r, g, b] = oklchToRgb(parseNumber(parts[0]), parseNumber(parts[1], 0.4), parseFloat(parts[2]));
|
|
108
|
+
return { r, g, b, a: clamp01(alpha) };
|
|
109
|
+
}
|
|
110
|
+
const ch = (t) => clamp01(t.endsWith('%') ? parseFloat(t) / 100 : parseFloat(t) / 255);
|
|
111
|
+
return { r: ch(parts[0]), g: ch(parts[1]), b: ch(parts[2]), a: clamp01(alpha) };
|
|
112
|
+
}
|
|
113
|
+
function toRgba(c) {
|
|
114
|
+
if (typeof c !== 'string')
|
|
115
|
+
return c;
|
|
116
|
+
const parsed = parseColor(c);
|
|
117
|
+
if (!parsed)
|
|
118
|
+
throw new Error(`Unsupported color: ${c}`);
|
|
119
|
+
return parsed;
|
|
120
|
+
}
|
|
121
|
+
/** Paints `top` over `bottom` (source-over, in gamma sRGB like browsers). */
|
|
122
|
+
export function composite(top, bottom) {
|
|
123
|
+
const t = toRgba(top);
|
|
124
|
+
const b = toRgba(bottom);
|
|
125
|
+
const a = t.a + b.a * (1 - t.a);
|
|
126
|
+
if (a === 0)
|
|
127
|
+
return { r: 0, g: 0, b: 0, a: 0 };
|
|
128
|
+
const mix = (x, y) => (x * t.a + y * b.a * (1 - t.a)) / a;
|
|
129
|
+
return { r: mix(t.r, b.r), g: mix(t.g, b.g), b: mix(t.b, b.b), a };
|
|
130
|
+
}
|
|
131
|
+
/** Composites a stack of layers, first = bottom-most (must end opaque). */
|
|
132
|
+
export function flatten(...layers) {
|
|
133
|
+
return layers.reduce((acc, layer) => composite(layer, acc), { r: 0, g: 0, b: 0, a: 0 });
|
|
134
|
+
}
|
|
135
|
+
/** WCAG relative luminance of an opaque color. */
|
|
136
|
+
export function relativeLuminance(color) {
|
|
137
|
+
const c = toRgba(color);
|
|
138
|
+
const lin = (v) => (v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4);
|
|
139
|
+
return 0.2126 * lin(c.r) + 0.7152 * lin(c.g) + 0.0722 * lin(c.b);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* WCAG contrast ratio (1..21). A translucent foreground is composited over
|
|
143
|
+
* the background first; the background must be opaque (flatten it first).
|
|
144
|
+
*/
|
|
145
|
+
export function contrastRatio(foreground, background) {
|
|
146
|
+
const bg = toRgba(background);
|
|
147
|
+
if (bg.a < 1)
|
|
148
|
+
throw new Error('contrastRatio: background must be opaque; flatten() it over its backdrop first');
|
|
149
|
+
const fg = composite(foreground, bg);
|
|
150
|
+
const l1 = relativeLuminance(fg);
|
|
151
|
+
const l2 = relativeLuminance(bg);
|
|
152
|
+
const hi = Math.max(l1, l2);
|
|
153
|
+
const lo = Math.min(l1, l2);
|
|
154
|
+
return (hi + 0.05) / (lo + 0.05);
|
|
155
|
+
}
|
|
156
|
+
/** `#rrggbb` of an opaque color, for reports. */
|
|
157
|
+
export function toHex(color) {
|
|
158
|
+
const c = toRgba(color);
|
|
159
|
+
const h = (v) => Math.round(clamp01(v) * 255).toString(16).padStart(2, '0');
|
|
160
|
+
return `#${h(c.r)}${h(c.g)}${h(c.b)}`;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Moves the OKLCH lightness of `color` (keeping hue and chroma) away from the
|
|
164
|
+
* background until it reaches `min` contrast against it. Returns the color as
|
|
165
|
+
* an `oklch()` string; when the target is unreachable it returns the closest
|
|
166
|
+
* extreme (L 0 or 1). Use it to derive readable brand accents / chart series.
|
|
167
|
+
*/
|
|
168
|
+
export function ensureContrast(color, background, min = WCAG.text) {
|
|
169
|
+
const c = toRgba(color);
|
|
170
|
+
const bg = toRgba(background);
|
|
171
|
+
const [l0, ch, hue] = rgbToOklch(c.r, c.g, c.b);
|
|
172
|
+
const fmt = (l) => `oklch(${l.toFixed(4)} ${ch.toFixed(4)} ${hue.toFixed(2)})`;
|
|
173
|
+
if (contrastRatio(fmt(l0), bg) >= min)
|
|
174
|
+
return fmt(l0);
|
|
175
|
+
const lighten = relativeLuminance(bg) < 0.18;
|
|
176
|
+
for (let i = 1; i <= 100; i++) {
|
|
177
|
+
const l = lighten ? Math.min(1, l0 + i * 0.01) : Math.max(0, l0 - i * 0.01);
|
|
178
|
+
if (contrastRatio(fmt(l), bg) >= min || l === 0 || l === 1)
|
|
179
|
+
return fmt(l);
|
|
180
|
+
}
|
|
181
|
+
return fmt(lighten ? 1 : 0);
|
|
182
|
+
}
|
|
183
|
+
/** Picks whichever of `candidates` contrasts most with `background`. */
|
|
184
|
+
export function mostReadable(background, candidates) {
|
|
185
|
+
let best = candidates[0];
|
|
186
|
+
let bestRatio = -1;
|
|
187
|
+
for (const c of candidates) {
|
|
188
|
+
const r = contrastRatio(c, background);
|
|
189
|
+
if (r > bestRatio) {
|
|
190
|
+
best = c;
|
|
191
|
+
bestRatio = r;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return best;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=contrast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contrast.js","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,4 +6,6 @@ export { ThemeProvider, useTheme } from './provider.js';
|
|
|
6
6
|
export type { ThemeProviderProps, ThemeProviderState } from './provider.js';
|
|
7
7
|
export { themeBootScript, watchThemeBoot, persistThemeBoot, captureThemeBoot, releaseThemeBoot, THEME_BOOT_STORAGE_KEY, THEME_MODE_COOKIE, THEME_BOOTING_CLASS, THEME_BOOT_TRANSITION_ATTRIBUTE, BRANDING_STYLE_ID, } from './boot.js';
|
|
8
8
|
export type { ThemeMode, ThemeBootSnapshot, ThemeBootModeSnapshot, ThemeBootScriptOptions, ThemeBootWatchOptions, } from './boot.js';
|
|
9
|
+
export { WCAG, parseColor, oklchToRgb, rgbToOklch, composite, flatten, relativeLuminance, contrastRatio, ensureContrast, mostReadable, toHex, } from './contrast.js';
|
|
10
|
+
export type { Rgba } from './contrast.js';
|
|
9
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAChD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACvD,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE3E,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,+BAA+B,EAC/B,iBAAiB,GAClB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAChD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACvD,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE3E,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,+BAA+B,EAC/B,iBAAiB,GAClB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,WAAW,CAAA;AAElB,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,KAAK,GACN,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -2,4 +2,5 @@ export { fonts, fontFamilies } from './fonts.js';
|
|
|
2
2
|
export { colorTokens, chartTokens, radiusTokens, shadowTokens, fontTokens, trackingTokens, motionTokens, themeConfig, } from './preset.js';
|
|
3
3
|
export { ThemeProvider, useTheme } from './provider.js';
|
|
4
4
|
export { themeBootScript, watchThemeBoot, persistThemeBoot, captureThemeBoot, releaseThemeBoot, THEME_BOOT_STORAGE_KEY, THEME_MODE_COOKIE, THEME_BOOTING_CLASS, THEME_BOOT_TRANSITION_ATTRIBUTE, BRANDING_STYLE_ID, } from './boot.js';
|
|
5
|
+
export { WCAG, parseColor, oklchToRgb, rgbToOklch, composite, flatten, relativeLuminance, contrastRatio, ensureContrast, mostReadable, toHex, } from './contrast.js';
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGhD,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,+BAA+B,EAC/B,iBAAiB,GAClB,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGhD,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,GACZ,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,+BAA+B,EAC/B,iBAAiB,GAClB,MAAM,WAAW,CAAA;AASlB,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,KAAK,GACN,MAAM,eAAe,CAAA"}
|
package/dist/preset.d.ts
CHANGED
|
@@ -19,19 +19,25 @@ export declare const colorTokens: {
|
|
|
19
19
|
readonly cardForeground: "oklch(0 0 0)";
|
|
20
20
|
readonly popover: "oklch(0.9911 0 0)";
|
|
21
21
|
readonly popoverForeground: "oklch(0 0 0)";
|
|
22
|
-
readonly primary: "oklch(0.
|
|
22
|
+
readonly primary: "oklch(0.51 0.14 175)";
|
|
23
23
|
readonly primaryForeground: "oklch(1.0000 0 0)";
|
|
24
|
-
readonly secondary: "oklch(0.9540 0.0063
|
|
24
|
+
readonly secondary: "oklch(0.9540 0.0063 175)";
|
|
25
25
|
readonly secondaryForeground: "oklch(0.1344 0 0)";
|
|
26
26
|
readonly muted: "oklch(0.9702 0 0)";
|
|
27
27
|
readonly mutedForeground: "oklch(0.4386 0 0)";
|
|
28
|
-
readonly accent: "oklch(0.94 0.03
|
|
29
|
-
readonly accentForeground: "oklch(0.
|
|
30
|
-
readonly destructive: "oklch(0.
|
|
28
|
+
readonly accent: "oklch(0.94 0.03 175)";
|
|
29
|
+
readonly accentForeground: "oklch(0.49 0.11 175)";
|
|
30
|
+
readonly destructive: "oklch(0.52 0.19 23)";
|
|
31
31
|
readonly destructiveForeground: "oklch(1.0000 0 0)";
|
|
32
|
-
readonly border: "oklch(0.9300 0.0094
|
|
33
|
-
readonly input: "oklch(0.
|
|
32
|
+
readonly border: "oklch(0.9300 0.0094 175)";
|
|
33
|
+
readonly input: "oklch(0.64 0 0)";
|
|
34
34
|
readonly ring: "oklch(0 0 0)";
|
|
35
|
+
readonly success: "oklch(0.48 0.13 155)";
|
|
36
|
+
readonly successForeground: "oklch(1 0 0)";
|
|
37
|
+
readonly warning: "oklch(0.5 0.13 60)";
|
|
38
|
+
readonly warningForeground: "oklch(1 0 0)";
|
|
39
|
+
readonly info: "oklch(0.49 0.13 235)";
|
|
40
|
+
readonly infoForeground: "oklch(1 0 0)";
|
|
35
41
|
};
|
|
36
42
|
readonly dark: {
|
|
37
43
|
readonly background: "oklch(0.22 0.01 131)";
|
|
@@ -40,35 +46,47 @@ export declare const colorTokens: {
|
|
|
40
46
|
readonly cardForeground: "oklch(0.9551 0 0)";
|
|
41
47
|
readonly popover: "oklch(0.24 0.01 131)";
|
|
42
48
|
readonly popoverForeground: "oklch(0.9551 0 0)";
|
|
43
|
-
readonly primary: "oklch(0.65 0.
|
|
44
|
-
readonly primaryForeground: "oklch(
|
|
45
|
-
readonly secondary: "oklch(0.29 0.02
|
|
49
|
+
readonly primary: "oklch(0.65 0.14 175)";
|
|
50
|
+
readonly primaryForeground: "oklch(0.18 0 0)";
|
|
51
|
+
readonly secondary: "oklch(0.29 0.02 175)";
|
|
46
52
|
readonly secondaryForeground: "oklch(0.9551 0 0)";
|
|
47
|
-
readonly muted: "oklch(0.29 0.02
|
|
53
|
+
readonly muted: "oklch(0.29 0.02 175)";
|
|
48
54
|
readonly mutedForeground: "oklch(0.7058 0 0)";
|
|
49
|
-
readonly accent: "oklch(0.28 0.05
|
|
50
|
-
readonly accentForeground: "oklch(0.80 0.10
|
|
55
|
+
readonly accent: "oklch(0.28 0.05 175)";
|
|
56
|
+
readonly accentForeground: "oklch(0.80 0.10 175)";
|
|
51
57
|
readonly destructive: "oklch(0.7106 0.1661 22.2162)";
|
|
52
|
-
readonly destructiveForeground: "oklch(
|
|
53
|
-
readonly border: "oklch(0.33 0.02
|
|
54
|
-
readonly input: "oklch(0.
|
|
55
|
-
readonly ring: "oklch(0.
|
|
58
|
+
readonly destructiveForeground: "oklch(0.18 0 0)";
|
|
59
|
+
readonly border: "oklch(0.33 0.02 175)";
|
|
60
|
+
readonly input: "oklch(0.55 0.02 175)";
|
|
61
|
+
readonly ring: "oklch(0.8 0.12 175)";
|
|
62
|
+
readonly success: "oklch(0.78 0.14 155)";
|
|
63
|
+
readonly successForeground: "oklch(0.18 0 0)";
|
|
64
|
+
readonly warning: "oklch(0.82 0.14 80)";
|
|
65
|
+
readonly warningForeground: "oklch(0.18 0 0)";
|
|
66
|
+
readonly info: "oklch(0.78 0.11 235)";
|
|
67
|
+
readonly infoForeground: "oklch(0.18 0 0)";
|
|
56
68
|
};
|
|
57
69
|
};
|
|
58
70
|
export declare const chartTokens: {
|
|
59
71
|
readonly light: {
|
|
60
|
-
readonly chart1: "oklch(0.
|
|
61
|
-
readonly chart2: "oklch(0.
|
|
62
|
-
readonly chart3: "oklch(0.
|
|
63
|
-
readonly chart4: "oklch(0.
|
|
64
|
-
readonly chart5: "oklch(0.
|
|
72
|
+
readonly chart1: "oklch(0.62 0.14 156)";
|
|
73
|
+
readonly chart2: "oklch(0.51 0.14 175)";
|
|
74
|
+
readonly chart3: "oklch(0.64 0.16 50)";
|
|
75
|
+
readonly chart4: "oklch(0.55 0.12 250)";
|
|
76
|
+
readonly chart5: "oklch(0.56 0 0)";
|
|
77
|
+
readonly chart6: "oklch(0.58 0.17 25)";
|
|
78
|
+
readonly chart7: "oklch(0.6 0.12 85)";
|
|
79
|
+
readonly chart8: "oklch(0.55 0.1 210)";
|
|
65
80
|
};
|
|
66
81
|
readonly dark: {
|
|
67
|
-
readonly chart1: "oklch(0.
|
|
68
|
-
readonly chart2: "oklch(0.
|
|
69
|
-
readonly chart3: "oklch(0.
|
|
70
|
-
readonly chart4: "oklch(0.
|
|
71
|
-
readonly chart5: "oklch(0.
|
|
82
|
+
readonly chart1: "oklch(0.8 0.18 152)";
|
|
83
|
+
readonly chart2: "oklch(0.72 0.14 175)";
|
|
84
|
+
readonly chart3: "oklch(0.81 0.1 20)";
|
|
85
|
+
readonly chart4: "oklch(0.75 0.11 250)";
|
|
86
|
+
readonly chart5: "oklch(0.71 0 0)";
|
|
87
|
+
readonly chart6: "oklch(0.74 0.15 25)";
|
|
88
|
+
readonly chart7: "oklch(0.82 0.12 85)";
|
|
89
|
+
readonly chart8: "oklch(0.78 0.1 210)";
|
|
72
90
|
};
|
|
73
91
|
};
|
|
74
92
|
export declare const radiusTokens: {
|
|
@@ -125,19 +143,25 @@ export declare const themeConfig: {
|
|
|
125
143
|
readonly cardForeground: "oklch(0 0 0)";
|
|
126
144
|
readonly popover: "oklch(0.9911 0 0)";
|
|
127
145
|
readonly popoverForeground: "oklch(0 0 0)";
|
|
128
|
-
readonly primary: "oklch(0.
|
|
146
|
+
readonly primary: "oklch(0.51 0.14 175)";
|
|
129
147
|
readonly primaryForeground: "oklch(1.0000 0 0)";
|
|
130
|
-
readonly secondary: "oklch(0.9540 0.0063
|
|
148
|
+
readonly secondary: "oklch(0.9540 0.0063 175)";
|
|
131
149
|
readonly secondaryForeground: "oklch(0.1344 0 0)";
|
|
132
150
|
readonly muted: "oklch(0.9702 0 0)";
|
|
133
151
|
readonly mutedForeground: "oklch(0.4386 0 0)";
|
|
134
|
-
readonly accent: "oklch(0.94 0.03
|
|
135
|
-
readonly accentForeground: "oklch(0.
|
|
136
|
-
readonly destructive: "oklch(0.
|
|
152
|
+
readonly accent: "oklch(0.94 0.03 175)";
|
|
153
|
+
readonly accentForeground: "oklch(0.49 0.11 175)";
|
|
154
|
+
readonly destructive: "oklch(0.52 0.19 23)";
|
|
137
155
|
readonly destructiveForeground: "oklch(1.0000 0 0)";
|
|
138
|
-
readonly border: "oklch(0.9300 0.0094
|
|
139
|
-
readonly input: "oklch(0.
|
|
156
|
+
readonly border: "oklch(0.9300 0.0094 175)";
|
|
157
|
+
readonly input: "oklch(0.64 0 0)";
|
|
140
158
|
readonly ring: "oklch(0 0 0)";
|
|
159
|
+
readonly success: "oklch(0.48 0.13 155)";
|
|
160
|
+
readonly successForeground: "oklch(1 0 0)";
|
|
161
|
+
readonly warning: "oklch(0.5 0.13 60)";
|
|
162
|
+
readonly warningForeground: "oklch(1 0 0)";
|
|
163
|
+
readonly info: "oklch(0.49 0.13 235)";
|
|
164
|
+
readonly infoForeground: "oklch(1 0 0)";
|
|
141
165
|
};
|
|
142
166
|
readonly dark: {
|
|
143
167
|
readonly background: "oklch(0.22 0.01 131)";
|
|
@@ -146,35 +170,47 @@ export declare const themeConfig: {
|
|
|
146
170
|
readonly cardForeground: "oklch(0.9551 0 0)";
|
|
147
171
|
readonly popover: "oklch(0.24 0.01 131)";
|
|
148
172
|
readonly popoverForeground: "oklch(0.9551 0 0)";
|
|
149
|
-
readonly primary: "oklch(0.65 0.
|
|
150
|
-
readonly primaryForeground: "oklch(
|
|
151
|
-
readonly secondary: "oklch(0.29 0.02
|
|
173
|
+
readonly primary: "oklch(0.65 0.14 175)";
|
|
174
|
+
readonly primaryForeground: "oklch(0.18 0 0)";
|
|
175
|
+
readonly secondary: "oklch(0.29 0.02 175)";
|
|
152
176
|
readonly secondaryForeground: "oklch(0.9551 0 0)";
|
|
153
|
-
readonly muted: "oklch(0.29 0.02
|
|
177
|
+
readonly muted: "oklch(0.29 0.02 175)";
|
|
154
178
|
readonly mutedForeground: "oklch(0.7058 0 0)";
|
|
155
|
-
readonly accent: "oklch(0.28 0.05
|
|
156
|
-
readonly accentForeground: "oklch(0.80 0.10
|
|
179
|
+
readonly accent: "oklch(0.28 0.05 175)";
|
|
180
|
+
readonly accentForeground: "oklch(0.80 0.10 175)";
|
|
157
181
|
readonly destructive: "oklch(0.7106 0.1661 22.2162)";
|
|
158
|
-
readonly destructiveForeground: "oklch(
|
|
159
|
-
readonly border: "oklch(0.33 0.02
|
|
160
|
-
readonly input: "oklch(0.
|
|
161
|
-
readonly ring: "oklch(0.
|
|
182
|
+
readonly destructiveForeground: "oklch(0.18 0 0)";
|
|
183
|
+
readonly border: "oklch(0.33 0.02 175)";
|
|
184
|
+
readonly input: "oklch(0.55 0.02 175)";
|
|
185
|
+
readonly ring: "oklch(0.8 0.12 175)";
|
|
186
|
+
readonly success: "oklch(0.78 0.14 155)";
|
|
187
|
+
readonly successForeground: "oklch(0.18 0 0)";
|
|
188
|
+
readonly warning: "oklch(0.82 0.14 80)";
|
|
189
|
+
readonly warningForeground: "oklch(0.18 0 0)";
|
|
190
|
+
readonly info: "oklch(0.78 0.11 235)";
|
|
191
|
+
readonly infoForeground: "oklch(0.18 0 0)";
|
|
162
192
|
};
|
|
163
193
|
};
|
|
164
194
|
readonly charts: {
|
|
165
195
|
readonly light: {
|
|
166
|
-
readonly chart1: "oklch(0.
|
|
167
|
-
readonly chart2: "oklch(0.
|
|
168
|
-
readonly chart3: "oklch(0.
|
|
169
|
-
readonly chart4: "oklch(0.
|
|
170
|
-
readonly chart5: "oklch(0.
|
|
196
|
+
readonly chart1: "oklch(0.62 0.14 156)";
|
|
197
|
+
readonly chart2: "oklch(0.51 0.14 175)";
|
|
198
|
+
readonly chart3: "oklch(0.64 0.16 50)";
|
|
199
|
+
readonly chart4: "oklch(0.55 0.12 250)";
|
|
200
|
+
readonly chart5: "oklch(0.56 0 0)";
|
|
201
|
+
readonly chart6: "oklch(0.58 0.17 25)";
|
|
202
|
+
readonly chart7: "oklch(0.6 0.12 85)";
|
|
203
|
+
readonly chart8: "oklch(0.55 0.1 210)";
|
|
171
204
|
};
|
|
172
205
|
readonly dark: {
|
|
173
|
-
readonly chart1: "oklch(0.
|
|
174
|
-
readonly chart2: "oklch(0.
|
|
175
|
-
readonly chart3: "oklch(0.
|
|
176
|
-
readonly chart4: "oklch(0.
|
|
177
|
-
readonly chart5: "oklch(0.
|
|
206
|
+
readonly chart1: "oklch(0.8 0.18 152)";
|
|
207
|
+
readonly chart2: "oklch(0.72 0.14 175)";
|
|
208
|
+
readonly chart3: "oklch(0.81 0.1 20)";
|
|
209
|
+
readonly chart4: "oklch(0.75 0.11 250)";
|
|
210
|
+
readonly chart5: "oklch(0.71 0 0)";
|
|
211
|
+
readonly chart6: "oklch(0.74 0.15 25)";
|
|
212
|
+
readonly chart7: "oklch(0.82 0.12 85)";
|
|
213
|
+
readonly chart8: "oklch(0.78 0.1 210)";
|
|
178
214
|
};
|
|
179
215
|
};
|
|
180
216
|
readonly radius: {
|
package/dist/preset.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDd,CAAA;AAEV,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;CAqBd,CAAA;AAEV,eAAO,MAAM,YAAY;;;;;;CAMf,CAAA;AAEV,eAAO,MAAM,YAAY;;;;;;;;;CASf,CAAA;AAEV,eAAO,MAAM,UAAU;;;;CAIb,CAAA;AAEV,eAAO,MAAM,cAAc;;CAEjB,CAAA;AAEV;;;;;;GAMG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;CAYf,CAAA;AAEV,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQd,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAA"}
|
package/dist/preset.js
CHANGED
|
@@ -19,19 +19,25 @@ export const colorTokens = {
|
|
|
19
19
|
cardForeground: 'oklch(0 0 0)',
|
|
20
20
|
popover: 'oklch(0.9911 0 0)',
|
|
21
21
|
popoverForeground: 'oklch(0 0 0)',
|
|
22
|
-
primary: 'oklch(0.
|
|
22
|
+
primary: 'oklch(0.51 0.14 175)',
|
|
23
23
|
primaryForeground: 'oklch(1.0000 0 0)',
|
|
24
|
-
secondary: 'oklch(0.9540 0.0063
|
|
24
|
+
secondary: 'oklch(0.9540 0.0063 175)',
|
|
25
25
|
secondaryForeground: 'oklch(0.1344 0 0)',
|
|
26
26
|
muted: 'oklch(0.9702 0 0)',
|
|
27
27
|
mutedForeground: 'oklch(0.4386 0 0)',
|
|
28
|
-
accent: 'oklch(0.94 0.03
|
|
29
|
-
accentForeground: 'oklch(0.
|
|
30
|
-
destructive: 'oklch(0.
|
|
28
|
+
accent: 'oklch(0.94 0.03 175)',
|
|
29
|
+
accentForeground: 'oklch(0.49 0.11 175)',
|
|
30
|
+
destructive: 'oklch(0.52 0.19 23)',
|
|
31
31
|
destructiveForeground: 'oklch(1.0000 0 0)',
|
|
32
|
-
border: 'oklch(0.9300 0.0094
|
|
33
|
-
input: 'oklch(0.
|
|
32
|
+
border: 'oklch(0.9300 0.0094 175)',
|
|
33
|
+
input: 'oklch(0.64 0 0)',
|
|
34
34
|
ring: 'oklch(0 0 0)',
|
|
35
|
+
success: 'oklch(0.48 0.13 155)',
|
|
36
|
+
successForeground: 'oklch(1 0 0)',
|
|
37
|
+
warning: 'oklch(0.5 0.13 60)',
|
|
38
|
+
warningForeground: 'oklch(1 0 0)',
|
|
39
|
+
info: 'oklch(0.49 0.13 235)',
|
|
40
|
+
infoForeground: 'oklch(1 0 0)',
|
|
35
41
|
},
|
|
36
42
|
dark: {
|
|
37
43
|
background: 'oklch(0.22 0.01 131)',
|
|
@@ -40,35 +46,47 @@ export const colorTokens = {
|
|
|
40
46
|
cardForeground: 'oklch(0.9551 0 0)',
|
|
41
47
|
popover: 'oklch(0.24 0.01 131)',
|
|
42
48
|
popoverForeground: 'oklch(0.9551 0 0)',
|
|
43
|
-
primary: 'oklch(0.65 0.
|
|
44
|
-
primaryForeground: 'oklch(
|
|
45
|
-
secondary: 'oklch(0.29 0.02
|
|
49
|
+
primary: 'oklch(0.65 0.14 175)',
|
|
50
|
+
primaryForeground: 'oklch(0.18 0 0)',
|
|
51
|
+
secondary: 'oklch(0.29 0.02 175)',
|
|
46
52
|
secondaryForeground: 'oklch(0.9551 0 0)',
|
|
47
|
-
muted: 'oklch(0.29 0.02
|
|
53
|
+
muted: 'oklch(0.29 0.02 175)',
|
|
48
54
|
mutedForeground: 'oklch(0.7058 0 0)',
|
|
49
|
-
accent: 'oklch(0.28 0.05
|
|
50
|
-
accentForeground: 'oklch(0.80 0.10
|
|
55
|
+
accent: 'oklch(0.28 0.05 175)',
|
|
56
|
+
accentForeground: 'oklch(0.80 0.10 175)',
|
|
51
57
|
destructive: 'oklch(0.7106 0.1661 22.2162)',
|
|
52
|
-
destructiveForeground: 'oklch(
|
|
53
|
-
border: 'oklch(0.33 0.02
|
|
54
|
-
input: 'oklch(0.
|
|
55
|
-
ring: 'oklch(0.
|
|
58
|
+
destructiveForeground: 'oklch(0.18 0 0)',
|
|
59
|
+
border: 'oklch(0.33 0.02 175)',
|
|
60
|
+
input: 'oklch(0.55 0.02 175)',
|
|
61
|
+
ring: 'oklch(0.8 0.12 175)',
|
|
62
|
+
success: 'oklch(0.78 0.14 155)',
|
|
63
|
+
successForeground: 'oklch(0.18 0 0)',
|
|
64
|
+
warning: 'oklch(0.82 0.14 80)',
|
|
65
|
+
warningForeground: 'oklch(0.18 0 0)',
|
|
66
|
+
info: 'oklch(0.78 0.11 235)',
|
|
67
|
+
infoForeground: 'oklch(0.18 0 0)',
|
|
56
68
|
},
|
|
57
69
|
};
|
|
58
70
|
export const chartTokens = {
|
|
59
71
|
light: {
|
|
60
|
-
chart1: 'oklch(0.
|
|
61
|
-
chart2: 'oklch(0.
|
|
62
|
-
chart3: 'oklch(0.
|
|
63
|
-
chart4: 'oklch(0.
|
|
64
|
-
chart5: 'oklch(0.
|
|
72
|
+
chart1: 'oklch(0.62 0.14 156)',
|
|
73
|
+
chart2: 'oklch(0.51 0.14 175)',
|
|
74
|
+
chart3: 'oklch(0.64 0.16 50)',
|
|
75
|
+
chart4: 'oklch(0.55 0.12 250)',
|
|
76
|
+
chart5: 'oklch(0.56 0 0)',
|
|
77
|
+
chart6: 'oklch(0.58 0.17 25)',
|
|
78
|
+
chart7: 'oklch(0.6 0.12 85)',
|
|
79
|
+
chart8: 'oklch(0.55 0.1 210)',
|
|
65
80
|
},
|
|
66
81
|
dark: {
|
|
67
|
-
chart1: 'oklch(0.
|
|
68
|
-
chart2: 'oklch(0.
|
|
69
|
-
chart3: 'oklch(0.
|
|
70
|
-
chart4: 'oklch(0.
|
|
71
|
-
chart5: 'oklch(0.
|
|
82
|
+
chart1: 'oklch(0.8 0.18 152)',
|
|
83
|
+
chart2: 'oklch(0.72 0.14 175)',
|
|
84
|
+
chart3: 'oklch(0.81 0.1 20)',
|
|
85
|
+
chart4: 'oklch(0.75 0.11 250)',
|
|
86
|
+
chart5: 'oklch(0.71 0 0)',
|
|
87
|
+
chart6: 'oklch(0.74 0.15 25)',
|
|
88
|
+
chart7: 'oklch(0.82 0.12 85)',
|
|
89
|
+
chart8: 'oklch(0.78 0.1 210)',
|
|
72
90
|
},
|
|
73
91
|
};
|
|
74
92
|
export const radiusTokens = {
|
package/dist/preset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE;QACL,UAAU,EAAE,mBAAmB;QAC/B,UAAU,EAAE,cAAc;QAC1B,IAAI,EAAE,mBAAmB;QACzB,cAAc,EAAE,cAAc;QAC9B,OAAO,EAAE,mBAAmB;QAC5B,iBAAiB,EAAE,cAAc;QACjC,OAAO,EAAE,sBAAsB;QAC/B,iBAAiB,EAAE,mBAAmB;QACtC,SAAS,EAAE,0BAA0B;QACrC,mBAAmB,EAAE,mBAAmB;QACxC,KAAK,EAAE,mBAAmB;QAC1B,eAAe,EAAE,mBAAmB;QACpC,MAAM,EAAE,sBAAsB;QAC9B,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asteby/metacore-theme",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.28.0",
|
|
4
4
|
"description": "Metacore design tokens + Tailwind 4 preset (oklch, shadows, fonts, dark mode)",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -35,6 +35,10 @@
|
|
|
35
35
|
"./preset": {
|
|
36
36
|
"types": "./dist/preset.d.ts",
|
|
37
37
|
"import": "./dist/preset.js"
|
|
38
|
+
},
|
|
39
|
+
"./contrast": {
|
|
40
|
+
"types": "./dist/contrast.d.ts",
|
|
41
|
+
"import": "./dist/contrast.js"
|
|
38
42
|
}
|
|
39
43
|
},
|
|
40
44
|
"peerDependencies": {
|
package/styles/glass.css
CHANGED
|
@@ -19,7 +19,14 @@
|
|
|
19
19
|
* such as `bg-card` or `hover:bg-muted/50` in `@layer utilities`.
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
-
/* ─── Tokens ───
|
|
22
|
+
/* ─── Tokens ───
|
|
23
|
+
* Readability floor: text never sits on the bare gradient. Every text
|
|
24
|
+
* surface (--background on the inset, --card, --popover, --sidebar) keeps an
|
|
25
|
+
* alpha high enough that, composited over the BRIGHTEST point of the backdrop
|
|
26
|
+
* (all three gradient peaks stacked, no blur), its foreground still clears
|
|
27
|
+
* WCAG AA — src/tokens-contrast.test.ts measures exactly that and fails CI
|
|
28
|
+
* when a brand pack lowers those alphas or brightens the blobs too far.
|
|
29
|
+
*/
|
|
23
30
|
[data-ui-theme='glass'] {
|
|
24
31
|
--radius: 1.1rem;
|
|
25
32
|
--font-sans: Manrope, Inter, sans-serif;
|
|
@@ -38,7 +45,8 @@
|
|
|
38
45
|
--accent-foreground: oklch(0.24 0.04 250);
|
|
39
46
|
/* Inner separators: a dark hairline reads on white glass, a white one doesn't. */
|
|
40
47
|
--border: oklch(0.35 0.03 250 / 0.12);
|
|
41
|
-
|
|
48
|
+
/* Control boundary: ≥ 3:1 on the composited card (WCAG 1.4.11). */
|
|
49
|
+
--input: oklch(0.4 0.03 250 / 0.62);
|
|
42
50
|
--sidebar: oklch(1 0 0 / 0.45);
|
|
43
51
|
--sidebar-foreground: oklch(0.26 0.03 250);
|
|
44
52
|
--sidebar-accent: oklch(1 0 0 / 0.6);
|
|
@@ -81,11 +89,15 @@
|
|
|
81
89
|
--ui-surface-blur: var(--glass-blur);
|
|
82
90
|
--ui-card-alpha: 0.5;
|
|
83
91
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
92
|
+
/* Backdrop: brand packs override these three blobs (or --glass-backdrop)
|
|
93
|
+
instead of rewriting background-image. */
|
|
94
|
+
--glass-gradient-1: radial-gradient(48rem 34rem at 10% -8%, oklch(0.8 0.11 250 / 0.9), transparent 70%);
|
|
95
|
+
--glass-gradient-2: radial-gradient(40rem 30rem at 105% 20%, oklch(0.78 0.12 295 / 0.75), transparent 68%);
|
|
96
|
+
--glass-gradient-3: radial-gradient(38rem 28rem at 60% 115%, oklch(0.9 0.12 90 / 0.7), transparent 70%);
|
|
97
|
+
--glass-backdrop: oklch(0.93 0.035 270);
|
|
98
|
+
|
|
99
|
+
background-color: var(--glass-backdrop);
|
|
100
|
+
background-image: var(--glass-gradient-1), var(--glass-gradient-2), var(--glass-gradient-3);
|
|
89
101
|
background-attachment: fixed;
|
|
90
102
|
}
|
|
91
103
|
|
|
@@ -103,7 +115,7 @@
|
|
|
103
115
|
--accent: oklch(1 0 0 / 0.1);
|
|
104
116
|
--accent-foreground: oklch(0.97 0.01 250);
|
|
105
117
|
--border: oklch(1 0 0 / 0.1);
|
|
106
|
-
--input: oklch(1 0 0 / 0.
|
|
118
|
+
--input: oklch(1 0 0 / 0.36);
|
|
107
119
|
--sidebar: oklch(0.2 0.03 255 / 0.5);
|
|
108
120
|
--sidebar-foreground: oklch(0.94 0.01 250);
|
|
109
121
|
--sidebar-accent: oklch(1 0 0 / 0.1);
|
|
@@ -126,11 +138,13 @@
|
|
|
126
138
|
--glass-row-hover: oklch(1 0 0 / 0.05);
|
|
127
139
|
--glass-thead: oklch(0.25 0.03 255 / 0.7);
|
|
128
140
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
141
|
+
--glass-gradient-1: radial-gradient(42rem 28rem at 8% -8%, oklch(0.45 0.16 250 / 0.7), transparent 70%);
|
|
142
|
+
--glass-gradient-2: radial-gradient(32rem 24rem at 100% 0%, oklch(0.4 0.12 200 / 0.55), transparent 68%);
|
|
143
|
+
--glass-gradient-3: radial-gradient(28rem 22rem at 70% 100%, oklch(0.42 0.14 300 / 0.45), transparent 70%);
|
|
144
|
+
--glass-backdrop: oklch(0.16 0.03 260);
|
|
145
|
+
|
|
146
|
+
background-color: var(--glass-backdrop);
|
|
147
|
+
background-image: var(--glass-gradient-1), var(--glass-gradient-2), var(--glass-gradient-3);
|
|
134
148
|
background-attachment: fixed;
|
|
135
149
|
}
|
|
136
150
|
|
package/styles/tokens.css
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
:root {
|
|
2
|
-
/*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
/*
|
|
3
|
+
* Contrast contract (enforced by src/tokens-contrast.test.ts, WCAG 2.x AA):
|
|
4
|
+
* every *-foreground ≥ 4.5:1 on its surface; --primary, --destructive and
|
|
5
|
+
* the status hues ≥ 4.5:1 as text on --card (and on their own 14% tint,
|
|
6
|
+
* which is how Badge paints soft chips); --input (control boundary),
|
|
7
|
+
* --ring at 50% (focus) and --chart-1..8 ≥ 3:1 on --card.
|
|
8
|
+
*/
|
|
9
|
+
/* Status hues for chips and badges (text-safe on --card and on their tint). */
|
|
10
|
+
--success: oklch(0.48 0.13 155);
|
|
11
|
+
--success-foreground: oklch(1 0 0);
|
|
12
|
+
--warning: oklch(0.5 0.13 60);
|
|
13
|
+
--warning-foreground: oklch(1 0 0);
|
|
14
|
+
--info: oklch(0.49 0.13 235);
|
|
15
|
+
--info-foreground: oklch(1 0 0);
|
|
6
16
|
|
|
7
17
|
/*
|
|
8
18
|
* Semantic surfaces for floating UI outside the metacore-ui primitives
|
|
@@ -27,24 +37,37 @@
|
|
|
27
37
|
--card-foreground: oklch(0 0 0);
|
|
28
38
|
--popover: oklch(0.9911 0 0);
|
|
29
39
|
--popover-foreground: oklch(0 0 0);
|
|
30
|
-
--primary: oklch(0.
|
|
40
|
+
--primary: oklch(0.51 0.14 175);
|
|
31
41
|
--primary-foreground: oklch(1.0000 0 0);
|
|
32
42
|
--secondary: oklch(0.9540 0.0063 175);
|
|
33
43
|
--secondary-foreground: oklch(0.1344 0 0);
|
|
34
44
|
--muted: oklch(0.9702 0 0);
|
|
35
45
|
--muted-foreground: oklch(0.4386 0 0);
|
|
36
46
|
--accent: oklch(0.94 0.03 175);
|
|
37
|
-
--accent-foreground: oklch(0.
|
|
38
|
-
--destructive: oklch(0.
|
|
47
|
+
--accent-foreground: oklch(0.49 0.11 175);
|
|
48
|
+
--destructive: oklch(0.52 0.19 23);
|
|
39
49
|
--destructive-foreground: oklch(1.0000 0 0);
|
|
40
50
|
--border: oklch(0.9300 0.0094 175);
|
|
41
|
-
|
|
51
|
+
/* Control boundary (inputs, selects, checkboxes): 1.4.11 needs 3:1. */
|
|
52
|
+
--input: oklch(0.64 0 0);
|
|
42
53
|
--ring: oklch(0 0 0);
|
|
43
|
-
|
|
44
|
-
--chart-
|
|
45
|
-
--chart-
|
|
46
|
-
--chart-
|
|
47
|
-
--chart-
|
|
54
|
+
/* Categorical series: distinct hues, each ≥ 3:1 on --card. */
|
|
55
|
+
--chart-1: oklch(0.62 0.14 156);
|
|
56
|
+
--chart-2: oklch(0.51 0.14 175);
|
|
57
|
+
--chart-3: oklch(0.64 0.16 50);
|
|
58
|
+
--chart-4: oklch(0.55 0.12 250);
|
|
59
|
+
--chart-5: oklch(0.56 0 0);
|
|
60
|
+
--chart-6: oklch(0.58 0.17 25);
|
|
61
|
+
--chart-7: oklch(0.6 0.12 85);
|
|
62
|
+
--chart-8: oklch(0.55 0.1 210);
|
|
63
|
+
/* Dashboard widget accents (@asteby/metacore-runtime-react CHART_PALETTE):
|
|
64
|
+
-600 shades, ≥ 3:1 on --card. */
|
|
65
|
+
--color-widget-emerald: #059669;
|
|
66
|
+
--color-widget-sky: #0284c7;
|
|
67
|
+
--color-widget-violet: #7c3aed;
|
|
68
|
+
--color-widget-amber: #d97706;
|
|
69
|
+
--color-widget-rose: #e11d48;
|
|
70
|
+
--color-widget-slate: #475569;
|
|
48
71
|
--sidebar: oklch(0.9777 0.0051 175);
|
|
49
72
|
--sidebar-foreground: oklch(0 0 0);
|
|
50
73
|
--sidebar-primary: oklch(0 0 0);
|
|
@@ -91,7 +114,7 @@
|
|
|
91
114
|
--popover: oklch(0.24 0.01 131);
|
|
92
115
|
--popover-foreground: oklch(0.9551 0 0);
|
|
93
116
|
--primary: oklch(0.65 0.14 175);
|
|
94
|
-
--primary-foreground: oklch(
|
|
117
|
+
--primary-foreground: oklch(0.18 0 0);
|
|
95
118
|
--secondary: oklch(0.29 0.02 175);
|
|
96
119
|
--secondary-foreground: oklch(0.9551 0 0);
|
|
97
120
|
--muted: oklch(0.29 0.02 175);
|
|
@@ -99,15 +122,26 @@
|
|
|
99
122
|
--accent: oklch(0.28 0.05 175);
|
|
100
123
|
--accent-foreground: oklch(0.80 0.10 175);
|
|
101
124
|
--destructive: oklch(0.7106 0.1661 22.2162);
|
|
102
|
-
--destructive-foreground: oklch(
|
|
125
|
+
--destructive-foreground: oklch(0.18 0 0);
|
|
103
126
|
--border: oklch(0.33 0.02 175);
|
|
104
|
-
--input: oklch(0.
|
|
105
|
-
--ring: oklch(0.
|
|
106
|
-
|
|
107
|
-
--chart-
|
|
108
|
-
--chart-
|
|
109
|
-
--chart-
|
|
110
|
-
--chart-
|
|
127
|
+
--input: oklch(0.55 0.02 175);
|
|
128
|
+
--ring: oklch(0.8 0.12 175);
|
|
129
|
+
/* High lightness on the dark canvas: every series ≥ 3:1 on --card. */
|
|
130
|
+
--chart-1: oklch(0.8 0.18 152);
|
|
131
|
+
--chart-2: oklch(0.72 0.14 175);
|
|
132
|
+
--chart-3: oklch(0.81 0.1 20);
|
|
133
|
+
--chart-4: oklch(0.75 0.11 250);
|
|
134
|
+
--chart-5: oklch(0.71 0 0);
|
|
135
|
+
--chart-6: oklch(0.74 0.15 25);
|
|
136
|
+
--chart-7: oklch(0.82 0.12 85);
|
|
137
|
+
--chart-8: oklch(0.78 0.1 210);
|
|
138
|
+
/* Widget accents: -400 shades, ≥ 3:1 on the dark --card. */
|
|
139
|
+
--color-widget-emerald: #34d399;
|
|
140
|
+
--color-widget-sky: #38bdf8;
|
|
141
|
+
--color-widget-violet: #a78bfa;
|
|
142
|
+
--color-widget-amber: #fbbf24;
|
|
143
|
+
--color-widget-rose: #fb7185;
|
|
144
|
+
--color-widget-slate: #94a3b8;
|
|
111
145
|
--sidebar: oklch(0.20 0.01 131);
|
|
112
146
|
--sidebar-foreground: oklch(0.9551 0 0);
|
|
113
147
|
--sidebar-primary: oklch(0.65 0.14 175);
|
|
@@ -115,7 +149,7 @@
|
|
|
115
149
|
--sidebar-accent: oklch(0.29 0.02 175);
|
|
116
150
|
--sidebar-accent-foreground: oklch(0.65 0.14 175);
|
|
117
151
|
--sidebar-border: oklch(0.33 0.02 175);
|
|
118
|
-
--sidebar-ring: oklch(0.
|
|
152
|
+
--sidebar-ring: oklch(0.8 0.12 175);
|
|
119
153
|
|
|
120
154
|
--radius: 1.4rem;
|
|
121
155
|
--shadow-x: 0px;
|
|
@@ -133,8 +167,11 @@
|
|
|
133
167
|
--shadow-xl: 0px 2px 3px 0px hsl(0 0% 0% / 0.16), 0px 8px 10px -1px hsl(0 0% 0% / 0.16);
|
|
134
168
|
--shadow-2xl: 0px 2px 3px 0px hsl(0 0% 0% / 0.40);
|
|
135
169
|
--success: oklch(0.78 0.14 155);
|
|
170
|
+
--success-foreground: oklch(0.18 0 0);
|
|
136
171
|
--warning: oklch(0.82 0.14 80);
|
|
172
|
+
--warning-foreground: oklch(0.18 0 0);
|
|
137
173
|
--info: oklch(0.78 0.11 235);
|
|
174
|
+
--info-foreground: oklch(0.18 0 0);
|
|
138
175
|
}
|
|
139
176
|
|
|
140
177
|
@theme inline {
|
|
@@ -162,6 +199,15 @@
|
|
|
162
199
|
--color-chart-3: var(--chart-3);
|
|
163
200
|
--color-chart-4: var(--chart-4);
|
|
164
201
|
--color-chart-5: var(--chart-5);
|
|
202
|
+
--color-chart-6: var(--chart-6);
|
|
203
|
+
--color-chart-7: var(--chart-7);
|
|
204
|
+
--color-chart-8: var(--chart-8);
|
|
205
|
+
--color-success: var(--success);
|
|
206
|
+
--color-success-foreground: var(--success-foreground);
|
|
207
|
+
--color-warning: var(--warning);
|
|
208
|
+
--color-warning-foreground: var(--warning-foreground);
|
|
209
|
+
--color-info: var(--info);
|
|
210
|
+
--color-info-foreground: var(--info-foreground);
|
|
165
211
|
--color-sidebar: var(--sidebar);
|
|
166
212
|
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
167
213
|
--color-sidebar-primary: var(--sidebar-primary);
|