@keyfunc/keybricks-ds 1.0.3 → 2.1.1

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 (358) hide show
  1. package/DEPLOY.md +4 -4
  2. package/DESIGN.md +154 -53
  3. package/INTEGRATION.md +176 -36
  4. package/SKILL.md +6 -4
  5. package/_adherence.oxlintrc.json +183 -72
  6. package/_scripts/build-index.mjs +9 -0
  7. package/_scripts/build-tokens.mjs +5 -2
  8. package/assets/icons/icon-index.js +1 -1
  9. package/assets/icons/icon-index.json +1 -1
  10. package/components/_cards/accordion.card.html +2 -2
  11. package/components/_cards/action-chip.card.html +8 -3
  12. package/components/_cards/activity.card.html +2 -2
  13. package/components/_cards/alert.card.html +2 -2
  14. package/components/_cards/app-chrome.card.html +4 -4
  15. package/components/_cards/banner.card.html +1 -1
  16. package/components/_cards/breadcrumb.card.html +2 -2
  17. package/components/_cards/button-1-base.card.html +2 -2
  18. package/components/_cards/button-2-states.card.html +14 -14
  19. package/components/_cards/button-3-sizes-icons.card.html +1 -1
  20. package/components/_cards/button-4-group.card.html +5 -5
  21. package/components/_cards/canvas-zoom-controls.card.html +1 -1
  22. package/components/_cards/cards-indicators.card.html +2 -2
  23. package/components/_cards/charts-1-sparkline.card.html +2 -2
  24. package/components/_cards/charts-10-gauge.card.html +4 -4
  25. package/components/_cards/charts-11-funnel.card.html +2 -2
  26. package/components/_cards/charts-12-treemap.card.html +2 -2
  27. package/components/_cards/charts-14-radar.card.html +1 -1
  28. package/components/_cards/charts-15-distribution.card.html +1 -1
  29. package/components/_cards/charts-16-pareto.card.html +2 -2
  30. package/components/_cards/charts-17-candlestick.card.html +2 -2
  31. package/components/_cards/charts-18-sankey.card.html +2 -2
  32. package/components/_cards/charts-19-chord.card.html +2 -2
  33. package/components/_cards/charts-2-line.card.html +2 -2
  34. package/components/_cards/charts-20-sunburst.card.html +2 -2
  35. package/components/_cards/charts-21-worldmap.card.html +2 -2
  36. package/components/_cards/charts-22-gantt.card.html +2 -2
  37. package/components/_cards/charts-23-bar3d.card.html +2 -2
  38. package/components/_cards/charts-24-pie3d.card.html +2 -2
  39. package/components/_cards/charts-25-surface3d.card.html +2 -2
  40. package/components/_cards/charts-26-scatter3d.card.html +2 -2
  41. package/components/_cards/charts-27-ribbon3d.card.html +2 -2
  42. package/components/_cards/charts-3-bar.card.html +2 -2
  43. package/components/_cards/charts-4-barlist.card.html +2 -2
  44. package/components/_cards/charts-5-donut.card.html +3 -3
  45. package/components/_cards/charts-6-scatter.card.html +2 -2
  46. package/components/_cards/charts-7-heatmap.card.html +2 -2
  47. package/components/_cards/charts-8-waterfall.card.html +2 -2
  48. package/components/_cards/charts-9-bullet.card.html +2 -2
  49. package/components/_cards/charts-99-fullpage.card.html +5 -5
  50. package/components/_cards/checkbox.card.html +4 -4
  51. package/components/_cards/codeblock.card.html +1 -1
  52. package/components/_cards/combobox.card.html +3 -2
  53. package/components/_cards/context-menu.card.html +3 -2
  54. package/components/_cards/date-picker.card.html +5 -2
  55. package/components/_cards/diffvalue.card.html +2 -2
  56. package/components/_cards/divider.card.html +3 -3
  57. package/components/_cards/drawer.card.html +2 -2
  58. package/components/_cards/dropdown-menu.card.html +6 -6
  59. package/components/_cards/dropzone.card.html +1 -1
  60. package/components/_cards/empty-state.card.html +5 -5
  61. package/components/_cards/filter-bar.card.html +5 -5
  62. package/components/_cards/icon-button.card.html +2 -2
  63. package/components/_cards/icons-1-core.card.html +2 -2
  64. package/components/_cards/icons-2-feather.card.html +3 -3
  65. package/components/_cards/icons-3-unicons.card.html +3 -3
  66. package/components/_cards/input.card.html +5 -2
  67. package/components/_cards/kbd.card.html +2 -2
  68. package/components/_cards/keyvalue.card.html +2 -2
  69. package/components/_cards/listrow.card.html +2 -2
  70. package/components/_cards/loading.card.html +2 -2
  71. package/components/_cards/log-viewer.card.html +2 -2
  72. package/components/_cards/modal.card.html +9 -9
  73. package/components/_cards/multi-select.card.html +3 -2
  74. package/components/_cards/number-stepper.card.html +3 -2
  75. package/components/_cards/pagination.card.html +3 -2
  76. package/components/_cards/people.card.html +3 -3
  77. package/components/_cards/pipeline-node.card.html +2 -2
  78. package/components/_cards/pipeline-palette.card.html +4 -4
  79. package/components/_cards/radio.card.html +46 -0
  80. package/components/_cards/search.card.html +5 -2
  81. package/components/_cards/segmented-control.card.html +39 -0
  82. package/components/_cards/select.card.html +4 -4
  83. package/components/_cards/slider.card.html +1 -1
  84. package/components/_cards/smart-table.card.html +1 -1
  85. package/components/_cards/spreadsheet.card.html +2 -2
  86. package/components/_cards/stepper.card.html +2 -2
  87. package/components/_cards/table.card.html +103 -0
  88. package/components/_cards/tabs.card.html +3 -2
  89. package/components/_cards/tag.card.html +5 -2
  90. package/components/_cards/textarea.card.html +2 -2
  91. package/components/_cards/timeline.card.html +1 -1
  92. package/components/_cards/toast.card.html +4 -4
  93. package/components/_cards/toggles.card.html +45 -56
  94. package/components/_cards/tooltip.card.html +5 -5
  95. package/components/_cards/tree.card.html +2 -2
  96. package/components/_shared/src-buttons.js +1 -1
  97. package/components/_shared/src-charts.js +1 -1
  98. package/components/_shared/src-data.js +1 -1
  99. package/components/_shared/src-display.js +1 -1
  100. package/components/_shared/src-feedback.js +1 -1
  101. package/components/_shared/src-forms.js +1 -1
  102. package/components/_shared/src-navigation.js +1 -1
  103. package/components/_shared/src-pipeline.js +1 -1
  104. package/components/_shared/src-tabs.js +1 -1
  105. package/components/_shared/view-source.js +9 -4
  106. package/components/_vue/index.mjs +9 -5
  107. package/components/buttons/ActionChip.d.ts +3 -1
  108. package/components/buttons/ActionChip.jsx +4 -4
  109. package/components/buttons/ActionChip.vue +4 -4
  110. package/components/buttons/Button.d.ts +5 -2
  111. package/components/buttons/Button.jsx +15 -18
  112. package/components/buttons/Button.vue +17 -18
  113. package/components/buttons/ButtonGroup.vue +1 -1
  114. package/components/buttons/IconButton.d.ts +2 -1
  115. package/components/buttons/IconButton.jsx +9 -7
  116. package/components/buttons/IconButton.vue +10 -8
  117. package/components/buttons/buttons.prompt.md +6 -5
  118. package/components/charts/Bar3D.jsx +2 -2
  119. package/components/charts/Bar3D.vue +2 -2
  120. package/components/charts/BarChart.jsx +4 -4
  121. package/components/charts/BarChart.vue +4 -4
  122. package/components/charts/BarList.jsx +1 -1
  123. package/components/charts/BarList.vue +1 -1
  124. package/components/charts/BoxPlot.jsx +1 -1
  125. package/components/charts/BoxPlot.vue +2 -2
  126. package/components/charts/BulletChart.jsx +1 -1
  127. package/components/charts/BulletChart.vue +1 -1
  128. package/components/charts/CandlestickChart.jsx +2 -2
  129. package/components/charts/CandlestickChart.vue +3 -3
  130. package/components/charts/ChartKit.jsx +5 -5
  131. package/components/charts/ChartLegend.vue +16 -0
  132. package/components/charts/ChartTooltip.vue +16 -0
  133. package/components/charts/ChordChart.jsx +2 -2
  134. package/components/charts/ChordChart.vue +2 -2
  135. package/components/charts/GanttChart.jsx +2 -2
  136. package/components/charts/GanttChart.vue +2 -2
  137. package/components/charts/GaugeChart.jsx +2 -2
  138. package/components/charts/GaugeChart.vue +2 -2
  139. package/components/charts/HeatmapChart.jsx +2 -2
  140. package/components/charts/HeatmapChart.vue +2 -2
  141. package/components/charts/Histogram.jsx +2 -2
  142. package/components/charts/Histogram.vue +3 -3
  143. package/components/charts/LineChart.jsx +1 -1
  144. package/components/charts/LineChart.vue +3 -3
  145. package/components/charts/ParetoChart.jsx +3 -3
  146. package/components/charts/ParetoChart.vue +4 -4
  147. package/components/charts/PlotGrid.vue +18 -0
  148. package/components/charts/RadarChart.jsx +1 -1
  149. package/components/charts/RadarChart.vue +1 -1
  150. package/components/charts/Ribbon3D.jsx +2 -2
  151. package/components/charts/Ribbon3D.vue +2 -2
  152. package/components/charts/SankeyChart.jsx +2 -2
  153. package/components/charts/SankeyChart.vue +2 -2
  154. package/components/charts/Scatter3D.jsx +1 -1
  155. package/components/charts/Scatter3D.vue +1 -1
  156. package/components/charts/ScatterChart.jsx +3 -3
  157. package/components/charts/ScatterChart.vue +4 -4
  158. package/components/charts/Sparkline.jsx +1 -1
  159. package/components/charts/Sparkline.vue +1 -1
  160. package/components/charts/SunburstChart.jsx +1 -1
  161. package/components/charts/SunburstChart.vue +1 -1
  162. package/components/charts/Surface3D.jsx +2 -2
  163. package/components/charts/Surface3D.vue +2 -2
  164. package/components/charts/TreemapChart.jsx +2 -2
  165. package/components/charts/TreemapChart.vue +2 -2
  166. package/components/charts/WaterfallChart.jsx +2 -2
  167. package/components/charts/WaterfallChart.vue +3 -3
  168. package/components/charts/WorldMap.jsx +2 -2
  169. package/components/charts/WorldMap.vue +2 -2
  170. package/components/charts/XLabels.vue +11 -0
  171. package/components/data/CodeBlock.jsx +1 -1
  172. package/components/data/CodeBlock.vue +1 -1
  173. package/components/data/DiffValue.jsx +1 -1
  174. package/components/data/DiffValue.vue +1 -1
  175. package/components/data/FilterBar.d.ts +2 -0
  176. package/components/data/FilterBar.jsx +10 -9
  177. package/components/data/FilterBar.vue +9 -8
  178. package/components/data/KeyValue.jsx +3 -3
  179. package/components/data/KeyValue.vue +3 -3
  180. package/components/data/ListRow.jsx +2 -2
  181. package/components/data/ListRow.vue +2 -2
  182. package/components/data/Pagination.d.ts +5 -1
  183. package/components/data/Pagination.jsx +16 -12
  184. package/components/data/Pagination.vue +14 -9
  185. package/components/data/SmartTable.d.ts +4 -1
  186. package/components/data/SmartTable.jsx +16 -14
  187. package/components/data/SmartTable.vue +25 -22
  188. package/components/data/Spreadsheet.d.ts +2 -0
  189. package/components/data/Spreadsheet.jsx +12 -11
  190. package/components/data/Spreadsheet.vue +14 -13
  191. package/components/data/Table.d.ts +47 -0
  192. package/components/data/Table.jsx +85 -0
  193. package/components/data/Table.vue +63 -0
  194. package/components/data/data.prompt.md +3 -3
  195. package/components/display/Avatar.vue +3 -2
  196. package/components/display/AvatarGroup.vue +3 -2
  197. package/components/display/Badge.vue +1 -1
  198. package/components/display/Divider.vue +3 -3
  199. package/components/display/Donut.vue +3 -2
  200. package/components/display/IconTile.vue +2 -1
  201. package/components/display/Kbd.vue +1 -1
  202. package/components/display/ProgressBar.jsx +1 -1
  203. package/components/display/ProgressBar.vue +1 -1
  204. package/components/display/StatCard.vue +1 -1
  205. package/components/display/Tag.d.ts +3 -1
  206. package/components/display/Tag.jsx +4 -4
  207. package/components/display/Tag.vue +4 -4
  208. package/components/feedback/Accordion.jsx +2 -2
  209. package/components/feedback/Accordion.vue +2 -2
  210. package/components/feedback/ActivityItem.d.ts +3 -1
  211. package/components/feedback/ActivityItem.jsx +5 -5
  212. package/components/feedback/ActivityItem.vue +5 -4
  213. package/components/feedback/Alert.jsx +4 -4
  214. package/components/feedback/Alert.vue +3 -3
  215. package/components/feedback/Banner.jsx +5 -5
  216. package/components/feedback/Banner.vue +5 -5
  217. package/components/feedback/ContextMenu.d.ts +3 -1
  218. package/components/feedback/ContextMenu.jsx +5 -5
  219. package/components/feedback/ContextMenu.vue +5 -5
  220. package/components/feedback/DotActivity.vue +3 -3
  221. package/components/feedback/Drawer.d.ts +2 -0
  222. package/components/feedback/Drawer.jsx +6 -6
  223. package/components/feedback/Drawer.vue +22 -15
  224. package/components/feedback/EmptyState.vue +2 -2
  225. package/components/feedback/LogViewer.vue +1 -1
  226. package/components/feedback/Modal.d.ts +2 -0
  227. package/components/feedback/Modal.jsx +12 -11
  228. package/components/feedback/Modal.vue +10 -8
  229. package/components/feedback/Skeleton.vue +2 -1
  230. package/components/feedback/Spinner.vue +2 -1
  231. package/components/feedback/Stepper.vue +1 -1
  232. package/components/feedback/Timeline.jsx +1 -1
  233. package/components/feedback/Timeline.vue +1 -1
  234. package/components/feedback/Toast.vue +4 -4
  235. package/components/feedback/ToastStack.vue +11 -0
  236. package/components/feedback/Tooltip.vue +19 -0
  237. package/components/feedback/feedback.prompt.md +4 -4
  238. package/components/forms/Checkbox.d.ts +3 -2
  239. package/components/forms/Checkbox.jsx +7 -7
  240. package/components/forms/Checkbox.vue +8 -8
  241. package/components/forms/Combobox.d.ts +2 -0
  242. package/components/forms/Combobox.jsx +12 -10
  243. package/components/forms/Combobox.vue +11 -10
  244. package/components/forms/DatePicker.d.ts +4 -0
  245. package/components/forms/DatePicker.jsx +16 -12
  246. package/components/forms/DatePicker.vue +15 -11
  247. package/components/forms/Dropzone.jsx +2 -2
  248. package/components/forms/Dropzone.vue +5 -5
  249. package/components/forms/Field.d.ts +5 -1
  250. package/components/forms/Field.jsx +4 -4
  251. package/components/forms/Field.vue +4 -4
  252. package/components/forms/Input.d.ts +5 -1
  253. package/components/forms/Input.jsx +7 -7
  254. package/components/forms/Input.vue +3 -3
  255. package/components/forms/MultiSelect.d.ts +2 -0
  256. package/components/forms/MultiSelect.jsx +13 -11
  257. package/components/forms/MultiSelect.vue +12 -11
  258. package/components/forms/NumberStepper.d.ts +3 -1
  259. package/components/forms/NumberStepper.jsx +7 -7
  260. package/components/forms/NumberStepper.vue +8 -7
  261. package/components/forms/Radio.d.ts +30 -0
  262. package/components/forms/Radio.jsx +65 -0
  263. package/components/forms/Radio.vue +17 -9
  264. package/components/forms/RadioGroup.vue +22 -4
  265. package/components/forms/SearchInput.d.ts +3 -1
  266. package/components/forms/SearchInput.jsx +6 -6
  267. package/components/forms/SearchInput.vue +7 -6
  268. package/components/forms/Select.d.ts +3 -2
  269. package/components/forms/Select.jsx +6 -7
  270. package/components/forms/Select.vue +6 -6
  271. package/components/forms/Slider.jsx +3 -3
  272. package/components/forms/Slider.vue +3 -3
  273. package/components/forms/Switch.d.ts +32 -24
  274. package/components/forms/Switch.jsx +85 -35
  275. package/components/forms/Switch.vue +57 -11
  276. package/components/forms/Textarea.vue +4 -4
  277. package/components/forms/forms.prompt.md +4 -1
  278. package/components/forms/input-base.js +2 -1
  279. package/components/index.d.ts +2 -2
  280. package/components/index.js +5 -5
  281. package/components/navigation/Breadcrumb.jsx +3 -3
  282. package/components/navigation/Breadcrumb.vue +4 -4
  283. package/components/navigation/DocTree.jsx +3 -3
  284. package/components/navigation/DocTree.vue +3 -3
  285. package/components/navigation/PageHeading.vue +1 -1
  286. package/components/navigation/PageToolbar.vue +7 -6
  287. package/components/navigation/Sidebar.jsx +1 -1
  288. package/components/navigation/Sidebar.vue +3 -3
  289. package/components/navigation/ThemeToggle.vue +2 -1
  290. package/components/navigation/TopBar.d.ts +3 -1
  291. package/components/navigation/TopBar.jsx +6 -6
  292. package/components/navigation/Tree.jsx +5 -5
  293. package/components/navigation/Tree.vue +5 -5
  294. package/components/pipeline/ConfigPanel.d.ts +2 -0
  295. package/components/pipeline/ConfigPanel.jsx +9 -9
  296. package/components/pipeline/ConfigPanel.vue +9 -9
  297. package/components/pipeline/DataPreview.d.ts +3 -1
  298. package/components/pipeline/DataPreview.jsx +7 -7
  299. package/components/pipeline/DataPreview.vue +7 -7
  300. package/components/pipeline/NodeCard.jsx +3 -3
  301. package/components/pipeline/NodeCard.vue +3 -3
  302. package/components/pipeline/PaletteItem.vue +2 -2
  303. package/components/pipeline/PaletteListItem.vue +1 -1
  304. package/components/pipeline/PalettePanel.jsx +2 -2
  305. package/components/pipeline/PalettePanel.vue +1 -1
  306. package/components/pipeline/Port.vue +15 -0
  307. package/components/pipeline/PortLabel.vue +15 -0
  308. package/components/pipeline/ZoomControls.vue +1 -1
  309. package/components/pipeline/port-skin.js +13 -0
  310. package/components/px.js +4 -0
  311. package/components/tabs/PanelTabs.vue +5 -4
  312. package/components/tabs/PillTabs.vue +5 -4
  313. package/components/tabs/SegmentedControl.d.ts +11 -4
  314. package/components/tabs/SegmentedControl.jsx +25 -10
  315. package/components/tabs/SegmentedControl.vue +19 -7
  316. package/components/tabs/Tabs.d.ts +5 -3
  317. package/components/tabs/Tabs.jsx +15 -15
  318. package/components/tabs/Tabs.vue +5 -5
  319. package/components/tabs/ViewToggle.d.ts +3 -1
  320. package/components/tabs/ViewToggle.jsx +5 -5
  321. package/components/tabs/ViewToggle.vue +5 -5
  322. package/components/tabs/tabs.prompt.md +4 -2
  323. package/keybricks.css +4 -0
  324. package/package.json +6 -3
  325. package/readme.md +90 -123
  326. package/readme.zh-CN.md +120 -0
  327. package/tokens/charts.css +20 -17
  328. package/tokens/colors.css +2 -2
  329. package/tokens/dark.css +2 -2
  330. package/tokens/hover.css +32 -0
  331. package/tokens/interaction.css +3 -1
  332. package/tokens/layout.css +29 -7
  333. package/tokens/tokens.d.ts +36 -0
  334. package/tokens/tokens.js +143 -89
  335. package/tokens/tokens.json +240 -106
  336. package/tokens/typography.css +27 -14
  337. package/components/_cards/brand-visual.card.html +0 -43
  338. package/components/_cards/datatable.card.html +0 -48
  339. package/components/_shared/src-brand.js +0 -1
  340. package/components/brand/BrandVisual.d.ts +0 -17
  341. package/components/brand/BrandVisual.jsx +0 -29
  342. package/components/brand/BrandVisual.vue +0 -34
  343. package/components/brand/_dir.card.html +0 -13
  344. package/components/brand/brandMotifs.js +0 -210
  345. package/components/buttons/_dir.card.html +0 -13
  346. package/components/charts/ChartKit.vue +0 -47
  347. package/components/charts/_dir.card.html +0 -7
  348. package/components/data/DataTable.d.ts +0 -28
  349. package/components/data/DataTable.jsx +0 -32
  350. package/components/data/DataTable.vue +0 -25
  351. package/components/data/_dir.card.html +0 -13
  352. package/components/display/_dir.card.html +0 -13
  353. package/components/feedback/_dir.card.html +0 -13
  354. package/components/forms/_dir.card.html +0 -13
  355. package/components/icons/_dir.card.html +0 -13
  356. package/components/navigation/_dir.card.html +0 -13
  357. package/components/pipeline/_dir.card.html +0 -13
  358. package/components/tabs/_dir.card.html +0 -13
