@cloudflare/kumo 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 (560) hide show
  1. package/CHANGELOG.md +510 -0
  2. package/LICENSE +21 -0
  3. package/README.md +521 -0
  4. package/ai/component-registry.json +3754 -0
  5. package/ai/component-registry.md +4022 -0
  6. package/ai/schemas.ts +594 -0
  7. package/dist/badge-Dc99vsfo.js +51 -0
  8. package/dist/badge-Dc99vsfo.js.map +1 -0
  9. package/dist/banner-4fkH6Sbt.js +51 -0
  10. package/dist/banner-4fkH6Sbt.js.map +1 -0
  11. package/dist/breadcrumbs-B5SY2CWj.js +132 -0
  12. package/dist/breadcrumbs-B5SY2CWj.js.map +1 -0
  13. package/dist/button-E2-hZMZE.js +191 -0
  14. package/dist/button-E2-hZMZE.js.map +1 -0
  15. package/dist/catalog.js +229 -0
  16. package/dist/catalog.js.map +1 -0
  17. package/dist/checkbox-BexIU_lZ.js +224 -0
  18. package/dist/checkbox-BexIU_lZ.js.map +1 -0
  19. package/dist/clipboard-text-BFHWMjmr.js +108 -0
  20. package/dist/clipboard-text-BFHWMjmr.js.map +1 -0
  21. package/dist/cn-Bhsu1vx2.js +26 -0
  22. package/dist/cn-Bhsu1vx2.js.map +1 -0
  23. package/dist/code-T2wPDiM0.js +60 -0
  24. package/dist/code-T2wPDiM0.js.map +1 -0
  25. package/dist/collapsible-OBNkTO48.js +56 -0
  26. package/dist/collapsible-OBNkTO48.js.map +1 -0
  27. package/dist/combobox-Dld0kS0U.js +228 -0
  28. package/dist/combobox-Dld0kS0U.js.map +1 -0
  29. package/dist/command-line/cli.js +764 -0
  30. package/dist/command-line/commands/add.js +220 -0
  31. package/dist/command-line/commands/blocks.js +61 -0
  32. package/dist/command-line/commands/doc.js +167 -0
  33. package/dist/command-line/commands/init.js +95 -0
  34. package/dist/command-line/commands/ls.js +53 -0
  35. package/dist/command-palette-BgQ680BG.js +393 -0
  36. package/dist/command-palette-BgQ680BG.js.map +1 -0
  37. package/dist/components/badge.js +7 -0
  38. package/dist/components/badge.js.map +1 -0
  39. package/dist/components/banner.js +7 -0
  40. package/dist/components/banner.js.map +1 -0
  41. package/dist/components/breadcrumbs.js +9 -0
  42. package/dist/components/breadcrumbs.js.map +1 -0
  43. package/dist/components/button.js +9 -0
  44. package/dist/components/button.js.map +1 -0
  45. package/dist/components/checkbox.js +8 -0
  46. package/dist/components/checkbox.js.map +1 -0
  47. package/dist/components/clipboard-text.js +6 -0
  48. package/dist/components/clipboard-text.js.map +1 -0
  49. package/dist/components/code.js +7 -0
  50. package/dist/components/code.js.map +1 -0
  51. package/dist/components/collapsible.js +6 -0
  52. package/dist/components/collapsible.js.map +1 -0
  53. package/dist/components/combobox.js +6 -0
  54. package/dist/components/combobox.js.map +1 -0
  55. package/dist/components/command-palette.js +8 -0
  56. package/dist/components/command-palette.js.map +1 -0
  57. package/dist/components/date-range-picker.js +6 -0
  58. package/dist/components/date-range-picker.js.map +1 -0
  59. package/dist/components/dialog.js +11 -0
  60. package/dist/components/dialog.js.map +1 -0
  61. package/dist/components/dropdown.js +6 -0
  62. package/dist/components/dropdown.js.map +1 -0
  63. package/dist/components/empty.js +9 -0
  64. package/dist/components/empty.js.map +1 -0
  65. package/dist/components/field.js +9 -0
  66. package/dist/components/field.js.map +1 -0
  67. package/dist/components/grid.js +11 -0
  68. package/dist/components/grid.js.map +1 -0
  69. package/dist/components/input.js +11 -0
  70. package/dist/components/input.js.map +1 -0
  71. package/dist/components/label.js +10 -0
  72. package/dist/components/label.js.map +1 -0
  73. package/dist/components/layer-card.js +6 -0
  74. package/dist/components/layer-card.js.map +1 -0
  75. package/dist/components/link.js +9 -0
  76. package/dist/components/link.js.map +1 -0
  77. package/dist/components/loader.js +8 -0
  78. package/dist/components/loader.js.map +1 -0
  79. package/dist/components/menubar.js +7 -0
  80. package/dist/components/menubar.js.map +1 -0
  81. package/dist/components/meter.js +6 -0
  82. package/dist/components/meter.js.map +1 -0
  83. package/dist/components/pagination.js +6 -0
  84. package/dist/components/pagination.js.map +1 -0
  85. package/dist/components/popover.js +14 -0
  86. package/dist/components/popover.js.map +1 -0
  87. package/dist/components/radio.js +10 -0
  88. package/dist/components/radio.js.map +1 -0
  89. package/dist/components/select.js +6 -0
  90. package/dist/components/select.js.map +1 -0
  91. package/dist/components/sensitive-input.js +8 -0
  92. package/dist/components/sensitive-input.js.map +1 -0
  93. package/dist/components/surface.js +6 -0
  94. package/dist/components/surface.js.map +1 -0
  95. package/dist/components/switch.js +8 -0
  96. package/dist/components/switch.js.map +1 -0
  97. package/dist/components/table.js +8 -0
  98. package/dist/components/table.js.map +1 -0
  99. package/dist/components/tabs.js +6 -0
  100. package/dist/components/tabs.js.map +1 -0
  101. package/dist/components/text.js +6 -0
  102. package/dist/components/text.js.map +1 -0
  103. package/dist/components/toast.js +8 -0
  104. package/dist/components/toast.js.map +1 -0
  105. package/dist/components/tooltip.js +7 -0
  106. package/dist/components/tooltip.js.map +1 -0
  107. package/dist/date-range-picker-CbKEQ9pi.js +408 -0
  108. package/dist/date-range-picker-CbKEQ9pi.js.map +1 -0
  109. package/dist/dialog-B1TaN0oR.js +77 -0
  110. package/dist/dialog-B1TaN0oR.js.map +1 -0
  111. package/dist/dropdown-D0rhYKeG.js +263 -0
  112. package/dist/dropdown-D0rhYKeG.js.map +1 -0
  113. package/dist/empty-DzCqjea-.js +93 -0
  114. package/dist/empty-DzCqjea-.js.map +1 -0
  115. package/dist/field-V3J0Ql_V.js +71 -0
  116. package/dist/field-V3J0Ql_V.js.map +1 -0
  117. package/dist/grid-DKajRHh8.js +127 -0
  118. package/dist/grid-DKajRHh8.js.map +1 -0
  119. package/dist/index.js +125 -0
  120. package/dist/index.js.map +1 -0
  121. package/dist/input-Dqvc2AB_.js +109 -0
  122. package/dist/input-Dqvc2AB_.js.map +1 -0
  123. package/dist/input-area-B9qajxvZ.js +57 -0
  124. package/dist/input-area-B9qajxvZ.js.map +1 -0
  125. package/dist/input-group-Bl6tgD5-.js +111 -0
  126. package/dist/input-group-Bl6tgD5-.js.map +1 -0
  127. package/dist/label-87HQArUG.js +50 -0
  128. package/dist/label-87HQArUG.js.map +1 -0
  129. package/dist/layer-card-C8j5Hkkj.js +44 -0
  130. package/dist/layer-card-C8j5Hkkj.js.map +1 -0
  131. package/dist/link-6TIZ4JIw.js +73 -0
  132. package/dist/link-6TIZ4JIw.js.map +1 -0
  133. package/dist/link-provider-DPBGo-0n.js +22 -0
  134. package/dist/link-provider-DPBGo-0n.js.map +1 -0
  135. package/dist/loader-DHGMYlC6.js +105 -0
  136. package/dist/loader-DHGMYlC6.js.map +1 -0
  137. package/dist/menubar-DLwLRFB1.js +92 -0
  138. package/dist/menubar-DLwLRFB1.js.map +1 -0
  139. package/dist/meter-DKUuvXxS.js +51 -0
  140. package/dist/meter-DKUuvXxS.js.map +1 -0
  141. package/dist/pagination-C4HQqodz.js +99 -0
  142. package/dist/pagination-C4HQqodz.js.map +1 -0
  143. package/dist/popover-DhdIqrP7.js +178 -0
  144. package/dist/popover-DhdIqrP7.js.map +1 -0
  145. package/dist/primitives/accordion.js +6 -0
  146. package/dist/primitives/accordion.js.map +1 -0
  147. package/dist/primitives/alert-dialog.js +6 -0
  148. package/dist/primitives/alert-dialog.js.map +1 -0
  149. package/dist/primitives/autocomplete.js +6 -0
  150. package/dist/primitives/autocomplete.js.map +1 -0
  151. package/dist/primitives/avatar.js +6 -0
  152. package/dist/primitives/avatar.js.map +1 -0
  153. package/dist/primitives/button.js +6 -0
  154. package/dist/primitives/button.js.map +1 -0
  155. package/dist/primitives/checkbox-group.js +6 -0
  156. package/dist/primitives/checkbox-group.js.map +1 -0
  157. package/dist/primitives/checkbox.js +6 -0
  158. package/dist/primitives/checkbox.js.map +1 -0
  159. package/dist/primitives/collapsible.js +6 -0
  160. package/dist/primitives/collapsible.js.map +1 -0
  161. package/dist/primitives/combobox.js +6 -0
  162. package/dist/primitives/combobox.js.map +1 -0
  163. package/dist/primitives/context-menu.js +6 -0
  164. package/dist/primitives/context-menu.js.map +1 -0
  165. package/dist/primitives/dialog.js +6 -0
  166. package/dist/primitives/dialog.js.map +1 -0
  167. package/dist/primitives/direction-provider.js +7 -0
  168. package/dist/primitives/direction-provider.js.map +1 -0
  169. package/dist/primitives/field.js +6 -0
  170. package/dist/primitives/field.js.map +1 -0
  171. package/dist/primitives/fieldset.js +6 -0
  172. package/dist/primitives/fieldset.js.map +1 -0
  173. package/dist/primitives/form.js +6 -0
  174. package/dist/primitives/form.js.map +1 -0
  175. package/dist/primitives/input.js +6 -0
  176. package/dist/primitives/input.js.map +1 -0
  177. package/dist/primitives/menu.js +6 -0
  178. package/dist/primitives/menu.js.map +1 -0
  179. package/dist/primitives/menubar.js +6 -0
  180. package/dist/primitives/menubar.js.map +1 -0
  181. package/dist/primitives/meter.js +6 -0
  182. package/dist/primitives/meter.js.map +1 -0
  183. package/dist/primitives/navigation-menu.js +6 -0
  184. package/dist/primitives/navigation-menu.js.map +1 -0
  185. package/dist/primitives/number-field.js +6 -0
  186. package/dist/primitives/number-field.js.map +1 -0
  187. package/dist/primitives/popover.js +6 -0
  188. package/dist/primitives/popover.js.map +1 -0
  189. package/dist/primitives/preview-card.js +6 -0
  190. package/dist/primitives/preview-card.js.map +1 -0
  191. package/dist/primitives/progress.js +6 -0
  192. package/dist/primitives/progress.js.map +1 -0
  193. package/dist/primitives/radio-group.js +6 -0
  194. package/dist/primitives/radio-group.js.map +1 -0
  195. package/dist/primitives/radio.js +6 -0
  196. package/dist/primitives/radio.js.map +1 -0
  197. package/dist/primitives/scroll-area.js +6 -0
  198. package/dist/primitives/scroll-area.js.map +1 -0
  199. package/dist/primitives/select.js +6 -0
  200. package/dist/primitives/select.js.map +1 -0
  201. package/dist/primitives/separator.js +6 -0
  202. package/dist/primitives/separator.js.map +1 -0
  203. package/dist/primitives/slider.js +6 -0
  204. package/dist/primitives/slider.js.map +1 -0
  205. package/dist/primitives/switch.js +6 -0
  206. package/dist/primitives/switch.js.map +1 -0
  207. package/dist/primitives/tabs.js +6 -0
  208. package/dist/primitives/tabs.js.map +1 -0
  209. package/dist/primitives/toast.js +6 -0
  210. package/dist/primitives/toast.js.map +1 -0
  211. package/dist/primitives/toggle-group.js +6 -0
  212. package/dist/primitives/toggle-group.js.map +1 -0
  213. package/dist/primitives/toggle.js +6 -0
  214. package/dist/primitives/toggle.js.map +1 -0
  215. package/dist/primitives/toolbar.js +6 -0
  216. package/dist/primitives/toolbar.js.map +1 -0
  217. package/dist/primitives/tooltip.js +6 -0
  218. package/dist/primitives/tooltip.js.map +1 -0
  219. package/dist/primitives.js +43 -0
  220. package/dist/primitives.js.map +1 -0
  221. package/dist/radio-BVAG7hNp.js +125 -0
  222. package/dist/radio-BVAG7hNp.js.map +1 -0
  223. package/dist/registry.js +2 -0
  224. package/dist/registry.js.map +1 -0
  225. package/dist/schemas-BSdA0fz-.js +3210 -0
  226. package/dist/schemas-BSdA0fz-.js.map +1 -0
  227. package/dist/select-B5Vb3zou.js +122 -0
  228. package/dist/select-B5Vb3zou.js.map +1 -0
  229. package/dist/sensitive-input-D5HCV04N.js +258 -0
  230. package/dist/sensitive-input-D5HCV04N.js.map +1 -0
  231. package/dist/skeleton-line-CtpS1u1J.js +28 -0
  232. package/dist/skeleton-line-CtpS1u1J.js.map +1 -0
  233. package/dist/src/blocks/page-header/index.d.ts +2 -0
  234. package/dist/src/blocks/page-header/index.d.ts.map +1 -0
  235. package/dist/src/blocks/page-header/page-header.d.ts +38 -0
  236. package/dist/src/blocks/page-header/page-header.d.ts.map +1 -0
  237. package/dist/src/blocks/resource-list/index.d.ts +2 -0
  238. package/dist/src/blocks/resource-list/index.d.ts.map +1 -0
  239. package/dist/src/blocks/resource-list/resource-list.d.ts +18 -0
  240. package/dist/src/blocks/resource-list/resource-list.d.ts.map +1 -0
  241. package/dist/src/catalog/catalog.d.ts +75 -0
  242. package/dist/src/catalog/catalog.d.ts.map +1 -0
  243. package/dist/src/catalog/data.d.ts +44 -0
  244. package/dist/src/catalog/data.d.ts.map +1 -0
  245. package/dist/src/catalog/index.d.ts +39 -0
  246. package/dist/src/catalog/index.d.ts.map +1 -0
  247. package/dist/src/catalog/types.d.ts +226 -0
  248. package/dist/src/catalog/types.d.ts.map +1 -0
  249. package/dist/src/catalog/visibility.d.ts +37 -0
  250. package/dist/src/catalog/visibility.d.ts.map +1 -0
  251. package/dist/src/command-line/build-cli.d.ts +7 -0
  252. package/dist/src/command-line/build-cli.d.ts.map +1 -0
  253. package/dist/src/command-line/cli.d.ts +13 -0
  254. package/dist/src/command-line/cli.d.ts.map +1 -0
  255. package/dist/src/command-line/commands/add.d.ts +10 -0
  256. package/dist/src/command-line/commands/add.d.ts.map +1 -0
  257. package/dist/src/command-line/commands/blocks.d.ts +10 -0
  258. package/dist/src/command-line/commands/blocks.d.ts.map +1 -0
  259. package/dist/src/command-line/commands/doc.d.ts +14 -0
  260. package/dist/src/command-line/commands/doc.d.ts.map +1 -0
  261. package/dist/src/command-line/commands/init.d.ts +18 -0
  262. package/dist/src/command-line/commands/init.d.ts.map +1 -0
  263. package/dist/src/command-line/commands/ls.d.ts +10 -0
  264. package/dist/src/command-line/commands/ls.d.ts.map +1 -0
  265. package/dist/src/command-line/commands/migrate.d.ts +10 -0
  266. package/dist/src/command-line/commands/migrate.d.ts.map +1 -0
  267. package/dist/src/command-line/utils/config.d.ts +42 -0
  268. package/dist/src/command-line/utils/config.d.ts.map +1 -0
  269. package/dist/src/command-line/utils/transformer.d.ts +17 -0
  270. package/dist/src/command-line/utils/transformer.d.ts.map +1 -0
  271. package/dist/src/components/badge/badge.d.ts +46 -0
  272. package/dist/src/components/badge/badge.d.ts.map +1 -0
  273. package/dist/src/components/badge/index.d.ts +2 -0
  274. package/dist/src/components/badge/index.d.ts.map +1 -0
  275. package/dist/src/components/banner/banner.d.ts +45 -0
  276. package/dist/src/components/banner/banner.d.ts.map +1 -0
  277. package/dist/src/components/banner/index.d.ts +2 -0
  278. package/dist/src/components/banner/index.d.ts.map +1 -0
  279. package/dist/src/components/breadcrumbs/breadcrumbs.d.ts +43 -0
  280. package/dist/src/components/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  281. package/dist/src/components/breadcrumbs/index.d.ts +2 -0
  282. package/dist/src/components/breadcrumbs/index.d.ts.map +1 -0
  283. package/dist/src/components/button/button.d.ts +118 -0
  284. package/dist/src/components/button/button.d.ts.map +1 -0
  285. package/dist/src/components/button/index.d.ts +2 -0
  286. package/dist/src/components/button/index.d.ts.map +1 -0
  287. package/dist/src/components/checkbox/checkbox.d.ts +167 -0
  288. package/dist/src/components/checkbox/checkbox.d.ts.map +1 -0
  289. package/dist/src/components/checkbox/index.d.ts +2 -0
  290. package/dist/src/components/checkbox/index.d.ts.map +1 -0
  291. package/dist/src/components/clipboard-text/clipboard-text.d.ts +38 -0
  292. package/dist/src/components/clipboard-text/clipboard-text.d.ts.map +1 -0
  293. package/dist/src/components/clipboard-text/index.d.ts +2 -0
  294. package/dist/src/components/clipboard-text/index.d.ts.map +1 -0
  295. package/dist/src/components/code/code.d.ts +138 -0
  296. package/dist/src/components/code/code.d.ts.map +1 -0
  297. package/dist/src/components/code/index.d.ts +4 -0
  298. package/dist/src/components/code/index.d.ts.map +1 -0
  299. package/dist/src/components/collapsible/collapsible.d.ts +62 -0
  300. package/dist/src/components/collapsible/collapsible.d.ts.map +1 -0
  301. package/dist/src/components/collapsible/index.d.ts +2 -0
  302. package/dist/src/components/collapsible/index.d.ts.map +1 -0
  303. package/dist/src/components/combobox/combobox.d.ts +124 -0
  304. package/dist/src/components/combobox/combobox.d.ts.map +1 -0
  305. package/dist/src/components/combobox/index.d.ts +2 -0
  306. package/dist/src/components/combobox/index.d.ts.map +1 -0
  307. package/dist/src/components/command-palette/command-palette.d.ts +225 -0
  308. package/dist/src/components/command-palette/command-palette.d.ts.map +1 -0
  309. package/dist/src/components/command-palette/index.d.ts +3 -0
  310. package/dist/src/components/command-palette/index.d.ts.map +1 -0
  311. package/dist/src/components/command-palette/types.d.ts +149 -0
  312. package/dist/src/components/command-palette/types.d.ts.map +1 -0
  313. package/dist/src/components/date-range-picker/date-range-picker.d.ts +65 -0
  314. package/dist/src/components/date-range-picker/date-range-picker.d.ts.map +1 -0
  315. package/dist/src/components/date-range-picker/index.d.ts +2 -0
  316. package/dist/src/components/date-range-picker/index.d.ts.map +1 -0
  317. package/dist/src/components/dialog/dialog.d.ts +121 -0
  318. package/dist/src/components/dialog/dialog.d.ts.map +1 -0
  319. package/dist/src/components/dialog/index.d.ts +2 -0
  320. package/dist/src/components/dialog/index.d.ts.map +1 -0
  321. package/dist/src/components/dropdown/dropdown.d.ts +58 -0
  322. package/dist/src/components/dropdown/dropdown.d.ts.map +1 -0
  323. package/dist/src/components/dropdown/index.d.ts +2 -0
  324. package/dist/src/components/dropdown/index.d.ts.map +1 -0
  325. package/dist/src/components/empty/empty.d.ts +34 -0
  326. package/dist/src/components/empty/empty.d.ts.map +1 -0
  327. package/dist/src/components/empty/index.d.ts +2 -0
  328. package/dist/src/components/empty/index.d.ts.map +1 -0
  329. package/dist/src/components/field/field.d.ts +38 -0
  330. package/dist/src/components/field/field.d.ts.map +1 -0
  331. package/dist/src/components/field/index.d.ts +2 -0
  332. package/dist/src/components/field/index.d.ts.map +1 -0
  333. package/dist/src/components/grid/grid.d.ts +107 -0
  334. package/dist/src/components/grid/grid.d.ts.map +1 -0
  335. package/dist/src/components/grid/index.d.ts +2 -0
  336. package/dist/src/components/grid/index.d.ts.map +1 -0
  337. package/dist/src/components/input/index.d.ts +4 -0
  338. package/dist/src/components/input/index.d.ts.map +1 -0
  339. package/dist/src/components/input/input-area.d.ts +46 -0
  340. package/dist/src/components/input/input-area.d.ts.map +1 -0
  341. package/dist/src/components/input/input-group.d.ts +39 -0
  342. package/dist/src/components/input/input-group.d.ts.map +1 -0
  343. package/dist/src/components/input/input.d.ts +157 -0
  344. package/dist/src/components/input/input.d.ts.map +1 -0
  345. package/dist/src/components/label/index.d.ts +2 -0
  346. package/dist/src/components/label/index.d.ts.map +1 -0
  347. package/dist/src/components/label/label.d.ts +54 -0
  348. package/dist/src/components/label/label.d.ts.map +1 -0
  349. package/dist/src/components/layer-card/index.d.ts +2 -0
  350. package/dist/src/components/layer-card/index.d.ts.map +1 -0
  351. package/dist/src/components/layer-card/layer-card.d.ts +16 -0
  352. package/dist/src/components/layer-card/layer-card.d.ts.map +1 -0
  353. package/dist/src/components/link/index.d.ts +2 -0
  354. package/dist/src/components/link/index.d.ts.map +1 -0
  355. package/dist/src/components/link/link.d.ts +35 -0
  356. package/dist/src/components/link/link.d.ts.map +1 -0
  357. package/dist/src/components/loader/index.d.ts +3 -0
  358. package/dist/src/components/loader/index.d.ts.map +1 -0
  359. package/dist/src/components/loader/loader.d.ts +30 -0
  360. package/dist/src/components/loader/loader.d.ts.map +1 -0
  361. package/dist/src/components/loader/skeleton-line.d.ts +10 -0
  362. package/dist/src/components/loader/skeleton-line.d.ts.map +1 -0
  363. package/dist/src/components/menubar/index.d.ts +3 -0
  364. package/dist/src/components/menubar/index.d.ts.map +1 -0
  365. package/dist/src/components/menubar/menubar.d.ts +22 -0
  366. package/dist/src/components/menubar/menubar.d.ts.map +1 -0
  367. package/dist/src/components/menubar/use-menu-navigation.d.ts +8 -0
  368. package/dist/src/components/menubar/use-menu-navigation.d.ts.map +1 -0
  369. package/dist/src/components/meter/index.d.ts +2 -0
  370. package/dist/src/components/meter/index.d.ts.map +1 -0
  371. package/dist/src/components/meter/meter.d.ts +18 -0
  372. package/dist/src/components/meter/meter.d.ts.map +1 -0
  373. package/dist/src/components/pagination/index.d.ts +2 -0
  374. package/dist/src/components/pagination/index.d.ts.map +1 -0
  375. package/dist/src/components/pagination/pagination.d.ts +28 -0
  376. package/dist/src/components/pagination/pagination.d.ts.map +1 -0
  377. package/dist/src/components/popover/index.d.ts +3 -0
  378. package/dist/src/components/popover/index.d.ts.map +1 -0
  379. package/dist/src/components/popover/popover.d.ts +110 -0
  380. package/dist/src/components/popover/popover.d.ts.map +1 -0
  381. package/dist/src/components/radio/index.d.ts +2 -0
  382. package/dist/src/components/radio/index.d.ts.map +1 -0
  383. package/dist/src/components/radio/radio.d.ts +141 -0
  384. package/dist/src/components/radio/radio.d.ts.map +1 -0
  385. package/dist/src/components/select/index.d.ts +2 -0
  386. package/dist/src/components/select/index.d.ts.map +1 -0
  387. package/dist/src/components/select/select.d.ts +128 -0
  388. package/dist/src/components/select/select.d.ts.map +1 -0
  389. package/dist/src/components/sensitive-input/index.d.ts +2 -0
  390. package/dist/src/components/sensitive-input/index.d.ts.map +1 -0
  391. package/dist/src/components/sensitive-input/sensitive-input.d.ts +70 -0
  392. package/dist/src/components/sensitive-input/sensitive-input.d.ts.map +1 -0
  393. package/dist/src/components/surface/index.d.ts +2 -0
  394. package/dist/src/components/surface/index.d.ts.map +1 -0
  395. package/dist/src/components/surface/surface.d.ts +48 -0
  396. package/dist/src/components/surface/surface.d.ts.map +1 -0
  397. package/dist/src/components/switch/index.d.ts +2 -0
  398. package/dist/src/components/switch/index.d.ts.map +1 -0
  399. package/dist/src/components/switch/switch.d.ts +155 -0
  400. package/dist/src/components/switch/switch.d.ts.map +1 -0
  401. package/dist/src/components/table/index.d.ts +2 -0
  402. package/dist/src/components/table/index.d.ts.map +1 -0
  403. package/dist/src/components/table/table.d.ts +54 -0
  404. package/dist/src/components/table/table.d.ts.map +1 -0
  405. package/dist/src/components/tabs/index.d.ts +3 -0
  406. package/dist/src/components/tabs/index.d.ts.map +1 -0
  407. package/dist/src/components/tabs/tabs.d.ts +64 -0
  408. package/dist/src/components/tabs/tabs.d.ts.map +1 -0
  409. package/dist/src/components/text/index.d.ts +2 -0
  410. package/dist/src/components/text/index.d.ts.map +1 -0
  411. package/dist/src/components/text/text.d.ts +153 -0
  412. package/dist/src/components/text/text.d.ts.map +1 -0
  413. package/dist/src/components/toast/index.d.ts +3 -0
  414. package/dist/src/components/toast/index.d.ts.map +1 -0
  415. package/dist/src/components/toast/toast.d.ts +66 -0
  416. package/dist/src/components/toast/toast.d.ts.map +1 -0
  417. package/dist/src/components/tooltip/index.d.ts +2 -0
  418. package/dist/src/components/tooltip/index.d.ts.map +1 -0
  419. package/dist/src/components/tooltip/tooltip.d.ts +43 -0
  420. package/dist/src/components/tooltip/tooltip.d.ts.map +1 -0
  421. package/dist/src/index.d.ts +39 -0
  422. package/dist/src/index.d.ts.map +1 -0
  423. package/dist/src/primitives/accordion.d.ts +13 -0
  424. package/dist/src/primitives/accordion.d.ts.map +1 -0
  425. package/dist/src/primitives/alert-dialog.d.ts +13 -0
  426. package/dist/src/primitives/alert-dialog.d.ts.map +1 -0
  427. package/dist/src/primitives/autocomplete.d.ts +13 -0
  428. package/dist/src/primitives/autocomplete.d.ts.map +1 -0
  429. package/dist/src/primitives/avatar.d.ts +13 -0
  430. package/dist/src/primitives/avatar.d.ts.map +1 -0
  431. package/dist/src/primitives/button.d.ts +13 -0
  432. package/dist/src/primitives/button.d.ts.map +1 -0
  433. package/dist/src/primitives/checkbox-group.d.ts +13 -0
  434. package/dist/src/primitives/checkbox-group.d.ts.map +1 -0
  435. package/dist/src/primitives/checkbox.d.ts +13 -0
  436. package/dist/src/primitives/checkbox.d.ts.map +1 -0
  437. package/dist/src/primitives/collapsible.d.ts +13 -0
  438. package/dist/src/primitives/collapsible.d.ts.map +1 -0
  439. package/dist/src/primitives/combobox.d.ts +13 -0
  440. package/dist/src/primitives/combobox.d.ts.map +1 -0
  441. package/dist/src/primitives/context-menu.d.ts +13 -0
  442. package/dist/src/primitives/context-menu.d.ts.map +1 -0
  443. package/dist/src/primitives/dialog.d.ts +13 -0
  444. package/dist/src/primitives/dialog.d.ts.map +1 -0
  445. package/dist/src/primitives/direction-provider.d.ts +13 -0
  446. package/dist/src/primitives/direction-provider.d.ts.map +1 -0
  447. package/dist/src/primitives/field.d.ts +13 -0
  448. package/dist/src/primitives/field.d.ts.map +1 -0
  449. package/dist/src/primitives/fieldset.d.ts +13 -0
  450. package/dist/src/primitives/fieldset.d.ts.map +1 -0
  451. package/dist/src/primitives/form.d.ts +13 -0
  452. package/dist/src/primitives/form.d.ts.map +1 -0
  453. package/dist/src/primitives/index.d.ts +52 -0
  454. package/dist/src/primitives/index.d.ts.map +1 -0
  455. package/dist/src/primitives/input.d.ts +13 -0
  456. package/dist/src/primitives/input.d.ts.map +1 -0
  457. package/dist/src/primitives/menu.d.ts +13 -0
  458. package/dist/src/primitives/menu.d.ts.map +1 -0
  459. package/dist/src/primitives/menubar.d.ts +13 -0
  460. package/dist/src/primitives/menubar.d.ts.map +1 -0
  461. package/dist/src/primitives/meter.d.ts +13 -0
  462. package/dist/src/primitives/meter.d.ts.map +1 -0
  463. package/dist/src/primitives/navigation-menu.d.ts +13 -0
  464. package/dist/src/primitives/navigation-menu.d.ts.map +1 -0
  465. package/dist/src/primitives/number-field.d.ts +13 -0
  466. package/dist/src/primitives/number-field.d.ts.map +1 -0
  467. package/dist/src/primitives/popover.d.ts +13 -0
  468. package/dist/src/primitives/popover.d.ts.map +1 -0
  469. package/dist/src/primitives/preview-card.d.ts +13 -0
  470. package/dist/src/primitives/preview-card.d.ts.map +1 -0
  471. package/dist/src/primitives/progress.d.ts +13 -0
  472. package/dist/src/primitives/progress.d.ts.map +1 -0
  473. package/dist/src/primitives/radio-group.d.ts +13 -0
  474. package/dist/src/primitives/radio-group.d.ts.map +1 -0
  475. package/dist/src/primitives/radio.d.ts +13 -0
  476. package/dist/src/primitives/radio.d.ts.map +1 -0
  477. package/dist/src/primitives/scroll-area.d.ts +13 -0
  478. package/dist/src/primitives/scroll-area.d.ts.map +1 -0
  479. package/dist/src/primitives/select.d.ts +13 -0
  480. package/dist/src/primitives/select.d.ts.map +1 -0
  481. package/dist/src/primitives/separator.d.ts +13 -0
  482. package/dist/src/primitives/separator.d.ts.map +1 -0
  483. package/dist/src/primitives/slider.d.ts +13 -0
  484. package/dist/src/primitives/slider.d.ts.map +1 -0
  485. package/dist/src/primitives/switch.d.ts +13 -0
  486. package/dist/src/primitives/switch.d.ts.map +1 -0
  487. package/dist/src/primitives/tabs.d.ts +13 -0
  488. package/dist/src/primitives/tabs.d.ts.map +1 -0
  489. package/dist/src/primitives/toast.d.ts +13 -0
  490. package/dist/src/primitives/toast.d.ts.map +1 -0
  491. package/dist/src/primitives/toggle-group.d.ts +13 -0
  492. package/dist/src/primitives/toggle-group.d.ts.map +1 -0
  493. package/dist/src/primitives/toggle.d.ts +13 -0
  494. package/dist/src/primitives/toggle.d.ts.map +1 -0
  495. package/dist/src/primitives/toolbar.d.ts +13 -0
  496. package/dist/src/primitives/toolbar.d.ts.map +1 -0
  497. package/dist/src/primitives/tooltip.d.ts +13 -0
  498. package/dist/src/primitives/tooltip.d.ts.map +1 -0
  499. package/dist/src/registry/index.d.ts +8 -0
  500. package/dist/src/registry/index.d.ts.map +1 -0
  501. package/dist/src/registry/types.d.ts +191 -0
  502. package/dist/src/registry/types.d.ts.map +1 -0
  503. package/dist/src/utils/cn.d.ts +4 -0
  504. package/dist/src/utils/cn.d.ts.map +1 -0
  505. package/dist/src/utils/index.d.ts +3 -0
  506. package/dist/src/utils/index.d.ts.map +1 -0
  507. package/dist/src/utils/link-provider.d.ts +12 -0
  508. package/dist/src/utils/link-provider.d.ts.map +1 -0
  509. package/dist/src/utils/prop-examples.d.ts +36 -0
  510. package/dist/src/utils/prop-examples.d.ts.map +1 -0
  511. package/dist/styles/kumo-binding.css +190 -0
  512. package/dist/styles/kumo-standalone.css +2 -0
  513. package/dist/styles/kumo.css +55 -0
  514. package/dist/styles/theme-fedramp.css +20 -0
  515. package/dist/styles/theme-kumo.css +186 -0
  516. package/dist/surface-BIC6CXiz.js +21 -0
  517. package/dist/surface-BIC6CXiz.js.map +1 -0
  518. package/dist/switch-D4duMhJ0.js +257 -0
  519. package/dist/switch-D4duMhJ0.js.map +1 -0
  520. package/dist/table-KuvHGpL8.js +153 -0
  521. package/dist/table-KuvHGpL8.js.map +1 -0
  522. package/dist/tabs-lQup-IbT.js +85 -0
  523. package/dist/tabs-lQup-IbT.js.map +1 -0
  524. package/dist/text-BEhqwMfe.js +97 -0
  525. package/dist/text-BEhqwMfe.js.map +1 -0
  526. package/dist/toast-8YyyQuqZ.js +69 -0
  527. package/dist/toast-8YyyQuqZ.js.map +1 -0
  528. package/dist/tooltip-DJWsDTWJ.js +85 -0
  529. package/dist/tooltip-DJWsDTWJ.js.map +1 -0
  530. package/dist/utils.js +10 -0
  531. package/dist/utils.js.map +1 -0
  532. package/dist/vendor-base-ui-DWIDNgE1.js +20446 -0
  533. package/dist/vendor-base-ui-DWIDNgE1.js.map +1 -0
  534. package/dist/vendor-floating-ui-BgbEw62H.js +1286 -0
  535. package/dist/vendor-floating-ui-BgbEw62H.js.map +1 -0
  536. package/dist/vendor-styling-BQbxAbdS.js +2775 -0
  537. package/dist/vendor-styling-BQbxAbdS.js.map +1 -0
  538. package/dist/vendor-utils-DD8jNJwD.js +741 -0
  539. package/dist/vendor-utils-DD8jNJwD.js.map +1 -0
  540. package/package.json +444 -0
  541. package/scripts/component-registry/cache.ts +123 -0
  542. package/scripts/component-registry/discovery.ts +469 -0
  543. package/scripts/component-registry/example-cleanup.ts +168 -0
  544. package/scripts/component-registry/index.test.ts +680 -0
  545. package/scripts/component-registry/index.ts +874 -0
  546. package/scripts/component-registry/markdown-generator.ts +222 -0
  547. package/scripts/component-registry/metadata.ts +643 -0
  548. package/scripts/component-registry/props-filter.ts +310 -0
  549. package/scripts/component-registry/schema-generator.ts +326 -0
  550. package/scripts/component-registry/sub-components.ts +349 -0
  551. package/scripts/component-registry/types.ts +156 -0
  552. package/scripts/component-registry/utils.ts +280 -0
  553. package/scripts/component-registry/variant-parser.ts +261 -0
  554. package/scripts/css-build.ts +55 -0
  555. package/scripts/generate-primitives.ts +178 -0
  556. package/scripts/theme-generator/config.ts +392 -0
  557. package/scripts/theme-generator/generate-css.ts +250 -0
  558. package/scripts/theme-generator/index.ts +159 -0
  559. package/scripts/theme-generator/migrate.ts +560 -0
  560. package/scripts/theme-generator/types.ts +86 -0
