@mindlogic-ai/logician-ui 5.0.0-alpha.2 → 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.
Files changed (256) hide show
  1. package/dist/components/Badge/Badge.d.ts.map +1 -1
  2. package/dist/components/Badge/Badge.js +5 -3
  3. package/dist/components/Badge/Badge.js.map +1 -1
  4. package/dist/components/Badge/Badge.mjs +5 -3
  5. package/dist/components/Badge/Badge.mjs.map +1 -1
  6. package/dist/components/Badge/Badge.types.d.ts +7 -5
  7. package/dist/components/Badge/Badge.types.d.ts.map +1 -1
  8. package/dist/components/Banner/Banner.types.d.ts +24 -1
  9. package/dist/components/Banner/Banner.types.d.ts.map +1 -1
  10. package/dist/components/Card/Card.types.d.ts +12 -0
  11. package/dist/components/Card/Card.types.d.ts.map +1 -1
  12. package/dist/components/ColorMode/ColorModeToggle.d.ts +7 -2
  13. package/dist/components/ColorMode/ColorModeToggle.d.ts.map +1 -1
  14. package/dist/components/ColorMode/ColorModeToggle.js +8 -3
  15. package/dist/components/ColorMode/ColorModeToggle.js.map +1 -1
  16. package/dist/components/ColorMode/ColorModeToggle.mjs +8 -3
  17. package/dist/components/ColorMode/ColorModeToggle.mjs.map +1 -1
  18. package/dist/components/Confetti/Confetti.types.d.ts +5 -1
  19. package/dist/components/Confetti/Confetti.types.d.ts.map +1 -1
  20. package/dist/components/Confetti/confettiColors.d.ts +5 -5
  21. package/dist/components/Confetti/confettiColors.js +5 -5
  22. package/dist/components/Confetti/confettiColors.mjs +5 -5
  23. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts +6 -0
  24. package/dist/components/ErrorFallback/ErrorFallback.types.d.ts.map +1 -1
  25. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts +4 -1
  26. package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts.map +1 -1
  27. package/dist/components/LineGraph/LineGraph.d.ts.map +1 -1
  28. package/dist/components/LineGraph/LineGraph.js +4 -5
  29. package/dist/components/LineGraph/LineGraph.js.map +1 -1
  30. package/dist/components/LineGraph/LineGraph.mjs +5 -6
  31. package/dist/components/LineGraph/LineGraph.mjs.map +1 -1
  32. package/dist/components/LineGraph/LineGraph.types.d.ts +12 -2
  33. package/dist/components/LineGraph/LineGraph.types.d.ts.map +1 -1
  34. package/dist/components/LineGraph/seriesColors.d.ts +12 -8
  35. package/dist/components/LineGraph/seriesColors.d.ts.map +1 -1
  36. package/dist/components/LineGraph/seriesColors.js +8 -7
  37. package/dist/components/LineGraph/seriesColors.js.map +1 -1
  38. package/dist/components/LineGraph/seriesColors.mjs +8 -7
  39. package/dist/components/LineGraph/seriesColors.mjs.map +1 -1
  40. package/dist/components/Masonry/Masonry.types.d.ts +8 -3
  41. package/dist/components/Masonry/Masonry.types.d.ts.map +1 -1
  42. package/dist/components/Menu/MenuItem.types.d.ts +8 -0
  43. package/dist/components/Menu/MenuItem.types.d.ts.map +1 -1
  44. package/dist/components/Modal/ModalCloseButton.d.ts +1 -1
  45. package/dist/components/Modal/ModalCloseButton.js +1 -1
  46. package/dist/components/Modal/ModalCloseButton.mjs +1 -1
  47. package/dist/components/Pagination/Pagination.d.ts +11 -10
  48. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  49. package/dist/components/Pagination/Pagination.js +11 -10
  50. package/dist/components/Pagination/Pagination.js.map +1 -1
  51. package/dist/components/Pagination/Pagination.mjs +11 -10
  52. package/dist/components/Pagination/Pagination.mjs.map +1 -1
  53. package/dist/components/ProgressBar/ProgressBar.types.d.ts +9 -0
  54. package/dist/components/ProgressBar/ProgressBar.types.d.ts.map +1 -1
  55. package/dist/components/RadialProgress/RadialProgress.types.d.ts +21 -1
  56. package/dist/components/RadialProgress/RadialProgress.types.d.ts.map +1 -1
  57. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts +8 -0
  58. package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts.map +1 -1
  59. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  60. package/dist/components/SegmentedControl/SegmentedControl.js +6 -7
  61. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  62. package/dist/components/SegmentedControl/SegmentedControl.mjs +6 -7
  63. package/dist/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
  64. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts +2 -0
  65. package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts.map +1 -1
  66. package/dist/components/Toast/Toast.styles.d.ts +6 -2
  67. package/dist/components/Toast/Toast.styles.d.ts.map +1 -1
  68. package/dist/components/Toast/Toast.styles.js +18 -10
  69. package/dist/components/Toast/Toast.styles.js.map +1 -1
  70. package/dist/components/Toast/Toast.styles.mjs +18 -10
  71. package/dist/components/Toast/Toast.styles.mjs.map +1 -1
  72. package/dist/theme/colors.d.ts +2 -2
  73. package/dist/theme/colors.d.ts.map +1 -1
  74. package/dist/theme/colors.js +22 -2
  75. package/dist/theme/colors.js.map +1 -1
  76. package/dist/theme/colors.mjs +23 -3
  77. package/dist/theme/colors.mjs.map +1 -1
  78. package/dist/theme/palette.generated.d.ts +98 -0
  79. package/dist/theme/palette.generated.d.ts.map +1 -1
  80. package/dist/theme/palette.generated.js +99 -0
  81. package/dist/theme/palette.generated.js.map +1 -1
  82. package/dist/theme/palette.generated.mjs +99 -1
  83. package/dist/theme/palette.generated.mjs.map +1 -1
  84. package/dist/theme/paletteSwatches.d.ts +20 -0
  85. package/dist/theme/paletteSwatches.d.ts.map +1 -1
  86. package/package.json +1 -1
  87. package/src/components/Accordion/Accordion.stories.tsx +85 -0
  88. package/src/components/Accordion/Accordion.usage.mdx +200 -0
  89. package/src/components/Appear/Appear.usage.mdx +107 -0
  90. package/src/components/Avatar/Avatar.stories.tsx +71 -1
  91. package/src/components/Avatar/Avatar.usage.mdx +166 -0
  92. package/src/components/Badge/Badge.stories.tsx +193 -3
  93. package/src/components/Badge/Badge.tsx +5 -3
  94. package/src/components/Badge/Badge.types.ts +7 -5
  95. package/src/components/Badge/Badge.usage.mdx +265 -0
  96. package/src/components/Banner/Banner.stories.tsx +152 -2
  97. package/src/components/Banner/Banner.types.ts +30 -1
  98. package/src/components/Banner/Banner.usage.mdx +233 -0
  99. package/src/components/BottomSheet/BottomSheet.stories.tsx +168 -1
  100. package/src/components/BottomSheet/BottomSheet.usage.mdx +216 -0
  101. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +59 -0
  102. package/src/components/Breadcrumb/Breadcrumb.usage.mdx +181 -0
  103. package/src/components/Button/Button.stories.tsx +263 -3
  104. package/src/components/Button/Button.usage.mdx +342 -0
  105. package/src/components/Card/Card.stories.tsx +106 -0
  106. package/src/components/Card/Card.types.ts +12 -0
  107. package/src/components/Card/Card.usage.mdx +216 -0
  108. package/src/components/Checkbox/Checkbox.stories.tsx +140 -13
  109. package/src/components/Checkbox/Checkbox.usage.mdx +214 -0
  110. package/src/components/Chip/Chip.usage.mdx +78 -0
  111. package/src/components/Code/Code.stories.tsx +60 -0
  112. package/src/components/Code/Code.usage.mdx +187 -0
  113. package/src/components/CodeTabs/CodeTabs.stories.tsx +53 -0
  114. package/src/components/CodeTabs/CodeTabs.usage.mdx +176 -0
  115. package/src/components/Collapsible/Collapsible.stories.tsx +58 -0
  116. package/src/components/Collapsible/Collapsible.usage.mdx +173 -0
  117. package/src/components/ColorMode/ColorMode.stories.tsx +50 -0
  118. package/src/components/ColorMode/ColorMode.usage.mdx +135 -0
  119. package/src/components/ColorMode/ColorModeToggle.tsx +10 -3
  120. package/src/components/Confetti/Confetti.types.ts +5 -1
  121. package/src/components/Confetti/Confetti.usage.mdx +111 -0
  122. package/src/components/Confetti/confettiColors.ts +5 -5
  123. package/src/components/Container/Container.stories.tsx +32 -0
  124. package/src/components/Container/Container.usage.mdx +130 -0
  125. package/src/components/CopyableCode/CopyableCode.stories.tsx +62 -0
  126. package/src/components/CopyableCode/CopyableCode.usage.mdx +168 -0
  127. package/src/components/CountBadge/CountBadge.stories.tsx +69 -0
  128. package/src/components/CountBadge/CountBadge.usage.mdx +215 -0
  129. package/src/components/CountUp/CountUp.usage.mdx +107 -0
  130. package/src/components/DatePicker/DatePicker.usage.mdx +177 -0
  131. package/src/components/DatePicker/RangeDatePicker.stories.tsx +87 -3
  132. package/src/components/ErrorFallback/ErrorFallback.types.ts +6 -0
  133. package/src/components/ErrorFallback/ErrorFallback.usage.mdx +127 -0
  134. package/src/components/ExpandableText/ExpandableText.stories.tsx +55 -0
  135. package/src/components/ExpandableText/ExpandableText.usage.mdx +176 -0
  136. package/src/components/FileInput/FileInput.stories.tsx +38 -1
  137. package/src/components/FileInput/FileInput.usage.mdx +178 -0
  138. package/src/components/FileItem/FileItem.stories.tsx +71 -0
  139. package/src/components/FileItem/FileItem.usage.mdx +180 -0
  140. package/src/components/FileList/FileList.stories.tsx +25 -0
  141. package/src/components/FileList/FileList.usage.mdx +165 -0
  142. package/src/components/FlyTo/FlyTo.usage.mdx +99 -0
  143. package/src/components/Form/Form.stories.tsx +149 -0
  144. package/src/components/Form/Form.usage.mdx +201 -0
  145. package/src/components/Form/FormModalFooter/FormModalFooter.types.ts +4 -1
  146. package/src/components/FormControl/FormControl.stories.tsx +35 -0
  147. package/src/components/FormControl/FormControl.usage.mdx +128 -0
  148. package/src/components/FormIntegration/FormIntegration.usage.mdx +158 -0
  149. package/src/components/FormLabel/FormLabel.stories.tsx +71 -0
  150. package/src/components/FormLabel/FormLabel.usage.mdx +125 -0
  151. package/src/components/Icon/Icon.stories.tsx +61 -1
  152. package/src/components/Icon/Icon.usage.mdx +158 -0
  153. package/src/components/IconButton/IconButton.stories.tsx +209 -5
  154. package/src/components/IconButton/IconButton.usage.mdx +273 -0
  155. package/src/components/InfoSprinkle/InfoSprinkle.stories.tsx +77 -1
  156. package/src/components/InfoSprinkle/InfoSprinkle.usage.mdx +189 -0
  157. package/src/components/InlineCode/InlineCode.stories.tsx +75 -0
  158. package/src/components/InlineCode/InlineCode.usage.mdx +142 -0
  159. package/src/components/Input/Input.stories.tsx +180 -0
  160. package/src/components/Input/Input.usage.mdx +278 -0
  161. package/src/components/LineGraph/LineGraph.stories.tsx +112 -0
  162. package/src/components/LineGraph/LineGraph.tsx +4 -5
  163. package/src/components/LineGraph/LineGraph.types.ts +12 -2
  164. package/src/components/LineGraph/LineGraph.usage.mdx +186 -0
  165. package/src/components/LineGraph/seriesColors.test.ts +11 -10
  166. package/src/components/LineGraph/seriesColors.ts +18 -16
  167. package/src/components/Loaders/Loaders.stories.tsx +93 -0
  168. package/src/components/Loaders/Loaders.usage.mdx +180 -0
  169. package/src/components/LogicianProvider/LogicianProvider.usage.mdx +98 -0
  170. package/src/components/Markdown/Markdown.stories.tsx +53 -0
  171. package/src/components/Markdown/Markdown.usage.mdx +182 -0
  172. package/src/components/Masonry/Masonry.stories.tsx +63 -1
  173. package/src/components/Masonry/Masonry.types.ts +8 -3
  174. package/src/components/Masonry/Masonry.usage.mdx +142 -0
  175. package/src/components/MaxLengthIndicator/MaxLengthIndicator.stories.tsx +57 -0
  176. package/src/components/MaxLengthIndicator/MaxLengthIndicator.usage.mdx +125 -0
  177. package/src/components/Menu/Menu.stories.tsx +146 -2
  178. package/src/components/Menu/Menu.usage.mdx +230 -0
  179. package/src/components/Menu/MenuItem.types.ts +8 -0
  180. package/src/components/Modal/Modal.stories.tsx +177 -1
  181. package/src/components/Modal/Modal.usage.mdx +262 -0
  182. package/src/components/Modal/ModalCloseButton.tsx +1 -1
  183. package/src/components/MonthPicker/MonthPicker.stories.tsx +30 -0
  184. package/src/components/MonthPicker/MonthPicker.usage.mdx +191 -0
  185. package/src/components/Pagination/Pagination.stories.tsx +90 -1
  186. package/src/components/Pagination/Pagination.tsx +11 -10
  187. package/src/components/Pagination/Pagination.usage.mdx +186 -0
  188. package/src/components/PasswordInput/PasswordInput.stories.tsx +51 -0
  189. package/src/components/PasswordInput/PasswordInput.usage.mdx +193 -0
  190. package/src/components/PinInput/PinInput.stories.tsx +91 -0
  191. package/src/components/PinInput/PinInput.usage.mdx +194 -0
  192. package/src/components/Popover/Popover.stories.tsx +104 -1
  193. package/src/components/Popover/Popover.usage.mdx +197 -0
  194. package/src/components/ProgressBar/ProgressBar.stories.tsx +92 -1
  195. package/src/components/ProgressBar/ProgressBar.types.ts +9 -0
  196. package/src/components/ProgressBar/ProgressBar.usage.mdx +210 -0
  197. package/src/components/Pulse/Pulse.usage.mdx +102 -0
  198. package/src/components/RadialProgress/RadialProgress.stories.tsx +74 -1
  199. package/src/components/RadialProgress/RadialProgress.types.ts +21 -1
  200. package/src/components/RadialProgress/RadialProgress.usage.mdx +153 -0
  201. package/src/components/Radio/Radio.stories.tsx +119 -0
  202. package/src/components/Radio/Radio.usage.mdx +187 -0
  203. package/src/components/Reveal/Reveal.usage.mdx +105 -0
  204. package/src/components/ScaledContext/ScaledContext.usage.mdx +111 -0
  205. package/src/components/SeeMoreButton/SeeMoreButton.stories.tsx +146 -2
  206. package/src/components/SeeMoreButton/SeeMoreButton.types.ts +8 -0
  207. package/src/components/SeeMoreButton/SeeMoreButton.usage.mdx +213 -0
  208. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +69 -0
  209. package/src/components/SegmentedControl/SegmentedControl.tsx +6 -7
  210. package/src/components/SegmentedControl/SegmentedControl.usage.mdx +209 -0
  211. package/src/components/SegmentedProgressBar/SegmentedProgressBar.stories.tsx +54 -0
  212. package/src/components/SegmentedProgressBar/SegmentedProgressBar.types.ts +2 -0
  213. package/src/components/SegmentedProgressBar/SegmentedProgressBar.usage.mdx +145 -0
  214. package/src/components/Select/Select.stories.tsx +209 -1
  215. package/src/components/Select/Select.usage.mdx +278 -0
  216. package/src/components/Shake/Shake.usage.mdx +107 -0
  217. package/src/components/Slider/Slider.stories.tsx +116 -0
  218. package/src/components/Slider/Slider.usage.mdx +179 -0
  219. package/src/components/Spinner/Spinner.stories.tsx +64 -0
  220. package/src/components/Spinner/Spinner.usage.mdx +136 -0
  221. package/src/components/SwapTransition/SwapTransition.usage.mdx +102 -0
  222. package/src/components/Switch/Switch.stories.tsx +131 -6
  223. package/src/components/Switch/Switch.usage.mdx +199 -0
  224. package/src/components/Table/Table.stories.tsx +159 -1
  225. package/src/components/Table/Table.usage.mdx +235 -0
  226. package/src/components/Tabs/Tabs.stories.tsx +86 -0
  227. package/src/components/Tabs/Tabs.usage.mdx +219 -0
  228. package/src/components/Tag/Tag.stories.tsx +181 -4
  229. package/src/components/Tag/Tag.usage.mdx +257 -0
  230. package/src/components/Textarea/Textarea.stories.tsx +113 -0
  231. package/src/components/Textarea/Textarea.usage.mdx +186 -0
  232. package/src/components/Toast/Toast.stories.tsx +185 -3
  233. package/src/components/Toast/Toast.styles.ts +18 -10
  234. package/src/components/Toast/Toast.usage.mdx +265 -0
  235. package/src/components/Tooltip/Tooltip.stories.tsx +86 -1
  236. package/src/components/Tooltip/Tooltip.usage.mdx +211 -0
  237. package/src/components/Tree/Tree.stories.tsx +89 -0
  238. package/src/components/Tree/Tree.usage.mdx +207 -0
  239. package/src/components/Typography/Typography.stories.tsx +117 -0
  240. package/src/components/Typography/Typography.usage.mdx +251 -0
  241. package/src/components/Workflow/Workflow.usage.mdx +199 -0
  242. package/src/components/noRawScales.test.ts +5 -1
  243. package/src/foundations/BrandColour.mdx +364 -0
  244. package/src/foundations/BrandColour.stories.tsx +334 -0
  245. package/src/guidelines/ComponentPageTemplate.mdx +84 -0
  246. package/src/guidelines/FeedbackActions.mdx +162 -23
  247. package/src/guidelines/_components/Lang.tsx +175 -0
  248. package/src/guidelines/_components/TokenTable.tsx +136 -0
  249. package/src/theme/BazePalette.stories.tsx +111 -1
  250. package/src/theme/Palette.stories.tsx +2 -2
  251. package/src/theme/SemanticTokens.mdx +75 -16
  252. package/src/theme/claude.md +15 -9
  253. package/src/theme/colors.ts +33 -3
  254. package/src/theme/contrast.test.ts +32 -0
  255. package/src/theme/palette.generated.ts +99 -0
  256. package/src/theme/paletteSwatches.ts +35 -0
@@ -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 { CORAL, RAMPS, SCHEMES, SYSTEM_HUES } from './palette.generated';
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