package/DEPLOY.md CHANGED
@@ -55,11 +55,11 @@ deploys the documentation site. Watch it under *Build → Pipelines*.
55
55
  **5. Cut the first release.**
56
56
 
57
57
  ```bash
58
- git tag v1.0.0 && git push --tags
58
+ git tag v2.1.1 && git push --tags
59
59
  ```
60
60
 
61
61
  That tag runs `generated:check` → `version:check` → `npm publish`. Confirm under *Deploy →
62
- Package Registry*: `@keyfunc/keybricks-ds` 1.0.0.
62
+ Package Registry*: `@keyfunc/keybricks-ds` 2.1.1.
63
63
 
64
64
  **6. Hand developers two things:** the Pages URL, and the `.npmrc` snippet in §4 below.
65
65
 
@@ -90,7 +90,7 @@ and `npm pack` both produce it via the `prepack` hook; CI does it explicitly. Re
90
90
  is a normal committed file.
91
91
 
92
92
  Published (`files` in `package.json`): `components/`, `tokens/`, `assets/`, `_scripts/`,
93
- `styles.css`, the four `.md` guides, `_adherence.oxlintrc.json`.
93
+ `styles.css`, `keybricks.css` (the `styles.css` export: tokens + `tokens/hover.css`), the four `.md` guides plus `readme.zh-CN.md`, `_adherence.oxlintrc.json`.
94
94
 
