@mindlogic-ai/logician-ui 4.0.0-alpha.21 → 4.0.0-alpha.23
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/dist/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
- package/dist/components/ErrorFallback/ErrorFallback.js +13 -2
- package/dist/components/ErrorFallback/ErrorFallback.js.map +1 -1
- package/dist/components/ErrorFallback/ErrorFallback.mjs +13 -2
- package/dist/components/ErrorFallback/ErrorFallback.mjs.map +1 -1
- package/dist/components/FileInput/FileInput.d.ts.map +1 -1
- package/dist/components/FileInput/FileInput.js +7 -1
- package/dist/components/FileInput/FileInput.js.map +1 -1
- package/dist/components/FileInput/FileInput.mjs +7 -1
- package/dist/components/FileInput/FileInput.mjs.map +1 -1
- package/dist/components/Markdown/Markdown.d.ts.map +1 -1
- package/dist/components/Markdown/Markdown.js +6 -1
- package/dist/components/Markdown/Markdown.js.map +1 -1
- package/dist/components/Markdown/Markdown.mjs +6 -1
- package/dist/components/Markdown/Markdown.mjs.map +1 -1
- package/dist/components/Pagination/Pagination.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.js +6 -1
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Pagination/Pagination.mjs +6 -1
- package/dist/components/Pagination/Pagination.mjs.map +1 -1
- package/dist/components/Radio/RadioControl.d.ts.map +1 -1
- package/dist/components/Radio/RadioControl.js +14 -1
- package/dist/components/Radio/RadioControl.js.map +1 -1
- package/dist/components/Radio/RadioControl.mjs +15 -2
- package/dist/components/Radio/RadioControl.mjs.map +1 -1
- package/dist/components/Select/ComboboxField.d.ts +1 -1
- package/dist/components/Select/ComboboxField.d.ts.map +1 -1
- package/dist/components/Select/ComboboxField.js +2 -2
- package/dist/components/Select/ComboboxField.js.map +1 -1
- package/dist/components/Select/ComboboxField.mjs +2 -2
- package/dist/components/Select/ComboboxField.mjs.map +1 -1
- package/dist/components/Select/Select.types.d.ts +16 -0
- package/dist/components/Select/Select.types.d.ts.map +1 -1
- package/dist/components/Select/SelectField.d.ts +1 -1
- package/dist/components/Select/SelectField.d.ts.map +1 -1
- package/dist/components/Select/SelectField.js +2 -2
- package/dist/components/Select/SelectField.js.map +1 -1
- package/dist/components/Select/SelectField.mjs +2 -2
- package/dist/components/Select/SelectField.mjs.map +1 -1
- package/dist/components/Slider/Slider.d.ts.map +1 -1
- package/dist/components/Slider/Slider.js +2 -2
- package/dist/components/Slider/Slider.js.map +1 -1
- package/dist/components/Slider/Slider.mjs +3 -3
- package/dist/components/Slider/Slider.mjs.map +1 -1
- package/dist/components/Slider/Slider.types.d.ts +15 -0
- package/dist/components/Slider/Slider.types.d.ts.map +1 -1
- package/dist/components/Typography/Link.d.ts +25 -0
- package/dist/components/Typography/Link.d.ts.map +1 -1
- package/dist/components/Typography/Link.js +44 -7
- package/dist/components/Typography/Link.js.map +1 -1
- package/dist/components/Typography/Link.mjs +44 -8
- package/dist/components/Typography/Link.mjs.map +1 -1
- package/dist/components/Typography/Subtitle.d.ts +17 -0
- package/dist/components/Typography/Subtitle.d.ts.map +1 -1
- package/dist/components/Typography/Subtitle.js +18 -1
- package/dist/components/Typography/Subtitle.js.map +1 -1
- package/dist/components/Typography/Subtitle.mjs +18 -1
- package/dist/components/Typography/Subtitle.mjs.map +1 -1
- package/dist/components/Typography/index.d.ts +1 -1
- package/dist/components/Typography/index.d.ts.map +1 -1
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.d.ts.map +1 -1
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.js +19 -2
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.js.map +1 -1
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.mjs +19 -2
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.mjs.map +1 -1
- package/dist/theme/colors.d.ts +145 -37
- package/dist/theme/colors.d.ts.map +1 -1
- package/dist/theme/colors.js +98 -68
- package/dist/theme/colors.js.map +1 -1
- package/dist/theme/colors.mjs +98 -68
- package/dist/theme/colors.mjs.map +1 -1
- package/package.json +2 -1
- package/src/components/ErrorFallback/ErrorFallback.tsx +30 -3
- package/src/components/FileInput/FileInput.tsx +11 -2
- package/src/components/Markdown/Markdown.tsx +6 -1
- package/src/components/Pagination/Pagination.tsx +5 -0
- package/src/components/Radio/RadioControl.tsx +20 -6
- package/src/components/Select/ComboboxField.tsx +11 -1
- package/src/components/Select/Select.types.ts +16 -0
- package/src/components/Select/SelectField.tsx +14 -1
- package/src/components/Slider/Slider.tsx +16 -1
- package/src/components/Slider/Slider.types.ts +15 -0
- package/src/components/Typography/Link.tsx +44 -7
- package/src/components/Typography/Subtitle.tsx +17 -1
- package/src/components/Typography/index.ts +1 -1
- package/src/components/Workflow/canvas/NodePalette/NodePalette.tsx +12 -2
- package/src/components/a11y.kwcag.test.tsx +412 -0
- package/src/theme/colors.ts +99 -69
package/src/theme/colors.ts
CHANGED
|
@@ -60,36 +60,11 @@
|
|
|
60
60
|
* <Badge bgColor="success.lightest" color="success.dark" />
|
|
61
61
|
* ```
|
|
62
62
|
*/
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
* dark-mode neutral below (`slate.*`, and the `_dark` of `bg`/`fg`/`border`)
|
|
69
|
-
* resolves to this desaturated mirror instead of the raw `gray` step. Light
|
|
70
|
-
* mode is untouched — it keeps referencing `{colors.gray.*}` verbatim.
|
|
71
|
-
*
|
|
72
|
-
* Single source of truth: change a dark neutral here, not at each token.
|
|
73
|
-
*/
|
|
74
|
-
const desaturatedGray = {
|
|
75
|
-
0: '#FEFEFF',
|
|
76
|
-
50: '#F8F9FB',
|
|
77
|
-
100: '#F2F4F7',
|
|
78
|
-
200: '#E5E8EC',
|
|
79
|
-
300: '#D2D5DB',
|
|
80
|
-
400: '#B6BAC3',
|
|
81
|
-
500: '#A2A6B1',
|
|
82
|
-
600: '#8E939F',
|
|
83
|
-
700: '#7C818D',
|
|
84
|
-
800: '#6A6F7C',
|
|
85
|
-
900: '#595E6B',
|
|
86
|
-
1000: '#4A4E5A',
|
|
87
|
-
1100: '#3C404B',
|
|
88
|
-
1200: '#30343C',
|
|
89
|
-
1300: '#23262E',
|
|
90
|
-
1400: '#181A20',
|
|
91
|
-
1500: '#0E1014',
|
|
92
|
-
} as const;
|
|
63
|
+
// The dark-mode neutral family now lives in `colors.grayDark` (see below) so
|
|
64
|
+
// consumers can retint dark surfaces by overriding a primitive scale — exactly
|
|
65
|
+
// like `blue.*` for the brand ramp — instead of these values being unreachable
|
|
66
|
+
// hex literals. Every dark-mode neutral in the semantic tokens (`slate.*`, and
|
|
67
|
+
// the `_dark` of `bg`/`fg`/`border`) references `{colors.grayDark.N}`.
|
|
93
68
|
|
|
94
69
|
export const semanticTokens = {
|
|
95
70
|
colors: {
|
|
@@ -303,48 +278,56 @@ export const semanticTokens = {
|
|
|
303
278
|
* dark canvas/surface — the straight mirrors measured ~3.0–3.9 there.
|
|
304
279
|
*/
|
|
305
280
|
slate: {
|
|
306
|
-
0: {
|
|
307
|
-
|
|
281
|
+
0: {
|
|
282
|
+
value: { base: '{colors.gray.0}', _dark: '{colors.grayDark.1500}' },
|
|
283
|
+
},
|
|
284
|
+
50: {
|
|
285
|
+
value: { base: '{colors.gray.50}', _dark: '{colors.grayDark.1400}' },
|
|
286
|
+
},
|
|
308
287
|
100: {
|
|
309
|
-
value: { base: '{colors.gray.100}', _dark:
|
|
288
|
+
value: { base: '{colors.gray.100}', _dark: '{colors.grayDark.1300}' },
|
|
310
289
|
},
|
|
311
290
|
200: {
|
|
312
|
-
value: { base: '{colors.gray.200}', _dark:
|
|
291
|
+
value: { base: '{colors.gray.200}', _dark: '{colors.grayDark.1200}' },
|
|
313
292
|
},
|
|
314
293
|
300: {
|
|
315
|
-
value: { base: '{colors.gray.300}', _dark:
|
|
294
|
+
value: { base: '{colors.gray.300}', _dark: '{colors.grayDark.1100}' },
|
|
316
295
|
},
|
|
317
296
|
400: {
|
|
318
|
-
value: { base: '{colors.gray.400}', _dark:
|
|
297
|
+
value: { base: '{colors.gray.400}', _dark: '{colors.grayDark.1000}' },
|
|
319
298
|
},
|
|
320
299
|
500: {
|
|
321
|
-
value: { base: '{colors.gray.500}', _dark:
|
|
300
|
+
value: { base: '{colors.gray.500}', _dark: '{colors.grayDark.900}' },
|
|
301
|
+
},
|
|
302
|
+
600: {
|
|
303
|
+
value: { base: '{colors.gray.600}', _dark: '{colors.grayDark.fg600}' },
|
|
304
|
+
},
|
|
305
|
+
700: {
|
|
306
|
+
value: { base: '{colors.gray.700}', _dark: '{colors.grayDark.fg700}' },
|
|
322
307
|
},
|
|
323
|
-
600: { value: { base: '{colors.gray.600}', _dark: '#898E99' } },
|
|
324
|
-
700: { value: { base: '{colors.gray.700}', _dark: '#8D919D' } },
|
|
325
308
|
800: {
|
|
326
|
-
value: { base: '{colors.gray.800}', _dark:
|
|
309
|
+
value: { base: '{colors.gray.800}', _dark: '{colors.grayDark.600}' },
|
|
327
310
|
},
|
|
328
311
|
900: {
|
|
329
|
-
value: { base: '{colors.gray.900}', _dark:
|
|
312
|
+
value: { base: '{colors.gray.900}', _dark: '{colors.grayDark.500}' },
|
|
330
313
|
},
|
|
331
314
|
1000: {
|
|
332
|
-
value: { base: '{colors.gray.1000}', _dark:
|
|
315
|
+
value: { base: '{colors.gray.1000}', _dark: '{colors.grayDark.400}' },
|
|
333
316
|
},
|
|
334
317
|
1100: {
|
|
335
|
-
value: { base: '{colors.gray.1100}', _dark:
|
|
318
|
+
value: { base: '{colors.gray.1100}', _dark: '{colors.grayDark.300}' },
|
|
336
319
|
},
|
|
337
320
|
1200: {
|
|
338
|
-
value: { base: '{colors.gray.1200}', _dark:
|
|
321
|
+
value: { base: '{colors.gray.1200}', _dark: '{colors.grayDark.200}' },
|
|
339
322
|
},
|
|
340
323
|
1300: {
|
|
341
|
-
value: { base: '{colors.gray.1300}', _dark:
|
|
324
|
+
value: { base: '{colors.gray.1300}', _dark: '{colors.grayDark.100}' },
|
|
342
325
|
},
|
|
343
326
|
1400: {
|
|
344
|
-
value: { base: '{colors.gray.1400}', _dark:
|
|
327
|
+
value: { base: '{colors.gray.1400}', _dark: '{colors.grayDark.50}' },
|
|
345
328
|
},
|
|
346
329
|
1500: {
|
|
347
|
-
value: { base: '{colors.gray.1500}', _dark:
|
|
330
|
+
value: { base: '{colors.gray.1500}', _dark: '{colors.grayDark.0}' },
|
|
348
331
|
},
|
|
349
332
|
},
|
|
350
333
|
|
|
@@ -366,13 +349,13 @@ export const semanticTokens = {
|
|
|
366
349
|
// value, so light is untouched); `_dark` rejoins our neutral floor instead
|
|
367
350
|
// of Chakra's off-palette black.
|
|
368
351
|
DEFAULT: {
|
|
369
|
-
value: { _light: '{colors.white}', _dark:
|
|
352
|
+
value: { _light: '{colors.white}', _dark: '{colors.grayDark.1500}' },
|
|
370
353
|
},
|
|
371
354
|
canvas: {
|
|
372
|
-
value: { base: '{colors.gray.0}', _dark:
|
|
355
|
+
value: { base: '{colors.gray.0}', _dark: '{colors.grayDark.1500}' },
|
|
373
356
|
},
|
|
374
357
|
surface: {
|
|
375
|
-
value: { base: '{colors.white}', _dark:
|
|
358
|
+
value: { base: '{colors.white}', _dark: '{colors.grayDark.1400}' },
|
|
376
359
|
},
|
|
377
360
|
// Strongly-raised neutral surface — one level above `surface` (e.g. the
|
|
378
361
|
// selected thumb of a SegmentedControl). In dark this is the *lightest*
|
|
@@ -384,7 +367,7 @@ export const semanticTokens = {
|
|
|
384
367
|
// cannot be overridden via semanticTokens in this setup (it keeps
|
|
385
368
|
// resolving to Chakra's own gray.200), whereas a fresh name is honoured.
|
|
386
369
|
raised: {
|
|
387
|
-
value: { base: '{colors.white}', _dark:
|
|
370
|
+
value: { base: '{colors.white}', _dark: '{colors.grayDark.1100}' },
|
|
388
371
|
},
|
|
389
372
|
// `_light` (not `base`): Chakra's defaults for `bg.subtle`/`bg.muted` are
|
|
390
373
|
// `{ _light: gray.50 }` / `{ _light: gray.100 }`, which outrank `base` in
|
|
@@ -393,13 +376,13 @@ export const semanticTokens = {
|
|
|
393
376
|
// either value ever diverges (as `border.subtle`/`fg.muted`/`fg.subtle`
|
|
394
377
|
// already did). No visible change.
|
|
395
378
|
subtle: {
|
|
396
|
-
value: { _light: '{colors.gray.50}', _dark:
|
|
379
|
+
value: { _light: '{colors.gray.50}', _dark: '{colors.grayDark.1300}' },
|
|
397
380
|
},
|
|
398
381
|
muted: {
|
|
399
|
-
value: { _light: '{colors.gray.100}', _dark:
|
|
382
|
+
value: { _light: '{colors.gray.100}', _dark: '{colors.grayDark.1200}' },
|
|
400
383
|
},
|
|
401
384
|
inverse: {
|
|
402
|
-
value: { base: '{colors.gray.1300}', _dark:
|
|
385
|
+
value: { base: '{colors.gray.1300}', _dark: '{colors.grayDark.50}' },
|
|
403
386
|
},
|
|
404
387
|
// Sunken page wash for list/overview surfaces: a gray floor in light so
|
|
405
388
|
// `bg.surface` cards read as raised above it. In dark the `bg.*` ramp is
|
|
@@ -407,7 +390,7 @@ export const semanticTokens = {
|
|
|
407
390
|
// that elevation — so the dark value drops to the canvas floor instead.
|
|
408
391
|
// Component-level fills (hover, chips, inner blocks) keep using `bg.subtle`.
|
|
409
392
|
sunken: {
|
|
410
|
-
value: { base: '{colors.gray.50}', _dark:
|
|
393
|
+
value: { base: '{colors.gray.50}', _dark: '{colors.grayDark.1500}' },
|
|
411
394
|
},
|
|
412
395
|
// Recessed control-track surface for "meter"-style components whose
|
|
413
396
|
// unfilled track carries meaning (Switch off-state, Slider rail,
|
|
@@ -415,11 +398,11 @@ export const semanticTokens = {
|
|
|
415
398
|
// `bg.muted` (gray.50 / gray.100), which collapse into the `bg.sunken`
|
|
416
399
|
// page wash in light mode, this sits at gray.300 so the track reads as a
|
|
417
400
|
// filled surface on any background. Dark keeps the `bg.muted` value
|
|
418
|
-
// (
|
|
401
|
+
// (grayDark.1200) — already lighter than the dark canvas/surface,
|
|
419
402
|
// so it reads there without change. Use this only for control tracks, not
|
|
420
403
|
// as a general fill (that stays `bg.subtle` / `bg.muted`).
|
|
421
404
|
track: {
|
|
422
|
-
value: { base: '{colors.gray.300}', _dark:
|
|
405
|
+
value: { base: '{colors.gray.300}', _dark: '{colors.grayDark.1200}' },
|
|
423
406
|
},
|
|
424
407
|
// Override Chakra's default `bg.panel` (whose `_dark` resolves to Chakra's
|
|
425
408
|
// own gray.950 = #111111, off our slate palette). Light value is white —
|
|
@@ -428,7 +411,7 @@ export const semanticTokens = {
|
|
|
428
411
|
// (not `base`) for the same reason as `bg.subtle`/`bg.muted`: Chakra's
|
|
429
412
|
// default `bg.panel` is `{ _light: white }`, which would outrank `base`.
|
|
430
413
|
panel: {
|
|
431
|
-
value: { _light: '{colors.white}', _dark:
|
|
414
|
+
value: { _light: '{colors.white}', _dark: '{colors.grayDark.1400}' },
|
|
432
415
|
},
|
|
433
416
|
/**
|
|
434
417
|
* Row/selection state tints. Use these for selected rows,
|
|
@@ -466,14 +449,14 @@ export const semanticTokens = {
|
|
|
466
449
|
// `_light` repeats Chakra's value (black); `_dark` rejoins our desaturated
|
|
467
450
|
// neutral so legacy html-level text tracks `fg.default`.
|
|
468
451
|
DEFAULT: {
|
|
469
|
-
value: { _light: '{colors.black}', _dark:
|
|
452
|
+
value: { _light: '{colors.black}', _dark: '{colors.grayDark.50}' },
|
|
470
453
|
},
|
|
471
454
|
// Strongest text — headings, titles, key figures, emphasis. This is the
|
|
472
455
|
// near-black step that `fg.default` used to be; `default` is now re-pegged
|
|
473
456
|
// to a lighter body weight (see below), so reach for `emphasized` when you
|
|
474
457
|
// specifically want maximum contrast.
|
|
475
458
|
emphasized: {
|
|
476
|
-
value: { base: '{colors.gray.1300}', _dark:
|
|
459
|
+
value: { base: '{colors.gray.1300}', _dark: '{colors.grayDark.200}' },
|
|
477
460
|
},
|
|
478
461
|
default: {
|
|
479
462
|
// Primary *body* text. Re-pegged from gray.1300 → gray.1000: near-black
|
|
@@ -481,7 +464,7 @@ export const semanticTokens = {
|
|
|
481
464
|
// real product usage clustered well below it. gray.1000 (~9:1) is a
|
|
482
465
|
// comfortable AAA body weight; the old near-black step lives on as
|
|
483
466
|
// `fg.emphasized`. _dark drops one step from emphasized for hierarchy.
|
|
484
|
-
value: { base: '{colors.gray.1000}', _dark:
|
|
467
|
+
value: { base: '{colors.gray.1000}', _dark: '{colors.grayDark.300}' },
|
|
485
468
|
},
|
|
486
469
|
muted: {
|
|
487
470
|
// Secondary text. `_light` (not `base`): Chakra's default `fg.muted` is
|
|
@@ -489,19 +472,22 @@ export const semanticTokens = {
|
|
|
489
472
|
// was shadowed and secondary text rendered gray.600, lighter than our
|
|
490
473
|
// intended gray.900. _dark sits one step below `default` (~9.5:1 on the
|
|
491
474
|
// dark canvas) to keep the default→muted hierarchy gap.
|
|
492
|
-
value: { _light: '{colors.gray.900}', _dark:
|
|
475
|
+
value: { _light: '{colors.gray.900}', _dark: '{colors.grayDark.400}' },
|
|
493
476
|
},
|
|
494
477
|
subtle: {
|
|
495
478
|
// Tertiary / placeholder / icon text. `_light` (not `base`): Chakra's
|
|
496
479
|
// default `fg.subtle` is `{ _light: gray.400 }`, which outranks `base` in
|
|
497
480
|
// light mode — so `base` was shadowed and this rendered gray.400, much
|
|
498
481
|
// lighter than our intended gray.700. _dark a11y-bumped from the straight
|
|
499
|
-
// mirror (
|
|
482
|
+
// mirror (grayDark.600 #8E939F, ~4.06:1 on bg.muted) to #989DA9
|
|
500
483
|
// (~4.6:1) so it clears AA while staying below fg.muted.
|
|
501
|
-
value: {
|
|
484
|
+
value: {
|
|
485
|
+
_light: '{colors.gray.700}',
|
|
486
|
+
_dark: '{colors.grayDark.fgSubtle}',
|
|
487
|
+
},
|
|
502
488
|
},
|
|
503
489
|
inverse: {
|
|
504
|
-
value: { base: '{colors.gray.0}', _dark:
|
|
490
|
+
value: { base: '{colors.gray.0}', _dark: '{colors.grayDark.1400}' },
|
|
505
491
|
},
|
|
506
492
|
},
|
|
507
493
|
|
|
@@ -518,10 +504,10 @@ export const semanticTokens = {
|
|
|
518
504
|
// straight halved-saturation mirror (no a11y bump). `_light` repeats
|
|
519
505
|
// Chakra's value so light is untouched.
|
|
520
506
|
DEFAULT: {
|
|
521
|
-
value: { _light: '{colors.gray.200}', _dark:
|
|
507
|
+
value: { _light: '{colors.gray.200}', _dark: '{colors.grayDark.800}' },
|
|
522
508
|
},
|
|
523
509
|
default: {
|
|
524
|
-
value: { base: '{colors.gray.300}', _dark:
|
|
510
|
+
value: { base: '{colors.gray.300}', _dark: '{colors.grayDark.1100}' },
|
|
525
511
|
},
|
|
526
512
|
subtle: {
|
|
527
513
|
// `_light` (not `base`): Chakra's default `border.subtle` is
|
|
@@ -530,10 +516,10 @@ export const semanticTokens = {
|
|
|
530
516
|
// Chakra's near-white gray.50 (dividers/frames vanish). Pin `_light` so
|
|
531
517
|
// our gray.200 wins. (`border.default`/`strong` are safe: Chakra has no
|
|
532
518
|
// default for those names, so `base` is honoured.)
|
|
533
|
-
value: { _light: '{colors.gray.200}', _dark:
|
|
519
|
+
value: { _light: '{colors.gray.200}', _dark: '{colors.grayDark.1300}' },
|
|
534
520
|
},
|
|
535
521
|
strong: {
|
|
536
|
-
value: { base: '{colors.gray.500}', _dark:
|
|
522
|
+
value: { base: '{colors.gray.500}', _dark: '{colors.grayDark.900}' },
|
|
537
523
|
},
|
|
538
524
|
},
|
|
539
525
|
},
|
|
@@ -748,6 +734,50 @@ export const colors = {
|
|
|
748
734
|
1500: { value: '#0B0E17' }, // Darkest background
|
|
749
735
|
},
|
|
750
736
|
|
|
737
|
+
/**
|
|
738
|
+
* Dark-mode neutral palette — the halved-saturation counterpart of each
|
|
739
|
+
* primitive `gray.N` (same hue and lightness, HSL saturation cut by ~50%,
|
|
740
|
+
* e.g. `gray.1300` #1E2433 @ 26% → #23262E @ 13%). The blue-tinted `gray`
|
|
741
|
+
* ramp reads as the right neutral in light mode but turns muddy/
|
|
742
|
+
* over-chromatic as a dark surface, so every dark-mode neutral in the
|
|
743
|
+
* semantic layer (`slate.*`, and the `_dark` of `bg`/`fg`/`border`) resolves
|
|
744
|
+
* to a step of this scale instead of a raw `gray` step. Light mode is
|
|
745
|
+
* untouched — it keeps referencing `{colors.gray.*}` verbatim.
|
|
746
|
+
*
|
|
747
|
+
* Exposed as a primitive scale (rather than the previous inlined hex
|
|
748
|
+
* literals) so a consumer theme — e.g. FactChat's per-tenant
|
|
749
|
+
* `theme_color_overrides` — can rebrand dark mode by overriding these
|
|
750
|
+
* tokens, the same way overriding `blue.*` retints the `primary.*` ramp.
|
|
751
|
+
*
|
|
752
|
+
* The three `fg*` steps are the hand-tuned a11y lifts documented at their
|
|
753
|
+
* consuming tokens (`slate.600`/`slate.700`/`fg.subtle` in dark mode): the
|
|
754
|
+
* straight mirrors measured under WCAG AA 4.5:1 on the dark canvas/surface,
|
|
755
|
+
* so these sit slightly lighter than their scale neighbours.
|
|
756
|
+
*/
|
|
757
|
+
grayDark: {
|
|
758
|
+
0: { value: '#FEFEFF' },
|
|
759
|
+
50: { value: '#F8F9FB' },
|
|
760
|
+
100: { value: '#F2F4F7' },
|
|
761
|
+
200: { value: '#E5E8EC' },
|
|
762
|
+
300: { value: '#D2D5DB' },
|
|
763
|
+
400: { value: '#B6BAC3' },
|
|
764
|
+
500: { value: '#A2A6B1' },
|
|
765
|
+
600: { value: '#8E939F' },
|
|
766
|
+
700: { value: '#7C818D' },
|
|
767
|
+
800: { value: '#6A6F7C' },
|
|
768
|
+
900: { value: '#595E6B' },
|
|
769
|
+
1000: { value: '#4A4E5A' },
|
|
770
|
+
1100: { value: '#3C404B' },
|
|
771
|
+
1200: { value: '#30343C' },
|
|
772
|
+
1300: { value: '#23262E' },
|
|
773
|
+
1400: { value: '#181A20' },
|
|
774
|
+
1500: { value: '#0E1014' },
|
|
775
|
+
// A11y-lifted foreground steps (see scale doc above).
|
|
776
|
+
fg600: { value: '#898E99' },
|
|
777
|
+
fg700: { value: '#8D919D' },
|
|
778
|
+
fgSubtle: { value: '#989DA9' },
|
|
779
|
+
},
|
|
780
|
+
|
|
751
781
|
/**
|
|
752
782
|
* Legacy purple palette (aliased to violet for backwards compatibility)
|
|
753
783
|
* @deprecated Use `violet` instead
|