@mindlogic-ai/logician-ui 5.0.0-alpha.3 → 5.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Banner/Banner.types.d.ts +24 -1
- package/dist/components/Banner/Banner.types.d.ts.map +1 -1
- package/dist/components/Card/Card.types.d.ts +12 -0
- package/dist/components/Card/Card.types.d.ts.map +1 -1
- package/dist/components/ColorMode/ColorModeToggle.d.ts +7 -2
- package/dist/components/ColorMode/ColorModeToggle.d.ts.map +1 -1
- package/dist/components/ColorMode/ColorModeToggle.js +8 -3
- package/dist/components/ColorMode/ColorModeToggle.js.map +1 -1
- package/dist/components/ColorMode/ColorModeToggle.mjs +8 -3
- package/dist/components/ColorMode/ColorModeToggle.mjs.map +1 -1
- package/dist/components/Confetti/Confetti.types.d.ts +5 -1
- package/dist/components/Confetti/Confetti.types.d.ts.map +1 -1
- package/dist/components/Confetti/confettiColors.d.ts +5 -5
- package/dist/components/Confetti/confettiColors.js +5 -5
- package/dist/components/Confetti/confettiColors.mjs +5 -5
- package/dist/components/ErrorFallback/ErrorFallback.types.d.ts +6 -0
- package/dist/components/ErrorFallback/ErrorFallback.types.d.ts.map +1 -1
- package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts +4 -1
- package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts.map +1 -1
- package/dist/components/LineGraph/LineGraph.d.ts.map +1 -1
- package/dist/components/LineGraph/LineGraph.js +4 -5
- package/dist/components/LineGraph/LineGraph.js.map +1 -1
- package/dist/components/LineGraph/LineGraph.mjs +5 -6
- package/dist/components/LineGraph/LineGraph.mjs.map +1 -1
- package/dist/components/LineGraph/LineGraph.types.d.ts +12 -2
- package/dist/components/LineGraph/LineGraph.types.d.ts.map +1 -1
- package/dist/components/LineGraph/seriesColors.d.ts +12 -8
- package/dist/components/LineGraph/seriesColors.d.ts.map +1 -1
- package/dist/components/LineGraph/seriesColors.js +8 -7
- package/dist/components/LineGraph/seriesColors.js.map +1 -1
- package/dist/components/LineGraph/seriesColors.mjs +8 -7
- package/dist/components/LineGraph/seriesColors.mjs.map +1 -1
- package/dist/components/Masonry/Masonry.types.d.ts +8 -3
- package/dist/components/Masonry/Masonry.types.d.ts.map +1 -1
- package/dist/components/Menu/MenuItem.types.d.ts +8 -0
- package/dist/components/Menu/MenuItem.types.d.ts.map +1 -1
- package/dist/components/Modal/ModalCloseButton.d.ts +1 -1
- package/dist/components/Modal/ModalCloseButton.js +1 -1
- package/dist/components/Modal/ModalCloseButton.mjs +1 -1
- package/dist/components/Pagination/Pagination.d.ts +11 -10
- package/dist/components/Pagination/Pagination.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.js +11 -10
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Pagination/Pagination.mjs +11 -10
- package/dist/components/Pagination/Pagination.mjs.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.types.d.ts +9 -0
- package/dist/components/ProgressBar/ProgressBar.types.d.ts.map +1 -1
- package/dist/components/RadialProgress/RadialProgress.types.d.ts +21 -1
- package/dist/components/RadialProgress/RadialProgress.types.d.ts.map +1 -1
- package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts +8 -0
- package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js +6 -7
- package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.mjs +6 -7
- package/dist/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
- package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts +2 -0
- package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts.map +1 -1
- package/dist/components/Toast/Toast.styles.d.ts +6 -2
- package/dist/components/Toast/Toast.styles.d.ts.map +1 -1
- package/dist/components/Toast/Toast.styles.js +18 -10
- package/dist/components/Toast/Toast.styles.js.map +1 -1
- package/dist/components/Toast/Toast.styles.mjs +18 -10
- package/dist/components/Toast/Toast.styles.mjs.map +1 -1
- package/dist/theme/colors.d.ts +2 -2
- package/dist/theme/colors.d.ts.map +1 -1
- package/dist/theme/colors.js +22 -2
- package/dist/theme/colors.js.map +1 -1
- package/dist/theme/colors.mjs +23 -3
- package/dist/theme/colors.mjs.map +1 -1
- package/dist/theme/palette.generated.d.ts +98 -0
- package/dist/theme/palette.generated.d.ts.map +1 -1
- package/dist/theme/palette.generated.js +99 -0
- package/dist/theme/palette.generated.js.map +1 -1
- package/dist/theme/palette.generated.mjs +99 -1
- package/dist/theme/palette.generated.mjs.map +1 -1
- package/dist/theme/paletteSwatches.d.ts +20 -0
- package/dist/theme/paletteSwatches.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Accordion/Accordion.stories.tsx +85 -0
- package/src/components/Accordion/Accordion.usage.mdx +200 -0
- package/src/components/Appear/Appear.usage.mdx +107 -0
- package/src/components/Avatar/Avatar.stories.tsx +71 -1
- package/src/components/Avatar/Avatar.usage.mdx +166 -0
- package/src/components/Banner/Banner.stories.tsx +152 -2
- package/src/components/Banner/Banner.types.ts +30 -1
- package/src/components/Banner/Banner.usage.mdx +233 -0
- package/src/components/BottomSheet/BottomSheet.stories.tsx +168 -1
- package/src/components/BottomSheet/BottomSheet.usage.mdx +216 -0
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +59 -0
- package/src/components/Breadcrumb/Breadcrumb.usage.mdx +181 -0
- package/src/components/Button/Button.stories.tsx +263 -3
- package/src/components/Button/Button.usage.mdx +342 -0
- package/src/components/Card/Card.stories.tsx +106 -0
- package/src/components/Card/Card.types.ts +12 -0
- package/src/components/Card/Card.usage.mdx +216 -0
- package/src/components/Checkbox/Checkbox.stories.tsx +140 -13
- package/src/components/Checkbox/Checkbox.usage.mdx +214 -0
- package/src/components/Chip/Chip.usage.mdx +78 -0
- package/src/components/Code/Code.stories.tsx +60 -0
- package/src/components/Code/Code.usage.mdx +187 -0
- package/src/components/CodeTabs/CodeTabs.stories.tsx +53 -0
- package/src/components/CodeTabs/CodeTabs.usage.mdx +176 -0
- package/src/components/Collapsible/Collapsible.stories.tsx +58 -0
- package/src/components/Collapsible/Collapsible.usage.mdx +173 -0
- package/src/components/ColorMode/ColorMode.stories.tsx +50 -0
- package/src/components/ColorMode/ColorMode.usage.mdx +135 -0
- package/src/components/ColorMode/ColorModeToggle.tsx +10 -3
- package/src/components/Confetti/Confetti.types.ts +5 -1
- package/src/components/Confetti/Confetti.usage.mdx +111 -0
- package/src/components/Confetti/confettiColors.ts +5 -5
- package/src/components/Container/Container.stories.tsx +32 -0
- package/src/components/Container/Container.usage.mdx +130 -0
- package/src/components/CopyableCode/CopyableCode.stories.tsx +62 -0
- package/src/components/CopyableCode/CopyableCode.usage.mdx +168 -0
- package/src/components/CountBadge/CountBadge.stories.tsx +69 -0
- package/src/components/CountBadge/CountBadge.usage.mdx +215 -0
- package/src/components/CountUp/CountUp.usage.mdx +107 -0
- package/src/components/DatePicker/DatePicker.usage.mdx +177 -0
- package/src/components/DatePicker/RangeDatePicker.stories.tsx +87 -3
- package/src/components/ErrorFallback/ErrorFallback.types.ts +6 -0
- package/src/components/ErrorFallback/ErrorFallback.usage.mdx +127 -0
- package/src/components/ExpandableText/ExpandableText.stories.tsx +55 -0
- package/src/components/ExpandableText/ExpandableText.usage.mdx +176 -0
- package/src/components/FileInput/FileInput.stories.tsx +38 -1
- package/src/components/FileInput/FileInput.usage.mdx +178 -0
- package/src/components/FileItem/FileItem.stories.tsx +71 -0
- package/src/components/FileItem/FileItem.usage.mdx +180 -0
- package/src/components/FileList/FileList.stories.tsx +25 -0
- package/src/components/FileList/FileList.usage.mdx +165 -0
- package/src/components/FlyTo/FlyTo.usage.mdx +99 -0
- package/src/components/Form/Form.stories.tsx +149 -0
- package/src/components/Form/Form.usage.mdx +201 -0
- package/src/components/Form/FormModalFooter/FormModalFooter.types.ts +4 -1
- package/src/components/FormControl/FormControl.stories.tsx +35 -0
- package/src/components/FormControl/FormControl.usage.mdx +128 -0
- package/src/components/FormIntegration/FormIntegration.usage.mdx +158 -0
- package/src/components/FormLabel/FormLabel.stories.tsx +71 -0
- package/src/components/FormLabel/FormLabel.usage.mdx +125 -0
- package/src/components/Icon/Icon.stories.tsx +61 -1
- package/src/components/Icon/Icon.usage.mdx +158 -0
- package/src/components/IconButton/IconButton.stories.tsx +209 -5
- package/src/components/IconButton/IconButton.usage.mdx +273 -0
- package/src/components/InfoSprinkle/InfoSprinkle.stories.tsx +77 -1
- package/src/components/InfoSprinkle/InfoSprinkle.usage.mdx +189 -0
- package/src/components/InlineCode/InlineCode.stories.tsx +75 -0
- package/src/components/InlineCode/InlineCode.usage.mdx +142 -0
- package/src/components/Input/Input.stories.tsx +180 -0
- package/src/components/Input/Input.usage.mdx +278 -0
- package/src/components/LineGraph/LineGraph.stories.tsx +112 -0
- package/src/components/LineGraph/LineGraph.tsx +4 -5
- package/src/components/LineGraph/LineGraph.types.ts +12 -2
- package/src/components/LineGraph/LineGraph.usage.mdx +186 -0
- package/src/components/LineGraph/seriesColors.test.ts +11 -10
- package/src/components/LineGraph/seriesColors.ts +18 -16
- package/src/components/Loaders/Loaders.stories.tsx +93 -0
- package/src/components/Loaders/Loaders.usage.mdx +180 -0
- package/src/components/LogicianProvider/LogicianProvider.usage.mdx +98 -0
- package/src/components/Markdown/Markdown.stories.tsx +53 -0
- package/src/components/Markdown/Markdown.usage.mdx +182 -0
- package/src/components/Masonry/Masonry.stories.tsx +63 -1
- package/src/components/Masonry/Masonry.types.ts +8 -3
- package/src/components/Masonry/Masonry.usage.mdx +142 -0
- package/src/components/MaxLengthIndicator/MaxLengthIndicator.stories.tsx +57 -0
- package/src/components/MaxLengthIndicator/MaxLengthIndicator.usage.mdx +125 -0
- package/src/components/Menu/Menu.stories.tsx +146 -2
- package/src/components/Menu/Menu.usage.mdx +230 -0
- package/src/components/Menu/MenuItem.types.ts +8 -0
- package/src/components/Modal/Modal.stories.tsx +177 -1
- package/src/components/Modal/Modal.usage.mdx +262 -0
- package/src/components/Modal/ModalCloseButton.tsx +1 -1
- package/src/components/MonthPicker/MonthPicker.stories.tsx +30 -0
- package/src/components/MonthPicker/MonthPicker.usage.mdx +191 -0
- package/src/components/Pagination/Pagination.stories.tsx +90 -1
- package/src/components/Pagination/Pagination.tsx +11 -10
- package/src/components/Pagination/Pagination.usage.mdx +186 -0
- package/src/components/PasswordInput/PasswordInput.stories.tsx +51 -0
- package/src/components/PasswordInput/PasswordInput.usage.mdx +193 -0
- package/src/components/PinInput/PinInput.stories.tsx +91 -0
- package/src/components/PinInput/PinInput.usage.mdx +194 -0
- package/src/components/Popover/Popover.stories.tsx +104 -1
- package/src/components/Popover/Popover.usage.mdx +197 -0
- package/src/components/ProgressBar/ProgressBar.stories.tsx +92 -1
- package/src/components/ProgressBar/ProgressBar.types.ts +9 -0
- package/src/components/ProgressBar/ProgressBar.usage.mdx +210 -0
- package/src/components/Pulse/Pulse.usage.mdx +102 -0
- package/src/components/RadialProgress/RadialProgress.stories.tsx +74 -1
- package/src/components/RadialProgress/RadialProgress.types.ts +21 -1
- package/src/components/RadialProgress/RadialProgress.usage.mdx +153 -0
- package/src/components/Radio/Radio.stories.tsx +119 -0
- package/src/components/Radio/Radio.usage.mdx +187 -0
- package/src/components/Reveal/Reveal.usage.mdx +105 -0
- package/src/components/ScaledContext/ScaledContext.usage.mdx +111 -0
- package/src/components/SeeMoreButton/SeeMoreButton.stories.tsx +146 -2
- package/src/components/SeeMoreButton/SeeMoreButton.types.ts +8 -0
- package/src/components/SeeMoreButton/SeeMoreButton.usage.mdx +213 -0
- package/src/components/SegmentedControl/SegmentedControl.stories.tsx +69 -0
- package/src/components/SegmentedControl/SegmentedControl.tsx +6 -7
- package/src/components/SegmentedControl/SegmentedControl.usage.mdx +209 -0
- package/src/components/SegmentedProgressBar/SegmentedProgressBar.stories.tsx +54 -0
- package/src/components/SegmentedProgressBar/SegmentedProgressBar.types.ts +2 -0
- package/src/components/SegmentedProgressBar/SegmentedProgressBar.usage.mdx +145 -0
- package/src/components/Select/Select.stories.tsx +209 -1
- package/src/components/Select/Select.usage.mdx +278 -0
- package/src/components/Shake/Shake.usage.mdx +107 -0
- package/src/components/Slider/Slider.stories.tsx +116 -0
- package/src/components/Slider/Slider.usage.mdx +179 -0
- package/src/components/Spinner/Spinner.stories.tsx +64 -0
- package/src/components/Spinner/Spinner.usage.mdx +136 -0
- package/src/components/SwapTransition/SwapTransition.usage.mdx +102 -0
- package/src/components/Switch/Switch.stories.tsx +131 -6
- package/src/components/Switch/Switch.usage.mdx +199 -0
- package/src/components/Table/Table.stories.tsx +159 -1
- package/src/components/Table/Table.usage.mdx +235 -0
- package/src/components/Tabs/Tabs.stories.tsx +86 -0
- package/src/components/Tabs/Tabs.usage.mdx +219 -0
- package/src/components/Tag/Tag.stories.tsx +181 -4
- package/src/components/Tag/Tag.usage.mdx +257 -0
- package/src/components/Textarea/Textarea.stories.tsx +113 -0
- package/src/components/Textarea/Textarea.usage.mdx +186 -0
- package/src/components/Toast/Toast.stories.tsx +185 -3
- package/src/components/Toast/Toast.styles.ts +18 -10
- package/src/components/Toast/Toast.usage.mdx +265 -0
- package/src/components/Tooltip/Tooltip.stories.tsx +86 -1
- package/src/components/Tooltip/Tooltip.usage.mdx +211 -0
- package/src/components/Tree/Tree.stories.tsx +89 -0
- package/src/components/Tree/Tree.usage.mdx +207 -0
- package/src/components/Typography/Typography.stories.tsx +117 -0
- package/src/components/Typography/Typography.usage.mdx +251 -0
- package/src/components/Workflow/Workflow.usage.mdx +199 -0
- package/src/components/noRawScales.test.ts +5 -1
- package/src/foundations/BrandColour.mdx +65 -2
- package/src/theme/BazePalette.stories.tsx +111 -1
- package/src/theme/Palette.stories.tsx +2 -2
- package/src/theme/SemanticTokens.mdx +75 -16
- package/src/theme/claude.md +15 -9
- package/src/theme/colors.ts +33 -3
- package/src/theme/contrast.test.ts +32 -0
- package/src/theme/palette.generated.ts +99 -0
- package/src/theme/paletteSwatches.ts +35 -0
package/src/theme/colors.ts
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* black), `sand.1–12` / `sandDark.1–12` (beige-brown), `slate.1–12` /
|
|
8
8
|
* `slateDark.1–12` (today's cool gray rebuilt on the same contrast targets),
|
|
9
9
|
* `coral.*`, and the 12 system hues (`red` … `brown`, each
|
|
10
|
-
* `{base, baseDark, hc, hcDark, surface, ink, surfaceDark, inkDark}`)
|
|
10
|
+
* `{base, baseDark, hc, hcDark, surface, ink, surfaceDark, inkDark}`), and
|
|
11
|
+
* `dataviz.*` (the data-visualisation values no hue step covers).
|
|
11
12
|
* The step number is the job (Radix-style): 1–3 backgrounds, 4–6 dividers
|
|
12
13
|
* and borders, 7 control border (3:1), 8 icon/placeholder (4.5:1), 9–11
|
|
13
14
|
* text, 12 maximum contrast.
|
|
@@ -16,7 +17,9 @@
|
|
|
16
17
|
* them (default `ink` / `sand`).
|
|
17
18
|
* 3. **Semantic roles** — `bg.*`, `layer.*`, `fg.*`, `border.*`, `primary.*`,
|
|
18
19
|
* `secondary.*`, `action.*`, `send.*`, `count.*`, `disabled.*`, `focus.ring`,
|
|
19
|
-
* the four status families, `tooltip.*`, `category.{hue}
|
|
20
|
+
* the four status families, `tooltip.*`, `category.{hue}.*`, and the
|
|
21
|
+
* data-visualisation fills `data.1–4` and `diverging.{pos,neg}.1–3` /
|
|
22
|
+
* `diverging.mid`.
|
|
20
23
|
*
|
|
21
24
|
* Every value comes from `palette.generated.ts` (see
|
|
22
25
|
* `scripts/palette/generate.mjs`), which ports the designer-reviewed prototype
|
|
@@ -36,7 +39,13 @@
|
|
|
36
39
|
* `no-deprecated-tokens` lint rule. They are removed in 6.0.
|
|
37
40
|
*/
|
|
38
41
|
import DEPRECATED from './deprecatedColorTokens.json';
|
|
39
|
-
import {
|
|
42
|
+
import {
|
|
43
|
+
CORAL,
|
|
44
|
+
DATAVIZ,
|
|
45
|
+
RAMPS,
|
|
46
|
+
SCHEMES,
|
|
47
|
+
SYSTEM_HUES,
|
|
48
|
+
} from './palette.generated';
|
|
40
49
|
|
|
41
50
|
/** Raw scale that fills `neutral.1–12` and every neutral role. */
|
|
42
51
|
export type NeutralScale = 'ink' | 'slate';
|
|
@@ -122,6 +131,9 @@ export const colors = {
|
|
|
122
131
|
),
|
|
123
132
|
])
|
|
124
133
|
),
|
|
134
|
+
dataviz: Object.fromEntries(
|
|
135
|
+
Object.entries(DATAVIZ).map(([k, val]) => [k, v(val)])
|
|
136
|
+
),
|
|
125
137
|
white: v('#FFFFFF'),
|
|
126
138
|
} as Record<string, Record<string, TokenValue> | TokenValue>;
|
|
127
139
|
|
|
@@ -214,6 +226,20 @@ const PATHS: Record<FlatKey, string> = {
|
|
|
214
226
|
'info-onSolid': 'info.onSolid',
|
|
215
227
|
'tooltip-bg': 'tooltip.bg',
|
|
216
228
|
'tooltip-fg': 'tooltip.fg',
|
|
229
|
+
// Data visualisation (fills only). Higher number = larger value, in both
|
|
230
|
+
// modes; the dark values flip lightness so the strongest step stays the
|
|
231
|
+
// most prominent on a dark canvas.
|
|
232
|
+
'data-1': 'data.1',
|
|
233
|
+
'data-2': 'data.2',
|
|
234
|
+
'data-3': 'data.3',
|
|
235
|
+
'data-4': 'data.4',
|
|
236
|
+
'diverging-pos-1': 'diverging.pos.1',
|
|
237
|
+
'diverging-pos-2': 'diverging.pos.2',
|
|
238
|
+
'diverging-pos-3': 'diverging.pos.3',
|
|
239
|
+
'diverging-neg-1': 'diverging.neg.1',
|
|
240
|
+
'diverging-neg-2': 'diverging.neg.2',
|
|
241
|
+
'diverging-neg-3': 'diverging.neg.3',
|
|
242
|
+
'diverging-mid': 'diverging.mid',
|
|
217
243
|
};
|
|
218
244
|
|
|
219
245
|
/** Exposed for tests and docs: every role token generated from the scheme table. */
|
|
@@ -249,6 +275,7 @@ function buildRefIndex(neutral: NeutralScale, secondary: SecondaryScale) {
|
|
|
249
275
|
for (const hue of SYSTEM_HUE_NAMES)
|
|
250
276
|
for (const [k, hex] of Object.entries(SYSTEM_HUES[hue]))
|
|
251
277
|
add(hex, `${hue}.${k}`);
|
|
278
|
+
for (const [k, hex] of Object.entries(DATAVIZ)) add(hex, `dataviz.${k}`);
|
|
252
279
|
// The brand black/cream anchors exist only on ink; reachable from any scheme.
|
|
253
280
|
if (neutral !== 'ink') addScale('ink');
|
|
254
281
|
return (hex: string) => index.get(hex.toUpperCase()) ?? hex;
|
|
@@ -421,6 +448,9 @@ export type SemanticColorToken =
|
|
|
421
448
|
| `danger.${'solidHover' | 'solidActive'}`
|
|
422
449
|
| `tooltip.${'bg' | 'fg'}`
|
|
423
450
|
| `category.${Hue}.${'surface' | 'fg'}`
|
|
451
|
+
| `data.${1 | 2 | 3 | 4}`
|
|
452
|
+
| `diverging.${'pos' | 'neg'}.${1 | 2 | 3}`
|
|
453
|
+
| 'diverging.mid'
|
|
424
454
|
| DeprecatedSemanticColorToken;
|
|
425
455
|
|
|
426
456
|
/**
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
} from './colors';
|
|
11
11
|
import { system } from './index';
|
|
12
12
|
import { SCHEMES } from './palette.generated';
|
|
13
|
+
import { DATA_VIZ_LABEL_TOKEN, DATA_VIZ_LABELS } from './paletteSwatches';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* Contrast audit for the BAZE semantic tokens — the same check as section 3-1
|
|
@@ -137,6 +138,12 @@ const NO_PAIR: Record<string, string> = {
|
|
|
137
138
|
track: 'unfilled track; the filled part (primary-main) carries the value',
|
|
138
139
|
};
|
|
139
140
|
|
|
141
|
+
// Data-viz fills (`data.*`, `diverging.*`) are registered through
|
|
142
|
+
// DATA_VIZ_LABELS (paletteSwatches.ts): each fill with the in-cell label it may
|
|
143
|
+
// carry. Audited at 4.5:1 in light and dark, like the category pairs: the fills
|
|
144
|
+
// keep their value under high contrast (they are fills, like `track`), so an
|
|
145
|
+
// in-cell label is not held to the 7:1 high-contrast text target.
|
|
146
|
+
|
|
140
147
|
// ───────────────────────────── resolver ─────────────────────────────
|
|
141
148
|
|
|
142
149
|
const lum = (h: string) => {
|
|
@@ -253,6 +260,30 @@ describe.each(SCHEME_NAMES)('contrast — %s scheme', (neutral) => {
|
|
|
253
260
|
expect(failures).toEqual([]);
|
|
254
261
|
});
|
|
255
262
|
|
|
263
|
+
it('data-viz fills: each in-cell label clears 4.5:1, and "no label" means neither does (light and dark)', () => {
|
|
264
|
+
const failures = Object.entries(DATA_VIZ_LABELS).flatMap(([fill, labels]) =>
|
|
265
|
+
(['light', 'dark'] as const).flatMap((mode) => {
|
|
266
|
+
const bg = flat(fill, mode);
|
|
267
|
+
const label = labels[mode];
|
|
268
|
+
if (label) {
|
|
269
|
+
const c = ratio(resolve(DATA_VIZ_LABEL_TOKEN[label], mode), bg);
|
|
270
|
+
return c >= 4.5
|
|
271
|
+
? []
|
|
272
|
+
: [`${label} on ${fill} ${mode}: ${c.toFixed(2)}`];
|
|
273
|
+
}
|
|
274
|
+
const best = Math.max(
|
|
275
|
+
...Object.values(DATA_VIZ_LABEL_TOKEN).map((t) =>
|
|
276
|
+
ratio(resolve(t, mode), bg)
|
|
277
|
+
)
|
|
278
|
+
);
|
|
279
|
+
return best < 4.5
|
|
280
|
+
? []
|
|
281
|
+
: [`${fill} ${mode} has no label but one clears ${best.toFixed(2)}`];
|
|
282
|
+
})
|
|
283
|
+
);
|
|
284
|
+
expect(failures).toEqual([]);
|
|
285
|
+
});
|
|
286
|
+
|
|
256
287
|
it('every deprecated 4.x name resolves to its replacement in all modes', () => {
|
|
257
288
|
for (const [oldName, newName] of Object.entries(DEPRECATED_COLOR_TOKENS))
|
|
258
289
|
for (const mode of MODES)
|
|
@@ -267,6 +298,7 @@ describe('contrast registry', () => {
|
|
|
267
298
|
...PAIRS.flatMap(([a, b]) => [a, b]),
|
|
268
299
|
...SEP.flatMap(([a, b]) => [a, b]),
|
|
269
300
|
...Object.keys(NO_PAIR),
|
|
301
|
+
...Object.keys(DATA_VIZ_LABELS),
|
|
270
302
|
]);
|
|
271
303
|
|
|
272
304
|
it('every role token has a contrast pair or a NO_PAIR reason', () => {
|
|
@@ -248,6 +248,17 @@ export const SYSTEM_HUES = {
|
|
|
248
248
|
}
|
|
249
249
|
} as const;
|
|
250
250
|
|
|
251
|
+
/** Data-visualisation values that are not system-hue steps (`data.*`, `diverging.*`). */
|
|
252
|
+
export const DATAVIZ = {
|
|
253
|
+
"blueMid": "#7492B3",
|
|
254
|
+
"blue1": "#A9C7EB",
|
|
255
|
+
"blue2": "#5890CD",
|
|
256
|
+
"blue3": "#2C5D91",
|
|
257
|
+
"orange1": "#E4BBA0",
|
|
258
|
+
"orange2": "#BF7946",
|
|
259
|
+
"orange3": "#85491A"
|
|
260
|
+
} as const;
|
|
261
|
+
|
|
251
262
|
/**
|
|
252
263
|
* Resolved hex per semantic token, per neutral scheme, per mode. Keys are the
|
|
253
264
|
* prototype's flat names (`layer-1-hover`, `primary-washActive`); the Chakra
|
|
@@ -332,6 +343,17 @@ export const SCHEMES = {
|
|
|
332
343
|
"tooltip-bg": "#252525",
|
|
333
344
|
"tooltip-fg": "#F5EDE0",
|
|
334
345
|
"track": "#E5DFD9",
|
|
346
|
+
"data-1": "#DFEBF9",
|
|
347
|
+
"data-2": "#AFC7E1",
|
|
348
|
+
"data-3": "#7492B3",
|
|
349
|
+
"data-4": "#48607A",
|
|
350
|
+
"diverging-pos-1": "#A9C7EB",
|
|
351
|
+
"diverging-pos-2": "#5890CD",
|
|
352
|
+
"diverging-pos-3": "#2C5D91",
|
|
353
|
+
"diverging-neg-1": "#E4BBA0",
|
|
354
|
+
"diverging-neg-2": "#BF7946",
|
|
355
|
+
"diverging-neg-3": "#85491A",
|
|
356
|
+
"diverging-mid": "#EDE9E2",
|
|
335
357
|
"border-control": "#8F8A82"
|
|
336
358
|
},
|
|
337
359
|
"dark": {
|
|
@@ -411,6 +433,17 @@ export const SCHEMES = {
|
|
|
411
433
|
"tooltip-bg": "#E3D7C4",
|
|
412
434
|
"tooltip-fg": "#252525",
|
|
413
435
|
"track": "#48443E",
|
|
436
|
+
"data-1": "#232F3D",
|
|
437
|
+
"data-2": "#48607A",
|
|
438
|
+
"data-3": "#7492B3",
|
|
439
|
+
"data-4": "#AFC7E1",
|
|
440
|
+
"diverging-pos-1": "#2C5D91",
|
|
441
|
+
"diverging-pos-2": "#5890CD",
|
|
442
|
+
"diverging-pos-3": "#A9C7EB",
|
|
443
|
+
"diverging-neg-1": "#85491A",
|
|
444
|
+
"diverging-neg-2": "#BF7946",
|
|
445
|
+
"diverging-neg-3": "#E4BBA0",
|
|
446
|
+
"diverging-mid": "#38332E",
|
|
414
447
|
"border-control": "#948F87"
|
|
415
448
|
},
|
|
416
449
|
"hcLight": {
|
|
@@ -490,6 +523,17 @@ export const SCHEMES = {
|
|
|
490
523
|
"tooltip-bg": "#252525",
|
|
491
524
|
"tooltip-fg": "#F5EDE0",
|
|
492
525
|
"track": "#E5DFD9",
|
|
526
|
+
"data-1": "#DFEBF9",
|
|
527
|
+
"data-2": "#AFC7E1",
|
|
528
|
+
"data-3": "#7492B3",
|
|
529
|
+
"data-4": "#48607A",
|
|
530
|
+
"diverging-pos-1": "#A9C7EB",
|
|
531
|
+
"diverging-pos-2": "#5890CD",
|
|
532
|
+
"diverging-pos-3": "#2C5D91",
|
|
533
|
+
"diverging-neg-1": "#E4BBA0",
|
|
534
|
+
"diverging-neg-2": "#BF7946",
|
|
535
|
+
"diverging-neg-3": "#85491A",
|
|
536
|
+
"diverging-mid": "#EDE9E2",
|
|
493
537
|
"border-control": "#726D65"
|
|
494
538
|
},
|
|
495
539
|
"hcDark": {
|
|
@@ -569,6 +613,17 @@ export const SCHEMES = {
|
|
|
569
613
|
"tooltip-bg": "#E3D7C4",
|
|
570
614
|
"tooltip-fg": "#252525",
|
|
571
615
|
"track": "#48443E",
|
|
616
|
+
"data-1": "#232F3D",
|
|
617
|
+
"data-2": "#48607A",
|
|
618
|
+
"data-3": "#7492B3",
|
|
619
|
+
"data-4": "#AFC7E1",
|
|
620
|
+
"diverging-pos-1": "#2C5D91",
|
|
621
|
+
"diverging-pos-2": "#5890CD",
|
|
622
|
+
"diverging-pos-3": "#A9C7EB",
|
|
623
|
+
"diverging-neg-1": "#85491A",
|
|
624
|
+
"diverging-neg-2": "#BF7946",
|
|
625
|
+
"diverging-neg-3": "#E4BBA0",
|
|
626
|
+
"diverging-mid": "#38332E",
|
|
572
627
|
"border-control": "#B6B1A9"
|
|
573
628
|
}
|
|
574
629
|
},
|
|
@@ -650,6 +705,17 @@ export const SCHEMES = {
|
|
|
650
705
|
"tooltip-bg": "#1F2534",
|
|
651
706
|
"tooltip-fg": "#ECEEF4",
|
|
652
707
|
"track": "#DBE0EC",
|
|
708
|
+
"data-1": "#DFEBF9",
|
|
709
|
+
"data-2": "#AFC7E1",
|
|
710
|
+
"data-3": "#7492B3",
|
|
711
|
+
"data-4": "#48607A",
|
|
712
|
+
"diverging-pos-1": "#A9C7EB",
|
|
713
|
+
"diverging-pos-2": "#5890CD",
|
|
714
|
+
"diverging-pos-3": "#2C5D91",
|
|
715
|
+
"diverging-neg-1": "#E4BBA0",
|
|
716
|
+
"diverging-neg-2": "#BF7946",
|
|
717
|
+
"diverging-neg-3": "#85491A",
|
|
718
|
+
"diverging-mid": "#E6E9F3",
|
|
653
719
|
"border-control": "#858B9C"
|
|
654
720
|
},
|
|
655
721
|
"dark": {
|
|
@@ -729,6 +795,17 @@ export const SCHEMES = {
|
|
|
729
795
|
"tooltip-bg": "#D5D9E1",
|
|
730
796
|
"tooltip-fg": "#252525",
|
|
731
797
|
"track": "#40454E",
|
|
798
|
+
"data-1": "#232F3D",
|
|
799
|
+
"data-2": "#48607A",
|
|
800
|
+
"data-3": "#7492B3",
|
|
801
|
+
"data-4": "#AFC7E1",
|
|
802
|
+
"diverging-pos-1": "#2C5D91",
|
|
803
|
+
"diverging-pos-2": "#5890CD",
|
|
804
|
+
"diverging-pos-3": "#A9C7EB",
|
|
805
|
+
"diverging-neg-1": "#85491A",
|
|
806
|
+
"diverging-neg-2": "#BF7946",
|
|
807
|
+
"diverging-neg-3": "#E4BBA0",
|
|
808
|
+
"diverging-mid": "#30343C",
|
|
732
809
|
"border-control": "#8A909B"
|
|
733
810
|
},
|
|
734
811
|
"hcLight": {
|
|
@@ -808,6 +885,17 @@ export const SCHEMES = {
|
|
|
808
885
|
"tooltip-bg": "#1F2534",
|
|
809
886
|
"tooltip-fg": "#ECEEF4",
|
|
810
887
|
"track": "#DBE0EC",
|
|
888
|
+
"data-1": "#DFEBF9",
|
|
889
|
+
"data-2": "#AFC7E1",
|
|
890
|
+
"data-3": "#7492B3",
|
|
891
|
+
"data-4": "#48607A",
|
|
892
|
+
"diverging-pos-1": "#A9C7EB",
|
|
893
|
+
"diverging-pos-2": "#5890CD",
|
|
894
|
+
"diverging-pos-3": "#2C5D91",
|
|
895
|
+
"diverging-neg-1": "#E4BBA0",
|
|
896
|
+
"diverging-neg-2": "#BF7946",
|
|
897
|
+
"diverging-neg-3": "#85491A",
|
|
898
|
+
"diverging-mid": "#E6E9F3",
|
|
811
899
|
"border-control": "#686E7E"
|
|
812
900
|
},
|
|
813
901
|
"hcDark": {
|
|
@@ -887,6 +975,17 @@ export const SCHEMES = {
|
|
|
887
975
|
"tooltip-bg": "#D5D9E1",
|
|
888
976
|
"tooltip-fg": "#252525",
|
|
889
977
|
"track": "#40454E",
|
|
978
|
+
"data-1": "#232F3D",
|
|
979
|
+
"data-2": "#48607A",
|
|
980
|
+
"data-3": "#7492B3",
|
|
981
|
+
"data-4": "#AFC7E1",
|
|
982
|
+
"diverging-pos-1": "#2C5D91",
|
|
983
|
+
"diverging-pos-2": "#5890CD",
|
|
984
|
+
"diverging-pos-3": "#A9C7EB",
|
|
985
|
+
"diverging-neg-1": "#85491A",
|
|
986
|
+
"diverging-neg-2": "#BF7946",
|
|
987
|
+
"diverging-neg-3": "#E4BBA0",
|
|
988
|
+
"diverging-mid": "#30343C",
|
|
890
989
|
"border-control": "#ACB2BD"
|
|
891
990
|
}
|
|
892
991
|
}
|
|
@@ -48,6 +48,41 @@ export const resolveColor = (value: unknown, mode: Mode, depth = 0): string => {
|
|
|
48
48
|
|
|
49
49
|
export type Swatch = { path: string; light: string; dark: string };
|
|
50
50
|
|
|
51
|
+
/** In-cell label colour on a data-viz fill: `ink.11` (#252525), white, or none. */
|
|
52
|
+
export type DataVizLabel = 'ink' | 'white' | null;
|
|
53
|
+
|
|
54
|
+
/** Raw token each label resolves to, in either mode. */
|
|
55
|
+
export const DATA_VIZ_LABEL_TOKEN = { ink: 'ink.11', white: 'white' } as const;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Data-visualisation fills (`data.*`, `diverging.*`, by flat key) and the label
|
|
59
|
+
* a chart may print inside each one, per mode — the tables in
|
|
60
|
+
* SemanticTokens.mdx. Picked per step by measured contrast (≥ 4.5:1), not by
|
|
61
|
+
* step number; `null` means neither label clears it, so the value goes outside
|
|
62
|
+
* the mark. `contrast.test.ts` audits every entry; the BAZE Palette Data Viz
|
|
63
|
+
* story renders from it.
|
|
64
|
+
*/
|
|
65
|
+
export type DataVizKey =
|
|
66
|
+
| `data-${1 | 2 | 3 | 4}`
|
|
67
|
+
| `diverging-${'pos' | 'neg'}-${1 | 2 | 3}`
|
|
68
|
+
| 'diverging-mid';
|
|
69
|
+
|
|
70
|
+
export const DATA_VIZ_LABELS: Readonly<
|
|
71
|
+
Record<DataVizKey, { light: DataVizLabel; dark: DataVizLabel }>
|
|
72
|
+
> = {
|
|
73
|
+
'data-1': { light: 'ink', dark: 'white' },
|
|
74
|
+
'data-2': { light: 'ink', dark: 'white' },
|
|
75
|
+
'data-3': { light: 'ink', dark: 'ink' },
|
|
76
|
+
'data-4': { light: 'white', dark: 'ink' },
|
|
77
|
+
'diverging-pos-1': { light: 'ink', dark: 'white' },
|
|
78
|
+
'diverging-pos-2': { light: 'ink', dark: 'ink' },
|
|
79
|
+
'diverging-pos-3': { light: 'white', dark: 'ink' },
|
|
80
|
+
'diverging-neg-1': { light: 'ink', dark: 'white' },
|
|
81
|
+
'diverging-neg-2': { light: null, dark: null },
|
|
82
|
+
'diverging-neg-3': { light: 'white', dark: 'ink' },
|
|
83
|
+
'diverging-mid': { light: 'ink', dark: 'white' },
|
|
84
|
+
};
|
|
85
|
+
|
|
51
86
|
/**
|
|
52
87
|
* 5.0 semantic colours grouped by their first segment. Deprecated 4.x aliases
|
|
53
88
|
* (including the whole 4.x `slate.*` step scale) and the internal high-contrast
|