@stigmer/react 0.4.8 → 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 (631) hide show
  1. package/action-menu/ActionMenu.d.ts +64 -0
  2. package/action-menu/ActionMenu.d.ts.map +1 -0
  3. package/action-menu/ActionMenu.js +78 -0
  4. package/action-menu/ActionMenu.js.map +1 -0
  5. package/action-menu/index.d.ts +3 -0
  6. package/action-menu/index.d.ts.map +1 -0
  7. package/action-menu/index.js +2 -0
  8. package/action-menu/index.js.map +1 -0
  9. package/action-menu/types.d.ts +65 -0
  10. package/action-menu/types.d.ts.map +1 -0
  11. package/action-menu/types.js +2 -0
  12. package/action-menu/types.js.map +1 -0
  13. package/agent/AgentCreationWizard.d.ts +55 -0
  14. package/agent/AgentCreationWizard.d.ts.map +1 -0
  15. package/agent/AgentCreationWizard.js +115 -0
  16. package/agent/AgentCreationWizard.js.map +1 -0
  17. package/agent/AgentDetailView.d.ts +77 -9
  18. package/agent/AgentDetailView.d.ts.map +1 -1
  19. package/agent/AgentDetailView.js +265 -87
  20. package/agent/AgentDetailView.js.map +1 -1
  21. package/agent/index.d.ts +8 -0
  22. package/agent/index.d.ts.map +1 -1
  23. package/agent/index.js +4 -0
  24. package/agent/index.js.map +1 -1
  25. package/agent/internal/agentToInput.d.ts +12 -0
  26. package/agent/internal/agentToInput.d.ts.map +1 -0
  27. package/agent/internal/agentToInput.js +72 -0
  28. package/agent/internal/agentToInput.js.map +1 -0
  29. package/agent/steps/CapabilitiesStep.d.ts +16 -0
  30. package/agent/steps/CapabilitiesStep.d.ts.map +1 -0
  31. package/agent/steps/CapabilitiesStep.js +80 -0
  32. package/agent/steps/CapabilitiesStep.js.map +1 -0
  33. package/agent/steps/IdentityStep.d.ts +18 -0
  34. package/agent/steps/IdentityStep.d.ts.map +1 -0
  35. package/agent/steps/IdentityStep.js +43 -0
  36. package/agent/steps/IdentityStep.js.map +1 -0
  37. package/agent/steps/ReviewStep.d.ts +23 -0
  38. package/agent/steps/ReviewStep.d.ts.map +1 -0
  39. package/agent/steps/ReviewStep.js +73 -0
  40. package/agent/steps/ReviewStep.js.map +1 -0
  41. package/agent/steps/types.d.ts +35 -0
  42. package/agent/steps/types.d.ts.map +1 -0
  43. package/agent/steps/types.js +16 -0
  44. package/agent/steps/types.js.map +1 -0
  45. package/agent/useCreateAgent.d.ts +45 -0
  46. package/agent/useCreateAgent.d.ts.map +1 -0
  47. package/agent/useCreateAgent.js +50 -0
  48. package/agent/useCreateAgent.js.map +1 -0
  49. package/agent/useUpdateAgent.d.ts +24 -0
  50. package/agent/useUpdateAgent.d.ts.map +1 -0
  51. package/agent/useUpdateAgent.js +35 -0
  52. package/agent/useUpdateAgent.js.map +1 -0
  53. package/dependency-graph/DependencyGraph.d.ts +37 -0
  54. package/dependency-graph/DependencyGraph.d.ts.map +1 -0
  55. package/dependency-graph/DependencyGraph.js +88 -0
  56. package/dependency-graph/DependencyGraph.js.map +1 -0
  57. package/dependency-graph/DependencyTreeNode.d.ts +23 -0
  58. package/dependency-graph/DependencyTreeNode.d.ts.map +1 -0
  59. package/dependency-graph/DependencyTreeNode.js +99 -0
  60. package/dependency-graph/DependencyTreeNode.js.map +1 -0
  61. package/dependency-graph/index.d.ts +4 -0
  62. package/dependency-graph/index.d.ts.map +1 -0
  63. package/dependency-graph/index.js +5 -0
  64. package/dependency-graph/index.js.map +1 -0
  65. package/dependency-graph/types.d.ts +130 -0
  66. package/dependency-graph/types.d.ts.map +1 -0
  67. package/dependency-graph/types.js +2 -0
  68. package/dependency-graph/types.js.map +1 -0
  69. package/dependency-graph/useDependencyGraph.d.ts +27 -0
  70. package/dependency-graph/useDependencyGraph.d.ts.map +1 -0
  71. package/dependency-graph/useDependencyGraph.js +129 -0
  72. package/dependency-graph/useDependencyGraph.js.map +1 -0
  73. package/empty-state/EmptyState.d.ts +29 -0
  74. package/empty-state/EmptyState.d.ts.map +1 -0
  75. package/empty-state/EmptyState.js +45 -0
  76. package/empty-state/EmptyState.js.map +1 -0
  77. package/empty-state/index.d.ts +4 -0
  78. package/empty-state/index.d.ts.map +1 -0
  79. package/empty-state/index.js +3 -0
  80. package/empty-state/index.js.map +1 -0
  81. package/empty-state/types.d.ts +73 -0
  82. package/empty-state/types.d.ts.map +1 -0
  83. package/empty-state/types.js +2 -0
  84. package/empty-state/types.js.map +1 -0
  85. package/empty-state/useEmptyState.d.ts +18 -0
  86. package/empty-state/useEmptyState.d.ts.map +1 -0
  87. package/empty-state/useEmptyState.js +72 -0
  88. package/empty-state/useEmptyState.js.map +1 -0
  89. package/feedback/StigmerToaster.d.ts +18 -0
  90. package/feedback/StigmerToaster.d.ts.map +1 -0
  91. package/feedback/StigmerToaster.js +31 -0
  92. package/feedback/StigmerToaster.js.map +1 -0
  93. package/feedback/index.d.ts +4 -0
  94. package/feedback/index.d.ts.map +1 -0
  95. package/feedback/index.js +3 -0
  96. package/feedback/index.js.map +1 -0
  97. package/feedback/toast.d.ts +14 -0
  98. package/feedback/toast.d.ts.map +1 -0
  99. package/feedback/toast.js +14 -0
  100. package/feedback/toast.js.map +1 -0
  101. package/feedback/types.d.ts +4 -0
  102. package/feedback/types.d.ts.map +1 -0
  103. package/feedback/types.js +2 -0
  104. package/feedback/types.js.map +1 -0
  105. package/index.d.ts +30 -10
  106. package/index.d.ts.map +1 -1
  107. package/index.js +29 -9
  108. package/index.js.map +1 -1
  109. package/inline-edit/InlineEditImage.d.ts +20 -0
  110. package/inline-edit/InlineEditImage.d.ts.map +1 -0
  111. package/inline-edit/InlineEditImage.js +85 -0
  112. package/inline-edit/InlineEditImage.js.map +1 -0
  113. package/inline-edit/InlineEditKeyValue.d.ts +29 -0
  114. package/inline-edit/InlineEditKeyValue.d.ts.map +1 -0
  115. package/inline-edit/InlineEditKeyValue.js +67 -0
  116. package/inline-edit/InlineEditKeyValue.js.map +1 -0
  117. package/inline-edit/InlineEditResourceList.d.ts +34 -0
  118. package/inline-edit/InlineEditResourceList.d.ts.map +1 -0
  119. package/inline-edit/InlineEditResourceList.js +99 -0
  120. package/inline-edit/InlineEditResourceList.js.map +1 -0
  121. package/inline-edit/InlineEditSelect.d.ts +18 -0
  122. package/inline-edit/InlineEditSelect.d.ts.map +1 -0
  123. package/inline-edit/InlineEditSelect.js +54 -0
  124. package/inline-edit/InlineEditSelect.js.map +1 -0
  125. package/inline-edit/InlineEditText.d.ts +23 -0
  126. package/inline-edit/InlineEditText.d.ts.map +1 -0
  127. package/inline-edit/InlineEditText.js +79 -0
  128. package/inline-edit/InlineEditText.js.map +1 -0
  129. package/inline-edit/InlineEditTextarea.d.ts +22 -0
  130. package/inline-edit/InlineEditTextarea.d.ts.map +1 -0
  131. package/inline-edit/InlineEditTextarea.js +83 -0
  132. package/inline-edit/InlineEditTextarea.js.map +1 -0
  133. package/inline-edit/index.d.ts +16 -0
  134. package/inline-edit/index.d.ts.map +1 -0
  135. package/inline-edit/index.js +8 -0
  136. package/inline-edit/index.js.map +1 -0
  137. package/inline-edit/types.d.ts +42 -0
  138. package/inline-edit/types.d.ts.map +1 -0
  139. package/inline-edit/types.js +2 -0
  140. package/inline-edit/types.js.map +1 -0
  141. package/inline-edit/useInlineFieldSave.d.ts +23 -0
  142. package/inline-edit/useInlineFieldSave.d.ts.map +1 -0
  143. package/inline-edit/useInlineFieldSave.js +44 -0
  144. package/inline-edit/useInlineFieldSave.js.map +1 -0
  145. package/internal/Tabs.d.ts +4 -38
  146. package/internal/Tabs.d.ts.map +1 -1
  147. package/internal/Tabs.js +3 -62
  148. package/internal/Tabs.js.map +1 -1
  149. package/library/ImportResourceDialog.d.ts +43 -0
  150. package/library/ImportResourceDialog.d.ts.map +1 -0
  151. package/library/ImportResourceDialog.js +90 -0
  152. package/library/ImportResourceDialog.js.map +1 -0
  153. package/library/index.d.ts +7 -4
  154. package/library/index.d.ts.map +1 -1
  155. package/library/index.js +4 -2
  156. package/library/index.js.map +1 -1
  157. package/library/serialize-resource-yaml.d.ts +53 -0
  158. package/library/serialize-resource-yaml.d.ts.map +1 -1
  159. package/library/serialize-resource-yaml.js +275 -0
  160. package/library/serialize-resource-yaml.js.map +1 -1
  161. package/library/useExportResource.d.ts +56 -0
  162. package/library/useExportResource.d.ts.map +1 -0
  163. package/library/useExportResource.js +137 -0
  164. package/library/useExportResource.js.map +1 -0
  165. package/library/useImportResource.d.ts +84 -0
  166. package/library/useImportResource.d.ts.map +1 -0
  167. package/library/useImportResource.js +188 -0
  168. package/library/useImportResource.js.map +1 -0
  169. package/mcp-server/McpServerCreationWizard.d.ts +55 -0
  170. package/mcp-server/McpServerCreationWizard.d.ts.map +1 -0
  171. package/mcp-server/McpServerCreationWizard.js +121 -0
  172. package/mcp-server/McpServerCreationWizard.js.map +1 -0
  173. package/mcp-server/McpServerDetailView.d.ts +21 -1
  174. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  175. package/mcp-server/McpServerDetailView.js +113 -20
  176. package/mcp-server/McpServerDetailView.js.map +1 -1
  177. package/mcp-server/index.d.ts +8 -0
  178. package/mcp-server/index.d.ts.map +1 -1
  179. package/mcp-server/index.js +4 -0
  180. package/mcp-server/index.js.map +1 -1
  181. package/mcp-server/internal/mcpServerToInput.d.ts +12 -0
  182. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -0
  183. package/mcp-server/internal/mcpServerToInput.js +81 -0
  184. package/mcp-server/internal/mcpServerToInput.js.map +1 -0
  185. package/mcp-server/steps/EnvironmentAuthStep.d.ts +15 -0
  186. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -0
  187. package/mcp-server/steps/EnvironmentAuthStep.js +55 -0
  188. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -0
  189. package/mcp-server/steps/IdentityTransportStep.d.ts +19 -0
  190. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -0
  191. package/mcp-server/steps/IdentityTransportStep.js +73 -0
  192. package/mcp-server/steps/IdentityTransportStep.js.map +1 -0
  193. package/mcp-server/steps/ReviewStep.d.ts +23 -0
  194. package/mcp-server/steps/ReviewStep.d.ts.map +1 -0
  195. package/mcp-server/steps/ReviewStep.js +137 -0
  196. package/mcp-server/steps/ReviewStep.js.map +1 -0
  197. package/mcp-server/steps/types.d.ts +56 -0
  198. package/mcp-server/steps/types.d.ts.map +1 -0
  199. package/mcp-server/steps/types.js +27 -0
  200. package/mcp-server/steps/types.js.map +1 -0
  201. package/mcp-server/useCreateMcpServer.d.ts +45 -0
  202. package/mcp-server/useCreateMcpServer.d.ts.map +1 -0
  203. package/mcp-server/useCreateMcpServer.js +50 -0
  204. package/mcp-server/useCreateMcpServer.js.map +1 -0
  205. package/mcp-server/useUpdateMcpServer.d.ts +24 -0
  206. package/mcp-server/useUpdateMcpServer.d.ts.map +1 -0
  207. package/mcp-server/useUpdateMcpServer.js +35 -0
  208. package/mcp-server/useUpdateMcpServer.js.map +1 -0
  209. package/package.json +8 -4
  210. package/resource-creation/CreationPicker.d.ts +60 -0
  211. package/resource-creation/CreationPicker.d.ts.map +1 -0
  212. package/resource-creation/CreationPicker.js +74 -0
  213. package/resource-creation/CreationPicker.js.map +1 -0
  214. package/resource-creation/StepIndicator.d.ts +28 -0
  215. package/resource-creation/StepIndicator.d.ts.map +1 -0
  216. package/resource-creation/StepIndicator.js +40 -0
  217. package/resource-creation/StepIndicator.js.map +1 -0
  218. package/resource-creation/TemplateCard.d.ts +24 -0
  219. package/resource-creation/TemplateCard.d.ts.map +1 -0
  220. package/resource-creation/TemplateCard.js +68 -0
  221. package/resource-creation/TemplateCard.js.map +1 -0
  222. package/resource-creation/TemplateGallery.d.ts +43 -0
  223. package/resource-creation/TemplateGallery.d.ts.map +1 -0
  224. package/resource-creation/TemplateGallery.js +78 -0
  225. package/resource-creation/TemplateGallery.js.map +1 -0
  226. package/resource-creation/WizardNav.d.ts +31 -0
  227. package/resource-creation/WizardNav.d.ts.map +1 -0
  228. package/resource-creation/WizardNav.js +29 -0
  229. package/resource-creation/WizardNav.js.map +1 -0
  230. package/resource-creation/WizardShell.d.ts +41 -0
  231. package/resource-creation/WizardShell.d.ts.map +1 -0
  232. package/resource-creation/WizardShell.js +55 -0
  233. package/resource-creation/WizardShell.js.map +1 -0
  234. package/resource-creation/index.d.ts +21 -0
  235. package/resource-creation/index.d.ts.map +1 -0
  236. package/resource-creation/index.js +14 -0
  237. package/resource-creation/index.js.map +1 -0
  238. package/resource-creation/templates/agent-templates.d.ts +15 -0
  239. package/resource-creation/templates/agent-templates.d.ts.map +1 -0
  240. package/resource-creation/templates/agent-templates.js +148 -0
  241. package/resource-creation/templates/agent-templates.js.map +1 -0
  242. package/resource-creation/templates/index.d.ts +5 -0
  243. package/resource-creation/templates/index.d.ts.map +1 -0
  244. package/resource-creation/templates/index.js +5 -0
  245. package/resource-creation/templates/index.js.map +1 -0
  246. package/resource-creation/templates/mcp-server-templates.d.ts +15 -0
  247. package/resource-creation/templates/mcp-server-templates.d.ts.map +1 -0
  248. package/resource-creation/templates/mcp-server-templates.js +92 -0
  249. package/resource-creation/templates/mcp-server-templates.js.map +1 -0
  250. package/resource-creation/templates/types.d.ts +48 -0
  251. package/resource-creation/templates/types.d.ts.map +1 -0
  252. package/resource-creation/templates/types.js +16 -0
  253. package/resource-creation/templates/types.js.map +1 -0
  254. package/resource-creation/types.d.ts +88 -0
  255. package/resource-creation/types.d.ts.map +1 -0
  256. package/resource-creation/types.js +2 -0
  257. package/resource-creation/types.js.map +1 -0
  258. package/resource-creation/useTemplateFilter.d.ts +43 -0
  259. package/resource-creation/useTemplateFilter.d.ts.map +1 -0
  260. package/resource-creation/useTemplateFilter.js +73 -0
  261. package/resource-creation/useTemplateFilter.js.map +1 -0
  262. package/resource-creation/useWizardState.d.ts +67 -0
  263. package/resource-creation/useWizardState.d.ts.map +1 -0
  264. package/resource-creation/useWizardState.js +143 -0
  265. package/resource-creation/useWizardState.js.map +1 -0
  266. package/resource-detail/ConfirmDialog.d.ts +44 -0
  267. package/resource-detail/ConfirmDialog.d.ts.map +1 -0
  268. package/resource-detail/ConfirmDialog.js +62 -0
  269. package/resource-detail/ConfirmDialog.js.map +1 -0
  270. package/resource-detail/ResourceActionBar.d.ts +42 -0
  271. package/resource-detail/ResourceActionBar.d.ts.map +1 -0
  272. package/resource-detail/ResourceActionBar.js +64 -0
  273. package/resource-detail/ResourceActionBar.js.map +1 -0
  274. package/resource-detail/ResourceDetailShell.d.ts +36 -0
  275. package/resource-detail/ResourceDetailShell.d.ts.map +1 -0
  276. package/resource-detail/ResourceDetailShell.js +65 -0
  277. package/resource-detail/ResourceDetailShell.js.map +1 -0
  278. package/resource-detail/Section.d.ts +18 -0
  279. package/resource-detail/Section.d.ts.map +1 -0
  280. package/resource-detail/Section.js +18 -0
  281. package/resource-detail/Section.js.map +1 -0
  282. package/resource-detail/index.d.ts +15 -0
  283. package/resource-detail/index.d.ts.map +1 -0
  284. package/resource-detail/index.js +10 -0
  285. package/resource-detail/index.js.map +1 -0
  286. package/resource-detail/types.d.ts +146 -0
  287. package/resource-detail/types.d.ts.map +1 -0
  288. package/resource-detail/types.js +2 -0
  289. package/resource-detail/types.js.map +1 -0
  290. package/resource-detail/useConfirmAction.d.ts +41 -0
  291. package/resource-detail/useConfirmAction.d.ts.map +1 -0
  292. package/resource-detail/useConfirmAction.js +30 -0
  293. package/resource-detail/useConfirmAction.js.map +1 -0
  294. package/resource-detail/useCopyResource.d.ts +28 -0
  295. package/resource-detail/useCopyResource.d.ts.map +1 -0
  296. package/resource-detail/useCopyResource.js +46 -0
  297. package/resource-detail/useCopyResource.js.map +1 -0
  298. package/resource-detail/useDeleteResource.d.ts +40 -0
  299. package/resource-detail/useDeleteResource.d.ts.map +1 -0
  300. package/resource-detail/useDeleteResource.js +83 -0
  301. package/resource-detail/useDeleteResource.js.map +1 -0
  302. package/resource-detail/useDetailTabs.d.ts +46 -0
  303. package/resource-detail/useDetailTabs.d.ts.map +1 -0
  304. package/resource-detail/useDetailTabs.js +47 -0
  305. package/resource-detail/useDetailTabs.js.map +1 -0
  306. package/resource-workbench/components/BulkActionBar.d.ts +36 -0
  307. package/resource-workbench/components/BulkActionBar.d.ts.map +1 -0
  308. package/resource-workbench/components/BulkActionBar.js +35 -0
  309. package/resource-workbench/components/BulkActionBar.js.map +1 -0
  310. package/resource-workbench/components/ColumnHeader.d.ts +23 -0
  311. package/resource-workbench/components/ColumnHeader.d.ts.map +1 -0
  312. package/resource-workbench/components/ColumnHeader.js +25 -0
  313. package/resource-workbench/components/ColumnHeader.js.map +1 -0
  314. package/resource-workbench/components/FilterBar.d.ts +33 -0
  315. package/resource-workbench/components/FilterBar.d.ts.map +1 -0
  316. package/resource-workbench/components/FilterBar.js +72 -0
  317. package/resource-workbench/components/FilterBar.js.map +1 -0
  318. package/resource-workbench/components/ResourceAvatar.d.ts +29 -0
  319. package/resource-workbench/components/ResourceAvatar.d.ts.map +1 -0
  320. package/resource-workbench/components/ResourceAvatar.js +51 -0
  321. package/resource-workbench/components/ResourceAvatar.js.map +1 -0
  322. package/resource-workbench/components/ResourceCards.d.ts +39 -0
  323. package/resource-workbench/components/ResourceCards.d.ts.map +1 -0
  324. package/resource-workbench/components/ResourceCards.js +41 -0
  325. package/resource-workbench/components/ResourceCards.js.map +1 -0
  326. package/resource-workbench/components/ResourceInspector.d.ts +26 -0
  327. package/resource-workbench/components/ResourceInspector.d.ts.map +1 -0
  328. package/resource-workbench/components/ResourceInspector.js +22 -0
  329. package/resource-workbench/components/ResourceInspector.js.map +1 -0
  330. package/resource-workbench/components/ResourceList.d.ts +39 -0
  331. package/resource-workbench/components/ResourceList.d.ts.map +1 -0
  332. package/resource-workbench/components/ResourceList.js +41 -0
  333. package/resource-workbench/components/ResourceList.js.map +1 -0
  334. package/resource-workbench/components/ResourceTable.d.ts +47 -0
  335. package/resource-workbench/components/ResourceTable.d.ts.map +1 -0
  336. package/resource-workbench/components/ResourceTable.js +78 -0
  337. package/resource-workbench/components/ResourceTable.js.map +1 -0
  338. package/resource-workbench/components/ResourceWorkbench.d.ts +131 -0
  339. package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -0
  340. package/resource-workbench/components/ResourceWorkbench.js +170 -0
  341. package/resource-workbench/components/ResourceWorkbench.js.map +1 -0
  342. package/resource-workbench/components/SelectionCheckbox.d.ts +24 -0
  343. package/resource-workbench/components/SelectionCheckbox.d.ts.map +1 -0
  344. package/resource-workbench/components/SelectionCheckbox.js +16 -0
  345. package/resource-workbench/components/SelectionCheckbox.js.map +1 -0
  346. package/resource-workbench/components/StatusBadge.d.ts +31 -0
  347. package/resource-workbench/components/StatusBadge.d.ts.map +1 -0
  348. package/resource-workbench/components/StatusBadge.js +75 -0
  349. package/resource-workbench/components/StatusBadge.js.map +1 -0
  350. package/resource-workbench/components/ViewSwitcher.d.ts +21 -0
  351. package/resource-workbench/components/ViewSwitcher.d.ts.map +1 -0
  352. package/resource-workbench/components/ViewSwitcher.js +37 -0
  353. package/resource-workbench/components/ViewSwitcher.js.map +1 -0
  354. package/resource-workbench/hooks/useResourceCollection.d.ts +93 -0
  355. package/resource-workbench/hooks/useResourceCollection.d.ts.map +1 -0
  356. package/resource-workbench/hooks/useResourceCollection.js +133 -0
  357. package/resource-workbench/hooks/useResourceCollection.js.map +1 -0
  358. package/resource-workbench/hooks/useResourceFilters.d.ts +73 -0
  359. package/resource-workbench/hooks/useResourceFilters.d.ts.map +1 -0
  360. package/resource-workbench/hooks/useResourceFilters.js +105 -0
  361. package/resource-workbench/hooks/useResourceFilters.js.map +1 -0
  362. package/resource-workbench/hooks/useResourceSelection.d.ts +44 -0
  363. package/resource-workbench/hooks/useResourceSelection.d.ts.map +1 -0
  364. package/resource-workbench/hooks/useResourceSelection.js +123 -0
  365. package/resource-workbench/hooks/useResourceSelection.js.map +1 -0
  366. package/resource-workbench/hooks/useViewPreference.d.ts +32 -0
  367. package/resource-workbench/hooks/useViewPreference.d.ts.map +1 -0
  368. package/resource-workbench/hooks/useViewPreference.js +60 -0
  369. package/resource-workbench/hooks/useViewPreference.js.map +1 -0
  370. package/resource-workbench/index.d.ts +34 -0
  371. package/resource-workbench/index.d.ts.map +1 -0
  372. package/resource-workbench/index.js +19 -0
  373. package/resource-workbench/index.js.map +1 -0
  374. package/resource-workbench/types.d.ts +165 -0
  375. package/resource-workbench/types.d.ts.map +1 -0
  376. package/resource-workbench/types.js +2 -0
  377. package/resource-workbench/types.js.map +1 -0
  378. package/runner/RunnerDetailView.d.ts +44 -0
  379. package/runner/RunnerDetailView.d.ts.map +1 -0
  380. package/runner/RunnerDetailView.js +154 -0
  381. package/runner/RunnerDetailView.js.map +1 -0
  382. package/runner/RunnerListPanel.d.ts +26 -1
  383. package/runner/RunnerListPanel.d.ts.map +1 -1
  384. package/runner/RunnerListPanel.js +68 -46
  385. package/runner/RunnerListPanel.js.map +1 -1
  386. package/runner/index.d.ts +7 -1
  387. package/runner/index.d.ts.map +1 -1
  388. package/runner/index.js +3 -0
  389. package/runner/index.js.map +1 -1
  390. package/runner/shared.d.ts +31 -0
  391. package/runner/shared.d.ts.map +1 -0
  392. package/runner/shared.js +55 -0
  393. package/runner/shared.js.map +1 -0
  394. package/runner/useRunner.d.ts +37 -0
  395. package/runner/useRunner.d.ts.map +1 -0
  396. package/runner/useRunner.js +24 -0
  397. package/runner/useRunner.js.map +1 -0
  398. package/session/__tests__/group-sessions.test.js +3 -3
  399. package/session/__tests__/group-sessions.test.js.map +1 -1
  400. package/skill/SkillDetailView.d.ts +70 -7
  401. package/skill/SkillDetailView.d.ts.map +1 -1
  402. package/skill/SkillDetailView.js +107 -39
  403. package/skill/SkillDetailView.js.map +1 -1
  404. package/skill/SkillDiffDialog.d.ts +42 -0
  405. package/skill/SkillDiffDialog.d.ts.map +1 -0
  406. package/skill/SkillDiffDialog.js +72 -0
  407. package/skill/SkillDiffDialog.js.map +1 -0
  408. package/skill/SkillFileBrowser.d.ts +31 -0
  409. package/skill/SkillFileBrowser.d.ts.map +1 -0
  410. package/skill/SkillFileBrowser.js +105 -0
  411. package/skill/SkillFileBrowser.js.map +1 -0
  412. package/skill/SkillUploader.d.ts +39 -0
  413. package/skill/SkillUploader.d.ts.map +1 -0
  414. package/skill/SkillUploader.js +141 -0
  415. package/skill/SkillUploader.js.map +1 -0
  416. package/skill/index.d.ts +18 -0
  417. package/skill/index.d.ts.map +1 -1
  418. package/skill/index.js +9 -0
  419. package/skill/index.js.map +1 -1
  420. package/skill/internal/computeArtifactHash.d.ts +9 -0
  421. package/skill/internal/computeArtifactHash.d.ts.map +1 -0
  422. package/skill/internal/computeArtifactHash.js +14 -0
  423. package/skill/internal/computeArtifactHash.js.map +1 -0
  424. package/skill/internal/fetchAndUnpackArtifact.d.ts +16 -0
  425. package/skill/internal/fetchAndUnpackArtifact.d.ts.map +1 -0
  426. package/skill/internal/fetchAndUnpackArtifact.js +34 -0
  427. package/skill/internal/fetchAndUnpackArtifact.js.map +1 -0
  428. package/skill/usePushSkill.d.ts +53 -0
  429. package/skill/usePushSkill.d.ts.map +1 -0
  430. package/skill/usePushSkill.js +57 -0
  431. package/skill/usePushSkill.js.map +1 -0
  432. package/skill/useSkillArtifact.d.ts +37 -0
  433. package/skill/useSkillArtifact.d.ts.map +1 -0
  434. package/skill/useSkillArtifact.js +76 -0
  435. package/skill/useSkillArtifact.js.map +1 -0
  436. package/skill/useSkillDiff.d.ts +31 -0
  437. package/skill/useSkillDiff.d.ts.map +1 -0
  438. package/skill/useSkillDiff.js +97 -0
  439. package/skill/useSkillDiff.js.map +1 -0
  440. package/skill/useSkillDuplicateCheck.d.ts +34 -0
  441. package/skill/useSkillDuplicateCheck.d.ts.map +1 -0
  442. package/skill/useSkillDuplicateCheck.js +58 -0
  443. package/skill/useSkillDuplicateCheck.js.map +1 -0
  444. package/skill/useSkillUpload.d.ts +69 -0
  445. package/skill/useSkillUpload.d.ts.map +1 -0
  446. package/skill/useSkillUpload.js +157 -0
  447. package/skill/useSkillUpload.js.map +1 -0
  448. package/skill/useSkillVersions.d.ts +46 -0
  449. package/skill/useSkillVersions.d.ts.map +1 -0
  450. package/skill/useSkillVersions.js +104 -0
  451. package/skill/useSkillVersions.js.map +1 -0
  452. package/src/action-menu/ActionMenu.tsx +151 -0
  453. package/src/action-menu/index.ts +9 -0
  454. package/src/action-menu/types.ts +70 -0
  455. package/src/agent/AgentCreationWizard.tsx +201 -0
  456. package/src/agent/AgentDetailView.tsx +817 -321
  457. package/src/agent/index.ts +16 -0
  458. package/src/agent/internal/agentToInput.ts +95 -0
  459. package/src/agent/steps/CapabilitiesStep.tsx +363 -0
  460. package/src/agent/steps/IdentityStep.tsx +259 -0
  461. package/src/agent/steps/ReviewStep.tsx +211 -0
  462. package/src/agent/steps/types.ts +53 -0
  463. package/src/agent/useCreateAgent.ts +76 -0
  464. package/src/agent/useUpdateAgent.ts +55 -0
  465. package/src/dependency-graph/DependencyGraph.tsx +153 -0
  466. package/src/dependency-graph/DependencyTreeNode.tsx +282 -0
  467. package/src/dependency-graph/index.ts +15 -0
  468. package/src/dependency-graph/types.ts +131 -0
  469. package/src/dependency-graph/useDependencyGraph.ts +158 -0
  470. package/src/empty-state/EmptyState.tsx +90 -0
  471. package/src/empty-state/index.ts +9 -0
  472. package/src/empty-state/types.ts +81 -0
  473. package/src/empty-state/useEmptyState.ts +85 -0
  474. package/src/feedback/StigmerToaster.tsx +45 -0
  475. package/src/feedback/index.ts +3 -0
  476. package/src/feedback/toast.ts +13 -0
  477. package/src/feedback/types.ts +7 -0
  478. package/src/index.ts +270 -8
  479. package/src/inline-edit/InlineEditImage.tsx +208 -0
  480. package/src/inline-edit/InlineEditKeyValue.tsx +278 -0
  481. package/src/inline-edit/InlineEditResourceList.tsx +325 -0
  482. package/src/inline-edit/InlineEditSelect.tsx +150 -0
  483. package/src/inline-edit/InlineEditText.tsx +211 -0
  484. package/src/inline-edit/InlineEditTextarea.tsx +209 -0
  485. package/src/inline-edit/index.ts +28 -0
  486. package/src/inline-edit/types.ts +47 -0
  487. package/src/inline-edit/useInlineFieldSave.ts +62 -0
  488. package/src/internal/Tabs.tsx +4 -164
  489. package/src/library/ImportResourceDialog.tsx +227 -0
  490. package/src/library/index.ts +18 -8
  491. package/src/library/serialize-resource-yaml.ts +356 -0
  492. package/src/library/useExportResource.ts +183 -0
  493. package/src/library/useImportResource.ts +253 -0
  494. package/src/mcp-server/McpServerCreationWizard.tsx +206 -0
  495. package/src/mcp-server/McpServerDetailView.tsx +392 -105
  496. package/src/mcp-server/index.ts +16 -0
  497. package/src/mcp-server/internal/mcpServerToInput.ts +95 -0
  498. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +462 -0
  499. package/src/mcp-server/steps/IdentityTransportStep.tsx +531 -0
  500. package/src/mcp-server/steps/ReviewStep.tsx +297 -0
  501. package/src/mcp-server/steps/types.ts +85 -0
  502. package/src/mcp-server/useCreateMcpServer.ts +76 -0
  503. package/src/mcp-server/useUpdateMcpServer.ts +55 -0
  504. package/src/resource-creation/CreationPicker.tsx +292 -0
  505. package/src/resource-creation/StepIndicator.tsx +156 -0
  506. package/src/resource-creation/TemplateCard.tsx +143 -0
  507. package/src/resource-creation/TemplateGallery.tsx +222 -0
  508. package/src/resource-creation/WizardNav.tsx +163 -0
  509. package/src/resource-creation/WizardShell.tsx +124 -0
  510. package/src/resource-creation/index.ts +45 -0
  511. package/src/resource-creation/templates/agent-templates.ts +160 -0
  512. package/src/resource-creation/templates/index.ts +7 -0
  513. package/src/resource-creation/templates/mcp-server-templates.ts +106 -0
  514. package/src/resource-creation/templates/types.ts +64 -0
  515. package/src/resource-creation/types.ts +105 -0
  516. package/src/resource-creation/useTemplateFilter.ts +117 -0
  517. package/src/resource-creation/useWizardState.ts +223 -0
  518. package/src/resource-detail/ConfirmDialog.tsx +127 -0
  519. package/src/resource-detail/ResourceActionBar.tsx +157 -0
  520. package/src/resource-detail/ResourceDetailShell.tsx +184 -0
  521. package/src/resource-detail/Section.tsx +78 -0
  522. package/src/resource-detail/index.ts +34 -0
  523. package/src/resource-detail/types.ts +177 -0
  524. package/src/resource-detail/useConfirmAction.ts +70 -0
  525. package/src/resource-detail/useCopyResource.ts +74 -0
  526. package/src/resource-detail/useDeleteResource.ts +110 -0
  527. package/src/resource-detail/useDetailTabs.ts +93 -0
  528. package/src/resource-workbench/components/BulkActionBar.tsx +122 -0
  529. package/src/resource-workbench/components/ColumnHeader.tsx +105 -0
  530. package/src/resource-workbench/components/FilterBar.tsx +173 -0
  531. package/src/resource-workbench/components/ResourceAvatar.tsx +109 -0
  532. package/src/resource-workbench/components/ResourceCards.tsx +126 -0
  533. package/src/resource-workbench/components/ResourceInspector.tsx +88 -0
  534. package/src/resource-workbench/components/ResourceList.tsx +121 -0
  535. package/src/resource-workbench/components/ResourceTable.tsx +222 -0
  536. package/src/resource-workbench/components/ResourceWorkbench.tsx +695 -0
  537. package/src/resource-workbench/components/SelectionCheckbox.tsx +52 -0
  538. package/src/resource-workbench/components/StatusBadge.tsx +119 -0
  539. package/src/resource-workbench/components/ViewSwitcher.tsx +135 -0
  540. package/src/resource-workbench/hooks/useResourceCollection.ts +261 -0
  541. package/src/resource-workbench/hooks/useResourceFilters.ts +216 -0
  542. package/src/resource-workbench/hooks/useResourceSelection.ts +178 -0
  543. package/src/resource-workbench/hooks/useViewPreference.ts +75 -0
  544. package/src/resource-workbench/index.ts +73 -0
  545. package/src/resource-workbench/types.ts +220 -0
  546. package/src/runner/RunnerDetailView.tsx +410 -0
  547. package/src/runner/RunnerListPanel.tsx +126 -111
  548. package/src/runner/index.ts +13 -1
  549. package/src/runner/shared.tsx +124 -0
  550. package/src/runner/useRunner.ts +59 -0
  551. package/src/session/__tests__/group-sessions.test.ts +5 -3
  552. package/src/skill/SkillDetailView.tsx +371 -165
  553. package/src/skill/SkillDiffDialog.tsx +213 -0
  554. package/src/skill/SkillFileBrowser.tsx +289 -0
  555. package/src/skill/SkillUploader.tsx +481 -0
  556. package/src/skill/index.ts +34 -0
  557. package/src/skill/internal/computeArtifactHash.ts +13 -0
  558. package/src/skill/internal/fetchAndUnpackArtifact.ts +48 -0
  559. package/src/skill/usePushSkill.ts +101 -0
  560. package/src/skill/useSkillArtifact.ts +107 -0
  561. package/src/skill/useSkillDiff.ts +128 -0
  562. package/src/skill/useSkillDuplicateCheck.ts +92 -0
  563. package/src/skill/useSkillUpload.ts +231 -0
  564. package/src/skill/useSkillVersions.ts +165 -0
  565. package/src/styles.css +28 -0
  566. package/src/tabs/Tabs.tsx +184 -0
  567. package/src/tabs/index.ts +2 -0
  568. package/src/version-history/DiffFileList.tsx +111 -0
  569. package/src/version-history/DiffSummary.tsx +61 -0
  570. package/src/version-history/DiffViewer.tsx +163 -0
  571. package/src/version-history/MultiFileDiffView.tsx +114 -0
  572. package/src/version-history/VersionTimeline.tsx +232 -0
  573. package/src/version-history/VersionTimelineEntry.tsx +254 -0
  574. package/src/version-history/computeDiff.ts +61 -0
  575. package/src/version-history/computeMultiFileDiff.ts +97 -0
  576. package/src/version-history/index.ts +22 -0
  577. package/src/version-history/types.ts +129 -0
  578. package/styles.css +1 -1
  579. package/tabs/Tabs.d.ts +58 -0
  580. package/tabs/Tabs.d.ts.map +1 -0
  581. package/tabs/Tabs.js +80 -0
  582. package/tabs/Tabs.js.map +1 -0
  583. package/tabs/index.d.ts +3 -0
  584. package/tabs/index.d.ts.map +1 -0
  585. package/tabs/index.js +2 -0
  586. package/tabs/index.js.map +1 -0
  587. package/version-history/DiffFileList.d.ts +22 -0
  588. package/version-history/DiffFileList.d.ts.map +1 -0
  589. package/version-history/DiffFileList.js +37 -0
  590. package/version-history/DiffFileList.js.map +1 -0
  591. package/version-history/DiffSummary.d.ts +21 -0
  592. package/version-history/DiffSummary.d.ts.map +1 -0
  593. package/version-history/DiffSummary.js +16 -0
  594. package/version-history/DiffSummary.js.map +1 -0
  595. package/version-history/DiffViewer.d.ts +31 -0
  596. package/version-history/DiffViewer.d.ts.map +1 -0
  597. package/version-history/DiffViewer.js +60 -0
  598. package/version-history/DiffViewer.js.map +1 -0
  599. package/version-history/MultiFileDiffView.d.ts +30 -0
  600. package/version-history/MultiFileDiffView.d.ts.map +1 -0
  601. package/version-history/MultiFileDiffView.js +40 -0
  602. package/version-history/MultiFileDiffView.js.map +1 -0
  603. package/version-history/VersionTimeline.d.ts +29 -0
  604. package/version-history/VersionTimeline.d.ts.map +1 -0
  605. package/version-history/VersionTimeline.js +87 -0
  606. package/version-history/VersionTimeline.js.map +1 -0
  607. package/version-history/VersionTimelineEntry.d.ts +22 -0
  608. package/version-history/VersionTimelineEntry.d.ts.map +1 -0
  609. package/version-history/VersionTimelineEntry.js +98 -0
  610. package/version-history/VersionTimelineEntry.js.map +1 -0
  611. package/version-history/computeDiff.d.ts +16 -0
  612. package/version-history/computeDiff.d.ts.map +1 -0
  613. package/version-history/computeDiff.js +54 -0
  614. package/version-history/computeDiff.js.map +1 -0
  615. package/version-history/computeMultiFileDiff.d.ts +15 -0
  616. package/version-history/computeMultiFileDiff.d.ts.map +1 -0
  617. package/version-history/computeMultiFileDiff.js +83 -0
  618. package/version-history/computeMultiFileDiff.js.map +1 -0
  619. package/version-history/index.d.ts +14 -0
  620. package/version-history/index.d.ts.map +1 -0
  621. package/version-history/index.js +9 -0
  622. package/version-history/index.js.map +1 -0
  623. package/version-history/types.d.ts +106 -0
  624. package/version-history/types.d.ts.map +1 -0
  625. package/version-history/types.js +2 -0
  626. package/version-history/types.js.map +1 -0
  627. package/library/ResourceListView.d.ts +0 -174
  628. package/library/ResourceListView.d.ts.map +0 -1
  629. package/library/ResourceListView.js +0 -318
  630. package/library/ResourceListView.js.map +0 -1
  631. package/src/library/ResourceListView.tsx +0 -956
