@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.
- package/DEPLOY.md +4 -4
- package/DESIGN.md +154 -53
- package/INTEGRATION.md +176 -36
- package/SKILL.md +6 -4
- package/_adherence.oxlintrc.json +183 -72
- package/_scripts/build-index.mjs +9 -0
- package/_scripts/build-tokens.mjs +5 -2
- package/assets/icons/icon-index.js +1 -1
- package/assets/icons/icon-index.json +1 -1
- package/components/_cards/accordion.card.html +2 -2
- package/components/_cards/action-chip.card.html +8 -3
- package/components/_cards/activity.card.html +2 -2
- package/components/_cards/alert.card.html +2 -2
- package/components/_cards/app-chrome.card.html +4 -4
- package/components/_cards/banner.card.html +1 -1
- package/components/_cards/breadcrumb.card.html +2 -2
- package/components/_cards/button-1-base.card.html +2 -2
- package/components/_cards/button-2-states.card.html +14 -14
- package/components/_cards/button-3-sizes-icons.card.html +1 -1
- package/components/_cards/button-4-group.card.html +5 -5
- package/components/_cards/canvas-zoom-controls.card.html +1 -1
- package/components/_cards/cards-indicators.card.html +2 -2
- package/components/_cards/charts-1-sparkline.card.html +2 -2
- package/components/_cards/charts-10-gauge.card.html +4 -4
- package/components/_cards/charts-11-funnel.card.html +2 -2
- package/components/_cards/charts-12-treemap.card.html +2 -2
- package/components/_cards/charts-14-radar.card.html +1 -1
- package/components/_cards/charts-15-distribution.card.html +1 -1
- package/components/_cards/charts-16-pareto.card.html +2 -2
- package/components/_cards/charts-17-candlestick.card.html +2 -2
- package/components/_cards/charts-18-sankey.card.html +2 -2
- package/components/_cards/charts-19-chord.card.html +2 -2
- package/components/_cards/charts-2-line.card.html +2 -2
- package/components/_cards/charts-20-sunburst.card.html +2 -2
- package/components/_cards/charts-21-worldmap.card.html +2 -2
- package/components/_cards/charts-22-gantt.card.html +2 -2
- package/components/_cards/charts-23-bar3d.card.html +2 -2
- package/components/_cards/charts-24-pie3d.card.html +2 -2
- package/components/_cards/charts-25-surface3d.card.html +2 -2
- package/components/_cards/charts-26-scatter3d.card.html +2 -2
- package/components/_cards/charts-27-ribbon3d.card.html +2 -2
- package/components/_cards/charts-3-bar.card.html +2 -2
- package/components/_cards/charts-4-barlist.card.html +2 -2
- package/components/_cards/charts-5-donut.card.html +3 -3
- package/components/_cards/charts-6-scatter.card.html +2 -2
- package/components/_cards/charts-7-heatmap.card.html +2 -2
- package/components/_cards/charts-8-waterfall.card.html +2 -2
- package/components/_cards/charts-9-bullet.card.html +2 -2
- package/components/_cards/charts-99-fullpage.card.html +5 -5
- package/components/_cards/checkbox.card.html +4 -4
- package/components/_cards/codeblock.card.html +1 -1
- package/components/_cards/combobox.card.html +3 -2
- package/components/_cards/context-menu.card.html +3 -2
- package/components/_cards/date-picker.card.html +5 -2
- package/components/_cards/diffvalue.card.html +2 -2
- package/components/_cards/divider.card.html +3 -3
- package/components/_cards/drawer.card.html +2 -2
- package/components/_cards/dropdown-menu.card.html +6 -6
- package/components/_cards/dropzone.card.html +1 -1
- package/components/_cards/empty-state.card.html +5 -5
- package/components/_cards/filter-bar.card.html +5 -5
- package/components/_cards/icon-button.card.html +2 -2
- package/components/_cards/icons-1-core.card.html +2 -2
- package/components/_cards/icons-2-feather.card.html +3 -3
- package/components/_cards/icons-3-unicons.card.html +3 -3
- package/components/_cards/input.card.html +5 -2
- package/components/_cards/kbd.card.html +2 -2
- package/components/_cards/keyvalue.card.html +2 -2
- package/components/_cards/listrow.card.html +2 -2
- package/components/_cards/loading.card.html +2 -2
- package/components/_cards/log-viewer.card.html +2 -2
- package/components/_cards/modal.card.html +9 -9
- package/components/_cards/multi-select.card.html +3 -2
- package/components/_cards/number-stepper.card.html +3 -2
- package/components/_cards/pagination.card.html +3 -2
- package/components/_cards/people.card.html +3 -3
- package/components/_cards/pipeline-node.card.html +2 -2
- package/components/_cards/pipeline-palette.card.html +4 -4
- package/components/_cards/radio.card.html +46 -0
- package/components/_cards/search.card.html +5 -2
- package/components/_cards/segmented-control.card.html +39 -0
- package/components/_cards/select.card.html +4 -4
- package/components/_cards/slider.card.html +1 -1
- package/components/_cards/smart-table.card.html +1 -1
- package/components/_cards/spreadsheet.card.html +2 -2
- package/components/_cards/stepper.card.html +2 -2
- package/components/_cards/table.card.html +103 -0
- package/components/_cards/tabs.card.html +3 -2
- package/components/_cards/tag.card.html +5 -2
- package/components/_cards/textarea.card.html +2 -2
- package/components/_cards/timeline.card.html +1 -1
- package/components/_cards/toast.card.html +4 -4
- package/components/_cards/toggles.card.html +45 -56
- package/components/_cards/tooltip.card.html +5 -5
- package/components/_cards/tree.card.html +2 -2
- package/components/_shared/src-buttons.js +1 -1
- package/components/_shared/src-charts.js +1 -1
- package/components/_shared/src-data.js +1 -1
- package/components/_shared/src-display.js +1 -1
- package/components/_shared/src-feedback.js +1 -1
- package/components/_shared/src-forms.js +1 -1
- package/components/_shared/src-navigation.js +1 -1
- package/components/_shared/src-pipeline.js +1 -1
- package/components/_shared/src-tabs.js +1 -1
- package/components/_shared/view-source.js +9 -4
- package/components/_vue/index.mjs +9 -5
- package/components/buttons/ActionChip.d.ts +3 -1
- package/components/buttons/ActionChip.jsx +4 -4
- package/components/buttons/ActionChip.vue +4 -4
- package/components/buttons/Button.d.ts +5 -2
- package/components/buttons/Button.jsx +15 -18
- package/components/buttons/Button.vue +17 -18
- package/components/buttons/ButtonGroup.vue +1 -1
- package/components/buttons/IconButton.d.ts +2 -1
- package/components/buttons/IconButton.jsx +9 -7
- package/components/buttons/IconButton.vue +10 -8
- package/components/buttons/buttons.prompt.md +6 -5
- package/components/charts/Bar3D.jsx +2 -2
- package/components/charts/Bar3D.vue +2 -2
- package/components/charts/BarChart.jsx +4 -4
- package/components/charts/BarChart.vue +4 -4
- package/components/charts/BarList.jsx +1 -1
- package/components/charts/BarList.vue +1 -1
- package/components/charts/BoxPlot.jsx +1 -1
- package/components/charts/BoxPlot.vue +2 -2
- package/components/charts/BulletChart.jsx +1 -1
- package/components/charts/BulletChart.vue +1 -1
- package/components/charts/CandlestickChart.jsx +2 -2
- package/components/charts/CandlestickChart.vue +3 -3
- package/components/charts/ChartKit.jsx +5 -5
- package/components/charts/ChartLegend.vue +16 -0
- package/components/charts/ChartTooltip.vue +16 -0
- package/components/charts/ChordChart.jsx +2 -2
- package/components/charts/ChordChart.vue +2 -2
- package/components/charts/GanttChart.jsx +2 -2
- package/components/charts/GanttChart.vue +2 -2
- package/components/charts/GaugeChart.jsx +2 -2
- package/components/charts/GaugeChart.vue +2 -2
- package/components/charts/HeatmapChart.jsx +2 -2
- package/components/charts/HeatmapChart.vue +2 -2
- package/components/charts/Histogram.jsx +2 -2
- package/components/charts/Histogram.vue +3 -3
- package/components/charts/LineChart.jsx +1 -1
- package/components/charts/LineChart.vue +3 -3
- package/components/charts/ParetoChart.jsx +3 -3
- package/components/charts/ParetoChart.vue +4 -4
- package/components/charts/PlotGrid.vue +18 -0
- package/components/charts/RadarChart.jsx +1 -1
- package/components/charts/RadarChart.vue +1 -1
- package/components/charts/Ribbon3D.jsx +2 -2
- package/components/charts/Ribbon3D.vue +2 -2
- package/components/charts/SankeyChart.jsx +2 -2
- package/components/charts/SankeyChart.vue +2 -2
- package/components/charts/Scatter3D.jsx +1 -1
- package/components/charts/Scatter3D.vue +1 -1
- package/components/charts/ScatterChart.jsx +3 -3
- package/components/charts/ScatterChart.vue +4 -4
- package/components/charts/Sparkline.jsx +1 -1
- package/components/charts/Sparkline.vue +1 -1
- package/components/charts/SunburstChart.jsx +1 -1
- package/components/charts/SunburstChart.vue +1 -1
- package/components/charts/Surface3D.jsx +2 -2
- package/components/charts/Surface3D.vue +2 -2
- package/components/charts/TreemapChart.jsx +2 -2
- package/components/charts/TreemapChart.vue +2 -2
- package/components/charts/WaterfallChart.jsx +2 -2
- package/components/charts/WaterfallChart.vue +3 -3
- package/components/charts/WorldMap.jsx +2 -2
- package/components/charts/WorldMap.vue +2 -2
- package/components/charts/XLabels.vue +11 -0
- package/components/data/CodeBlock.jsx +1 -1
- package/components/data/CodeBlock.vue +1 -1
- package/components/data/DiffValue.jsx +1 -1
- package/components/data/DiffValue.vue +1 -1
- package/components/data/FilterBar.d.ts +2 -0
- package/components/data/FilterBar.jsx +10 -9
- package/components/data/FilterBar.vue +9 -8
- package/components/data/KeyValue.jsx +3 -3
- package/components/data/KeyValue.vue +3 -3
- package/components/data/ListRow.jsx +2 -2
- package/components/data/ListRow.vue +2 -2
- package/components/data/Pagination.d.ts +5 -1
- package/components/data/Pagination.jsx +16 -12
- package/components/data/Pagination.vue +14 -9
- package/components/data/SmartTable.d.ts +4 -1
- package/components/data/SmartTable.jsx +16 -14
- package/components/data/SmartTable.vue +25 -22
- package/components/data/Spreadsheet.d.ts +2 -0
- package/components/data/Spreadsheet.jsx +12 -11
- package/components/data/Spreadsheet.vue +14 -13
- package/components/data/Table.d.ts +47 -0
- package/components/data/Table.jsx +85 -0
- package/components/data/Table.vue +63 -0
- package/components/data/data.prompt.md +3 -3
- package/components/display/Avatar.vue +3 -2
- package/components/display/AvatarGroup.vue +3 -2
- package/components/display/Badge.vue +1 -1
- package/components/display/Divider.vue +3 -3
- package/components/display/Donut.vue +3 -2
- package/components/display/IconTile.vue +2 -1
- package/components/display/Kbd.vue +1 -1
- package/components/display/ProgressBar.jsx +1 -1
- package/components/display/ProgressBar.vue +1 -1
- package/components/display/StatCard.vue +1 -1
- package/components/display/Tag.d.ts +3 -1
- package/components/display/Tag.jsx +4 -4
- package/components/display/Tag.vue +4 -4
- package/components/feedback/Accordion.jsx +2 -2
- package/components/feedback/Accordion.vue +2 -2
- package/components/feedback/ActivityItem.d.ts +3 -1
- package/components/feedback/ActivityItem.jsx +5 -5
- package/components/feedback/ActivityItem.vue +5 -4
- package/components/feedback/Alert.jsx +4 -4
- package/components/feedback/Alert.vue +3 -3
- package/components/feedback/Banner.jsx +5 -5
- package/components/feedback/Banner.vue +5 -5
- package/components/feedback/ContextMenu.d.ts +3 -1
- package/components/feedback/ContextMenu.jsx +5 -5
- package/components/feedback/ContextMenu.vue +5 -5
- package/components/feedback/DotActivity.vue +3 -3
- package/components/feedback/Drawer.d.ts +2 -0
- package/components/feedback/Drawer.jsx +6 -6
- package/components/feedback/Drawer.vue +22 -15
- package/components/feedback/EmptyState.vue +2 -2
- package/components/feedback/LogViewer.vue +1 -1
- package/components/feedback/Modal.d.ts +2 -0
- package/components/feedback/Modal.jsx +12 -11
- package/components/feedback/Modal.vue +10 -8
- package/components/feedback/Skeleton.vue +2 -1
- package/components/feedback/Spinner.vue +2 -1
- package/components/feedback/Stepper.vue +1 -1
- package/components/feedback/Timeline.jsx +1 -1
- package/components/feedback/Timeline.vue +1 -1
- package/components/feedback/Toast.vue +4 -4
- package/components/feedback/ToastStack.vue +11 -0
- package/components/feedback/Tooltip.vue +19 -0
- package/components/feedback/feedback.prompt.md +4 -4
- package/components/forms/Checkbox.d.ts +3 -2
- package/components/forms/Checkbox.jsx +7 -7
- package/components/forms/Checkbox.vue +8 -8
- package/components/forms/Combobox.d.ts +2 -0
- package/components/forms/Combobox.jsx +12 -10
- package/components/forms/Combobox.vue +11 -10
- package/components/forms/DatePicker.d.ts +4 -0
- package/components/forms/DatePicker.jsx +16 -12
- package/components/forms/DatePicker.vue +15 -11
- package/components/forms/Dropzone.jsx +2 -2
- package/components/forms/Dropzone.vue +5 -5
- package/components/forms/Field.d.ts +5 -1
- package/components/forms/Field.jsx +4 -4
- package/components/forms/Field.vue +4 -4
- package/components/forms/Input.d.ts +5 -1
- package/components/forms/Input.jsx +7 -7
- package/components/forms/Input.vue +3 -3
- package/components/forms/MultiSelect.d.ts +2 -0
- package/components/forms/MultiSelect.jsx +13 -11
- package/components/forms/MultiSelect.vue +12 -11
- package/components/forms/NumberStepper.d.ts +3 -1
- package/components/forms/NumberStepper.jsx +7 -7
- package/components/forms/NumberStepper.vue +8 -7
- package/components/forms/Radio.d.ts +30 -0
- package/components/forms/Radio.jsx +65 -0
- package/components/forms/Radio.vue +17 -9
- package/components/forms/RadioGroup.vue +22 -4
- package/components/forms/SearchInput.d.ts +3 -1
- package/components/forms/SearchInput.jsx +6 -6
- package/components/forms/SearchInput.vue +7 -6
- package/components/forms/Select.d.ts +3 -2
- package/components/forms/Select.jsx +6 -7
- package/components/forms/Select.vue +6 -6
- package/components/forms/Slider.jsx +3 -3
- package/components/forms/Slider.vue +3 -3
- package/components/forms/Switch.d.ts +32 -24
- package/components/forms/Switch.jsx +85 -35
- package/components/forms/Switch.vue +57 -11
- package/components/forms/Textarea.vue +4 -4
- package/components/forms/forms.prompt.md +4 -1
- package/components/forms/input-base.js +2 -1
- package/components/index.d.ts +2 -2
- package/components/index.js +5 -5
- package/components/navigation/Breadcrumb.jsx +3 -3
- package/components/navigation/Breadcrumb.vue +4 -4
- package/components/navigation/DocTree.jsx +3 -3
- package/components/navigation/DocTree.vue +3 -3
- package/components/navigation/PageHeading.vue +1 -1
- package/components/navigation/PageToolbar.vue +7 -6
- package/components/navigation/Sidebar.jsx +1 -1
- package/components/navigation/Sidebar.vue +3 -3
- package/components/navigation/ThemeToggle.vue +2 -1
- package/components/navigation/TopBar.d.ts +3 -1
- package/components/navigation/TopBar.jsx +6 -6
- package/components/navigation/Tree.jsx +5 -5
- package/components/navigation/Tree.vue +5 -5
- package/components/pipeline/ConfigPanel.d.ts +2 -0
- package/components/pipeline/ConfigPanel.jsx +9 -9
- package/components/pipeline/ConfigPanel.vue +9 -9
- package/components/pipeline/DataPreview.d.ts +3 -1
- package/components/pipeline/DataPreview.jsx +7 -7
- package/components/pipeline/DataPreview.vue +7 -7
- package/components/pipeline/NodeCard.jsx +3 -3
- package/components/pipeline/NodeCard.vue +3 -3
- package/components/pipeline/PaletteItem.vue +2 -2
- package/components/pipeline/PaletteListItem.vue +1 -1
- package/components/pipeline/PalettePanel.jsx +2 -2
- package/components/pipeline/PalettePanel.vue +1 -1
- package/components/pipeline/Port.vue +15 -0
- package/components/pipeline/PortLabel.vue +15 -0
- package/components/pipeline/ZoomControls.vue +1 -1
- package/components/pipeline/port-skin.js +13 -0
- package/components/px.js +4 -0
- package/components/tabs/PanelTabs.vue +5 -4
- package/components/tabs/PillTabs.vue +5 -4
- package/components/tabs/SegmentedControl.d.ts +11 -4
- package/components/tabs/SegmentedControl.jsx +25 -10
- package/components/tabs/SegmentedControl.vue +19 -7
- package/components/tabs/Tabs.d.ts +5 -3
- package/components/tabs/Tabs.jsx +15 -15
- package/components/tabs/Tabs.vue +5 -5
- package/components/tabs/ViewToggle.d.ts +3 -1
- package/components/tabs/ViewToggle.jsx +5 -5
- package/components/tabs/ViewToggle.vue +5 -5
- package/components/tabs/tabs.prompt.md +4 -2
- package/keybricks.css +4 -0
- package/package.json +6 -3
- package/readme.md +90 -123
- package/readme.zh-CN.md +120 -0
- package/tokens/charts.css +20 -17
- package/tokens/colors.css +2 -2
- package/tokens/dark.css +2 -2
- package/tokens/hover.css +32 -0
- package/tokens/interaction.css +3 -1
- package/tokens/layout.css +29 -7
- package/tokens/tokens.d.ts +36 -0
- package/tokens/tokens.js +143 -89
- package/tokens/tokens.json +240 -106
- package/tokens/typography.css +27 -14
- package/components/_cards/brand-visual.card.html +0 -43
- package/components/_cards/datatable.card.html +0 -48
- package/components/_shared/src-brand.js +0 -1
- package/components/brand/BrandVisual.d.ts +0 -17
- package/components/brand/BrandVisual.jsx +0 -29
- package/components/brand/BrandVisual.vue +0 -34
- package/components/brand/_dir.card.html +0 -13
- package/components/brand/brandMotifs.js +0 -210
- package/components/buttons/_dir.card.html +0 -13
- package/components/charts/ChartKit.vue +0 -47
- package/components/charts/_dir.card.html +0 -7
- package/components/data/DataTable.d.ts +0 -28
- package/components/data/DataTable.jsx +0 -32
- package/components/data/DataTable.vue +0 -25
- package/components/data/_dir.card.html +0 -13
- package/components/display/_dir.card.html +0 -13
- package/components/feedback/_dir.card.html +0 -13
- package/components/forms/_dir.card.html +0 -13
- package/components/icons/_dir.card.html +0 -13
- package/components/navigation/_dir.card.html +0 -13
- package/components/pipeline/_dir.card.html +0 -13
- 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
|
|
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.
|
|
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
|
|
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#
|
|
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,
|
|
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
|
|
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
|
-
|
|
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` |
|
|
106
|
-
| `--text-xs` |
|
|
107
|
-
| `--text-
|
|
108
|
-
| `--text-
|
|
109
|
-
| `--text-
|
|
110
|
-
| `--text-
|
|
111
|
-
| `--text-
|
|
112
|
-
| `--text-2xl` |
|
|
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
|
-
|
|
115
|
-
|
|
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
|
-
|
|
118
|
-
tracking values are negative at larger sizes and are not optional.
|
|
148
|
+
### Chinese, Japanese and Korean
|
|
119
149
|
|
|
120
|
-
|
|
121
|
-
|
|
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
|
|
129
|
-
|
|
130
|
-
`--radius-full` (pills, avatars).
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
|
140
|
-
|
|
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
|
|
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
|
|
219
|
-
|
|
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.**
|
|
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
|
|
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
|
|
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
|
---
|