@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,3046 @@
1
+ # SF Component Registry
2
+
3
+ > Auto-generated component metadata for AI/agent consumption.
4
+
5
+ ---
6
+
7
+ ### AiActions
8
+
9
+ Container for a row of AI message action buttons.
10
+
11
+ **Type:** component
12
+
13
+ **Import:** `import { AiActions } from "@signalflare-ai/ui";`
14
+
15
+ **Category:** Other
16
+
17
+ **Props:**
18
+
19
+ - `children`: ReactNode
20
+ - `className`: string
21
+ - `id`: string
22
+ - `lang`: string
23
+ - `title`: string
24
+
25
+ **Colors (sf tokens used):**
26
+
27
+ `text-sf-default`, `text-sf-subtle`
28
+
29
+ ---
30
+
31
+ ### AiAgentCard
32
+
33
+ `AiAgentCard` — compact card showing one agent's status in a commander dashboard. Displays: agent icon, name, status indicator, current task, model, duration, and tool call count. Clickable for selection.
34
+
35
+ **Type:** component
36
+
37
+ **Import:** `import { AiAgentCard } from "@signalflare-ai/ui";`
38
+
39
+ **Category:** Other
40
+
41
+ **Props:**
42
+
43
+ - `name`: string (required)
44
+ - `agentType`: string
45
+ Agent type ID — used for icon mapping.
46
+ - `status`: enum [default: idle]
47
+ - `"idle"`: Agent is idle, not yet started
48
+ - `"running"`: Agent is actively working
49
+ - `"completed"`: Agent finished successfully
50
+ - `"error"`: Agent encountered an error
51
+ - `modelId`: string
52
+ Model ID being used (e.g. "claude-haiku-3.5").
53
+ - `currentTask`: string
54
+ What the agent is currently doing.
55
+ - `duration`: number
56
+ Total elapsed duration in ms.
57
+ - `toolCallCount`: number
58
+ Number of tool calls made.
59
+ - `selected`: boolean
60
+ Whether this card is currently selected/active.
61
+ - `icon`: React.ElementType
62
+ Custom icon override.
63
+ - `size`: enum [default: md]
64
+ - `"sm"`: Compact card for dense grids
65
+ - `"md"`: Default card size
66
+ - `disabled`: boolean
67
+ - `type`: enum
68
+ - `value`: string | string[] | number
69
+ - `className`: string
70
+ - `id`: string
71
+ - `lang`: string
72
+ - `title`: string
73
+
74
+ **Colors (sf tokens used):**
75
+
76
+ `bg-sf-brand`, `bg-sf-danger`, `bg-sf-elevated`, `bg-sf-fill`, `bg-sf-recessed`, `bg-sf-success`, `bg-sf-tint`, `border-sf-line`, `ring-sf-ring`, `text-sf-brand`, `text-sf-danger`, `text-sf-default`, `text-sf-inactive`, `text-sf-subtle`, `text-sf-success`
77
+
78
+ ---
79
+
80
+ ### AiApproval
81
+
82
+ Approval card for tool calls and plan submissions. Maps to harness events: `tool_approval_required`, `plan_approval_required`, `plan_approved`.
83
+
84
+ **Type:** component
85
+
86
+ **Import:** `import { AiApproval } from "@signalflare-ai/ui";`
87
+
88
+ **Category:** Other
89
+
90
+ **Props:**
91
+
92
+ - `kind`: enum [default: tool]
93
+ - `"tool"`: Tool call approval
94
+ - `"plan"`: Plan approval
95
+ - `status`: enum [default: pending]
96
+ - `"pending"`: Awaiting user decision
97
+ - `"approved"`: Approved by user
98
+ - `"rejected"`: Rejected by user
99
+ - `title`: string (required)
100
+ Title text shown in the header.
101
+ - `description`: string
102
+ Optional description below the title.
103
+ - `icon`: React.ElementType
104
+ Custom icon. Defaults to shield (tool) or list (plan).
105
+ - `items`: AiApprovalItem[]
106
+ For plan approvals: list of steps/items in the plan. For tool approvals: can show tool name, parameters, etc.
107
+ - `approveLabel`: string
108
+ Label for the approve button. Default: `"Approve"`.
109
+ - `rejectLabel`: string
110
+ Label for the reject button. Default: `"Reject"`.
111
+ - `showFeedback`: boolean
112
+ Show a text input for rejection feedback. Default: `false`.
113
+ - `children`: ReactNode
114
+ - `className`: string
115
+ - `id`: string
116
+ - `lang`: string
117
+
118
+ **Colors (sf tokens used):**
119
+
120
+ `bg-sf-base`, `bg-sf-brand`, `bg-sf-elevated`, `border-sf-line`, `border-sf-ring`, `text-sf-brand`, `text-sf-danger`, `text-sf-default`, `text-sf-inactive`, `text-sf-subtle`, `text-sf-success`
121
+
122
+ ---
123
+
124
+ ### AiCodeBlock
125
+
126
+ Displays a code block with monospace formatting and an optional copy button. Does not include a syntax highlighter — avoids the heavy `react-syntax-highlighter` dependency. Wrap with `AiCodeBlockCopyButton` for clipboard support.
127
+
128
+ **Type:** component
129
+
130
+ **Import:** `import { AiCodeBlock } from "@signalflare-ai/ui";`
131
+
132
+ **Category:** Other
133
+
134
+ **Props:**
135
+
136
+ - `code`: string (required)
137
+ The raw code string to display and make copyable.
138
+ - `language`: string
139
+ Language identifier for syntax highlighting (display only, no highlighting applied).
140
+ - `showLineNumbers`: boolean
141
+ Show line numbers.
142
+ - `children`: ReactNode
143
+ - `className`: string
144
+ - `id`: string
145
+ - `lang`: string
146
+ - `title`: string
147
+
148
+ **Colors (sf tokens used):**
149
+
150
+ `bg-sf-recessed`, `border-sf-line`, `text-sf-default`, `text-sf-inactive`, `text-sf-subtle`
151
+
152
+ ---
153
+
154
+ ### AiConversation
155
+
156
+ Outer scroll container for a conversation. Sticks to the bottom as new messages are added. Pair with `AiConversationContent` and optionally `AiConversationScrollButton`.
157
+
158
+ **Type:** component
159
+
160
+ **Import:** `import { AiConversation } from "@signalflare-ai/ui";`
161
+
162
+ **Category:** Other
163
+
164
+ **Props:**
165
+
166
+ - `children`: ReactNode
167
+ - `className`: string
168
+ - `id`: string
169
+ - `lang`: string
170
+ - `title`: string
171
+
172
+ ---
173
+
174
+ ### AiInfoBanner
175
+
176
+ Inline conversation banner for system notices. Renders as a compact, horizontally centered divider-like notice rather than a chat bubble. Maps to harness events: `error`, `info`, `mode_changed`, `model_changed`.
177
+
178
+ **Type:** component
179
+
180
+ **Import:** `import { AiInfoBanner } from "@signalflare-ai/ui";`
181
+
182
+ **Category:** Other
183
+
184
+ **Props:**
185
+
186
+ - `level`: enum [default: info]
187
+ - `"info"`: Informational notice
188
+ - `"error"`: Error notice
189
+ - `"change"`: State change notice (model/mode switch)
190
+ - `icon`: React.ElementType
191
+ Custom icon override.
192
+ - `children`: ReactNode
193
+ - `className`: string
194
+ - `id`: string
195
+ - `lang`: string
196
+ - `title`: string
197
+
198
+ **Colors (sf tokens used):**
199
+
200
+ `border-sf-danger`, `border-sf-info`, `border-sf-line`, `text-sf-danger`, `text-sf-info`, `text-sf-subtle`
201
+
202
+ ---
203
+
204
+ ### AiLoader
205
+
206
+ Spinning radial loader for AI streaming states.
207
+
208
+ **Type:** component
209
+
210
+ **Import:** `import { AiLoader } from "@signalflare-ai/ui";`
211
+
212
+ **Category:** Other
213
+
214
+ **Props:**
215
+
216
+ - `children`: ReactNode
217
+ - `className`: string
218
+ - `id`: string
219
+ - `lang`: string
220
+ - `title`: string
221
+ - `size`: enum [default: base]
222
+ - `"sm"`: Small — 12px
223
+ - `"base"`: Default — 16px
224
+ - `"lg"`: Large — 20px
225
+
226
+ **Colors (sf tokens used):**
227
+
228
+ `text-sf-subtle`
229
+
230
+ ---
231
+
232
+ ### AiMessage
233
+
234
+ Root message container. Sets layout, group class, and role context.
235
+
236
+ **Type:** component
237
+
238
+ **Import:** `import { AiMessage } from "@signalflare-ai/ui";`
239
+
240
+ **Category:** Other
241
+
242
+ **Props:**
243
+
244
+ - `from`: enum (required) [default: assistant]
245
+ - `"user"`: User message — right-aligned with max width
246
+ - `"assistant"`: Assistant message — full width left-aligned
247
+ - `"system"`: System message — full width
248
+ - `children`: ReactNode
249
+ - `className`: string
250
+ - `id`: string
251
+ - `lang`: string
252
+ - `title`: string
253
+
254
+ **Colors (sf tokens used):**
255
+
256
+ `bg-sf-control`, `bg-sf-overlay`, `bg-sf-tint`, `text-sf-default`, `text-sf-subtle`
257
+
258
+ ---
259
+
260
+ ### AiMissionHeader
261
+
262
+ `AiMissionHeader` — top bar for the Commander dashboard. Shows: mission title, progress bar (from task list), agent count, live elapsed time, token usage, and an abort button while running.
263
+
264
+ **Type:** component
265
+
266
+ **Import:** `import { AiMissionHeader } from "@signalflare-ai/ui";`
267
+
268
+ **Category:** Other
269
+
270
+ **Props:**
271
+
272
+ - `title`: string
273
+ The mission goal or title.
274
+ - `taskList`: AgentTaskList
275
+ Task list for progress calculation.
276
+ - `usage`: AgentUsage
277
+ Token/cost usage summary.
278
+ - `activeAgentCount`: number
279
+ Number of agents currently active.
280
+ - `totalAgentCount`: number
281
+ Total number of agents that have run or are running.
282
+ - `startedAt`: number
283
+ Wall-clock ms when the mission started.
284
+ - `endedAt`: number
285
+ Wall-clock ms when the mission ended. Undefined while still running.
286
+ - `isRunning`: boolean
287
+ Whether the mission is currently running.
288
+ - `variant`: enum [default: default]
289
+ - `"default"`: Full header with all stats
290
+ - `"compact"`: Single-row compact header
291
+ - `className`: string
292
+ - `id`: string
293
+ - `lang`: string
294
+ - `children`: ReactNode
295
+
296
+ **Colors (sf tokens used):**
297
+
298
+ `bg-sf-base`, `bg-sf-brand`, `bg-sf-danger`, `bg-sf-fill`, `border-sf-line`, `ring-sf-ring`, `text-sf-brand`, `text-sf-danger`, `text-sf-default`, `text-sf-subtle`, `text-sf-success`
299
+
300
+ ---
301
+
302
+ ### AiQuestion
303
+
304
+ Agent question card. Renders when the agent uses the `ask_user` built-in tool and needs a response before continuing. Maps to harness event: `ask_question`.
305
+
306
+ **Type:** component
307
+
308
+ **Import:** `import { AiQuestion } from "@signalflare-ai/ui";`
309
+
310
+ **Category:** Other
311
+
312
+ **Props:**
313
+
314
+ - `questionId`: string (required)
315
+ Unique identifier for this question (maps to harness `questionId`).
316
+ - `question`: string (required)
317
+ The question text.
318
+ - `header`: string
319
+ Optional header/context label.
320
+ - `status`: enum [default: pending]
321
+ - `"pending"`: Waiting for answer
322
+ - `"answered"`: User has answered
323
+ - `options`: AiQuestionOption[]
324
+ Available choice options.
325
+ - `allowCustom`: boolean
326
+ Allow freeform text input (custom answer). Default: `true`. When options are provided, this adds a text field below them.
327
+ - `icon`: React.ElementType
328
+ Custom icon for the question header.
329
+ - `answeredWith`: string
330
+ The answer that was submitted (shown when `status="answered"`).
331
+ - `children`: ReactNode
332
+ - `className`: string
333
+ - `id`: string
334
+ - `lang`: string
335
+
336
+ **Colors (sf tokens used):**
337
+
338
+ `bg-sf-base`, `bg-sf-brand`, `bg-sf-tint`, `border-sf-brand`, `border-sf-line`, `border-sf-ring`, `text-sf-brand`, `text-sf-default`, `text-sf-inactive`, `text-sf-inverse`, `text-sf-subtle`, `text-sf-success`
339
+
340
+ ---
341
+
342
+ ### AiReasoning
343
+
344
+ Collapsible reasoning block. Supports three display variants: - `"default"` — expandable card with auto-open on stream start - `"inline"` — compact single-line with left accent border - `"minimal"` — pill-shaped status badge
345
+
346
+ **Type:** component
347
+
348
+ **Import:** `import { AiReasoning } from "@signalflare-ai/ui";`
349
+
350
+ **Category:** Other
351
+
352
+ **Props:**
353
+
354
+ - `variant`: enum [default: default]
355
+ - `"default"`: Expandable card with collapsible reasoning text and duration
356
+ - `"inline"`: Compact single-line display with left accent border
357
+ - `"minimal"`: Pill-shaped status badge
358
+ - `isStreaming`: boolean
359
+ Whether reasoning is currently streaming.
360
+ - `duration`: number
361
+ Duration in seconds (passed in or self-tracked when streaming).
362
+ - `defaultExpanded`: boolean
363
+ Default expanded state.
364
+ - `open`: boolean
365
+ Controlled open state.
366
+ - `autoCloseDelay`: number
367
+ Delay in ms before auto-closing after streaming ends. Set to 0 to disable.
368
+ - `icon`: React.ElementType
369
+ Custom icon override. Defaults to `SparkleIcon` (streaming) or `BrainIcon` (done). Use to distinguish observation/reflection blocks from standard reasoning.
370
+ - `label`: string
371
+ Custom label override. Defaults to `"Thinking..."` (streaming) or `"Reasoning"` (done). Use to label observational memory blocks: `"Observing..."`, `"Reflecting..."`, etc.
372
+ - `streamingLabel`: string
373
+ Custom streaming label. When provided, used instead of `label` while `isStreaming` is true. Falls back to `label`, then to the default `"Thinking..."`.
374
+ - `className`: string
375
+ - `id`: string
376
+ - `lang`: string
377
+ - `title`: string
378
+ - `children`: ReactNode
379
+
380
+ **Colors (sf tokens used):**
381
+
382
+ `bg-sf-tint`, `border-sf-line`, `text-sf-subtle`
383
+
384
+ ---
385
+
386
+ ### AiResponse
387
+
388
+ Renders AI-generated markdown using Streamdown. Supports streaming animation, syntax-highlighted code, tables, and more. Pass `isAnimating={true}` while streaming and `false` once complete to get character-by-character reveal animation.
389
+
390
+ **Type:** component
391
+
392
+ **Import:** `import { AiResponse } from "@signalflare-ai/ui";`
393
+
394
+ **Category:** Other
395
+
396
+ **Props:**
397
+
398
+ - `className`: string
399
+ Additional CSS classes
400
+ - `children`: ReactNode
401
+ Child elements
402
+
403
+ **Colors (sf tokens used):**
404
+
405
+ `text-sf-default`
406
+
407
+ ---
408
+
409
+ ### AiShimmer
410
+
411
+ AiShimmer component
412
+
413
+ **Type:** component
414
+
415
+ **Import:** `import { AiShimmer } from "@signalflare-ai/ui";`
416
+
417
+ **Category:** Other
418
+
419
+ **Props:**
420
+
421
+ - `children`: string (required)
422
+ Text content to animate.
423
+ - `as`: React.ElementType
424
+ HTML element or component to render as.
425
+ - `className`: string
426
+ Additional CSS classes merged via `cn()`.
427
+ - `duration`: number
428
+ Animation duration in seconds.
429
+ - `spread`: number
430
+ Shimmer width multiplier relative to text length.
431
+
432
+ ---
433
+
434
+ ### AiStatusBadge
435
+
436
+ Compact pill-shaped badge showing an icon, label, and a status indicator. Used by minimal variants of AiToolCall and AiReasoning.
437
+
438
+ **Type:** component
439
+
440
+ **Import:** `import { AiStatusBadge } from "@signalflare-ai/ui";`
441
+
442
+ **Category:** Other
443
+
444
+ **Props:**
445
+
446
+ - `icon`: React.ElementType
447
+ Icon component rendered on the left.
448
+ - `label`: string (required)
449
+ Label text displayed in the badge.
450
+ - `status`: enum [default: idle]
451
+ - `"idle"`: Default idle state — no status icon shown
452
+ - `"running"`: Actively running — spinner icon shown
453
+ - `"success"`: Completed successfully — check icon shown
454
+ - `"error"`: Failed with an error — X icon shown
455
+ - `info`: string
456
+ Additional info text (e.g. "2/3") shown after the label.
457
+ - `children`: ReactNode
458
+ - `className`: string
459
+ - `id`: string
460
+ - `lang`: string
461
+ - `title`: string
462
+
463
+ **Colors (sf tokens used):**
464
+
465
+ `bg-sf-tint`, `text-sf-brand`, `text-sf-danger`, `text-sf-subtle`, `text-sf-success`
466
+
467
+ ---
468
+
469
+ ### AiStreamingText
470
+
471
+ AiStreamingText component
472
+
473
+ **Type:** component
474
+
475
+ **Import:** `import { AiStreamingText } from "@signalflare-ai/ui";`
476
+
477
+ **Category:** Other
478
+
479
+ **Props:**
480
+
481
+ - `className`: string
482
+ Additional CSS classes
483
+ - `children`: ReactNode
484
+ Child elements
485
+
486
+ ---
487
+
488
+ ### AiSubagent
489
+
490
+ Collapsible wrapper for nested subagent activity. Shows the subagent name, status, model, and duration in a header, with all subagent output (text, tool calls, etc.) in a collapsible body. Maps to harness events: `subagent_start`, `subagent_text_delta`, `subagent_tool_start`, `subagent_tool_end`, `subagent_end`, `subagent_model_changed`.
491
+
492
+ **Type:** component
493
+
494
+ **Import:** `import { AiSubagent } from "@signalflare-ai/ui";`
495
+
496
+ **Category:** Other
497
+
498
+ **Props:**
499
+
500
+ - `agentType`: string
501
+ Subagent type ID (e.g. `"explore"`, `"execute"`).
502
+ - `name`: string
503
+ Human-readable name for this subagent.
504
+ - `status`: enum [default: running]
505
+ - `"running"`: Subagent is actively processing
506
+ - `"completed"`: Subagent finished successfully
507
+ - `"error"`: Subagent encountered an error
508
+ - `modelId`: string
509
+ Current model ID being used (e.g. `"claude-haiku-3.5"`).
510
+ - `duration`: number
511
+ Duration in milliseconds.
512
+ - `icon`: React.ElementType
513
+ Custom icon. Defaults to `RobotIcon`.
514
+ - `defaultExpanded`: boolean
515
+ Whether the subagent content is expanded by default.
516
+ - `open`: boolean
517
+ Controlled open state.
518
+ - `children`: ReactNode
519
+ - `className`: string
520
+ - `id`: string
521
+ - `lang`: string
522
+ - `title`: string
523
+
524
+ **Colors (sf tokens used):**
525
+
526
+ `bg-sf-tint`, `text-sf-brand`, `text-sf-danger`, `text-sf-default`, `text-sf-subtle`, `text-sf-success`
527
+
528
+ ---
529
+
530
+ ### AiSuggestions
531
+
532
+ Horizontally scrollable container for suggestion pills. Position it relative to your prompt input (e.g. `bottom-full`).
533
+
534
+ **Type:** component
535
+
536
+ **Import:** `import { AiSuggestions } from "@signalflare-ai/ui";`
537
+
538
+ **Category:** Other
539
+
540
+ **Props:**
541
+
542
+ - `children`: ReactNode
543
+ - `className`: string
544
+ - `id`: string
545
+ - `lang`: string
546
+ - `title`: string
547
+
548
+ ---
549
+
550
+ ### AiTaskList
551
+
552
+ Task progress list. Renders structured tasks from the harness `task_write` tool. Typically rendered inside the `PromptInputBackLayer` or inline in conversation. Maps to harness event: `task_updated`.
553
+
554
+ **Type:** component
555
+
556
+ **Import:** `import { AiTaskList } from "@signalflare-ai/ui";`
557
+
558
+ **Category:** Other
559
+
560
+ **Props:**
561
+
562
+ - `tasks`: AiTaskItem[] (required)
563
+ List of tasks.
564
+ - `title`: string
565
+ Optional title above the task list.
566
+ - `icon`: React.ElementType
567
+ Custom icon for the title area.
568
+ - `showProgress`: boolean
569
+ Show a progress summary (e.g. "3 / 7 done"). Default: `true`.
570
+ - `children`: ReactNode
571
+ - `className`: string
572
+ - `id`: string
573
+ - `lang`: string
574
+
575
+ **Colors (sf tokens used):**
576
+
577
+ `bg-sf-brand`, `bg-sf-danger`, `bg-sf-subtle`, `bg-sf-tint`, `bg-sf-warning`, `text-sf-brand`, `text-sf-default`, `text-sf-subtle`, `text-sf-success`
578
+
579
+ ---
580
+
581
+ ### AiTimeline
582
+
583
+ `AiTimeline` — horizontal swim-lane timeline for commander-level orchestration. Displays multiple `AiTimelineLane` children on a shared time axis. Supports live updating (a "now" marker follows the live edge), panning, and zoom via `pixelsPerSecond`.
584
+
585
+ **Type:** component
586
+
587
+ **Import:** `import { AiTimeline } from "@signalflare-ai/ui";`
588
+
589
+ **Category:** Other
590
+
591
+ **Props:**
592
+
593
+ - `timeOrigin`: number
594
+ Wall-clock ms for the timeline origin (t=0). Defaults to the startMs of the first block across all lanes.
595
+ - `pixelsPerSecond`: number
596
+ Pixels per second of elapsed time. Controls horizontal zoom level.
597
+ - `showNowMarker`: boolean
598
+ Whether to show a pulsing "now" marker at the live edge.
599
+ - `nowMs`: number
600
+ Current timestamp in ms. Used to render the "now" marker and open-ended block widths. Pass a stable `useState` value to prevent hydration shifts. When omitted, `Date.now()` is called at render time (fine for live views driven by a ticking parent, not suitable for SSR).
601
+ - `density`: enum [default: comfortable]
602
+ - `"comfortable"`: Taller lanes with more padding
603
+ - `"compact"`: Tight lanes for dense views
604
+ - `children`: ReactNode
605
+ Children should be `AiTimelineLane` components.
606
+ - `className`: string
607
+ - `id`: string
608
+ - `lang`: string
609
+ - `title`: string
610
+
611
+ **Colors (sf tokens used):**
612
+
613
+ `bg-sf-base`, `bg-sf-brand`, `bg-sf-danger`, `bg-sf-elevated`, `bg-sf-fill`, `bg-sf-info`, `bg-sf-line`, `bg-sf-recessed`, `bg-sf-warning`, `border-sf-line`, `ring-sf-ring`, `text-sf-brand`, `text-sf-danger`, `text-sf-default`, `text-sf-inactive`, `text-sf-inverse`, `text-sf-strong`, `text-sf-subtle`, `text-sf-success`
614
+
615
+ ---
616
+
617
+ ### AiToolCall
618
+
619
+ Renders a single tool call. Supports three display variants: - `"default"` — expandable card with collapsible input/output - `"inline"` — compact single-line with left accent border - `"minimal"` — pill-shaped status badge
620
+
621
+ **Type:** component
622
+
623
+ **Import:** `import { AiToolCall } from "@signalflare-ai/ui";`
624
+
625
+ **Category:** Other
626
+
627
+ **Props:**
628
+
629
+ - `variant`: enum [default: default]
630
+ - `"default"`: Expandable card with collapsible input/output sections
631
+ - `"inline"`: Compact single-line display with left accent border
632
+ - `"minimal"`: Pill-shaped status badge
633
+ - `duration`: number
634
+ Duration in milliseconds.
635
+ - `summary`: string
636
+ Summary text shown alongside the tool name.
637
+ - `icon`: React.ElementType
638
+ Custom icon override.
639
+ - `approvalState`: enum
640
+ Approval state for tools requiring confirmation.
641
+ - `defaultExpanded`: boolean
642
+ Default expanded state for the collapsible.
643
+ - `className`: string
644
+ - `id`: string
645
+ - `lang`: string
646
+ - `title`: string
647
+ - `children`: ReactNode
648
+
649
+ **Colors (sf tokens used):**
650
+
651
+ `bg-sf-brand`, `bg-sf-danger`, `bg-sf-line`, `bg-sf-recessed`, `bg-sf-success`, `bg-sf-tint`, `bg-sf-warning`, `border-sf-elevated`, `border-sf-line`, `text-sf-brand`, `text-sf-danger`, `text-sf-subtle`, `text-sf-success`, `text-sf-warning`
652
+
653
+ ---
654
+
655
+ ### AiUsageBar
656
+
657
+ Compact token usage display bar. Shows input/output token counts, total, optional cost, and model identifier. Maps to harness event: `usage_update`.
658
+
659
+ **Type:** component
660
+
661
+ **Import:** `import { AiUsageBar } from "@signalflare-ai/ui";`
662
+
663
+ **Category:** Other
664
+
665
+ **Props:**
666
+
667
+ - `inputTokens`: number
668
+ Input/prompt token count.
669
+ - `outputTokens`: number
670
+ Output/completion token count.
671
+ - `totalTokens`: number
672
+ Total token count. Computed from input + output if not provided.
673
+ - `cost`: number
674
+ Estimated cost in USD.
675
+ - `modelId`: string
676
+ Model ID being used (shown as label).
677
+ - `icon`: React.ElementType
678
+ Custom icon. Defaults to `LightningIcon`.
679
+ - `children`: ReactNode
680
+ - `className`: string
681
+ - `id`: string
682
+ - `lang`: string
683
+ - `title`: string
684
+
685
+ **Colors (sf tokens used):**
686
+
687
+ `text-sf-inactive`, `text-sf-subtle`
688
+
689
+ ---
690
+
691
+ ### Badge
692
+
693
+ Small status label for categorizing or highlighting content. Supports icons, loading state, status dots, dismiss, tooltip, and interactive (button/link) modes.
694
+
695
+ **Type:** component
696
+
697
+ **Import:** `import { Badge } from "@signalflare-ai/ui";`
698
+
699
+ **Category:** Display
700
+
701
+ **Props:**
702
+
703
+ - `variant`: enum [default: primary]
704
+ - `"primary"`: Default high-emphasis badge for important labels
705
+ - `"secondary"`: Subtle badge for secondary information
706
+ - `"destructive"`: Error or danger state indicator
707
+ - `"outline"`: Bordered badge with transparent background
708
+ - `"beta"`: Indicates beta or experimental features
709
+ - `"success"`: Positive status indicator
710
+ - `"warning"`: Caution or attention indicator
711
+ - `"info"`: Informational badge
712
+ - `"ghost"`: Text-only badge with no background or border
713
+ - `className`: string
714
+ Additional CSS classes merged via `cn()`.
715
+ - `children`: ReactNode
716
+ Content rendered inside the badge.
717
+ - `icon`: React.ElementType
718
+ Icon component rendered alongside the text.
719
+ - `iconPosition`: enum
720
+ Position of the icon relative to the text.
721
+ - `loading`: boolean
722
+ Shows a loading spinner, replacing the icon slot.
723
+ - `dot`: enum
724
+ Renders a small colored status dot before the text.
725
+ - `tooltip`: ReactNode
726
+ Wraps the badge in a Tooltip with this content. Requires a TooltipProvider ancestor.
727
+ - `href`: string
728
+
729
+ **Colors (sf tokens used):**
730
+
731
+ `bg-sf-brand`, `bg-sf-contrast`, `bg-sf-danger`, `bg-sf-fill`, `bg-sf-info`, `bg-sf-subtle`, `bg-sf-success`, `bg-sf-warning`, `border-sf-brand`, `border-sf-fill`, `text-sf-default`, `text-sf-inverse`, `text-sf-link`, `text-sf-strong`, `text-sf-success`, `text-sf-warning`
732
+
733
+ ---
734
+
735
+ ### Banner
736
+
737
+ Full-width message bar for informational, warning, or error notices.
738
+
739
+ **Type:** component
740
+
741
+ **Import:** `import { Banner } from "@signalflare-ai/ui";`
742
+
743
+ **Category:** Feedback
744
+
745
+ **Props:**
746
+
747
+ - `icon`: ReactNode
748
+ Icon element rendered before the banner text (e.g. from `@phosphor-icons/react`).
749
+ - `text`: string
750
+ - `children`: ReactNode
751
+ Banner message content. Accepts strings or custom React elements.
752
+ - `variant`: enum [default: default]
753
+ - `"default"`: Informational banner for general messages
754
+ - `"alert"`: Warning banner for cautionary messages
755
+ - `"error"`: Error banner for critical issues
756
+ - `className`: string
757
+ Additional CSS classes merged via `cn()`.
758
+
759
+ **Colors (sf tokens used):**
760
+
761
+ `bg-sf-danger`, `bg-sf-danger-tint`, `bg-sf-info`, `bg-sf-info-tint`, `bg-sf-warning`, `bg-sf-warning-tint`, `border-sf-danger`, `border-sf-info`, `border-sf-warning`, `text-sf-danger`, `text-sf-link`, `text-sf-warning`
762
+
763
+ ---
764
+
765
+ ### Breadcrumbs
766
+
767
+ Breadcrumbs component
768
+
769
+ **Type:** component
770
+
771
+ **Import:** `import { Breadcrumbs } from "@signalflare-ai/ui";`
772
+
773
+ **Category:** Display
774
+
775
+ **Props:**
776
+
777
+ - `size`: enum [default: base]
778
+ - `"sm"`: Compact breadcrumbs for dense UIs
779
+ - `"base"`: Default breadcrumbs size
780
+ - `children`: ReactNode
781
+ - `className`: string
782
+ Additional CSS classes merged via `cn()`.
783
+
784
+ **Colors (sf tokens used):**
785
+
786
+ `text-sf-inactive`, `text-sf-subtle`, `text-sf-success`
787
+
788
+ **Sub-Components:**
789
+
790
+ This is a compound component. Use these sub-components:
791
+
792
+ #### Breadcrumbs.Link
793
+
794
+ Link sub-component
795
+
796
+ Props:
797
+ - `href`: string (required)
798
+ - `icon`: React.ReactNode
799
+
800
+ #### Breadcrumbs.Current
801
+
802
+ Current sub-component
803
+
804
+ Props:
805
+ - `loading`: boolean
806
+ - `icon`: React.ReactNode
807
+
808
+ #### Breadcrumbs.Separator
809
+
810
+ Separator sub-component
811
+
812
+ #### Breadcrumbs.Clipboard
813
+
814
+ Clipboard sub-component
815
+
816
+ Props:
817
+ - `text`: string (required)
818
+
819
+
820
+ ---
821
+
822
+ ### Button
823
+
824
+ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and loading state.
825
+
826
+ **Type:** component
827
+
828
+ **Import:** `import { Button } from "@signalflare-ai/ui";`
829
+
830
+ **Category:** Action
831
+
832
+ **Props:**
833
+
834
+ - `shape`: enum [default: base]
835
+ - `"base"`: Default rectangular button shape
836
+ - `"square"`: Square button for icon-only actions
837
+ - `"circle"`: Circular button for icon-only actions
838
+ - `size`: enum [default: base]
839
+ - `"xs"`: Extra small button for compact UIs
840
+ - `"sm"`: Small button for secondary actions
841
+ - `"base"`: Default button size
842
+ - `"lg"`: Large button for primary CTAs
843
+ - `variant`: enum [default: secondary]
844
+ - `"primary"`: High-emphasis button for primary actions
845
+ - `"secondary"`: Default button style for most actions
846
+ - `"ghost"`: Minimal button with no background
847
+ - `"destructive"`: Danger button for destructive actions like delete
848
+ - `"secondary-destructive"`: Secondary button with destructive text for less prominent dangerous actions
849
+ - `"outline"`: Bordered button with transparent background
850
+
851
+ **State Classes:**
852
+ - `"primary"`:
853
+ - `hover`: `hover:bg-sf-brand-hover`
854
+ - `focus`: `focus:bg-sf-brand-hover`
855
+ - `disabled`: `disabled:bg-sf-brand/50`
856
+ - `"secondary"`:
857
+ - `not-disabled`: `not-disabled:hover:border-secondary! not-disabled:hover:bg-sf-control`
858
+ - `disabled`: `disabled:bg-sf-control/50 disabled:!text-sf-default/70`
859
+ - `data-state`: `data-[state=open]:bg-sf-control`
860
+ - `"ghost"`:
861
+ - `hover`: `hover:bg-sf-tint`
862
+ - `"destructive"`:
863
+ - `hover`: `hover:bg-sf-danger/70`
864
+ - `"secondary-destructive"`:
865
+ - `not-disabled`: `not-disabled:hover:border-secondary! not-disabled:hover:bg-sf-control`
866
+ - `disabled`: `disabled:bg-sf-control/50 disabled:!text-sf-danger/70`
867
+ - `data-state`: `data-[state=open]:bg-sf-control`
868
+ - `children`: ReactNode
869
+ - `className`: string
870
+ - `icon`: ReactNode
871
+ Icon from `@phosphor-icons/react` or a React element. Rendered before children.
872
+ - `loading`: boolean
873
+ Shows a loading spinner and disables interaction.
874
+ - `id`: string
875
+ - `lang`: string
876
+ - `title`: string
877
+ - `disabled`: boolean
878
+ - `name`: string
879
+ - `type`: enum
880
+ - `value`: string | string[] | number
881
+
882
+ **Colors (sf tokens used):**
883
+
884
+ `bg-sf-base`, `bg-sf-brand`, `bg-sf-brand-hover`, `bg-sf-control`, `bg-sf-danger`, `bg-sf-tint`, `ring-sf-line`, `ring-sf-ring`, `text-sf-danger`, `text-sf-default`, `text-sf-subtle`
885
+
886
+ ---
887
+
888
+ ### Checkbox
889
+
890
+ Checkbox component
891
+
892
+ **Type:** component
893
+
894
+ **Import:** `import { Checkbox } from "@signalflare-ai/ui";`
895
+
896
+ **Category:** Input
897
+
898
+ **Props:**
899
+
900
+ - `variant`: enum [default: default]
901
+ - `"default"`: Default checkbox appearance
902
+ - `"error"`: Error state for validation failures
903
+
904
+ **State Classes:**
905
+ - `"default"`:
906
+ - `focus`: `[&:focus-within>span]:ring-sf-ring`
907
+ - `hover`: `[&:hover>span]:ring-sf-ring`
908
+ - `label`: ReactNode
909
+ Label content for the checkbox (enables built-in Field wrapper) - can be a string or any React node
910
+ - `labelTooltip`: ReactNode
911
+ Tooltip content to display next to the label via an info icon
912
+ - `controlFirst`: boolean
913
+ When true (default), checkbox appears before label. When false, label appears before checkbox.
914
+ - `checked`: boolean
915
+ Whether the checkbox is checked (controlled)
916
+ - `indeterminate`: boolean
917
+ Whether the checkbox is in indeterminate state
918
+ - `disabled`: boolean
919
+ Whether the checkbox is disabled
920
+ - `name`: string
921
+ Name for form submission
922
+ - `required`: boolean
923
+ Whether the field is required
924
+ - `className`: string
925
+ Additional class name
926
+ - `onValueChange`: (checked: boolean) => void
927
+ Callback when checkbox value changes
928
+
929
+ **Colors (sf tokens used):**
930
+
931
+ `bg-sf-base`, `bg-sf-contrast`, `border-sf-line`, `ring-sf-contrast`, `ring-sf-danger`, `ring-sf-line`, `ring-sf-ring`, `text-sf-danger`, `text-sf-default`, `text-sf-inverse`, `text-sf-subtle`
932
+
933
+ **Styling:**
934
+
935
+ - **Dimensions:** `h-4 w-4`
936
+ - **Border Radius:** `rounded-sm`
937
+ - **Base Tokens:** `bg-sf-base`, `ring-sf-line`
938
+ - **States:**
939
+ - `checked`: `bg-sf-contrast`, `text-sf-inverse`
940
+ - `indeterminate`: `bg-sf-contrast`, `text-sf-inverse`
941
+ - `error`: `ring-sf-danger`
942
+ - `hover`: `ring-sf-ring`
943
+ - `focus`: `ring-sf-ring`
944
+ - `disabled`: `opacity-50`, `cursor-not-allowed`
945
+ - **Icons:**
946
+ - `ph-check` (checked) size 12
947
+ - `ph-minus` (indeterminate) size 12
948
+
949
+ **Sub-Components:**
950
+
951
+ This is a compound component. Use these sub-components:
952
+
953
+ #### Checkbox.Item
954
+
955
+ Item sub-component
956
+
957
+ #### Checkbox.Group
958
+
959
+ Group sub-component
960
+
961
+ Props:
962
+ - `legend`: string (required)
963
+ - `children`: ReactNode (required)
964
+ - `error`: string
965
+ - `description`: ReactNode
966
+ - `value`: string[]
967
+ - `allValues`: string[]
968
+ - `disabled`: boolean
969
+ - `controlFirst`: boolean
970
+ - `className`: string
971
+
972
+
973
+ ---
974
+
975
+ ### ClipboardText
976
+
977
+ Read-only text field with a one-click copy-to-clipboard button.
978
+
979
+ **Type:** component
980
+
981
+ **Import:** `import { ClipboardText } from "@signalflare-ai/ui";`
982
+
983
+ **Category:** Action
984
+
985
+ **Props:**
986
+
987
+ - `size`: enum [default: lg]
988
+ - `"sm"`: Small clipboard text for compact UIs
989
+ - `"base"`: Default clipboard text size
990
+ - `"lg"`: Large clipboard text for prominent display
991
+ - `text`: string (required)
992
+ The text to display and copy to clipboard.
993
+ - `className`: string
994
+ Additional CSS classes merged via `cn()`.
995
+ - `tooltip`: object
996
+ Tooltip config. Shows tooltip on hover, anchored toast on click.
997
+ - `labels`: object
998
+ Accessible labels for i18n.
999
+
1000
+ **Colors (sf tokens used):**
1001
+
1002
+ `bg-sf-base`, `border-sf-line`, `outline-sf-fill`, `text-sf-default`
1003
+
1004
+ **Styling:**
1005
+
1006
+ - **Base Tokens:** `bg-sf-base`, `text-sf-default`, `ring-sf-line`, `border-sf-fill`
1007
+ - **States:**
1008
+ - `input`: `bg-sf-control`, `text-sf-default`, `ring-sf-line`
1009
+ - `text`: `bg-sf-base`, `font-mono`
1010
+ - `button`: `border-sf-fill`
1011
+ - **Icons:**
1012
+ - `ph-clipboard` (default) size 16
1013
+ - `ph-check` (copied) size 16
1014
+ - **Input Styles:**
1015
+ - Base: `bg-sf-control text-sf-default ring ring-sf-line`
1016
+ - Sizes:
1017
+ - `xs`: `h-5 gap-1 rounded-sm px-1.5 text-xs`
1018
+ - `sm`: `h-6.5 gap-1 rounded-md px-2 text-xs`
1019
+ - `base`: `h-9 gap-1.5 rounded-lg px-3 text-base`
1020
+ - `lg`: `h-10 gap-2 rounded-lg px-4 text-base`
1021
+ - **Size Variants:**
1022
+ - `sm`:
1023
+ - Height: 26px
1024
+ - Classes: `text-xs`
1025
+ - Button Size: `sm`
1026
+ - Dimensions:
1027
+ - paddingX: 8
1028
+ - gap: 1
1029
+ - borderRadius: 6
1030
+ - fontSize: 12
1031
+ - `base`:
1032
+ - Height: 36px
1033
+ - Classes: `text-sm`
1034
+ - Button Size: `base`
1035
+ - Dimensions:
1036
+ - paddingX: 12
1037
+ - gap: 6
1038
+ - borderRadius: 8
1039
+ - fontSize: 14
1040
+ - `lg`:
1041
+ - Height: 40px
1042
+ - Classes: `text-sm`
1043
+ - Button Size: `lg`
1044
+ - Dimensions:
1045
+ - paddingX: 16
1046
+ - gap: 8
1047
+ - borderRadius: 8
1048
+ - fontSize: 14
1049
+
1050
+ ---
1051
+
1052
+ ### Code
1053
+
1054
+ Code component
1055
+
1056
+ **Type:** component
1057
+
1058
+ **Import:** `import { Code } from "@signalflare-ai/ui";`
1059
+
1060
+ **Category:** Display
1061
+
1062
+ **Props:**
1063
+
1064
+ - `lang`: enum [default: ts]
1065
+ - `"ts"`: TypeScript code
1066
+ - `"tsx"`: TypeScript JSX code
1067
+ - `"jsonc"`: JSON with comments
1068
+ - `"bash"`: Shell/Bash commands
1069
+ - `"css"`: CSS styles
1070
+ - `code`: string (required)
1071
+ The code string to display.
1072
+ - `values`: Record<string, { value: string; highlight?: boolean }>
1073
+ Template values for `{{key}}` interpolation. Values with `highlight: true` are visually emphasized.
1074
+ - `className`: string
1075
+ Additional CSS classes merged via `cn()`.
1076
+
1077
+ **Colors (sf tokens used):**
1078
+
1079
+ `bg-sf-recessed`, `border-sf-line`, `text-sf-default`
1080
+
1081
+ **Styling:**
1082
+
1083
+ - **Dimensions:** `[object Object]`
1084
+ - **Base Tokens:** `text-sf-default`
1085
+
1086
+ **Sub-Components:**
1087
+
1088
+ This is a compound component. Use these sub-components:
1089
+
1090
+ #### Code.Block
1091
+
1092
+ Block sub-component
1093
+
1094
+ Props:
1095
+ - `code`: string (required)
1096
+ - `lang`: CodeLang
1097
+
1098
+
1099
+ ---
1100
+
1101
+ ### Collapsible
1102
+
1103
+ Collapsible component for showing/hiding content. Features: - Animated chevron indicator (rotates 180° when open) - Accessible with aria-expanded and aria-controls - Content panel with left border accent
1104
+
1105
+ **Type:** component
1106
+
1107
+ **Import:** `import { Collapsible } from "@signalflare-ai/ui";`
1108
+
1109
+ **Category:** Display
1110
+
1111
+ **Props:**
1112
+
1113
+ - `children`: ReactNode
1114
+ - `label`: string (required)
1115
+ Text label displayed in the trigger button
1116
+ - `open`: boolean
1117
+ Whether the collapsible content is visible
1118
+ - `className`: string
1119
+ Additional CSS classes for the content panel
1120
+ - `onOpenChange`: (open: boolean) => void
1121
+ Callback when collapsed state changes
1122
+
1123
+ **Colors (sf tokens used):**
1124
+
1125
+ `border-sf-fill`, `text-sf-link`
1126
+
1127
+ ---
1128
+
1129
+ ### Combobox
1130
+
1131
+ Combobox — autocomplete input with filterable dropdown list. Compound component: `Combobox` (Root), `.TriggerInput`, `.TriggerValue`, `.TriggerMultipleWithInput`, `.Content`, `.Item`, `.Chip`, `.Input`, `.Empty`, `.GroupLabel`, `.Group`, `.List`, `.Collection`.
1132
+
1133
+ **Type:** component
1134
+
1135
+ **Import:** `import { Combobox } from "@signalflare-ai/ui";`
1136
+
1137
+ **Category:** Input
1138
+
1139
+ **Props:**
1140
+
1141
+ - `inputSide`: enum [default: right]
1142
+ - `"right"`: Input positioned inline to the right of chips
1143
+ - `"top"`: Input positioned above chips
1144
+ - `items`: T[] (required)
1145
+ Array of items to display in the dropdown
1146
+ - `value`: T | T[]
1147
+ Currently selected value(s)
1148
+ - `children`: ReactNode
1149
+ Combobox content (trigger, content, items)
1150
+ - `className`: string
1151
+ Additional CSS classes
1152
+ - `label`: ReactNode
1153
+ Label content for the combobox (enables Field wrapper) - can be a string or any React node
1154
+ - `required`: boolean
1155
+ Whether the combobox is required
1156
+ - `labelTooltip`: ReactNode
1157
+ Tooltip content to display next to the label via an info icon
1158
+ - `description`: ReactNode
1159
+ Helper text displayed below the combobox
1160
+ - `error`: string | object
1161
+ Error message or validation error object
1162
+ - `onValueChange`: (value: T | T[]) => void
1163
+ Callback when selection changes
1164
+ - `multiple`: boolean
1165
+ Allow multiple selections
1166
+ - `isItemEqualToValue`: (item: T, value: T) => boolean
1167
+ Custom equality function for comparing items
1168
+
1169
+ **Colors (sf tokens used):**
1170
+
1171
+ `bg-sf-control`, `bg-sf-fill-hover`, `bg-sf-overlay`, `fill-sf-ring`, `ring-sf-line`, `text-sf-default`, `text-sf-subtle`
1172
+
1173
+ **Sub-Components:**
1174
+
1175
+ This is a compound component. Use these sub-components:
1176
+
1177
+ #### Combobox.Content
1178
+
1179
+ Content sub-component
1180
+
1181
+ Props:
1182
+ - `className`: string
1183
+ - `align`: ComboboxBase.Positioner.Props["align"]
1184
+ - `alignOffset`: ComboboxBase.Positioner.Props["alignOffset"]
1185
+ - `side`: ComboboxBase.Positioner.Props["side"]
1186
+ - `sideOffset`: ComboboxBase.Positioner.Props["sideOffset"]
1187
+
1188
+ #### Combobox.TriggerValue
1189
+
1190
+ TriggerValue sub-component
1191
+
1192
+ #### Combobox.TriggerInput
1193
+
1194
+ TriggerInput sub-component
1195
+
1196
+ #### Combobox.TriggerMultipleWithInput
1197
+
1198
+ TriggerMultipleWithInput sub-component
1199
+
1200
+ #### Combobox.Chip
1201
+
1202
+ Chip sub-component
1203
+
1204
+ #### Combobox.Item
1205
+
1206
+ Item sub-component
1207
+
1208
+ #### Combobox.Input
1209
+
1210
+ Input sub-component
1211
+
1212
+ #### Combobox.Empty
1213
+
1214
+ Empty sub-component
1215
+
1216
+ #### Combobox.GroupLabel
1217
+
1218
+ GroupLabel sub-component
1219
+
1220
+ #### Combobox.Group
1221
+
1222
+ Group sub-component
1223
+
1224
+ #### Combobox.List
1225
+
1226
+ List sub-component
1227
+
1228
+ #### Combobox.Collection
1229
+
1230
+ Renders filtered list items. Use when you need more control over item rendering.
1231
+
1232
+ Props:
1233
+ - `children`: (item: T, index: number) => ReactNode (required) - Function that receives each filtered item and returns a node
1234
+
1235
+ Usage:
1236
+ ```tsx
1237
+ <Combobox.Collection>
1238
+ {(item, index) => (
1239
+ <Combobox.Item key={index} value={item}>
1240
+ {item.label}
1241
+ </Combobox.Item>
1242
+ )}
1243
+ </Combobox.Collection>
1244
+ ```
1245
+
1246
+
1247
+ ---
1248
+
1249
+ ### CommandPalette
1250
+
1251
+ CommandPalette — accessible command palette / spotlight search overlay. Compound component: `CommandPalette.Root` (or `.Dialog` + `.Panel`), `.Input`, `.List`, `.Results`, `.Items`, `.Group`, `.GroupLabel`, `.Item`, `.ResultItem`, `.HighlightedText`, `.Empty`, `.Loading`, `.Footer`. Built on `@base-ui/react/autocomplete` + `@base-ui/react/dialog`.
1252
+
1253
+ **Type:** component
1254
+
1255
+ **Import:** `import { CommandPalette } from "@signalflare-ai/ui";`
1256
+
1257
+ **Category:** Navigation
1258
+
1259
+ **Props:**
1260
+
1261
+ - `open`: boolean (required)
1262
+ Whether the dialog is open
1263
+ - `children`: ReactNode
1264
+ Child content - typically one or more Panel components
1265
+
1266
+ **Colors (sf tokens used):**
1267
+
1268
+ `bg-sf-elevated`, `bg-sf-overlay`, `bg-sf-warning`, `ring-sf-line`, `text-sf-default`, `text-sf-strong`, `text-sf-subtle`
1269
+
1270
+ ---
1271
+
1272
+ ### DataGrid
1273
+
1274
+ DataGrid component
1275
+
1276
+ **Type:** component
1277
+
1278
+ **Import:** `import { DataGrid } from "@signalflare-ai/ui";`
1279
+
1280
+ **Category:** Other
1281
+
1282
+ **Props:**
1283
+
1284
+ - `layout`: enum [default: auto]
1285
+ - `"auto"`: Auto column sizing - columns resize based on content
1286
+ - `"fixed"`: Fixed column sizing - columns have equal width
1287
+ - `className`: string
1288
+ Additional CSS classes
1289
+ - `children`: ReactNode
1290
+ Child elements
1291
+
1292
+ **Colors (sf tokens used):**
1293
+
1294
+ `bg-sf-base`, `bg-sf-brand`, `bg-sf-line`, `bg-sf-overlay`, `bg-sf-tint`, `border-sf-line`, `text-sf-brand`, `text-sf-subtle`
1295
+
1296
+ **Sub-Components:**
1297
+
1298
+ This is a compound component. Use these sub-components:
1299
+
1300
+ #### DataGrid.Toolbar
1301
+
1302
+ Toolbar sub-component
1303
+
1304
+ #### DataGrid.Content
1305
+
1306
+ Content sub-component
1307
+
1308
+ #### DataGrid.Pagination
1309
+
1310
+ Pagination sub-component
1311
+
1312
+ #### DataGrid.ColumnToggle
1313
+
1314
+ ColumnToggle sub-component
1315
+
1316
+ #### DataGrid.Empty
1317
+
1318
+ Empty sub-component
1319
+
1320
+
1321
+ ---
1322
+
1323
+ ### DatePicker
1324
+
1325
+ DatePicker — a date selection calendar. Built on [react-day-picker](https://daypicker.dev) with SF styling. Supports three selection modes: single, multiple, and range.
1326
+
1327
+ **Type:** component
1328
+
1329
+ **Import:** `import { DatePicker } from "@signalflare-ai/ui";`
1330
+
1331
+ **Category:** Other
1332
+
1333
+ **Props:**
1334
+
1335
+ - `className`: string
1336
+ Additional CSS classes
1337
+ - `children`: ReactNode
1338
+ Child elements
1339
+
1340
+ **Colors (sf tokens used):**
1341
+
1342
+ `bg-sf-base`
1343
+
1344
+ ---
1345
+
1346
+ ### DateRangePicker
1347
+
1348
+ DateRangePicker — dual-calendar date range selector. Renders two side-by-side month calendars with click-to-select start/end dates, hover preview of the range, a timezone footer, and a reset button.
1349
+
1350
+ **Type:** component
1351
+
1352
+ **Import:** `import { DateRangePicker } from "@signalflare-ai/ui";`
1353
+
1354
+ **Category:** Input
1355
+
1356
+ **Props:**
1357
+
1358
+ - `size`: enum [default: base]
1359
+ - `"sm"`: Compact calendar for tight spaces
1360
+ - `"base"`: Default calendar size
1361
+ - `"lg"`: Large calendar for prominent date selection
1362
+ - `variant`: enum [default: default]
1363
+ - `"default"`: Default calendar appearance
1364
+ - `"subtle"`: Subtle calendar with minimal background
1365
+ - `timezone`: string
1366
+ Display timezone string shown in the footer.
1367
+ - `className`: string
1368
+ Additional CSS classes merged via `cn()`.
1369
+ - `onStartDateChange`: (date: Date | null) => void
1370
+ Callback when start date changes
1371
+ - `onEndDateChange`: (date: Date | null) => void
1372
+ Callback when end date changes
1373
+
1374
+ **Colors (sf tokens used):**
1375
+
1376
+ `bg-sf-base`, `bg-sf-contrast`, `bg-sf-fill`, `bg-sf-interact`, `bg-sf-overlay`, `text-sf-default`, `text-sf-inverse`, `text-sf-strong`, `text-sf-subtle`
1377
+
1378
+ **Styling:**
1379
+
1380
+ - **Size Variants:**
1381
+ - `sm`:
1382
+ - Classes: `p-3 gap-2`
1383
+ - Dimensions:
1384
+ - calendarWidth: 168
1385
+ - cellHeight: 22
1386
+ - cellWidth: 24
1387
+ - textSize: 12
1388
+ - iconSize: 14
1389
+ - padding: 12
1390
+ - gap: 8
1391
+ - `base`:
1392
+ - Classes: `p-4 gap-2.5`
1393
+ - Dimensions:
1394
+ - calendarWidth: 196
1395
+ - cellHeight: 26
1396
+ - cellWidth: 28
1397
+ - textSize: 14
1398
+ - iconSize: 16
1399
+ - padding: 16
1400
+ - gap: 10
1401
+ - `lg`:
1402
+ - Classes: `p-5 gap-3`
1403
+ - Dimensions:
1404
+ - calendarWidth: 252
1405
+ - cellHeight: 32
1406
+ - cellWidth: 36
1407
+ - textSize: 16
1408
+ - iconSize: 18
1409
+ - padding: 20
1410
+ - gap: 12
1411
+
1412
+ ---
1413
+
1414
+ ### Dialog
1415
+
1416
+ Dialog component
1417
+
1418
+ **Type:** component
1419
+
1420
+ **Import:** `import { Dialog } from "@signalflare-ai/ui";`
1421
+
1422
+ **Category:** Overlay
1423
+
1424
+ **Props:**
1425
+
1426
+ - `className`: string
1427
+ Additional CSS classes merged via `cn()`.
1428
+ - `children`: ReactNode
1429
+ Dialog content (typically Title, Description, Close, and action buttons).
1430
+ - `size`: enum [default: base]
1431
+ - `"base"`: Default dialog width
1432
+ - `"sm"`: Small dialog for simple confirmations
1433
+ - `"lg"`: Large dialog for complex content
1434
+ - `"xl"`: Extra large dialog for detailed views
1435
+
1436
+ **Colors (sf tokens used):**
1437
+
1438
+ `bg-sf-elevated`, `bg-sf-overlay`, `text-sf-default`, `text-sf-subtle`
1439
+
1440
+ **Styling:**
1441
+
1442
+ - **Dimensions:** `[object Object]`
1443
+
1444
+ **Sub-Components:**
1445
+
1446
+ This is a compound component. Use these sub-components:
1447
+
1448
+ #### Dialog.Root
1449
+
1450
+ Root sub-component
1451
+
1452
+ #### Dialog.Trigger
1453
+
1454
+ Trigger sub-component
1455
+
1456
+ #### Dialog.Title
1457
+
1458
+ Title sub-component
1459
+
1460
+ #### Dialog.Description
1461
+
1462
+ Description sub-component
1463
+
1464
+ #### Dialog.Close
1465
+
1466
+ Close sub-component
1467
+
1468
+
1469
+ ---
1470
+
1471
+ ### DropdownMenu
1472
+
1473
+ DropdownMenu — accessible dropdown menu anchored to a trigger. Compound component: `DropdownMenu` (Root), `.Trigger`, `.Content`, `.Item`, `.CheckboxItem`, `.RadioGroup`, `.RadioItem`, `.RadioItemIndicator`, `.Sub`, `.SubTrigger`, `.SubContent`, `.Label`, `.Separator`, `.Shortcut`, `.Group`. Built on `@base-ui/react/menu`.
1474
+
1475
+ **Type:** component
1476
+
1477
+ **Import:** `import { DropdownMenu } from "@signalflare-ai/ui";`
1478
+
1479
+ **Category:** Overlay
1480
+
1481
+ **Props:**
1482
+
1483
+ - `variant`: enum [default: default]
1484
+ - `"default"`: Default dropdown item appearance
1485
+ - `"danger"`: Destructive action item
1486
+
1487
+ **Colors (sf tokens used):**
1488
+
1489
+ `bg-sf-control`, `bg-sf-danger`, `bg-sf-line`, `bg-sf-overlay`, `bg-sf-tint`, `ring-sf-line`, `text-sf-danger`, `text-sf-default`
1490
+
1491
+ **Sub-Components:**
1492
+
1493
+ This is a compound component. Use these sub-components:
1494
+
1495
+ #### DropdownMenu.Trigger
1496
+
1497
+ Trigger sub-component
1498
+
1499
+ #### DropdownMenu.Portal
1500
+
1501
+ Portal sub-component (wraps DropdownMenuPrimitive)
1502
+
1503
+ #### DropdownMenu.Sub
1504
+
1505
+ Sub sub-component (wraps DropdownMenuPrimitive)
1506
+
1507
+ #### DropdownMenu.SubTrigger
1508
+
1509
+ SubTrigger sub-component
1510
+
1511
+ #### DropdownMenu.SubContent
1512
+
1513
+ SubContent sub-component
1514
+
1515
+ #### DropdownMenu.Content
1516
+
1517
+ Content sub-component
1518
+
1519
+ #### DropdownMenu.Item
1520
+
1521
+ Item sub-component
1522
+
1523
+ #### DropdownMenu.CheckboxItem
1524
+
1525
+ CheckboxItem sub-component
1526
+
1527
+ #### DropdownMenu.RadioGroup
1528
+
1529
+ RadioGroup sub-component (wraps DropdownMenuPrimitive)
1530
+
1531
+ #### DropdownMenu.RadioItem
1532
+
1533
+ RadioItem sub-component
1534
+
1535
+ #### DropdownMenu.RadioItemIndicator
1536
+
1537
+ RadioItemIndicator sub-component
1538
+
1539
+ #### DropdownMenu.Label
1540
+
1541
+ Label sub-component
1542
+
1543
+ #### DropdownMenu.Separator
1544
+
1545
+ Separator sub-component
1546
+
1547
+ #### DropdownMenu.Shortcut
1548
+
1549
+ Shortcut sub-component
1550
+
1551
+ #### DropdownMenu.Group
1552
+
1553
+ Group sub-component (wraps DropdownMenuPrimitive)
1554
+
1555
+
1556
+ ---
1557
+
1558
+ ### Empty
1559
+
1560
+ Placeholder shown when a list, table, or page has no content to display.
1561
+
1562
+ **Type:** component
1563
+
1564
+ **Import:** `import { Empty } from "@signalflare-ai/ui";`
1565
+
1566
+ **Category:** Display
1567
+
1568
+ **Props:**
1569
+
1570
+ - `size`: enum [default: base]
1571
+ - `"sm"`: Compact empty state for smaller containers
1572
+ - `"base"`: Default empty state size
1573
+ - `"lg"`: Large empty state for prominent placement
1574
+ - `icon`: ReactNode
1575
+ Decorative icon displayed above the title (e.g. from `@phosphor-icons/react`).
1576
+ - `title`: string (required)
1577
+ Primary heading text for the empty state.
1578
+ - `description`: string
1579
+ Secondary description text displayed below the title.
1580
+ - `commandLine`: string
1581
+ Shell command displayed in a copyable code block.
1582
+ - `contents`: ReactNode
1583
+ Additional content (buttons, links) rendered below the description.
1584
+ - `className`: string
1585
+ Additional CSS classes merged via `cn()`.
1586
+
1587
+ **Colors (sf tokens used):**
1588
+
1589
+ `bg-sf-control`, `bg-sf-overlay`, `border-sf-fill`, `border-sf-interact`, `text-sf-brand`, `text-sf-default`, `text-sf-inactive`, `text-sf-strong`, `text-sf-success`
1590
+
1591
+ ---
1592
+
1593
+ ### Field
1594
+
1595
+ Form field wrapper that provides a label, optional description, and error display around any form control. Built on Base UI Field primitives.
1596
+
1597
+ **Type:** component
1598
+
1599
+ **Import:** `import { Field } from "@signalflare-ai/ui";`
1600
+
1601
+ **Category:** Input
1602
+
1603
+ **Props:**
1604
+
1605
+ - `controlFirst`: boolean
1606
+ When `true`, places the control before the label (for checkbox/switch layouts).
1607
+ - `children`: ReactNode
1608
+ The form control element(s) to wrap (Input, Select, Checkbox, etc.).
1609
+ - `label`: ReactNode
1610
+ The label content — can be a string or any React node.
1611
+ - `required`: boolean
1612
+ When explicitly `false`, shows gray "(optional)" text after the label. When `true` or `undefined`, no indicator is shown.
1613
+ - `labelTooltip`: ReactNode
1614
+ Tooltip content displayed next to the label via an info icon.
1615
+ - `error`: object
1616
+ Validation error with a message and a browser `ValidityState` match key.
1617
+ - `description`: ReactNode
1618
+ Helper text displayed below the control (hidden when `error` is present).
1619
+
1620
+ **Colors (sf tokens used):**
1621
+
1622
+ `text-sf-danger`, `text-sf-default`, `text-sf-subtle`
1623
+
1624
+ ---
1625
+
1626
+ ### Filters
1627
+
1628
+ Filters component for building and managing active filter conditions. Supports multiple filter types (text, select, multiselect, custom), operators, and an "Add Filter" popover interface. Designed to work standalone or with DataGrid for advanced data filtering.
1629
+
1630
+ **Type:** component
1631
+
1632
+ **Import:** `import { Filters } from "@signalflare-ai/ui";`
1633
+
1634
+ **Category:** Other
1635
+
1636
+ **Props:**
1637
+
1638
+ - `filters`: Filter[] (required)
1639
+ Active filters array
1640
+ - `fields`: FilterFieldConfig[] (required)
1641
+ Available field configurations
1642
+ - `size`: enum [default: default]
1643
+ - `"sm"`: Small filter items
1644
+ - `"default"`: Default filter items
1645
+ - `"lg"`: Large filter items
1646
+ - `trigger`: ReactNode
1647
+ Custom trigger element (replaces default "Add Filter" button)
1648
+ - `showSearchInput`: boolean
1649
+ Whether to show a search input in the add filter menu
1650
+ - `allowMultiple`: boolean
1651
+ Whether to allow multiple filters on the same field
1652
+ - `enableShortcut`: boolean
1653
+ Whether to enable keyboard shortcut (Cmd/Ctrl + K) to open add filter
1654
+ - `shortcutKey`: string
1655
+ Keyboard shortcut key (default: "k")
1656
+ - `shortcutLabel`: string
1657
+ Label shown in the shortcut tooltip
1658
+ - `i18n`: Partial<FilterI18nConfig>
1659
+ i18n configuration for labels
1660
+ - `className`: string
1661
+ Additional CSS classes
1662
+ - `menuPopupClassName`: string
1663
+ CSS classes for the filter menu popup
1664
+
1665
+ **Colors (sf tokens used):**
1666
+
1667
+ `bg-sf-fill`, `bg-sf-line`, `bg-sf-overlay`, `bg-sf-tint`, `border-sf-line`, `text-sf-brand`, `text-sf-danger`, `text-sf-default`, `text-sf-strong`, `text-sf-subtle`
1668
+
1669
+ ---
1670
+
1671
+ ### Grid
1672
+
1673
+ Responsive CSS grid layout container with preset column configurations.
1674
+
1675
+ **Type:** component
1676
+
1677
+ **Import:** `import { Grid } from "@signalflare-ai/ui";`
1678
+
1679
+ **Category:** Layout
1680
+
1681
+ **Props:**
1682
+
1683
+ - `children`: ReactNode
1684
+ Grid items to render.
1685
+ - `className`: string
1686
+ Additional CSS classes merged via `cn()`.
1687
+ - `id`: string
1688
+ - `lang`: string
1689
+ - `title`: string
1690
+ - `mobileDivider`: boolean
1691
+ Show dividers between grid items on mobile (only works with `"4up"` variant).
1692
+ - `gap`: enum [default: base]
1693
+ - `"none"`: No gap between grid items
1694
+ - `"sm"`: Small gap between grid items
1695
+ - `"base"`: Default responsive gap between grid items
1696
+ - `"lg"`: Large gap between grid items
1697
+ - `variant`: enum
1698
+ - `"2up"`: Grid items stack on small screens, display side-by-side on medium screens and up
1699
+ - `"side-by-side"`: Grid items always displayed side-by-side
1700
+ - `"2-1"`: Two-thirds / one-third split (66%/33%) on medium screens and up
1701
+ - `"1-2"`: One-third / two-thirds split (33%/66%) on medium screens and up
1702
+ - `"1-3up"`: Grid items stack on small screens, expand to 3 across on large screens
1703
+ - `"3up"`: Grid items stack on small screens, 2 across on medium, 3 across on large
1704
+ - `"4up"`: Grid items stack on small screens, progressively increase columns at larger breakpoints
1705
+ - `"6up"`: Grid items start at 2 across, expand to 6 across on XL
1706
+ - `"1-2-4up"`: Grid items stack on small screens, 2 across on medium, 4 across on large
1707
+
1708
+ **Colors (sf tokens used):**
1709
+
1710
+ `border-sf-line`
1711
+
1712
+ ---
1713
+
1714
+ ### Input
1715
+
1716
+ Input component
1717
+
1718
+ **Type:** component
1719
+
1720
+ **Import:** `import { Input } from "@signalflare-ai/ui";`
1721
+
1722
+ **Category:** Input
1723
+
1724
+ **Props:**
1725
+
1726
+ - `label`: ReactNode
1727
+ Label content for the input (enables Field wrapper) - can be a string or any React node
1728
+ - `labelTooltip`: ReactNode
1729
+ Tooltip content to display next to the label via an info icon
1730
+ - `description`: ReactNode
1731
+ Helper text displayed below the input
1732
+ - `error`: string | object
1733
+ Error message or validation error object
1734
+ - `size`: enum [default: base]
1735
+ - `"xs"`: Extra small input for compact UIs
1736
+ - `"sm"`: Small input for secondary fields
1737
+ - `"base"`: Default input size
1738
+ - `"lg"`: Large input for prominent fields
1739
+ - `variant`: enum [default: default]
1740
+ - `"default"`: Default input appearance
1741
+ - `"error"`: Error state for validation failures
1742
+
1743
+ **State Classes:**
1744
+ - `"default"`:
1745
+ - `focus`: `focus:ring-sf-ring`
1746
+ - `"error"`:
1747
+ - `focus`: `focus:ring-sf-danger`
1748
+
1749
+ **Colors (sf tokens used):**
1750
+
1751
+ `bg-sf-control`, `ring-sf-danger`, `ring-sf-line`, `ring-sf-ring`, `text-sf-default`, `text-sf-subtle`
1752
+
1753
+ **Styling:**
1754
+
1755
+ - **Dimensions:** `[object Object]`
1756
+
1757
+ ---
1758
+
1759
+ ### Label
1760
+
1761
+ Label component for form fields. Provides a standardized way to display labels with optional indicators: - Optional indicator: gray "(optional)" text when `showOptional={true}` - Tooltip: info icon with hover tooltip for additional context
1762
+
1763
+ **Type:** component
1764
+
1765
+ **Import:** `import { Label } from "@signalflare-ai/ui";`
1766
+
1767
+ **Category:** Other
1768
+
1769
+ **Props:**
1770
+
1771
+ - `children`: ReactNode
1772
+ The label content — can be a string or any React node.
1773
+ - `showOptional`: boolean
1774
+ When `true`, shows gray "(optional)" text after the label.
1775
+ - `tooltip`: ReactNode
1776
+ Tooltip content displayed next to the label via an info icon.
1777
+ - `className`: string
1778
+ Additional CSS classes merged via `cn()`.
1779
+ - `htmlFor`: string
1780
+ The id of the form element this label is associated with
1781
+ - `asContent`: boolean
1782
+ When true, only renders the inline content (indicators, tooltip) without the outer label element with font styling. Useful when composed inside another label element that already provides the text styling.
1783
+
1784
+ **Colors (sf tokens used):**
1785
+
1786
+ `text-sf-default`, `text-sf-strong`
1787
+
1788
+ ---
1789
+
1790
+ ### LayerCard
1791
+
1792
+ LayerCard component
1793
+
1794
+ **Type:** component
1795
+
1796
+ **Import:** `import { LayerCard } from "@signalflare-ai/ui";`
1797
+
1798
+ **Category:** Display
1799
+
1800
+ **Props:**
1801
+
1802
+ - `children`: ReactNode
1803
+ - `className`: string
1804
+ Additional CSS classes merged via `cn()`.
1805
+
1806
+ **Colors (sf tokens used):**
1807
+
1808
+ `bg-sf-base`, `bg-sf-elevated`, `ring-sf-fill`, `ring-sf-line`, `text-sf-strong`
1809
+
1810
+ **Styling:**
1811
+
1812
+
1813
+ **Sub-Components:**
1814
+
1815
+ This is a compound component. Use these sub-components:
1816
+
1817
+ #### LayerCard.Primary
1818
+
1819
+ Primary sub-component
1820
+
1821
+ #### LayerCard.Secondary
1822
+
1823
+ Secondary sub-component
1824
+
1825
+
1826
+ ---
1827
+
1828
+ ### Link
1829
+
1830
+ Link component
1831
+
1832
+ **Type:** component
1833
+
1834
+ **Import:** `import { Link } from "@signalflare-ai/ui";`
1835
+
1836
+ **Category:** Other
1837
+
1838
+ **Props:**
1839
+
1840
+ - `variant`: enum [default: inline]
1841
+ - `"inline"`: Inline text link that flows with content
1842
+ - `"current"`: Link that inherits color from parent text
1843
+ - `"plain"`: Link without underline decoration
1844
+
1845
+ **State Classes:**
1846
+ - `"plain"`:
1847
+ - `hover`: `hover:text-primary/70`
1848
+ - `to`: string
1849
+ - `children`: ReactNode
1850
+ - `className`: string
1851
+ - `id`: string
1852
+ - `lang`: string
1853
+ - `title`: string
1854
+ - `download`: unknown
1855
+ - `href`: string
1856
+ - `hrefLang`: string
1857
+ - `media`: string
1858
+ - `ping`: string
1859
+ - `target`: React.HTMLAttributeAnchorTarget
1860
+ - `type`: string
1861
+ - `referrerPolicy`: enum
1862
+ - `render`: ReactNode
1863
+ Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
1864
+
1865
+ Accepts a `ReactElement` or a function that returns the element to render.
1866
+
1867
+ **Sub-Components:**
1868
+
1869
+ This is a compound component. Use these sub-components:
1870
+
1871
+ #### Link.ExternalIcon
1872
+
1873
+ ExternalIcon sub-component
1874
+
1875
+
1876
+ ---
1877
+
1878
+ ### Loader
1879
+
1880
+ Animated circular spinner for indicating loading states. Uses CSS keyframe animations for broad compatibility.
1881
+
1882
+ **Type:** component
1883
+
1884
+ **Import:** `import { Loader } from "@signalflare-ai/ui";`
1885
+
1886
+ **Category:** Feedback
1887
+
1888
+ **Props:**
1889
+
1890
+ - `className`: string
1891
+ Additional CSS classes merged via `cn()`.
1892
+ - `size`: enum [default: base]
1893
+ - `"sm"`: Small loader for inline use
1894
+ - `"base"`: Default loader size
1895
+ - `"lg"`: Large loader for prominent loading states
1896
+
1897
+ ---
1898
+
1899
+ ### MenuBar
1900
+
1901
+ MenuBar — horizontal icon-button toolbar with keyboard arrow-key navigation. Each option renders as a `<button>` with a Tooltip. The active option is visually highlighted with an elevated background.
1902
+
1903
+ **Type:** component
1904
+
1905
+ **Import:** `import { MenuBar } from "@signalflare-ai/ui";`
1906
+
1907
+ **Category:** Navigation
1908
+
1909
+ **Props:**
1910
+
1911
+ - `className`: string
1912
+ Additional CSS classes merged via `cn()`.
1913
+ - `isActive`: number | boolean | string
1914
+ The currently active option value — matched against option index or `id`.
1915
+ - `options`: MenuOptionProps[] (required)
1916
+ Array of menu option configurations.
1917
+ - `optionIds`: boolean
1918
+ When true, each option's `id` field is used for matching instead of its array index.
1919
+
1920
+ **Colors (sf tokens used):**
1921
+
1922
+ `bg-sf-base`, `bg-sf-fill`, `border-sf-fill`
1923
+
1924
+ **Styling:**
1925
+
1926
+
1927
+ ---
1928
+
1929
+ ### Meter
1930
+
1931
+ Progress bar showing a measured value within a known range (e.g. quota usage).
1932
+
1933
+ **Type:** component
1934
+
1935
+ **Import:** `import { Meter } from "@signalflare-ai/ui";`
1936
+
1937
+ **Category:** Display
1938
+
1939
+ **Props:**
1940
+
1941
+ - `customValue`: string
1942
+ Custom formatted value text (e.g. "750 / 1,000") displayed instead of percentage.
1943
+ - `label`: string (required)
1944
+ Label text displayed above the meter track.
1945
+ - `showValue`: boolean
1946
+ Whether to display the percentage value next to the label.
1947
+ - `trackClassName`: string
1948
+ Additional CSS classes for the track (background bar).
1949
+ - `indicatorClassName`: string
1950
+ Additional CSS classes for the indicator (filled bar).
1951
+ - `value`: number
1952
+ Current value of the meter
1953
+ - `max`: number
1954
+ Maximum value of the meter (default: 100)
1955
+ - `min`: number
1956
+ Minimum value of the meter (default: 0)
1957
+
1958
+ **Colors (sf tokens used):**
1959
+
1960
+ `bg-sf-fill`, `text-sf-default`, `text-sf-strong`
1961
+
1962
+ ---
1963
+
1964
+ ### Pagination
1965
+
1966
+ Page navigation controls with page count display.
1967
+
1968
+ **Type:** component
1969
+
1970
+ **Import:** `import { Pagination } from "@signalflare-ai/ui";`
1971
+
1972
+ **Category:** Navigation
1973
+
1974
+ **Props:**
1975
+
1976
+ - `controls`: enum [default: full]
1977
+ - `"full"`: Full pagination controls with first, previous, page input, next, and last buttons
1978
+ - `"simple"`: Simple pagination controls with only previous and next buttons
1979
+ - `setPage`: (page: number) => void (required)
1980
+ Callback when page changes
1981
+ - `page`: number
1982
+ Current page number (1-indexed).
1983
+ - `perPage`: number
1984
+ Number of items displayed per page.
1985
+ - `totalCount`: number
1986
+ Total number of items across all pages.
1987
+ - `text`: object
1988
+ Method to provide custom pagination text
1989
+
1990
+ **Colors (sf tokens used):**
1991
+
1992
+ `text-sf-strong`
1993
+
1994
+ **Styling:**
1995
+
1996
+
1997
+ ---
1998
+
1999
+ ### Popover
2000
+
2001
+ Popover component for displaying accessible popup content anchored to a trigger.
2002
+
2003
+ **Type:** component
2004
+
2005
+ **Import:** `import { Popover } from "@signalflare-ai/ui";`
2006
+
2007
+ **Category:** Overlay
2008
+
2009
+ **Props:**
2010
+
2011
+ - `side`: enum [default: bottom]
2012
+ - `"top"`: Popover appears above the trigger
2013
+ - `"bottom"`: Popover appears below the trigger
2014
+ - `"left"`: Popover appears to the left of the trigger
2015
+ - `"right"`: Popover appears to the right of the trigger
2016
+
2017
+ **Colors (sf tokens used):**
2018
+
2019
+ `bg-sf-elevated`, `fill-sf-elevated`, `fill-sf-tip-shadow`, `fill-sf-tip-stroke`, `outline-sf-fill`, `text-sf-default`, `text-sf-subtle`
2020
+
2021
+ **Sub-Components:**
2022
+
2023
+ This is a compound component. Use these sub-components:
2024
+
2025
+ #### Popover.Trigger
2026
+
2027
+ Trigger sub-component
2028
+
2029
+ #### Popover.Content
2030
+
2031
+ Content sub-component
2032
+
2033
+ #### Popover.Title
2034
+
2035
+ Title sub-component
2036
+
2037
+ #### Popover.Description
2038
+
2039
+ Description sub-component
2040
+
2041
+ #### Popover.Close
2042
+
2043
+ Close sub-component
2044
+
2045
+
2046
+ ---
2047
+
2048
+ ### PromptInput
2049
+
2050
+ Prompt input form. Can be self-managed or controlled via `PromptInputProvider`.
2051
+
2052
+ **Type:** component
2053
+
2054
+ **Import:** `import { PromptInput } from "@signalflare-ai/ui";`
2055
+
2056
+ **Category:** Other
2057
+
2058
+ **Props:**
2059
+
2060
+ - `globalDrop`: boolean
2061
+ When true, accept drops anywhere on document. Default false.
2062
+ - `maxFiles`: number
2063
+ Maximum number of attached files.
2064
+ - `maxFileSize`: number
2065
+ Maximum file size in bytes.
2066
+ - `backLayer`: ReactNode
2067
+ Content rendered in the collapsible back layer (e.g. HITL approvals, task lists). When provided the prompt input is wrapped in a LayerCard shell with a header row containing a chevron toggle. Use `PromptInputBackLayer` to compose structured content for this slot.
2068
+ - `backLayerTitle`: string
2069
+ Title shown in the back layer header row. Defaults to `"Context"`.
2070
+ - `backLayerOpen`: boolean
2071
+ Controls whether the back layer is visible. Pair with `onBackLayerOpenChange` for a controlled pattern.
2072
+ - `autoOpenBackLayerWhen`: boolean
2073
+ Automatically opens the back layer when this condition is true. Useful for showing pending approvals/questions without manual toggle.
2074
+ - `className`: string
2075
+ - `id`: string
2076
+ - `lang`: string
2077
+ - `title`: string
2078
+ - `children`: ReactNode
2079
+
2080
+ **Colors (sf tokens used):**
2081
+
2082
+ `bg-sf-base`, `bg-sf-elevated`, `bg-sf-overlay`, `bg-sf-tint`, `ring-sf-line`, `ring-sf-ring`, `text-sf-brand`, `text-sf-default`, `text-sf-inactive`, `text-sf-subtle`
2083
+
2084
+ ---
2085
+
2086
+ ### Radio
2087
+
2088
+ Radio — radio button group for single-select choices. Compound component: `Radio.Group` (with built-in Fieldset) and `Radio.Item`. Built on `@base-ui/react/radio-group` + `@base-ui/react/radio`.
2089
+
2090
+ **Type:** component
2091
+
2092
+ **Import:** `import { Radio } from "@signalflare-ai/ui";`
2093
+
2094
+ **Category:** Input
2095
+
2096
+ **Props:**
2097
+
2098
+ - `legend`: string (required)
2099
+ Legend text for the group (required for accessibility)
2100
+ - `children`: ReactNode
2101
+ Child Radio.Item components
2102
+ - `orientation`: enum
2103
+ Layout direction of the radio items
2104
+ - `error`: string
2105
+ Error message for the group
2106
+ - `description`: ReactNode
2107
+ Helper text for the group
2108
+ - `value`: string
2109
+ Value of the radio that should be selected (controlled)
2110
+ - `disabled`: boolean
2111
+ Whether all radios in the group are disabled
2112
+ - `controlPosition`: enum
2113
+ Position of radio control relative to label: "start" (default) puts radio before label, "end" puts label before radio
2114
+ - `name`: string
2115
+ Form submission name for the radio group
2116
+ - `className`: string
2117
+ Additional CSS classes
2118
+
2119
+ **Colors (sf tokens used):**
2120
+
2121
+ `bg-sf-base`, `bg-sf-contrast`, `border-sf-line`, `ring-sf-danger`, `ring-sf-line`, `ring-sf-ring`, `text-sf-danger`, `text-sf-default`, `text-sf-subtle`
2122
+
2123
+ ---
2124
+
2125
+ ### Select
2126
+
2127
+ Select component
2128
+
2129
+ **Type:** component
2130
+
2131
+ **Import:** `import { Select } from "@signalflare-ai/ui";`
2132
+
2133
+ **Category:** Input
2134
+
2135
+ **Props:**
2136
+
2137
+ - `className`: string
2138
+ Additional CSS classes merged via `cn()`.
2139
+ - `label`: ReactNode
2140
+ Label content for the select (enables Field wrapper) — can be a string or any React node.
2141
+ - `hideLabel`: boolean
2142
+ Visually hide the label while keeping it accessible to screen readers. Set to `false` to show a visible label above the select via the Field wrapper.
2143
+ - `placeholder`: string
2144
+ Placeholder text shown when no value is selected.
2145
+ - `loading`: boolean
2146
+ When `true`, shows a skeleton loader in place of the selected value.
2147
+ - `disabled`: boolean
2148
+ Whether the select is disabled.
2149
+ - `required`: boolean
2150
+ Whether the select is required. When `false`, shows "(optional)" text.
2151
+ - `labelTooltip`: ReactNode
2152
+ Tooltip content displayed next to the label via an info icon.
2153
+ - `value`: string
2154
+ Currently selected value (controlled mode).
2155
+ - `children`: ReactNode
2156
+ `Select.Option` elements to render in the dropdown.
2157
+ - `description`: ReactNode
2158
+ Helper text displayed below the select.
2159
+ - `error`: string | object
2160
+ Error message string or validation error object with `match` key.
2161
+ - `onValueChange`: (value: string) => void
2162
+ Callback when selection changes
2163
+ - `defaultValue`: string
2164
+ Initial value for uncontrolled mode
2165
+
2166
+ **Colors (sf tokens used):**
2167
+
2168
+ `bg-sf-control`, `bg-sf-overlay`, `ring-sf-line`, `ring-sf-ring`, `text-sf-default`
2169
+
2170
+ **Styling:**
2171
+
2172
+
2173
+ **Sub-Components:**
2174
+
2175
+ This is a compound component. Use these sub-components:
2176
+
2177
+ #### Select.Option
2178
+
2179
+ Option sub-component
2180
+
2181
+
2182
+ ---
2183
+
2184
+ ### SensitiveInput
2185
+
2186
+ Password/secret input that masks its value by default and reveals on click. Includes a built-in copy-to-clipboard button on hover.
2187
+
2188
+ **Type:** component
2189
+
2190
+ **Import:** `import { SensitiveInput } from "@signalflare-ai/ui";`
2191
+
2192
+ **Category:** Other
2193
+
2194
+ **Props:**
2195
+
2196
+ - `alt`: string
2197
+ - `autoComplete`: React.HTMLInputAutoCompleteAttribute
2198
+ - `checked`: boolean
2199
+ - `disabled`: boolean
2200
+ - `height`: number | string
2201
+ - `list`: string
2202
+ - `name`: string
2203
+ - `placeholder`: string
2204
+ - `readOnly`: boolean
2205
+ - `required`: boolean
2206
+ - `width`: number | string
2207
+ - `className`: string
2208
+ - `id`: string
2209
+ - `lang`: string
2210
+ - `title`: string
2211
+ - `children`: ReactNode
2212
+ - `value`: string
2213
+ Controlled value
2214
+ - `size`: enum [default: base]
2215
+ Size of the input.
2216
+ - `"xs"` — Extra small for compact UIs
2217
+ - `"sm"` — Small for secondary fields
2218
+ - `"base"` — Default input size
2219
+ - `"lg"` — Large for prominent fields
2220
+ - `variant`: enum [default: default]
2221
+ Style variant of the input.
2222
+ - `"default"` — Default input appearance
2223
+ - `"error"` — Error state for validation failures
2224
+ - `label`: ReactNode
2225
+ Label content for the input (enables Field wrapper and sets masked state label) - can be a string or any React node
2226
+ - `labelTooltip`: ReactNode
2227
+ Tooltip content to display next to the label via an info icon
2228
+ - `description`: ReactNode
2229
+ Helper text displayed below the input
2230
+ - `error`: string | object
2231
+ Error message or validation error object
2232
+
2233
+ **Colors (sf tokens used):**
2234
+
2235
+ `bg-sf-brand`, `bg-sf-control`, `outline-sf-ring`, `text-sf-default`, `text-sf-subtle`
2236
+
2237
+ ---
2238
+
2239
+ ### Sidebar
2240
+
2241
+ Sidebar — responsive navigation panel with expand/collapse support. Compound component: `Sidebar` (root `<aside>`), `.Provider`, `.Header`, `.Content`, `.Footer`, `.Group`, `.GroupLabel`, `.GroupContent`, `.Menu`, `.MenuItem`, `.MenuButton`, `.MenuAction`, `.MenuBadge`, `.MenuSub`, `.MenuSubItem`, `.MenuSubButton`, `.Separator`, `.Input`, `.Trigger`, `.Rail`, `.MenuChevron`, `.Collapsible`, `.CollapsibleTrigger`, `.CollapsibleContent`. Built on `@base-ui/react/collapsible` + `@base-ui/react/dialog`.
2242
+
2243
+ **Type:** component
2244
+
2245
+ **Import:** `import { Sidebar } from "@signalflare-ai/ui";`
2246
+
2247
+ **Category:** Other
2248
+
2249
+ **Props:**
2250
+
2251
+ - `defaultOpen`: boolean
2252
+ Initial open state when uncontrolled.
2253
+ - `open`: boolean
2254
+ Controlled open state.
2255
+ - `variant`: enum [default: sidebar]
2256
+ - `"sidebar"`: Standard sidebar with border separator
2257
+ - `"floating"`: Floating sidebar with shadow and rounded corners
2258
+ - `"inset"`: Inset sidebar within the content area
2259
+ - `side`: enum [default: left]
2260
+ - `"left"`: Left-aligned sidebar
2261
+ - `"right"`: Right-aligned sidebar
2262
+ - `collapsible`: enum [default: icon]
2263
+ - `"icon"`: Collapses to show icons only
2264
+ - `"offcanvas"`: Slides off screen when collapsed
2265
+ - `"none"`: Cannot be collapsed
2266
+ - `resizable`: boolean
2267
+ Enable drag-to-resize on the sidebar edge.
2268
+ - `defaultWidth`: number
2269
+ Initial width in pixels when resizable.
2270
+ - `minWidth`: number
2271
+ Minimum width in pixels when resizing.
2272
+ - `maxWidth`: number
2273
+ Maximum width in pixels when resizing.
2274
+ - `children`: ReactNode
2275
+ Content — typically `<Sidebar>` + main content.
2276
+ - `className`: string
2277
+ Additional CSS classes for the wrapper div.
2278
+
2279
+ **Colors (sf tokens used):**
2280
+
2281
+ `bg-sf-base`, `bg-sf-brand`, `bg-sf-line`, `bg-sf-overlay`, `bg-sf-recessed`, `bg-sf-tint`, `border-sf-line`, `ring-sf-line`, `ring-sf-ring`, `text-sf-default`, `text-sf-strong`, `text-sf-subtle`
2282
+
2283
+ **Styling:**
2284
+
2285
+
2286
+ **Sub-Components:**
2287
+
2288
+ This is a compound component. Use these sub-components:
2289
+
2290
+ #### Sidebar.Provider
2291
+
2292
+ Provider sub-component
2293
+
2294
+ Props:
2295
+ - `defaultOpen`: boolean
2296
+ - `open`: boolean
2297
+ - `variant`: SidebarVariant
2298
+ - `side`: SidebarSide
2299
+ - `collapsible`: "icon" | "offcanvas" | "none"
2300
+ - `resizable`: boolean
2301
+ - `defaultWidth`: number
2302
+ - `minWidth`: number
2303
+ - `maxWidth`: number
2304
+ - `children`: ReactNode (required)
2305
+ - `className`: string
2306
+
2307
+ #### Sidebar.Header
2308
+
2309
+ Header sub-component
2310
+
2311
+ #### Sidebar.Content
2312
+
2313
+ Content sub-component
2314
+
2315
+ #### Sidebar.Footer
2316
+
2317
+ Footer sub-component
2318
+
2319
+ #### Sidebar.Group
2320
+
2321
+ Group sub-component
2322
+
2323
+ #### Sidebar.GroupLabel
2324
+
2325
+ GroupLabel sub-component
2326
+
2327
+ #### Sidebar.GroupContent
2328
+
2329
+ GroupContent sub-component
2330
+
2331
+ #### Sidebar.Menu
2332
+
2333
+ Menu sub-component
2334
+
2335
+ #### Sidebar.MenuItem
2336
+
2337
+ MenuItem sub-component
2338
+
2339
+ #### Sidebar.MenuButton
2340
+
2341
+ MenuButton sub-component
2342
+
2343
+ #### Sidebar.MenuAction
2344
+
2345
+ MenuAction sub-component
2346
+
2347
+ #### Sidebar.MenuBadge
2348
+
2349
+ MenuBadge sub-component
2350
+
2351
+ #### Sidebar.MenuSub
2352
+
2353
+ MenuSub sub-component
2354
+
2355
+ #### Sidebar.MenuSubItem
2356
+
2357
+ MenuSubItem sub-component
2358
+
2359
+ #### Sidebar.MenuSubButton
2360
+
2361
+ MenuSubButton sub-component
2362
+
2363
+ #### Sidebar.Separator
2364
+
2365
+ Separator sub-component
2366
+
2367
+ #### Sidebar.Input
2368
+
2369
+ Input sub-component
2370
+
2371
+ #### Sidebar.Trigger
2372
+
2373
+ Trigger sub-component
2374
+
2375
+ #### Sidebar.Rail
2376
+
2377
+ Rail sub-component
2378
+
2379
+ #### Sidebar.ResizeHandle
2380
+
2381
+ ResizeHandle sub-component
2382
+
2383
+ #### Sidebar.MenuChevron
2384
+
2385
+ MenuChevron sub-component
2386
+
2387
+ #### Sidebar.Collapsible
2388
+
2389
+ Collapsible sub-component
2390
+
2391
+ #### Sidebar.CollapsibleTrigger
2392
+
2393
+ CollapsibleTrigger sub-component
2394
+
2395
+ #### Sidebar.CollapsibleContent
2396
+
2397
+ CollapsibleContent sub-component
2398
+
2399
+
2400
+ ---
2401
+
2402
+ ### SignalFlareAILogo
2403
+
2404
+ SignalFlare AI logo component.
2405
+
2406
+ **Type:** component
2407
+
2408
+ **Import:** `import { SignalFlareAILogo } from "@signalflare-ai/ui";`
2409
+
2410
+ **Category:** Other
2411
+
2412
+ **Props:**
2413
+
2414
+ - `children`: ReactNode
2415
+ - `className`: string
2416
+ - `height`: number | string
2417
+ - `id`: string
2418
+ - `lang`: string
2419
+ - `media`: string
2420
+ - `method`: string
2421
+ - `name`: string
2422
+ - `target`: string
2423
+ - `type`: string
2424
+ - `width`: number | string
2425
+ - `accentHeight`: number | string
2426
+ - `accumulate`: enum
2427
+ - `additive`: enum
2428
+ - `alignmentBaseline`: enum
2429
+ - `allowReorder`: enum
2430
+ - `alphabetic`: number | string
2431
+ - `amplitude`: number | string
2432
+ - `arabicForm`: enum
2433
+ - `ascent`: number | string
2434
+ - `attributeName`: string
2435
+ - `attributeType`: string
2436
+ - `autoReverse`: Booleanish
2437
+ - `azimuth`: number | string
2438
+ - `baseFrequency`: number | string
2439
+ - `baselineShift`: number | string
2440
+ - `baseProfile`: number | string
2441
+ - `bbox`: number | string
2442
+ - `begin`: number | string
2443
+ - `bias`: number | string
2444
+ - `by`: number | string
2445
+ - `calcMode`: number | string
2446
+ - `capHeight`: number | string
2447
+ - `clip`: number | string
2448
+ - `clipPath`: string
2449
+ - `clipPathUnits`: number | string
2450
+ - `clipRule`: number | string
2451
+ - `colorInterpolation`: number | string
2452
+ - `colorInterpolationFilters`: enum
2453
+ - `colorProfile`: number | string
2454
+ - `colorRendering`: number | string
2455
+ - `contentScriptType`: number | string
2456
+ - `contentStyleType`: number | string
2457
+ - `cursor`: number | string
2458
+ - `cx`: number | string
2459
+ - `cy`: number | string
2460
+ - `d`: string
2461
+ - `decelerate`: number | string
2462
+ - `descent`: number | string
2463
+ - `diffuseConstant`: number | string
2464
+ - `direction`: number | string
2465
+ - `display`: number | string
2466
+ - `divisor`: number | string
2467
+ - `dominantBaseline`: enum
2468
+ - `dur`: number | string
2469
+ - `dx`: number | string
2470
+ - `dy`: number | string
2471
+ - `edgeMode`: number | string
2472
+ - `elevation`: number | string
2473
+ - `enableBackground`: number | string
2474
+ - `end`: number | string
2475
+ - `exponent`: number | string
2476
+ - `externalResourcesRequired`: Booleanish
2477
+ - `fill`: string
2478
+ - `fillOpacity`: number | string
2479
+ - `fillRule`: enum
2480
+ - `filter`: string
2481
+ - `filterRes`: number | string
2482
+ - `filterUnits`: number | string
2483
+ - `floodColor`: number | string
2484
+ - `floodOpacity`: number | string
2485
+ - `focusable`: Booleanish | string
2486
+ - `fontFamily`: string
2487
+ - `fontSize`: number | string
2488
+ - `fontSizeAdjust`: number | string
2489
+ - `fontStretch`: number | string
2490
+ - `fontStyle`: number | string
2491
+ - `fontVariant`: number | string
2492
+ - `fontWeight`: number | string
2493
+ - `format`: number | string
2494
+ - `fr`: number | string
2495
+ - `from`: number | string
2496
+ - `fx`: number | string
2497
+ - `fy`: number | string
2498
+ - `g1`: number | string
2499
+ - `g2`: number | string
2500
+ - `glyphName`: number | string
2501
+ - `glyphOrientationHorizontal`: number | string
2502
+ - `glyphOrientationVertical`: number | string
2503
+ - `glyphRef`: number | string
2504
+ - `gradientTransform`: string
2505
+ - `gradientUnits`: string
2506
+ - `hanging`: number | string
2507
+ - `horizAdvX`: number | string
2508
+ - `horizOriginX`: number | string
2509
+ - `href`: string
2510
+ - `ideographic`: number | string
2511
+ - `imageRendering`: number | string
2512
+ - `in2`: number | string
2513
+ - `in`: string
2514
+ - `intercept`: number | string
2515
+ - `k1`: number | string
2516
+ - `k2`: number | string
2517
+ - `k3`: number | string
2518
+ - `k4`: number | string
2519
+ - `k`: number | string
2520
+ - `kernelMatrix`: number | string
2521
+ - `kernelUnitLength`: number | string
2522
+ - `kerning`: number | string
2523
+ - `keyPoints`: number | string
2524
+ - `keySplines`: number | string
2525
+ - `keyTimes`: number | string
2526
+ - `lengthAdjust`: number | string
2527
+ - `letterSpacing`: number | string
2528
+ - `lightingColor`: number | string
2529
+ - `limitingConeAngle`: number | string
2530
+ - `local`: number | string
2531
+ - `markerEnd`: string
2532
+ - `markerHeight`: number | string
2533
+ - `markerMid`: string
2534
+ - `markerStart`: string
2535
+ - `markerUnits`: number | string
2536
+ - `markerWidth`: number | string
2537
+ - `mask`: string
2538
+ - `maskContentUnits`: number | string
2539
+ - `maskUnits`: number | string
2540
+ - `mathematical`: number | string
2541
+ - `mode`: number | string
2542
+ - `numOctaves`: number | string
2543
+ - `offset`: number | string
2544
+ - `opacity`: number | string
2545
+ - `operator`: number | string
2546
+ - `order`: number | string
2547
+ - `orient`: number | string
2548
+ - `orientation`: number | string
2549
+ - `origin`: number | string
2550
+ - `overflow`: number | string
2551
+ - `overlinePosition`: number | string
2552
+ - `overlineThickness`: number | string
2553
+ - `paintOrder`: number | string
2554
+ - `panose1`: number | string
2555
+ - `path`: string
2556
+ - `pathLength`: number | string
2557
+ - `patternContentUnits`: string
2558
+ - `patternTransform`: number | string
2559
+ - `patternUnits`: string
2560
+ - `pointerEvents`: number | string
2561
+ - `points`: string
2562
+ - `pointsAtX`: number | string
2563
+ - `pointsAtY`: number | string
2564
+ - `pointsAtZ`: number | string
2565
+ - `preserveAlpha`: Booleanish
2566
+ - `preserveAspectRatio`: string
2567
+ - `primitiveUnits`: number | string
2568
+ - `r`: number | string
2569
+ - `radius`: number | string
2570
+ - `refX`: number | string
2571
+ - `refY`: number | string
2572
+ - `renderingIntent`: number | string
2573
+ - `repeatCount`: number | string
2574
+ - `repeatDur`: number | string
2575
+ - `requiredExtensions`: number | string
2576
+ - `requiredFeatures`: number | string
2577
+ - `restart`: number | string
2578
+ - `result`: string
2579
+ - `rotate`: number | string
2580
+ - `rx`: number | string
2581
+ - `ry`: number | string
2582
+ - `scale`: number | string
2583
+ - `seed`: number | string
2584
+ - `shapeRendering`: number | string
2585
+ - `slope`: number | string
2586
+ - `spacing`: number | string
2587
+ - `specularConstant`: number | string
2588
+ - `specularExponent`: number | string
2589
+ - `speed`: number | string
2590
+ - `spreadMethod`: string
2591
+ - `startOffset`: number | string
2592
+ - `stdDeviation`: number | string
2593
+ - `stemh`: number | string
2594
+ - `stemv`: number | string
2595
+ - `stitchTiles`: number | string
2596
+ - `stopColor`: string
2597
+ - `stopOpacity`: number | string
2598
+ - `strikethroughPosition`: number | string
2599
+ - `strikethroughThickness`: number | string
2600
+ - `string`: number | string
2601
+ - `stroke`: string
2602
+ - `strokeDasharray`: string | number
2603
+ - `strokeDashoffset`: string | number
2604
+ - `strokeLinecap`: enum
2605
+ - `strokeLinejoin`: enum
2606
+ - `strokeMiterlimit`: number | string
2607
+ - `strokeOpacity`: number | string
2608
+ - `strokeWidth`: number | string
2609
+ - `surfaceScale`: number | string
2610
+ - `systemLanguage`: number | string
2611
+ - `tableValues`: number | string
2612
+ - `targetX`: number | string
2613
+ - `targetY`: number | string
2614
+ - `textAnchor`: enum
2615
+ - `textDecoration`: number | string
2616
+ - `textLength`: number | string
2617
+ - `textRendering`: number | string
2618
+ - `to`: number | string
2619
+ - `transform`: string
2620
+ - `u1`: number | string
2621
+ - `u2`: number | string
2622
+ - `underlinePosition`: number | string
2623
+ - `underlineThickness`: number | string
2624
+ - `unicode`: number | string
2625
+ - `unicodeBidi`: number | string
2626
+ - `unicodeRange`: number | string
2627
+ - `unitsPerEm`: number | string
2628
+ - `vAlphabetic`: number | string
2629
+ - `values`: string
2630
+ - `vectorEffect`: number | string
2631
+ - `version`: string
2632
+ - `vertAdvY`: number | string
2633
+ - `vertOriginX`: number | string
2634
+ - `vertOriginY`: number | string
2635
+ - `vHanging`: number | string
2636
+ - `vIdeographic`: number | string
2637
+ - `viewBox`: string
2638
+ - `viewTarget`: number | string
2639
+ - `visibility`: number | string
2640
+ - `vMathematical`: number | string
2641
+ - `widths`: number | string
2642
+ - `wordSpacing`: number | string
2643
+ - `writingMode`: number | string
2644
+ - `x1`: number | string
2645
+ - `x2`: number | string
2646
+ - `x`: number | string
2647
+ - `xChannelSelector`: string
2648
+ - `xHeight`: number | string
2649
+ - `xlinkActuate`: string
2650
+ - `xlinkArcrole`: string
2651
+ - `xlinkHref`: string
2652
+ - `xlinkRole`: string
2653
+ - `xlinkShow`: string
2654
+ - `xlinkTitle`: string
2655
+ - `xlinkType`: string
2656
+ - `xmlBase`: string
2657
+ - `xmlLang`: string
2658
+ - `xmlns`: string
2659
+ - `xmlnsXlink`: string
2660
+ - `xmlSpace`: string
2661
+ - `y1`: number | string
2662
+ - `y2`: number | string
2663
+ - `y`: number | string
2664
+ - `yChannelSelector`: string
2665
+ - `z`: number | string
2666
+ - `zoomAndPan`: string
2667
+ - `variant`: enum [default: full]
2668
+ - `"glyph"`: Map pin icon only (logomark)
2669
+ - `"full"`: Full logo with icon, wordmark, and decorative element
2670
+
2671
+ **Colors (sf tokens used):**
2672
+
2673
+ `bg-sf-base`, `ring-sf-line`, `text-sf-default`
2674
+
2675
+ ---
2676
+
2677
+ ### Surface
2678
+
2679
+ Surface component
2680
+
2681
+ **Type:** component
2682
+
2683
+ **Import:** `import { Surface } from "@signalflare-ai/ui";`
2684
+
2685
+ **Category:** Layout
2686
+
2687
+ **Props:**
2688
+
2689
+ - `as`: React.ElementType
2690
+ The HTML element type to render as (e.g. `"div"`, `"section"`, `"article"`).
2691
+ - `className`: string
2692
+ Additional CSS classes merged via `cn()`.
2693
+ - `children`: ReactNode
2694
+ Content rendered inside the surface.
2695
+
2696
+ **Colors (sf tokens used):**
2697
+
2698
+ `bg-sf-base`, `ring-sf-line`
2699
+
2700
+ ---
2701
+
2702
+ ### Switch
2703
+
2704
+ Switch component
2705
+
2706
+ **Type:** component
2707
+
2708
+ **Import:** `import { Switch } from "@signalflare-ai/ui";`
2709
+
2710
+ **Category:** Input
2711
+
2712
+ **Props:**
2713
+
2714
+ - `variant`: enum [default: default]
2715
+ - `"default"`: Default switch appearance
2716
+ - `"error"`: Error state for validation failures
2717
+ - `label`: ReactNode
2718
+ Label content for the switch (Field wrapper is built-in) - can be a string or any React node. Optional when used standalone for visual-only purposes.
2719
+ - `labelTooltip`: ReactNode
2720
+ Tooltip content to display next to the label via an info icon
2721
+ - `required`: boolean
2722
+ Whether the switch is required. When explicitly false, shows "(optional)" text after the label.
2723
+ - `controlFirst`: boolean
2724
+ When true (default), switch appears before label. When false, label appears before switch.
2725
+ - `size`: enum [default: base]
2726
+ - `"sm"`: Small switch for compact UIs
2727
+ - `"base"`: Default switch size
2728
+ - `"lg"`: Large switch for prominent toggles
2729
+ - `checked`: boolean
2730
+ - `disabled`: boolean
2731
+ - `transitioning`: boolean
2732
+ - `name`: string
2733
+ - `type`: enum
2734
+ - `value`: string | string[] | number
2735
+ - `className`: string
2736
+ - `id`: string
2737
+ - `lang`: string
2738
+ - `title`: string
2739
+ - `onClick`: (event: React.MouseEvent) => void (required)
2740
+ Callback when switch is clicked
2741
+
2742
+ **Colors (sf tokens used):**
2743
+
2744
+ `bg-sf-brand`, `bg-sf-brand-hover`, `bg-sf-danger`, `bg-sf-interact`, `bg-sf-recessed`, `border-sf-line`, `ring-sf-danger`, `text-sf-danger`, `text-sf-default`, `text-sf-subtle`
2745
+
2746
+ **Sub-Components:**
2747
+
2748
+ This is a compound component. Use these sub-components:
2749
+
2750
+ #### Switch.Item
2751
+
2752
+ Item sub-component
2753
+
2754
+ #### Switch.Group
2755
+
2756
+ Group sub-component
2757
+
2758
+ Props:
2759
+ - `legend`: string (required)
2760
+ - `children`: ReactNode (required)
2761
+ - `error`: string
2762
+ - `description`: ReactNode
2763
+ - `disabled`: boolean
2764
+ - `controlFirst`: boolean
2765
+ - `className`: string
2766
+
2767
+
2768
+ ---
2769
+
2770
+ ### Table
2771
+
2772
+ Table — semantic HTML table with styled rows, cells, and selection support. Compound component: `Table` (Root), `.Header`, `.Head`, `.Body`, `.Row`, `.Cell`, `.Footer`, `.CheckCell`, `.CheckHead`, `.ResizeHandle`.
2773
+
2774
+ **Type:** component
2775
+
2776
+ **Import:** `import { Table } from "@signalflare-ai/ui";`
2777
+
2778
+ **Category:** Other
2779
+
2780
+ **Props:**
2781
+
2782
+ - `layout`: enum [default: auto]
2783
+ - `"auto"`: Auto table layout - columns resize based on content
2784
+ - `"fixed"`: Fixed table layout - columns have equal width, controlled via colgroup
2785
+ - `variant`: enum [default: default]
2786
+ - `"default"`: Default row variant
2787
+ - `"selected"`: Selected row variant
2788
+ - `className`: string
2789
+ Additional CSS classes
2790
+ - `children`: ReactNode
2791
+ Child elements
2792
+
2793
+ **Colors (sf tokens used):**
2794
+
2795
+ `bg-sf-base`, `bg-sf-ring`, `bg-sf-tint`, `border-sf-fill`, `text-sf-default`
2796
+
2797
+ **Sub-Components:**
2798
+
2799
+ This is a compound component. Use these sub-components:
2800
+
2801
+ #### Table.Header
2802
+
2803
+ Header sub-component
2804
+
2805
+ #### Table.Head
2806
+
2807
+ Head sub-component
2808
+
2809
+ #### Table.Row
2810
+
2811
+ Row sub-component
2812
+
2813
+ #### Table.Body
2814
+
2815
+ Body sub-component
2816
+
2817
+ #### Table.Cell
2818
+
2819
+ Cell sub-component
2820
+
2821
+ #### Table.CheckCell
2822
+
2823
+ CheckCell sub-component
2824
+
2825
+ #### Table.CheckHead
2826
+
2827
+ CheckHead sub-component
2828
+
2829
+ #### Table.Footer
2830
+
2831
+ Footer sub-component
2832
+
2833
+ #### Table.ResizeHandle
2834
+
2835
+ ResizeHandle sub-component
2836
+
2837
+
2838
+ ---
2839
+
2840
+ ### Tabs
2841
+
2842
+ Tab navigation component with segmented, underline, or pill style. Built on Base UI Tabs with animated active indicator.
2843
+
2844
+ **Type:** component
2845
+
2846
+ **Import:** `import { Tabs } from "@signalflare-ai/ui";`
2847
+
2848
+ **Category:** Navigation
2849
+
2850
+ **Props:**
2851
+
2852
+ - `tabs`: TabsItem[]
2853
+ Array of tab items to render.
2854
+ - `value`: string
2855
+ Controlled value. When set, component becomes controlled.
2856
+ - `selectedValue`: string
2857
+ Default selected value for uncontrolled mode. Ignored when `value` is set.
2858
+ - `activateOnFocus`: boolean
2859
+ When `true`, tabs are activated immediately upon receiving focus via arrow keys. When `false` (default), tabs receive focus but require Enter/Space to activate.
2860
+ - `className`: string
2861
+ Additional CSS classes for the root element.
2862
+ - `listClassName`: string
2863
+ Additional CSS classes for the tab list element.
2864
+ - `indicatorClassName`: string
2865
+ Additional CSS classes for the indicator element.
2866
+ - `variant`: enum [default: segmented]
2867
+ Tab style.
2868
+ - `"segmented"` — Pill-shaped indicator on a filled track
2869
+ - `"underline"` — Underline indicator below tab text
2870
+ - `"pill"` — Fully rounded tabs, only selected has background
2871
+ - `onValueChange`: (value: string) => void
2872
+ Callback when active tab changes
2873
+
2874
+ **Colors (sf tokens used):**
2875
+
2876
+ `bg-sf-brand`, `bg-sf-overlay`, `bg-sf-tint`, `border-sf-line`, `border-sf-tint`, `ring-sf-fill-hover`, `ring-sf-ring`, `text-sf-default`, `text-sf-strong`, `text-sf-subtle`
2877
+
2878
+ **Styling:**
2879
+
2880
+
2881
+ ---
2882
+
2883
+ ### Text
2884
+
2885
+ Text component
2886
+
2887
+ **Type:** component
2888
+
2889
+ **Import:** `import { Text } from "@signalflare-ai/ui";`
2890
+
2891
+ **Category:** Display
2892
+
2893
+ **Props:**
2894
+
2895
+ - `variant`: enum [default: body]
2896
+ - `"heading1"`: Large heading for page titles
2897
+ - `"heading2"`: Medium heading for section titles
2898
+ - `"heading3"`: Small heading for subsections
2899
+ - `"body"`: Default body text
2900
+ - `"secondary"`: Muted text for secondary information
2901
+ - `"success"`: Success state text
2902
+ - `"error"`: Error state text
2903
+ - `"mono"`: Monospace text for code
2904
+ - `"mono-secondary"`: Muted monospace text
2905
+ - `size`: enum [default: base]
2906
+ - `"xs"`: Extra small text
2907
+ - `"sm"`: Small text
2908
+ - `"base"`: Default text size
2909
+ - `"lg"`: Large text
2910
+ - `bold`: boolean
2911
+ Whether to use bold font weight (only applies to body variants).
2912
+ - `as`: React.ElementType
2913
+ The HTML element type to render as (e.g. `"span"`, `"p"`, `"h1"`). Auto-selected based on variant if omitted.
2914
+ - `children`: ReactNode
2915
+ Text content.
2916
+
2917
+ **Colors (sf tokens used):**
2918
+
2919
+ `text-sf-danger`, `text-sf-default`, `text-sf-link`, `text-sf-subtle`
2920
+
2921
+ **Styling:**
2922
+
2923
+
2924
+ ---
2925
+
2926
+ ### ThemeToggle
2927
+
2928
+ Theme toggle button. Cycles through light → dark → system (follows OS) modes. Reads from and writes to `localStorage` under the key `"theme"`. When set to `"system"` the key is removed so the OS preference takes over automatically. Applies the resolved mode to `document.documentElement.dataset.mode`.
2929
+
2930
+ **Type:** component
2931
+
2932
+ **Import:** `import { ThemeToggle } from "@signalflare-ai/ui";`
2933
+
2934
+ **Category:** Other
2935
+
2936
+ **Props:**
2937
+
2938
+ - `className`: string
2939
+ Additional CSS classes merged via `cn()`.
2940
+ - `mode`: enum [default: system]
2941
+ - `"light"`: Light mode
2942
+ - `"dark"`: Dark mode
2943
+ - `"system"`: Follow system preference
2944
+ - `cycle`: SFThemeMode[]
2945
+ Cycle order for clicking. Defaults to `["light", "dark", "system"]`. Remove `"system"` to limit to a simple light/dark toggle.
2946
+ - `tooltip`: boolean
2947
+ Show a tooltip labelling the current action. Defaults to true.
2948
+
2949
+ **Colors (sf tokens used):**
2950
+
2951
+ `text-sf-default`, `text-sf-subtle`
2952
+
2953
+ ---
2954
+
2955
+ ### Toasty
2956
+
2957
+ Toasty — toast notification provider and viewport. Renders a `Toast.Provider` with a fixed-position viewport in the bottom-right corner. Toasts stack with smooth enter/exit animations, swipe-to-dismiss, and expand-on-hover. Built on `@base-ui/react/toast`.
2958
+
2959
+ **Type:** component
2960
+
2961
+ **Import:** `import { Toasty } from "@signalflare-ai/ui";`
2962
+
2963
+ **Category:** Feedback
2964
+
2965
+ **Props:**
2966
+
2967
+ - `variant`: enum [default: default]
2968
+ - `"default"`: Default toast style
2969
+ - `"error"`: Error toast for critical issues
2970
+ - `"warning"`: Warning toast for cautionary messages
2971
+ - `className`: string
2972
+ Additional CSS classes
2973
+ - `children`: ReactNode
2974
+ Child elements
2975
+
2976
+ **Colors (sf tokens used):**
2977
+
2978
+ `bg-sf-contrast`, `bg-sf-control`, `bg-sf-fill-hover`, `border-sf-fill`, `text-sf-default`, `text-sf-strong`, `text-sf-subtle`
2979
+
2980
+ **Styling:**
2981
+
2982
+
2983
+ ---
2984
+
2985
+ ### Tooltip
2986
+
2987
+ Accessible popup that shows additional information on hover/focus. Wrap your app or section with `<TooltipProvider>` to enable delay grouping.
2988
+
2989
+ **Type:** component
2990
+
2991
+ **Import:** `import { Tooltip } from "@signalflare-ai/ui";`
2992
+
2993
+ **Category:** Overlay
2994
+
2995
+ **Props:**
2996
+
2997
+ - `side`: enum [default: top]
2998
+ - `"top"`: Tooltip appears above the trigger
2999
+ - `"bottom"`: Tooltip appears below the trigger
3000
+ - `"left"`: Tooltip appears to the left of the trigger
3001
+ - `"right"`: Tooltip appears to the right of the trigger
3002
+ - `className`: string
3003
+ Additional CSS classes
3004
+ - `children`: ReactNode
3005
+ Child elements
3006
+ - `content`: ReactNode (required)
3007
+ Content to display in the tooltip
3008
+
3009
+ **Colors (sf tokens used):**
3010
+
3011
+ `bg-sf-elevated`, `fill-sf-elevated`, `fill-sf-tip-shadow`, `fill-sf-tip-stroke`, `outline-sf-fill`, `text-sf-default`
3012
+
3013
+ ---
3014
+
3015
+ ### InputArea
3016
+
3017
+ Multi-line textarea input with Input variants and InputArea-specific dimensions
3018
+
3019
+ **Type:** component
3020
+
3021
+ **Import:** `import { InputArea } from "@signalflare-ai/ui (synthetic - uses Input component)";`
3022
+
3023
+ **Category:** Input
3024
+
3025
+ **Props:**
3026
+
3027
+
3028
+ **Styling:**
3029
+
3030
+ - **Size Variants:**
3031
+ - `xs`:
3032
+ - `sm`:
3033
+ - `base`:
3034
+ - `lg`:
3035
+
3036
+ ## Quick Reference
3037
+
3038
+ **Components by Category:**
3039
+ - **Other:** AiActions, AiAgentCard, AiApproval, AiCodeBlock, AiConversation, AiInfoBanner, AiLoader, AiMessage, AiMissionHeader, AiQuestion, AiReasoning, AiResponse, AiShimmer, AiStatusBadge, AiStreamingText, AiSubagent, AiSuggestions, AiTaskList, AiTimeline, AiToolCall, AiUsageBar, DataGrid, DatePicker, Filters, Label, Link, PromptInput, SensitiveInput, Sidebar, SignalFlareAILogo, Table, ThemeToggle, AgentHarness, Commander, DeleteResource, Map
3040
+ - **Display:** Badge, Breadcrumbs, Code, Collapsible, Empty, LayerCard, Meter, Text
3041
+ - **Feedback:** Banner, Loader, Toasty
3042
+ - **Action:** Button, ClipboardText
3043
+ - **Input:** Checkbox, Combobox, DateRangePicker, Field, Input, Radio, Select, Switch
3044
+ - **Navigation:** CommandPalette, MenuBar, Pagination, Tabs
3045
+ - **Overlay:** Dialog, DropdownMenu, Popover, Tooltip
3046
+ - **Layout:** Grid, Surface, PageHeader, ResourceListPage