@@ -0,0 +1,52 @@
1
+ "use client";
2
+
3
+ import { cn } from "@stigmer/theme";
4
+
5
+ /** Props for {@link SelectionCheckbox}. */
6
+ export interface SelectionCheckboxProps {
7
+ /** Whether the checkbox is checked. */
8
+ readonly checked: boolean;
9
+ /**
10
+ * Indeterminate state (e.g. header checkbox when some but not all
11
+ * rows are selected). Overrides `checked` visually.
12
+ */
13
+ readonly indeterminate?: boolean;
14
+ /** Called when the user toggles the checkbox. */
15
+ readonly onChange: (checked: boolean) => void;
16
+ /** Accessible label for the checkbox. */
17
+ readonly "aria-label": string;
18
+ /** Additional CSS classes. */
19
+ readonly className?: string;
20
+ }
21
+
22
+ /**
23
+ * Accessible checkbox for row/card selection and "select all" headers.
24
+ *
25
+ * Uses a native `<input type="checkbox">` with the `indeterminate`
26
+ * property set via ref for proper browser + screen reader support.
27
+ */
28
+ export function SelectionCheckbox({
29
+ checked,
30
+ indeterminate = false,
31
+ onChange,
32
+ "aria-label": ariaLabel,
33
+ className,
34
+ }: SelectionCheckboxProps) {
35
+ return (
36
+ <input
37
+ type="checkbox"
38
+ role="checkbox"
39
+ checked={checked}
40
+ ref={(el) => {
41
+ if (el) el.indeterminate = indeterminate;
42
+ }}
43
+ onChange={(e) => onChange(e.target.checked)}
44
+ aria-label={ariaLabel}
45
+ className={cn(
46
+ "size-3.5 shrink-0 cursor-pointer rounded border border-input accent-primary",
47
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
48
+ className,
49
+ )}
50
+ />
51
+ );
52
+ }
@@ -0,0 +1,119 @@
1
+ "use client";
2
+
3
+ import { cn } from "@stigmer/theme";
4
+ import type { StatusPhase } from "../types";
5
+
6
+ /** Props for {@link StatusBadge}. */
7
+ export interface StatusBadgeProps {
8
+ /** The status phase to display. Maps to `--stgm-status-*` tokens. */
9
+ readonly phase: StatusPhase;
10
+ /**
11
+ * Optional human-readable label override. When omitted, the phase
12
+ * name is title-cased (e.g. "ready" becomes "Ready").
13
+ */
14
+ readonly label?: string;
15
+ /** Tooltip text shown on hover. When omitted, no tooltip renders. */
16
+ readonly tooltip?: string;
17
+ /** Additional CSS classes for the root element. */
18
+ readonly className?: string;
19
+ }
20
+
21
+ const PHASE_LABELS: Record<StatusPhase, string> = {
22
+ ready: "Ready",
23
+ running: "Running",
24
+ pending: "Pending",
25
+ degraded: "Degraded",
26
+ failed: "Failed",
27
+ disabled: "Disabled",
28
+ draft: "Draft",
29
+ };
30
+
31
+ /**
32
+ * Accessible status indicator that combines a color dot with a text label.
33
+ *
34
+ * Never communicates status through color alone — the text label is always
35
+ * present (WCAG 1.4.1). Colors come from `--stgm-status-*` design tokens
36
+ * defined in `@stigmer/theme`, ensuring correct appearance in both light
37
+ * and dark modes.
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * <StatusBadge phase="ready" />
42
+ * <StatusBadge phase="failed" label="Unreachable" tooltip="Last checked 2m ago" />
43
+ * ```
44
+ */
45
+ export function StatusBadge({
46
+ phase,
47
+ label,
48
+ tooltip,
49
+ className,
50
+ }: StatusBadgeProps) {
51
+ const displayLabel = label ?? PHASE_LABELS[phase];
52
+
53
+ const badge = (
54
+ <span
55
+ className={cn(
56
+ "inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[11px] font-medium leading-none",
57
+ statusClasses(phase),
58
+ className,
59
+ )}
60
+ >
61
+ <span
62
+ className={cn("size-1.5 shrink-0 rounded-full", dotClasses(phase))}
63
+ aria-hidden="true"
64
+ />
65
+ {displayLabel}
66
+ </span>
67
+ );
68
+
69
+ if (!tooltip) return badge;
70
+
71
+ return (
72
+ <span title={tooltip} className="inline-flex">
73
+ {badge}
74
+ </span>
75
+ );
76
+ }
77
+
78
+ /**
79
+ * Maps a status phase to Tailwind classes using `--stgm-status-*` tokens.
80
+ * Background uses the `-subtle` variant; text uses the main status color.
81
+ */
82
+ function statusClasses(phase: StatusPhase): string {
83
+ switch (phase) {
84
+ case "ready":
85
+ return "bg-[var(--stgm-status-ready-subtle)] text-[var(--stgm-status-ready)]";
86
+ case "running":
87
+ return "bg-[var(--stgm-status-running-subtle)] text-[var(--stgm-status-running)]";
88
+ case "pending":
89
+ return "bg-[var(--stgm-status-pending-subtle)] text-[var(--stgm-status-pending)]";
90
+ case "degraded":
91
+ return "bg-[var(--stgm-status-degraded-subtle)] text-[var(--stgm-status-degraded)]";
92
+ case "failed":
93
+ return "bg-[var(--stgm-status-failed-subtle)] text-[var(--stgm-status-failed)]";
94
+ case "disabled":
95
+ return "bg-[var(--stgm-status-disabled-subtle)] text-[var(--stgm-status-disabled)]";
96
+ case "draft":
97
+ return "bg-[var(--stgm-status-draft-subtle)] text-[var(--stgm-status-draft)]";
98
+ }
99
+ }
100
+
101
+ /** Maps a status phase to the dot's background color (the main token). */
102
+ function dotClasses(phase: StatusPhase): string {
103
+ switch (phase) {
104
+ case "ready":
105
+ return "bg-[var(--stgm-status-ready)]";
106
+ case "running":
107
+ return "bg-[var(--stgm-status-running)]";
108
+ case "pending":
109
+ return "bg-[var(--stgm-status-pending)]";
110
+ case "degraded":
111
+ return "bg-[var(--stgm-status-degraded)]";
112
+ case "failed":
113
+ return "bg-[var(--stgm-status-failed)]";
114
+ case "disabled":
115
+ return "bg-[var(--stgm-status-disabled)]";
116
+ case "draft":
117
+ return "bg-[var(--stgm-status-draft)]";
118
+ }
119
+ }
@@ -0,0 +1,135 @@
1
+ "use client";
2
+
3
+ import { cn } from "@stigmer/theme";
4
+ import type { ViewMode } from "../types";
5
+
6
+ /** Props for {@link ViewSwitcher}. */
7
+ export interface ViewSwitcherProps {
8
+ /** Currently active view mode. */
9
+ readonly value: ViewMode;
10
+ /** Called when the user selects a different view mode. */
11
+ readonly onChange: (mode: ViewMode) => void;
12
+ /** Which view modes to show. @default ["table", "cards", "list"] */
13
+ readonly modes?: readonly ViewMode[];
14
+ /** Additional CSS classes. */
15
+ readonly className?: string;
16
+ }
17
+
18
+ const MODE_META: Record<ViewMode, { label: string; icon: () => React.JSX.Element }> = {
19
+ table: { label: "Table view", icon: TableIcon },
20
+ cards: { label: "Card view", icon: CardsIcon },
21
+ list: { label: "List view", icon: ListIcon },
22
+ };
23
+
24
+ /**
25
+ * Toggle button group for switching between table, cards, and list views.
26
+ *
27
+ * Uses `role="radiogroup"` with `role="radio"` children for accessible
28
+ * view switching. Each button shows an icon and is labeled for screen
29
+ * readers.
30
+ */
31
+ export function ViewSwitcher({
32
+ value,
33
+ onChange,
34
+ modes = ["table", "cards", "list"],
35
+ className,
36
+ }: ViewSwitcherProps) {
37
+ return (
38
+ <div
39
+ role="radiogroup"
40
+ aria-label="View mode"
41
+ className={cn("inline-flex rounded-md border border-input", className)}
42
+ >
43
+ {modes.map((mode) => {
44
+ const { label, icon: Icon } = MODE_META[mode];
45
+ const isActive = value === mode;
46
+ return (
47
+ <button
48
+ key={mode}
49
+ type="button"
50
+ role="radio"
51
+ aria-checked={isActive}
52
+ aria-label={label}
53
+ onClick={() => onChange(mode)}
54
+ className={cn(
55
+ "inline-flex items-center justify-center px-2 py-1.5 transition-colors",
56
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:z-10",
57
+ "first:rounded-l-[calc(var(--stgm-radius)-1px)] last:rounded-r-[calc(var(--stgm-radius)-1px)]",
58
+ "border-r border-input last:border-r-0",
59
+ isActive
60
+ ? "bg-accent text-accent-foreground"
61
+ : "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
62
+ )}
63
+ >
64
+ <Icon />
65
+ </button>
66
+ );
67
+ })}
68
+ </div>
69
+ );
70
+ }
71
+
72
+ // ---------------------------------------------------------------------------
73
+ // Icons (inline SVGs matching the SDK's icon pattern)
74
+ // ---------------------------------------------------------------------------
75
+
76
+ function TableIcon() {
77
+ return (
78
+ <svg
79
+ width="14"
80
+ height="14"
81
+ viewBox="0 0 14 14"
82
+ fill="none"
83
+ stroke="currentColor"
84
+ strokeWidth="1.25"
85
+ strokeLinecap="round"
86
+ strokeLinejoin="round"
87
+ aria-hidden="true"
88
+ >
89
+ <rect x="1.5" y="1.5" width="11" height="11" rx="1.5" />
90
+ <path d="M1.5 5.5h11M1.5 9h11M5.5 5.5v6" />
91
+ </svg>
92
+ );
93
+ }
94
+
95
+ function CardsIcon() {
96
+ return (
97
+ <svg
98
+ width="14"
99
+ height="14"
100
+ viewBox="0 0 14 14"
101
+ fill="none"
102
+ stroke="currentColor"
103
+ strokeWidth="1.25"
104
+ strokeLinecap="round"
105
+ strokeLinejoin="round"
106
+ aria-hidden="true"
107
+ >
108
+ <rect x="1.5" y="1.5" width="4.5" height="4.5" rx="1" />
109
+ <rect x="8" y="1.5" width="4.5" height="4.5" rx="1" />
110
+ <rect x="1.5" y="8" width="4.5" height="4.5" rx="1" />
111
+ <rect x="8" y="8" width="4.5" height="4.5" rx="1" />
112
+ </svg>
113
+ );
114
+ }
115
+
116
+ function ListIcon() {
117
+ return (
118
+ <svg
119
+ width="14"
120
+ height="14"
121
+ viewBox="0 0 14 14"
122
+ fill="none"
123
+ stroke="currentColor"
124
+ strokeWidth="1.25"
125
+ strokeLinecap="round"
126
+ strokeLinejoin="round"
127
+ aria-hidden="true"
128
+ >
129
+ <path d="M4.5 3h8M4.5 7h8M4.5 11h8" />
130
+ <circle cx="2" cy="3" r="0.75" fill="currentColor" stroke="none" />
131
+ <circle cx="2" cy="7" r="0.75" fill="currentColor" stroke="none" />
132
+ <circle cx="2" cy="11" r="0.75" fill="currentColor" stroke="none" />
133
+ </svg>
134
+ );
135
+ }
@@ -0,0 +1,261 @@
1
+ "use client";
2
+
3
+ import { useMemo, useCallback, useState, useRef, useEffect } from "react";
4
+ import {
5
+ getCoreRowModel,
6
+ getSortedRowModel,
7
+ useReactTable,
8
+ type ColumnDef,
9
+ type SortingState,
10
+ type RowSelectionState,
11
+ type Table,
12
+ } from "@tanstack/react-table";
13
+ import type { SearchResult } from "@stigmer/protos/ai/stigmer/search/v1/io_pb";
14
+ import type { ListParams, ListResult } from "@stigmer/sdk";
15
+ import { useFetch } from "../../internal/useFetch";
16
+ import type {
17
+ WorkbenchColumnDef,
18
+ SortValue,
19
+ SortDirection,
20
+ } from "../types";
21
+
22
+ // ---------------------------------------------------------------------------
23
+ // Options
24
+ // ---------------------------------------------------------------------------
25
+
26
+ /** Options for {@link useResourceCollection}. */
27
+ export interface UseResourceCollectionOptions<TData = SearchResult> {
28
+ /**
29
+ * Async function that fetches a page of resources.
30
+ * The hook passes `ListParams` (org, query, page, scope) and expects
31
+ * `ListResult` back. Pass `null` to disable fetching (idle state).
32
+ */
33
+ readonly listFn: ((params: ListParams) => Promise<ListResult>) | null;
34
+ /** Organization slug to scope the query. Pass `null` to disable fetching. */
35
+ readonly org: string | null;
36
+ /** Text search query. No debouncing is applied — the consumer controls timing. */
37
+ readonly query?: string;
38
+ /**
39
+ * Scope for resource visibility.
40
+ * - `"org"` — resources owned by the active organization.
41
+ * - `"all"` — includes public resources from other organizations.
42
+ * @default "org"
43
+ */
44
+ readonly scope?: "org" | "all";
45
+ /** Current page number (1-indexed). @default 1 */
46
+ readonly page?: number;
47
+ /** Page size. @default 20 */
48
+ readonly pageSize?: number;
49
+ /** Active sort. When provided, the column header shows the sort indicator. */
50
+ readonly sort?: SortValue | null;
51
+ /** Called when the user changes the sort via a column header click. */
52
+ readonly onSortChange?: (sort: SortValue | null) => void;
53
+ /**
54
+ * Column definitions for the table view. These are converted to
55
+ * TanStack Table column defs internally.
56
+ */
57
+ readonly columns?: readonly WorkbenchColumnDef<TData>[];
58
+ /** Enable row selection state tracking. @default false */
59
+ readonly enableSelection?: boolean;
60
+ }
61
+
62
+ // ---------------------------------------------------------------------------
63
+ // Return value
64
+ // ---------------------------------------------------------------------------
65
+
66
+ /** Return value of {@link useResourceCollection}. */
67
+ export interface UseResourceCollectionReturn<TData = SearchResult> {
68
+ /** The fetched data items for the current page. */
69
+ readonly items: readonly TData[];
70
+ /** Total number of matching items across all pages. */
71
+ readonly totalCount: number;
72
+ /** Total number of pages. */
73
+ readonly totalPages: number;
74
+ /** The current page number (mirrors input). */
75
+ readonly currentPage: number;
76
+ /** `true` during the initial data fetch (no data yet). */
77
+ readonly isLoading: boolean;
78
+ /** `true` during a background refetch while stale data is shown. */
79
+ readonly isRefetching: boolean;
80
+ /** Error from the last failed fetch, or `null`. */
81
+ readonly error: Error | null;
82
+ /** Imperatively trigger a refetch. */
83
+ readonly refetch: () => void;
84
+ /**
85
+ * The TanStack Table instance. Available for advanced consumers who
86
+ * need direct table API access (e.g. custom renderers). `null` when
87
+ * no columns are provided.
88
+ */
89
+ readonly table: Table<TData> | null;
90
+ /** Current row selection state (item ID -> selected). */
91
+ readonly rowSelection: RowSelectionState;
92
+ /** Update row selection state directly. */
93
+ readonly setRowSelection: React.Dispatch<React.SetStateAction<RowSelectionState>>;
94
+ }
95
+
96
+ // ---------------------------------------------------------------------------
97
+ // Hook
98
+ // ---------------------------------------------------------------------------
99
+
100
+ const DEFAULT_PAGE_SIZE = 20;
101
+
102
+ interface CollectionData {
103
+ entries: readonly SearchResult[];
104
+ totalCount: number;
105
+ totalPages: number;
106
+ }
107
+
108
+ const INITIAL_DATA: CollectionData = {
109
+ entries: [],
110
+ totalCount: 0,
111
+ totalPages: 0,
112
+ };
113
+
114
+ /**
115
+ * Headless hook that manages resource collection state: data fetching,
116
+ * sorting, selection, and pagination.
117
+ *
118
+ * Wraps `useFetch` for data and `@tanstack/react-table` for table state
119
+ * (sorting, selection, column visibility). The hook itself produces no
120
+ * DOM — it returns data, state, and a TanStack Table instance that view
121
+ * components (`ResourceTable`, `ResourceCards`, `ResourceList`) consume.
122
+ *
123
+ * Platform builders who want full rendering control use this hook
124
+ * directly. The `ResourceWorkbench` shell composes it internally.
125
+ *
126
+ * @example
127
+ * ```tsx
128
+ * const collection = useResourceCollection({
129
+ * listFn: (params) => stigmer.agent.list(params),
130
+ * org: "acme",
131
+ * query: debouncedQuery,
132
+ * page: 1,
133
+ * columns: agentColumns,
134
+ * });
135
+ * ```
136
+ */
137
+ export function useResourceCollection<TData = SearchResult>(
138
+ options: UseResourceCollectionOptions<TData>,
139
+ ): UseResourceCollectionReturn<TData> {
140
+ const {
141
+ listFn,
142
+ org,
143
+ query = "",
144
+ scope = "org",
145
+ page = 1,
146
+ pageSize = DEFAULT_PAGE_SIZE,
147
+ sort = null,
148
+ onSortChange,
149
+ columns = [],
150
+ enableSelection = false,
151
+ } = options;
152
+
153
+ // --- Data fetching via useFetch -----------------------------------------
154
+ const { data, isLoading, isRefetching, error, refetch } = useFetch<CollectionData>(
155
+ listFn && org
156
+ ? async () => {
157
+ const params: ListParams = {
158
+ org,
159
+ query: query || undefined,
160
+ excludePublic: false,
161
+ crossOrgPublic: scope === "all",
162
+ page: { num: page, size: pageSize },
163
+ };
164
+ const result = await listFn(params as Parameters<typeof listFn>[0]);
165
+ return {
166
+ entries: [...result.entries],
167
+ totalCount: result.totalCount,
168
+ totalPages: result.totalPages,
169
+ };
170
+ }
171
+ : null,
172
+ [listFn, org, query, scope, page, pageSize],
173
+ INITIAL_DATA,
174
+ );
175
+
176
+ const items = data.entries as unknown as readonly TData[];
177
+
178
+ // --- TanStack Table sorting bridge --------------------------------------
179
+ const sortingState: SortingState = useMemo(() => {
180
+ if (!sort) return [];
181
+ return [{ id: sort.id, desc: sort.direction === "desc" }];
182
+ }, [sort]);
183
+
184
+ const onSortChangeRef = useRef(onSortChange);
185
+ onSortChangeRef.current = onSortChange;
186
+
187
+ const handleSortingChange = useCallback(
188
+ (updater: SortingState | ((prev: SortingState) => SortingState)) => {
189
+ const next = typeof updater === "function" ? updater(sortingState) : updater;
190
+ if (next.length === 0) {
191
+ onSortChangeRef.current?.(null);
192
+ } else {
193
+ const col = next[0];
194
+ onSortChangeRef.current?.({
195
+ id: col.id,
196
+ direction: (col.desc ? "desc" : "asc") as SortDirection,
197
+ });
198
+ }
199
+ },
200
+ [sortingState],
201
+ );
202
+
203
+ // --- Row selection state ------------------------------------------------
204
+ const [rowSelection, setRowSelection] = useState<RowSelectionState>({});
205
+
206
+ // Clear selection when page, query, or scope changes to prevent stale refs.
207
+ const clearKey = `${page}-${query}-${scope}`;
208
+ const prevClearKey = useRef(clearKey);
209
+ useEffect(() => {
210
+ if (prevClearKey.current !== clearKey) {
211
+ prevClearKey.current = clearKey;
212
+ setRowSelection({});
213
+ }
214
+ }, [clearKey]);
215
+
216
+ // --- TanStack Table column conversion -----------------------------------
217
+ const tanstackColumns = useMemo<ColumnDef<TData, unknown>[]>(() => {
218
+ return columns.map((col) => ({
219
+ id: col.id,
220
+ header: col.header,
221
+ cell: (info) => col.cell(info.row.original),
222
+ enableSorting: col.sortable ?? false,
223
+ size: col.minWidth,
224
+ minSize: col.minWidth,
225
+ }));
226
+ }, [columns]);
227
+
228
+ // --- TanStack Table instance -------------------------------------------
229
+ const table = useReactTable<TData>({
230
+ data: items as TData[],
231
+ columns: tanstackColumns,
232
+ state: {
233
+ sorting: sortingState,
234
+ rowSelection,
235
+ },
236
+ onSortingChange: handleSortingChange,
237
+ onRowSelectionChange: enableSelection ? setRowSelection : undefined,
238
+ getCoreRowModel: getCoreRowModel(),
239
+ getSortedRowModel: getSortedRowModel(),
240
+ getRowId: (row) => (row as SearchResult).id ?? String(items.indexOf(row as TData)),
241
+ manualPagination: true,
242
+ manualSorting: true,
243
+ enableRowSelection: enableSelection,
244
+ });
245
+
246
+ const tableOrNull = tanstackColumns.length > 0 ? table : null;
247
+
248
+ return {
249
+ items,
250
+ totalCount: data.totalCount,
251
+ totalPages: data.totalPages,
252
+ currentPage: page,
253
+ isLoading,
254
+ isRefetching,
255
+ error,
256
+ refetch,
257
+ table: tableOrNull,
258
+ rowSelection,
259
+ setRowSelection,
260
+ };
261
+ }