@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,128 @@
1
+ "use client";
2
+ import { t as cn } from "./cn-YROP2_ox.js";
3
+ import { n as useLinkComponent } from "./link-provider-BUZKXaNE.js";
4
+ import { t as Loader } from "./loader-DAcc-Uag.js";
5
+ import { t as Tooltip } from "./tooltip-Cb7QW-7H.js";
6
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/components/badge/badge.tsx
8
+ /** Base styles applied to all badge variants. */
9
+ var SF_BADGE_BASE_STYLES = "inline-flex w-fit flex-none shrink-0 items-center gap-1 justify-self-start rounded-full px-2 py-0.5 text-xs font-medium whitespace-nowrap select-none cursor-default";
10
+ /** Badge variant definitions mapping variant names to their Tailwind classes and descriptions. */
11
+ var SF_BADGE_VARIANTS = { variant: {
12
+ primary: {
13
+ classes: "bg-sf-contrast text-sf-inverse",
14
+ description: "Default high-emphasis badge for important labels"
15
+ },
16
+ secondary: {
17
+ classes: "bg-sf-fill text-sf-default",
18
+ description: "Subtle badge for secondary information"
19
+ },
20
+ destructive: {
21
+ classes: "bg-sf-danger text-sf-inverse",
22
+ description: "Error or danger state indicator"
23
+ },
24
+ outline: {
25
+ classes: "border border-sf-fill bg-transparent text-sf-default",
26
+ description: "Bordered badge with transparent background"
27
+ },
28
+ beta: {
29
+ classes: "border border-dashed border-sf-brand bg-transparent text-sf-link",
30
+ description: "Indicates beta or experimental features"
31
+ },
32
+ success: {
33
+ classes: "bg-sf-success/20 text-sf-success",
34
+ description: "Positive status indicator"
35
+ },
36
+ warning: {
37
+ classes: "bg-sf-warning/20 text-sf-warning",
38
+ description: "Caution or attention indicator"
39
+ },
40
+ info: {
41
+ classes: "bg-sf-info/20 text-sf-link",
42
+ description: "Informational badge"
43
+ },
44
+ ghost: {
45
+ classes: "bg-transparent text-sf-strong",
46
+ description: "Text-only badge with no background or border"
47
+ }
48
+ } };
49
+ var SF_BADGE_DEFAULT_VARIANTS = { variant: "primary" };
50
+ function badgeVariants({ variant = SF_BADGE_DEFAULT_VARIANTS.variant } = {}) {
51
+ return cn(SF_BADGE_BASE_STYLES, SF_BADGE_VARIANTS.variant[variant].classes);
52
+ }
53
+ var DOT_COLORS = {
54
+ green: "bg-sf-success",
55
+ red: "bg-sf-danger",
56
+ yellow: "bg-sf-warning",
57
+ blue: "bg-sf-brand",
58
+ gray: "bg-sf-subtle"
59
+ };
60
+ /**
61
+ * Small status label for categorizing or highlighting content.
62
+ * Supports icons, loading state, status dots, dismiss, tooltip, and interactive (button/link) modes.
63
+ *
64
+ * @example
65
+ * ```tsx
66
+ * <Badge variant="primary">Active</Badge>
67
+ * <Badge variant="success" dot="green">Online</Badge>
68
+ * <Badge onClick={() => apply()}>Apply filter</Badge>
69
+ * ```
70
+ */
71
+ function Badge({ variant = SF_BADGE_DEFAULT_VARIANTS.variant, className, children, icon: Icon, iconPosition = "left", onDismiss, loading, dot, tooltip, ...interactiveProps }) {
72
+ const LinkComponent = useLinkComponent();
73
+ const isInteractive = "onClick" in interactiveProps ? !!interactiveProps.onClick : "href" in interactiveProps ? !!interactiveProps.href : false;
74
+ const combinedClasses = cn(badgeVariants({ variant }), isInteractive && "cursor-pointer transition-opacity hover:opacity-80", className);
75
+ const leftIcon = loading ? /* @__PURE__ */ jsx(Loader, { size: 12 }) : Icon && iconPosition === "left" ? /* @__PURE__ */ jsx(Icon, { className: "size-3" }) : null;
76
+ const rightIcon = !loading && Icon && iconPosition === "right" ? /* @__PURE__ */ jsx(Icon, { className: "size-3" }) : null;
77
+ const content = /* @__PURE__ */ jsxs(Fragment, { children: [
78
+ dot ? /* @__PURE__ */ jsx("span", { className: cn("size-1.5 rounded-full", DOT_COLORS[dot]) }) : null,
79
+ leftIcon,
80
+ children,
81
+ rightIcon,
82
+ onDismiss ? /* @__PURE__ */ jsx("button", {
83
+ type: "button",
84
+ onClick: (e) => {
85
+ e.stopPropagation();
86
+ onDismiss();
87
+ },
88
+ className: "-mr-0.5 ml-0.5 inline-flex size-3 cursor-pointer items-center justify-center rounded-full opacity-70 hover:opacity-100",
89
+ "aria-label": "Remove",
90
+ children: /* @__PURE__ */ jsx("svg", {
91
+ className: "size-2.5",
92
+ viewBox: "0 0 12 12",
93
+ fill: "none",
94
+ stroke: "currentColor",
95
+ strokeWidth: "2",
96
+ strokeLinecap: "round",
97
+ children: /* @__PURE__ */ jsx("path", { d: "M3 3l6 6M9 3l-6 6" })
98
+ })
99
+ }) : null
100
+ ] });
101
+ let badge;
102
+ if ("href" in interactiveProps && interactiveProps.href) badge = /* @__PURE__ */ jsx(LinkComponent, {
103
+ href: interactiveProps.href,
104
+ className: combinedClasses,
105
+ children: content
106
+ });
107
+ else if ("onClick" in interactiveProps && interactiveProps.onClick) {
108
+ const handleClick = interactiveProps.onClick;
109
+ badge = /* @__PURE__ */ jsx("button", {
110
+ type: "button",
111
+ onClick: handleClick,
112
+ className: combinedClasses,
113
+ children: content
114
+ });
115
+ } else badge = /* @__PURE__ */ jsx("span", {
116
+ className: combinedClasses,
117
+ children: content
118
+ });
119
+ if (tooltip) return /* @__PURE__ */ jsx(Tooltip, {
120
+ content: tooltip,
121
+ children: badge
122
+ });
123
+ return badge;
124
+ }
125
+ //#endregion
126
+ export { badgeVariants as a, SF_BADGE_VARIANTS as i, SF_BADGE_BASE_STYLES as n, SF_BADGE_DEFAULT_VARIANTS as r, Badge as t };
127
+
128
+ //# sourceMappingURL=badge-D_eaA6wv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge-D_eaA6wv.js","names":[],"sources":["../src/components/badge/badge.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ElementType, MouseEvent, ReactNode } from \"react\";\n\nimport { cn } from \"../../utils/cn\";\nimport { useLinkComponent } from \"../../utils/link-provider\";\nimport { Loader } from \"../loader/loader\";\nimport { Tooltip } from \"../tooltip/tooltip\";\n\n/** Base styles applied to all badge variants. */\nexport const SF_BADGE_BASE_STYLES =\n \"inline-flex w-fit flex-none shrink-0 items-center gap-1 justify-self-start rounded-full px-2 py-0.5 text-xs font-medium whitespace-nowrap select-none cursor-default\";\n\n/** Badge variant definitions mapping variant names to their Tailwind classes and descriptions. */\nexport const SF_BADGE_VARIANTS = {\n variant: {\n primary: {\n classes: \"bg-sf-contrast text-sf-inverse\",\n description: \"Default high-emphasis badge for important labels\",\n },\n secondary: {\n classes: \"bg-sf-fill text-sf-default\",\n description: \"Subtle badge for secondary information\",\n },\n destructive: {\n classes: \"bg-sf-danger text-sf-inverse\",\n description: \"Error or danger state indicator\",\n },\n outline: {\n classes: \"border border-sf-fill bg-transparent text-sf-default\",\n description: \"Bordered badge with transparent background\",\n },\n beta: {\n classes:\n \"border border-dashed border-sf-brand bg-transparent text-sf-link\",\n description: \"Indicates beta or experimental features\",\n },\n success: {\n classes: \"bg-sf-success/20 text-sf-success\",\n description: \"Positive status indicator\",\n },\n warning: {\n classes: \"bg-sf-warning/20 text-sf-warning\",\n description: \"Caution or attention indicator\",\n },\n info: {\n classes: \"bg-sf-info/20 text-sf-link\",\n description: \"Informational badge\",\n },\n ghost: {\n classes: \"bg-transparent text-sf-strong\",\n description: \"Text-only badge with no background or border\",\n },\n },\n} as const;\n\nexport const SF_BADGE_DEFAULT_VARIANTS = {\n variant: \"primary\",\n} as const;\n\n// Derived types from SF_BADGE_VARIANTS\nexport type SFBadgeVariant = keyof typeof SF_BADGE_VARIANTS.variant;\n\nexport interface SFBadgeVariantsProps {\n variant?: SFBadgeVariant;\n}\n\nexport function badgeVariants({\n variant = SF_BADGE_DEFAULT_VARIANTS.variant,\n}: SFBadgeVariantsProps = {}) {\n return cn(\n // Base styles (exported as SF_BADGE_BASE_STYLES for Figma plugin)\n SF_BADGE_BASE_STYLES,\n // Apply variant styles from SF_BADGE_VARIANTS\n SF_BADGE_VARIANTS.variant[variant].classes\n );\n}\n\n// Legacy type alias for backwards compatibility\nexport type BadgeVariant = SFBadgeVariant;\n\nconst DOT_COLORS = {\n green: \"bg-sf-success\",\n red: \"bg-sf-danger\",\n yellow: \"bg-sf-warning\",\n blue: \"bg-sf-brand\",\n gray: \"bg-sf-subtle\",\n} as const;\n\nexport type BadgeDotColor = keyof typeof DOT_COLORS;\n\n/**\n * Badge component props.\n *\n * @example\n * ```tsx\n * <Badge variant=\"primary\">New</Badge>\n * <Badge variant=\"success\" icon={CheckCircle}>Deployed</Badge>\n * <Badge dot=\"green\">Online</Badge>\n * <Badge onDismiss={() => remove(id)}>typescript</Badge>\n * <Badge loading>Syncing</Badge>\n * <Badge onClick={() => filter(\"tag\")}>Filter</Badge>\n * ```\n */\nexport type BadgeProps = {\n /**\n * Visual style of the badge.\n * - `\"primary\"` — High-emphasis badge for important labels\n * - `\"secondary\"` — Subtle badge for secondary information\n * - `\"destructive\"` — Error or danger state indicator\n * - `\"outline\"` — Bordered badge with transparent background\n * - `\"beta\"` — Dashed-border badge for beta/experimental features\n * - `\"success\"` — Positive status indicator\n * - `\"warning\"` — Caution or attention indicator\n * - `\"info\"` — Informational badge\n * - `\"ghost\"` — Text-only badge with no background or border\n * @default \"primary\"\n */\n variant?: SFBadgeVariant;\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n /** Content rendered inside the badge. */\n children: ReactNode;\n /** Icon component rendered alongside the text. */\n icon?: ElementType;\n /**\n * Position of the icon relative to the text.\n * @default \"left\"\n */\n iconPosition?: \"left\" | \"right\";\n /** When provided, renders a dismiss button on the right. */\n onDismiss?: () => void;\n /** Shows a loading spinner, replacing the icon slot. */\n loading?: boolean;\n /** Renders a small colored status dot before the text. */\n dot?: BadgeDotColor;\n /** Wraps the badge in a Tooltip with this content. Requires a TooltipProvider ancestor. */\n tooltip?: ReactNode;\n} & (\n | { onClick?: (e: MouseEvent<HTMLButtonElement>) => void; href?: never }\n | { href?: string; onClick?: never }\n);\n\n/**\n * Small status label for categorizing or highlighting content.\n * Supports icons, loading state, status dots, dismiss, tooltip, and interactive (button/link) modes.\n *\n * @example\n * ```tsx\n * <Badge variant=\"primary\">Active</Badge>\n * <Badge variant=\"success\" dot=\"green\">Online</Badge>\n * <Badge onClick={() => apply()}>Apply filter</Badge>\n * ```\n */\nexport function Badge({\n variant = SF_BADGE_DEFAULT_VARIANTS.variant,\n className,\n children,\n icon: Icon,\n iconPosition = \"left\",\n onDismiss,\n loading,\n dot,\n tooltip,\n ...interactiveProps\n}: BadgeProps) {\n const LinkComponent = useLinkComponent();\n\n const isInteractive =\n \"onClick\" in interactiveProps\n ? !!interactiveProps.onClick\n : \"href\" in interactiveProps\n ? !!interactiveProps.href\n : false;\n\n const variantClasses = badgeVariants({ variant });\n const combinedClasses = cn(\n variantClasses,\n isInteractive && \"cursor-pointer transition-opacity hover:opacity-80\",\n className\n );\n\n // Build inner content\n const leftIcon = loading ? (\n <Loader size={12} />\n ) : Icon && iconPosition === \"left\" ? (\n <Icon className=\"size-3\" />\n ) : null;\n\n const rightIcon =\n !loading && Icon && iconPosition === \"right\" ? (\n <Icon className=\"size-3\" />\n ) : null;\n\n const dotElement = dot ? (\n <span className={cn(\"size-1.5 rounded-full\", DOT_COLORS[dot])} />\n ) : null;\n\n const dismissButton = onDismiss ? (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onDismiss();\n }}\n className=\"-mr-0.5 ml-0.5 inline-flex size-3 cursor-pointer items-center justify-center rounded-full opacity-70 hover:opacity-100\"\n aria-label=\"Remove\"\n >\n <svg\n className=\"size-2.5\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n >\n <path d=\"M3 3l6 6M9 3l-6 6\" />\n </svg>\n </button>\n ) : null;\n\n const content = (\n <>\n {dotElement}\n {leftIcon}\n {children}\n {rightIcon}\n {dismissButton}\n </>\n );\n\n // Determine the element to render\n let badge: ReactNode;\n\n if (\"href\" in interactiveProps && interactiveProps.href) {\n badge = (\n <LinkComponent href={interactiveProps.href} className={combinedClasses}>\n {content}\n </LinkComponent>\n );\n } else if (\"onClick\" in interactiveProps && interactiveProps.onClick) {\n const handleClick = interactiveProps.onClick;\n badge = (\n <button type=\"button\" onClick={handleClick} className={combinedClasses}>\n {content}\n </button>\n );\n } else {\n badge = <span className={combinedClasses}>{content}</span>;\n }\n\n if (tooltip) {\n return <Tooltip content={tooltip}>{badge}</Tooltip>;\n }\n\n return badge;\n}\n"],"mappings":";;;;;;;;AAUA,IAAa,uBACX;;AAGF,IAAa,oBAAoB,EAC/B,SAAS;CACP,SAAS;EACP,SAAS;EACT,aAAa;EACd;CACD,WAAW;EACT,SAAS;EACT,aAAa;EACd;CACD,aAAa;EACX,SAAS;EACT,aAAa;EACd;CACD,SAAS;EACP,SAAS;EACT,aAAa;EACd;CACD,MAAM;EACJ,SACE;EACF,aAAa;EACd;CACD,SAAS;EACP,SAAS;EACT,aAAa;EACd;CACD,SAAS;EACP,SAAS;EACT,aAAa;EACd;CACD,MAAM;EACJ,SAAS;EACT,aAAa;EACd;CACD,OAAO;EACL,SAAS;EACT,aAAa;EACd;CACF,EACF;AAED,IAAa,4BAA4B,EACvC,SAAS,WACV;AASD,SAAgB,cAAc,EAC5B,UAAU,0BAA0B,YACZ,EAAE,EAAE;AAC5B,QAAO,GAEL,sBAEA,kBAAkB,QAAQ,SAAS,QACpC;;AAMH,IAAM,aAAa;CACjB,OAAO;CACP,KAAK;CACL,QAAQ;CACR,MAAM;CACN,MAAM;CACP;;;;;;;;;;;;AAmED,SAAgB,MAAM,EACpB,UAAU,0BAA0B,SACpC,WACA,UACA,MAAM,MACN,eAAe,QACf,WACA,SACA,KACA,SACA,GAAG,oBACU;CACb,MAAM,gBAAgB,kBAAkB;CAExC,MAAM,gBACJ,aAAa,mBACT,CAAC,CAAC,iBAAiB,UACnB,UAAU,mBACR,CAAC,CAAC,iBAAiB,OACnB;CAGR,MAAM,kBAAkB,GADD,cAAc,EAAE,SAAS,CAAC,EAG/C,iBAAiB,sDACjB,UACD;CAGD,MAAM,WAAW,UACf,oBAAC,QAAD,EAAQ,MAAM,IAAM,CAAA,GAClB,QAAQ,iBAAiB,SAC3B,oBAAC,MAAD,EAAM,WAAU,UAAW,CAAA,GACzB;CAEJ,MAAM,YACJ,CAAC,WAAW,QAAQ,iBAAiB,UACnC,oBAAC,MAAD,EAAM,WAAU,UAAW,CAAA,GACzB;CA6BN,MAAM,UACJ,qBAAA,UAAA,EAAA,UAAA;EA5BiB,MACjB,oBAAC,QAAD,EAAM,WAAW,GAAG,yBAAyB,WAAW,KAAK,EAAI,CAAA,GAC/D;EA4BC;EACA;EACA;EA5BiB,YACpB,oBAAC,UAAD;GACE,MAAK;GACL,UAAU,MAAM;AACd,MAAE,iBAAiB;AACnB,eAAW;;GAEb,WAAU;GACV,cAAW;aAEX,oBAAC,OAAD;IACE,WAAU;IACV,SAAQ;IACR,MAAK;IACL,QAAO;IACP,aAAY;IACZ,eAAc;cAEd,oBAAC,QAAD,EAAM,GAAE,qBAAsB,CAAA;IAC1B,CAAA;GACC,CAAA,GACP;EASC,EAAA,CAAA;CAIL,IAAI;AAEJ,KAAI,UAAU,oBAAoB,iBAAiB,KACjD,SACE,oBAAC,eAAD;EAAe,MAAM,iBAAiB;EAAM,WAAW;YACpD;EACa,CAAA;UAET,aAAa,oBAAoB,iBAAiB,SAAS;EACpE,MAAM,cAAc,iBAAiB;AACrC,UACE,oBAAC,UAAD;GAAQ,MAAK;GAAS,SAAS;GAAa,WAAW;aACpD;GACM,CAAA;OAGX,SAAQ,oBAAC,QAAD;EAAM,WAAW;YAAkB;EAAe,CAAA;AAG5D,KAAI,QACF,QAAO,oBAAC,SAAD;EAAS,SAAS;YAAU;EAAgB,CAAA;AAGrD,QAAO"}
@@ -0,0 +1,54 @@
1
+ "use client";
2
+ import { t as cn } from "./cn-YROP2_ox.js";
3
+ import { isValidElement } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/components/banner/banner.tsx
6
+ /** Base styles applied to all banner variants. */
7
+ var SF_BANNER_BASE_STYLES = "flex w-full items-center gap-2 rounded-lg border px-4 py-1.5 text-base";
8
+ /** Banner variant definitions mapping variant names to their Tailwind classes and descriptions. */
9
+ var SF_BANNER_VARIANTS = { variant: {
10
+ default: {
11
+ classes: "bg-sf-info/20 border-sf-info text-sf-link selection:bg-sf-info-tint",
12
+ description: "Informational banner for general messages"
13
+ },
14
+ alert: {
15
+ classes: "bg-sf-warning/20 border-sf-warning text-sf-warning selection:bg-sf-warning-tint",
16
+ description: "Warning banner for cautionary messages"
17
+ },
18
+ error: {
19
+ classes: "bg-sf-danger/20 border-sf-danger text-sf-danger selection:bg-sf-danger-tint",
20
+ description: "Error banner for critical issues"
21
+ }
22
+ } };
23
+ var SF_BANNER_DEFAULT_VARIANTS = { variant: "default" };
24
+ function bannerVariants({ variant = SF_BANNER_DEFAULT_VARIANTS.variant } = {}) {
25
+ return cn(SF_BANNER_BASE_STYLES, SF_BANNER_VARIANTS.variant[variant].classes);
26
+ }
27
+ var BannerVariant = /* @__PURE__ */ function(BannerVariant) {
28
+ BannerVariant[BannerVariant["DEFAULT"] = 0] = "DEFAULT";
29
+ BannerVariant[BannerVariant["ALERT"] = 1] = "ALERT";
30
+ BannerVariant[BannerVariant["ERROR"] = 2] = "ERROR";
31
+ return BannerVariant;
32
+ }({});
33
+ /**
34
+ * Full-width message bar for informational, warning, or error notices.
35
+ *
36
+ * @example
37
+ * ```tsx
38
+ * <Banner variant="alert" icon={<WarningCircle />}>
39
+ * Review your billing information.
40
+ * </Banner>
41
+ * ```
42
+ */
43
+ function Banner({ icon, children, text, variant = SF_BANNER_DEFAULT_VARIANTS.variant, className }) {
44
+ const value = children ?? text;
45
+ const content = isValidElement(value) ? value : /* @__PURE__ */ jsx("p", { children: value });
46
+ return /* @__PURE__ */ jsxs("div", {
47
+ className: cn(bannerVariants({ variant }), className),
48
+ children: [icon, content]
49
+ });
50
+ }
51
+ //#endregion
52
+ export { BannerVariant as n, Banner as t };
53
+
54
+ //# sourceMappingURL=banner-B_6oBrsu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner-B_6oBrsu.js","names":[],"sources":["../src/components/banner/banner.tsx"],"sourcesContent":["import { type ReactNode, isValidElement } from \"react\";\n\nimport { cn } from \"../../utils/cn\";\n\n/** Base styles applied to all banner variants. */\nexport const SF_BANNER_BASE_STYLES =\n \"flex w-full items-center gap-2 rounded-lg border px-4 py-1.5 text-base\";\n\n/** Banner variant definitions mapping variant names to their Tailwind classes and descriptions. */\nexport const SF_BANNER_VARIANTS = {\n variant: {\n default: {\n classes:\n \"bg-sf-info/20 border-sf-info text-sf-link selection:bg-sf-info-tint\",\n description: \"Informational banner for general messages\",\n },\n alert: {\n classes:\n \"bg-sf-warning/20 border-sf-warning text-sf-warning selection:bg-sf-warning-tint\",\n description: \"Warning banner for cautionary messages\",\n },\n error: {\n classes:\n \"bg-sf-danger/20 border-sf-danger text-sf-danger selection:bg-sf-danger-tint\",\n description: \"Error banner for critical issues\",\n },\n },\n} as const;\n\nexport const SF_BANNER_DEFAULT_VARIANTS = {\n variant: \"default\",\n} as const;\n\n// Derived types from SF_BANNER_VARIANTS\nexport type SFBannerVariant = keyof typeof SF_BANNER_VARIANTS.variant;\n\nexport interface SFBannerVariantsProps {\n /**\n * Visual style of the banner.\n * - `\"default\"` — Informational banner for general messages\n * - `\"alert\"` — Warning banner for cautionary messages\n * - `\"error\"` — Error banner for critical issues\n * @default \"default\"\n */\n variant?: SFBannerVariant;\n}\n\nexport function bannerVariants({\n variant = SF_BANNER_DEFAULT_VARIANTS.variant,\n}: SFBannerVariantsProps = {}) {\n return cn(\n // Base styles (exported as SF_BANNER_BASE_STYLES for Figma plugin)\n SF_BANNER_BASE_STYLES,\n // Apply variant styles from SF_BANNER_VARIANTS\n SF_BANNER_VARIANTS.variant[variant].classes\n );\n}\n\n// Legacy enum for backwards compatibility\nexport enum BannerVariant {\n DEFAULT,\n ALERT,\n ERROR,\n}\n\n/**\n * Banner component props.\n *\n * @example\n * ```tsx\n * <Banner>This is an informational banner.</Banner>\n * <Banner variant=\"alert\">Your session will expire soon.</Banner>\n * <Banner variant=\"error\">We couldn't save your changes.</Banner>\n * ```\n */\nexport interface BannerProps {\n /** Icon element rendered before the banner text (e.g. from `@phosphor-icons/react`). */\n icon?: ReactNode;\n /** @deprecated Use `children` instead. Will be removed in a future major version. */\n text?: string;\n /** Banner message content. Accepts strings or custom React elements. */\n children?: ReactNode;\n /**\n * Visual style of the banner.\n * - `\"default\"` — Informational blue banner for general messages\n * - `\"alert\"` — Warning yellow banner for cautionary messages\n * - `\"error\"` — Error red banner for critical issues\n * @default \"default\"\n */\n variant?: SFBannerVariant;\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n}\n\n/**\n * Full-width message bar for informational, warning, or error notices.\n *\n * @example\n * ```tsx\n * <Banner variant=\"alert\" icon={<WarningCircle />}>\n * Review your billing information.\n * </Banner>\n * ```\n */\nexport function Banner({\n icon,\n children,\n text,\n variant = SF_BANNER_DEFAULT_VARIANTS.variant,\n className,\n}: BannerProps) {\n // Prefer children over deprecated text prop\n const value = children ?? text;\n\n const content = isValidElement(value) ? value : <p>{value}</p>;\n\n return (\n <div className={cn(bannerVariants({ variant }), className)}>\n {icon}\n {content}\n </div>\n );\n}\n"],"mappings":";;;;;;AAKA,IAAa,wBACX;;AAGF,IAAa,qBAAqB,EAChC,SAAS;CACP,SAAS;EACP,SACE;EACF,aAAa;EACd;CACD,OAAO;EACL,SACE;EACF,aAAa;EACd;CACD,OAAO;EACL,SACE;EACF,aAAa;EACd;CACF,EACF;AAED,IAAa,6BAA6B,EACxC,SAAS,WACV;AAgBD,SAAgB,eAAe,EAC7B,UAAU,2BAA2B,YACZ,EAAE,EAAE;AAC7B,QAAO,GAEL,uBAEA,mBAAmB,QAAQ,SAAS,QACrC;;AAIH,IAAY,gBAAL,yBAAA,eAAA;AACL,eAAA,cAAA,aAAA,KAAA;AACA,eAAA,cAAA,WAAA,KAAA;AACA,eAAA,cAAA,WAAA,KAAA;;KACD;;;;;;;;;;;AAyCD,SAAgB,OAAO,EACrB,MACA,UACA,MACA,UAAU,2BAA2B,SACrC,aACc;CAEd,MAAM,QAAQ,YAAY;CAE1B,MAAM,UAAU,eAAe,MAAM,GAAG,QAAQ,oBAAC,KAAD,EAAA,UAAI,OAAU,CAAA;AAE9D,QACE,qBAAC,OAAD;EAAK,WAAW,GAAG,eAAe,EAAE,SAAS,CAAC,EAAE,UAAU;YAA1D,CACG,MACA,QACG"}
@@ -0,0 +1,128 @@
1
+ "use client";
2
+ import { t as cn } from "./cn-YROP2_ox.js";
3
+ import { n as useLinkComponent } from "./link-provider-BUZKXaNE.js";
4
+ import { t as Button } from "./button-De0267YU.js";
5
+ import { t as SkeletonLine } from "./skeleton-line-Do3UmGk9.js";
6
+ import { useEffect, useState } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { CheckIcon, CopyIcon } from "@phosphor-icons/react";
9
+ //#region src/components/breadcrumbs/breadcrumbs.tsx
10
+ /** Breadcrumbs size variant definitions. */
11
+ var SF_BREADCRUMBS_VARIANTS = { size: {
12
+ sm: {
13
+ classes: "text-sm h-10 gap-0.5",
14
+ description: "Compact breadcrumbs for dense UIs"
15
+ },
16
+ base: {
17
+ classes: "text-base h-12 gap-1",
18
+ description: "Default breadcrumbs size"
19
+ }
20
+ } };
21
+ var SF_BREADCRUMBS_DEFAULT_VARIANTS = { size: "base" };
22
+ function breadcrumbsVariants({ size = SF_BREADCRUMBS_DEFAULT_VARIANTS.size } = {}) {
23
+ return cn("group mr-4 hidden min-w-0 grow items-center sm:flex", SF_BREADCRUMBS_VARIANTS.size[size].classes);
24
+ }
25
+ var Link = ({ href, icon, children }) => {
26
+ return /* @__PURE__ */ jsxs(useLinkComponent(), {
27
+ to: href,
28
+ className: "flex min-w-0 items-center gap-1 text-sf-subtle no-underline",
29
+ children: [!!icon && /* @__PURE__ */ jsx("span", {
30
+ className: "flex shrink-0 items-center",
31
+ children: icon
32
+ }), children]
33
+ });
34
+ };
35
+ function Current({ children, icon, loading }) {
36
+ if (loading) return /* @__PURE__ */ jsxs("div", {
37
+ className: "flex w-[125px] min-w-0 items-center gap-1",
38
+ children: [icon && /* @__PURE__ */ jsx("span", {
39
+ className: "flex shrink-0 items-center",
40
+ children: icon
41
+ }), /* @__PURE__ */ jsx(SkeletonLine, {})]
42
+ });
43
+ return /* @__PURE__ */ jsxs("div", {
44
+ className: "flex items-center gap-1 truncate font-medium",
45
+ "aria-current": "page",
46
+ children: [icon && /* @__PURE__ */ jsx("span", {
47
+ className: "flex shrink-0 items-center",
48
+ children: icon
49
+ }), children]
50
+ });
51
+ }
52
+ function Separator() {
53
+ return /* @__PURE__ */ jsx("span", {
54
+ className: "flex items-center text-sf-inactive",
55
+ "aria-hidden": "true",
56
+ children: /* @__PURE__ */ jsx("svg", {
57
+ width: "24",
58
+ height: "24",
59
+ fill: "none",
60
+ viewBox: "0 0 24 24",
61
+ children: /* @__PURE__ */ jsx("path", {
62
+ stroke: "currentColor",
63
+ strokeLinecap: "round",
64
+ strokeLinejoin: "round",
65
+ strokeWidth: "1.5",
66
+ d: "M10.75 8.75L14.25 12L10.75 15.25"
67
+ })
68
+ })
69
+ });
70
+ }
71
+ function Clipboard({ text }) {
72
+ const [isCopied, setIsCopied] = useState(false);
73
+ useEffect(() => {
74
+ if (!isCopied) return;
75
+ const timeoutId = setTimeout(() => setIsCopied(false), 2e3);
76
+ return () => clearTimeout(timeoutId);
77
+ }, [isCopied]);
78
+ const handleCopyDeeplink = async () => {
79
+ if (!text) return;
80
+ try {
81
+ await navigator.clipboard.writeText(text);
82
+ setIsCopied(true);
83
+ } catch (err) {
84
+ console.error("Failed to copy deeplink:", err);
85
+ }
86
+ };
87
+ return /* @__PURE__ */ jsx(Button, {
88
+ variant: "ghost",
89
+ shape: "square",
90
+ size: "sm",
91
+ className: "opacity-0 transition-[opacity] group-hover:opacity-100",
92
+ onClick: handleCopyDeeplink,
93
+ title: "Click to copy",
94
+ "aria-label": "Copy",
95
+ children: isCopied ? /* @__PURE__ */ jsx(CheckIcon, {
96
+ weight: "bold",
97
+ className: "text-sf-success"
98
+ }) : /* @__PURE__ */ jsx(CopyIcon, { weight: "regular" })
99
+ });
100
+ }
101
+ /**
102
+ * Navigation breadcrumb trail showing the current page's location in a hierarchy.
103
+ * Compound component with `Breadcrumbs.Link`, `Breadcrumbs.Current`, `Breadcrumbs.Separator`, and `Breadcrumbs.Clipboard`.
104
+ *
105
+ * @example
106
+ * ```tsx
107
+ * <Breadcrumbs>
108
+ * <Breadcrumbs.Link href="/">Home</Breadcrumbs.Link>
109
+ * <Breadcrumbs.Separator />
110
+ * <Breadcrumbs.Current>Dashboard</Breadcrumbs.Current>
111
+ * </Breadcrumbs>
112
+ * ```
113
+ */
114
+ function Breadcrumb({ children, size = "base", className }) {
115
+ return /* @__PURE__ */ jsx("nav", {
116
+ className: cn(breadcrumbsVariants({ size }), className),
117
+ "aria-label": "breadcrumb",
118
+ children
119
+ });
120
+ }
121
+ Breadcrumb.Link = Link;
122
+ Breadcrumb.Current = Current;
123
+ Breadcrumb.Separator = Separator;
124
+ Breadcrumb.Clipboard = Clipboard;
125
+ //#endregion
126
+ export { breadcrumbsVariants as i, SF_BREADCRUMBS_DEFAULT_VARIANTS as n, SF_BREADCRUMBS_VARIANTS as r, Breadcrumb as t };
127
+
128
+ //# sourceMappingURL=breadcrumbs-BlmeYfgq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs-BlmeYfgq.js","names":[],"sources":["../src/components/breadcrumbs/breadcrumbs.tsx"],"sourcesContent":["import { CheckIcon, CopyIcon } from \"@phosphor-icons/react\";\nimport { useEffect, useState, type PropsWithChildren } from \"react\";\n\nimport { Button } from \"../../components/button\";\nimport { SkeletonLine } from \"../../components/loader/skeleton-line\";\nimport { cn } from \"../../utils/cn\";\nimport { useLinkComponent } from \"../../utils/link-provider\";\n\n/** Breadcrumbs size variant definitions. */\nexport const SF_BREADCRUMBS_VARIANTS = {\n size: {\n sm: {\n classes: \"text-sm h-10 gap-0.5\",\n description: \"Compact breadcrumbs for dense UIs\",\n },\n base: {\n classes: \"text-base h-12 gap-1\",\n description: \"Default breadcrumbs size\",\n },\n },\n} as const;\n\nexport const SF_BREADCRUMBS_DEFAULT_VARIANTS = {\n size: \"base\",\n} as const;\n\nexport type SFBreadcrumbsSize = keyof typeof SF_BREADCRUMBS_VARIANTS.size;\n\nexport interface SFBreadcrumbsVariantsProps {\n /**\n * Size of the breadcrumbs.\n * - `\"sm\"` — Compact breadcrumbs for dense UIs\n * - `\"base\"` — Default breadcrumbs size\n * @default \"base\"\n */\n size?: SFBreadcrumbsSize;\n}\n\nexport function breadcrumbsVariants({\n size = SF_BREADCRUMBS_DEFAULT_VARIANTS.size,\n}: SFBreadcrumbsVariantsProps = {}) {\n return cn(\n \"group mr-4 hidden min-w-0 grow items-center sm:flex\",\n SF_BREADCRUMBS_VARIANTS.size[size].classes\n );\n}\n\nexport interface BreadcrumbsItemProps {\n href: string;\n icon?: React.ReactNode;\n}\n\nconst Link = ({\n href,\n icon,\n children,\n}: PropsWithChildren<BreadcrumbsItemProps>) => {\n const LinkComponent = useLinkComponent();\n\n return (\n <LinkComponent\n to={href}\n className=\"flex min-w-0 items-center gap-1 text-sf-subtle no-underline\"\n >\n {!!icon && <span className=\"flex shrink-0 items-center\">{icon}</span>}\n {children}\n </LinkComponent>\n );\n};\n\ninterface BreadcrumbsCurrentProps {\n loading?: boolean;\n icon?: React.ReactNode;\n}\n\nfunction Current({\n children,\n icon,\n loading,\n}: PropsWithChildren<BreadcrumbsCurrentProps>) {\n if (loading) {\n return (\n <div className=\"flex w-[125px] min-w-0 items-center gap-1\">\n {icon && <span className=\"flex shrink-0 items-center\">{icon}</span>}\n <SkeletonLine />\n </div>\n );\n }\n\n return (\n <div\n className=\"flex items-center gap-1 truncate font-medium\"\n aria-current=\"page\"\n >\n {icon && <span className=\"flex shrink-0 items-center\">{icon}</span>}\n {children}\n </div>\n );\n}\n\nfunction Separator() {\n return (\n <span className=\"flex items-center text-sf-inactive\" aria-hidden=\"true\">\n <svg width=\"24\" height=\"24\" fill=\"none\" viewBox=\"0 0 24 24\">\n <path\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"1.5\"\n d=\"M10.75 8.75L14.25 12L10.75 15.25\"\n />\n </svg>\n </span>\n );\n}\n\nfunction Clipboard({ text }: { text: string }) {\n const [isCopied, setIsCopied] = useState(false);\n\n useEffect(() => {\n if (!isCopied) return;\n\n const timeoutId = setTimeout(() => setIsCopied(false), 2000);\n return () => clearTimeout(timeoutId);\n }, [isCopied]);\n\n const handleCopyDeeplink = async () => {\n if (!text) return;\n\n try {\n await navigator.clipboard.writeText(text);\n setIsCopied(true);\n } catch (err) {\n console.error(\"Failed to copy deeplink:\", err);\n }\n };\n\n return (\n <Button\n variant=\"ghost\"\n shape=\"square\"\n size=\"sm\"\n className=\"opacity-0 transition-[opacity] group-hover:opacity-100\"\n onClick={handleCopyDeeplink}\n title=\"Click to copy\"\n aria-label=\"Copy\"\n >\n {isCopied ? (\n <CheckIcon weight=\"bold\" className=\"text-sf-success\" />\n ) : (\n <CopyIcon weight=\"regular\" />\n )}\n </Button>\n );\n}\n\n/**\n * Breadcrumbs component props.\n *\n * @example\n * ```tsx\n * <Breadcrumbs>\n * <Breadcrumbs.Link href=\"/\">Home</Breadcrumbs.Link>\n * <Breadcrumbs.Separator />\n * <Breadcrumbs.Link href=\"/docs\">Docs</Breadcrumbs.Link>\n * <Breadcrumbs.Separator />\n * <Breadcrumbs.Current>Current Page</Breadcrumbs.Current>\n * </Breadcrumbs>\n * ```\n */\nexport interface BreadcrumbsProps\n extends PropsWithChildren, SFBreadcrumbsVariantsProps {\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n}\n\n/**\n * Navigation breadcrumb trail showing the current page's location in a hierarchy.\n * Compound component with `Breadcrumbs.Link`, `Breadcrumbs.Current`, `Breadcrumbs.Separator`, and `Breadcrumbs.Clipboard`.\n *\n * @example\n * ```tsx\n * <Breadcrumbs>\n * <Breadcrumbs.Link href=\"/\">Home</Breadcrumbs.Link>\n * <Breadcrumbs.Separator />\n * <Breadcrumbs.Current>Dashboard</Breadcrumbs.Current>\n * </Breadcrumbs>\n * ```\n */\nexport function Breadcrumb({\n children,\n size = \"base\",\n className,\n}: BreadcrumbsProps) {\n return (\n <nav\n className={cn(breadcrumbsVariants({ size }), className)}\n aria-label=\"breadcrumb\"\n >\n {children}\n </nav>\n );\n}\n\nBreadcrumb.Link = Link;\nBreadcrumb.Current = Current;\nBreadcrumb.Separator = Separator;\nBreadcrumb.Clipboard = Clipboard;\n"],"mappings":";;;;;;;;;;AASA,IAAa,0BAA0B,EACrC,MAAM;CACJ,IAAI;EACF,SAAS;EACT,aAAa;EACd;CACD,MAAM;EACJ,SAAS;EACT,aAAa;EACd;CACF,EACF;AAED,IAAa,kCAAkC,EAC7C,MAAM,QACP;AAcD,SAAgB,oBAAoB,EAClC,OAAO,gCAAgC,SACT,EAAE,EAAE;AAClC,QAAO,GACL,uDACA,wBAAwB,KAAK,MAAM,QACpC;;AAQH,IAAM,QAAQ,EACZ,MACA,MACA,eAC6C;AAG7C,QACE,qBAHoB,kBAAkB,EAGtC;EACE,IAAI;EACJ,WAAU;YAFZ,CAIG,CAAC,CAAC,QAAQ,oBAAC,QAAD;GAAM,WAAU;aAA8B;GAAY,CAAA,EACpE,SACa;;;AASpB,SAAS,QAAQ,EACf,UACA,MACA,WAC6C;AAC7C,KAAI,QACF,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACG,QAAQ,oBAAC,QAAD;GAAM,WAAU;aAA8B;GAAY,CAAA,EACnE,oBAAC,cAAD,EAAgB,CAAA,CACZ;;AAIV,QACE,qBAAC,OAAD;EACE,WAAU;EACV,gBAAa;YAFf,CAIG,QAAQ,oBAAC,QAAD;GAAM,WAAU;aAA8B;GAAY,CAAA,EAClE,SACG;;;AAIV,SAAS,YAAY;AACnB,QACE,oBAAC,QAAD;EAAM,WAAU;EAAqC,eAAY;YAC/D,oBAAC,OAAD;GAAK,OAAM;GAAK,QAAO;GAAK,MAAK;GAAO,SAAQ;aAC9C,oBAAC,QAAD;IACE,QAAO;IACP,eAAc;IACd,gBAAe;IACf,aAAY;IACZ,GAAE;IACF,CAAA;GACE,CAAA;EACD,CAAA;;AAIX,SAAS,UAAU,EAAE,QAA0B;CAC7C,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;AAE/C,iBAAgB;AACd,MAAI,CAAC,SAAU;EAEf,MAAM,YAAY,iBAAiB,YAAY,MAAM,EAAE,IAAK;AAC5D,eAAa,aAAa,UAAU;IACnC,CAAC,SAAS,CAAC;CAEd,MAAM,qBAAqB,YAAY;AACrC,MAAI,CAAC,KAAM;AAEX,MAAI;AACF,SAAM,UAAU,UAAU,UAAU,KAAK;AACzC,eAAY,KAAK;WACV,KAAK;AACZ,WAAQ,MAAM,4BAA4B,IAAI;;;AAIlD,QACE,oBAAC,QAAD;EACE,SAAQ;EACR,OAAM;EACN,MAAK;EACL,WAAU;EACV,SAAS;EACT,OAAM;EACN,cAAW;YAEV,WACC,oBAAC,WAAD;GAAW,QAAO;GAAO,WAAU;GAAoB,CAAA,GAEvD,oBAAC,UAAD,EAAU,QAAO,WAAY,CAAA;EAExB,CAAA;;;;;;;;;;;;;;;AAqCb,SAAgB,WAAW,EACzB,UACA,OAAO,QACP,aACmB;AACnB,QACE,oBAAC,OAAD;EACE,WAAW,GAAG,oBAAoB,EAAE,MAAM,CAAC,EAAE,UAAU;EACvD,cAAW;EAEV;EACG,CAAA;;AAIV,WAAW,OAAO;AAClB,WAAW,UAAU;AACrB,WAAW,YAAY;AACvB,WAAW,YAAY"}
@@ -0,0 +1,170 @@
1
+ "use client";
2
+ import { t as cn } from "./cn-YROP2_ox.js";
3
+ import { n as useLinkComponent } from "./link-provider-BUZKXaNE.js";
4
+ import { t as Loader } from "./loader-DAcc-Uag.js";
5
+ import React from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { ArrowsClockwise } from "@phosphor-icons/react";
8
+ //#region src/components/button/button.tsx
9
+ /** Button variant definitions mapping shape, size, and variant names to their Tailwind classes. */
10
+ var SF_BUTTON_VARIANTS = {
11
+ shape: {
12
+ base: {
13
+ classes: "",
14
+ description: "Default rectangular button shape"
15
+ },
16
+ square: {
17
+ classes: "items-center justify-center p-0",
18
+ description: "Square button for icon-only actions"
19
+ },
20
+ circle: {
21
+ classes: "items-center justify-center p-0 rounded-full",
22
+ description: "Circular button for icon-only actions"
23
+ }
24
+ },
25
+ size: {
26
+ xs: {
27
+ classes: "h-5 gap-1 rounded-sm px-1.5 text-xs",
28
+ description: "Extra small button for compact UIs"
29
+ },
30
+ sm: {
31
+ classes: "h-6.5 gap-1 rounded-md px-2 text-xs",
32
+ description: "Small button for secondary actions"
33
+ },
34
+ base: {
35
+ classes: "h-9 gap-1.5 rounded-lg px-3 text-base",
36
+ description: "Default button size"
37
+ },
38
+ lg: {
39
+ classes: "h-10 gap-2 rounded-lg px-4 text-base",
40
+ description: "Large button for primary CTAs"
41
+ }
42
+ },
43
+ compactSize: {
44
+ xs: { classes: "size-3.5" },
45
+ sm: { classes: "size-6.5" },
46
+ base: { classes: "size-9" },
47
+ lg: { classes: "size-10" }
48
+ },
49
+ variant: {
50
+ primary: {
51
+ classes: "bg-sf-brand !text-white hover:bg-sf-brand-hover focus:bg-sf-brand-hover disabled:bg-sf-brand/50",
52
+ description: "High-emphasis button for primary actions"
53
+ },
54
+ secondary: {
55
+ classes: "bg-sf-control !text-sf-default ring not-disabled:hover:border-secondary! not-disabled:hover:bg-sf-control disabled:bg-sf-control/50 disabled:!text-sf-default/70 ring-sf-line data-[state=open]:bg-sf-control",
56
+ description: "Default button style for most actions"
57
+ },
58
+ ghost: {
59
+ classes: "text-sf-default hover:bg-sf-tint shadow-none bg-inherit",
60
+ description: "Minimal button with no background"
61
+ },
62
+ destructive: {
63
+ classes: "bg-sf-danger !text-white hover:bg-sf-danger/70",
64
+ description: "Danger button for destructive actions like delete"
65
+ },
66
+ "secondary-destructive": {
67
+ classes: "bg-sf-control !text-sf-danger ring not-disabled:hover:border-secondary! not-disabled:hover:bg-sf-control disabled:bg-sf-control/50 disabled:!text-sf-danger/70 ring-sf-line data-[state=open]:bg-sf-control",
68
+ description: "Secondary button with destructive text for less prominent dangerous actions"
69
+ },
70
+ outline: {
71
+ classes: "bg-sf-base text-sf-default ring ring-sf-line",
72
+ description: "Bordered button with transparent background"
73
+ }
74
+ }
75
+ };
76
+ var SF_BUTTON_DEFAULT_VARIANTS = {
77
+ shape: "base",
78
+ size: "base",
79
+ variant: "secondary"
80
+ };
81
+ function buttonVariants({ variant = SF_BUTTON_DEFAULT_VARIANTS.variant, size = SF_BUTTON_DEFAULT_VARIANTS.size, shape = SF_BUTTON_DEFAULT_VARIANTS.shape } = {}) {
82
+ const isCompactShape = shape === "square" || shape === "circle";
83
+ return cn("group flex w-max shrink-0 items-center font-medium select-none", "border-0 shadow-xs", "cursor-pointer", "disabled:cursor-not-allowed disabled:text-sf-subtle", SF_BUTTON_VARIANTS.variant[variant].classes, SF_BUTTON_VARIANTS.size[size].classes, SF_BUTTON_VARIANTS.shape[shape].classes, isCompactShape && SF_BUTTON_VARIANTS.compactSize[size].classes);
84
+ }
85
+ var renderIconNode = (IconComponent) => {
86
+ if (!IconComponent) return null;
87
+ if (React.isValidElement(IconComponent)) return IconComponent;
88
+ return /* @__PURE__ */ jsx(IconComponent, {});
89
+ };
90
+ /**
91
+ * Primary action trigger. Supports multiple variants, sizes, shapes, icons, and loading state.
92
+ *
93
+ * @example
94
+ * ```tsx
95
+ * <Button variant="primary">Save</Button>
96
+ * <Button variant="secondary" icon={PlusIcon}>Create Worker</Button>
97
+ * ```
98
+ */
99
+ var Button = React.forwardRef(({ children, className, disabled, loading, shape = "base", size = "base", variant = "secondary", icon: IconComponent, ...props }, ref) => {
100
+ const { type, ...restProps } = props;
101
+ return /* @__PURE__ */ jsxs("button", {
102
+ ref,
103
+ className: cn(buttonVariants({
104
+ variant,
105
+ size,
106
+ shape
107
+ }), "outline-none focus:opacity-100 focus-visible:ring-1 focus-visible:ring-sf-ring *:in-focus:opacity-100", disabled && "cursor-not-allowed opacity-50", className),
108
+ disabled: loading || disabled,
109
+ type: type ?? "button",
110
+ ...restProps,
111
+ children: [
112
+ loading && /* @__PURE__ */ jsx(Loader, { size: size === "lg" ? 16 : 14 }),
113
+ !loading && renderIconNode(IconComponent),
114
+ children
115
+ ]
116
+ });
117
+ });
118
+ Button.displayName = "Button";
119
+ /**
120
+ * Square button with a rotating arrows icon, used to trigger data refresh actions.
121
+ *
122
+ * @example
123
+ * ```tsx
124
+ * <RefreshButton loading={isRefreshing} onClick={refresh} />
125
+ * ```
126
+ */
127
+ var RefreshButton = ({ "aria-label": ariaLabel = "Refresh", loading, ...props }) => /* @__PURE__ */ jsx(Button, {
128
+ shape: "square",
129
+ "aria-label": ariaLabel,
130
+ ...props,
131
+ children: /* @__PURE__ */ jsx(ArrowsClockwise, { className: cn({
132
+ "animate-refresh": loading,
133
+ "size-4.5": props.size === "base" || !props.size,
134
+ "size-4": props.size === "sm",
135
+ "size-5": props.size === "lg"
136
+ }) })
137
+ });
138
+ /**
139
+ * Anchor element styled as a button. Integrates with `LinkProvider` for framework routing.
140
+ *
141
+ * @example
142
+ * ```tsx
143
+ * <LinkButton href="/settings" variant="ghost">Settings</LinkButton>
144
+ * ```
145
+ */
146
+ var LinkButton = React.forwardRef(({ children, className, external, href, shape = "base", size = "base", variant = "ghost", icon: IconComponent, ...props }, ref) => {
147
+ const LinkComponent = useLinkComponent();
148
+ const externalProps = external ? {
149
+ target: "_blank",
150
+ rel: "noopener noreferrer"
151
+ } : {};
152
+ return /* @__PURE__ */ jsxs(LinkComponent, {
153
+ ref,
154
+ className: cn(buttonVariants({
155
+ variant,
156
+ size,
157
+ shape
158
+ }), "flex items-center no-underline!", className),
159
+ href,
160
+ to: typeof href === "string" ? href : void 0,
161
+ ...externalProps,
162
+ ...props,
163
+ children: [renderIconNode(IconComponent), children]
164
+ });
165
+ });
166
+ LinkButton.displayName = "LinkButton";
167
+ //#endregion
168
+ export { buttonVariants as i, LinkButton as n, RefreshButton as r, Button as t };
169
+
170
+ //# sourceMappingURL=button-De0267YU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-De0267YU.js","names":[],"sources":["../src/components/button/button.tsx"],"sourcesContent":["import { ArrowsClockwise, type Icon } from \"@phosphor-icons/react\";\nimport React from \"react\";\n\nimport { cn } from \"../../utils/cn\";\nimport { useLinkComponent } from \"../../utils/link-provider\";\nimport { Loader } from \"../loader/loader\";\n\n/** Button variant definitions mapping shape, size, and variant names to their Tailwind classes. */\nexport const SF_BUTTON_VARIANTS = {\n shape: {\n base: {\n classes: \"\",\n description: \"Default rectangular button shape\",\n },\n square: {\n classes: \"items-center justify-center p-0\",\n description: \"Square button for icon-only actions\",\n },\n circle: {\n classes: \"items-center justify-center p-0 rounded-full\",\n description: \"Circular button for icon-only actions\",\n },\n },\n size: {\n xs: {\n classes: \"h-5 gap-1 rounded-sm px-1.5 text-xs\",\n description: \"Extra small button for compact UIs\",\n },\n sm: {\n classes: \"h-6.5 gap-1 rounded-md px-2 text-xs\",\n description: \"Small button for secondary actions\",\n },\n base: {\n classes: \"h-9 gap-1.5 rounded-lg px-3 text-base\",\n description: \"Default button size\",\n },\n lg: {\n classes: \"h-10 gap-2 rounded-lg px-4 text-base\",\n description: \"Large button for primary CTAs\",\n },\n },\n compactSize: {\n xs: { classes: \"size-3.5\" },\n sm: { classes: \"size-6.5\" },\n base: { classes: \"size-9\" },\n lg: { classes: \"size-10\" },\n },\n variant: {\n primary: {\n classes:\n \"bg-sf-brand !text-white hover:bg-sf-brand-hover focus:bg-sf-brand-hover disabled:bg-sf-brand/50\",\n description: \"High-emphasis button for primary actions\",\n },\n secondary: {\n classes:\n \"bg-sf-control !text-sf-default ring not-disabled:hover:border-secondary! not-disabled:hover:bg-sf-control disabled:bg-sf-control/50 disabled:!text-sf-default/70 ring-sf-line data-[state=open]:bg-sf-control\",\n description: \"Default button style for most actions\",\n },\n ghost: {\n classes: \"text-sf-default hover:bg-sf-tint shadow-none bg-inherit\",\n description: \"Minimal button with no background\",\n },\n destructive: {\n classes: \"bg-sf-danger !text-white hover:bg-sf-danger/70\",\n description: \"Danger button for destructive actions like delete\",\n },\n \"secondary-destructive\": {\n classes:\n \"bg-sf-control !text-sf-danger ring not-disabled:hover:border-secondary! not-disabled:hover:bg-sf-control disabled:bg-sf-control/50 disabled:!text-sf-danger/70 ring-sf-line data-[state=open]:bg-sf-control\",\n description:\n \"Secondary button with destructive text for less prominent dangerous actions\",\n },\n outline: {\n classes: \"bg-sf-base text-sf-default ring ring-sf-line\",\n description: \"Bordered button with transparent background\",\n },\n },\n} as const;\n\nexport const SF_BUTTON_DEFAULT_VARIANTS = {\n shape: \"base\",\n size: \"base\",\n variant: \"secondary\",\n} as const;\n\n// Derived types from SF_BUTTON_VARIANTS\nexport type SFButtonShape = keyof typeof SF_BUTTON_VARIANTS.shape;\nexport type SFButtonSize = keyof typeof SF_BUTTON_VARIANTS.size;\nexport type SFButtonVariant = keyof typeof SF_BUTTON_VARIANTS.variant;\n\nexport interface SFButtonVariantsProps {\n /**\n * Button shape.\n * - `\"base\"` — Default rectangular button\n * - `\"square\"` — Square button for icon-only actions\n * - `\"circle\"` — Circular button for icon-only actions\n * @default \"base\"\n */\n shape?: SFButtonShape;\n /**\n * Button size.\n * - `\"xs\"` — Extra small for compact UIs\n * - `\"sm\"` — Small for secondary actions\n * - `\"base\"` — Default size\n * - `\"lg\"` — Large for primary CTAs\n * @default \"base\"\n */\n size?: SFButtonSize;\n /**\n * Visual style of the button.\n * - `\"primary\"` — High-emphasis, brand-colored for primary actions\n * - `\"secondary\"` — Default style with border for most actions\n * - `\"ghost\"` — Minimal, no background for tertiary actions\n * - `\"destructive\"` — Danger button for destructive actions\n * - `\"secondary-destructive\"` — Secondary style with destructive text\n * - `\"outline\"` — Bordered with transparent background\n * @default \"secondary\"\n */\n variant?: SFButtonVariant;\n}\n\nexport function buttonVariants({\n variant = SF_BUTTON_DEFAULT_VARIANTS.variant,\n size = SF_BUTTON_DEFAULT_VARIANTS.size,\n shape = SF_BUTTON_DEFAULT_VARIANTS.shape,\n}: SFButtonVariantsProps = {}) {\n const isCompactShape = shape === \"square\" || shape === \"circle\";\n\n return cn(\n // Base styles\n \"group flex w-max shrink-0 items-center font-medium select-none\",\n \"border-0 shadow-xs\",\n \"cursor-pointer\",\n // Disabled state\n \"disabled:cursor-not-allowed disabled:text-sf-subtle\",\n // Apply variant, size, shape styles from SF_BUTTON_VARIANTS\n SF_BUTTON_VARIANTS.variant[variant].classes,\n SF_BUTTON_VARIANTS.size[size].classes,\n SF_BUTTON_VARIANTS.shape[shape].classes,\n isCompactShape && SF_BUTTON_VARIANTS.compactSize[size].classes\n );\n}\n\n// Normalize icon prop to support both React elements and component types\nconst renderIconNode = (IconComponent?: Icon | React.ReactNode) => {\n if (!IconComponent) return null;\n if (React.isValidElement(IconComponent)) return IconComponent;\n const Comp = IconComponent as React.ComponentType<Record<string, unknown>>;\n return <Comp />;\n};\n\n/**\n * Button component props.\n *\n * Uses a discriminated union on `shape` so that icon-only buttons\n * (`shape=\"square\"` or `shape=\"circle\"`) require an `aria-label`.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\">Save</Button>\n * <Button variant=\"secondary\" shape=\"square\" icon={PlusIcon} aria-label=\"Add\" />\n * <Button variant=\"destructive\" loading>Deleting...</Button>\n * ```\n */\ntype ButtonBaseProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\n /** Content rendered inside the button. */\n children?: React.ReactNode;\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n /** Icon from `@phosphor-icons/react` or a React element. Rendered before children. */\n icon?: Icon | React.ReactNode;\n /** Shows a loading spinner and disables interaction. */\n loading?: boolean;\n};\n\ntype ButtonWithTextProps = ButtonBaseProps & {\n shape?: \"base\";\n size?: SFButtonSize;\n variant?: SFButtonVariant;\n};\n\ntype IconOnlyButtonProps = ButtonBaseProps & {\n shape: \"square\" | \"circle\";\n size?: SFButtonSize;\n variant?: SFButtonVariant;\n /** Required for icon-only buttons to provide accessible label for screen readers */\n \"aria-label\": string;\n};\n\nexport type ButtonProps = ButtonWithTextProps | IconOnlyButtonProps;\n\n/**\n * LinkButton component props — renders an anchor styled as a button.\n *\n * @example\n * ```tsx\n * <LinkButton href=\"/docs\" variant=\"ghost\" icon={BookIcon}>Docs</LinkButton>\n * <LinkButton href=\"https://example.com\" external>Visit Site</LinkButton>\n * ```\n */\nexport type LinkButtonProps = React.AnchorHTMLAttributes<HTMLAnchorElement> &\n SFButtonVariantsProps & {\n /** Content rendered inside the link button. */\n children?: React.ReactNode;\n /** Additional CSS classes merged via `cn()`. */\n className?: string;\n /** Icon from `@phosphor-icons/react` or a React element. Rendered before children. */\n icon?: Icon | React.ReactNode;\n /** When `true`, opens in a new tab with `rel=\"noopener noreferrer\"`. */\n external?: boolean;\n linksExternal?: boolean;\n };\n\n/**\n * Primary action trigger. Supports multiple variants, sizes, shapes, icons, and loading state.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\">Save</Button>\n * <Button variant=\"secondary\" icon={PlusIcon}>Create Worker</Button>\n * ```\n */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n children,\n className,\n disabled,\n loading,\n shape = \"base\",\n size = \"base\",\n variant = \"secondary\",\n icon: IconComponent,\n ...props\n },\n ref\n ) => {\n const { type, ...restProps } = props;\n return (\n <button\n ref={ref}\n className={cn(\n buttonVariants({ variant, size, shape }),\n \"outline-none focus:opacity-100 focus-visible:ring-1 focus-visible:ring-sf-ring *:in-focus:opacity-100\", // Focus styles\n disabled && \"cursor-not-allowed opacity-50\",\n className\n )}\n disabled={loading || disabled}\n type={type ?? \"button\"}\n {...restProps}\n >\n {loading && <Loader size={size === \"lg\" ? 16 : 14} />}\n {!loading && renderIconNode(IconComponent)}\n\n {children}\n </button>\n );\n }\n);\n\nButton.displayName = \"Button\";\n\n/**\n * Square button with a rotating arrows icon, used to trigger data refresh actions.\n *\n * @example\n * ```tsx\n * <RefreshButton loading={isRefreshing} onClick={refresh} />\n * ```\n */\nexport const RefreshButton = ({\n \"aria-label\": ariaLabel = \"Refresh\",\n loading,\n ...props\n}: ButtonProps) => (\n <Button shape=\"square\" aria-label={ariaLabel} {...props}>\n <ArrowsClockwise\n className={cn({\n \"animate-refresh\": loading,\n \"size-4.5\": props.size === \"base\" || !props.size,\n \"size-4\": props.size === \"sm\",\n \"size-5\": props.size === \"lg\",\n })}\n />\n </Button>\n);\n\n/**\n * Anchor element styled as a button. Integrates with `LinkProvider` for framework routing.\n *\n * @example\n * ```tsx\n * <LinkButton href=\"/settings\" variant=\"ghost\">Settings</LinkButton>\n * ```\n */\nexport const LinkButton = React.forwardRef<HTMLAnchorElement, LinkButtonProps>(\n (\n {\n children,\n className,\n external,\n href,\n shape = \"base\",\n size = \"base\",\n variant = \"ghost\",\n icon: IconComponent,\n // linksExternal = false,\n ...props\n },\n ref\n ) => {\n const LinkComponent = useLinkComponent();\n const externalProps = external\n ? { target: \"_blank\", rel: \"noopener noreferrer\" }\n : {};\n\n return (\n <LinkComponent\n ref={ref}\n className={cn(\n buttonVariants({ variant, size, shape }),\n \"flex items-center no-underline!\",\n className\n )}\n href={href}\n to={typeof href === \"string\" ? href : undefined}\n {...externalProps}\n {...props}\n >\n {renderIconNode(IconComponent)}\n {children}\n </LinkComponent>\n );\n }\n);\n\nLinkButton.displayName = \"LinkButton\";\n"],"mappings":";;;;;;;;;AAQA,IAAa,qBAAqB;CAChC,OAAO;EACL,MAAM;GACJ,SAAS;GACT,aAAa;GACd;EACD,QAAQ;GACN,SAAS;GACT,aAAa;GACd;EACD,QAAQ;GACN,SAAS;GACT,aAAa;GACd;EACF;CACD,MAAM;EACJ,IAAI;GACF,SAAS;GACT,aAAa;GACd;EACD,IAAI;GACF,SAAS;GACT,aAAa;GACd;EACD,MAAM;GACJ,SAAS;GACT,aAAa;GACd;EACD,IAAI;GACF,SAAS;GACT,aAAa;GACd;EACF;CACD,aAAa;EACX,IAAI,EAAE,SAAS,YAAY;EAC3B,IAAI,EAAE,SAAS,YAAY;EAC3B,MAAM,EAAE,SAAS,UAAU;EAC3B,IAAI,EAAE,SAAS,WAAW;EAC3B;CACD,SAAS;EACP,SAAS;GACP,SACE;GACF,aAAa;GACd;EACD,WAAW;GACT,SACE;GACF,aAAa;GACd;EACD,OAAO;GACL,SAAS;GACT,aAAa;GACd;EACD,aAAa;GACX,SAAS;GACT,aAAa;GACd;EACD,yBAAyB;GACvB,SACE;GACF,aACE;GACH;EACD,SAAS;GACP,SAAS;GACT,aAAa;GACd;EACF;CACF;AAED,IAAa,6BAA6B;CACxC,OAAO;CACP,MAAM;CACN,SAAS;CACV;AAsCD,SAAgB,eAAe,EAC7B,UAAU,2BAA2B,SACrC,OAAO,2BAA2B,MAClC,QAAQ,2BAA2B,UACV,EAAE,EAAE;CAC7B,MAAM,iBAAiB,UAAU,YAAY,UAAU;AAEvD,QAAO,GAEL,kEACA,sBACA,kBAEA,uDAEA,mBAAmB,QAAQ,SAAS,SACpC,mBAAmB,KAAK,MAAM,SAC9B,mBAAmB,MAAM,OAAO,SAChC,kBAAkB,mBAAmB,YAAY,MAAM,QACxD;;AAIH,IAAM,kBAAkB,kBAA2C;AACjE,KAAI,CAAC,cAAe,QAAO;AAC3B,KAAI,MAAM,eAAe,cAAc,CAAE,QAAO;AAEhD,QAAO,oBADM,eACN,EAAQ,CAAA;;;;;;;;;;;AA0EjB,IAAa,SAAS,MAAM,YAExB,EACE,UACA,WACA,UACA,SACA,QAAQ,QACR,OAAO,QACP,UAAU,aACV,MAAM,eACN,GAAG,SAEL,QACG;CACH,MAAM,EAAE,MAAM,GAAG,cAAc;AAC/B,QACE,qBAAC,UAAD;EACO;EACL,WAAW,GACT,eAAe;GAAE;GAAS;GAAM;GAAO,CAAC,EACxC,yGACA,YAAY,iCACZ,UACD;EACD,UAAU,WAAW;EACrB,MAAM,QAAQ;EACd,GAAI;YAVN;GAYG,WAAW,oBAAC,QAAD,EAAQ,MAAM,SAAS,OAAO,KAAK,IAAM,CAAA;GACpD,CAAC,WAAW,eAAe,cAAc;GAEzC;GACM;;EAGd;AAED,OAAO,cAAc;;;;;;;;;AAUrB,IAAa,iBAAiB,EAC5B,cAAc,YAAY,WAC1B,SACA,GAAG,YAEH,oBAAC,QAAD;CAAQ,OAAM;CAAS,cAAY;CAAW,GAAI;WAChD,oBAAC,iBAAD,EACE,WAAW,GAAG;EACZ,mBAAmB;EACnB,YAAY,MAAM,SAAS,UAAU,CAAC,MAAM;EAC5C,UAAU,MAAM,SAAS;EACzB,UAAU,MAAM,SAAS;EAC1B,CAAC,EACF,CAAA;CACK,CAAA;;;;;;;;;AAWX,IAAa,aAAa,MAAM,YAE5B,EACE,UACA,WACA,UACA,MACA,QAAQ,QACR,OAAO,QACP,UAAU,SACV,MAAM,eAEN,GAAG,SAEL,QACG;CACH,MAAM,gBAAgB,kBAAkB;CACxC,MAAM,gBAAgB,WAClB;EAAE,QAAQ;EAAU,KAAK;EAAuB,GAChD,EAAE;AAEN,QACE,qBAAC,eAAD;EACO;EACL,WAAW,GACT,eAAe;GAAE;GAAS;GAAM;GAAO,CAAC,EACxC,mCACA,UACD;EACK;EACN,IAAI,OAAO,SAAS,WAAW,OAAO,KAAA;EACtC,GAAI;EACJ,GAAI;YAVN,CAYG,eAAe,cAAc,EAC7B,SACa;;EAGrB;AAED,WAAW,cAAc"}