@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.
Files changed (418) hide show
  1. package/DEPLOY.md +204 -0
  2. package/DESIGN.md +269 -0
  3. package/INTEGRATION.md +417 -0
  4. package/SKILL.md +32 -0
  5. package/_adherence.oxlintrc.json +1469 -0
  6. package/_scripts/build-index.mjs +80 -0
  7. package/_scripts/build-tokens.mjs +135 -0
  8. package/assets/icons/icon-index.js +1 -0
  9. package/assets/icons/icon-index.json +1 -0
  10. package/assets/icons/unicons-index.js +1 -0
  11. package/assets/icons/unicons-index.json +1 -0
  12. package/assets/keybricks-logo.png +0 -0
  13. package/components/_cards/accordion.card.html +32 -0
  14. package/components/_cards/action-chip.card.html +22 -0
  15. package/components/_cards/activity.card.html +34 -0
  16. package/components/_cards/alert.card.html +32 -0
  17. package/components/_cards/app-chrome.card.html +36 -0
  18. package/components/_cards/banner.card.html +21 -0
  19. package/components/_cards/brand-visual.card.html +43 -0
  20. package/components/_cards/breadcrumb.card.html +23 -0
  21. package/components/_cards/button-1-base.card.html +39 -0
  22. package/components/_cards/button-2-states.card.html +56 -0
  23. package/components/_cards/button-3-sizes-icons.card.html +32 -0
  24. package/components/_cards/button-4-group.card.html +47 -0
  25. package/components/_cards/canvas-zoom-controls.card.html +19 -0
  26. package/components/_cards/cards-indicators.card.html +59 -0
  27. package/components/_cards/charts-1-sparkline.card.html +55 -0
  28. package/components/_cards/charts-10-gauge.card.html +31 -0
  29. package/components/_cards/charts-11-funnel.card.html +28 -0
  30. package/components/_cards/charts-12-treemap.card.html +23 -0
  31. package/components/_cards/charts-14-radar.card.html +31 -0
  32. package/components/_cards/charts-15-distribution.card.html +32 -0
  33. package/components/_cards/charts-16-pareto.card.html +25 -0
  34. package/components/_cards/charts-17-candlestick.card.html +34 -0
  35. package/components/_cards/charts-18-sankey.card.html +29 -0
  36. package/components/_cards/charts-19-chord.card.html +31 -0
  37. package/components/_cards/charts-2-line.card.html +46 -0
  38. package/components/_cards/charts-20-sunburst.card.html +38 -0
  39. package/components/_cards/charts-21-worldmap.card.html +33 -0
  40. package/components/_cards/charts-22-gantt.card.html +37 -0
  41. package/components/_cards/charts-23-bar3d.card.html +26 -0
  42. package/components/_cards/charts-24-pie3d.card.html +32 -0
  43. package/components/_cards/charts-25-surface3d.card.html +24 -0
  44. package/components/_cards/charts-26-scatter3d.card.html +24 -0
  45. package/components/_cards/charts-27-ribbon3d.card.html +23 -0
  46. package/components/_cards/charts-3-bar.card.html +71 -0
  47. package/components/_cards/charts-4-barlist.card.html +30 -0
  48. package/components/_cards/charts-5-donut.card.html +35 -0
  49. package/components/_cards/charts-6-scatter.card.html +26 -0
  50. package/components/_cards/charts-7-heatmap.card.html +28 -0
  51. package/components/_cards/charts-8-waterfall.card.html +25 -0
  52. package/components/_cards/charts-9-bullet.card.html +31 -0
  53. package/components/_cards/charts-99-fullpage.card.html +194 -0
  54. package/components/_cards/checkbox.card.html +34 -0
  55. package/components/_cards/codeblock.card.html +19 -0
  56. package/components/_cards/combobox.card.html +25 -0
  57. package/components/_cards/context-menu.card.html +21 -0
  58. package/components/_cards/datatable.card.html +48 -0
  59. package/components/_cards/date-picker.card.html +31 -0
  60. package/components/_cards/diffvalue.card.html +21 -0
  61. package/components/_cards/divider.card.html +24 -0
  62. package/components/_cards/drawer.card.html +30 -0
  63. package/components/_cards/dropdown-menu.card.html +38 -0
  64. package/components/_cards/dropzone.card.html +22 -0
  65. package/components/_cards/empty-state.card.html +29 -0
  66. package/components/_cards/filter-bar.card.html +34 -0
  67. package/components/_cards/icon-button.card.html +27 -0
  68. package/components/_cards/icons-1-core.card.html +49 -0
  69. package/components/_cards/icons-2-feather.card.html +39 -0
  70. package/components/_cards/icons-3-unicons.card.html +44 -0
  71. package/components/_cards/input.card.html +25 -0
  72. package/components/_cards/kbd.card.html +20 -0
  73. package/components/_cards/keyvalue.card.html +23 -0
  74. package/components/_cards/listrow.card.html +30 -0
  75. package/components/_cards/loading.card.html +33 -0
  76. package/components/_cards/log-viewer.card.html +23 -0
  77. package/components/_cards/modal.card.html +35 -0
  78. package/components/_cards/multi-select.card.html +26 -0
  79. package/components/_cards/number-stepper.card.html +24 -0
  80. package/components/_cards/pagination.card.html +25 -0
  81. package/components/_cards/people.card.html +46 -0
  82. package/components/_cards/pipeline-node.card.html +76 -0
  83. package/components/_cards/pipeline-palette.card.html +54 -0
  84. package/components/_cards/search.card.html +23 -0
  85. package/components/_cards/select.card.html +23 -0
  86. package/components/_cards/slider.card.html +25 -0
  87. package/components/_cards/smart-table.card.html +37 -0
  88. package/components/_cards/spreadsheet.card.html +31 -0
  89. package/components/_cards/stepper.card.html +25 -0
  90. package/components/_cards/tabs.card.html +25 -0
  91. package/components/_cards/tag.card.html +26 -0
  92. package/components/_cards/textarea.card.html +27 -0
  93. package/components/_cards/timeline.card.html +32 -0
  94. package/components/_cards/toast.card.html +33 -0
  95. package/components/_cards/toggles.card.html +68 -0
  96. package/components/_cards/tooltip.card.html +22 -0
  97. package/components/_cards/tree.card.html +150 -0
  98. package/components/_shared/frame-theme.js +16 -0
  99. package/components/_shared/src-brand.js +1 -0
  100. package/components/_shared/src-buttons.js +1 -0
  101. package/components/_shared/src-charts.js +1 -0
  102. package/components/_shared/src-data.js +1 -0
  103. package/components/_shared/src-display.js +1 -0
  104. package/components/_shared/src-feedback.js +1 -0
  105. package/components/_shared/src-forms.js +1 -0
  106. package/components/_shared/src-icons.js +1 -0
  107. package/components/_shared/src-navigation.js +1 -0
  108. package/components/_shared/src-pipeline.js +1 -0
  109. package/components/_shared/src-tabs.js +1 -0
  110. package/components/_shared/svg-download.js +19 -0
  111. package/components/_shared/view-source.js +185 -0
  112. package/components/_vue/index.mjs +114 -0
  113. package/components/brand/BrandVisual.d.ts +17 -0
  114. package/components/brand/BrandVisual.jsx +29 -0
  115. package/components/brand/BrandVisual.vue +34 -0
  116. package/components/brand/_dir.card.html +13 -0
  117. package/components/brand/brandMotifs.js +210 -0
  118. package/components/buttons/ActionChip.d.ts +10 -0
  119. package/components/buttons/ActionChip.jsx +20 -0
  120. package/components/buttons/ActionChip.vue +18 -0
  121. package/components/buttons/Button.d.ts +40 -0
  122. package/components/buttons/Button.jsx +101 -0
  123. package/components/buttons/Button.vue +87 -0
  124. package/components/buttons/IconButton.d.ts +26 -0
  125. package/components/buttons/IconButton.jsx +28 -0
  126. package/components/buttons/IconButton.vue +21 -0
  127. package/components/buttons/_dir.card.html +13 -0
  128. package/components/buttons/buttons.prompt.md +19 -0
  129. package/components/charts/Bar3D.d.ts +15 -0
  130. package/components/charts/Bar3D.jsx +93 -0
  131. package/components/charts/Bar3D.vue +79 -0
  132. package/components/charts/BarChart.d.ts +23 -0
  133. package/components/charts/BarChart.jsx +135 -0
  134. package/components/charts/BarChart.vue +139 -0
  135. package/components/charts/BarList.d.ts +13 -0
  136. package/components/charts/BarList.jsx +31 -0
  137. package/components/charts/BarList.vue +25 -0
  138. package/components/charts/BoxPlot.d.ts +18 -0
  139. package/components/charts/BoxPlot.jsx +62 -0
  140. package/components/charts/BoxPlot.vue +58 -0
  141. package/components/charts/BulletChart.d.ts +12 -0
  142. package/components/charts/BulletChart.jsx +41 -0
  143. package/components/charts/BulletChart.vue +33 -0
  144. package/components/charts/CandlestickChart.d.ts +15 -0
  145. package/components/charts/CandlestickChart.jsx +63 -0
  146. package/components/charts/CandlestickChart.vue +62 -0
  147. package/components/charts/ChartKit.d.ts +8 -0
  148. package/components/charts/ChartKit.jsx +76 -0
  149. package/components/charts/ChartKit.vue +47 -0
  150. package/components/charts/ChordChart.d.ts +13 -0
  151. package/components/charts/ChordChart.jsx +55 -0
  152. package/components/charts/ChordChart.vue +54 -0
  153. package/components/charts/DonutChart.d.ts +15 -0
  154. package/components/charts/DonutChart.jsx +73 -0
  155. package/components/charts/DonutChart.vue +61 -0
  156. package/components/charts/FunnelChart.d.ts +11 -0
  157. package/components/charts/FunnelChart.jsx +37 -0
  158. package/components/charts/FunnelChart.vue +29 -0
  159. package/components/charts/GanttChart.d.ts +20 -0
  160. package/components/charts/GanttChart.jsx +80 -0
  161. package/components/charts/GanttChart.vue +60 -0
  162. package/components/charts/GaugeChart.d.ts +13 -0
  163. package/components/charts/GaugeChart.jsx +33 -0
  164. package/components/charts/GaugeChart.vue +29 -0
  165. package/components/charts/HeatmapChart.d.ts +13 -0
  166. package/components/charts/HeatmapChart.jsx +62 -0
  167. package/components/charts/HeatmapChart.vue +38 -0
  168. package/components/charts/Histogram.d.ts +16 -0
  169. package/components/charts/Histogram.jsx +56 -0
  170. package/components/charts/Histogram.vue +53 -0
  171. package/components/charts/LineChart.d.ts +17 -0
  172. package/components/charts/LineChart.jsx +84 -0
  173. package/components/charts/LineChart.vue +86 -0
  174. package/components/charts/ParetoChart.d.ts +13 -0
  175. package/components/charts/ParetoChart.jsx +54 -0
  176. package/components/charts/ParetoChart.vue +55 -0
  177. package/components/charts/Pie3D.d.ts +17 -0
  178. package/components/charts/Pie3D.jsx +145 -0
  179. package/components/charts/Pie3D.vue +115 -0
  180. package/components/charts/RadarChart.d.ts +14 -0
  181. package/components/charts/RadarChart.jsx +79 -0
  182. package/components/charts/RadarChart.vue +73 -0
  183. package/components/charts/Ribbon3D.d.ts +13 -0
  184. package/components/charts/Ribbon3D.jsx +89 -0
  185. package/components/charts/Ribbon3D.vue +79 -0
  186. package/components/charts/SankeyChart.d.ts +15 -0
  187. package/components/charts/SankeyChart.jsx +59 -0
  188. package/components/charts/SankeyChart.vue +53 -0
  189. package/components/charts/Scatter3D.d.ts +12 -0
  190. package/components/charts/Scatter3D.jsx +69 -0
  191. package/components/charts/Scatter3D.vue +59 -0
  192. package/components/charts/ScatterChart.d.ts +12 -0
  193. package/components/charts/ScatterChart.jsx +53 -0
  194. package/components/charts/ScatterChart.vue +57 -0
  195. package/components/charts/Sparkline.d.ts +19 -0
  196. package/components/charts/Sparkline.jsx +63 -0
  197. package/components/charts/Sparkline.vue +54 -0
  198. package/components/charts/SunburstChart.d.ts +12 -0
  199. package/components/charts/SunburstChart.jsx +61 -0
  200. package/components/charts/SunburstChart.vue +60 -0
  201. package/components/charts/Surface3D.d.ts +13 -0
  202. package/components/charts/Surface3D.jsx +70 -0
  203. package/components/charts/Surface3D.vue +63 -0
  204. package/components/charts/TreemapChart.d.ts +11 -0
  205. package/components/charts/TreemapChart.jsx +35 -0
  206. package/components/charts/TreemapChart.vue +27 -0
  207. package/components/charts/WaterfallChart.d.ts +11 -0
  208. package/components/charts/WaterfallChart.jsx +59 -0
  209. package/components/charts/WaterfallChart.vue +46 -0
  210. package/components/charts/WorldMap.d.ts +21 -0
  211. package/components/charts/WorldMap.jsx +107 -0
  212. package/components/charts/WorldMap.vue +73 -0
  213. package/components/charts/_dir.card.html +7 -0
  214. package/components/charts/chart-3d.js +84 -0
  215. package/components/charts/chart-geometry.js +223 -0
  216. package/components/charts/charts.prompt.md +24 -0
  217. package/components/data/CodeBlock.d.ts +9 -0
  218. package/components/data/CodeBlock.jsx +19 -0
  219. package/components/data/CodeBlock.vue +22 -0
  220. package/components/data/DataTable.d.ts +28 -0
  221. package/components/data/DataTable.jsx +32 -0
  222. package/components/data/DataTable.vue +25 -0
  223. package/components/data/DiffValue.d.ts +11 -0
  224. package/components/data/DiffValue.jsx +15 -0
  225. package/components/data/DiffValue.vue +13 -0
  226. package/components/data/FilterBar.d.ts +16 -0
  227. package/components/data/FilterBar.jsx +22 -0
  228. package/components/data/FilterBar.vue +23 -0
  229. package/components/data/KeyValue.d.ts +16 -0
  230. package/components/data/KeyValue.jsx +25 -0
  231. package/components/data/KeyValue.vue +26 -0
  232. package/components/data/ListRow.d.ts +14 -0
  233. package/components/data/ListRow.jsx +25 -0
  234. package/components/data/ListRow.vue +25 -0
  235. package/components/data/Pagination.d.ts +12 -0
  236. package/components/data/Pagination.jsx +27 -0
  237. package/components/data/Pagination.vue +24 -0
  238. package/components/data/SmartTable.d.ts +30 -0
  239. package/components/data/SmartTable.jsx +73 -0
  240. package/components/data/SmartTable.vue +74 -0
  241. package/components/data/Spreadsheet.d.ts +33 -0
  242. package/components/data/Spreadsheet.jsx +110 -0
  243. package/components/data/Spreadsheet.vue +95 -0
  244. package/components/data/_dir.card.html +13 -0
  245. package/components/data/data.prompt.md +33 -0
  246. package/components/display/Avatar.d.ts +21 -0
  247. package/components/display/Avatar.jsx +31 -0
  248. package/components/display/Avatar.vue +34 -0
  249. package/components/display/Badge.d.ts +27 -0
  250. package/components/display/Badge.jsx +40 -0
  251. package/components/display/Badge.vue +47 -0
  252. package/components/display/Card.d.ts +27 -0
  253. package/components/display/Card.jsx +27 -0
  254. package/components/display/Card.vue +28 -0
  255. package/components/display/Divider.d.ts +8 -0
  256. package/components/display/Divider.jsx +14 -0
  257. package/components/display/Divider.vue +13 -0
  258. package/components/display/Kbd.d.ts +7 -0
  259. package/components/display/Kbd.jsx +12 -0
  260. package/components/display/Kbd.vue +9 -0
  261. package/components/display/ProgressBar.d.ts +42 -0
  262. package/components/display/ProgressBar.jsx +70 -0
  263. package/components/display/ProgressBar.vue +69 -0
  264. package/components/display/Tag.d.ts +9 -0
  265. package/components/display/Tag.jsx +15 -0
  266. package/components/display/Tag.vue +15 -0
  267. package/components/display/_dir.card.html +13 -0
  268. package/components/display/display.prompt.md +30 -0
  269. package/components/feedback/Accordion.d.ts +13 -0
  270. package/components/feedback/Accordion.jsx +21 -0
  271. package/components/feedback/Accordion.vue +22 -0
  272. package/components/feedback/ActivityItem.d.ts +25 -0
  273. package/components/feedback/ActivityItem.jsx +39 -0
  274. package/components/feedback/ActivityItem.vue +46 -0
  275. package/components/feedback/Alert.d.ts +36 -0
  276. package/components/feedback/Alert.jsx +48 -0
  277. package/components/feedback/Alert.vue +59 -0
  278. package/components/feedback/Banner.d.ts +15 -0
  279. package/components/feedback/Banner.jsx +25 -0
  280. package/components/feedback/Banner.vue +25 -0
  281. package/components/feedback/ContextMenu.d.ts +8 -0
  282. package/components/feedback/ContextMenu.jsx +18 -0
  283. package/components/feedback/ContextMenu.vue +19 -0
  284. package/components/feedback/Drawer.d.ts +18 -0
  285. package/components/feedback/Drawer.jsx +26 -0
  286. package/components/feedback/Drawer.vue +24 -0
  287. package/components/feedback/Menu.d.ts +10 -0
  288. package/components/feedback/Menu.jsx +24 -0
  289. package/components/feedback/Menu.vue +21 -0
  290. package/components/feedback/Modal.d.ts +38 -0
  291. package/components/feedback/Modal.jsx +69 -0
  292. package/components/feedback/Modal.vue +65 -0
  293. package/components/feedback/Stepper.d.ts +9 -0
  294. package/components/feedback/Stepper.jsx +24 -0
  295. package/components/feedback/Stepper.vue +18 -0
  296. package/components/feedback/Timeline.d.ts +15 -0
  297. package/components/feedback/Timeline.jsx +27 -0
  298. package/components/feedback/Timeline.vue +21 -0
  299. package/components/feedback/_dir.card.html +13 -0
  300. package/components/feedback/feedback.prompt.md +35 -0
  301. package/components/forms/Checkbox.d.ts +13 -0
  302. package/components/forms/Checkbox.jsx +17 -0
  303. package/components/forms/Checkbox.vue +18 -0
  304. package/components/forms/Combobox.d.ts +13 -0
  305. package/components/forms/Combobox.jsx +34 -0
  306. package/components/forms/Combobox.vue +35 -0
  307. package/components/forms/DatePicker.d.ts +12 -0
  308. package/components/forms/DatePicker.jsx +48 -0
  309. package/components/forms/DatePicker.vue +46 -0
  310. package/components/forms/Dropzone.d.ts +20 -0
  311. package/components/forms/Dropzone.jsx +36 -0
  312. package/components/forms/Dropzone.vue +28 -0
  313. package/components/forms/Field.d.ts +13 -0
  314. package/components/forms/Field.jsx +13 -0
  315. package/components/forms/Field.vue +12 -0
  316. package/components/forms/Input.d.ts +18 -0
  317. package/components/forms/Input.jsx +35 -0
  318. package/components/forms/Input.vue +38 -0
  319. package/components/forms/MultiSelect.d.ts +14 -0
  320. package/components/forms/MultiSelect.jsx +33 -0
  321. package/components/forms/MultiSelect.vue +36 -0
  322. package/components/forms/NumberStepper.d.ts +13 -0
  323. package/components/forms/NumberStepper.jsx +15 -0
  324. package/components/forms/NumberStepper.vue +17 -0
  325. package/components/forms/Radio.vue +16 -0
  326. package/components/forms/RadioGroup.vue +11 -0
  327. package/components/forms/SearchInput.d.ts +12 -0
  328. package/components/forms/SearchInput.jsx +17 -0
  329. package/components/forms/SearchInput.vue +14 -0
  330. package/components/forms/Select.d.ts +14 -0
  331. package/components/forms/Select.jsx +17 -0
  332. package/components/forms/Select.vue +16 -0
  333. package/components/forms/Slider.d.ts +15 -0
  334. package/components/forms/Slider.jsx +21 -0
  335. package/components/forms/Slider.vue +23 -0
  336. package/components/forms/Switch.d.ts +31 -0
  337. package/components/forms/Switch.jsx +40 -0
  338. package/components/forms/Switch.vue +16 -0
  339. package/components/forms/_dir.card.html +13 -0
  340. package/components/forms/forms.prompt.md +23 -0
  341. package/components/icons/Icon.d.ts +19 -0
  342. package/components/icons/Icon.jsx +93 -0
  343. package/components/icons/Icon.prompt.md +8 -0
  344. package/components/icons/Icon.vue +12 -0
  345. package/components/icons/Unicon.d.ts +12 -0
  346. package/components/icons/Unicon.jsx +16 -0
  347. package/components/icons/Unicon.vue +15 -0
  348. package/components/icons/_dir.card.html +13 -0
  349. package/components/icons/feather-paths.js +2 -0
  350. package/components/icons/icon-paths.js +73 -0
  351. package/components/index.d.ts +87 -0
  352. package/components/index.js +110 -0
  353. package/components/navigation/Breadcrumb.d.ts +24 -0
  354. package/components/navigation/Breadcrumb.jsx +120 -0
  355. package/components/navigation/Breadcrumb.vue +94 -0
  356. package/components/navigation/DocTree.d.ts +18 -0
  357. package/components/navigation/DocTree.jsx +37 -0
  358. package/components/navigation/DocTree.vue +25 -0
  359. package/components/navigation/Sidebar.d.ts +29 -0
  360. package/components/navigation/Sidebar.jsx +75 -0
  361. package/components/navigation/Sidebar.vue +54 -0
  362. package/components/navigation/TopBar.d.ts +27 -0
  363. package/components/navigation/TopBar.jsx +44 -0
  364. package/components/navigation/TopBar.vue +51 -0
  365. package/components/navigation/Tree.d.ts +83 -0
  366. package/components/navigation/Tree.jsx +347 -0
  367. package/components/navigation/Tree.vue +258 -0
  368. package/components/navigation/_dir.card.html +13 -0
  369. package/components/navigation/navigation.prompt.md +22 -0
  370. package/components/pipeline/ConfigPanel.d.ts +18 -0
  371. package/components/pipeline/ConfigPanel.jsx +30 -0
  372. package/components/pipeline/ConfigPanel.vue +32 -0
  373. package/components/pipeline/DataPreview.d.ts +14 -0
  374. package/components/pipeline/DataPreview.jsx +24 -0
  375. package/components/pipeline/DataPreview.vue +21 -0
  376. package/components/pipeline/NodeCard.d.ts +47 -0
  377. package/components/pipeline/NodeCard.jsx +97 -0
  378. package/components/pipeline/NodeCard.vue +75 -0
  379. package/components/pipeline/PaletteItem.vue +15 -0
  380. package/components/pipeline/PaletteListItem.vue +15 -0
  381. package/components/pipeline/PalettePanel.d.ts +20 -0
  382. package/components/pipeline/PalettePanel.jsx +74 -0
  383. package/components/pipeline/PalettePanel.vue +45 -0
  384. package/components/pipeline/PipelineCanvas.d.ts +25 -0
  385. package/components/pipeline/PipelineCanvas.jsx +94 -0
  386. package/components/pipeline/PipelineCanvas.vue +73 -0
  387. package/components/pipeline/ZoomControls.d.ts +9 -0
  388. package/components/pipeline/ZoomControls.jsx +15 -0
  389. package/components/pipeline/ZoomControls.vue +15 -0
  390. package/components/pipeline/_dir.card.html +13 -0
  391. package/components/pipeline/pipeline.prompt.md +22 -0
  392. package/components/tabs/SegmentedControl.d.ts +11 -0
  393. package/components/tabs/SegmentedControl.jsx +21 -0
  394. package/components/tabs/SegmentedControl.vue +15 -0
  395. package/components/tabs/Tabs.d.ts +13 -0
  396. package/components/tabs/Tabs.jsx +52 -0
  397. package/components/tabs/Tabs.vue +39 -0
  398. package/components/tabs/ViewToggle.d.ts +8 -0
  399. package/components/tabs/ViewToggle.jsx +12 -0
  400. package/components/tabs/ViewToggle.vue +12 -0
  401. package/components/tabs/_dir.card.html +13 -0
  402. package/components/tabs/tabs.prompt.md +14 -0
  403. package/package.json +76 -0
  404. package/readme.md +150 -0
  405. package/styles.css +10 -0
  406. package/tokens/alpha.css +27 -0
  407. package/tokens/charts.css +55 -0
  408. package/tokens/colors-extended.css +40 -0
  409. package/tokens/colors.css +39 -0
  410. package/tokens/dark.css +96 -0
  411. package/tokens/fonts.css +4 -0
  412. package/tokens/interaction.css +48 -0
  413. package/tokens/layout.css +30 -0
  414. package/tokens/motion.css +22 -0
  415. package/tokens/tokens.d.ts +680 -0
  416. package/tokens/tokens.js +1018 -0
  417. package/tokens/tokens.json +2928 -0
  418. 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
+ ```