@@ -0,0 +1,220 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/command-line/commands/add.ts
4
+ import { existsSync as existsSync2, mkdirSync, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "node:fs";
5
+ import { dirname, join as join2, resolve, relative, isAbsolute } from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+
8
+ // src/command-line/utils/config.ts
9
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
10
+ import { join } from "node:path";
11
+ var DEFAULT_CONFIG = {
12
+ blocksDir: "src/components/kumo",
13
+ version: "1.0.0"
14
+ };
15
+ function readConfig(projectRoot = process.cwd()) {
16
+ const configPath = join(projectRoot, "kumo.json");
17
+ if (!existsSync(configPath)) {
18
+ return null;
19
+ }
20
+ try {
21
+ const content = readFileSync(configPath, "utf-8");
22
+ const config = JSON.parse(content);
23
+ return {
24
+ ...DEFAULT_CONFIG,
25
+ ...config
26
+ };
27
+ } catch (error) {
28
+ throw new Error(
29
+ `Failed to parse kumo.json: ${error instanceof Error ? error.message : String(error)}`,
30
+ { cause: error }
31
+ );
32
+ }
33
+ }
34
+
35
+ // src/command-line/utils/transformer.ts
36
+ function transformImports(content) {
37
+ const importRegex = /import\s+(?:type\s+)?{([^}]+)}\s+from\s+["']([^"']+)["'];?/g;
38
+ return content.replace(importRegex, (match, imports, path) => {
39
+ if (!path.startsWith("../")) {
40
+ return match;
41
+ }
42
+ const isComponentOrUtil = path.includes("/components/") || path.includes("/utils/");
43
+ if (!isComponentOrUtil) {
44
+ return match;
45
+ }
46
+ const isTypeOnlyImport = match.trim().startsWith("import type ");
47
+ const importItems = imports.split(",").map((item) => item.trim()).filter((item) => item.length > 0);
48
+ const typeImports = [];
49
+ const valueImports = [];
50
+ for (const item of importItems) {
51
+ if (item.startsWith("type ")) {
52
+ typeImports.push(item.slice(5).trim());
53
+ } else {
54
+ valueImports.push(item);
55
+ }
56
+ }
57
+ if (isTypeOnlyImport) {
58
+ return `import type { ${importItems.join(", ")} } from "@cloudflare/kumo";`;
59
+ } else if (typeImports.length > 0 && valueImports.length > 0) {
60
+ const valueImport = `import { ${valueImports.join(", ")} } from "@cloudflare/kumo";`;
61
+ const typeImport = `import type { ${typeImports.join(", ")} } from "@cloudflare/kumo";`;
62
+ return `${valueImport}
63
+ ${typeImport}`;
64
+ } else if (typeImports.length > 0) {
65
+ return `import type { ${typeImports.join(", ")} } from "@cloudflare/kumo";`;
66
+ } else {
67
+ return `import { ${valueImports.join(", ")} } from "@cloudflare/kumo";`;
68
+ }
69
+ });
70
+ }
71
+
72
+ // src/command-line/commands/add.ts
73
+ import { createInterface } from "node:readline/promises";
74
+ function getRegistryPath() {
75
+ const __dirname = dirname(fileURLToPath(import.meta.url));
76
+ const possiblePaths = [
77
+ join2(__dirname, "..", "..", "ai", "component-registry.json"),
78
+ join2(__dirname, "..", "ai", "component-registry.json"),
79
+ join2(__dirname, "ai", "component-registry.json")
80
+ ];
81
+ for (const path of possiblePaths) {
82
+ if (existsSync2(path)) {
83
+ return path;
84
+ }
85
+ }
86
+ throw new Error(
87
+ "component-registry.json not found. Please regenerate with: pnpm codegen:registry"
88
+ );
89
+ }
90
+ function getBlocksSourcePath() {
91
+ const __dirname = dirname(fileURLToPath(import.meta.url));
92
+ const possiblePaths = [
93
+ join2(__dirname, "..", "..", "src", "blocks"),
94
+ join2(__dirname, "..", "src", "blocks"),
95
+ join2(__dirname, "src", "blocks")
96
+ ];
97
+ for (const path of possiblePaths) {
98
+ if (existsSync2(path)) {
99
+ return path;
100
+ }
101
+ }
102
+ throw new Error(
103
+ "Blocks source directory not found. The package may be corrupted."
104
+ );
105
+ }
106
+ function loadRegistry() {
107
+ const registryPath = getRegistryPath();
108
+ const content = readFileSync2(registryPath, "utf-8");
109
+ return JSON.parse(content);
110
+ }
111
+ async function confirm(message) {
112
+ const rl = createInterface({
113
+ input: process.stdin,
114
+ output: process.stdout
115
+ });
116
+ const answer = await rl.question(`${message} (y/n): `);
117
+ rl.close();
118
+ return answer.toLowerCase() === "y" || answer.toLowerCase() === "yes";
119
+ }
120
+ async function add(blockName) {
121
+ if (!blockName) {
122
+ console.error("Error: Block name is required.");
123
+ console.log("\nUsage: kumo add <block-name>");
124
+ console.log("\nRun 'kumo blocks' to see available blocks.");
125
+ process.exit(1);
126
+ }
127
+ const config = readConfig();
128
+ if (!config) {
129
+ console.error(
130
+ "Error: kumo.json not found. Run 'kumo init' first to initialize the configuration."
131
+ );
132
+ process.exit(1);
133
+ }
134
+ let registry;
135
+ try {
136
+ registry = loadRegistry();
137
+ } catch (error) {
138
+ const message = error instanceof Error ? error.message : "Component registry not found. Run `pnpm codegen:registry` first.";
139
+ console.error(`Error: ${message}`);
140
+ process.exit(1);
141
+ }
142
+ const block = registry.blocks?.[blockName];
143
+ if (!block) {
144
+ console.error(`Error: Block '${blockName}' not found.`);
145
+ console.log("\nRun 'kumo blocks' to see available blocks.");
146
+ process.exit(1);
147
+ }
148
+ let blocksSourcePath;
149
+ try {
150
+ blocksSourcePath = getBlocksSourcePath();
151
+ } catch (error) {
152
+ const message = error instanceof Error ? error.message : "Blocks source directory not found.";
153
+ console.error(`Error: ${message}`);
154
+ process.exit(1);
155
+ }
156
+ const projectRoot = process.cwd();
157
+ const targetDir = join2(projectRoot, config.blocksDir);
158
+ if (!existsSync2(targetDir)) {
159
+ mkdirSync(targetDir, { recursive: true });
160
+ console.log(`\u{1F4C1} Created directory: ${config.blocksDir}`);
161
+ }
162
+ const blockExists = block.files.some((file) => {
163
+ const targetPath = join2(targetDir, file);
164
+ return existsSync2(targetPath);
165
+ });
166
+ if (blockExists) {
167
+ console.log(
168
+ `\u26A0\uFE0F Block '${blockName}' already exists in ${config.blocksDir}`
169
+ );
170
+ const shouldOverwrite = await confirm("Do you want to overwrite it?");
171
+ if (!shouldOverwrite) {
172
+ console.log("Installation cancelled.");
173
+ return;
174
+ }
175
+ }
176
+ console.log(`\u{1F4E6} Installing block: ${blockName}`);
177
+ for (const file of block.files) {
178
+ const sourcePath = resolve(blocksSourcePath, file);
179
+ const targetPath = resolve(targetDir, file);
180
+ const relativeSource = relative(blocksSourcePath, sourcePath);
181
+ if (relativeSource.startsWith("..") || relativeSource.startsWith("/") || isAbsolute(relativeSource)) {
182
+ console.error(`Error: Invalid source path for file: ${file}`);
183
+ process.exit(1);
184
+ }
185
+ const relativeTarget = relative(targetDir, targetPath);
186
+ if (relativeTarget.startsWith("..") || relativeTarget.startsWith("/") || isAbsolute(relativeTarget)) {
187
+ console.error(`Error: Invalid target path for file: ${file}`);
188
+ process.exit(1);
189
+ }
190
+ const targetSubdir = dirname(targetPath);
191
+ if (!existsSync2(targetSubdir)) {
192
+ mkdirSync(targetSubdir, { recursive: true });
193
+ }
194
+ const content = readFileSync2(sourcePath, "utf-8");
195
+ const transformed = transformImports(content);
196
+ writeFileSync2(targetPath, transformed, "utf-8");
197
+ console.log(` \u2705 ${file}`);
198
+ }
199
+ if (block.dependencies.length > 0) {
200
+ console.log(`
201
+ \u{1F4DA} This block depends on the following Kumo components:
202
+ `);
203
+ for (const dep of block.dependencies) {
204
+ console.log(` - ${dep} (from @cloudflare/kumo)`);
205
+ }
206
+ console.log("\nMake sure @cloudflare/kumo is installed in your project:");
207
+ console.log(" pnpm add @cloudflare/kumo");
208
+ }
209
+ console.log(`
210
+ \u{1F389} Successfully installed ${blockName}!`);
211
+ console.log(`
212
+ You can now import it in your project:
213
+ `);
214
+ const blockFile = block.files[0].replace(/\.tsx?$/, "");
215
+ const importPath = join2(config.blocksDir, blockFile).replace(/\\/g, "/");
216
+ console.log(` import { ${blockName} } from "${importPath}";`);
217
+ }
218
+ export {
219
+ add
220
+ };
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/command-line/commands/blocks.ts
4
+ import { readFileSync } from "node:fs";
5
+ import { dirname, join } from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ function getRegistryPath() {
8
+ const __dirname = dirname(fileURLToPath(import.meta.url));
9
+ return join(__dirname, "..", "..", "ai", "component-registry.json");
10
+ }
11
+ function loadRegistry() {
12
+ const registryPath = getRegistryPath();
13
+ const content = readFileSync(registryPath, "utf-8");
14
+ return JSON.parse(content);
15
+ }
16
+ function blocks() {
17
+ try {
18
+ const registry = loadRegistry();
19
+ if (!registry.blocks || Object.keys(registry.blocks).length === 0) {
20
+ console.log("No blocks available.");
21
+ return;
22
+ }
23
+ const blockList = Object.values(registry.blocks);
24
+ const byCategory = /* @__PURE__ */ new Map();
25
+ for (const block of blockList) {
26
+ const category = block.category || "Other";
27
+ if (!byCategory.has(category)) {
28
+ byCategory.set(category, []);
29
+ }
30
+ byCategory.get(category).push(block);
31
+ }
32
+ const sortedCategories = [...byCategory.keys()].toSorted();
33
+ console.log(`Kumo Blocks (${blockList.length} total)
34
+ `);
35
+ for (const category of sortedCategories) {
36
+ const categoryBlocks = [...byCategory.get(category)].toSorted(
37
+ (a, b) => a.name.localeCompare(b.name)
38
+ );
39
+ console.log(`${category}:`);
40
+ for (const block of categoryBlocks) {
41
+ console.log(` ${block.name} - ${block.description}`);
42
+ }
43
+ console.log();
44
+ }
45
+ console.log("To install a block, run:");
46
+ console.log(" kumo add <block-name>\n");
47
+ console.log("Example:");
48
+ console.log(" kumo add PageHeader");
49
+ } catch (error) {
50
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
51
+ console.error(
52
+ "Error: Component registry not found. Run `pnpm codegen:registry` first."
53
+ );
54
+ process.exit(1);
55
+ }
56
+ throw error;
57
+ }
58
+ }
59
+ export {
60
+ blocks
61
+ };
@@ -0,0 +1,167 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/command-line/commands/doc.ts
4
+ import { readFileSync } from "node:fs";
5
+ import { dirname, join } from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ function getRegistryPath() {
8
+ const __dirname = dirname(fileURLToPath(import.meta.url));
9
+ return join(__dirname, "..", "..", "catalog", "component-registry.json");
10
+ }
11
+ function loadRegistry() {
12
+ const registryPath = getRegistryPath();
13
+ const content = readFileSync(registryPath, "utf-8");
14
+ return JSON.parse(content);
15
+ }
16
+ function findComponent(registry, name) {
17
+ const lowerName = name.toLowerCase();
18
+ for (const [key, component] of Object.entries(registry.components)) {
19
+ if (key.toLowerCase() === lowerName) {
20
+ return component;
21
+ }
22
+ }
23
+ return null;
24
+ }
25
+ function findSimilar(registry, name) {
26
+ const lowerName = name.toLowerCase();
27
+ const componentNames = Object.keys(registry.components);
28
+ return componentNames.filter(
29
+ (n) => n.toLowerCase().includes(lowerName) || lowerName.includes(n.toLowerCase())
30
+ ).slice(0, 5);
31
+ }
32
+ function formatProp(name, prop) {
33
+ const parts = [];
34
+ let typeStr = prop.type;
35
+ if (prop.values && prop.values.length > 0) {
36
+ typeStr = prop.values.map((v) => `"${v}"`).join(" | ");
37
+ }
38
+ const required = prop.required === true || prop.optional === false;
39
+ const requiredStr = required ? "(required)" : "";
40
+ const defaultStr = prop.default ? `[default: ${prop.default}]` : "";
41
+ parts.push(` ${name}: ${typeStr} ${requiredStr} ${defaultStr}`.trim());
42
+ if (prop.description) {
43
+ parts.push(` ${prop.description}`);
44
+ }
45
+ if (prop.descriptions && Object.keys(prop.descriptions).length > 0) {
46
+ for (const [value, desc] of Object.entries(prop.descriptions)) {
47
+ parts.push(` - "${value}": ${desc}`);
48
+ }
49
+ }
50
+ return parts.join("\n");
51
+ }
52
+ function formatComponentDoc(component) {
53
+ const lines = [];
54
+ lines.push(`# ${component.name}
55
+ `);
56
+ lines.push(`${component.description}
57
+ `);
58
+ lines.push(
59
+ `**Import:** \`import { ${component.name} } from "${component.importPath}";\`
60
+ `
61
+ );
62
+ lines.push(`**Category:** ${component.category}
63
+ `);
64
+ const propEntries = Object.entries(component.props);
65
+ if (propEntries.length > 0) {
66
+ lines.push("## Props\n");
67
+ for (const [propName, propInfo] of propEntries) {
68
+ lines.push(formatProp(propName, propInfo));
69
+ lines.push("");
70
+ }
71
+ }
72
+ if (component.subComponents) {
73
+ lines.push("## Sub-Components\n");
74
+ for (const [subName, subInfo] of Object.entries(component.subComponents)) {
75
+ lines.push(`### ${component.name}.${subName}`);
76
+ if (subInfo.description) {
77
+ lines.push(subInfo.description);
78
+ }
79
+ if (subInfo.renderElement) {
80
+ lines.push(`Renders: ${subInfo.renderElement}`);
81
+ }
82
+ if (subInfo.props) {
83
+ lines.push("Props:");
84
+ for (const [propName, propInfo] of Object.entries(subInfo.props)) {
85
+ const required = propInfo.required ? "(required)" : "";
86
+ lines.push(` - ${propName}: ${propInfo.type} ${required}`);
87
+ }
88
+ }
89
+ lines.push("");
90
+ }
91
+ }
92
+ if (component.examples && component.examples.length > 0) {
93
+ lines.push("## Examples\n");
94
+ for (const example of component.examples.slice(0, 3)) {
95
+ lines.push("```tsx");
96
+ lines.push(example);
97
+ lines.push("```\n");
98
+ }
99
+ if (component.examples.length > 3) {
100
+ lines.push(
101
+ `(${component.examples.length - 3} more examples available in Storybook)`
102
+ );
103
+ }
104
+ }
105
+ if (component.colors && component.colors.length > 0) {
106
+ lines.push("\n## Semantic Tokens Used\n");
107
+ lines.push(component.colors.join(", "));
108
+ }
109
+ return lines.join("\n");
110
+ }
111
+ function docs() {
112
+ try {
113
+ const registry = loadRegistry();
114
+ const components = Object.values(registry.components);
115
+ console.log(`# Kumo Component Documentation
116
+ `);
117
+ console.log(`${components.length} components available
118
+ `);
119
+ console.log("---\n");
120
+ for (const component of components) {
121
+ console.log(formatComponentDoc(component));
122
+ console.log("\n---\n");
123
+ }
124
+ } catch (error) {
125
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
126
+ console.error(
127
+ "Error: Component registry not found. Run `pnpm build:ai-metadata` first."
128
+ );
129
+ process.exit(1);
130
+ }
131
+ throw error;
132
+ }
133
+ }
134
+ function doc(componentName) {
135
+ if (!componentName) {
136
+ docs();
137
+ return;
138
+ }
139
+ try {
140
+ const registry = loadRegistry();
141
+ const component = findComponent(registry, componentName);
142
+ if (!component) {
143
+ const similar = findSimilar(registry, componentName);
144
+ console.error(`Component "${componentName}" not found.`);
145
+ if (similar.length > 0) {
146
+ console.error(`
147
+ Did you mean: ${similar.join(", ")}?`);
148
+ }
149
+ console.error(`
150
+ Run "kumo ls" to see all available components.`);
151
+ process.exit(1);
152
+ }
153
+ console.log(formatComponentDoc(component));
154
+ } catch (error) {
155
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
156
+ console.error(
157
+ "Error: Component registry not found. Run `pnpm build:ai-metadata` first."
158
+ );
159
+ process.exit(1);
160
+ }
161
+ throw error;
162
+ }
163
+ }
164
+ export {
165
+ doc,
166
+ docs
167
+ };
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/command-line/commands/init.ts
4
+ import { createInterface } from "node:readline/promises";
5
+
6
+ // src/command-line/utils/config.ts
7
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
8
+ import { join } from "node:path";
9
+ var DEFAULT_CONFIG = {
10
+ blocksDir: "src/components/kumo",
11
+ version: "1.0.0"
12
+ };
13
+ function writeConfig(config, projectRoot = process.cwd()) {
14
+ const configPath = join(projectRoot, "kumo.json");
15
+ const fullConfig = {
16
+ ...DEFAULT_CONFIG,
17
+ ...config
18
+ };
19
+ try {
20
+ const content = JSON.stringify(fullConfig, null, 2) + "\n";
21
+ writeFileSync(configPath, content, "utf-8");
22
+ } catch (error) {
23
+ throw new Error(
24
+ `Failed to write kumo.json: ${error instanceof Error ? error.message : String(error)}`,
25
+ { cause: error }
26
+ );
27
+ }
28
+ }
29
+ function configExists(projectRoot = process.cwd()) {
30
+ const configPath = join(projectRoot, "kumo.json");
31
+ return existsSync(configPath);
32
+ }
33
+
34
+ // src/command-line/commands/init.ts
35
+ async function prompt(question, defaultValue) {
36
+ const rl = createInterface({
37
+ input: process.stdin,
38
+ output: process.stdout
39
+ });
40
+ try {
41
+ const suffix = defaultValue ? ` (${defaultValue})` : "";
42
+ const answer = await rl.question(`${question}${suffix}: `);
43
+ return answer.trim() || defaultValue || "";
44
+ } finally {
45
+ rl.close();
46
+ }
47
+ }
48
+ async function confirm(question) {
49
+ const rl = createInterface({
50
+ input: process.stdin,
51
+ output: process.stdout
52
+ });
53
+ try {
54
+ const answer = await rl.question(`${question} (y/n): `);
55
+ return answer.trim().toLowerCase() === "y";
56
+ } finally {
57
+ rl.close();
58
+ }
59
+ }
60
+ async function init() {
61
+ try {
62
+ const projectRoot = process.cwd();
63
+ if (configExists(projectRoot)) {
64
+ console.log("\u26A0\uFE0F kumo.json already exists in this directory.");
65
+ const shouldOverwrite = await confirm("Do you want to overwrite it?");
66
+ if (!shouldOverwrite) {
67
+ console.log("Initialization cancelled.");
68
+ process.exit(0);
69
+ }
70
+ }
71
+ console.log("\n\u{1F680} Initializing Kumo configuration...\n");
72
+ const blocksDir = await prompt(
73
+ "Where should blocks be installed?",
74
+ DEFAULT_CONFIG.blocksDir
75
+ );
76
+ const config = {
77
+ blocksDir: blocksDir || DEFAULT_CONFIG.blocksDir,
78
+ version: DEFAULT_CONFIG.version
79
+ };
80
+ writeConfig(config, projectRoot);
81
+ console.log("\n\u2705 Created kumo.json with the following configuration:");
82
+ console.log(` \u{1F4C1} Blocks directory: ${config.blocksDir}`);
83
+ console.log("\nNext steps:");
84
+ console.log(" \u2022 Run `kumo blocks` to see available blocks");
85
+ console.log(" \u2022 Run `kumo add <block>` to install a block");
86
+ } catch (error) {
87
+ console.error("Error initializing configuration:", error);
88
+ process.exit(1);
89
+ }
90
+ }
91
+ export {
92
+ confirm,
93
+ init,
94
+ prompt
95
+ };
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/command-line/commands/ls.ts
4
+ import { readFileSync } from "node:fs";
5
+ import { dirname, join } from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ function getRegistryPath() {
8
+ const __dirname = dirname(fileURLToPath(import.meta.url));
9
+ return join(__dirname, "..", "..", "catalog", "component-registry.json");
10
+ }
11
+ function loadRegistry() {
12
+ const registryPath = getRegistryPath();
13
+ const content = readFileSync(registryPath, "utf-8");
14
+ return JSON.parse(content);
15
+ }
16
+ function ls() {
17
+ try {
18
+ const registry = loadRegistry();
19
+ const components = Object.values(registry.components);
20
+ const byCategory = /* @__PURE__ */ new Map();
21
+ for (const component of components) {
22
+ const category = component.category || "Other";
23
+ if (!byCategory.has(category)) {
24
+ byCategory.set(category, []);
25
+ }
26
+ byCategory.get(category).push(component);
27
+ }
28
+ const sortedCategories = [...byCategory.keys()].toSorted();
29
+ console.log(`Kumo Components (${components.length} total)
30
+ `);
31
+ for (const category of sortedCategories) {
32
+ const categoryComponents = [...byCategory.get(category)].toSorted(
33
+ (a, b) => a.name.localeCompare(b.name)
34
+ );
35
+ console.log(`${category}:`);
36
+ for (const component of categoryComponents) {
37
+ console.log(` ${component.name} - ${component.description}`);
38
+ }
39
+ console.log();
40
+ }
41
+ } catch (error) {
42
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
43
+ console.error(
44
+ "Error: Component registry not found. Run `pnpm build:ai-metadata` first."
45
+ );
46
+ process.exit(1);
47
+ }
48
+ throw error;
49
+ }
50
+ }
51
+ export {
52
+ ls
53
+ };