95
95
  > Installing from a **git tag** skips `prepack`, so `@keyfunc/keybricks-ds/vue` is absent in
96
96
  > that mode — Vue apps on a git dependency should deep-import
@@ -156,7 +156,7 @@ GitLab injects `CI_JOB_TOKEN` — use that instead and no secret is stored anywh
156
156
  **Install — straight from git** (no registry, no publish; works today)
157
157
 
158
158
  ```json
159
- "@keyfunc/keybricks-ds": "git+ssh://git@gitlab.epm2demo.cn/Felix/keybricks-ds.git#v1.0.0"
159
+ "@keyfunc/keybricks-ds": "git+ssh://git@gitlab.epm2demo.cn/Felix/keybricks-ds.git#v2.1.1"
160
160
  ```
161
161
 
162
162
  Because the package has no build step, a git dependency needs no `prepare` script — npm
package/DESIGN.md CHANGED
@@ -33,7 +33,8 @@ One action hue. Color carries meaning; the interface itself is near-monochrome.
33
33
  | `--bg-app` | `#fafafa` | Page canvas behind panels |
34
34
  | `--bg-surface` | `#ffffff` | Cards, menus, table cells |
35
35
  | `--bg-raised` | `#ffffff` | Modals, drawers, popovers |
36
- | `--bg-inset` | `#fafafa` | Wells, table headers, code blocks |
36
+ | `--bg-inset` | `#fafafa` | Wells, code blocks |
37
+ | `--bg-table-header` | `#f5f5f5` | Table header row — one step below `--bg-app`, so it still reads when the table sits on a grey page |
37
38
  | `--bg-hover` | `#f5f5f5` | Row / item hover |
