@keyfunc/keybricks-ds 1.0.0
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 +204 -0
- package/DESIGN.md +269 -0
- package/INTEGRATION.md +417 -0
- package/SKILL.md +32 -0
- package/_adherence.oxlintrc.json +1469 -0
- package/_scripts/build-index.mjs +80 -0
- package/_scripts/build-tokens.mjs +135 -0
- package/assets/icons/icon-index.js +1 -0
- package/assets/icons/icon-index.json +1 -0
- package/assets/icons/unicons-index.js +1 -0
- package/assets/icons/unicons-index.json +1 -0
- package/assets/keybricks-logo.png +0 -0
- package/components/_cards/accordion.card.html +32 -0
- package/components/_cards/action-chip.card.html +22 -0
- package/components/_cards/activity.card.html +34 -0
- package/components/_cards/alert.card.html +32 -0
- package/components/_cards/app-chrome.card.html +36 -0
- package/components/_cards/banner.card.html +21 -0
- package/components/_cards/brand-visual.card.html +43 -0
- package/components/_cards/breadcrumb.card.html +23 -0
- package/components/_cards/button-1-base.card.html +39 -0
- package/components/_cards/button-2-states.card.html +56 -0
- package/components/_cards/button-3-sizes-icons.card.html +32 -0
- package/components/_cards/button-4-group.card.html +47 -0
- package/components/_cards/canvas-zoom-controls.card.html +19 -0
- package/components/_cards/cards-indicators.card.html +59 -0
- package/components/_cards/charts-1-sparkline.card.html +55 -0
- package/components/_cards/charts-10-gauge.card.html +31 -0
- package/components/_cards/charts-11-funnel.card.html +28 -0
- package/components/_cards/charts-12-treemap.card.html +23 -0
- package/components/_cards/charts-14-radar.card.html +31 -0
- package/components/_cards/charts-15-distribution.card.html +32 -0
- package/components/_cards/charts-16-pareto.card.html +25 -0
- package/components/_cards/charts-17-candlestick.card.html +34 -0
- package/components/_cards/charts-18-sankey.card.html +29 -0
- package/components/_cards/charts-19-chord.card.html +31 -0
- package/components/_cards/charts-2-line.card.html +46 -0
- package/components/_cards/charts-20-sunburst.card.html +38 -0
- package/components/_cards/charts-21-worldmap.card.html +33 -0
- package/components/_cards/charts-22-gantt.card.html +37 -0
- package/components/_cards/charts-23-bar3d.card.html +26 -0
- package/components/_cards/charts-24-pie3d.card.html +32 -0
- package/components/_cards/charts-25-surface3d.card.html +24 -0
- package/components/_cards/charts-26-scatter3d.card.html +24 -0
- package/components/_cards/charts-27-ribbon3d.card.html +23 -0
- package/components/_cards/charts-3-bar.card.html +71 -0
- package/components/_cards/charts-4-barlist.card.html +30 -0
- package/components/_cards/charts-5-donut.card.html +35 -0
- package/components/_cards/charts-6-scatter.card.html +26 -0
- package/components/_cards/charts-7-heatmap.card.html +28 -0
- package/components/_cards/charts-8-waterfall.card.html +25 -0
- package/components/_cards/charts-9-bullet.card.html +31 -0
- package/components/_cards/charts-99-fullpage.card.html +194 -0
- package/components/_cards/checkbox.card.html +34 -0
- package/components/_cards/codeblock.card.html +19 -0
- package/components/_cards/combobox.card.html +25 -0
- package/components/_cards/context-menu.card.html +21 -0
- package/components/_cards/datatable.card.html +48 -0
- package/components/_cards/date-picker.card.html +31 -0
- package/components/_cards/diffvalue.card.html +21 -0
- package/components/_cards/divider.card.html +24 -0
- package/components/_cards/drawer.card.html +30 -0
- package/components/_cards/dropdown-menu.card.html +38 -0
- package/components/_cards/dropzone.card.html +22 -0
- package/components/_cards/empty-state.card.html +29 -0
- package/components/_cards/filter-bar.card.html +34 -0
- package/components/_cards/icon-button.card.html +27 -0
- package/components/_cards/icons-1-core.card.html +49 -0
- package/components/_cards/icons-2-feather.card.html +39 -0
- package/components/_cards/icons-3-unicons.card.html +44 -0
- package/components/_cards/input.card.html +25 -0
- package/components/_cards/kbd.card.html +20 -0
- package/components/_cards/keyvalue.card.html +23 -0
- package/components/_cards/listrow.card.html +30 -0
- package/components/_cards/loading.card.html +33 -0
- package/components/_cards/log-viewer.card.html +23 -0
- package/components/_cards/modal.card.html +35 -0
- package/components/_cards/multi-select.card.html +26 -0
- package/components/_cards/number-stepper.card.html +24 -0
- package/components/_cards/pagination.card.html +25 -0
- package/components/_cards/people.card.html +46 -0
- package/components/_cards/pipeline-node.card.html +76 -0
- package/components/_cards/pipeline-palette.card.html +54 -0
- package/components/_cards/search.card.html +23 -0
- package/components/_cards/select.card.html +23 -0
- package/components/_cards/slider.card.html +25 -0
- package/components/_cards/smart-table.card.html +37 -0
- package/components/_cards/spreadsheet.card.html +31 -0
- package/components/_cards/stepper.card.html +25 -0
- package/components/_cards/tabs.card.html +25 -0
- package/components/_cards/tag.card.html +26 -0
- package/components/_cards/textarea.card.html +27 -0
- package/components/_cards/timeline.card.html +32 -0
- package/components/_cards/toast.card.html +33 -0
- package/components/_cards/toggles.card.html +68 -0
- package/components/_cards/tooltip.card.html +22 -0
- package/components/_cards/tree.card.html +150 -0
- package/components/_shared/frame-theme.js +16 -0
- package/components/_shared/src-brand.js +1 -0
- package/components/_shared/src-buttons.js +1 -0
- package/components/_shared/src-charts.js +1 -0
- package/components/_shared/src-data.js +1 -0
- package/components/_shared/src-display.js +1 -0
- package/components/_shared/src-feedback.js +1 -0
- package/components/_shared/src-forms.js +1 -0
- package/components/_shared/src-icons.js +1 -0
- package/components/_shared/src-navigation.js +1 -0
- package/components/_shared/src-pipeline.js +1 -0
- package/components/_shared/src-tabs.js +1 -0
- package/components/_shared/svg-download.js +19 -0
- package/components/_shared/view-source.js +185 -0
- package/components/_vue/index.mjs +114 -0
- package/components/brand/BrandVisual.d.ts +17 -0
- package/components/brand/BrandVisual.jsx +29 -0
- package/components/brand/BrandVisual.vue +34 -0
- package/components/brand/_dir.card.html +13 -0
- package/components/brand/brandMotifs.js +210 -0
- package/components/buttons/ActionChip.d.ts +10 -0
- package/components/buttons/ActionChip.jsx +20 -0
- package/components/buttons/ActionChip.vue +18 -0
- package/components/buttons/Button.d.ts +40 -0
- package/components/buttons/Button.jsx +101 -0
- package/components/buttons/Button.vue +87 -0
- package/components/buttons/IconButton.d.ts +26 -0
- package/components/buttons/IconButton.jsx +28 -0
- package/components/buttons/IconButton.vue +21 -0
- package/components/buttons/_dir.card.html +13 -0
- package/components/buttons/buttons.prompt.md +19 -0
- package/components/charts/Bar3D.d.ts +15 -0
- package/components/charts/Bar3D.jsx +93 -0
- package/components/charts/Bar3D.vue +79 -0
- package/components/charts/BarChart.d.ts +23 -0
- package/components/charts/BarChart.jsx +135 -0
- package/components/charts/BarChart.vue +139 -0
- package/components/charts/BarList.d.ts +13 -0
- package/components/charts/BarList.jsx +31 -0
- package/components/charts/BarList.vue +25 -0
- package/components/charts/BoxPlot.d.ts +18 -0
- package/components/charts/BoxPlot.jsx +62 -0
- package/components/charts/BoxPlot.vue +58 -0
- package/components/charts/BulletChart.d.ts +12 -0
- package/components/charts/BulletChart.jsx +41 -0
- package/components/charts/BulletChart.vue +33 -0
- package/components/charts/CandlestickChart.d.ts +15 -0
- package/components/charts/CandlestickChart.jsx +63 -0
- package/components/charts/CandlestickChart.vue +62 -0
- package/components/charts/ChartKit.d.ts +8 -0
- package/components/charts/ChartKit.jsx +76 -0
- package/components/charts/ChartKit.vue +47 -0
- package/components/charts/ChordChart.d.ts +13 -0
- package/components/charts/ChordChart.jsx +55 -0
- package/components/charts/ChordChart.vue +54 -0
- package/components/charts/DonutChart.d.ts +15 -0
- package/components/charts/DonutChart.jsx +73 -0
- package/components/charts/DonutChart.vue +61 -0
- package/components/charts/FunnelChart.d.ts +11 -0
- package/components/charts/FunnelChart.jsx +37 -0
- package/components/charts/FunnelChart.vue +29 -0
- package/components/charts/GanttChart.d.ts +20 -0
- package/components/charts/GanttChart.jsx +80 -0
- package/components/charts/GanttChart.vue +60 -0
- package/components/charts/GaugeChart.d.ts +13 -0
- package/components/charts/GaugeChart.jsx +33 -0
- package/components/charts/GaugeChart.vue +29 -0
- package/components/charts/HeatmapChart.d.ts +13 -0
- package/components/charts/HeatmapChart.jsx +62 -0
- package/components/charts/HeatmapChart.vue +38 -0
- package/components/charts/Histogram.d.ts +16 -0
- package/components/charts/Histogram.jsx +56 -0
- package/components/charts/Histogram.vue +53 -0
- package/components/charts/LineChart.d.ts +17 -0
- package/components/charts/LineChart.jsx +84 -0
- package/components/charts/LineChart.vue +86 -0
- package/components/charts/ParetoChart.d.ts +13 -0
- package/components/charts/ParetoChart.jsx +54 -0
- package/components/charts/ParetoChart.vue +55 -0
- package/components/charts/Pie3D.d.ts +17 -0
- package/components/charts/Pie3D.jsx +145 -0
- package/components/charts/Pie3D.vue +115 -0
- package/components/charts/RadarChart.d.ts +14 -0
- package/components/charts/RadarChart.jsx +79 -0
- package/components/charts/RadarChart.vue +73 -0
- package/components/charts/Ribbon3D.d.ts +13 -0
- package/components/charts/Ribbon3D.jsx +89 -0
- package/components/charts/Ribbon3D.vue +79 -0
- package/components/charts/SankeyChart.d.ts +15 -0
- package/components/charts/SankeyChart.jsx +59 -0
- package/components/charts/SankeyChart.vue +53 -0
- package/components/charts/Scatter3D.d.ts +12 -0
- package/components/charts/Scatter3D.jsx +69 -0
- package/components/charts/Scatter3D.vue +59 -0
- package/components/charts/ScatterChart.d.ts +12 -0
- package/components/charts/ScatterChart.jsx +53 -0
- package/components/charts/ScatterChart.vue +57 -0
- package/components/charts/Sparkline.d.ts +19 -0
- package/components/charts/Sparkline.jsx +63 -0
- package/components/charts/Sparkline.vue +54 -0
- package/components/charts/SunburstChart.d.ts +12 -0
- package/components/charts/SunburstChart.jsx +61 -0
- package/components/charts/SunburstChart.vue +60 -0
- package/components/charts/Surface3D.d.ts +13 -0
- package/components/charts/Surface3D.jsx +70 -0
- package/components/charts/Surface3D.vue +63 -0
- package/components/charts/TreemapChart.d.ts +11 -0
- package/components/charts/TreemapChart.jsx +35 -0
- package/components/charts/TreemapChart.vue +27 -0
- package/components/charts/WaterfallChart.d.ts +11 -0
- package/components/charts/WaterfallChart.jsx +59 -0
- package/components/charts/WaterfallChart.vue +46 -0
- package/components/charts/WorldMap.d.ts +21 -0
- package/components/charts/WorldMap.jsx +107 -0
- package/components/charts/WorldMap.vue +73 -0
- package/components/charts/_dir.card.html +7 -0
- package/components/charts/chart-3d.js +84 -0
- package/components/charts/chart-geometry.js +223 -0
- package/components/charts/charts.prompt.md +24 -0
- package/components/data/CodeBlock.d.ts +9 -0
- package/components/data/CodeBlock.jsx +19 -0
- package/components/data/CodeBlock.vue +22 -0
- package/components/data/DataTable.d.ts +28 -0
- package/components/data/DataTable.jsx +32 -0
- package/components/data/DataTable.vue +25 -0
- package/components/data/DiffValue.d.ts +11 -0
- package/components/data/DiffValue.jsx +15 -0
- package/components/data/DiffValue.vue +13 -0
- package/components/data/FilterBar.d.ts +16 -0
- package/components/data/FilterBar.jsx +22 -0
- package/components/data/FilterBar.vue +23 -0
- package/components/data/KeyValue.d.ts +16 -0
- package/components/data/KeyValue.jsx +25 -0
- package/components/data/KeyValue.vue +26 -0
- package/components/data/ListRow.d.ts +14 -0
- package/components/data/ListRow.jsx +25 -0
- package/components/data/ListRow.vue +25 -0
- package/components/data/Pagination.d.ts +12 -0
- package/components/data/Pagination.jsx +27 -0
- package/components/data/Pagination.vue +24 -0
- package/components/data/SmartTable.d.ts +30 -0
- package/components/data/SmartTable.jsx +73 -0
- package/components/data/SmartTable.vue +74 -0
- package/components/data/Spreadsheet.d.ts +33 -0
- package/components/data/Spreadsheet.jsx +110 -0
- package/components/data/Spreadsheet.vue +95 -0
- package/components/data/_dir.card.html +13 -0
- package/components/data/data.prompt.md +33 -0
- package/components/display/Avatar.d.ts +21 -0
- package/components/display/Avatar.jsx +31 -0
- package/components/display/Avatar.vue +34 -0
- package/components/display/Badge.d.ts +27 -0
- package/components/display/Badge.jsx +40 -0
- package/components/display/Badge.vue +47 -0
- package/components/display/Card.d.ts +27 -0
- package/components/display/Card.jsx +27 -0
- package/components/display/Card.vue +28 -0
- package/components/display/Divider.d.ts +8 -0
- package/components/display/Divider.jsx +14 -0
- package/components/display/Divider.vue +13 -0
- package/components/display/Kbd.d.ts +7 -0
- package/components/display/Kbd.jsx +12 -0
- package/components/display/Kbd.vue +9 -0
- package/components/display/ProgressBar.d.ts +42 -0
- package/components/display/ProgressBar.jsx +70 -0
- package/components/display/ProgressBar.vue +69 -0
- package/components/display/Tag.d.ts +9 -0
- package/components/display/Tag.jsx +15 -0
- package/components/display/Tag.vue +15 -0
- package/components/display/_dir.card.html +13 -0
- package/components/display/display.prompt.md +30 -0
- package/components/feedback/Accordion.d.ts +13 -0
- package/components/feedback/Accordion.jsx +21 -0
- package/components/feedback/Accordion.vue +22 -0
- package/components/feedback/ActivityItem.d.ts +25 -0
- package/components/feedback/ActivityItem.jsx +39 -0
- package/components/feedback/ActivityItem.vue +46 -0
- package/components/feedback/Alert.d.ts +36 -0
- package/components/feedback/Alert.jsx +48 -0
- package/components/feedback/Alert.vue +59 -0
- package/components/feedback/Banner.d.ts +15 -0
- package/components/feedback/Banner.jsx +25 -0
- package/components/feedback/Banner.vue +25 -0
- package/components/feedback/ContextMenu.d.ts +8 -0
- package/components/feedback/ContextMenu.jsx +18 -0
- package/components/feedback/ContextMenu.vue +19 -0
- package/components/feedback/Drawer.d.ts +18 -0
- package/components/feedback/Drawer.jsx +26 -0
- package/components/feedback/Drawer.vue +24 -0
- package/components/feedback/Menu.d.ts +10 -0
- package/components/feedback/Menu.jsx +24 -0
- package/components/feedback/Menu.vue +21 -0
- package/components/feedback/Modal.d.ts +38 -0
- package/components/feedback/Modal.jsx +69 -0
- package/components/feedback/Modal.vue +65 -0
- package/components/feedback/Stepper.d.ts +9 -0
- package/components/feedback/Stepper.jsx +24 -0
- package/components/feedback/Stepper.vue +18 -0
- package/components/feedback/Timeline.d.ts +15 -0
- package/components/feedback/Timeline.jsx +27 -0
- package/components/feedback/Timeline.vue +21 -0
- package/components/feedback/_dir.card.html +13 -0
- package/components/feedback/feedback.prompt.md +35 -0
- package/components/forms/Checkbox.d.ts +13 -0
- package/components/forms/Checkbox.jsx +17 -0
- package/components/forms/Checkbox.vue +18 -0
- package/components/forms/Combobox.d.ts +13 -0
- package/components/forms/Combobox.jsx +34 -0
- package/components/forms/Combobox.vue +35 -0
- package/components/forms/DatePicker.d.ts +12 -0
- package/components/forms/DatePicker.jsx +48 -0
- package/components/forms/DatePicker.vue +46 -0
- package/components/forms/Dropzone.d.ts +20 -0
- package/components/forms/Dropzone.jsx +36 -0
- package/components/forms/Dropzone.vue +28 -0
- package/components/forms/Field.d.ts +13 -0
- package/components/forms/Field.jsx +13 -0
- package/components/forms/Field.vue +12 -0
- package/components/forms/Input.d.ts +18 -0
- package/components/forms/Input.jsx +35 -0
- package/components/forms/Input.vue +38 -0
- package/components/forms/MultiSelect.d.ts +14 -0
- package/components/forms/MultiSelect.jsx +33 -0
- package/components/forms/MultiSelect.vue +36 -0
- package/components/forms/NumberStepper.d.ts +13 -0
- package/components/forms/NumberStepper.jsx +15 -0
- package/components/forms/NumberStepper.vue +17 -0
- package/components/forms/Radio.vue +16 -0
- package/components/forms/RadioGroup.vue +11 -0
- package/components/forms/SearchInput.d.ts +12 -0
- package/components/forms/SearchInput.jsx +17 -0
- package/components/forms/SearchInput.vue +14 -0
- package/components/forms/Select.d.ts +14 -0
- package/components/forms/Select.jsx +17 -0
- package/components/forms/Select.vue +16 -0
- package/components/forms/Slider.d.ts +15 -0
- package/components/forms/Slider.jsx +21 -0
- package/components/forms/Slider.vue +23 -0
- package/components/forms/Switch.d.ts +31 -0
- package/components/forms/Switch.jsx +40 -0
- package/components/forms/Switch.vue +16 -0
- package/components/forms/_dir.card.html +13 -0
- package/components/forms/forms.prompt.md +23 -0
- package/components/icons/Icon.d.ts +19 -0
- package/components/icons/Icon.jsx +93 -0
- package/components/icons/Icon.prompt.md +8 -0
- package/components/icons/Icon.vue +12 -0
- package/components/icons/Unicon.d.ts +12 -0
- package/components/icons/Unicon.jsx +16 -0
- package/components/icons/Unicon.vue +15 -0
- package/components/icons/_dir.card.html +13 -0
- package/components/icons/feather-paths.js +2 -0
- package/components/icons/icon-paths.js +73 -0
- package/components/index.d.ts +87 -0
- package/components/index.js +110 -0
- package/components/navigation/Breadcrumb.d.ts +24 -0
- package/components/navigation/Breadcrumb.jsx +120 -0
- package/components/navigation/Breadcrumb.vue +94 -0
- package/components/navigation/DocTree.d.ts +18 -0
- package/components/navigation/DocTree.jsx +37 -0
- package/components/navigation/DocTree.vue +25 -0
- package/components/navigation/Sidebar.d.ts +29 -0
- package/components/navigation/Sidebar.jsx +75 -0
- package/components/navigation/Sidebar.vue +54 -0
- package/components/navigation/TopBar.d.ts +27 -0
- package/components/navigation/TopBar.jsx +44 -0
- package/components/navigation/TopBar.vue +51 -0
- package/components/navigation/Tree.d.ts +83 -0
- package/components/navigation/Tree.jsx +347 -0
- package/components/navigation/Tree.vue +258 -0
- package/components/navigation/_dir.card.html +13 -0
- package/components/navigation/navigation.prompt.md +22 -0
- package/components/pipeline/ConfigPanel.d.ts +18 -0
- package/components/pipeline/ConfigPanel.jsx +30 -0
- package/components/pipeline/ConfigPanel.vue +32 -0
- package/components/pipeline/DataPreview.d.ts +14 -0
- package/components/pipeline/DataPreview.jsx +24 -0
- package/components/pipeline/DataPreview.vue +21 -0
- package/components/pipeline/NodeCard.d.ts +47 -0
- package/components/pipeline/NodeCard.jsx +97 -0
- package/components/pipeline/NodeCard.vue +75 -0
- package/components/pipeline/PaletteItem.vue +15 -0
- package/components/pipeline/PaletteListItem.vue +15 -0
- package/components/pipeline/PalettePanel.d.ts +20 -0
- package/components/pipeline/PalettePanel.jsx +74 -0
- package/components/pipeline/PalettePanel.vue +45 -0
- package/components/pipeline/PipelineCanvas.d.ts +25 -0
- package/components/pipeline/PipelineCanvas.jsx +94 -0
- package/components/pipeline/PipelineCanvas.vue +73 -0
- package/components/pipeline/ZoomControls.d.ts +9 -0
- package/components/pipeline/ZoomControls.jsx +15 -0
- package/components/pipeline/ZoomControls.vue +15 -0
- package/components/pipeline/_dir.card.html +13 -0
- package/components/pipeline/pipeline.prompt.md +22 -0
- package/components/tabs/SegmentedControl.d.ts +11 -0
- package/components/tabs/SegmentedControl.jsx +21 -0
- package/components/tabs/SegmentedControl.vue +15 -0
- package/components/tabs/Tabs.d.ts +13 -0
- package/components/tabs/Tabs.jsx +52 -0
- package/components/tabs/Tabs.vue +39 -0
- package/components/tabs/ViewToggle.d.ts +8 -0
- package/components/tabs/ViewToggle.jsx +12 -0
- package/components/tabs/ViewToggle.vue +12 -0
- package/components/tabs/_dir.card.html +13 -0
- package/components/tabs/tabs.prompt.md +14 -0
- package/package.json +76 -0
- package/readme.md +150 -0
- package/styles.css +10 -0
- package/tokens/alpha.css +27 -0
- package/tokens/charts.css +55 -0
- package/tokens/colors-extended.css +40 -0
- package/tokens/colors.css +39 -0
- package/tokens/dark.css +96 -0
- package/tokens/fonts.css +4 -0
- package/tokens/interaction.css +48 -0
- package/tokens/layout.css +30 -0
- package/tokens/motion.css +22 -0
- package/tokens/tokens.d.ts +680 -0
- package/tokens/tokens.js +1018 -0
- package/tokens/tokens.json +2928 -0
- package/tokens/typography.css +22 -0
package/DEPLOY.md
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# DEPLOY.md — running Keybricks on GitLab
|
|
2
|
+
|
|
3
|
+
Two artifacts come out of this repository, from one pipeline:
|
|
4
|
+
|
|
5
|
+
| Artifact | Where | Who uses it |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| `@keyfunc/keybricks-ds` npm package | GitLab Package Registry | app developers |
|
|
8
|
+
| Documentation site (`index.html` + live cards) | GitLab Pages | designers, PMs, developers |
|
|
9
|
+
|
|
10
|
+
Configured for `gitlab.epm2demo.cn`, project `Felix/keybricks-ds`. Nothing else needs
|
|
11
|
+
configuring — the pipeline runs on `CI_JOB_TOKEN`.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 0. First-time setup (once, ~15 minutes)
|
|
16
|
+
|
|
17
|
+
**1. Create the project.** *New project → Create blank project*. Name `Keybricks DS`, slug
|
|
18
|
+
`keybricks-ds`. Visibility **Internal** if colleagues should be able to read the docs site
|
|
19
|
+
without being added one by one; Private if not. Leave *Initialize repository with a README*
|
|
20
|
+
**unchecked** — the repo already has one, and a README commit would make the first push a
|
|
21
|
+
conflict.
|
|
22
|
+
|
|
23
|
+
**2. Push this folder as the repo.**
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
cd keybricks-ds # the folder you downloaded
|
|
27
|
+
git init -b main
|
|
28
|
+
git add -A
|
|
29
|
+
git commit -m "chore: import Keybricks design system"
|
|
30
|
+
git remote add origin git@gitlab.epm2demo.cn:Felix/keybricks-ds.git
|
|
31
|
+
git push -u origin main
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**3. Host already filled in.** `package.json`, `DEPLOY.md` and `INTEGRATION.md` point at
|
|
35
|
+
`gitlab.epm2demo.cn/Felix/keybricks-ds`. If the project ever moves to a group, re-run:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
grep -rn "gitlab.epm2demo.cn" package.json DEPLOY.md INTEGRATION.md
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Nothing in `.gitlab-ci.yml` needs editing — it reads `CI_API_V4_URL` and `CI_PROJECT_ID`
|
|
42
|
+
from the runner.
|
|
43
|
+
|
|
44
|
+
**4. Check the runner and the two features.**
|
|
45
|
+
|
|
46
|
+
- *Settings → CI/CD → Runners* — an available shared or group runner (Docker executor;
|
|
47
|
+
the pipeline uses `node:20-alpine`).
|
|
48
|
+
- *Settings → Packages and registries* — Package registry **enabled**.
|
|
49
|
+
- *Deploy → Pages* — appears after the first successful `pages` job. If your instance
|
|
50
|
+
requires it, set *Settings → Pages → Access control* to “Only project members”.
|
|
51
|
+
|
|
52
|
+
The push in step 2 already triggers a pipeline: `generated:check` runs, then `pages`
|
|
53
|
+
deploys the documentation site. Watch it under *Build → Pipelines*.
|
|
54
|
+
|
|
55
|
+
**5. Cut the first release.**
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
git tag v1.0.0 && git push --tags
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
That tag runs `generated:check` → `version:check` → `npm publish`. Confirm under *Deploy →
|
|
62
|
+
Package Registry*: `@keyfunc/keybricks-ds` 1.0.0.
|
|
63
|
+
|
|
64
|
+
**6. Hand developers two things:** the Pages URL, and the `.npmrc` snippet in §4 below.
|
|
65
|
+
|
|
66
|
+
**7. Protect what you just built.** *Settings → Repository → Protected branches*: `main`,
|
|
67
|
+
maintainers only, force-push off. *Protected tags*: pattern `v*`, maintainers only — a tag
|
|
68
|
+
is a publish, so it deserves the same gate as a merge.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 1. What ships, and what does not
|
|
73
|
+
|
|
74
|
+
**Source-only package.** `.jsx` and `.vue` files are published as authored; the consuming
|
|
75
|
+
app compiles them with its own toolchain. No `dist/`, no bundler here, no build step that
|
|
76
|
+
can drift from the source. Every component has a sibling `.d.ts`, so editors and `tsc`
|
|
77
|
+
still see the full props contract.
|
|
78
|
+
|
|
79
|
+
This means a consumer's bundler must handle:
|
|
80
|
+
|
|
81
|
+
- **React** — JSX in `node_modules`. Vite: add the package to `optimizeDeps.exclude` and
|
|
82
|
+
let esbuild transform it (see §4). Next.js: `transpilePackages`.
|
|
83
|
+
- **Vue 3** — SFCs, so `@vitejs/plugin-vue` or `vue-loader` must already be installed
|
|
84
|
+
(it is, in any Vue app).
|
|
85
|
+
|
|
86
|
+
The Vue barrel (`@keyfunc/keybricks-ds/vue`) is generated at publish time rather than
|
|
87
|
+
committed — it statically imports `.vue` files, which only a Vue-aware bundler can resolve,
|
|
88
|
+
so keeping it in the repo would break every non-Vue tool that walks the tree. `npm publish`
|
|
89
|
+
and `npm pack` both produce it via the `prepack` hook; CI does it explicitly. React's barrel
|
|
90
|
+
is a normal committed file.
|
|
91
|
+
|
|
92
|
+
Published (`files` in `package.json`): `components/`, `tokens/`, `assets/`, `_scripts/`,
|
|
93
|
+
`styles.css`, the four `.md` guides, `_adherence.oxlintrc.json`.
|
|
94
|
+
|
|
95
|
+
> Installing from a **git tag** skips `prepack`, so `@keyfunc/keybricks-ds/vue` is absent in
|
|
96
|
+
> that mode — Vue apps on a git dependency should deep-import
|
|
97
|
+
> `@keyfunc/keybricks-ds/components/<group>/<Name>.vue`, which is the recommended path anyway.
|
|
98
|
+
|
|
99
|
+
Not published: `guidelines/`, `ui_kits/`, `templates/`, `index.html`, `gallery.html`,
|
|
100
|
+
`_ds_bundle.js`. Those are the documentation site — they go to Pages, not into every
|
|
101
|
+
`node_modules`.
|
|
102
|
+
|
|
103
|
+
## 2. Entry points
|
|
104
|
+
|
|
105
|
+
```js
|
|
106
|
+
import { Button, DataTable } from '@keyfunc/keybricks-ds' // React barrel
|
|
107
|
+
import { Button } from '@keyfunc/keybricks-ds/vue' // Vue 3 barrel
|
|
108
|
+
import Button from '@keyfunc/keybricks-ds/components/buttons/Button.vue' // deep import
|
|
109
|
+
import '@keyfunc/keybricks-ds/styles.css' // tokens + themes
|
|
110
|
+
import { cssVar, light, dark } from '@keyfunc/keybricks-ds/tokens' // JS constants
|
|
111
|
+
import tokens from '@keyfunc/keybricks-ds/tokens.json' // cross-platform
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Deep imports are the better default in Vue and in any app that cares about tree-shaking —
|
|
115
|
+
a barrel of 122 exports asks the bundler to prove each one is unused.
|
|
116
|
+
|
|
117
|
+
## 3. Publishing (maintainers)
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# 1. edit tokens/ or components/
|
|
121
|
+
node _scripts/build-tokens.mjs # regenerates tokens.json / tokens.js / tokens.d.ts
|
|
122
|
+
node _scripts/build-index.mjs # regenerates the React/Vue barrels
|
|
123
|
+
npm run check # same two scripts in --check mode; CI runs this
|
|
124
|
+
|
|
125
|
+
# 2. bump, commit, tag — the tag is what publishes
|
|
126
|
+
npm version minor -m "feat: 3D chart family"
|
|
127
|
+
git push && git push --tags
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
`.gitlab-ci.yml` then runs: `generated:check` → `version:check` (tag must equal
|
|
131
|
+
`package.json` version) → `npm publish` → `pages`.
|
|
132
|
+
|
|
133
|
+
**Versioning policy.** A token's *value* changing is a minor; a token being *renamed or
|
|
134
|
+
removed* is a major, because consumer code references `var(--name)` directly. Adding a
|
|
135
|
+
component or a prop is a minor. Changing a component's default appearance is a major —
|
|
136
|
+
consumers pin a version precisely so a redesign never lands unannounced.
|
|
137
|
+
|
|
138
|
+
## 4. Consuming (app developers)
|
|
139
|
+
|
|
140
|
+
**Install — registry**
|
|
141
|
+
|
|
142
|
+
Commit a project-local `.npmrc` so CI and new hires need no setup:
|
|
143
|
+
|
|
144
|
+
```ini
|
|
145
|
+
@keyfunc:registry=https://gitlab.epm2demo.cn/api/v4/packages/npm/
|
|
146
|
+
//gitlab.epm2demo.cn/api/v4/packages/npm/:_authToken=${GITLAB_TOKEN}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
npm install @keyfunc/keybricks-ds
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
`GITLAB_TOKEN` is a personal or group deploy token with `read_package_registry`. In CI,
|
|
154
|
+
GitLab injects `CI_JOB_TOKEN` — use that instead and no secret is stored anywhere.
|
|
155
|
+
|
|
156
|
+
**Install — straight from git** (no registry, no publish; works today)
|
|
157
|
+
|
|
158
|
+
```json
|
|
159
|
+
"@keyfunc/keybricks-ds": "git+ssh://git@gitlab.epm2demo.cn/Felix/keybricks-ds.git#v1.0.0"
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Because the package has no build step, a git dependency needs no `prepare` script — npm
|
|
163
|
+
checks out the tag and the files are already usable. Pin a tag, never a branch.
|
|
164
|
+
|
|
165
|
+
**Vite (React)**
|
|
166
|
+
|
|
167
|
+
```js
|
|
168
|
+
export default defineConfig({
|
|
169
|
+
plugins: [react({ include: [/\.jsx?$/, /node_modules\/@keyfunc\/keybricks-ds\/.*\.jsx$/] })],
|
|
170
|
+
optimizeDeps: { exclude: ['@keyfunc/keybricks-ds'] },
|
|
171
|
+
})
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Next.js**
|
|
175
|
+
|
|
176
|
+
```js
|
|
177
|
+
module.exports = { transpilePackages: ['@keyfunc/keybricks-ds'] }
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Then, once, at the app entry: `import '@keyfunc/keybricks-ds/styles.css'`.
|
|
181
|
+
|
|
182
|
+
## 5. Documentation site (Pages)
|
|
183
|
+
|
|
184
|
+
The `pages` job copies the static tree into `public/` on every default-branch commit.
|
|
185
|
+
Your Pages URL (shown under *Deploy → Pages* after the first run) then serves:
|
|
186
|
+
|
|
187
|
+
- `index.html` — the browsable system: every card live in an iframe, EN / 中文 / 日本語,
|
|
188
|
+
light and dark, View Code on each component.
|
|
189
|
+
- `gallery.html` — filterable thumbnail grid.
|
|
190
|
+
- `DESIGN.md` — the rules file to hand to an AI coding agent or a new hire.
|
|
191
|
+
|
|
192
|
+
If Pages is restricted to project members (Settings → Pages → *Access Control*), this is
|
|
193
|
+
also the safest place to review upcoming work with people who have no repo access.
|
|
194
|
+
|
|
195
|
+
## 6. Keeping consumers honest
|
|
196
|
+
|
|
197
|
+
`_adherence.oxlintrc.json` is published as `@keyfunc/keybricks-ds/lint`. Extend it in the
|
|
198
|
+
consuming app to fail CI on the two rules that break theming:
|
|
199
|
+
|
|
200
|
+
- a raw hex, `rgb()` or named color in component code
|
|
201
|
+
- a palette step (`--neutral-500`, `--blue-600`) referenced instead of a semantic token
|
|
202
|
+
|
|
203
|
+
Both are the same rule stated twice: components read the semantic layer, and only the
|
|
204
|
+
semantic layer. That is what makes dark mode cost nothing.
|
package/DESIGN.md
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
# DESIGN.md — Keybricks
|
|
2
|
+
|
|
3
|
+
Rules for AI coding agents generating Keybricks UI. Read this before writing any markup or CSS.
|
|
4
|
+
|
|
5
|
+
Values here are **absolutes, not suggestions**. Where a number is given, use that number.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## The one rule that matters most
|
|
10
|
+
|
|
11
|
+
**Never write a raw hex, px size, or radius when a token exists.** Every value below is a CSS
|
|
12
|
+
custom property defined in `styles.css`. Referencing the token gets you dark mode, the retheme
|
|
13
|
+
path, and consistency for free. Writing `#155dfc` gets you a light-mode-only bug.
|
|
14
|
+
|
|
15
|
+
```css
|
|
16
|
+
color: var(--text-body); /* ✅ */
|
|
17
|
+
color: #525252; /* ❌ same color today, broken in dark mode */
|
|
18
|
+
color: var(--neutral-600); /* ❌ palette step — does not flip between themes */
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Palette steps (`--neutral-*`, `--blue-*`) are raw material. **Only semantic roles
|
|
22
|
+
(`--text-body`, `--bg-surface`, `--action-primary`) may appear in component code.**
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Colors
|
|
27
|
+
|
|
28
|
+
One action hue. Color carries meaning; the interface itself is near-monochrome.
|
|
29
|
+
|
|
30
|
+
### Surfaces
|
|
31
|
+
| Token | Light | Use |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| `--bg-app` | `#fafafa` | Page canvas behind panels |
|
|
34
|
+
| `--bg-surface` | `#ffffff` | Cards, menus, table cells |
|
|
35
|
+
| `--bg-raised` | `#ffffff` | Modals, drawers, popovers |
|
|
36
|
+
| `--bg-inset` | `#fafafa` | Wells, table headers, code blocks |
|
|
37
|
+
| `--bg-hover` | `#f5f5f5` | Row / item hover |
|
|
38
|
+
| `--bg-active` | `#f5f5f5` | Selected nav pill, toggled control |
|
|
39
|
+
| `--bg-press` | `#e5e5e5` | Press wash |
|
|
40
|
+
| `--bg-scrim` | `rgba(10,10,10,.32)` | Behind modals |
|
|
41
|
+
|
|
42
|
+
Surfaces get **lighter as they nest** in light mode, **brighter** in dark mode. Use them in
|
|
43
|
+
order (`app` → `surface` → `raised`) and depth reads correctly in both themes.
|
|
44
|
+
|
|
45
|
+
### Text
|
|
46
|
+
| Token | Light | Use |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| `--text-primary` | `#0a0a0a` | Maximum emphasis |
|
|
49
|
+
| `--text-heading` | `#171717` | Headings, table headers |
|
|
50
|
+
| `--text-body` | `#525252` | Default body text |
|
|
51
|
+
| `--text-secondary` | `#737373` | Meta, labels, captions |
|
|
52
|
+
| `--text-muted` | `#a1a1a1` | Placeholder, disabled glyph |
|
|
53
|
+
| `--on-accent` | `#ffffff` | Text on any saturated fill — **both themes** |
|
|
54
|
+
|
|
55
|
+
### Borders
|
|
56
|
+
| Token | Light | Use |
|
|
57
|
+
| --- | --- | --- |
|
|
58
|
+
| `--border-card` | `rgba(229,229,229,.6)` | Card hairline |
|
|
59
|
+
| `--border-control` | `#e5e5e5` | Input / button edge |
|
|
60
|
+
| `--border-subtle` | `#f5f5f5` | List and table dividers |
|
|
61
|
+
| `--focus-border` | `#2b7fff` | Keyboard focus outline |
|
|
62
|
+
|
|
63
|
+
### Action
|
|
64
|
+
| Token | Light | Use |
|
|
65
|
+
| --- | --- | --- |
|
|
66
|
+
| `--action-primary` | `#155dfc` | Primary button, link |
|
|
67
|
+
| `--action-primary-hover` | `#1447e6` | Hover |
|
|
68
|
+
| `--action-primary-active` | `#1039c4` | Press |
|
|
69
|
+
| `--soft-bg` | `#eff6ff` | Tinted button surface |
|
|
70
|
+
| `--action-dark` | `#171717` | Dark pill (AI actions) |
|
|
71
|
+
|
|
72
|
+
### Feedback — always a trio (solid / tint / text-on-tint)
|
|
73
|
+
| Meaning | Solid | Tint bg | Text on tint |
|
|
74
|
+
| --- | --- | --- | --- |
|
|
75
|
+
| Success | `--success` `#00bc7d` | `--success-bg` | `--success-text` |
|
|
76
|
+
| Warning | `--warning` `#ffb900` | `--warning-bg` | `--warning-text` |
|
|
77
|
+
| Danger | `--danger` `#fb2c36` | `--danger-bg` | `--danger-text` |
|
|
78
|
+
| Info | `--action-primary` | `--info-bg` | `--info-fg` |
|
|
79
|
+
|
|
80
|
+
Never put `--success` (the solid) behind text — use the `-bg` / `-text` pair.
|
|
81
|
+
|
|
82
|
+
### Charts
|
|
83
|
+
Series walk `--series-1…10` in order; signed values are ALWAYS `--chart-pos` / `--chart-neg`
|
|
84
|
+
(diverging bars, waterfall bridges, deltas, auto sparklines); totals and combo overlay lines are
|
|
85
|
+
`--chart-total`; guides are dashed `--chart-guide`. Lines are straight or monotone-cubic — never
|
|
86
|
+
a spline that overshoots a real value. Numbers are `--font-mono`, compact-formatted. Every chart
|
|
87
|
+
answers a hover at every size: a tile-tier chart drops its axes and legend, never its tooltip.
|
|
88
|
+
Geography is data, not a drawing — country outlines come from Natural Earth via d3-geo.
|
|
89
|
+
3D charts are presentation, not analysis: plain SVG painter’s-algorithm rendering, one upper-left
|
|
90
|
+
light, faces shaded by color-mix on the series color; pitch clamps to 8–80° and 3D pies never orbit.
|
|
91
|
+
|
|
92
|
+
### Node-category hues (pipeline surface only)
|
|
93
|
+
`--cat-source` green · `--cat-join` blue · `--cat-transform` orange · `--cat-merge` purple ·
|
|
94
|
+
`--cat-output` teal. Each has a `-bg` tint for its icon tile. Hue means **category**; the four
|
|
95
|
+
feedback colors mean **severity**. Do not mix the two vocabularies.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Typography
|
|
100
|
+
|
|
101
|
+
`--font-sans` is Inter. `--font-mono` is Menlo. There is no third family.
|
|
102
|
+
|
|
103
|
+
| Token | Size / line-height | Use |
|
|
104
|
+
| --- | --- | --- |
|
|
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 |
|
|
113
|
+
|
|
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.
|
|
116
|
+
|
|
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.
|
|
119
|
+
|
|
120
|
+
This is a **dense, 13px-default interface**. If your text looks like a marketing site, it is
|
|
121
|
+
too large.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Spacing, radii, sizing
|
|
126
|
+
|
|
127
|
+
**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.
|
|
135
|
+
|
|
136
|
+
**Page rhythm**: `--page-pad-y` 24px · `--page-pad-x` 32px · `--section-gap` 24px ·
|
|
137
|
+
`--card-pad` 21px (`--card-pad-sm` 17px for dense cards).
|
|
138
|
+
|
|
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.**
|
|
141
|
+
|
|
142
|
+
**Shadows** — four, and only four: `--shadow-node` (canvas cards), `--shadow-menu` (dropdowns,
|
|
143
|
+
popovers), `--shadow-modal` (modals), `--shadow-selected` (selected node). Cards in content
|
|
144
|
+
areas use a **border, not a shadow**.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Motion
|
|
149
|
+
|
|
150
|
+
`--dur-fast` 120ms (hover) · `--dur` 160ms (default) · `--dur-slow` 240ms (overlays).
|
|
151
|
+
Easing is `--ease-out` for entrances, `--ease-in-out` for state changes.
|
|
152
|
+
|
|
153
|
+
Use the prebuilt recipe rather than hand-writing transitions:
|
|
154
|
+
|
|
155
|
+
```css
|
|
156
|
+
transition: var(--t-hover); /* background, border-color, color */
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Nothing bounces. Nothing slides more than a few pixels. Keyframes available:
|
|
160
|
+
`kb-fade-in`, `kb-rise`, `kb-toast-in`, `kb-spin`, `kb-pulse`, `kb-slide-in`.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Interaction states — you get these for free
|
|
165
|
+
|
|
166
|
+
`tokens/interaction.css` applies press and keyboard focus globally. Do not re-implement them.
|
|
167
|
+
|
|
168
|
+
- **Hover** — one step darker (`--bg-hover`, `--action-primary-hover`, `--soft-hover`)
|
|
169
|
+
- **Press** — a second step, applied automatically on `:active`
|
|
170
|
+
- **Focus** — 2px `--focus-border` outline on `:focus-visible` only (never on mouse click)
|
|
171
|
+
- **Disabled** — 55% opacity, default cursor
|
|
172
|
+
|
|
173
|
+
For this to work on a custom clickable element, give it a role and make it focusable:
|
|
174
|
+
|
|
175
|
+
```jsx
|
|
176
|
+
<div role="button" tabIndex={0} onClick={...}> {/* ✅ press + focus + keyboard */}
|
|
177
|
+
<div onClick={...}> {/* ❌ inert, unreachable by keyboard */}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Drag targets say what will happen
|
|
181
|
+
|
|
182
|
+
An indicator appears **only where a drop is legal**, and its shape names the operation:
|
|
183
|
+
|
|
184
|
+
- **Move into a container** — the whole target row fills `--soft-bg` with a 2px
|
|
185
|
+
`--action-primary` outline. Never a half-height box: the target is the row, not an edge.
|
|
186
|
+
- **Insert between** — a 2px `--action-primary` rule inset at the row's top or bottom edge.
|
|
187
|
+
Only where ordering is a real operation (`Tree` opts in with `reorder`).
|
|
188
|
+
- **Nothing** — hovering an illegal target (a file, a disabled row, a node's own subtree)
|
|
189
|
+
shows no indicator at all. An indicator for a drop that would be rejected is a lie.
|
|
190
|
+
- **Connecting two things** (pipeline ports) — the source handle stays lit, a dashed
|
|
191
|
+
`--action-primary` bezier follows the cursor, and the reachable end point lights and swaps
|
|
192
|
+
its glyph for a crosshair. Snapping is by distance, not by hover, so the wire lands even
|
|
193
|
+
when the cursor is over the canvas rather than exactly on the 22px handle.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
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
|
+
## Do not
|
|
214
|
+
|
|
215
|
+
The list that prevents the most rework. These are absolute.
|
|
216
|
+
|
|
217
|
+
- **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.
|
|
220
|
+
- **Do not reference a palette step** (`--neutral-500`, `--blue-600`) in component code.
|
|
221
|
+
- **Do not use any font other than Inter and Menlo.** No Roboto, no Arial, no system-ui stack.
|
|
222
|
+
- **Do not use gradients.** The only exception in the entire system is the chart area fill.
|
|
223
|
+
- **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.
|
|
225
|
+
- **Do not put dark text on a saturated fill.** `--on-accent` (white) is the only option,
|
|
226
|
+
in both themes — this is why the dark-mode primary button keeps white text.
|
|
227
|
+
- **Do not scale or shift elements on press.** Press is a color step only.
|
|
228
|
+
- **Do not show a drop indicator where the drop is impossible.** No half-row boxes on a
|
|
229
|
+
container, no insert rules on a node that can't take children.
|
|
230
|
+
- **Do not build a new primitive when one exists.** Check the component index in
|
|
231
|
+
`INTEGRATION.md` first — there are 118.
|
|
232
|
+
- **Do not use emoji as icons.** Use `<Icon name="..." />` (362 glyphs) or `<Unicon>` (1,206).
|
|
233
|
+
- **Do not invent new component variants.** If `Button` lacks the variant you want, that is a
|
|
234
|
+
design-system request, not a local override.
|
|
235
|
+
- **Do not stack two primary buttons.** One primary action per view; everything else is
|
|
236
|
+
`outline`, `ghost`, or `text`.
|
|
237
|
+
- **Do not use full-uppercase text** except in 9–10px section labels with letter-spacing.
|
|
238
|
+
- **Do not animate anything longer than 360ms** or with a bounce/elastic easing.
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Voice
|
|
243
|
+
|
|
244
|
+
Direct, lowercase-shy, no exclamation marks. Address the user as *you*; never say *we*.
|
|
245
|
+
Buttons are verbs (`Submit`, `Run Test`, `Export Log`), not `Click here` or `OK`.
|
|
246
|
+
Empty states say what will appear and how to make it appear. Errors say what failed and what
|
|
247
|
+
to do next — never `Oops!` or `Something went wrong`.
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Working with the components
|
|
252
|
+
|
|
253
|
+
Prefer composing existing components over writing markup. The full index with import paths is
|
|
254
|
+
in `INTEGRATION.md`; per-group usage notes are in each `components/<group>/*.prompt.md`; every
|
|
255
|
+
component has a `.d.ts` next to it with the exact props contract.
|
|
256
|
+
|
|
257
|
+
**When unsure how something should look, read a real card** in `components/_cards/` — those
|
|
258
|
+
are the reference implementations and they are more reliable than any description here.
|
|
259
|
+
|
|
260
|
+
```jsx
|
|
261
|
+
import { Button, Field, Input, Card } from '@keyfunc/keybricks-ds'
|
|
262
|
+
|
|
263
|
+
<Card>
|
|
264
|
+
<Field label="Run name" required>
|
|
265
|
+
<Input placeholder="August close" />
|
|
266
|
+
</Field>
|
|
267
|
+
<Button variant="primary">Start run</Button>
|
|
268
|
+
</Card>
|
|
269
|
+
```
|