@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,769 @@
1
+ "use client";
2
+ import { t as cn } from "./cn-YROP2_ox.js";
3
+ import { t as Tooltip } from "./tooltip-Cb7QW-7H.js";
4
+ import { t as Button } from "./button-De0267YU.js";
5
+ import { t as InputGroup } from "./input-Cn25I4o5.js";
6
+ import { Fragment, createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
7
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
+ import { ArrowUpIcon, CaretDownIcon, FileIcon, FileTextIcon, ImageIcon, MicrophoneIcon, PaperclipIcon, PlusIcon, SpinnerGapIcon, SquareIcon, XIcon } from "@phosphor-icons/react";
9
+ import { Menu } from "@base-ui/react/menu";
10
+ //#region src/components/ai-prompt-input/ai-prompt-input.tsx
11
+ var SF_AI_PROMPT_INPUT_VARIANTS = { status: {
12
+ idle: {
13
+ classes: "",
14
+ description: "Ready to accept input"
15
+ },
16
+ submitted: {
17
+ classes: "",
18
+ description: "Waiting for response (shows spinner)"
19
+ },
20
+ streaming: {
21
+ classes: "",
22
+ description: "Streaming response (shows stop)"
23
+ },
24
+ error: {
25
+ classes: "",
26
+ description: "Error state (shows X)"
27
+ }
28
+ } };
29
+ var SF_AI_PROMPT_INPUT_DEFAULT_VARIANTS = { status: "idle" };
30
+ var PromptInputContext = createContext(null);
31
+ var ProviderAttachmentsContext = createContext(null);
32
+ var usePromptInputController = () => {
33
+ const ctx = useContext(PromptInputContext);
34
+ if (!ctx) throw new Error("Wrap your component inside <PromptInputProvider> to use usePromptInputController().");
35
+ return ctx;
36
+ };
37
+ var useOptionalPromptInputController = () => useContext(PromptInputContext);
38
+ var useProviderAttachments = () => {
39
+ const ctx = useContext(ProviderAttachmentsContext);
40
+ if (!ctx) throw new Error("Wrap your component inside <PromptInputProvider> to use useProviderAttachments().");
41
+ return ctx;
42
+ };
43
+ var useOptionalProviderAttachments = () => useContext(ProviderAttachmentsContext);
44
+ /**
45
+ * Optional global provider that lifts PromptInput state outside of PromptInput.
46
+ * If you don't use it, PromptInput stays fully self-managed.
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * <PromptInputProvider>
51
+ * <PromptInput onSubmit={handleSubmit}>...</PromptInput>
52
+ * </PromptInputProvider>
53
+ * ```
54
+ */
55
+ function PromptInputProvider({ initialInput = "", children }) {
56
+ const [textInput, setTextInput] = useState(initialInput);
57
+ const clearInput = useCallback(() => setTextInput(""), []);
58
+ const [attachmentItems, setAttachmentItems] = useState([]);
59
+ const fileInputRef = useRef(null);
60
+ const openRef = useRef(() => {});
61
+ const add = useCallback((files) => {
62
+ const incoming = Array.from(files);
63
+ if (incoming.length === 0) return;
64
+ setAttachmentItems((prev) => prev.concat(incoming.map((file) => ({
65
+ id: `${Date.now()}-${Math.random()}`,
66
+ url: URL.createObjectURL(file),
67
+ mediaType: file.type,
68
+ filename: file.name
69
+ }))));
70
+ }, []);
71
+ const remove = useCallback((id) => {
72
+ setAttachmentItems((prev) => {
73
+ const found = prev.find((f) => f.id === id);
74
+ if (found?.url) URL.revokeObjectURL(found.url);
75
+ return prev.filter((f) => f.id !== id);
76
+ });
77
+ }, []);
78
+ const clear = useCallback(() => {
79
+ setAttachmentItems((prev) => {
80
+ for (const f of prev) if (f.url) URL.revokeObjectURL(f.url);
81
+ return [];
82
+ });
83
+ }, []);
84
+ const openFileDialog = useCallback(() => {
85
+ openRef.current?.();
86
+ }, []);
87
+ const attachments = useMemo(() => ({
88
+ files: attachmentItems,
89
+ add,
90
+ remove,
91
+ clear,
92
+ openFileDialog,
93
+ fileInputRef
94
+ }), [
95
+ attachmentItems,
96
+ add,
97
+ remove,
98
+ clear,
99
+ openFileDialog
100
+ ]);
101
+ const __registerFileInput = useCallback((ref, open) => {
102
+ fileInputRef.current = ref.current;
103
+ openRef.current = open;
104
+ }, []);
105
+ const controller = useMemo(() => ({
106
+ textInput: {
107
+ value: textInput,
108
+ setInput: setTextInput,
109
+ clear: clearInput
110
+ },
111
+ attachments,
112
+ __registerFileInput
113
+ }), [
114
+ textInput,
115
+ clearInput,
116
+ attachments,
117
+ __registerFileInput
118
+ ]);
119
+ return /* @__PURE__ */ jsx(PromptInputContext.Provider, {
120
+ value: controller,
121
+ children: /* @__PURE__ */ jsx(ProviderAttachmentsContext.Provider, {
122
+ value: attachments,
123
+ children
124
+ })
125
+ });
126
+ }
127
+ var LocalAttachmentsContext = createContext(null);
128
+ var usePromptInputAttachments = () => {
129
+ const provider = useOptionalProviderAttachments();
130
+ const local = useContext(LocalAttachmentsContext);
131
+ const context = provider ?? local;
132
+ if (!context) throw new Error("usePromptInputAttachments must be used within a PromptInput or PromptInputProvider");
133
+ return context;
134
+ };
135
+ /** Convert a blob URL to a base64 data URL for serialization. */
136
+ async function convertBlobToDataUrl(url) {
137
+ const blob = await (await fetch(url)).blob();
138
+ return new Promise((resolve, reject) => {
139
+ const reader = new FileReader();
140
+ reader.addEventListener("loadend", () => resolve(reader.result));
141
+ reader.addEventListener("error", () => reject(/* @__PURE__ */ new Error("FileReader error")));
142
+ reader.readAsDataURL(blob);
143
+ });
144
+ }
145
+ function makeAttachmentId() {
146
+ return `${Date.now()}-${Math.random()}`;
147
+ }
148
+ /**
149
+ * Prompt input form. Can be self-managed or controlled via `PromptInputProvider`.
150
+ *
151
+ * @example
152
+ * ```tsx
153
+ * <PromptInput onSubmit={({ text, files }) => send(text, files)}>
154
+ * <PromptInputAttachments>{(f) => <PromptInputAttachment data={f} />}</PromptInputAttachments>
155
+ * <PromptInputTextarea placeholder="Ask anything…" />
156
+ * <PromptInputToolbar>
157
+ * <PromptInputTools>
158
+ * <PromptInputAttachButton />
159
+ * </PromptInputTools>
160
+ * <PromptInputSubmit />
161
+ * </PromptInputToolbar>
162
+ * </PromptInput>
163
+ * ```
164
+ */
165
+ var PromptInput = ({ className, accept, multiple, globalDrop, maxFiles, maxFileSize, onError, onSubmit, children, backLayer, backLayerTitle = "Context", backLayerOpen, onBackLayerOpenChange, autoOpenBackLayerWhen, ...props }) => {
166
+ const hasBackLayer = backLayer !== void 0;
167
+ const controller = useOptionalPromptInputController();
168
+ const usingProvider = !!controller;
169
+ const inputRef = useRef(null);
170
+ const anchorRef = useRef(null);
171
+ const formRef = useRef(null);
172
+ useEffect(() => {
173
+ const root = anchorRef.current?.closest("form");
174
+ if (root instanceof HTMLFormElement) formRef.current = root;
175
+ }, []);
176
+ useEffect(() => {
177
+ if (autoOpenBackLayerWhen) onBackLayerOpenChange?.(true);
178
+ }, [autoOpenBackLayerWhen, onBackLayerOpenChange]);
179
+ const [items, setItems] = useState([]);
180
+ const files = usingProvider ? controller.attachments.files : items;
181
+ const openFileDialogLocal = useCallback(() => {
182
+ inputRef.current?.click();
183
+ }, []);
184
+ const matchesAccept = useCallback((f) => {
185
+ if (!accept || accept.trim() === "") return true;
186
+ if (accept.includes("image/*")) return f.type.startsWith("image/");
187
+ return true;
188
+ }, [accept]);
189
+ const addLocal = useCallback((fileList) => {
190
+ const incoming = Array.from(fileList);
191
+ const accepted = incoming.filter((f) => matchesAccept(f));
192
+ if (incoming.length && accepted.length === 0) {
193
+ onError?.({
194
+ code: "accept",
195
+ message: "No files match the accepted types."
196
+ });
197
+ return;
198
+ }
199
+ const withinSize = (f) => maxFileSize ? f.size <= maxFileSize : true;
200
+ const sized = accepted.filter(withinSize);
201
+ if (accepted.length > 0 && sized.length === 0) {
202
+ onError?.({
203
+ code: "max_file_size",
204
+ message: "All files exceed the maximum size."
205
+ });
206
+ return;
207
+ }
208
+ setItems((prev) => {
209
+ const capacity = typeof maxFiles === "number" ? Math.max(0, maxFiles - prev.length) : void 0;
210
+ const capped = typeof capacity === "number" ? sized.slice(0, capacity) : sized;
211
+ if (typeof capacity === "number" && sized.length > capacity) onError?.({
212
+ code: "max_files",
213
+ message: "Too many files. Some were not added."
214
+ });
215
+ const next = capped.map((file) => ({
216
+ id: makeAttachmentId(),
217
+ url: URL.createObjectURL(file),
218
+ mediaType: file.type,
219
+ filename: file.name
220
+ }));
221
+ return prev.concat(next);
222
+ });
223
+ }, [
224
+ matchesAccept,
225
+ maxFiles,
226
+ maxFileSize,
227
+ onError
228
+ ]);
229
+ const add = usingProvider ? (f) => controller.attachments.add(f) : addLocal;
230
+ const remove = usingProvider ? (id) => controller.attachments.remove(id) : (id) => setItems((prev) => {
231
+ const found = prev.find((f) => f.id === id);
232
+ if (found?.url) URL.revokeObjectURL(found.url);
233
+ return prev.filter((f) => f.id !== id);
234
+ });
235
+ const clear = usingProvider ? () => controller.attachments.clear() : () => setItems((prev) => {
236
+ for (const f of prev) if (f.url) URL.revokeObjectURL(f.url);
237
+ return [];
238
+ });
239
+ const openFileDialog = usingProvider ? () => controller.attachments.openFileDialog() : openFileDialogLocal;
240
+ useEffect(() => {
241
+ if (!usingProvider) return;
242
+ controller.__registerFileInput(inputRef, () => inputRef.current?.click());
243
+ }, [usingProvider, controller]);
244
+ useEffect(() => {
245
+ const form = formRef.current;
246
+ if (!form) return;
247
+ const onDragOver = (e) => {
248
+ if (e.dataTransfer?.types?.includes("Files")) e.preventDefault();
249
+ };
250
+ const onDrop = (e) => {
251
+ if (e.dataTransfer?.types?.includes("Files")) e.preventDefault();
252
+ if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) add(e.dataTransfer.files);
253
+ };
254
+ form.addEventListener("dragover", onDragOver);
255
+ form.addEventListener("drop", onDrop);
256
+ return () => {
257
+ form.removeEventListener("dragover", onDragOver);
258
+ form.removeEventListener("drop", onDrop);
259
+ };
260
+ }, [add]);
261
+ useEffect(() => {
262
+ if (!globalDrop) return;
263
+ const onDragOver = (e) => {
264
+ if (e.dataTransfer?.types?.includes("Files")) e.preventDefault();
265
+ };
266
+ const onDrop = (e) => {
267
+ if (e.dataTransfer?.types?.includes("Files")) e.preventDefault();
268
+ if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) add(e.dataTransfer.files);
269
+ };
270
+ document.addEventListener("dragover", onDragOver);
271
+ document.addEventListener("drop", onDrop);
272
+ return () => {
273
+ document.removeEventListener("dragover", onDragOver);
274
+ document.removeEventListener("drop", onDrop);
275
+ };
276
+ }, [add, globalDrop]);
277
+ useEffect(() => {
278
+ return () => {
279
+ if (!usingProvider) {
280
+ for (const f of files) if (f.url) URL.revokeObjectURL(f.url);
281
+ }
282
+ };
283
+ }, [usingProvider, files]);
284
+ const handleFileInputChange = (event) => {
285
+ if (event.currentTarget.files) add(event.currentTarget.files);
286
+ };
287
+ const ctx = useMemo(() => ({
288
+ files,
289
+ add,
290
+ remove,
291
+ clear,
292
+ openFileDialog,
293
+ fileInputRef: inputRef
294
+ }), [
295
+ files,
296
+ add,
297
+ remove,
298
+ clear,
299
+ openFileDialog
300
+ ]);
301
+ const handleSubmit = (event) => {
302
+ event.preventDefault();
303
+ const form = event.currentTarget;
304
+ const text = usingProvider ? controller.textInput.value : new FormData(form).get("message") || "";
305
+ if (!usingProvider) form.reset();
306
+ const doSubmit = async () => {
307
+ const convertedFiles = await Promise.all(files.map(async (item) => {
308
+ if (item.url.startsWith("blob:")) return {
309
+ ...item,
310
+ url: await convertBlobToDataUrl(item.url)
311
+ };
312
+ return item;
313
+ }));
314
+ try {
315
+ await onSubmit({
316
+ text,
317
+ files: convertedFiles
318
+ }, event);
319
+ clear();
320
+ if (usingProvider) controller.textInput.clear();
321
+ } catch {}
322
+ };
323
+ doSubmit().catch(() => {});
324
+ };
325
+ const isBackLayerOpen = backLayerOpen ?? false;
326
+ const inputShell = hasBackLayer ? /* @__PURE__ */ jsxs("div", {
327
+ className: "flex w-full flex-col overflow-hidden rounded-xl bg-sf-elevated ring ring-sf-line/50",
328
+ children: [
329
+ /* @__PURE__ */ jsxs("button", {
330
+ "aria-expanded": isBackLayerOpen,
331
+ "aria-label": isBackLayerOpen ? "Collapse context" : "Expand context",
332
+ className: "flex w-full items-center justify-between gap-2 px-3 py-2 text-left",
333
+ onClick: () => onBackLayerOpenChange?.(!isBackLayerOpen),
334
+ type: "button",
335
+ children: [/* @__PURE__ */ jsx("span", {
336
+ className: "text-sm font-medium text-sf-subtle uppercase tracking-wide select-none",
337
+ children: backLayerTitle
338
+ }), /* @__PURE__ */ jsx(CaretDownIcon, { className: cn("size-3.5 text-sf-subtle transition-transform duration-200", isBackLayerOpen && "rotate-180") })]
339
+ }),
340
+ /* @__PURE__ */ jsx(PromptInputBackLayerPanel, {
341
+ open: isBackLayerOpen,
342
+ children: backLayer
343
+ }),
344
+ /* @__PURE__ */ jsx("div", {
345
+ className: "flex flex-col overflow-hidden rounded-xl bg-sf-base ring ring-sf-line/50 focus-within:ring-sf-ring",
346
+ children
347
+ })
348
+ ]
349
+ }) : /* @__PURE__ */ jsx(InputGroup, { children });
350
+ const inner = /* @__PURE__ */ jsxs(Fragment$1, { children: [
351
+ /* @__PURE__ */ jsx("span", {
352
+ "aria-hidden": "true",
353
+ className: "hidden",
354
+ ref: anchorRef
355
+ }),
356
+ /* @__PURE__ */ jsx("input", {
357
+ accept,
358
+ "aria-label": "Upload files",
359
+ className: "hidden",
360
+ multiple,
361
+ onChange: handleFileInputChange,
362
+ ref: inputRef,
363
+ type: "file"
364
+ }),
365
+ /* @__PURE__ */ jsx("form", {
366
+ className: cn("w-full", className),
367
+ onSubmit: handleSubmit,
368
+ ...props,
369
+ children: inputShell
370
+ })
371
+ ] });
372
+ return usingProvider ? inner : /* @__PURE__ */ jsx(LocalAttachmentsContext.Provider, {
373
+ value: ctx,
374
+ children: inner
375
+ });
376
+ };
377
+ var PromptInputBody = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
378
+ className: cn("contents", className),
379
+ ...props
380
+ });
381
+ function PromptInputBackLayerPanel({ open, children }) {
382
+ const isOpen = open ?? false;
383
+ return /* @__PURE__ */ jsx("div", {
384
+ "aria-hidden": !isOpen,
385
+ className: "grid",
386
+ style: {
387
+ gridTemplateRows: isOpen ? "1fr" : "0fr",
388
+ opacity: isOpen ? 1 : 0,
389
+ transition: "grid-template-rows 200ms ease-out, opacity 200ms ease-out"
390
+ },
391
+ children: /* @__PURE__ */ jsx("div", {
392
+ className: "min-h-0 overflow-hidden",
393
+ children
394
+ })
395
+ });
396
+ }
397
+ /**
398
+ * Container for back-layer content (HITL approvals, task lists, agent status,
399
+ * etc.). Pass instances of this as the `backLayer` prop on `PromptInput`.
400
+ *
401
+ * @example
402
+ * ```tsx
403
+ * <PromptInput
404
+ * onSubmit={handleSubmit}
405
+ * backLayer={<PromptInputBackLayer>...</PromptInputBackLayer>}
406
+ * backLayerOpen={open}
407
+ * onBackLayerOpenChange={setOpen}
408
+ * >
409
+ * <PromptInputTextarea />
410
+ * <PromptInputToolbar>
411
+ * <PromptInputTools />
412
+ * <PromptInputSubmit />
413
+ * </PromptInputToolbar>
414
+ * </PromptInput>
415
+ * ```
416
+ */
417
+ function PromptInputBackLayer({ children, className }) {
418
+ return /* @__PURE__ */ jsx("div", {
419
+ className: cn("flex flex-col gap-2 px-3 py-2.5 text-sm text-sf-default", className),
420
+ children
421
+ });
422
+ }
423
+ var handleTextareaKeyDown = (e) => {
424
+ if (e.key === "Enter") {
425
+ if (e.nativeEvent.isComposing) return;
426
+ if (e.shiftKey) return;
427
+ e.preventDefault();
428
+ e.currentTarget.form?.requestSubmit();
429
+ }
430
+ };
431
+ /**
432
+ * Auto-resizing textarea for the prompt. Submits on Enter (Shift+Enter for newline).
433
+ * Pastes files into attachments.
434
+ */
435
+ var PromptInputTextarea = ({ onChange, className, placeholder = "What would you like to know?", ...props }) => {
436
+ const controller = useOptionalPromptInputController();
437
+ const attachments = usePromptInputAttachments();
438
+ const handlePaste = (event) => {
439
+ const items = event.clipboardData?.items;
440
+ if (!items) return;
441
+ const pastedFiles = [];
442
+ for (const item of items) if (item.kind === "file") {
443
+ const file = item.getAsFile();
444
+ if (file) pastedFiles.push(file);
445
+ }
446
+ if (pastedFiles.length > 0) {
447
+ event.preventDefault();
448
+ attachments.add(pastedFiles);
449
+ }
450
+ };
451
+ const controlledProps = controller ? {
452
+ value: controller.textInput.value,
453
+ onChange: (e) => {
454
+ controller.textInput.setInput(e.currentTarget.value);
455
+ onChange?.(e);
456
+ }
457
+ } : { onChange };
458
+ return /* @__PURE__ */ jsx("textarea", {
459
+ className: cn("field-sizing-content max-h-48 min-h-16 w-full resize-none border-0 bg-transparent px-3 py-2 text-sm text-sf-default outline-none placeholder:text-sf-inactive", className),
460
+ name: "message",
461
+ onKeyDown: handleTextareaKeyDown,
462
+ onPaste: handlePaste,
463
+ placeholder,
464
+ rows: 1,
465
+ ...props,
466
+ ...controlledProps
467
+ });
468
+ };
469
+ var PromptInputToolbar = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
470
+ className: cn("flex items-center justify-between gap-1 px-2 py-1.5", className),
471
+ ...props
472
+ });
473
+ var PromptInputTools = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
474
+ className: cn("flex items-center gap-1", className),
475
+ ...props
476
+ });
477
+ var PromptInputButton = ({ variant = "ghost", size = "sm", className, ...props }) => /* @__PURE__ */ jsx(Button, {
478
+ className: cn("text-sf-subtle hover:text-sf-default", className),
479
+ size,
480
+ type: "button",
481
+ variant,
482
+ ...props
483
+ });
484
+ /**
485
+ * Submit button. Icon changes based on `status`:
486
+ * - `idle` → send arrow
487
+ * - `submitted` → spinner
488
+ * - `streaming` → stop square
489
+ * - `error` → X
490
+ */
491
+ var PromptInputSubmit = ({ className, variant = "primary", size = "sm", status = "idle", children, ...props }) => {
492
+ let Icon;
493
+ if (status === "submitted") Icon = /* @__PURE__ */ jsx(SpinnerGapIcon, { className: "size-4 animate-spin" });
494
+ else if (status === "streaming") Icon = /* @__PURE__ */ jsx(SquareIcon, { className: "size-4" });
495
+ else if (status === "error") Icon = /* @__PURE__ */ jsx(XIcon, { className: "size-4" });
496
+ else Icon = /* @__PURE__ */ jsx(ArrowUpIcon, { className: "size-4" });
497
+ return /* @__PURE__ */ jsx(Button, {
498
+ "aria-label": "Submit",
499
+ className: cn(className),
500
+ size,
501
+ type: "submit",
502
+ variant,
503
+ ...props,
504
+ children: children ?? Icon
505
+ });
506
+ };
507
+ var DropdownMenu = Menu;
508
+ var PromptInputActionMenu = (props) => /* @__PURE__ */ jsx(DropdownMenu.Root, { ...props });
509
+ var PromptInputActionMenuTrigger = ({ className, children, "aria-label": ariaLabel = "More actions", ...props }) => /* @__PURE__ */ jsx(DropdownMenu.Trigger, { render: /* @__PURE__ */ jsx(Button, {
510
+ "aria-label": ariaLabel,
511
+ className: cn("text-sf-subtle hover:text-sf-default", className),
512
+ size: "sm",
513
+ type: "button",
514
+ variant: "ghost",
515
+ ...props,
516
+ children: children ?? /* @__PURE__ */ jsx(PlusIcon, { className: "size-4" })
517
+ }) });
518
+ var PromptInputActionMenuContent = ({ className, children, ...props }) => /* @__PURE__ */ jsx(DropdownMenu.Positioner, {
519
+ className: "z-50",
520
+ side: "top",
521
+ align: "start",
522
+ ...props,
523
+ children: /* @__PURE__ */ jsx(DropdownMenu.Popup, {
524
+ className: cn("min-w-[160px] rounded-lg bg-sf-elevated p-1 shadow-md", "data-[starting-style]:opacity-0 data-[ending-style]:opacity-0 transition-opacity duration-100", className),
525
+ children
526
+ })
527
+ });
528
+ var PromptInputActionMenuItem = ({ className, ...props }) => /* @__PURE__ */ jsx(DropdownMenu.Item, {
529
+ className: cn("flex cursor-pointer select-none items-center gap-2 rounded-md px-2 py-1.5 text-sm text-sf-default outline-none", "data-highlighted:bg-sf-tint", className),
530
+ ...props
531
+ });
532
+ var PromptInputActionAddAttachments = ({ label = "Add photos or files", ...props }) => {
533
+ const attachments = usePromptInputAttachments();
534
+ const handleSelect = useCallback(() => {
535
+ attachments.openFileDialog();
536
+ }, [attachments]);
537
+ return /* @__PURE__ */ jsxs(PromptInputActionMenuItem, {
538
+ ...props,
539
+ onSelect: handleSelect,
540
+ children: [/* @__PURE__ */ jsx(ImageIcon, { className: "size-4" }), label]
541
+ });
542
+ };
543
+ var PromptInputModeSelector = ({ modes, value, onChange }) => {
544
+ if (modes.length === 0) return null;
545
+ const displayName = modes.find((m) => m.modeId === value)?.modeName ?? value ?? modes[0]?.modeName;
546
+ return /* @__PURE__ */ jsx("div", {
547
+ className: cn("flex items-center gap-0.5 rounded-md bg-sf-tint p-0.5"),
548
+ role: "group",
549
+ "aria-label": "Select mode",
550
+ children: modes.map((mode) => {
551
+ const isSelected = mode.modeId === value || mode.modeName === displayName;
552
+ return /* @__PURE__ */ jsx("button", {
553
+ "aria-pressed": isSelected,
554
+ className: cn("cursor-pointer rounded-[4px] px-2 py-0.5 text-[11px] font-medium transition-colors", isSelected ? "bg-sf-elevated text-sf-default shadow-sm" : "text-sf-subtle hover:text-sf-default"),
555
+ onClick: () => onChange?.(mode.modeId),
556
+ type: "button",
557
+ children: mode.modeName
558
+ }, mode.modeId);
559
+ })
560
+ });
561
+ };
562
+ var IMAGE_EXTS = new Set([
563
+ "jpg",
564
+ "jpeg",
565
+ "png",
566
+ "gif",
567
+ "webp",
568
+ "svg"
569
+ ]);
570
+ function getFileIcon(filename) {
571
+ const ext = filename.split(".").pop()?.toLowerCase() ?? "";
572
+ if (IMAGE_EXTS.has(ext)) return /* @__PURE__ */ jsx(ImageIcon, { className: "size-3.5" });
573
+ if ([
574
+ "pdf",
575
+ "doc",
576
+ "docx",
577
+ "txt",
578
+ "md"
579
+ ].includes(ext)) return /* @__PURE__ */ jsx(FileTextIcon, { className: "size-3.5" });
580
+ return /* @__PURE__ */ jsx(FileIcon, { className: "size-3.5" });
581
+ }
582
+ /**
583
+ * Single attachment chip for images or files. Includes a remove button.
584
+ */
585
+ function PromptInputAttachment({ data, className, ...props }) {
586
+ const attachments = usePromptInputAttachments();
587
+ const isImage = data.mediaType?.startsWith("image/") && data.url;
588
+ const handleRemove = useCallback(() => {
589
+ attachments.remove(data.id);
590
+ }, [attachments, data.id]);
591
+ if (isImage) return /* @__PURE__ */ jsxs("div", {
592
+ className: cn("group relative size-14 overflow-hidden rounded-md", className),
593
+ ...props,
594
+ children: [/* @__PURE__ */ jsx("img", {
595
+ alt: data.filename || "attachment",
596
+ className: "size-full object-cover",
597
+ src: data.url
598
+ }), /* @__PURE__ */ jsx(Button, {
599
+ "aria-label": "Remove attachment",
600
+ className: "absolute top-1 right-1 size-5 rounded-full bg-sf-overlay/80 p-0 opacity-0 backdrop-blur-sm transition-opacity group-hover:opacity-100",
601
+ onClick: handleRemove,
602
+ size: "sm",
603
+ type: "button",
604
+ variant: "ghost",
605
+ children: /* @__PURE__ */ jsx(XIcon, { className: "size-3" })
606
+ })]
607
+ });
608
+ const ext = data.filename.split(".").pop()?.toUpperCase() ?? "FILE";
609
+ const name = data.filename.replace(/\.[^/.]+$/, "");
610
+ return /* @__PURE__ */ jsxs("div", {
611
+ className: cn("group relative inline-flex h-8 items-center gap-2 rounded-md bg-sf-tint/50 px-2 text-sm", className),
612
+ ...props,
613
+ children: [
614
+ /* @__PURE__ */ jsx("div", {
615
+ className: "flex size-5 shrink-0 items-center justify-center text-sf-subtle",
616
+ children: getFileIcon(data.filename)
617
+ }),
618
+ /* @__PURE__ */ jsx(Tooltip, {
619
+ content: data.filename,
620
+ children: /* @__PURE__ */ jsx("span", {
621
+ className: "max-w-[160px] truncate font-medium text-sf-default",
622
+ children: name || "File"
623
+ })
624
+ }),
625
+ /* @__PURE__ */ jsx("span", {
626
+ className: "rounded bg-sf-tint px-1 py-0.5 font-semibold text-sf-subtle text-[10px] uppercase",
627
+ children: ext
628
+ }),
629
+ /* @__PURE__ */ jsx(Button, {
630
+ "aria-label": "Remove attachment",
631
+ className: "ml-0.5 size-4 shrink-0 rounded-full p-0 opacity-0 transition-opacity group-hover:opacity-100",
632
+ onClick: handleRemove,
633
+ size: "sm",
634
+ type: "button",
635
+ variant: "ghost",
636
+ children: /* @__PURE__ */ jsx(XIcon, { className: "size-3" })
637
+ })
638
+ ]
639
+ });
640
+ }
641
+ /**
642
+ * Renders all attachments using a render prop. Hidden when no files.
643
+ * Animates height as files are added/removed.
644
+ */
645
+ function PromptInputAttachments({ className, children, ...props }) {
646
+ const attachments = usePromptInputAttachments();
647
+ const [height, setHeight] = useState(0);
648
+ const contentRef = useRef(null);
649
+ useLayoutEffect(() => {
650
+ const el = contentRef.current;
651
+ if (!el) return;
652
+ const ro = new ResizeObserver(() => {
653
+ setHeight(el.getBoundingClientRect().height);
654
+ });
655
+ ro.observe(el);
656
+ setHeight(el.getBoundingClientRect().height);
657
+ return () => ro.disconnect();
658
+ }, []);
659
+ useLayoutEffect(() => {
660
+ const el = contentRef.current;
661
+ if (el) setHeight(el.getBoundingClientRect().height);
662
+ }, [attachments.files.length]);
663
+ if (attachments.files.length === 0) return null;
664
+ return /* @__PURE__ */ jsx("div", {
665
+ "aria-live": "polite",
666
+ className: cn("overflow-hidden px-2 transition-[height] duration-200 ease-out", className),
667
+ style: { height: attachments.files.length ? height : 0 },
668
+ ...props,
669
+ children: /* @__PURE__ */ jsx("div", {
670
+ className: "flex flex-wrap gap-2 py-1",
671
+ ref: contentRef,
672
+ children: attachments.files.map((file) => /* @__PURE__ */ jsx(Fragment, { children: children(file) }, file.id))
673
+ })
674
+ });
675
+ }
676
+ /**
677
+ * Voice input button. Uses the Web Speech API (Chrome/Edge). Hidden on unsupported browsers.
678
+ * Pulses while listening.
679
+ */
680
+ var PromptInputSpeechButton = ({ className, textareaRef, onTranscriptionChange, "aria-label": ariaLabel = "Voice input", ...props }) => {
681
+ const [isListening, setIsListening] = useState(false);
682
+ const [recognition, setRecognition] = useState(null);
683
+ const recognitionRef = useRef(null);
684
+ useEffect(() => {
685
+ if (typeof window === "undefined") return;
686
+ const SR = window.SpeechRecognition ?? window.webkitSpeechRecognition;
687
+ if (!SR) return;
688
+ const sr = new SR();
689
+ sr.continuous = true;
690
+ sr.interimResults = true;
691
+ sr.lang = "en-US";
692
+ const handleStart = () => setIsListening(true);
693
+ const handleEnd = () => setIsListening(false);
694
+ const handleResult = (event) => {
695
+ const e = event;
696
+ let final = "";
697
+ for (const result of Array.from({ length: e.results.length }, (_, i) => e.results[i])) if (result?.isFinal && result[0]?.transcript) final += result[0].transcript;
698
+ if (final && textareaRef?.current) {
699
+ const ta = textareaRef.current;
700
+ const next = ta.value + (ta.value ? " " : "") + final;
701
+ ta.value = next;
702
+ ta.dispatchEvent(new Event("input", { bubbles: true }));
703
+ onTranscriptionChange?.(next);
704
+ }
705
+ };
706
+ const handleError = (_event) => setIsListening(false);
707
+ sr.addEventListener("start", handleStart);
708
+ sr.addEventListener("end", handleEnd);
709
+ sr.addEventListener("result", handleResult);
710
+ sr.addEventListener("error", handleError);
711
+ recognitionRef.current = sr;
712
+ setRecognition(sr);
713
+ return () => {
714
+ sr.removeEventListener("start", handleStart);
715
+ sr.removeEventListener("end", handleEnd);
716
+ sr.removeEventListener("result", handleResult);
717
+ sr.removeEventListener("error", handleError);
718
+ recognitionRef.current?.stop();
719
+ };
720
+ }, [textareaRef, onTranscriptionChange]);
721
+ const handleToggleListening = useCallback(() => {
722
+ if (!recognition) return;
723
+ const sr = recognition;
724
+ if (isListening) sr.stop();
725
+ else sr.start();
726
+ }, [recognition, isListening]);
727
+ const button = /* @__PURE__ */ jsx(Button, {
728
+ "aria-label": ariaLabel,
729
+ className: cn("text-sf-subtle hover:text-sf-default transition-all", isListening && "animate-pulse text-sf-brand", className),
730
+ disabled: !recognition,
731
+ onClick: handleToggleListening,
732
+ size: "sm",
733
+ type: "button",
734
+ variant: "ghost",
735
+ ...props,
736
+ children: /* @__PURE__ */ jsx(MicrophoneIcon, { className: "size-4" })
737
+ });
738
+ if (!recognition) return null;
739
+ return /* @__PURE__ */ jsx(Tooltip, {
740
+ content: isListening ? "Stop listening" : "Voice input",
741
+ children: button
742
+ });
743
+ };
744
+ /**
745
+ * Convenience button that opens the file dialog directly (no dropdown needed).
746
+ */
747
+ var PromptInputAttachButton = ({ "aria-label": ariaLabel = "Attach file", className, ...props }) => {
748
+ const attachments = usePromptInputAttachments();
749
+ const handleClick = useCallback(() => {
750
+ attachments.openFileDialog();
751
+ }, [attachments]);
752
+ return /* @__PURE__ */ jsx(Tooltip, {
753
+ content: ariaLabel,
754
+ children: /* @__PURE__ */ jsx(Button, {
755
+ "aria-label": ariaLabel,
756
+ className: cn("text-sf-subtle hover:text-sf-default", className),
757
+ onClick: handleClick,
758
+ size: "sm",
759
+ type: "button",
760
+ variant: "ghost",
761
+ ...props,
762
+ children: /* @__PURE__ */ jsx(PaperclipIcon, { className: "size-4" })
763
+ })
764
+ });
765
+ };
766
+ //#endregion
767
+ export { usePromptInputController as C, usePromptInputAttachments as S, PromptInputTextarea as _, PromptInputActionMenuItem as a, SF_AI_PROMPT_INPUT_DEFAULT_VARIANTS as b, PromptInputAttachment as c, PromptInputBody as d, PromptInputButton as f, PromptInputSubmit as g, PromptInputSpeechButton as h, PromptInputActionMenuContent as i, PromptInputAttachments as l, PromptInputProvider as m, PromptInputActionAddAttachments as n, PromptInputActionMenuTrigger as o, PromptInputModeSelector as p, PromptInputActionMenu as r, PromptInputAttachButton as s, PromptInput as t, PromptInputBackLayer as u, PromptInputToolbar as v, useProviderAttachments as w, SF_AI_PROMPT_INPUT_VARIANTS as x, PromptInputTools as y };
768
+
769
+ //# sourceMappingURL=ai-prompt-input-Bo1YuJly.js.map