38
39
  | `--bg-active` | `#f5f5f5` | Selected nav pill, toggled control |
39
40
  | `--bg-press` | `#e5e5e5` | Press wash |
@@ -46,9 +47,9 @@ order (`app` → `surface` → `raised`) and depth reads correctly in both theme
46
47
  | Token | Light | Use |
47
48
  | --- | --- | --- |
48
49
  | `--text-primary` | `#0a0a0a` | Maximum emphasis |
49
- | `--text-heading` | `#171717` | Headings, table headers |
50
+ | `--text-heading` | `#171717` | Headings |
50
51
  | `--text-body` | `#525252` | Default body text |
51
- | `--text-secondary` | `#737373` | Meta, labels, captions |
52
+ | `--text-secondary` | `#737373` | Meta, labels, captions, table headers |
52
53
  | `--text-muted` | `#a1a1a1` | Placeholder, disabled glyph |
53
54
  | `--on-accent` | `#ffffff` | Text on any saturated fill — **both themes** |
54
55
 
@@ -57,7 +58,7 @@ order (`app` → `surface` → `raised`) and depth reads correctly in both theme
57
58
  | --- | --- | --- |
58
59
  | `--border-card` | `rgba(229,229,229,.6)` | Card hairline |
59
60
  | `--border-control` | `#e5e5e5` | Input / button edge |
