@signalflare-ai/ui 0.5.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 (765) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +527 -0
  3. package/ai/USAGE.md +200 -0
  4. package/ai/component-registry.json +7103 -0
  5. package/ai/component-registry.md +3046 -0
  6. package/ai/schemas.ts +1230 -0
  7. package/bin/intent.js +23 -0
  8. package/bin/sf.js +34 -0
  9. package/dist/.build-complete +1 -0
  10. package/dist/ai/schemas.d.ts +7056 -0
  11. package/dist/ai/schemas.d.ts.map +1 -0
  12. package/dist/ai-actions-DG1dhDMP.js +57 -0
  13. package/dist/ai-actions-DG1dhDMP.js.map +1 -0
  14. package/dist/ai-agent-card-BbtL4NII.js +171 -0
  15. package/dist/ai-agent-card-BbtL4NII.js.map +1 -0
  16. package/dist/ai-approval-Mb7-BY6i.js +184 -0
  17. package/dist/ai-approval-Mb7-BY6i.js.map +1 -0
  18. package/dist/ai-code-block-BI_z0UVR.js +110 -0
  19. package/dist/ai-code-block-BI_z0UVR.js.map +1 -0
  20. package/dist/ai-conversation-DYtExcrw.js +184 -0
  21. package/dist/ai-conversation-DYtExcrw.js.map +1 -0
  22. package/dist/ai-info-banner-BpzauUAY.js +76 -0
  23. package/dist/ai-info-banner-BpzauUAY.js.map +1 -0
  24. package/dist/ai-loader-Cr3eQkNS.js +134 -0
  25. package/dist/ai-loader-Cr3eQkNS.js.map +1 -0
  26. package/dist/ai-message-CV8SBoHM.js +286 -0
  27. package/dist/ai-message-CV8SBoHM.js.map +1 -0
  28. package/dist/ai-mission-header-ByYkJ6YP.js +171 -0
  29. package/dist/ai-mission-header-ByYkJ6YP.js.map +1 -0
  30. package/dist/ai-prompt-input-Bo1YuJly.js +769 -0
  31. package/dist/ai-prompt-input-Bo1YuJly.js.map +1 -0
  32. package/dist/ai-question-Dp1g9k2o.js +149 -0
  33. package/dist/ai-question-Dp1g9k2o.js.map +1 -0
  34. package/dist/ai-reasoning-UAmNx_LD.js +270 -0
  35. package/dist/ai-reasoning-UAmNx_LD.js.map +1 -0
  36. package/dist/ai-response-BWoVsNQG.js +42 -0
  37. package/dist/ai-response-BWoVsNQG.js.map +1 -0
  38. package/dist/ai-shimmer-BpOmfonu.js +43 -0
  39. package/dist/ai-shimmer-BpOmfonu.js.map +1 -0
  40. package/dist/ai-status-badge-WhbKVeqn.js +63 -0
  41. package/dist/ai-status-badge-WhbKVeqn.js.map +1 -0
  42. package/dist/ai-streaming-text-ClL7FwvD.js +81 -0
  43. package/dist/ai-streaming-text-ClL7FwvD.js.map +1 -0
  44. package/dist/ai-subagent-BruGN1UE.js +133 -0
  45. package/dist/ai-subagent-BruGN1UE.js.map +1 -0
  46. package/dist/ai-suggestion-CNsCZj5P.js +55 -0
  47. package/dist/ai-suggestion-CNsCZj5P.js.map +1 -0
  48. package/dist/ai-task-list-B9CpMDYN.js +120 -0
  49. package/dist/ai-task-list-B9CpMDYN.js.map +1 -0
  50. package/dist/ai-timeline-Bb5ntsr3.js +373 -0
  51. package/dist/ai-timeline-Bb5ntsr3.js.map +1 -0
  52. package/dist/ai-tool-BGH8nQ_D.js +437 -0
  53. package/dist/ai-tool-BGH8nQ_D.js.map +1 -0
  54. package/dist/ai-usage-bar-BI-p-JBk.js +70 -0
  55. package/dist/ai-usage-bar-BI-p-JBk.js.map +1 -0
  56. package/dist/badge-D_eaA6wv.js +128 -0
  57. package/dist/badge-D_eaA6wv.js.map +1 -0
  58. package/dist/banner-B_6oBrsu.js +54 -0
  59. package/dist/banner-B_6oBrsu.js.map +1 -0
  60. package/dist/breadcrumbs-BlmeYfgq.js +128 -0
  61. package/dist/breadcrumbs-BlmeYfgq.js.map +1 -0
  62. package/dist/button-De0267YU.js +170 -0
  63. package/dist/button-De0267YU.js.map +1 -0
  64. package/dist/catalog.js +506 -0
  65. package/dist/catalog.js.map +1 -0
  66. package/dist/chart-Bes4MN3C.js +618 -0
  67. package/dist/chart-Bes4MN3C.js.map +1 -0
  68. package/dist/checkbox-CPX7lBaU.js +153 -0
  69. package/dist/checkbox-CPX7lBaU.js.map +1 -0
  70. package/dist/clipboard-text-92YeCybc.js +176 -0
  71. package/dist/clipboard-text-92YeCybc.js.map +1 -0
  72. package/dist/cn-YROP2_ox.js +25 -0
  73. package/dist/cn-YROP2_ox.js.map +1 -0
  74. package/dist/code-DE1Yy1Cu.js +97 -0
  75. package/dist/code-DE1Yy1Cu.js.map +1 -0
  76. package/dist/collapsible-DWsXeXmS.js +72 -0
  77. package/dist/collapsible-DWsXeXmS.js.map +1 -0
  78. package/dist/combobox-B0bLdsX8.js +197 -0
  79. package/dist/combobox-B0bLdsX8.js.map +1 -0
  80. package/dist/command-line/cli.js +823 -0
  81. package/dist/command-palette-CBTY8EiF.js +484 -0
  82. package/dist/command-palette-CBTY8EiF.js.map +1 -0
  83. package/dist/components/ai-actions.js +3 -0
  84. package/dist/components/ai-agent-card.js +3 -0
  85. package/dist/components/ai-approval.js +3 -0
  86. package/dist/components/ai-code-block.js +3 -0
  87. package/dist/components/ai-conversation.js +3 -0
  88. package/dist/components/ai-info-banner.js +3 -0
  89. package/dist/components/ai-loader.js +3 -0
  90. package/dist/components/ai-message.js +3 -0
  91. package/dist/components/ai-mission-header.js +3 -0
  92. package/dist/components/ai-prompt-input.js +3 -0
  93. package/dist/components/ai-question.js +3 -0
  94. package/dist/components/ai-reasoning.js +3 -0
  95. package/dist/components/ai-response.js +3 -0
  96. package/dist/components/ai-shimmer.js +3 -0
  97. package/dist/components/ai-status-badge.js +3 -0
  98. package/dist/components/ai-streaming-text.js +3 -0
  99. package/dist/components/ai-subagent.js +3 -0
  100. package/dist/components/ai-suggestion.js +3 -0
  101. package/dist/components/ai-task-list.js +3 -0
  102. package/dist/components/ai-timeline.js +3 -0
  103. package/dist/components/ai-tool.js +3 -0
  104. package/dist/components/ai-usage-bar.js +3 -0
  105. package/dist/components/badge.js +3 -0
  106. package/dist/components/banner.js +3 -0
  107. package/dist/components/breadcrumbs.js +3 -0
  108. package/dist/components/button.js +3 -0
  109. package/dist/components/chart.js +3 -0
  110. package/dist/components/checkbox.js +3 -0
  111. package/dist/components/clipboard-text.js +3 -0
  112. package/dist/components/code.js +3 -0
  113. package/dist/components/collapsible.js +3 -0
  114. package/dist/components/combobox.js +3 -0
  115. package/dist/components/command-palette.js +3 -0
  116. package/dist/components/data-grid.js +3 -0
  117. package/dist/components/date-picker.js +3 -0
  118. package/dist/components/date-range-picker.js +3 -0
  119. package/dist/components/dialog.js +3 -0
  120. package/dist/components/dropdown.js +3 -0
  121. package/dist/components/empty.js +3 -0
  122. package/dist/components/field.js +3 -0
  123. package/dist/components/filters.js +3 -0
  124. package/dist/components/flow.js +3 -0
  125. package/dist/components/grid.js +3 -0
  126. package/dist/components/input.js +4 -0
  127. package/dist/components/label.js +3 -0
  128. package/dist/components/layer-card.js +3 -0
  129. package/dist/components/link.js +92 -0
  130. package/dist/components/link.js.map +1 -0
  131. package/dist/components/loader.js +4 -0
  132. package/dist/components/menubar.js +3 -0
  133. package/dist/components/meter.js +3 -0
  134. package/dist/components/pagination.js +3 -0
  135. package/dist/components/popover.js +3 -0
  136. package/dist/components/radio.js +3 -0
  137. package/dist/components/select.js +3 -0
  138. package/dist/components/sensitive-input.js +3 -0
  139. package/dist/components/sidebar.js +3 -0
  140. package/dist/components/signalflare-ai-logo.js +3 -0
  141. package/dist/components/surface.js +3 -0
  142. package/dist/components/switch.js +3 -0
  143. package/dist/components/table.js +3 -0
  144. package/dist/components/tabs.js +3 -0
  145. package/dist/components/text.js +3 -0
  146. package/dist/components/theme-toggle.js +3 -0
  147. package/dist/components/toast.js +3 -0
  148. package/dist/components/tooltip.js +3 -0
  149. package/dist/components/use-agent-harness.js +3 -0
  150. package/dist/data-grid-UJ9ja5cu.js +305 -0
  151. package/dist/data-grid-UJ9ja5cu.js.map +1 -0
  152. package/dist/date-picker-ebekkC3R.js +57 -0
  153. package/dist/date-picker-ebekkC3R.js.map +1 -0
  154. package/dist/date-range-picker-D75LLINc.js +347 -0
  155. package/dist/date-range-picker-D75LLINc.js.map +1 -0
  156. package/dist/dialog-CyHEQXEY.js +104 -0
  157. package/dist/dialog-CyHEQXEY.js.map +1 -0
  158. package/dist/dist-BNlyONdD.js +3546 -0
  159. package/dist/dist-BNlyONdD.js.map +1 -0
  160. package/dist/dropdown-J5T4pHaR.js +202 -0
  161. package/dist/dropdown-J5T4pHaR.js.map +1 -0
  162. package/dist/empty-D2TypIId.js +90 -0
  163. package/dist/empty-D2TypIId.js.map +1 -0
  164. package/dist/favicon.svg +4 -0
  165. package/dist/field-Y_UK1_Cg.js +57 -0
  166. package/dist/field-Y_UK1_Cg.js.map +1 -0
  167. package/dist/filters-BdBogf7D.js +682 -0
  168. package/dist/filters-BdBogf7D.js.map +1 -0
  169. package/dist/flow-BRsYUCJa.js +741 -0
  170. package/dist/flow-BRsYUCJa.js.map +1 -0
  171. package/dist/genui.js +40 -0
  172. package/dist/genui.js.map +1 -0
  173. package/dist/grid-qUAN9hFx.js +119 -0
  174. package/dist/grid-qUAN9hFx.js.map +1 -0
  175. package/dist/highlight-to-react-ClEfL81q.js +57 -0
  176. package/dist/highlight-to-react-ClEfL81q.js.map +1 -0
  177. package/dist/index.js +215 -0
  178. package/dist/index.js.map +1 -0
  179. package/dist/input-BxQAnXki.js +81 -0
  180. package/dist/input-BxQAnXki.js.map +1 -0
  181. package/dist/input-Cn25I4o5.js +121 -0
  182. package/dist/input-Cn25I4o5.js.map +1 -0
  183. package/dist/label-QtJxtJ4u.js +70 -0
  184. package/dist/label-QtJxtJ4u.js.map +1 -0
  185. package/dist/layer-card-BME0eljh.js +44 -0
  186. package/dist/layer-card-BME0eljh.js.map +1 -0
  187. package/dist/link-provider-BUZKXaNE.js +25 -0
  188. package/dist/link-provider-BUZKXaNE.js.map +1 -0
  189. package/dist/loader-DAcc-Uag.js +84 -0
  190. package/dist/loader-DAcc-Uag.js.map +1 -0
  191. package/dist/logo.svg +1 -0
  192. package/dist/menubar-C8NzAjfd.js +102 -0
  193. package/dist/menubar-C8NzAjfd.js.map +1 -0
  194. package/dist/meter-CpmTenEr.js +37 -0
  195. package/dist/meter-CpmTenEr.js.map +1 -0
  196. package/dist/pagination-C_YqCy8l.js +117 -0
  197. package/dist/pagination-C_YqCy8l.js.map +1 -0
  198. package/dist/popover-BRQZ2b6z.js +147 -0
  199. package/dist/popover-BRQZ2b6z.js.map +1 -0
  200. package/dist/primitives/accordion.js +2 -0
  201. package/dist/primitives/alert-dialog.js +2 -0
  202. package/dist/primitives/autocomplete.js +2 -0
  203. package/dist/primitives/avatar.js +2 -0
  204. package/dist/primitives/button.js +2 -0
  205. package/dist/primitives/checkbox-group.js +2 -0
  206. package/dist/primitives/checkbox.js +2 -0
  207. package/dist/primitives/collapsible.js +2 -0
  208. package/dist/primitives/combobox.js +2 -0
  209. package/dist/primitives/context-menu.js +2 -0
  210. package/dist/primitives/csp-provider.js +2 -0
  211. package/dist/primitives/dialog.js +2 -0
  212. package/dist/primitives/direction-provider.js +2 -0
  213. package/dist/primitives/drawer.js +2 -0
  214. package/dist/primitives/field.js +2 -0
  215. package/dist/primitives/fieldset.js +2 -0
  216. package/dist/primitives/form.js +2 -0
  217. package/dist/primitives/input.js +2 -0
  218. package/dist/primitives/menu.js +2 -0
  219. package/dist/primitives/menubar.js +2 -0
  220. package/dist/primitives/meter.js +2 -0
  221. package/dist/primitives/navigation-menu.js +2 -0
  222. package/dist/primitives/number-field.js +2 -0
  223. package/dist/primitives/popover.js +2 -0
  224. package/dist/primitives/preview-card.js +2 -0
  225. package/dist/primitives/progress.js +2 -0
  226. package/dist/primitives/radio-group.js +2 -0
  227. package/dist/primitives/radio.js +2 -0
  228. package/dist/primitives/scroll-area.js +2 -0
  229. package/dist/primitives/select.js +2 -0
  230. package/dist/primitives/separator.js +2 -0
  231. package/dist/primitives/slider.js +2 -0
  232. package/dist/primitives/switch.js +2 -0
  233. package/dist/primitives/tabs.js +2 -0
  234. package/dist/primitives/toast.js +2 -0
  235. package/dist/primitives/toggle-group.js +2 -0
  236. package/dist/primitives/toggle.js +2 -0
  237. package/dist/primitives/toolbar.js +2 -0
  238. package/dist/primitives/tooltip.js +2 -0
  239. package/dist/primitives.js +40 -0
  240. package/dist/radio-B7zg1wUI.js +101 -0
  241. package/dist/radio-B7zg1wUI.js.map +1 -0
  242. package/dist/registry.js +1 -0
  243. package/dist/select-9p721G00.js +95 -0
  244. package/dist/select-9p721G00.js.map +1 -0
  245. package/dist/sensitive-input-D5je2NLl.js +248 -0
  246. package/dist/sensitive-input-D5je2NLl.js.map +1 -0
  247. package/dist/sidebar-DOwBrq57.js +964 -0
  248. package/dist/sidebar-DOwBrq57.js.map +1 -0
  249. package/dist/signalflare-ai-logo-DDhxMJD6.js +260 -0
  250. package/dist/signalflare-ai-logo-DDhxMJD6.js.map +1 -0
  251. package/dist/skeleton-line-Do3UmGk9.js +36 -0
  252. package/dist/skeleton-line-Do3UmGk9.js.map +1 -0
  253. package/dist/src/blocks/agent-harness/agent-harness.d.ts +177 -0
  254. package/dist/src/blocks/agent-harness/agent-harness.d.ts.map +1 -0
  255. package/dist/src/blocks/agent-harness/agent-harness.tsx +1122 -0
  256. package/dist/src/blocks/agent-harness/index.d.ts +2 -0
  257. package/dist/src/blocks/agent-harness/index.d.ts.map +1 -0
  258. package/dist/src/blocks/commander/commander.d.ts +101 -0
  259. package/dist/src/blocks/commander/commander.d.ts.map +1 -0
  260. package/dist/src/blocks/commander/commander.tsx +477 -0
  261. package/dist/src/blocks/commander/index.d.ts +2 -0
  262. package/dist/src/blocks/commander/index.d.ts.map +1 -0
  263. package/dist/src/blocks/delete-resource/delete-resource.d.ts +46 -0
  264. package/dist/src/blocks/delete-resource/delete-resource.d.ts.map +1 -0
  265. package/dist/src/blocks/delete-resource/delete-resource.tsx +214 -0
  266. package/dist/src/blocks/delete-resource/index.d.ts +2 -0
  267. package/dist/src/blocks/delete-resource/index.d.ts.map +1 -0
  268. package/dist/src/blocks/map-block/index.d.ts +2 -0
  269. package/dist/src/blocks/map-block/index.d.ts.map +1 -0
  270. package/dist/src/blocks/map-block/map-block.d.ts +79 -0
  271. package/dist/src/blocks/map-block/map-block.d.ts.map +1 -0
  272. package/dist/src/blocks/map-block/map-block.tsx +522 -0
  273. package/dist/src/blocks/page-header/index.d.ts +2 -0
  274. package/dist/src/blocks/page-header/index.d.ts.map +1 -0
  275. package/dist/src/blocks/page-header/page-header.d.ts +38 -0
  276. package/dist/src/blocks/page-header/page-header.d.ts.map +1 -0
  277. package/dist/src/blocks/page-header/page-header.tsx +96 -0
  278. package/dist/src/blocks/resource-list/index.d.ts +2 -0
  279. package/dist/src/blocks/resource-list/index.d.ts.map +1 -0
  280. package/dist/src/blocks/resource-list/resource-list.d.ts +18 -0
  281. package/dist/src/blocks/resource-list/resource-list.d.ts.map +1 -0
  282. package/dist/src/blocks/resource-list/resource-list.test.tsx +27 -0
  283. package/dist/src/blocks/resource-list/resource-list.tsx +65 -0
  284. package/dist/src/catalog/catalog.d.ts +75 -0
  285. package/dist/src/catalog/catalog.d.ts.map +1 -0
  286. package/dist/src/catalog/data.d.ts +44 -0
  287. package/dist/src/catalog/data.d.ts.map +1 -0
  288. package/dist/src/catalog/index.d.ts +35 -0
  289. package/dist/src/catalog/index.d.ts.map +1 -0
  290. package/dist/src/catalog/sf-components.d.ts +8 -0
  291. package/dist/src/catalog/sf-components.d.ts.map +1 -0
  292. package/dist/src/catalog/sf-registry.d.ts +4 -0
  293. package/dist/src/catalog/sf-registry.d.ts.map +1 -0
  294. package/dist/src/catalog/types.d.ts +226 -0
  295. package/dist/src/catalog/types.d.ts.map +1 -0
  296. package/dist/src/catalog/visibility.d.ts +37 -0
  297. package/dist/src/catalog/visibility.d.ts.map +1 -0
  298. package/dist/src/command-line/build-cli.d.ts +7 -0
  299. package/dist/src/command-line/build-cli.d.ts.map +1 -0
  300. package/dist/src/command-line/cli.d.ts +13 -0
  301. package/dist/src/command-line/cli.d.ts.map +1 -0
  302. package/dist/src/command-line/commands/add.d.ts +10 -0
  303. package/dist/src/command-line/commands/add.d.ts.map +1 -0
  304. package/dist/src/command-line/commands/ai.d.ts +10 -0
  305. package/dist/src/command-line/commands/ai.d.ts.map +1 -0
  306. package/dist/src/command-line/commands/blocks.d.ts +10 -0
  307. package/dist/src/command-line/commands/blocks.d.ts.map +1 -0
  308. package/dist/src/command-line/commands/doc.d.ts +14 -0
  309. package/dist/src/command-line/commands/doc.d.ts.map +1 -0
  310. package/dist/src/command-line/commands/init.d.ts +18 -0
  311. package/dist/src/command-line/commands/init.d.ts.map +1 -0
  312. package/dist/src/command-line/commands/ls.d.ts +10 -0
  313. package/dist/src/command-line/commands/ls.d.ts.map +1 -0
  314. package/dist/src/command-line/commands/migrate.d.ts +10 -0
  315. package/dist/src/command-line/commands/migrate.d.ts.map +1 -0
  316. package/dist/src/command-line/utils/config.d.ts +42 -0
  317. package/dist/src/command-line/utils/config.d.ts.map +1 -0
  318. package/dist/src/command-line/utils/transformer.d.ts +21 -0
  319. package/dist/src/command-line/utils/transformer.d.ts.map +1 -0
  320. package/dist/src/components/ai-actions/ai-actions.d.ts +35 -0
  321. package/dist/src/components/ai-actions/ai-actions.d.ts.map +1 -0
  322. package/dist/src/components/ai-actions/index.d.ts +2 -0
  323. package/dist/src/components/ai-actions/index.d.ts.map +1 -0
  324. package/dist/src/components/ai-agent-card/ai-agent-card.d.ts +82 -0
  325. package/dist/src/components/ai-agent-card/ai-agent-card.d.ts.map +1 -0
  326. package/dist/src/components/ai-agent-card/index.d.ts +2 -0
  327. package/dist/src/components/ai-agent-card/index.d.ts.map +1 -0
  328. package/dist/src/components/ai-approval/ai-approval.d.ts +102 -0
  329. package/dist/src/components/ai-approval/ai-approval.d.ts.map +1 -0
  330. package/dist/src/components/ai-approval/index.d.ts +2 -0
  331. package/dist/src/components/ai-approval/index.d.ts.map +1 -0
  332. package/dist/src/components/ai-code-block/ai-code-block.d.ts +48 -0
  333. package/dist/src/components/ai-code-block/ai-code-block.d.ts.map +1 -0
  334. package/dist/src/components/ai-code-block/index.d.ts +2 -0
  335. package/dist/src/components/ai-code-block/index.d.ts.map +1 -0
  336. package/dist/src/components/ai-conversation/ai-conversation.d.ts +125 -0
  337. package/dist/src/components/ai-conversation/ai-conversation.d.ts.map +1 -0
  338. package/dist/src/components/ai-conversation/index.d.ts +2 -0
  339. package/dist/src/components/ai-conversation/index.d.ts.map +1 -0
  340. package/dist/src/components/ai-info-banner/ai-info-banner.d.ts +55 -0
  341. package/dist/src/components/ai-info-banner/ai-info-banner.d.ts.map +1 -0
  342. package/dist/src/components/ai-info-banner/index.d.ts +2 -0
  343. package/dist/src/components/ai-info-banner/index.d.ts.map +1 -0
  344. package/dist/src/components/ai-loader/ai-loader.d.ts +44 -0
  345. package/dist/src/components/ai-loader/ai-loader.d.ts.map +1 -0
  346. package/dist/src/components/ai-loader/index.d.ts +2 -0
  347. package/dist/src/components/ai-loader/index.d.ts.map +1 -0
  348. package/dist/src/components/ai-message/ai-message.d.ts +97 -0
  349. package/dist/src/components/ai-message/ai-message.d.ts.map +1 -0
  350. package/dist/src/components/ai-message/index.d.ts +2 -0
  351. package/dist/src/components/ai-message/index.d.ts.map +1 -0
  352. package/dist/src/components/ai-mission-header/ai-mission-header.d.ts +62 -0
  353. package/dist/src/components/ai-mission-header/ai-mission-header.d.ts.map +1 -0
  354. package/dist/src/components/ai-mission-header/index.d.ts +2 -0
  355. package/dist/src/components/ai-mission-header/index.d.ts.map +1 -0
  356. package/dist/src/components/ai-prompt-input/ai-prompt-input.d.ts +260 -0
  357. package/dist/src/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -0
  358. package/dist/src/components/ai-prompt-input/index.d.ts +2 -0
  359. package/dist/src/components/ai-prompt-input/index.d.ts.map +1 -0
  360. package/dist/src/components/ai-question/ai-question.d.ts +73 -0
  361. package/dist/src/components/ai-question/ai-question.d.ts.map +1 -0
  362. package/dist/src/components/ai-question/index.d.ts +2 -0
  363. package/dist/src/components/ai-question/index.d.ts.map +1 -0
  364. package/dist/src/components/ai-reasoning/ai-reasoning.d.ts +107 -0
  365. package/dist/src/components/ai-reasoning/ai-reasoning.d.ts.map +1 -0
  366. package/dist/src/components/ai-reasoning/index.d.ts +2 -0
  367. package/dist/src/components/ai-reasoning/index.d.ts.map +1 -0
  368. package/dist/src/components/ai-response/ai-response.d.ts +26 -0
  369. package/dist/src/components/ai-response/ai-response.d.ts.map +1 -0
  370. package/dist/src/components/ai-response/index.d.ts +2 -0
  371. package/dist/src/components/ai-response/index.d.ts.map +1 -0
  372. package/dist/src/components/ai-shimmer/ai-shimmer.d.ts +29 -0
  373. package/dist/src/components/ai-shimmer/ai-shimmer.d.ts.map +1 -0
  374. package/dist/src/components/ai-shimmer/index.d.ts +2 -0
  375. package/dist/src/components/ai-shimmer/index.d.ts.map +1 -0
  376. package/dist/src/components/ai-status-badge/ai-status-badge.d.ts +46 -0
  377. package/dist/src/components/ai-status-badge/ai-status-badge.d.ts.map +1 -0
  378. package/dist/src/components/ai-status-badge/index.d.ts +2 -0
  379. package/dist/src/components/ai-status-badge/index.d.ts.map +1 -0
  380. package/dist/src/components/ai-streaming-text/ai-streaming-text.d.ts +27 -0
  381. package/dist/src/components/ai-streaming-text/ai-streaming-text.d.ts.map +1 -0
  382. package/dist/src/components/ai-streaming-text/index.d.ts +2 -0
  383. package/dist/src/components/ai-streaming-text/index.d.ts.map +1 -0
  384. package/dist/src/components/ai-subagent/ai-subagent.d.ts +74 -0
  385. package/dist/src/components/ai-subagent/ai-subagent.d.ts.map +1 -0
  386. package/dist/src/components/ai-subagent/index.d.ts +2 -0
  387. package/dist/src/components/ai-subagent/index.d.ts.map +1 -0
  388. package/dist/src/components/ai-suggestion/ai-suggestion.d.ts +40 -0
  389. package/dist/src/components/ai-suggestion/ai-suggestion.d.ts.map +1 -0
  390. package/dist/src/components/ai-suggestion/index.d.ts +2 -0
  391. package/dist/src/components/ai-suggestion/index.d.ts.map +1 -0
  392. package/dist/src/components/ai-task-list/ai-task-list.d.ts +61 -0
  393. package/dist/src/components/ai-task-list/ai-task-list.d.ts.map +1 -0
  394. package/dist/src/components/ai-task-list/index.d.ts +2 -0
  395. package/dist/src/components/ai-task-list/index.d.ts.map +1 -0
  396. package/dist/src/components/ai-timeline/ai-timeline.d.ts +130 -0
  397. package/dist/src/components/ai-timeline/ai-timeline.d.ts.map +1 -0
  398. package/dist/src/components/ai-timeline/index.d.ts +2 -0
  399. package/dist/src/components/ai-timeline/index.d.ts.map +1 -0
  400. package/dist/src/components/ai-tool/ai-tool.d.ts +138 -0
  401. package/dist/src/components/ai-tool/ai-tool.d.ts.map +1 -0
  402. package/dist/src/components/ai-tool/index.d.ts +2 -0
  403. package/dist/src/components/ai-tool/index.d.ts.map +1 -0
  404. package/dist/src/components/ai-usage-bar/ai-usage-bar.d.ts +38 -0
  405. package/dist/src/components/ai-usage-bar/ai-usage-bar.d.ts.map +1 -0
  406. package/dist/src/components/ai-usage-bar/index.d.ts +2 -0
  407. package/dist/src/components/ai-usage-bar/index.d.ts.map +1 -0
  408. package/dist/src/components/badge/badge.d.ts +129 -0
  409. package/dist/src/components/badge/badge.d.ts.map +1 -0
  410. package/dist/src/components/badge/index.d.ts +2 -0
  411. package/dist/src/components/badge/index.d.ts.map +1 -0
  412. package/dist/src/components/banner/banner.d.ts +80 -0
  413. package/dist/src/components/banner/banner.d.ts.map +1 -0
  414. package/dist/src/components/banner/index.d.ts +2 -0
  415. package/dist/src/components/banner/index.d.ts.map +1 -0
  416. package/dist/src/components/breadcrumbs/breadcrumbs.d.ts +78 -0
  417. package/dist/src/components/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  418. package/dist/src/components/breadcrumbs/index.d.ts +2 -0
  419. package/dist/src/components/breadcrumbs/index.d.ts.map +1 -0
  420. package/dist/src/components/button/button.d.ts +212 -0
  421. package/dist/src/components/button/button.d.ts.map +1 -0
  422. package/dist/src/components/button/index.d.ts +2 -0
  423. package/dist/src/components/button/index.d.ts.map +1 -0
  424. package/dist/src/components/chart/color.d.ts +98 -0
  425. package/dist/src/components/chart/color.d.ts.map +1 -0
  426. package/dist/src/components/chart/echart.d.ts +135 -0
  427. package/dist/src/components/chart/echart.d.ts.map +1 -0
  428. package/dist/src/components/chart/index.d.ts +5 -0
  429. package/dist/src/components/chart/index.d.ts.map +1 -0
  430. package/dist/src/components/chart/legend.d.ts +42 -0
  431. package/dist/src/components/chart/legend.d.ts.map +1 -0
  432. package/dist/src/components/chart/timeseries-chart.d.ts +119 -0
  433. package/dist/src/components/chart/timeseries-chart.d.ts.map +1 -0
  434. package/dist/src/components/checkbox/checkbox.d.ts +174 -0
  435. package/dist/src/components/checkbox/checkbox.d.ts.map +1 -0
  436. package/dist/src/components/checkbox/index.d.ts +2 -0
  437. package/dist/src/components/checkbox/index.d.ts.map +1 -0
  438. package/dist/src/components/clipboard-text/clipboard-text.d.ts +86 -0
  439. package/dist/src/components/clipboard-text/clipboard-text.d.ts.map +1 -0
  440. package/dist/src/components/clipboard-text/index.d.ts +2 -0
  441. package/dist/src/components/clipboard-text/index.d.ts.map +1 -0
  442. package/dist/src/components/code/code.d.ts +165 -0
  443. package/dist/src/components/code/code.d.ts.map +1 -0
  444. package/dist/src/components/code/index.d.ts +4 -0
  445. package/dist/src/components/code/index.d.ts.map +1 -0
  446. package/dist/src/components/collapsible/collapsible.d.ts +72 -0
  447. package/dist/src/components/collapsible/collapsible.d.ts.map +1 -0
  448. package/dist/src/components/collapsible/index.d.ts +2 -0
  449. package/dist/src/components/collapsible/index.d.ts.map +1 -0
  450. package/dist/src/components/combobox/combobox.d.ts +188 -0
  451. package/dist/src/components/combobox/combobox.d.ts.map +1 -0
  452. package/dist/src/components/combobox/index.d.ts +2 -0
  453. package/dist/src/components/combobox/index.d.ts.map +1 -0
  454. package/dist/src/components/command-palette/command-palette.d.ts +260 -0
  455. package/dist/src/components/command-palette/command-palette.d.ts.map +1 -0
  456. package/dist/src/components/command-palette/index.d.ts +3 -0
  457. package/dist/src/components/command-palette/index.d.ts.map +1 -0
  458. package/dist/src/components/command-palette/types.d.ts +149 -0
  459. package/dist/src/components/command-palette/types.d.ts.map +1 -0
  460. package/dist/src/components/data-grid/data-grid.d.ts +78 -0
  461. package/dist/src/components/data-grid/data-grid.d.ts.map +1 -0
  462. package/dist/src/components/data-grid/index.d.ts +3 -0
  463. package/dist/src/components/data-grid/index.d.ts.map +1 -0
  464. package/dist/src/components/data-grid/types.d.ts +236 -0
  465. package/dist/src/components/data-grid/types.d.ts.map +1 -0
  466. package/dist/src/components/date-picker/date-picker.d.ts +65 -0
  467. package/dist/src/components/date-picker/date-picker.d.ts.map +1 -0
  468. package/dist/src/components/date-picker/index.d.ts +4 -0
  469. package/dist/src/components/date-picker/index.d.ts.map +1 -0
  470. package/dist/src/components/date-range-picker/date-range-picker.d.ts +125 -0
  471. package/dist/src/components/date-range-picker/date-range-picker.d.ts.map +1 -0
  472. package/dist/src/components/date-range-picker/index.d.ts +5 -0
  473. package/dist/src/components/date-range-picker/index.d.ts.map +1 -0
  474. package/dist/src/components/dialog/dialog.d.ts +189 -0
  475. package/dist/src/components/dialog/dialog.d.ts.map +1 -0
  476. package/dist/src/components/dialog/index.d.ts +2 -0
  477. package/dist/src/components/dialog/index.d.ts.map +1 -0
  478. package/dist/src/components/dropdown/dropdown.d.ts +91 -0
  479. package/dist/src/components/dropdown/dropdown.d.ts.map +1 -0
  480. package/dist/src/components/dropdown/index.d.ts +2 -0
  481. package/dist/src/components/dropdown/index.d.ts.map +1 -0
  482. package/dist/src/components/empty/empty.d.ts +69 -0
  483. package/dist/src/components/empty/empty.d.ts.map +1 -0
  484. package/dist/src/components/empty/index.d.ts +2 -0
  485. package/dist/src/components/empty/index.d.ts.map +1 -0
  486. package/dist/src/components/field/field.d.ts +68 -0
  487. package/dist/src/components/field/field.d.ts.map +1 -0
  488. package/dist/src/components/field/index.d.ts +2 -0
  489. package/dist/src/components/field/index.d.ts.map +1 -0
  490. package/dist/src/components/filters/filters.d.ts +54 -0
  491. package/dist/src/components/filters/filters.d.ts.map +1 -0
  492. package/dist/src/components/filters/helpers.d.ts +56 -0
  493. package/dist/src/components/filters/helpers.d.ts.map +1 -0
  494. package/dist/src/components/filters/index.d.ts +3 -0
  495. package/dist/src/components/filters/index.d.ts.map +1 -0
  496. package/dist/src/components/filters/types.d.ts +148 -0
  497. package/dist/src/components/filters/types.d.ts.map +1 -0
  498. package/dist/src/components/flow/connectors.d.ts +35 -0
  499. package/dist/src/components/flow/connectors.d.ts.map +1 -0
  500. package/dist/src/components/flow/diagram.d.ts +62 -0
  501. package/dist/src/components/flow/diagram.d.ts.map +1 -0
  502. package/dist/src/components/flow/index.d.ts +26 -0
  503. package/dist/src/components/flow/index.d.ts.map +1 -0
  504. package/dist/src/components/flow/node.d.ts +52 -0
  505. package/dist/src/components/flow/node.d.ts.map +1 -0
  506. package/dist/src/components/flow/parallel.d.ts +5 -0
  507. package/dist/src/components/flow/parallel.d.ts.map +1 -0
  508. package/dist/src/components/flow/use-children.d.ts +69 -0
  509. package/dist/src/components/flow/use-children.d.ts.map +1 -0
  510. package/dist/src/components/grid/grid.d.ts +135 -0
  511. package/dist/src/components/grid/grid.d.ts.map +1 -0
  512. package/dist/src/components/grid/index.d.ts +2 -0
  513. package/dist/src/components/grid/index.d.ts.map +1 -0
  514. package/dist/src/components/input/index.d.ts +4 -0
  515. package/dist/src/components/input/index.d.ts.map +1 -0
  516. package/dist/src/components/input/input-area.d.ts +65 -0
  517. package/dist/src/components/input/input-area.d.ts.map +1 -0
  518. package/dist/src/components/input/input-group.d.ts +39 -0
  519. package/dist/src/components/input/input-group.d.ts.map +1 -0
  520. package/dist/src/components/input/input.d.ts +172 -0
  521. package/dist/src/components/input/input.d.ts.map +1 -0
  522. package/dist/src/components/label/index.d.ts +2 -0
  523. package/dist/src/components/label/index.d.ts.map +1 -0
  524. package/dist/src/components/label/label.d.ts +67 -0
  525. package/dist/src/components/label/label.d.ts.map +1 -0
  526. package/dist/src/components/layer-card/index.d.ts +2 -0
  527. package/dist/src/components/layer-card/index.d.ts.map +1 -0
  528. package/dist/src/components/layer-card/layer-card.d.ts +29 -0
  529. package/dist/src/components/layer-card/layer-card.d.ts.map +1 -0
  530. package/dist/src/components/link/index.d.ts +2 -0
  531. package/dist/src/components/link/index.d.ts.map +1 -0
  532. package/dist/src/components/link/link.d.ts +55 -0
  533. package/dist/src/components/link/link.d.ts.map +1 -0
  534. package/dist/src/components/loader/index.d.ts +3 -0
  535. package/dist/src/components/loader/index.d.ts.map +1 -0
  536. package/dist/src/components/loader/loader.d.ts +65 -0
  537. package/dist/src/components/loader/loader.d.ts.map +1 -0
  538. package/dist/src/components/loader/skeleton-line.d.ts +10 -0
  539. package/dist/src/components/loader/skeleton-line.d.ts.map +1 -0
  540. package/dist/src/components/menubar/index.d.ts +3 -0
  541. package/dist/src/components/menubar/index.d.ts.map +1 -0
  542. package/dist/src/components/menubar/menubar.d.ts +66 -0
  543. package/dist/src/components/menubar/menubar.d.ts.map +1 -0
  544. package/dist/src/components/menubar/use-menu-navigation.d.ts +8 -0
  545. package/dist/src/components/menubar/use-menu-navigation.d.ts.map +1 -0
  546. package/dist/src/components/meter/index.d.ts +2 -0
  547. package/dist/src/components/meter/index.d.ts.map +1 -0
  548. package/dist/src/components/meter/meter.d.ts +44 -0
  549. package/dist/src/components/meter/meter.d.ts.map +1 -0
  550. package/dist/src/components/pagination/index.d.ts +2 -0
  551. package/dist/src/components/pagination/index.d.ts.map +1 -0
  552. package/dist/src/components/pagination/pagination.d.ts +60 -0
  553. package/dist/src/components/pagination/pagination.d.ts.map +1 -0
  554. package/dist/src/components/popover/index.d.ts +3 -0
  555. package/dist/src/components/popover/index.d.ts.map +1 -0
  556. package/dist/src/components/popover/popover.d.ts +138 -0
  557. package/dist/src/components/popover/popover.d.ts.map +1 -0
  558. package/dist/src/components/radio/index.d.ts +2 -0
  559. package/dist/src/components/radio/index.d.ts.map +1 -0
  560. package/dist/src/components/radio/radio.d.ts +163 -0
  561. package/dist/src/components/radio/radio.d.ts.map +1 -0
  562. package/dist/src/components/select/index.d.ts +2 -0
  563. package/dist/src/components/select/index.d.ts.map +1 -0
  564. package/dist/src/components/select/select.d.ts +150 -0
  565. package/dist/src/components/select/select.d.ts.map +1 -0
  566. package/dist/src/components/sensitive-input/index.d.ts +2 -0
  567. package/dist/src/components/sensitive-input/index.d.ts.map +1 -0
  568. package/dist/src/components/sensitive-input/sensitive-input.d.ts +94 -0
  569. package/dist/src/components/sensitive-input/sensitive-input.d.ts.map +1 -0
  570. package/dist/src/components/sidebar/index.d.ts +2 -0
  571. package/dist/src/components/sidebar/index.d.ts.map +1 -0
  572. package/dist/src/components/sidebar/sidebar.d.ts +556 -0
  573. package/dist/src/components/sidebar/sidebar.d.ts.map +1 -0
  574. package/dist/src/components/signalflare-ai-logo/index.d.ts +2 -0
  575. package/dist/src/components/signalflare-ai-logo/index.d.ts.map +1 -0
  576. package/dist/src/components/signalflare-ai-logo/signalflare-ai-logo.d.ts +171 -0
  577. package/dist/src/components/signalflare-ai-logo/signalflare-ai-logo.d.ts.map +1 -0
  578. package/dist/src/components/surface/index.d.ts +2 -0
  579. package/dist/src/components/surface/index.d.ts.map +1 -0
  580. package/dist/src/components/surface/surface.d.ts +60 -0
  581. package/dist/src/components/surface/surface.d.ts.map +1 -0
  582. package/dist/src/components/switch/index.d.ts +2 -0
  583. package/dist/src/components/switch/index.d.ts.map +1 -0
  584. package/dist/src/components/switch/switch.d.ts +169 -0
  585. package/dist/src/components/switch/switch.d.ts.map +1 -0
  586. package/dist/src/components/table/index.d.ts +2 -0
  587. package/dist/src/components/table/index.d.ts.map +1 -0
  588. package/dist/src/components/table/table.d.ts +89 -0
  589. package/dist/src/components/table/table.d.ts.map +1 -0
  590. package/dist/src/components/tabs/index.d.ts +3 -0
  591. package/dist/src/components/tabs/index.d.ts.map +1 -0
  592. package/dist/src/components/tabs/tabs.d.ts +105 -0
  593. package/dist/src/components/tabs/tabs.d.ts.map +1 -0
  594. package/dist/src/components/text/index.d.ts +2 -0
  595. package/dist/src/components/text/index.d.ts.map +1 -0
  596. package/dist/src/components/text/text.d.ts +181 -0
  597. package/dist/src/components/text/text.d.ts.map +1 -0
  598. package/dist/src/components/theme-toggle/index.d.ts +2 -0
  599. package/dist/src/components/theme-toggle/index.d.ts.map +1 -0
  600. package/dist/src/components/theme-toggle/theme-toggle.d.ts +68 -0
  601. package/dist/src/components/theme-toggle/theme-toggle.d.ts.map +1 -0
  602. package/dist/src/components/toast/index.d.ts +5 -0
  603. package/dist/src/components/toast/index.d.ts.map +1 -0
  604. package/dist/src/components/toast/toast.d.ts +152 -0
  605. package/dist/src/components/toast/toast.d.ts.map +1 -0
  606. package/dist/src/components/tooltip/index.d.ts +2 -0
  607. package/dist/src/components/tooltip/index.d.ts.map +1 -0
  608. package/dist/src/components/tooltip/tooltip.d.ts +82 -0
  609. package/dist/src/components/tooltip/tooltip.d.ts.map +1 -0
  610. package/dist/src/components/use-agent-harness/index.d.ts +2 -0
  611. package/dist/src/components/use-agent-harness/index.d.ts.map +1 -0
  612. package/dist/src/components/use-agent-harness/use-agent-harness.d.ts +642 -0
  613. package/dist/src/components/use-agent-harness/use-agent-harness.d.ts.map +1 -0
  614. package/dist/src/genui/genui.d.ts +17 -0
  615. package/dist/src/genui/genui.d.ts.map +1 -0
  616. package/dist/src/genui/index.d.ts +19 -0
  617. package/dist/src/genui/index.d.ts.map +1 -0
  618. package/dist/src/index.d.ts +102 -0
  619. package/dist/src/index.d.ts.map +1 -0
  620. package/dist/src/lib/utils.d.ts +2 -0
  621. package/dist/src/lib/utils.d.ts.map +1 -0
  622. package/dist/src/primitives/accordion.d.ts +13 -0
  623. package/dist/src/primitives/accordion.d.ts.map +1 -0
  624. package/dist/src/primitives/alert-dialog.d.ts +13 -0
  625. package/dist/src/primitives/alert-dialog.d.ts.map +1 -0
  626. package/dist/src/primitives/autocomplete.d.ts +13 -0
  627. package/dist/src/primitives/autocomplete.d.ts.map +1 -0
  628. package/dist/src/primitives/avatar.d.ts +13 -0
  629. package/dist/src/primitives/avatar.d.ts.map +1 -0
  630. package/dist/src/primitives/button.d.ts +13 -0
  631. package/dist/src/primitives/button.d.ts.map +1 -0
  632. package/dist/src/primitives/checkbox-group.d.ts +13 -0
  633. package/dist/src/primitives/checkbox-group.d.ts.map +1 -0
  634. package/dist/src/primitives/checkbox.d.ts +13 -0
  635. package/dist/src/primitives/checkbox.d.ts.map +1 -0
  636. package/dist/src/primitives/collapsible.d.ts +13 -0
  637. package/dist/src/primitives/collapsible.d.ts.map +1 -0
  638. package/dist/src/primitives/combobox.d.ts +13 -0
  639. package/dist/src/primitives/combobox.d.ts.map +1 -0
  640. package/dist/src/primitives/context-menu.d.ts +13 -0
  641. package/dist/src/primitives/context-menu.d.ts.map +1 -0
  642. package/dist/src/primitives/csp-provider.d.ts +13 -0
  643. package/dist/src/primitives/csp-provider.d.ts.map +1 -0
  644. package/dist/src/primitives/dialog.d.ts +13 -0
  645. package/dist/src/primitives/dialog.d.ts.map +1 -0
  646. package/dist/src/primitives/direction-provider.d.ts +13 -0
  647. package/dist/src/primitives/direction-provider.d.ts.map +1 -0
  648. package/dist/src/primitives/drawer.d.ts +13 -0
  649. package/dist/src/primitives/drawer.d.ts.map +1 -0
  650. package/dist/src/primitives/field.d.ts +13 -0
  651. package/dist/src/primitives/field.d.ts.map +1 -0
  652. package/dist/src/primitives/fieldset.d.ts +13 -0
  653. package/dist/src/primitives/fieldset.d.ts.map +1 -0
  654. package/dist/src/primitives/form.d.ts +13 -0
  655. package/dist/src/primitives/form.d.ts.map +1 -0
  656. package/dist/src/primitives/index.d.ts +54 -0
  657. package/dist/src/primitives/index.d.ts.map +1 -0
  658. package/dist/src/primitives/input.d.ts +13 -0
  659. package/dist/src/primitives/input.d.ts.map +1 -0
  660. package/dist/src/primitives/menu.d.ts +13 -0
  661. package/dist/src/primitives/menu.d.ts.map +1 -0
  662. package/dist/src/primitives/menubar.d.ts +13 -0
  663. package/dist/src/primitives/menubar.d.ts.map +1 -0
  664. package/dist/src/primitives/meter.d.ts +13 -0
  665. package/dist/src/primitives/meter.d.ts.map +1 -0
  666. package/dist/src/primitives/navigation-menu.d.ts +13 -0
  667. package/dist/src/primitives/navigation-menu.d.ts.map +1 -0
  668. package/dist/src/primitives/number-field.d.ts +13 -0
  669. package/dist/src/primitives/number-field.d.ts.map +1 -0
  670. package/dist/src/primitives/popover.d.ts +13 -0
  671. package/dist/src/primitives/popover.d.ts.map +1 -0
  672. package/dist/src/primitives/preview-card.d.ts +13 -0
  673. package/dist/src/primitives/preview-card.d.ts.map +1 -0
  674. package/dist/src/primitives/progress.d.ts +13 -0
  675. package/dist/src/primitives/progress.d.ts.map +1 -0
  676. package/dist/src/primitives/radio-group.d.ts +13 -0
  677. package/dist/src/primitives/radio-group.d.ts.map +1 -0
  678. package/dist/src/primitives/radio.d.ts +13 -0
  679. package/dist/src/primitives/radio.d.ts.map +1 -0
  680. package/dist/src/primitives/scroll-area.d.ts +13 -0
  681. package/dist/src/primitives/scroll-area.d.ts.map +1 -0
  682. package/dist/src/primitives/select.d.ts +13 -0
  683. package/dist/src/primitives/select.d.ts.map +1 -0
  684. package/dist/src/primitives/separator.d.ts +13 -0
  685. package/dist/src/primitives/separator.d.ts.map +1 -0
  686. package/dist/src/primitives/slider.d.ts +13 -0
  687. package/dist/src/primitives/slider.d.ts.map +1 -0
  688. package/dist/src/primitives/switch.d.ts +13 -0
  689. package/dist/src/primitives/switch.d.ts.map +1 -0
  690. package/dist/src/primitives/tabs.d.ts +13 -0
  691. package/dist/src/primitives/tabs.d.ts.map +1 -0
  692. package/dist/src/primitives/toast.d.ts +13 -0
  693. package/dist/src/primitives/toast.d.ts.map +1 -0
  694. package/dist/src/primitives/toggle-group.d.ts +13 -0
  695. package/dist/src/primitives/toggle-group.d.ts.map +1 -0
  696. package/dist/src/primitives/toggle.d.ts +13 -0
  697. package/dist/src/primitives/toggle.d.ts.map +1 -0
  698. package/dist/src/primitives/toolbar.d.ts +13 -0
  699. package/dist/src/primitives/toolbar.d.ts.map +1 -0
  700. package/dist/src/primitives/tooltip.d.ts +13 -0
  701. package/dist/src/primitives/tooltip.d.ts.map +1 -0
  702. package/dist/src/registry/index.d.ts +8 -0
  703. package/dist/src/registry/index.d.ts.map +1 -0
  704. package/dist/src/registry/types.d.ts +191 -0
  705. package/dist/src/registry/types.d.ts.map +1 -0
  706. package/dist/src/utils/cn.d.ts +4 -0
  707. package/dist/src/utils/cn.d.ts.map +1 -0
  708. package/dist/src/utils/highlight-to-react.d.ts +12 -0
  709. package/dist/src/utils/highlight-to-react.d.ts.map +1 -0
  710. package/dist/src/utils/index.d.ts +3 -0
  711. package/dist/src/utils/index.d.ts.map +1 -0
  712. package/dist/src/utils/link-provider.d.ts +12 -0
  713. package/dist/src/utils/link-provider.d.ts.map +1 -0
  714. package/dist/src/utils/prop-examples.d.ts +36 -0
  715. package/dist/src/utils/prop-examples.d.ts.map +1 -0
  716. package/dist/styles/sf-binding.css +255 -0
  717. package/dist/styles/sf-standalone.css +2 -0
  718. package/dist/styles/sf.css +596 -0
  719. package/dist/styles/theme-fedramp.css +22 -0
  720. package/dist/styles/theme-minimal.css +127 -0
  721. package/dist/styles/theme-navigator.css +137 -0
  722. package/dist/styles/theme-sf.css +191 -0
  723. package/dist/surface-BduI7Ehl.js +18 -0
  724. package/dist/surface-BduI7Ehl.js.map +1 -0
  725. package/dist/switch-CzZBRBL7.js +169 -0
  726. package/dist/switch-CzZBRBL7.js.map +1 -0
  727. package/dist/table-CIMx0Oq0.js +200 -0
  728. package/dist/table-CIMx0Oq0.js.map +1 -0
  729. package/dist/tabs-1cHrYoel.js +54 -0
  730. package/dist/tabs-1cHrYoel.js.map +1 -0
  731. package/dist/text-KJmGkwnf.js +103 -0
  732. package/dist/text-KJmGkwnf.js.map +1 -0
  733. package/dist/theme-toggle-Dpgnoj_Q.js +129 -0
  734. package/dist/theme-toggle-Dpgnoj_Q.js.map +1 -0
  735. package/dist/toast-Nw28a5Cx.js +161 -0
  736. package/dist/toast-Nw28a5Cx.js.map +1 -0
  737. package/dist/tooltip-Cb7QW-7H.js +79 -0
  738. package/dist/tooltip-Cb7QW-7H.js.map +1 -0
  739. package/dist/use-agent-harness-DZzcn96L.js +929 -0
  740. package/dist/use-agent-harness-DZzcn96L.js.map +1 -0
  741. package/dist/utils.js +4 -0
  742. package/package.json +620 -0
  743. package/scripts/component-registry/cache.ts +124 -0
  744. package/scripts/component-registry/discovery.ts +464 -0
  745. package/scripts/component-registry/example-cleanup.ts +168 -0
  746. package/scripts/component-registry/index.test.ts +678 -0
  747. package/scripts/component-registry/index.ts +931 -0
  748. package/scripts/component-registry/markdown-generator.ts +222 -0
  749. package/scripts/component-registry/metadata.ts +653 -0
  750. package/scripts/component-registry/props-filter.ts +313 -0
  751. package/scripts/component-registry/schema-generator.ts +332 -0
  752. package/scripts/component-registry/sub-components.ts +350 -0
  753. package/scripts/component-registry/types.ts +156 -0
  754. package/scripts/component-registry/utils.ts +280 -0
  755. package/scripts/component-registry/variant-parser.ts +262 -0
  756. package/scripts/css-build.ts +117 -0
  757. package/scripts/generate-primitives.ts +178 -0
  758. package/scripts/theme-generator/config.ts +538 -0
  759. package/scripts/theme-generator/generate-css.ts +256 -0
  760. package/scripts/theme-generator/index.ts +161 -0
  761. package/scripts/theme-generator/migrate.ts +584 -0
  762. package/scripts/theme-generator/types.ts +86 -0
  763. package/skills/component-selection/SKILL.md +64 -0
  764. package/skills/installing-blocks/SKILL.md +47 -0
  765. package/skills/theming-and-tokens/SKILL.md +62 -0
