@rowkit/tokens 0.1.1 → 0.3.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 +6 -4
- package/dist/blur.d.ts +18 -0
- package/dist/color.d.ts +295 -51
- package/dist/index.d.ts +134 -35
- package/dist/index.js +284 -194
- package/dist/index.js.map +1 -1
- package/dist/radius.d.ts +67 -15
- package/dist/reference.html +301 -254
- package/dist/shadow.d.ts +12 -1
- package/dist/tokens.css +158 -108
- package/dist/typography.d.ts +11 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ npm i @rowkit/tokens
|
|
|
17
17
|
|
|
18
18
|
## Two layers
|
|
19
19
|
|
|
20
|
-
**Primitives** are the raw ramps: `--color-primary-600` is one specific blue and means nothing on its own. **Semantic** tokens name a role — `--color-
|
|
20
|
+
**Primitives** are the raw ramps: `--color-primary-600` is one specific blue and means nothing on its own. **Semantic** tokens name a role — `--color-card`, `--color-muted-foreground`, `--color-border` — and point at a primitive through `var()`.
|
|
21
21
|
|
|
22
22
|
Only the semantic layer changes under `.dark`, which is what makes dark mode a matter of repointing references rather than hunting hex codes.
|
|
23
23
|
|
|
@@ -30,13 +30,13 @@ As a Tailwind v4 theme:
|
|
|
30
30
|
@import '@rowkit/tokens/css';
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
Every token becomes a theme value, so `bg-
|
|
33
|
+
Every token becomes a theme value, so `bg-card`, `text-muted-foreground`, `p-4`, `rounded-md` and `shadow-lg` resolve to the scales above.
|
|
34
34
|
|
|
35
35
|
As CSS custom properties, for anything Tailwind does not cover:
|
|
36
36
|
|
|
37
37
|
```css
|
|
38
38
|
.my-thing {
|
|
39
|
-
background: var(--color-
|
|
39
|
+
background: var(--color-muted);
|
|
40
40
|
border-radius: var(--radius-md);
|
|
41
41
|
}
|
|
42
42
|
```
|
|
@@ -46,7 +46,7 @@ Or in TypeScript, fully typed, when a value has to reach JavaScript:
|
|
|
46
46
|
```ts
|
|
47
47
|
import { tokens } from '@rowkit/tokens'
|
|
48
48
|
|
|
49
|
-
tokens.color.primary[
|
|
49
|
+
tokens.color.primary[800] // 'oklch(0.31 0.038 48)' — warm espresso
|
|
50
50
|
|
|
51
51
|
const series = [tokens.color.primary[500], tokens.color.success[500]]
|
|
52
52
|
```
|
|
@@ -66,3 +66,5 @@ const series = [tokens.color.primary[500], tokens.color.success[500]]
|
|
|
66
66
|
## License
|
|
67
67
|
|
|
68
68
|
MIT © Nikolai Kushner
|
|
69
|
+
|
|
70
|
+
Design language based on [shadcn/ui](https://ui.shadcn.com) by shadcn, adapted for Vue. shadcn/ui is MIT licensed; rowkit adopts its token values and class recipes, not its code.
|
package/dist/blur.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backdrop blur radii.
|
|
3
|
+
*
|
|
4
|
+
* One entry, and named for its job rather than a t-shirt size. Blur is not a
|
|
5
|
+
* scale rowkit designs with — it appears in exactly one place, behind a modal,
|
|
6
|
+
* and a second value would be a decision nobody has had to make yet.
|
|
7
|
+
*
|
|
8
|
+
* Deliberately small. The scrim separates the planes; the blur only stops the
|
|
9
|
+
* page behind from competing for the eye. Anything heavier reads as an effect
|
|
10
|
+
* and makes the content behind unrecognisable, which defeats the reason a
|
|
11
|
+
* modal shows its context at all.
|
|
12
|
+
*/
|
|
13
|
+
export declare const blur: {
|
|
14
|
+
/** The dialog scrim. The reference `backdrop-blur-xs`. */
|
|
15
|
+
readonly overlay: "4px";
|
|
16
|
+
};
|
|
17
|
+
/** Names of every blur token. */
|
|
18
|
+
export type BlurName = keyof typeof blur;
|
package/dist/color.d.ts
CHANGED
|
@@ -41,19 +41,26 @@ export declare const neutral: {
|
|
|
41
41
|
readonly 900: "oklch(0.21 0.033 264)";
|
|
42
42
|
readonly 950: "oklch(0.13 0.036 264)";
|
|
43
43
|
};
|
|
44
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Warm espresso graphite (hue ~48).
|
|
46
|
+
*
|
|
47
|
+
* Restrained and premium — not pure black, not a loud brand blue/teal.
|
|
48
|
+
* Enough warmth to feel intentional on a solid button; quiet enough that
|
|
49
|
+
* consumers can rebrand without scraping a chromatic default first.
|
|
50
|
+
*/
|
|
45
51
|
export declare const primary: {
|
|
46
|
-
readonly 50: "oklch(0.
|
|
47
|
-
readonly 100: "oklch(0.
|
|
48
|
-
readonly 200: "oklch(0.
|
|
49
|
-
readonly 300: "oklch(0.
|
|
50
|
-
readonly 400: "oklch(0.
|
|
51
|
-
readonly 500: "oklch(0.
|
|
52
|
-
readonly 600: "oklch(0.
|
|
53
|
-
readonly 700: "oklch(0.
|
|
54
|
-
|
|
55
|
-
readonly
|
|
56
|
-
readonly
|
|
52
|
+
readonly 50: "oklch(0.975 0.01 48)";
|
|
53
|
+
readonly 100: "oklch(0.95 0.014 48)";
|
|
54
|
+
readonly 200: "oklch(0.90 0.02 48)";
|
|
55
|
+
readonly 300: "oklch(0.80 0.026 48)";
|
|
56
|
+
readonly 400: "oklch(0.68 0.032 48)";
|
|
57
|
+
readonly 500: "oklch(0.50 0.036 48)";
|
|
58
|
+
readonly 600: "oklch(0.40 0.037 48)";
|
|
59
|
+
readonly 700: "oklch(0.35 0.037 48)";
|
|
60
|
+
/** Solid actions — warm espresso, deep enough for white labels. */
|
|
61
|
+
readonly 800: "oklch(0.31 0.038 48)";
|
|
62
|
+
readonly 900: "oklch(0.26 0.032 48)";
|
|
63
|
+
readonly 950: "oklch(0.18 0.024 48)";
|
|
57
64
|
};
|
|
58
65
|
/** Green (hue 152). Reserved for successful outcomes, never for brand accent. */
|
|
59
66
|
export declare const success: {
|
|
@@ -97,6 +104,177 @@ export declare const danger: {
|
|
|
97
104
|
readonly 900: "oklch(0.396 0.135 25)";
|
|
98
105
|
readonly 950: "oklch(0.282 0.086 25)";
|
|
99
106
|
};
|
|
107
|
+
/**
|
|
108
|
+
* Greys keyed by OKLCH lightness × 1000, so `gray-922` is lightness 0.922.
|
|
109
|
+
*
|
|
110
|
+
* Most steps stay zero-chroma — the reference design's quiet base. A few carry
|
|
111
|
+
* a cool cast (hue 264, the same as {@link neutral}): lighter hairlines and
|
|
112
|
+
* soft recessed surfaces. That is rowkit's own signal inside an otherwise
|
|
113
|
+
* clean, reference-shaped palette — enough to read as itself on a long session,
|
|
114
|
+
* not enough to look like a tinted theme.
|
|
115
|
+
*/
|
|
116
|
+
export declare const gray: {
|
|
117
|
+
/** Soft cool page. Slightly off pure white so a day of table work is less glare. */
|
|
118
|
+
readonly 988: "oklch(0.988 0.002 264)";
|
|
119
|
+
/** the reference `--primary-foreground`, `--foreground` (dark). */
|
|
120
|
+
readonly 985: "oklch(0.985 0 0)";
|
|
121
|
+
/**
|
|
122
|
+
* Cool recessed surface — muted toolbars, row hover, quiet chips.
|
|
123
|
+
*
|
|
124
|
+
* Lighter and cooler than the reference `--muted` (0.97 0 0): same job, less
|
|
125
|
+
* ink on the page.
|
|
126
|
+
*/
|
|
127
|
+
readonly 972: "oklch(0.972 0.003 264)";
|
|
128
|
+
/** the reference `--secondary`, `--muted`, `--accent` — kept for dark primary fill. */
|
|
129
|
+
readonly 970: "oklch(0.97 0 0)";
|
|
130
|
+
/**
|
|
131
|
+
* Cool decorative hairline / recessed fill step. Lighter than the reference
|
|
132
|
+
* `--border` (0.922) — table rules, card outlines, and secondary button fill
|
|
133
|
+
* (`surface-active`) that must read as a surface next to white outline chrome.
|
|
134
|
+
*/
|
|
135
|
+
readonly 940: "oklch(0.940 0.004 264)";
|
|
136
|
+
/** the reference `--border`. Kept for pressed fills that still need a step of weight. */
|
|
137
|
+
readonly 922: "oklch(0.922 0 0)";
|
|
138
|
+
/**
|
|
139
|
+
* Cool emphasised hairline. rowkit's; the reference design has no "strong border".
|
|
140
|
+
* Softer than the old 0.87 step so structure reads without shouting.
|
|
141
|
+
*/
|
|
142
|
+
readonly 905: "oklch(0.905 0.006 264)";
|
|
143
|
+
/** Emphasised hairline (legacy weight). Prefer {@link gray[905]} for new chrome. */
|
|
144
|
+
readonly 870: "oklch(0.87 0 0)";
|
|
145
|
+
/** the reference `--muted-foreground` (dark), where it clears AA at 7.63:1. */
|
|
146
|
+
readonly 708: "oklch(0.708 0 0)";
|
|
147
|
+
/**
|
|
148
|
+
* rowkit's correction to the reference `--ring` and `--input` in light mode.
|
|
149
|
+
*
|
|
150
|
+
* the reference design puts them at 0.708 and 0.922, which measure 2.59:1 and 1.26:1
|
|
151
|
+
* against a white page — a focus ring and a control boundary that both fail
|
|
152
|
+
* WCAG 1.4.11.
|
|
153
|
+
*
|
|
154
|
+
* Not the mathematical minimum. Solving in floating point gave 0.669 and a
|
|
155
|
+
* tidy 3.00:1; the browser paints `#959595` and axe measured **2.995:1**,
|
|
156
|
+
* because a colour is quantised to eight bits per channel before anyone sees
|
|
157
|
+
* it. Anything solved exactly onto a threshold lands on whichever side the
|
|
158
|
+
* rounding chooses. 0.635 is 3.45:1 against the page and 3.17:1 against
|
|
159
|
+
* `surface-subtle`, which clears the bar on both sides of the rounding.
|
|
160
|
+
*/
|
|
161
|
+
readonly 635: "oklch(0.635 0 0)";
|
|
162
|
+
/**
|
|
163
|
+
* Cool control boundary. Softer and cooler than the a11y floor at 0.635, still
|
|
164
|
+
* clears 3:1 on the page, a card and a recessed toolbar — so inputs speak the
|
|
165
|
+
* same language as the cool hairlines without failing WCAG 1.4.11.
|
|
166
|
+
*/
|
|
167
|
+
readonly 642: "oklch(0.642 0.012 264)";
|
|
168
|
+
/** the reference `--ring` (dark), 4.18:1 against the dark page. */
|
|
169
|
+
readonly 556: "oklch(0.556 0 0)";
|
|
170
|
+
/**
|
|
171
|
+
* rowkit's correction to the reference `--muted-foreground` in light mode.
|
|
172
|
+
*
|
|
173
|
+
* The reference design's 0.556 is 4.73:1 on white but only 4.34:1 on `--muted`, the
|
|
174
|
+
* recessed surface a table header sits on — and a table header is the single
|
|
175
|
+
* most common use this token has.
|
|
176
|
+
*
|
|
177
|
+
* 0.547 was the first attempt and shipped 4.51:1 in floating point; axe,
|
|
178
|
+
* reading the painted `#717171`, called it 4.47:1 and failed twenty-four
|
|
179
|
+
* stories. See {@link gray[635]} — same lesson, same cause. 0.535 measures
|
|
180
|
+
* 4.75:1 on `--muted` and 5.17:1 on the page.
|
|
181
|
+
*/
|
|
182
|
+
readonly 535: "oklch(0.535 0 0)";
|
|
183
|
+
/** Pressed row in dark mode. */
|
|
184
|
+
readonly 371: "oklch(0.371 0 0)";
|
|
185
|
+
/** the reference `--secondary`, `--muted`, `--accent` (dark). */
|
|
186
|
+
readonly 269: "oklch(0.269 0 0)";
|
|
187
|
+
/** the reference `--primary` (light), `--card` and `--popover` (dark). */
|
|
188
|
+
readonly 205: "oklch(0.205 0 0)";
|
|
189
|
+
/** the reference `--foreground` (light), `--background` (dark). */
|
|
190
|
+
readonly 145: "oklch(0.145 0 0)";
|
|
191
|
+
};
|
|
192
|
+
/**
|
|
193
|
+
* The reference design's destructive red, clamped into sRGB. Keyed by lightness, like `gray`.
|
|
194
|
+
*
|
|
195
|
+
* the reference design publishes `oklch(0.577 0.245 27.325)`, and that chroma **does not fit
|
|
196
|
+
* in sRGB** — 0.235 is the maximum at this lightness and hue. The difference is
|
|
197
|
+
* invisible; what it buys is a colour that renders identically on an sRGB
|
|
198
|
+
* monitor and a P3 laptop, instead of one each browser gamut-maps by its own
|
|
199
|
+
* rules. rowkit clamps every chromatic primitive for this reason, and
|
|
200
|
+
* `color.test.ts` enforces it.
|
|
201
|
+
*
|
|
202
|
+
* One red serves both themes. The reference design's dark `--destructive` is a lighter
|
|
203
|
+
* `oklch(0.704 …)`, which carries its white label at **2.86:1** — the single
|
|
204
|
+
* worst failure in the reference design's default set. Reusing the light value gives 4.90:1
|
|
205
|
+
* on the label in both themes and still clears 4.04:1 against the dark page.
|
|
206
|
+
*/
|
|
207
|
+
export declare const red: {
|
|
208
|
+
/** Soft text on a dark subtle wash. Chroma clamped for sRGB. */
|
|
209
|
+
readonly 850: "oklch(0.85 0.08 25)";
|
|
210
|
+
/** Destructive fill. The reference design's lightness, chroma clamped. */
|
|
211
|
+
readonly 577: "oklch(0.577 0.235 27.325)";
|
|
212
|
+
/** Destructive hover — darkens in both themes, so the white label improves. */
|
|
213
|
+
readonly 520: "oklch(0.52 0.212 27.325)";
|
|
214
|
+
/** Soft border on a dark subtle wash. */
|
|
215
|
+
readonly 350: "oklch(0.38 0.055 25)";
|
|
216
|
+
/** Soft fill in dark mode — quiet red wash, not a solid brick. */
|
|
217
|
+
readonly 260: "oklch(0.32 0.045 25)";
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* Success and warning, at the reference design's weight. Keyed by lightness, like `gray`.
|
|
221
|
+
*
|
|
222
|
+
* the reference design has no equivalent to copy, so the rule is consistency rather than
|
|
223
|
+
* fidelity: the solid step sits at the same lightness band as `red-577` and
|
|
224
|
+
* carries a white label, so a success, a warning and a destructive button are
|
|
225
|
+
* the same perceptual weight and only differ in hue.
|
|
226
|
+
*
|
|
227
|
+
* That is a real change for warning, which used to be bright amber with dark
|
|
228
|
+
* text. Bright amber is the loudest thing on a the reference design page — the language is
|
|
229
|
+
* built on restraint, and one saturated chip undoes it. Chroma is clamped to
|
|
230
|
+
* the sRGB boundary at every step, as everywhere else.
|
|
231
|
+
*/
|
|
232
|
+
export declare const green: {
|
|
233
|
+
/** Badge fill, light. */
|
|
234
|
+
readonly 950: "oklch(0.95 0.05 152)";
|
|
235
|
+
/** Badge border, light. */
|
|
236
|
+
readonly 880: "oklch(0.88 0.05 152)";
|
|
237
|
+
/** Badge text, dark. */
|
|
238
|
+
readonly 850: "oklch(0.85 0.12 152)";
|
|
239
|
+
/** Solid fill, both themes. White label at 4.56:1. */
|
|
240
|
+
readonly 550: "oklch(0.55 0.144 152)";
|
|
241
|
+
/** Solid hover — darkens, so the white label improves. */
|
|
242
|
+
readonly 520: "oklch(0.52 0.136 152)";
|
|
243
|
+
/** Badge text, light. */
|
|
244
|
+
readonly 400: "oklch(0.4 0.105 152)";
|
|
245
|
+
/** Badge border, dark. */
|
|
246
|
+
readonly 350: "oklch(0.35 0.092 152)";
|
|
247
|
+
/** Badge fill, dark. */
|
|
248
|
+
readonly 260: "oklch(0.26 0.068 152)";
|
|
249
|
+
};
|
|
250
|
+
/** Warning, mirroring {@link green} step for step. */
|
|
251
|
+
export declare const amber: {
|
|
252
|
+
readonly 950: "oklch(0.95 0.04 75)";
|
|
253
|
+
readonly 880: "oklch(0.88 0.05 75)";
|
|
254
|
+
readonly 850: "oklch(0.85 0.12 75)";
|
|
255
|
+
/** Solid fill, both themes. White label at 4.96:1. */
|
|
256
|
+
readonly 550: "oklch(0.55 0.116 75)";
|
|
257
|
+
readonly 520: "oklch(0.52 0.109 75)";
|
|
258
|
+
readonly 400: "oklch(0.4 0.084 75)";
|
|
259
|
+
readonly 350: "oklch(0.35 0.074 75)";
|
|
260
|
+
readonly 260: "oklch(0.26 0.055 75)";
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* White at a fraction of opacity, for dark-mode borders.
|
|
264
|
+
*
|
|
265
|
+
* Alpha, not a solid grey: a grey tuned for `--background` draws too hard a
|
|
266
|
+
* line once the same border sits on `--card`. The reference uses 10% / 15%;
|
|
267
|
+
* rowkit softens the decorative hairline to 8% so dense tables stay quiet in
|
|
268
|
+
* dark mode the same way the cool light hairline does.
|
|
269
|
+
*/
|
|
270
|
+
export declare const whiteAlpha: {
|
|
271
|
+
/** Soft decorative hairline in dark mode. */
|
|
272
|
+
readonly 8: "oklch(1 0 0 / 8%)";
|
|
273
|
+
/** the reference dark `--border`. */
|
|
274
|
+
readonly 10: "oklch(1 0 0 / 10%)";
|
|
275
|
+
/** Emphasised dark hairline / the reference dark `--input`. */
|
|
276
|
+
readonly 15: "oklch(1 0 0 / 15%)";
|
|
277
|
+
};
|
|
100
278
|
/**
|
|
101
279
|
* Every primitive colour, keyed by the CSS custom property it becomes.
|
|
102
280
|
*
|
|
@@ -159,6 +337,47 @@ export declare const colorPrimitives: {
|
|
|
159
337
|
readonly "neutral-800": string;
|
|
160
338
|
readonly "neutral-900": string;
|
|
161
339
|
readonly "neutral-950": string;
|
|
340
|
+
readonly "white-alpha-8": string;
|
|
341
|
+
readonly "white-alpha-10": string;
|
|
342
|
+
readonly "white-alpha-15": string;
|
|
343
|
+
readonly "amber-400": string;
|
|
344
|
+
readonly "amber-950": string;
|
|
345
|
+
readonly "amber-850": string;
|
|
346
|
+
readonly "amber-520": string;
|
|
347
|
+
readonly "amber-350": string;
|
|
348
|
+
readonly "amber-260": string;
|
|
349
|
+
readonly "amber-880": string;
|
|
350
|
+
readonly "amber-550": string;
|
|
351
|
+
readonly "green-400": string;
|
|
352
|
+
readonly "green-950": string;
|
|
353
|
+
readonly "green-850": string;
|
|
354
|
+
readonly "green-520": string;
|
|
355
|
+
readonly "green-350": string;
|
|
356
|
+
readonly "green-260": string;
|
|
357
|
+
readonly "green-880": string;
|
|
358
|
+
readonly "green-550": string;
|
|
359
|
+
readonly "red-850": string;
|
|
360
|
+
readonly "red-577": string;
|
|
361
|
+
readonly "red-520": string;
|
|
362
|
+
readonly "red-350": string;
|
|
363
|
+
readonly "red-260": string;
|
|
364
|
+
readonly "gray-988": string;
|
|
365
|
+
readonly "gray-985": string;
|
|
366
|
+
readonly "gray-972": string;
|
|
367
|
+
readonly "gray-970": string;
|
|
368
|
+
readonly "gray-940": string;
|
|
369
|
+
readonly "gray-922": string;
|
|
370
|
+
readonly "gray-905": string;
|
|
371
|
+
readonly "gray-870": string;
|
|
372
|
+
readonly "gray-708": string;
|
|
373
|
+
readonly "gray-635": string;
|
|
374
|
+
readonly "gray-642": string;
|
|
375
|
+
readonly "gray-556": string;
|
|
376
|
+
readonly "gray-535": string;
|
|
377
|
+
readonly "gray-371": string;
|
|
378
|
+
readonly "gray-269": string;
|
|
379
|
+
readonly "gray-205": string;
|
|
380
|
+
readonly "gray-145": string;
|
|
162
381
|
readonly white: "oklch(1 0 0)";
|
|
163
382
|
readonly black: "oklch(0 0 0)";
|
|
164
383
|
};
|
|
@@ -172,17 +391,29 @@ export type ColorRef = `var(--color-${string})`;
|
|
|
172
391
|
* hunting down hex codes. `semantic.test.ts` enforces this.
|
|
173
392
|
*/
|
|
174
393
|
export declare const semanticColorLight: {
|
|
175
|
-
/**
|
|
394
|
+
/**
|
|
395
|
+
* Page background, behind all surfaces.
|
|
396
|
+
*
|
|
397
|
+
* Soft cool off-white rather than the reference pure white — less glare over
|
|
398
|
+
* a long session, and enough lift that a white `card` still reads as a plane.
|
|
399
|
+
*/
|
|
176
400
|
readonly background: `var(--color-${string})`;
|
|
177
|
-
/** Cards, panels, table bodies — the plane content sits on. */
|
|
178
|
-
readonly
|
|
179
|
-
/**
|
|
180
|
-
|
|
401
|
+
/** Cards, panels, table bodies — the plane content sits on. The reference `--card`. */
|
|
402
|
+
readonly card: `var(--color-${string})`;
|
|
403
|
+
/**
|
|
404
|
+
* Table headers, toolbars: a surface that recedes slightly.
|
|
405
|
+
*
|
|
406
|
+
* Cool and a touch lighter than the reference `--muted`. Same role as
|
|
407
|
+
* `accent` out of the box — separate override points, not different colours.
|
|
408
|
+
*/
|
|
409
|
+
readonly muted: `var(--color-${string})`;
|
|
181
410
|
/** Row hover. */
|
|
182
|
-
readonly
|
|
183
|
-
/** Row press / active. */
|
|
411
|
+
readonly accent: `var(--color-${string})`;
|
|
412
|
+
/** Row press / active. One step past hover; the reference design has no press token. */
|
|
184
413
|
readonly 'surface-active': `var(--color-${string})`;
|
|
185
|
-
/**
|
|
414
|
+
/**
|
|
415
|
+
* Selected table row. Quiet primary wash — distinct from hover, not a shout.
|
|
416
|
+
*/
|
|
186
417
|
readonly 'surface-selected': `var(--color-${string})`;
|
|
187
418
|
/** Disabled control background. */
|
|
188
419
|
readonly 'surface-disabled': `var(--color-${string})`;
|
|
@@ -198,18 +429,17 @@ export declare const semanticColorLight: {
|
|
|
198
429
|
* reader to perceive and WCAG 1.4.11 does not apply.
|
|
199
430
|
*/
|
|
200
431
|
readonly skeleton: `var(--color-${string})`;
|
|
201
|
-
/** Primary body and heading text. */
|
|
202
|
-
readonly
|
|
432
|
+
/** Primary body and heading text. The reference `--foreground`. */
|
|
433
|
+
readonly foreground: `var(--color-${string})`;
|
|
203
434
|
/**
|
|
204
|
-
* Secondary text, column labels, help text.
|
|
435
|
+
* Secondary text, column labels, help text. The reference `--muted-foreground`.
|
|
205
436
|
*
|
|
206
|
-
* `
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
* hierarchy survives.
|
|
437
|
+
* `gray-535`, not the reference design's 0.556. The same trap the old `neutral-500` fell
|
|
438
|
+
* into: a table header is muted text on `surface-subtle`, and the reference design's value
|
|
439
|
+
* reaches 4.73:1 on white but only 4.34:1 on the recessed surface this token
|
|
440
|
+
* is most often used against. Nine thousandths of lightness buy the pass.
|
|
211
441
|
*/
|
|
212
|
-
readonly '
|
|
442
|
+
readonly 'muted-foreground': `var(--color-${string})`;
|
|
213
443
|
/** Placeholders and de-emphasised metadata. */
|
|
214
444
|
readonly 'text-subtle': `var(--color-${string})`;
|
|
215
445
|
/** Text on a disabled control. */
|
|
@@ -217,8 +447,9 @@ export declare const semanticColorLight: {
|
|
|
217
447
|
/**
|
|
218
448
|
* Decorative hairline: row separators, card outlines.
|
|
219
449
|
*
|
|
220
|
-
*
|
|
221
|
-
* of an interactive control
|
|
450
|
+
* Cool and lighter than the reference 0.922. Deliberately below 3:1 — do not
|
|
451
|
+
* use it for the boundary of an interactive control; see
|
|
452
|
+
* {@link semanticColorLight['input']}.
|
|
222
453
|
*/
|
|
223
454
|
readonly border: `var(--color-${string})`;
|
|
224
455
|
/** Emphasised decorative border: dividers that need to read as structure. */
|
|
@@ -226,17 +457,25 @@ export declare const semanticColorLight: {
|
|
|
226
457
|
/** Barely-there separation inside a dense group. */
|
|
227
458
|
readonly 'border-subtle': `var(--color-${string})`;
|
|
228
459
|
/**
|
|
229
|
-
* Boundary of an interactive control — text inputs,
|
|
460
|
+
* Boundary of an interactive control — text inputs, selects, outlined
|
|
230
461
|
* buttons.
|
|
231
462
|
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
463
|
+
* Quiet on purpose (structure without severity). Resting edges sit near the
|
|
464
|
+
* decorative hairline; the focus treatment (`border-ring` + ring) is what
|
|
465
|
+
* carries WCAG 1.4.11. Matching the reference design's soft resting edge
|
|
466
|
+
* rather than a 3:1 ink outline that shouted next to every field.
|
|
236
467
|
*/
|
|
237
|
-
readonly
|
|
238
|
-
/**
|
|
239
|
-
|
|
468
|
+
readonly input: `var(--color-${string})`;
|
|
469
|
+
/**
|
|
470
|
+
* Focus ring. Never remove the ring — recolour it.
|
|
471
|
+
*
|
|
472
|
+
* Soft silver — the payment-form / shadcn weight (`gray-708`), not ink.
|
|
473
|
+
* Intentionally under 3:1 as a solid; the visible treatment is
|
|
474
|
+
* `border-ring` plus a translucent outer ring, not a black halo.
|
|
475
|
+
* Every control that focuses (Button, Input, Select, Dialog close,
|
|
476
|
+
* Pagination, FilterBar chips, DataTable, Toast) reads this same token.
|
|
477
|
+
*/
|
|
478
|
+
readonly ring: `var(--color-${string})`;
|
|
240
479
|
/** Base colour shadows are mixed from. */
|
|
241
480
|
readonly shadow: `var(--color-${string})`;
|
|
242
481
|
readonly 'neutral-solid': `var(--color-${string})`;
|
|
@@ -245,6 +484,10 @@ export declare const semanticColorLight: {
|
|
|
245
484
|
readonly 'neutral-subtle': `var(--color-${string})`;
|
|
246
485
|
readonly 'neutral-on-subtle': `var(--color-${string})`;
|
|
247
486
|
readonly 'neutral-border': `var(--color-${string})`;
|
|
487
|
+
/**
|
|
488
|
+
* Warm espresso solid — premium brown-graphite, not a black brick.
|
|
489
|
+
* `primary-800` ≈ `oklch(0.31 0.038 48)`.
|
|
490
|
+
*/
|
|
248
491
|
readonly 'primary-solid': `var(--color-${string})`;
|
|
249
492
|
readonly 'primary-solid-hover': `var(--color-${string})`;
|
|
250
493
|
readonly 'primary-on-solid': `var(--color-${string})`;
|
|
@@ -273,30 +516,31 @@ export declare const semanticColorLight: {
|
|
|
273
516
|
/**
|
|
274
517
|
* Dark-mode semantic colours, applied under `.dark`.
|
|
275
518
|
*
|
|
276
|
-
*
|
|
277
|
-
*
|
|
278
|
-
* reaches 3.6–4.4:1 against the background — the button itself becomes hard to
|
|
279
|
-
* locate even though its label is legible. The `400` fill scores 7.4–8.5:1 on
|
|
280
|
-
* both label and background.
|
|
519
|
+
* Soft ink fills invert on dark pages: a near-white solid with dark type,
|
|
520
|
+
* rather than a mid-grey that disappears into the chrome.
|
|
281
521
|
*/
|
|
282
522
|
export declare const semanticColorDark: {
|
|
283
523
|
readonly background: `var(--color-${string})`;
|
|
284
|
-
readonly
|
|
285
|
-
readonly
|
|
286
|
-
readonly
|
|
524
|
+
readonly card: `var(--color-${string})`;
|
|
525
|
+
readonly muted: `var(--color-${string})`;
|
|
526
|
+
readonly accent: `var(--color-${string})`;
|
|
287
527
|
readonly 'surface-active': `var(--color-${string})`;
|
|
288
528
|
readonly 'surface-selected': `var(--color-${string})`;
|
|
289
529
|
readonly 'surface-disabled': `var(--color-${string})`;
|
|
290
530
|
readonly skeleton: `var(--color-${string})`;
|
|
291
|
-
readonly
|
|
292
|
-
readonly '
|
|
531
|
+
readonly foreground: `var(--color-${string})`;
|
|
532
|
+
readonly 'muted-foreground': `var(--color-${string})`;
|
|
293
533
|
readonly 'text-subtle': `var(--color-${string})`;
|
|
294
534
|
readonly 'text-disabled': `var(--color-${string})`;
|
|
295
535
|
readonly border: `var(--color-${string})`;
|
|
296
536
|
readonly 'border-strong': `var(--color-${string})`;
|
|
297
537
|
readonly 'border-subtle': `var(--color-${string})`;
|
|
298
|
-
readonly
|
|
299
|
-
|
|
538
|
+
readonly input: `var(--color-${string})`;
|
|
539
|
+
/**
|
|
540
|
+
* Soft focus — white at the same quiet weight as the control border, not a
|
|
541
|
+
* bright primary wash. Reads as a silver edge on dark surfaces.
|
|
542
|
+
*/
|
|
543
|
+
readonly ring: `var(--color-${string})`;
|
|
300
544
|
readonly shadow: `var(--color-${string})`;
|
|
301
545
|
readonly 'neutral-solid': `var(--color-${string})`;
|
|
302
546
|
readonly 'neutral-solid-hover': `var(--color-${string})`;
|