60
- | `--border-subtle` | `#f5f5f5` | List and table dividers |
61
+ | `--border-subtle` | `#f5f5f5` | List and table dividers — including the table header rule; a header is set apart by its `--bg-table-header` tint, never by a heavier line |
61
62
  | `--focus-border` | `#2b7fff` | Keyboard focus outline |
62
63
 
63
64
  ### Action
@@ -98,46 +99,145 @@ feedback colors mean **severity**. Do not mix the two vocabularies.
98
99
 
99
100
  ## Typography
100
101
 
101
- `--font-sans` is Inter. `--font-mono` is Menlo. There is no third family.
102
+ `--font-sans` is Inter. `--font-mono` is Menlo. There is no third family. Under
103
+ `lang="zh" | "ja" | "ko"` the sans stack continues into the system CJK face (PingFang SC /
104
+ Hiragino / Apple SD Gothic Neo on macOS, Microsoft YaHei / Yu Gothic UI / Malgun Gothic on
105
+ Windows, Noto Sans CJK elsewhere); Latin glyphs stay Inter.
102
106
 
103
- | Token | Size / line-height | Use |
107
+ **The 14px scale** — four sizes do almost all the work: 12 captions · 14 body and controls ·
108
+ 16 section titles · 20 page titles.
109
+
110
+ | Token | Size / line-height / tracking | Use |
104
111
  | --- | --- | --- |
