@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,560 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Kumo Token Migration Tool
4
+ *
5
+ * Complete migration workflow:
6
+ * 1. Renames Tailwind classes in source files (bg-surface -> bg-kumo-base)
7
+ * 2. Updates config.ts: newName becomes key, newName field becomes ""
8
+ * 3. Regenerates theme CSS with new names
9
+ *
10
+ * Usage:
11
+ * pnpm migrate:tokens # Migrate kumo codebase
12
+ * pnpm migrate:tokens --dry-run # Preview changes without writing
13
+ * pnpm migrate:tokens --path /app # Migrate external project (classes only)
14
+ */
15
+
16
+ import * as fs from "node:fs";
17
+ import * as path from "node:path";
18
+ import { fileURLToPath } from "node:url";
19
+ import { glob } from "glob";
20
+ import { getTokenRenameMap } from "./generate-css.js";
21
+ import { THEME_CONFIG } from "./config.js";
22
+ import type { TokenRenameMap } from "./types.js";
23
+
24
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
25
+ const MONOREPO_ROOT = path.resolve(__dirname, "../../../..");
26
+ const CONFIG_PATH = path.resolve(__dirname, "config.ts");
27
+
28
+ interface MigrationOptions {
29
+ rootPath: string;
30
+ include: string[];
31
+ exclude: string[];
32
+ dryRun: boolean;
33
+ verbose: boolean;
34
+ /** If true, also update config.ts after migration */
35
+ updateConfig: boolean;
36
+ }
37
+
38
+ interface FileChange {
39
+ file: string;
40
+ changes: Array<{
41
+ line: number;
42
+ before: string;
43
+ after: string;
44
+ }>;
45
+ }
46
+
47
+ // Tailwind utility prefixes
48
+ const COLOR_PREFIXES = [
49
+ "bg",
50
+ "border",
51
+ "border-t",
52
+ "border-r",
53
+ "border-b",
54
+ "border-l",
55
+ "border-x",
56
+ "border-y",
57
+ "ring",
58
+ "ring-offset",
59
+ "outline",
60
+ "divide",
61
+ "shadow",
62
+ "accent",
63
+ "caret",
64
+ "fill",
65
+ "stroke",
66
+ "decoration",
67
+ "from",
68
+ "via",
69
+ "to",
70
+ ];
71
+ const TEXT_PREFIXES = ["text"];
72
+
73
+ /**
74
+ * Build regex patterns for class replacement
75
+ */
76
+ function buildPatterns(renameMap: TokenRenameMap): Array<{
77
+ pattern: RegExp;
78
+ replacement: string;
79
+ }> {
80
+ const patterns: Array<{ pattern: RegExp; replacement: string }> = [];
81
+
82
+ // Variant prefix: hover:, focus:, sm:, group-hover:, etc.
83
+ const variants = "(?:(?:[a-z0-9-]+:)*)?";
84
+ // Opacity: /50, /[0.5]
85
+ const opacity = "(?:\\/(?:\\d+|\\[[\\.\\d]+\\]))?";
86
+
87
+ for (const [oldName, newName] of Object.entries(renameMap.text)) {
88
+ if (!newName) continue; // Skip if no migration planned
89
+ for (const prefix of TEXT_PREFIXES) {
90
+ patterns.push({
91
+ pattern: new RegExp(
92
+ `(${variants})(${prefix}-${escapeRegex(oldName)})(${opacity})(?=\\s|"|'|\`|$|\\))`,
93
+ "g",
94
+ ),
95
+ replacement: `$1${prefix}-${newName}$3`,
96
+ });
97
+ }
98
+ }
99
+
100
+ for (const [oldName, newName] of Object.entries(renameMap.color)) {
101
+ if (!newName) continue;
102
+ for (const prefix of COLOR_PREFIXES) {
103
+ patterns.push({
104
+ pattern: new RegExp(
105
+ `(${variants})(${prefix}-${escapeRegex(oldName)})(${opacity})(?=\\s|"|'|\`|$|\\))`,
106
+ "g",
107
+ ),
108
+ replacement: `$1${prefix}-${newName}$3`,
109
+ });
110
+ }
111
+ }
112
+
113
+ return patterns;
114
+ }
115
+
116
+ function escapeRegex(str: string): string {
117
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
118
+ }
119
+
120
+ /**
121
+ * Migrate a single file's content
122
+ */
123
+ function migrateContent(
124
+ content: string,
125
+ patterns: Array<{ pattern: RegExp; replacement: string }>,
126
+ ): {
127
+ content: string;
128
+ changes: Array<{ line: number; before: string; after: string }>;
129
+ } {
130
+ const lines = content.split("\n");
131
+ const changes: Array<{ line: number; before: string; after: string }> = [];
132
+
133
+ const updatedLines = lines.map((line, idx) => {
134
+ let updated = line;
135
+ for (const { pattern, replacement } of patterns) {
136
+ pattern.lastIndex = 0;
137
+ updated = updated.replace(pattern, replacement);
138
+ }
139
+ if (updated !== line) {
140
+ changes.push({
141
+ line: idx + 1,
142
+ before: line.trim(),
143
+ after: updated.trim(),
144
+ });
145
+ }
146
+ return updated;
147
+ });
148
+
149
+ return { content: updatedLines.join("\n"), changes };
150
+ }
151
+
152
+ /**
153
+ * Simpler approach: rewrite config from scratch based on the data structure
154
+ */
155
+ function rewriteConfig(renameMap: TokenRenameMap): string {
156
+ // Read the current config to preserve theme values
157
+ const currentConfig = THEME_CONFIG;
158
+
159
+ const lines: string[] = [
160
+ `/**`,
161
+ ` * Kumo Theme Configuration`,
162
+ ` *`,
163
+ ` * Single source of truth for all semantic color tokens.`,
164
+ ` * This config is used to generate:`,
165
+ ` * - theme-kumo.css (base theme)`,
166
+ ` * - theme-fedramp.css (fedramp overrides)`,
167
+ ` * - Any future theme files`,
168
+ ` *`,
169
+ ` * Token naming:`,
170
+ ` * - Key = current token name used in codebase`,
171
+ ` * - newName = future name (empty string = no migration planned)`,
172
+ ` */`,
173
+ ``,
174
+ `import type { ThemeConfig } from "./types.js";`,
175
+ ``,
176
+ `export const THEME_CONFIG: ThemeConfig = {`,
177
+ ` /**`,
178
+ ` * Text color tokens`,
179
+ ` * Used with: text-{token}`,
180
+ ` * CSS variable: --text-color-{token}`,
181
+ ` */`,
182
+ ` text: {`,
183
+ ];
184
+
185
+ // Text tokens
186
+ for (const [oldName, def] of Object.entries(currentConfig.text)) {
187
+ const newName = renameMap.text[oldName];
188
+ const finalKey = newName || oldName;
189
+
190
+ lines.push(` "${finalKey}": {`);
191
+ lines.push(` newName: "",`);
192
+ lines.push(` theme: {`);
193
+
194
+ for (const [themeName, colors] of Object.entries(def.theme)) {
195
+ if (colors) {
196
+ lines.push(` ${themeName}: {`);
197
+ lines.push(` light: "${colors.light}",`);
198
+ lines.push(` dark: "${colors.dark}",`);
199
+ lines.push(` },`);
200
+ }
201
+ }
202
+
203
+ lines.push(` },`);
204
+ lines.push(` },`);
205
+ }
206
+
207
+ lines.push(` },`);
208
+ lines.push(``);
209
+ lines.push(` /**`);
210
+ lines.push(` * Color tokens`);
211
+ lines.push(` * Used with: bg-{token}, border-{token}, ring-{token}, etc.`);
212
+ lines.push(` * CSS variable: --color-{token}`);
213
+ lines.push(` */`);
214
+ lines.push(` color: {`);
215
+
216
+ // Color tokens
217
+ for (const [oldName, def] of Object.entries(currentConfig.color)) {
218
+ const newName = renameMap.color[oldName];
219
+ const finalKey = newName || oldName;
220
+
221
+ lines.push(` "${finalKey}": {`);
222
+ lines.push(` newName: "",`);
223
+ lines.push(` theme: {`);
224
+
225
+ for (const [themeName, colors] of Object.entries(def.theme)) {
226
+ if (colors) {
227
+ lines.push(` ${themeName}: {`);
228
+ lines.push(` light: "${colors.light}",`);
229
+ lines.push(` dark: "${colors.dark}",`);
230
+ lines.push(` },`);
231
+ }
232
+ }
233
+
234
+ lines.push(` },`);
235
+ lines.push(` },`);
236
+ }
237
+
238
+ lines.push(` },`);
239
+ lines.push(`};`);
240
+ lines.push(``);
241
+ lines.push(`/** List of all available themes */`);
242
+ lines.push(`export const AVAILABLE_THEMES = ["kumo", "fedramp"] as const;`);
243
+ lines.push(`export type AvailableTheme = (typeof AVAILABLE_THEMES)[number];`);
244
+ lines.push(``);
245
+
246
+ return lines.join("\n");
247
+ }
248
+
249
+ /**
250
+ * Check if there are any pending migrations
251
+ */
252
+ function hasPendingMigrations(renameMap: TokenRenameMap): boolean {
253
+ for (const newName of Object.values(renameMap.text)) {
254
+ if (newName) return true;
255
+ }
256
+ for (const newName of Object.values(renameMap.color)) {
257
+ if (newName) return true;
258
+ }
259
+ return false;
260
+ }
261
+
262
+ /**
263
+ * Run the full migration
264
+ */
265
+ async function runMigration(options: MigrationOptions): Promise<{
266
+ fileChanges: FileChange[];
267
+ configUpdated: boolean;
268
+ stats: { files: number; changes: number };
269
+ }> {
270
+ const renameMap = getTokenRenameMap(THEME_CONFIG);
271
+
272
+ if (!hasPendingMigrations(renameMap)) {
273
+ return {
274
+ fileChanges: [],
275
+ configUpdated: false,
276
+ stats: { files: 0, changes: 0 },
277
+ };
278
+ }
279
+
280
+ const patterns = buildPatterns(renameMap);
281
+
282
+ // Find files
283
+ const files = await glob(options.include, {
284
+ cwd: options.rootPath,
285
+ ignore: options.exclude,
286
+ absolute: true,
287
+ });
288
+
289
+ const fileChanges: FileChange[] = [];
290
+ let totalChanges = 0;
291
+
292
+ for (const file of files) {
293
+ try {
294
+ const content = fs.readFileSync(file, "utf-8");
295
+ const { content: updated, changes } = migrateContent(content, patterns);
296
+
297
+ if (changes.length > 0) {
298
+ fileChanges.push({ file, changes });
299
+ totalChanges += changes.length;
300
+
301
+ if (!options.dryRun) {
302
+ fs.writeFileSync(file, updated, "utf-8");
303
+ }
304
+ }
305
+ } catch {
306
+ // Skip files that can't be read (binary, permissions, etc.)
307
+ if (options.verbose) {
308
+ console.warn(` Skipped: ${file}`);
309
+ }
310
+ }
311
+ }
312
+
313
+ // Update config.ts if requested and not dry-run
314
+ let configUpdated = false;
315
+ if (options.updateConfig && !options.dryRun) {
316
+ const newConfig = rewriteConfig(renameMap);
317
+ fs.writeFileSync(CONFIG_PATH, newConfig, "utf-8");
318
+ configUpdated = true;
319
+ }
320
+
321
+ return {
322
+ fileChanges,
323
+ configUpdated,
324
+ stats: { files: fileChanges.length, changes: totalChanges },
325
+ };
326
+ }
327
+
328
+ // CLI
329
+ function parseArgs(
330
+ args: string[],
331
+ ): MigrationOptions & { help: boolean; exportMap: boolean } {
332
+ let rootPath = MONOREPO_ROOT;
333
+ let dryRun = false;
334
+ let verbose = false;
335
+ let updateConfig = true;
336
+ let help = false;
337
+ let exportMap = false;
338
+ const include: string[] = [];
339
+ const exclude: string[] = [];
340
+
341
+ for (let i = 0; i < args.length; i++) {
342
+ const arg = args[i];
343
+ if (arg === "--path" && args[i + 1]) {
344
+ rootPath = path.resolve(args[++i]);
345
+ updateConfig = false; // External projects don't update kumo's config
346
+ } else if (arg === "--dry-run") {
347
+ dryRun = true;
348
+ } else if (arg === "--verbose" || arg === "-v") {
349
+ verbose = true;
350
+ } else if (arg === "--no-config") {
351
+ updateConfig = false;
352
+ } else if (arg === "--export-map") {
353
+ exportMap = true;
354
+ } else if (arg === "--help" || arg === "-h") {
355
+ help = true;
356
+ } else if (arg === "--include" && args[i + 1]) {
357
+ include.push(args[++i]);
358
+ } else if (arg === "--exclude" && args[i + 1]) {
359
+ exclude.push(args[++i]);
360
+ }
361
+ }
362
+
363
+ const defaultInclude = [
364
+ "**/*.ts",
365
+ "**/*.tsx",
366
+ "**/*.js",
367
+ "**/*.jsx",
368
+ "**/*.css",
369
+ "**/*.html",
370
+ "**/*.md",
371
+ "**/*.mdx",
372
+ "**/*.astro",
373
+ ];
374
+ const defaultExclude = [
375
+ "**/node_modules/**",
376
+ "**/dist/**",
377
+ "**/build/**",
378
+ "**/.git/**",
379
+ "**/coverage/**",
380
+ "**/.next/**",
381
+ "**/.turbo/**",
382
+ "**/theme-kumo.css",
383
+ "**/theme-fedramp.css",
384
+ "**/theme-generator/**",
385
+ "**/component-registry.json",
386
+ "**/component-registry.md",
387
+ ];
388
+
389
+ return {
390
+ rootPath,
391
+ include: include.length > 0 ? include : defaultInclude,
392
+ exclude: [...defaultExclude, ...exclude],
393
+ dryRun,
394
+ verbose,
395
+ updateConfig,
396
+ help,
397
+ exportMap,
398
+ };
399
+ }
400
+
401
+ function printHelp(): void {
402
+ console.log(`
403
+ Kumo Token Migration Tool
404
+
405
+ Migrates Tailwind classes when token names change. This tool:
406
+ 1. Updates class names in source files (bg-surface -> bg-kumo-base)
407
+ 2. Updates config.ts (newName becomes key, newName field cleared)
408
+ 3. Ready for codegen:themes to regenerate CSS
409
+
410
+ USAGE:
411
+ pnpm migrate:tokens [options]
412
+
413
+ OPTIONS:
414
+ --dry-run Preview changes without writing files
415
+ --verbose, -v Show detailed change information
416
+ --path <dir> Migrate external project (won't update config.ts)
417
+ --no-config Skip config.ts update
418
+ --export-map Output JSON rename map and exit
419
+ --help, -h Show this help
420
+
421
+ WORKFLOW:
422
+ 1. Set newName in config.ts for tokens you want to rename
423
+ 2. Run: pnpm migrate:tokens --dry-run (preview)
424
+ 3. Run: pnpm migrate:tokens (apply)
425
+ 4. Run: pnpm codegen:themes (regenerate CSS)
426
+ 5. Commit changes
427
+
428
+ EXAMPLE - Renaming "surface" to "kumo-base":
429
+
430
+ Before config.ts:
431
+ surface: { newName: "kumo-base", theme: { ... } }
432
+
433
+ After migration:
434
+ "kumo-base": { newName: "", theme: { ... } }
435
+
436
+ Class changes:
437
+ bg-surface -> bg-kumo-base
438
+ text-surface -> text-kumo-base
439
+ hover:bg-surface/50 -> hover:bg-kumo-base/50
440
+ `);
441
+ }
442
+
443
+ function printExportMap(): void {
444
+ const renameMap = getTokenRenameMap(THEME_CONFIG);
445
+ const classMap: Record<string, string> = {};
446
+
447
+ for (const [oldName, newName] of Object.entries(renameMap.text)) {
448
+ if (!newName) continue;
449
+ for (const prefix of TEXT_PREFIXES) {
450
+ classMap[`${prefix}-${oldName}`] = `${prefix}-${newName}`;
451
+ }
452
+ }
453
+
454
+ for (const [oldName, newName] of Object.entries(renameMap.color)) {
455
+ if (!newName) continue;
456
+ for (const prefix of COLOR_PREFIXES) {
457
+ classMap[`${prefix}-${oldName}`] = `${prefix}-${newName}`;
458
+ }
459
+ }
460
+
461
+ console.log(
462
+ JSON.stringify(
463
+ {
464
+ meta: {
465
+ description: "Kumo token migration map",
466
+ generatedAt: new Date().toISOString(),
467
+ },
468
+ tokens: renameMap,
469
+ classes: classMap,
470
+ },
471
+ null,
472
+ 2,
473
+ ),
474
+ );
475
+ }
476
+
477
+ async function main(): Promise<void> {
478
+ const options = parseArgs(process.argv.slice(2));
479
+
480
+ if (options.help) {
481
+ printHelp();
482
+ return;
483
+ }
484
+
485
+ if (options.exportMap) {
486
+ printExportMap();
487
+ return;
488
+ }
489
+
490
+ const renameMap = getTokenRenameMap(THEME_CONFIG);
491
+
492
+ if (!hasPendingMigrations(renameMap)) {
493
+ console.log("No pending migrations. All newName fields are empty.");
494
+ console.log("\nTo migrate tokens, set newName in config.ts:");
495
+ console.log(' surface: { newName: "kumo-base", theme: { ... } }');
496
+ return;
497
+ }
498
+
499
+ console.log("Kumo Token Migration\n");
500
+ console.log(`Root: ${options.rootPath}`);
501
+ console.log(`Dry run: ${options.dryRun}`);
502
+ console.log(`Update config: ${options.updateConfig}`);
503
+ console.log("");
504
+
505
+ // Show what will be renamed
506
+ console.log("Pending renames:");
507
+ for (const [old, newName] of Object.entries(renameMap.text)) {
508
+ if (newName) console.log(` text-${old} -> text-${newName}`);
509
+ }
510
+ for (const [old, newName] of Object.entries(renameMap.color)) {
511
+ if (newName)
512
+ console.log(` bg-${old} -> bg-${newName} (and border-, ring-, etc.)`);
513
+ }
514
+ console.log("");
515
+
516
+ const { fileChanges, configUpdated, stats } = await runMigration(options);
517
+
518
+ if (fileChanges.length === 0) {
519
+ console.log("No class usages found to migrate.");
520
+ } else {
521
+ console.log(`\n${"=".repeat(60)}`);
522
+ console.log(options.dryRun ? "PREVIEW (dry run)" : "MIGRATION COMPLETE");
523
+ console.log("=".repeat(60));
524
+
525
+ for (const { file, changes } of fileChanges) {
526
+ console.log(`\n${file}`);
527
+ if (options.verbose) {
528
+ for (const c of changes) {
529
+ console.log(` L${c.line}: ${c.before}`);
530
+ console.log(` -> ${c.after}`);
531
+ }
532
+ } else {
533
+ console.log(` ${changes.length} change(s)`);
534
+ }
535
+ }
536
+
537
+ console.log(`\n${"-".repeat(60)}`);
538
+ console.log(`Files changed: ${stats.files}`);
539
+ console.log(`Total changes: ${stats.changes}`);
540
+ if (configUpdated) {
541
+ console.log(`Config updated: ${CONFIG_PATH}`);
542
+ }
543
+ console.log("-".repeat(60));
544
+ }
545
+
546
+ if (options.dryRun) {
547
+ console.log(
548
+ "\nThis was a dry run. Run without --dry-run to apply changes.",
549
+ );
550
+ } else if (configUpdated) {
551
+ console.log("\nNext step: pnpm codegen:themes");
552
+ }
553
+ }
554
+
555
+ main().catch((err) => {
556
+ console.error("Error:", err.message);
557
+ process.exit(1);
558
+ });
559
+
560
+ export { runMigration, buildPatterns, migrateContent, rewriteConfig };
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Kumo Theme Generator Types
3
+ *
4
+ * Defines the structure for semantic color tokens and typography that can be themed.
5
+ */
6
+
7
+ /** Light and dark mode color values */
8
+ export type ColorMode = {
9
+ light: string;
10
+ dark: string;
11
+ };
12
+
13
+ /** Theme-specific color overrides (kumo is required, others are optional) */
14
+ export type ThemeColors = {
15
+ kumo: ColorMode;
16
+ fedramp?: ColorMode;
17
+ [themeName: string]: ColorMode | undefined;
18
+ };
19
+
20
+ /** Definition of a single semantic token */
21
+ export type TokenDefinition = {
22
+ /** New name for the token (for future migration) */
23
+ newName: string;
24
+ /** Theme-specific color values */
25
+ theme: ThemeColors;
26
+ /** Optional description for documentation */
27
+ description?: string;
28
+ };
29
+
30
+ /** Text color tokens (used with text-* utilities) */
31
+ export type TextTokens = {
32
+ [tokenName: string]: TokenDefinition;
33
+ };
34
+
35
+ /** Color tokens (used with bg-*, border-*, ring-*, etc.) */
36
+ export type ColorTokens = {
37
+ [tokenName: string]: TokenDefinition;
38
+ };
39
+
40
+ /** Theme-specific typography values (kumo is required, others are optional) */
41
+ export type ThemeTypography = {
42
+ kumo: string;
43
+ fedramp?: string;
44
+ [themeName: string]: string | undefined;
45
+ };
46
+
47
+ /** Definition of a single typography token (font size or line height) */
48
+ export type TypographyTokenDefinition = {
49
+ /** New name for the token (for future migration) */
50
+ newName: string;
51
+ /** Theme-specific typography values */
52
+ theme: ThemeTypography;
53
+ /** Optional description for documentation */
54
+ description?: string;
55
+ };
56
+
57
+ /** Typography tokens for text sizes and line heights */
58
+ export type TypographyTokens = {
59
+ [tokenName: string]: TypographyTokenDefinition;
60
+ };
61
+
62
+ /** Complete theme configuration */
63
+ export type ThemeConfig = {
64
+ /** Text color tokens */
65
+ text: TextTokens;
66
+ /** General color tokens (bg, border, ring, etc.) */
67
+ color: ColorTokens;
68
+ /** Typography tokens (font sizes and line heights) */
69
+ typography?: TypographyTokens;
70
+ };
71
+
72
+ /** Output options for CSS generation */
73
+ export type GeneratorOptions = {
74
+ /** Output directory for generated CSS files */
75
+ outputDir: string;
76
+ /** Whether to use the new token names (for migration) */
77
+ useNewNames?: boolean;
78
+ /** Themes to generate (defaults to all) */
79
+ themes?: string[];
80
+ };
81
+
82
+ /** Mapping from old token names to new names (for codemod) */
83
+ export type TokenRenameMap = {
84
+ text: Record<string, string>;
85
+ color: Record<string, string>;
86
+ };