@@ -0,0 +1,931 @@
1
+ /**
2
+ * Component Metadata Generator for AI/Agent Consumption
3
+ *
4
+ * This script auto-discovers components from the filesystem and uses
5
+ * ts-json-schema-generator to derive props directly from TypeScript types,
6
+ * then enriches with variant descriptions from SF_*_VARIANTS.
7
+ *
8
+ * Components are auto-discovered from src/components/ subdirectories.
9
+ * Each component must export SF_<NAME>_VARIANTS and SF_<NAME>_DEFAULT_VARIANTS
10
+ *
11
+ * Run: bun run codegen:registry
12
+ * Output: ai/component-registry.json (committed to git)
13
+ *
14
+ * Performance optimizations:
15
+ * - Hash-based caching: Skip regeneration for unchanged components
16
+ * - Parallel processing: Process components concurrently (8 at a time)
17
+ * - Skip inherited props by default: Opt-in with --inherited-props flag
18
+ */
19
+
20
+ import { writeFileSync, mkdirSync, readFileSync } from "node:fs";
21
+ // External imports - demo examples from sf-docs-astro
22
+ import { existsSync } from "node:fs";
23
+ import { dirname, join } from "node:path";
24
+ import { fileURLToPath } from "node:url";
25
+
26
+ import * as tsj from "ts-json-schema-generator";
27
+ import type { Definition } from "ts-json-schema-generator";
28
+
29
+ import type { BlockSchema } from "../../src/registry/types.js";
30
+ import {
31
+ CACHE_VERSION,
32
+ loadCache,
33
+ saveCache,
34
+ getCachedComponent,
35
+ hashFileContent,
36
+ createCacheEntry,
37
+ } from "./cache.js";
38
+ import { discoverComponents, discoverBlocks } from "./discovery.js";
39
+ import { generateAIContext } from "./markdown-generator.js";
40
+ import {
41
+ PASSTHROUGH_COMPONENT_DOCS,
42
+ ADDITIONAL_COMPONENT_PROPS,
43
+ PROP_TYPE_OVERRIDES,
44
+ COMPONENT_STYLING_METADATA,
45
+ } from "./metadata.js";
46
+ import { shouldSkipProp } from "./props-filter.js";
47
+ import { generateSchemasFile } from "./schema-generator.js";
48
+ import {
49
+ detectSubComponents,
50
+ extractSubComponentProps,
51
+ } from "./sub-components.js";
52
+ // Internal module imports
53
+ import type {
54
+ CLIFlags,
55
+ CacheFile,
56
+ ComponentConfig,
57
+ ComponentSchema,
58
+ PropSchema,
59
+ SubComponentSchema,
60
+ ProcessComponentResult,
61
+ GenerateRegistryResult,
62
+ } from "./types.js";
63
+ import {
64
+ toScreamingSnakeCase,
65
+ extractSemanticColors,
66
+ extractBlockDependencies,
67
+ getBlockFiles,
68
+ } from "./utils.js";
69
+
70
+ // Type for demo metadata (matches sf-docs-astro output)
71
+ interface DemoMetadata {
72
+ generatedAt: string;
73
+ version: string;
74
+ components: Record<
75
+ string,
76
+ {
77
+ componentName: string;
78
+ sourceFile: string;
79
+ demos: Array<{
80
+ name: string;
81
+ code: string;
82
+ description?: string;
83
+ }>;
84
+ }
85
+ >;
86
+ }
87
+
88
+ /**
89
+ * Load demo examples from sf-docs-astro's generated metadata file.
90
+ * Returns a map compatible with the existing storyExamples interface.
91
+ */
92
+ function loadDemoExamples(): Map<string, { aiExamples: string[] }> {
93
+ const demoMetadataPath = join(
94
+ __dirname,
95
+ "../../../sf-docs-astro/dist/demo-metadata.json"
96
+ );
97
+
98
+ if (!existsSync(demoMetadataPath)) {
99
+ console.warn(
100
+ `Warning: demo-metadata.json not found at ${demoMetadataPath}`
101
+ );
102
+ console.warn(
103
+ "Run 'bun --filter @signalflare-ai/ui-docs codegen:demos' first"
104
+ );
105
+ return new Map();
106
+ }
107
+
108
+ const metadata: DemoMetadata = JSON.parse(
109
+ readFileSync(demoMetadataPath, "utf-8")
110
+ );
111
+
112
+ const examples = new Map<string, { aiExamples: string[] }>();
113
+
114
+ for (const [componentName, data] of Object.entries(metadata.components)) {
115
+ examples.set(componentName, {
116
+ aiExamples: data.demos.map((demo) => demo.code),
117
+ });
118
+ }
119
+
120
+ return examples;
121
+ }
122
+
123
+ const __dirname = dirname(fileURLToPath(import.meta.url));
124
+ const componentsDir = join(__dirname, "../../src/components");
125
+ const blocksDir = join(__dirname, "../../src/blocks");
126
+ const rootDir = join(__dirname, "../..");
127
+ const cacheDir = join(__dirname, "../../.cache");
128
+ const cachePath = join(cacheDir, "component-registry-cache.json");
129
+
130
+ // =============================================================================
131
+ // CLI Flags
132
+ // =============================================================================
133
+
134
+ function parseCLIFlags(): CLIFlags {
135
+ const args = new Set(process.argv.slice(2));
136
+ return {
137
+ includeInheritedProps: args.has("--inherited-props"),
138
+ noCache: args.has("--no-cache"),
139
+ verbose: args.has("--verbose"),
140
+ };
141
+ }
142
+
143
+ const CLI_FLAGS = parseCLIFlags();
144
+
145
+ // =============================================================================
146
+ // JSON Schema Type Conversion
147
+ // =============================================================================
148
+
149
+ function jsonSchemaTypeToString(def: Definition): string {
150
+ if (def.$ref) {
151
+ // Extract type name from $ref like "#/definitions/ReactNode"
152
+ const refName = decodeURIComponent(def.$ref.split("/").pop() || "unknown");
153
+ // Simplify common React types
154
+ if (refName.includes("ReactNode") || refName.includes("ReactElement")) {
155
+ return "ReactNode";
156
+ }
157
+ return refName;
158
+ }
159
+ if (def.enum) {
160
+ return "enum";
161
+ }
162
+ if (def.type === "array") {
163
+ const itemType = def.items
164
+ ? jsonSchemaTypeToString(def.items as Definition)
165
+ : "unknown";
166
+ return `${itemType}[]`;
167
+ }
168
+ if (def.anyOf || def.oneOf) {
169
+ const types = (def.anyOf || def.oneOf) as Definition[];
170
+ const typeStrings = types
171
+ .map((t) => jsonSchemaTypeToString(t))
172
+ .filter((t) => t !== "undefined" && t !== "null");
173
+ // Simplify if it includes ReactNode variants
174
+ if (typeStrings.some((t) => t.includes("React"))) {
175
+ return "ReactNode";
176
+ }
177
+ return typeStrings.join(" | ");
178
+ }
179
+ if (def.type) {
180
+ return Array.isArray(def.type) ? def.type.join(" | ") : def.type;
181
+ }
182
+ return "unknown";
183
+ }
184
+
185
+ /**
186
+ * Resolve a $ref to its actual definition.
187
+ * Returns the resolved definition or the original if no $ref.
188
+ */
189
+ function resolveRef(
190
+ def: Definition,
191
+ allDefinitions?: Record<string, Definition>
192
+ ): Definition {
193
+ if (!def.$ref || !allDefinitions) {
194
+ return def;
195
+ }
196
+ const refName = decodeURIComponent(def.$ref.split("/").pop() || "");
197
+ const resolved = allDefinitions[refName];
198
+ return resolved || def;
199
+ }
200
+
201
+ function convertToPropSchema(
202
+ propName: string,
203
+ def: Definition,
204
+ required: boolean,
205
+ // biome-ignore lint/suspicious/noExplicitAny: Variants have varying shapes
206
+ variants?: Record<string, Record<string, any>>,
207
+ defaults?: Record<string, string>,
208
+ allDefinitions?: Record<string, Definition>
209
+ ): PropSchema {
210
+ // Resolve $ref to get the actual definition (for enum detection)
211
+ const resolvedDef = resolveRef(def, allDefinitions);
212
+
213
+ const prop: PropSchema = {
214
+ type: jsonSchemaTypeToString(def),
215
+ };
216
+
217
+ if (required) {
218
+ prop.required = true;
219
+ } else {
220
+ prop.optional = true;
221
+ }
222
+
223
+ if (def.description) {
224
+ prop.description = def.description;
225
+ }
226
+
227
+ // Handle enums - check both original def and resolved def (for $ref cases)
228
+ if (def.enum) {
229
+ prop.values = def.enum as string[];
230
+ prop.type = "enum";
231
+ } else if (resolvedDef.enum) {
232
+ // Enum found via $ref resolution (e.g., KumoCodeLang)
233
+ prop.values = resolvedDef.enum as string[];
234
+ prop.type = "enum";
235
+ }
236
+
237
+ // Enrich with variant descriptions and classes if this prop is a variant
238
+ if (variants && propName in variants) {
239
+ const variantDef = variants[propName];
240
+ prop.values = Object.keys(variantDef);
241
+ prop.type = "enum";
242
+
243
+ const descriptions: Record<string, string> = {};
244
+ const classes: Record<string, string> = {};
245
+ const stateClassesMap: Record<string, Record<string, string>> = {};
246
+
247
+ for (const [key, val] of Object.entries(variantDef)) {
248
+ if (val.description) {
249
+ descriptions[key] = val.description;
250
+ }
251
+ if (val.classes) {
252
+ classes[key] = val.classes;
253
+ }
254
+ if (val.stateClasses) {
255
+ stateClassesMap[key] = val.stateClasses;
256
+ }
257
+ }
258
+
259
+ if (Object.keys(descriptions).length > 0) {
260
+ prop.descriptions = descriptions;
261
+ }
262
+ if (Object.keys(classes).length > 0) {
263
+ prop.classes = classes;
264
+ }
265
+ if (Object.keys(stateClassesMap).length > 0) {
266
+ prop.stateClasses = stateClassesMap;
267
+ }
268
+ }
269
+
270
+ // Add default value from variants defaults
271
+ if (defaults && propName in defaults) {
272
+ prop.default = defaults[propName];
273
+ }
274
+
275
+ return prop;
276
+ }
277
+
278
+ // =============================================================================
279
+ // Props Generation from TypeScript Types
280
+ // =============================================================================
281
+
282
+ /** Derive propsType from component name */
283
+ function getPropsType(config: ComponentConfig): string {
284
+ return config.propsType ?? `${config.name}Props`;
285
+ }
286
+
287
+ /** Derive sourceFile from component config */
288
+ function getSourceFile(config: ComponentConfig): string {
289
+ return config.sourceFile;
290
+ }
291
+
292
+ function generatePropsFromType(
293
+ config: ComponentConfig
294
+ ): Record<string, PropSchema> {
295
+ const sourceFile = getSourceFile(config);
296
+ const propsType = getPropsType(config);
297
+ const sourcePath = join(config.sourceDir, sourceFile);
298
+
299
+ try {
300
+ const tsjConfig: tsj.Config = {
301
+ path: sourcePath,
302
+ tsconfig: join(rootDir, "tsconfig.json"),
303
+ type: propsType,
304
+ skipTypeCheck: true,
305
+ expose: "all",
306
+ };
307
+
308
+ const schema = tsj.createGenerator(tsjConfig).createSchema(propsType);
309
+ const props: Record<string, PropSchema> = {};
310
+
311
+ // Get the main type definition, following $ref if needed
312
+ let mainDef = schema.definitions?.[propsType] as Definition;
313
+ if (!mainDef) {
314
+ console.warn(`Warning: Could not find type ${propsType}`);
315
+ return {};
316
+ }
317
+
318
+ // Follow $ref chain to get the actual definition
319
+ // This handles cases like: ExpandableProps -> React.PropsWithChildren<...>
320
+ while (
321
+ mainDef.$ref &&
322
+ !mainDef.properties &&
323
+ !mainDef.allOf &&
324
+ !mainDef.anyOf &&
325
+ !mainDef.oneOf
326
+ ) {
327
+ const refName = decodeURIComponent(mainDef.$ref.split("/").pop()!);
328
+ const refDef = schema.definitions?.[refName] as Definition;
329
+ if (!refDef) break;
330
+ mainDef = refDef;
331
+ }
332
+
333
+ // Helper: collect properties and required fields from a schema part
334
+ // biome-ignore lint/suspicious/noExplicitAny: JSON Schema types are complex
335
+ // oxlint-disable-next-line eslint/no-inner-declarations
336
+ function collectFromParts(parts: Definition[]): {
337
+ // biome-ignore lint/suspicious/noExplicitAny: JSON Schema types are complex
338
+ properties: Record<string, any>;
339
+ required: string[];
340
+ } {
341
+ // biome-ignore lint/suspicious/noExplicitAny: JSON Schema types are complex
342
+ let properties: Record<string, any> = {};
343
+ const required: string[] = [];
344
+
345
+ for (const part of parts) {
346
+ if (part.$ref) {
347
+ const refName = decodeURIComponent(part.$ref.split("/").pop()!);
348
+ const refDef = schema.definitions?.[refName] as Definition;
349
+ if (refDef?.properties) {
350
+ Object.assign(properties, refDef.properties);
351
+ }
352
+ if (refDef?.required) {
353
+ required.push(...(refDef.required as string[]));
354
+ }
355
+ // Recursively handle nested allOf/anyOf in referenced definitions
356
+ if (refDef?.allOf) {
357
+ const nested = collectFromParts(refDef.allOf as Definition[]);
358
+ Object.assign(properties, nested.properties);
359
+ required.push(...nested.required);
360
+ }
361
+ } else if (part.properties) {
362
+ Object.assign(properties, part.properties);
363
+ if (part.required) {
364
+ required.push(...(part.required as string[]));
365
+ }
366
+ }
367
+ }
368
+ return { properties, required };
369
+ }
370
+
371
+ // Handle intersection types (allOf) - merge all properties
372
+ // biome-ignore lint/suspicious/noExplicitAny: JSON Schema types are complex
373
+ let allProperties: Record<string, any> = {};
374
+ let allRequired: string[] = [];
375
+
376
+ if (mainDef.allOf) {
377
+ const result = collectFromParts(mainDef.allOf as Definition[]);
378
+ allProperties = result.properties;
379
+ allRequired = result.required;
380
+ } else if (mainDef.anyOf || mainDef.oneOf) {
381
+ // Handle union types (anyOf/oneOf) — e.g. discriminated unions like ButtonProps
382
+ // Merge properties from all union members. Properties that only appear in
383
+ // some members are marked as optional.
384
+ const unionMembers = (mainDef.anyOf || mainDef.oneOf) as Definition[];
385
+ // biome-ignore lint/suspicious/noExplicitAny: JSON Schema types are complex
386
+ const memberProps: Array<{
387
+ // biome-ignore lint/suspicious/noExplicitAny: JSON Schema types are complex
388
+ properties: Record<string, any>;
389
+ required: string[];
390
+ }> = [];
391
+
392
+ for (const member of unionMembers) {
393
+ const collected = collectFromParts([member]);
394
+ memberProps.push(collected);
395
+ }
396
+
397
+ // Merge all member properties
398
+ for (const mp of memberProps) {
399
+ Object.assign(allProperties, mp.properties);
400
+ }
401
+
402
+ // A prop is required only if it's required in ALL union members
403
+ const allPropNames = Object.keys(allProperties);
404
+ allRequired = allPropNames.filter((prop) =>
405
+ memberProps.every((mp) => mp.required.includes(prop))
406
+ );
407
+ } else if (mainDef.properties) {
408
+ allProperties = mainDef.properties;
409
+ allRequired = (mainDef.required as string[]) || [];
410
+ }
411
+
412
+ // Convert each property
413
+ for (const [propName, propDef] of Object.entries(allProperties)) {
414
+ // Skip internal React props and inherited DOM props we don't want to expose
415
+ if (shouldSkipProp(propName, CLI_FLAGS)) {
416
+ continue;
417
+ }
418
+
419
+ props[propName] = convertToPropSchema(
420
+ propName,
421
+ propDef as Definition,
422
+ allRequired.includes(propName),
423
+ config.variants,
424
+ config.defaults,
425
+ schema.definitions as Record<string, Definition>
426
+ );
427
+ }
428
+
429
+ return props;
430
+ } catch (error) {
431
+ console.warn(
432
+ `Warning: Could not generate schema for ${getPropsType(config)}:`,
433
+ error
434
+ );
435
+ // Fallback: generate props from variants only
436
+ return generatePropsFromVariantsOnly(config);
437
+ }
438
+ }
439
+
440
+ /**
441
+ * Fallback props generation when ts-json-schema-generator fails.
442
+ * Extracts props from the SF_*_VARIANTS object only.
443
+ * This is useful for components with complex generic types.
444
+ */
445
+ function generatePropsFromVariantsOnly(
446
+ config: ComponentConfig
447
+ ): Record<string, PropSchema> {
448
+ const props: Record<string, PropSchema> = {};
449
+
450
+ // Add variant props from the config
451
+ for (const [propName, variantDef] of Object.entries(config.variants)) {
452
+ const values = Object.keys(variantDef);
453
+ const descriptions: Record<string, string> = {};
454
+
455
+ for (const [key, val] of Object.entries(variantDef)) {
456
+ if (val.description) {
457
+ descriptions[key] = val.description;
458
+ }
459
+ }
460
+
461
+ props[propName] = {
462
+ type: "enum",
463
+ values,
464
+ ...(config.defaults[propName] && { default: config.defaults[propName] }),
465
+ ...(Object.keys(descriptions).length > 0 && { descriptions }),
466
+ };
467
+ }
468
+
469
+ // Add common props that most components have
470
+ props.className = { type: "string", description: "Additional CSS classes" };
471
+ props.children = { type: "ReactNode", description: "Child elements" };
472
+
473
+ console.log(
474
+ ` → Fallback: generated ${Object.keys(props).length} props from variants`
475
+ );
476
+ return props;
477
+ }
478
+
479
+ // =============================================================================
480
+ // Process Individual Component
481
+ // =============================================================================
482
+
483
+ interface ProcessComponentInput {
484
+ config: ComponentConfig;
485
+ variantConstants: Map<string, string[]>;
486
+ storyExamples: Map<string, { aiExamples: string[] }>;
487
+ cache: CacheFile;
488
+ }
489
+
490
+ async function processComponent(
491
+ input: ProcessComponentInput
492
+ ): Promise<ProcessComponentResult> {
493
+ const { config, cache } = input;
494
+ const sourcePath = join(config.sourceDir, getSourceFile(config));
495
+ const storyPath = join(
496
+ config.sourceDir,
497
+ config.dirName,
498
+ `${config.dirName}.stories.tsx`
499
+ );
500
+
501
+ // Compute hashes for cache checking
502
+ const sourceHash = hashFileContent(sourcePath);
503
+ const storyHash = hashFileContent(storyPath);
504
+
505
+ // Check cache
506
+ const cachedMetadata = getCachedComponent(
507
+ config.name,
508
+ sourceHash,
509
+ storyHash,
510
+ cache,
511
+ CLI_FLAGS
512
+ );
513
+
514
+ if (cachedMetadata) {
515
+ if (CLI_FLAGS.verbose) {
516
+ console.log(` ✓ ${config.name} (cached)`);
517
+ } else {
518
+ console.log(`✓ ${config.name} (cached)`);
519
+ }
520
+ const colors = extractSemanticColors(sourcePath);
521
+ return {
522
+ name: config.name,
523
+ category: config.category,
524
+ schema: cachedMetadata,
525
+ colors,
526
+ cached: true,
527
+ cacheEntry: {
528
+ componentName: config.name,
529
+ sourceHash,
530
+ storyHash,
531
+ cacheVersion: CACHE_VERSION,
532
+ generatedAt: cache.entries[config.name]?.generatedAt || Date.now(),
533
+ metadata: cachedMetadata,
534
+ },
535
+ };
536
+ }
537
+
538
+ // Not cached, regenerate
539
+ if (CLI_FLAGS.verbose) {
540
+ console.log(` → ${config.name} (regenerating)`);
541
+ } else {
542
+ console.log(`→ ${config.name} (regenerating)`);
543
+ }
544
+
545
+ const props = generatePropsFromType(config);
546
+
547
+ // Inject additional props for components with important inherited props
548
+ const additionalProps = ADDITIONAL_COMPONENT_PROPS[config.name];
549
+ if (additionalProps) {
550
+ for (const [propName, propSchema] of Object.entries(additionalProps)) {
551
+ if (!props[propName]) {
552
+ props[propName] = propSchema;
553
+ } else {
554
+ if (propSchema.type) {
555
+ props[propName].type = propSchema.type;
556
+ }
557
+ if (propSchema.description) {
558
+ props[propName].description = propSchema.description;
559
+ }
560
+ }
561
+ }
562
+ }
563
+
564
+ // Apply type overrides
565
+ const typeOverrides = PROP_TYPE_OVERRIDES[config.name];
566
+ if (typeOverrides) {
567
+ for (const [propName, newType] of Object.entries(typeOverrides)) {
568
+ if (props[propName]) {
569
+ props[propName].type = newType;
570
+ }
571
+ }
572
+ }
573
+
574
+ const colors = extractSemanticColors(sourcePath);
575
+
576
+ // Determine examples
577
+ let examples: readonly string[];
578
+ if (config.examples !== undefined) {
579
+ examples = config.examples;
580
+ } else {
581
+ const extracted = input.storyExamples.get(config.name);
582
+ examples = extracted?.aiExamples ?? [];
583
+ if (examples.length > 0 && CLI_FLAGS.verbose) {
584
+ console.log(
585
+ ` → Auto-extracted ${examples.length} examples from stories`
586
+ );
587
+ }
588
+ }
589
+
590
+ // Detect and process sub-components
591
+ const detectedSubComponents = detectSubComponents(sourcePath);
592
+ let subComponentSchemas: Record<string, SubComponentSchema> | undefined;
593
+
594
+ if (detectedSubComponents.length > 0) {
595
+ subComponentSchemas = {};
596
+
597
+ for (const subComp of detectedSubComponents) {
598
+ let subProps = extractSubComponentProps(sourcePath, subComp, CLI_FLAGS);
599
+ let description = subComp.description;
600
+ let usageExamples: string[] | undefined;
601
+ let renderElement: string | undefined;
602
+
603
+ if (subComp.isPassThrough && subComp.baseComponent) {
604
+ const passthroughDoc =
605
+ PASSTHROUGH_COMPONENT_DOCS[subComp.baseComponent];
606
+ if (passthroughDoc) {
607
+ description = passthroughDoc.description;
608
+ subProps = passthroughDoc.props;
609
+ usageExamples = passthroughDoc.usageExamples;
610
+ renderElement = passthroughDoc.renderElement;
611
+ }
612
+ }
613
+
614
+ subComponentSchemas[subComp.name] = {
615
+ name: subComp.name,
616
+ description,
617
+ props: subProps,
618
+ ...(subComp.isPassThrough && { isPassThrough: true }),
619
+ ...(subComp.baseComponent && { baseComponent: subComp.baseComponent }),
620
+ ...(usageExamples && { usageExamples }),
621
+ ...(renderElement && { renderElement }),
622
+ };
623
+ }
624
+
625
+ if (CLI_FLAGS.verbose && Object.keys(subComponentSchemas).length > 0) {
626
+ console.log(
627
+ ` → Processed ${Object.keys(subComponentSchemas).length} sub-components`
628
+ );
629
+ }
630
+ }
631
+
632
+ // Get styling metadata - prefer extracted from component file, fallback to hardcoded metadata
633
+ const stylingMetadata =
634
+ config.styling ?? COMPONENT_STYLING_METADATA[config.name];
635
+
636
+ const schema: ComponentSchema = {
637
+ name: config.name,
638
+ type: config.type,
639
+ description: config.description,
640
+ importPath: "@signalflare-ai/ui",
641
+ category: config.category,
642
+ props,
643
+ examples,
644
+ colors,
645
+ ...(config.baseStyles && { baseStyles: config.baseStyles }),
646
+ ...(subComponentSchemas && { subComponents: subComponentSchemas }),
647
+ ...(stylingMetadata && { styling: stylingMetadata }),
648
+ };
649
+
650
+ return {
651
+ name: config.name,
652
+ category: config.category,
653
+ schema,
654
+ colors,
655
+ cached: false,
656
+ cacheEntry: createCacheEntry(config.name, sourceHash, storyHash, schema),
657
+ };
658
+ }
659
+
660
+ // =============================================================================
661
+ // Parallel Processing
662
+ // =============================================================================
663
+
664
+ async function processComponentsInParallel(
665
+ configs: ComponentConfig[],
666
+ variantConstants: Map<string, string[]>,
667
+ storyExamples: Map<string, { aiExamples: string[] }>,
668
+ cache: CacheFile
669
+ ): Promise<ProcessComponentResult[]> {
670
+ const BATCH_SIZE = 8; // Process 8 components concurrently
671
+ const results: ProcessComponentResult[] = [];
672
+
673
+ for (let i = 0; i < configs.length; i += BATCH_SIZE) {
674
+ const batch = configs.slice(i, i + BATCH_SIZE);
675
+ const batchResults = await Promise.all(
676
+ batch.map((config) =>
677
+ processComponent({ config, variantConstants, storyExamples, cache })
678
+ )
679
+ );
680
+ results.push(...batchResults);
681
+ }
682
+
683
+ return results;
684
+ }
685
+
686
+ // =============================================================================
687
+ // Generate Registry
688
+ // =============================================================================
689
+
690
+ async function generateRegistry(): Promise<GenerateRegistryResult> {
691
+ const startTime = Date.now();
692
+
693
+ // Auto-discover components and blocks from filesystem
694
+ const COMPONENTS = await discoverComponents(componentsDir);
695
+ console.log(`\nDiscovered ${COMPONENTS.length} components`);
696
+
697
+ const BLOCKS = await discoverBlocks(blocksDir);
698
+ console.log(`Discovered ${BLOCKS.length} blocks`);
699
+
700
+ // Load cache
701
+ const cache = loadCache(cachePath);
702
+ if (!CLI_FLAGS.noCache) {
703
+ const cachedCount = Object.keys(cache.entries).length;
704
+ console.log(`Loaded cache with ${cachedCount} entries`);
705
+ }
706
+
707
+ // Build variant constants map for propTester parsing (components + blocks)
708
+ const variantConstants = new Map<string, string[]>();
709
+ for (const config of [...COMPONENTS, ...BLOCKS]) {
710
+ const constName = `SF_${toScreamingSnakeCase(config.name)}_VARIANTS`;
711
+ for (const [propName, propVariants] of Object.entries(config.variants)) {
712
+ if (typeof propVariants === "object" && propVariants !== null) {
713
+ variantConstants.set(
714
+ `${constName}.${propName}`,
715
+ Object.keys(propVariants)
716
+ );
717
+ }
718
+ }
719
+ }
720
+
721
+ // Load examples from demo files (sf-docs-astro)
722
+ console.log("\nLoading examples from demo files...");
723
+ const storyExamples = loadDemoExamples();
724
+
725
+ // Process components in parallel
726
+ console.log("\nProcessing components...");
727
+ const componentResults = await processComponentsInParallel(
728
+ COMPONENTS,
729
+ variantConstants,
730
+ storyExamples,
731
+ cache
732
+ );
733
+
734
+ // Process blocks in parallel
735
+ console.log("\nProcessing blocks...");
736
+ const blockResults = await processComponentsInParallel(
737
+ BLOCKS,
738
+ variantConstants,
739
+ storyExamples,
740
+ cache
741
+ );
742
+
743
+ // Combine and sort results by name for deterministic output
744
+ const allResults = [...componentResults, ...blockResults];
745
+ allResults.sort((a, b) => a.name.localeCompare(b.name));
746
+
747
+ // Build registry from results
748
+ const components: Record<string, ComponentSchema> = {};
749
+ const blocks: Record<string, BlockSchema> = {};
750
+ const byCategory: Record<string, string[]> = {};
751
+ const byType: Record<string, string[]> = { component: [], block: [] };
752
+ const componentColors = new Map<string, string[]>();
753
+ const newCache: CacheFile = {
754
+ version: CACHE_VERSION,
755
+ entries: {},
756
+ };
757
+
758
+ for (const result of componentResults) {
759
+ components[result.name] = result.schema;
760
+ componentColors.set(result.name, result.colors);
761
+ byType.component.push(result.name);
762
+
763
+ if (!byCategory[result.category]) {
764
+ byCategory[result.category] = [];
765
+ }
766
+ byCategory[result.category].push(result.name);
767
+
768
+ // Store in new cache
769
+ newCache.entries[result.name] = result.cacheEntry;
770
+ }
771
+
772
+ // Process block results and build BlockSchema with files and dependencies
773
+ for (const result of blockResults) {
774
+ const blockConfig = BLOCKS.find((b) => b.name === result.name)!;
775
+ const mainFilePath = join(blockConfig.sourceDir, blockConfig.sourceFile);
776
+
777
+ // Extract dependencies and files
778
+ const dependencies = extractBlockDependencies(mainFilePath);
779
+ const files = getBlockFiles(blockConfig.sourceDir, blockConfig.dirName);
780
+
781
+ blocks[result.name] = {
782
+ ...result.schema,
783
+ type: "block",
784
+ files,
785
+ dependencies,
786
+ };
787
+ componentColors.set(result.name, result.colors);
788
+ byType.block.push(result.name);
789
+
790
+ if (!byCategory[result.category]) {
791
+ byCategory[result.category] = [];
792
+ }
793
+ byCategory[result.category].push(result.name);
794
+
795
+ // Store in new cache
796
+ newCache.entries[result.name] = result.cacheEntry;
797
+ }
798
+
799
+ // Save updated cache
800
+ saveCache(newCache, cachePath, cacheDir);
801
+
802
+ // Add InputArea as a synthetic component (uses Input's variants but has its own dimensions)
803
+ // InputArea doesn't exist as a separate component file but needs registry metadata for Figma plugin
804
+ if (COMPONENT_STYLING_METADATA.InputArea) {
805
+ components.InputArea = {
806
+ name: "InputArea",
807
+ type: "component",
808
+ description:
809
+ "Multi-line textarea input with Input variants and InputArea-specific dimensions",
810
+ importPath: "@signalflare-ai/ui (synthetic - uses Input component)",
811
+ category: "Input",
812
+ props: {}, // Uses Input's props
813
+ styling: COMPONENT_STYLING_METADATA.InputArea,
814
+ examples: [],
815
+ colors: [],
816
+ };
817
+ // Add to Input category
818
+ if (!byCategory.Input) {
819
+ byCategory.Input = [];
820
+ }
821
+ // Don't add to byName search (it's a synthetic entry for Figma plugin only)
822
+ }
823
+
824
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(2);
825
+ const cached = allResults.filter((r) => r.cached).length;
826
+ const regenerated = allResults.length - cached;
827
+
828
+ console.log(
829
+ `\n✓ Completed in ${elapsed}s (${cached} cached, ${regenerated} regenerated)`
830
+ );
831
+
832
+ return {
833
+ registry: {
834
+ version: "1.0.0",
835
+ components,
836
+ blocks,
837
+ search: {
838
+ byCategory,
839
+ byName: allResults.map((r) => r.name),
840
+ byType,
841
+ },
842
+ },
843
+ componentColors,
844
+ };
845
+ }
846
+
847
+ // =============================================================================
848
+ // Main
849
+ // =============================================================================
850
+
851
+ function printHelp() {
852
+ console.log(`
853
+ Kumo Component Registry Generator
854
+
855
+ Usage:
856
+ bun run build:ai-metadata [options]
857
+
858
+ Options:
859
+ --inherited-props Include inherited HTML props (SLOW: adds ~15s)
860
+ Default: false (uses minimal static skip list)
861
+ --no-cache Force full regeneration, ignore cache
862
+ Default: false (uses hash-based cache)
863
+ --verbose Show detailed timing and processing info
864
+ Default: false
865
+ --help Show this help message
866
+
867
+ Examples:
868
+ bun run build:ai-metadata # Fast build with cache
869
+ bun run build:ai-metadata --no-cache # Full rebuild
870
+ bun run build:ai-metadata --inherited-props # Include all HTML props
871
+ bun run build:ai-metadata --verbose # Show detailed logs
872
+
873
+ Performance:
874
+ - Hash-based caching: Skips unchanged components (~1s incremental)
875
+ - Parallel processing: Processes 8 components concurrently
876
+ - Skip inherited props: Saves ~15s (47% of total time)
877
+
878
+ Target: <10s cold build, <1s incremental build
879
+ `);
880
+ }
881
+
882
+ async function main() {
883
+ // Handle --help flag
884
+ if (process.argv.includes("--help") || process.argv.includes("-h")) {
885
+ printHelp();
886
+ return;
887
+ }
888
+
889
+ console.log("Kumo Component Registry Generator");
890
+ console.log("==================================");
891
+ console.log(
892
+ `Flags: ${CLI_FLAGS.includeInheritedProps ? "inherited-props" : "skip-inherited"} | ${CLI_FLAGS.noCache ? "no-cache" : "cache"} | ${CLI_FLAGS.verbose ? "verbose" : "quiet"}`
893
+ );
894
+
895
+ const { registry, componentColors } = await generateRegistry();
896
+ const aiContext = generateAIContext(registry, componentColors);
897
+ const schemasContent = generateSchemasFile(registry);
898
+
899
+ // Ensure output directory exists
900
+ const outputDir = join(__dirname, "../../ai");
901
+ mkdirSync(outputDir, { recursive: true });
902
+
903
+ // Write JSON registry
904
+ const jsonPath = join(outputDir, "component-registry.json");
905
+ writeFileSync(jsonPath, JSON.stringify(registry, null, 2));
906
+ console.log(`\n✓ Generated ${jsonPath}`);
907
+
908
+ // Write markdown context for LLMs
909
+ const mdPath = join(outputDir, "component-registry.md");
910
+ writeFileSync(mdPath, aiContext);
911
+ console.log(`✓ Generated ${mdPath}`);
912
+
913
+ // Write Zod schemas for runtime validation
914
+ const schemasPath = join(outputDir, "schemas.ts");
915
+ writeFileSync(schemasPath, schemasContent);
916
+ console.log(`✓ Generated ${schemasPath}`);
917
+
918
+ // Also output to stdout for piping
919
+ console.log("\n--- Registry Summary ---");
920
+ console.log(`Components: ${registry.search.byType.component.length}`);
921
+ console.log(`Blocks: ${registry.search.byType.block.length}`);
922
+ console.log(`Total: ${registry.search.byName.length}`);
923
+ console.log(
924
+ `Categories: ${Object.keys(registry.search.byCategory).length} (${Object.keys(registry.search.byCategory).join(", ")})`
925
+ );
926
+ }
927
+
928
+ // Re-export types for external consumers
929
+ export type { ComponentType } from "./types.js";
930
+
931
+ main().catch(console.error);