105
- | `--text-2xs` | 10 / 12.5 | Tile labels |
106
- | `--text-xs` | 11 / 16.5 | Table cells, captions, step labels |
107
- | `--text-sm` | 12 / 18 | Form labels, inputs, chips, meta |
108
- | `--text-base` | **13 / 19.5** | **Default UI text, buttons, nav** |
109
- | `--text-md` | 14 / 21 | Section headings, panel titles |
110
- | `--text-lg` | 15 / 22.5 | Page titles |
111
- | `--text-xl` | 20 / 30 | Greeting heading |
112
- | `--text-2xl` | 24 / 31 | Modal / page hero |
112
+ | `--text-2xs` | 11 / 16 / +.064 | Chart tick labels only — nothing in the system is smaller |
113
+ | `--text-xs` | 12 / 16 / 0 | Captions, helper text, badges, tags, meta; control text at the `sm` tier |
114
+ | `--text-base` | **14 / 20 / −.15** | **Body, buttons, inputs, labels, table cells, nav** |
115
+ | `--text-md` | 16 / 24 / −.28 | Section headings, panel / card / dialog titles |
116
+ | `--text-lg` | 20 / 28 / −.45 | Page titles |
117
+ | `--text-xl` | 24 / 32 / −.54 | Greeting heading, page hero |
118
+ | `--text-num` | 24 / 32 / +.07 | Stat numbers, weight 300 |
119
+ | `--text-2xl` · `--text-3xl` · `--text-4xl` · `--text-display` | 30 · 38 · 48 · 60 | Report hero, marketing headings, dashboard hero numbers, slides |
120
+
121
+ `--text-sm` is an alias of `--text-xs` (12px) kept for compatibility — write `--text-xs`.
122
+
123
+ Weights: `--weight-light` 300, `--weight-regular` 400, `--weight-medium` 500,
124
+ `--weight-semibold` 600. **500 is the emphasis weight** — headings and active nav items are
125
+ 500, not bold. Table headers and section labels are 600.
126
+
127
+ Every size has a matching `--leading-*` and `--tracking-*`. Set all three together — or, inside
128
+ a control, read `--control-text` / `--control-leading` / `--control-tracking` and the size tier
129
+ hands you the right triple (see *Size tiers* below).
130
+
131
+ This is a **dense, 14px-default interface**. If your text looks like a marketing site, it is
132
+ too large; if a line of UI text is 11px, it is too small.
133
+
134
+ ### One size per line
135
+
136
+ Text that shares a line shares a size. Inside a control bar every label, button, input, select
137
+ and menu row is the tier's control text; a `Badge` or `Tag` is its own small object and the one
138
+ exception. In content, a secondary annotation (a timestamp beside a name, a count beside a label)
139
+ may be `--text-xs`. Never put a 14px label and a 12px control on the same baseline.
140
+
141
+ ### Table headers
113
142
 
114
- Weights: `--weight-regular` 400, `--weight-medium` 500, `--weight-semibold` 600.
115
- **500 is the emphasis weight** — headings and active nav items are 500, not bold.
143
+ A header cell is the **same size as its data cells**, weight 600, `--text-secondary`, sentence
144
+ case, no letter-spacing. The header is set apart by `--bg-table-header`, never by caps or a
145
+ heavier rule. Mono columns (`mono: true`) keep the row's size in `--font-mono` with tabular
146
+ figures — codes and amounts are never a point smaller than the words beside them.
116
147
 
117
- Every size has a matching `--leading-*` and `--tracking-*`. Set all three together; the
118
- tracking values are negative at larger sizes and are not optional.
148
+ ### Chinese, Japanese and Korean
119
149
 
120
- This is a **dense, 13px-default interface**. If your text looks like a marketing site, it is
121
- too large.
150
+ Han, kana and Hangul have no capitals and no italics, so emphasis is weight. Under
151
+ `:lang(zh|ja|ko)` the tokens change for you: `--weight-medium` becomes **600** (Microsoft
152
+ YaHei, Meiryo, Yu Gothic UI and Malgun Gothic ship no 500 face, so 500 silently renders as
153
+ Regular on Windows) and every `--tracking-*` is **0**. CJK text is never smaller than the Latin
154
+ text beside it, never letter-spaced and never transformed; a CJK table header or section label
155
+ is emphasised by weight alone. Set `lang` on `<html>`, or on the region when one panel switches
156
+ language — every component re-reads `--font-sans`, so a per-region switch works.
122
157
 
123
158
  ---
124
159
 
125
160
  ## Spacing, radii, sizing
126
161
 
127
162
  **Radii** — pick by element, not by taste:
128
- `--radius-sm` 4px (checkbox, stepper) · `--radius-md` 8px (buttons, inputs, nav, chips) ·
129
- `--radius-lg` 10px (cards, search, dropzone) · `--radius-tile` 14px · `--radius-node` 16px ·
130
- `--radius-full` (pills, avatars).
131
-
132
- **Control heights** — fixed, never improvised:
133
- `--h-button` 32px · `--h-button-sm` 30px · `--h-input` 36px · `--h-nav-item` 35.5px ·
134
- `--h-tree-item` 30px.
163
+ `--radius-sm` 4px (checkbox) · `--radius-md` 8px (buttons, inputs, selects, search, steppers,
164
+ segmented controls, nav, chips) · `--radius-lg` 10px (cards, menus, dropzone) ·
165
+ `--radius-tile` 14px · `--radius-node` 16px · `--radius-full` (pills, avatars). Radii do not
166
+ change with the size tier.
167
+
168
+ ### Size tiers — one per region
169
+
170
+ Every control reads its height, text, icon size and padding from one set of tier tokens in
171
+ `tokens/layout.css`. A **region** — the app root, a toolbar, a filter bar, a form, a table, a
172
+ dialog, a drawer — declares `data-size="sm" | "md" | "lg"` and everything inside inherits it,
173
+ so two controls that share a row can never disagree. `md` is the default on `:root`.
174
+ **Change the region, not the control.**
175
+
176
+ | Token | sm | md | lg | Used by |
177
+ | --- | --- | --- | --- | --- |
178
+ | `--control-h` | 24 | **32** | 36 | buttons, inputs, selects, search, steppers, segmented controls, chips, pagination items, menu rows |
179
+ | `--control-text` | 12 | **14** | 14 | text in controls and their labels, table cells |
180
+ | `--control-icon` | 14 | 16 | 16 | icon inside a control |
181
+ | `--control-px` | 8 | 12 | 16 | horizontal padding of a text control or button |
182
+ | `--control-gap` | 8 | 8 | 8 | inside one group: label → its control, button → button |
183
+ | `--group-gap` | 12 | 16 | 24 | between groups in one bar: field → next field |
184
+ | `--bar-h` | 32 | 40 | 44 | toolbar, filter bar, tab bar, table row, list row |
185
+ | `--bar-card-h` | 40 | 48 | 52 | a bar inside a bordered card (table toolbar, pagination) |
186
+ | `--edge-pad` | 12 | 16 | 16 | card edge → first control or cell |
187
+ | `--cell-px` | 8 | 12 | 16 | horizontal padding of a table cell |
188
+ | `--check-size` | 14 | 16 | 16 | checkbox and radio box |
189
+ | `--tag-h` | 20 | 24 | 28 | `Tag` |
190
+ | `--switch-w` × `--switch-h` | 28 × 16 | 36 × 20 | 44 × 24 | `Switch` track |
191
+
192
+ Where each tier belongs:
193
+
194
+ - **sm** — dense data grids (`SmartTable`, `Spreadsheet` and `DataPreview` set it themselves),
195
+ controls inside pipeline nodes, a toolbar that must fit a 32px row.
196
+ - **md** — everything else: app toolbars, filter bars, tables, long forms, settings pages.
197
+ - **lg** — dialogs (`Modal` sets it), short forms, wizards, onboarding, a page with one task.
198
+
199
+ Rules:
200
+
201
+ - **One tier per row.** Never a 24px icon button beside a 32px input.
202
+ - **Nothing interactive is smaller than 24px.** The former `xs` sizes and `dense` props map to `sm`.
203
+ - A per-control `size` prop only stamps `data-size` on that control. Use it for a control that
204
+ stands alone in its band — never to "fix" one control inside a bar.
205
+ - Text inside a control is `--control-text`, not `--text-xs` because it looks tidier.
206
+ - `--h-button` and `--h-input` are aliases of `--control-h`; `--h-button-sm` is 24px. Prefer the
207
+ tier tokens in new code.
208
+
209
+ ### Button emphasis — pick the variant, never the size
210
+
211
+ The tier says how dense a region is; the **variant** says how important an action is. Never
212
+ shrink a button to make it feel lighter: a 24px button beside 32px controls and 14px text reads
213
+ as a mistake on a calm page, and the tier rule above forbids it anyway. Reach for a quieter
214
+ variant instead.
215
+
216
+ | Variant | At rest | Where it lives |
217
+ | --- | --- | --- |
218
+ | `primary` | blue fill | The one main action of the view — page toolbar, dialog footer, wizard footer. Never two in sight. |
219
+ | `outline` | hairline box | Secondary actions that must read as buttons at a glance: beside a primary, in forms, in toolbars. |
220
+ | `ghost` | no box, grey wash on hover | Actions in card and section headers, table toolbars, panel chrome — anything that should stay quiet until needed. Same height and padding as `outline`, so it lines up with the controls beside it. Icon-only → `IconButton`, same rules. |
221
+ | `text` | bare label, underline on hover | Links that happen to be buttons: *View all* at a list end or header right, *Clear filters* in an empty state, *Learn more* inside a sentence. Never beside a boxed button, never as a toolbar action. |
222
+ | `primary-soft` · `dark` · `danger` · `danger-soft` | tint · near-black · red | Tinted secondary emphasis · brand / AI actions · destructive confirms and their softer in-row form. |
223
+
224
+ **Card and section headers** (title left, actions right) hold either controls at the region's
225
+ tier — `ghost` for secondary actions such as *Export* or *Filter*, and `primary` only when the
226
+ card *is* the page's main object, which makes it the page's one primary — or a single `text` link
227
+ such as *View all*. Not both in one header. The header row is the region's `--bar-h`; a 16px
228
+ section title and 32px ghost buttons share it comfortably.
229
+
230
+ **Chrome** (fixed, not tiered): `--sidebar-w` 240 · `--rail-w` 64 · `--topbar-h` 56 ·
231
+ `--panel-w` 400 · `--drawer-h` 250 · `--h-nav-item` 36 · `--h-subnav-item` 32 ·
232
+ `--h-tree-item` 32.
135
233
 
136
234
  **Page rhythm**: `--page-pad-y` 24px · `--page-pad-x` 32px · `--section-gap` 24px ·
137
- `--card-pad` 21px (`--card-pad-sm` 17px for dense cards).
235
+ `--card-pad` 21px (`--card-pad-sm` 17px for dense cards). Gaps inside a bar come from the tier:
236
+ 8px inside a group, 12 / 16 / 24px between groups, `--edge-pad` from a card edge to its first
237
+ control.
138
238
 
139
- The 35.5px and 21px are real. They come from the source design file. **Do not round them to
140
- 36 or 24 to fit a mental 4px grid.**
239
+ The 21px and 17px are real. They come from the source design file. **Do not round them to 24 or
240
+ 16 to fit a mental 4px grid.**
141
241
 
142
242
  **Shadows** — four, and only four: `--shadow-node` (canvas cards), `--shadow-menu` (dropdowns,
143
243
  popovers), `--shadow-modal` (modals), `--shadow-selected` (selected node). Cards in content
@@ -163,9 +263,16 @@ Nothing bounces. Nothing slides more than a few pixels. Keyframes available:
163
263
 
164
264
  ## Interaction states — you get these for free
165
265
 
166
- `tokens/interaction.css` applies press and keyboard focus globally. Do not re-implement them.
266
+ `tokens/interaction.css` applies press and keyboard focus globally; `tokens/hover.css` carries the hover hooks. Do not re-implement them.
167
267
 
168
- - **Hover** — one step darker (`--bg-hover`, `--action-primary-hover`, `--soft-hover`)
268
+ - **Hover** — every pointer target answers it, one step at a time:
269
+ filled and boxed buttons, menu rows, list rows, nav and tree items, segments → one surface step
270
+ (`--bg-hover`, `--action-primary-hover`, `--soft-hover`); field boxes (inputs, selects, date,
271
+ combobox, multi-select, search, stepper) → border `--border-control` to `--border-strong`;
272
+ text-only controls (inactive tabs, legend items, clear ×, copy) → ink to `--text-heading`;
273
+ table body rows → `--bg-inset`; checkbox and radio rings → `--text-muted`; switch tracks →
274
+ one step toward the ink colour; inline action links → underline. Selected, open, focused and
275
+ error states never change on hover.
169
276
  - **Press** — a second step, applied automatically on `:active`
170
277
  - **Focus** — 2px `--focus-border` outline on `:focus-visible` only (never on mouse click)
171
278
  - **Disabled** — 55% opacity, default cursor
@@ -194,47 +301,41 @@ An indicator appears **only where a drop is legal**, and its shape names the ope
194
301
 
195
302
  ---
196
303
 
197
- ## Brand expression
198
-
199
- `BrandVisual` is the only place saturated dark artwork is allowed, and it is decoration —
200
- never a data surface.
201
-
202
- - **Seven motifs, one canvas.** Every motif is authored at 1200×400 and cropped to fill its
203
- box. Do not author a new one-off SVG for a hero; pick a motif.
204
- - **It never follows the theme.** The artwork is always the dark brand palette in both light
205
- and dark mode — it is imagery, not a surface.
206
- - **Text on it uses `--on-accent`-weight foregrounds** (`#fff` / `#93c5fd` for eyebrows) and
207
- sits in the calm region of the composition, never on top of the bright focal marker.
208
- - **Do not read data into it.** The arcs, lattices and ticks are not a chart; anything a user
209
- must read goes in a real chart component.
210
-
211
- ---
212
-
213
304
  ## Do not
214
305
 
215
306
  The list that prevents the most rework. These are absolute.
216
307
 
217
308
  - **Do not hard-code a hex, rgb, or named color.** Use a semantic token.
218
- - **Do not put a `BrandVisual` behind readable content without a scrim or a calm region** —
219
- and never restyle its palette to match a theme.
309
+ - **Do not write a unitless number for a length in a Vue `:style`.** Vue does not add `px`;
310
+ write `'30px'` or `px(size)` from `components/px.js`. (React adds `px` itself — except for
311
+ `lineHeight`, where a bare number is a multiplier.)
220
312
  - **Do not reference a palette step** (`--neutral-500`, `--blue-600`) in component code.
221
313
  - **Do not use any font other than Inter and Menlo.** No Roboto, no Arial, no system-ui stack.
222
314
  - **Do not use gradients.** The only exception in the entire system is the chart area fill.
223
315
  - **Do not add drop shadows to content cards.** Cards use a 1px `--border-card` hairline.
224
- - **Do not round the odd numbers.** 35.5px, 21px, 17px, 11px are from the source file.
316
+ - **Do not round the odd numbers.** `--card-pad` 21px and `--card-pad-sm` 17px are from the source
317
+ file; the 11px of `--text-2xs` is deliberate.
318
+ - **Do not use size as emphasis.** A quieter action gets a quieter variant (`ghost`, `text`), never a
319
+ smaller size.
320
+ - **Do not mix size tiers in one row.** The region declares `data-size`; the controls inherit. A
321
+ `size` prop on one control inside a bar is a bug, not a fix.
322
+ - **Do not shrink, letter-space or uppercase Chinese, Japanese or Korean text.** Under `lang`
323
+ the emphasis weight is 600 and tracking is 0 — that is the whole CJK rule.
225
324
  - **Do not put dark text on a saturated fill.** `--on-accent` (white) is the only option,
226
325
  in both themes — this is why the dark-mode primary button keeps white text.
227
326
  - **Do not scale or shift elements on press.** Press is a color step only.
228
327
  - **Do not show a drop indicator where the drop is impossible.** No half-row boxes on a
229
328
  container, no insert rules on a node that can't take children.
230
329
  - **Do not build a new primitive when one exists.** Check the component index in
231
- `INTEGRATION.md` first — there are 118.
330
+ `INTEGRATION.md` first — there are 117.
232
331
  - **Do not use emoji as icons.** Use `<Icon name="..." />` (362 glyphs) or `<Unicon>` (1,206).
233
332
  - **Do not invent new component variants.** If `Button` lacks the variant you want, that is a
234
333
  design-system request, not a local override.
235
334
  - **Do not stack two primary buttons.** One primary action per view; everything else is
236
335
  `outline`, `ghost`, or `text`.
237
- - **Do not use full-uppercase text** except in 9–10px section labels with letter-spacing.
336
+ - **Do not use full-uppercase text.** Table headers and section labels are sentence case, weight
337
+ 600, tracking 0 — the same size as the text they label. (The 10px eyebrows in this site's own
338
+ card chrome are documentation furniture, not a component pattern.)
238
339
  - **Do not animate anything longer than 360ms** or with a bounce/elastic easing.
239
340
 
240
341
  ---