@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,223 @@
1
+ "use client";
2
+
3
+ import { useCallback, useMemo, useReducer } from "react";
4
+ import type { WizardStepDef, WizardState } from "./types";
5
+
6
+ // ---------------------------------------------------------------------------
7
+ // Public API
8
+ // ---------------------------------------------------------------------------
9
+
10
+ /** Options for {@link useWizardState}. */
11
+ export interface UseWizardStateOptions<TData> {
12
+ /** Ordered step definitions — determines wizard length and validation. */
13
+ readonly steps: readonly WizardStepDef<TData>[];
14
+ /** Initial form data (empty/default values for all fields). */
15
+ readonly initialData: TData;
16
+ }
17
+
18
+ /** Return value of {@link useWizardState}. */
19
+ export interface UseWizardStateReturn<TData> {
20
+ /** Zero-based index of the current step. */
21
+ readonly currentStepIndex: number;
22
+ /** Definition of the current step. */
23
+ readonly currentStep: WizardStepDef<TData>;
24
+ /** Accumulated form data across all steps. */
25
+ readonly data: TData;
26
+ /** Merges a partial update into the accumulated data. */
27
+ readonly updateData: (partial: Partial<TData>) => void;
28
+ /** Whether navigation forward is allowed (current step is valid). */
29
+ readonly canGoNext: boolean;
30
+ /** Whether navigation backward is possible (not on first step). */
31
+ readonly canGoBack: boolean;
32
+ /** Advance to the next step (validates current step first). */
33
+ readonly goNext: () => void;
34
+ /** Return to the previous step. */
35
+ readonly goBack: () => void;
36
+ /** Jump directly to a specific step (only allows going backward). */
37
+ readonly goToStep: (index: number) => void;
38
+ /** Validation error for the current step, or `null`. */
39
+ readonly validationError: string | null;
40
+ /** `true` when on the first step. */
41
+ readonly isFirstStep: boolean;
42
+ /** `true` when on the last step. */
43
+ readonly isLastStep: boolean;
44
+ }
45
+
46
+ // ---------------------------------------------------------------------------
47
+ // Actions
48
+ // ---------------------------------------------------------------------------
49
+
50
+ type WizardAction<TData> =
51
+ | { readonly type: "GO_NEXT" }
52
+ | { readonly type: "GO_BACK" }
53
+ | { readonly type: "GO_TO_STEP"; readonly index: number }
54
+ | { readonly type: "UPDATE_DATA"; readonly partial: Partial<TData> }
55
+ | { readonly type: "SET_VALIDATION_ERROR"; readonly error: string | null };
56
+
57
+ // ---------------------------------------------------------------------------
58
+ // Reducer
59
+ // ---------------------------------------------------------------------------
60
+
61
+ function createReducer<TData>(steps: readonly WizardStepDef<TData>[]) {
62
+ return function wizardReducer(
63
+ state: WizardState<TData>,
64
+ action: WizardAction<TData>,
65
+ ): WizardState<TData> {
66
+ switch (action.type) {
67
+ case "GO_NEXT": {
68
+ const step = steps[state.currentStepIndex];
69
+ const error = step?.validate?.(state.data) ?? null;
70
+ if (error) {
71
+ return { ...state, validationError: error };
72
+ }
73
+ const nextIndex = Math.min(
74
+ state.currentStepIndex + 1,
75
+ steps.length - 1,
76
+ );
77
+ return {
78
+ ...state,
79
+ currentStepIndex: nextIndex,
80
+ validationError: null,
81
+ };
82
+ }
83
+
84
+ case "GO_BACK": {
85
+ const prevIndex = Math.max(state.currentStepIndex - 1, 0);
86
+ return {
87
+ ...state,
88
+ currentStepIndex: prevIndex,
89
+ validationError: null,
90
+ };
91
+ }
92
+
93
+ case "GO_TO_STEP": {
94
+ if (action.index < 0 || action.index >= steps.length) return state;
95
+ if (action.index >= state.currentStepIndex) return state;
96
+ return {
97
+ ...state,
98
+ currentStepIndex: action.index,
99
+ validationError: null,
100
+ };
101
+ }
102
+
103
+ case "UPDATE_DATA":
104
+ return {
105
+ ...state,
106
+ data: { ...state.data, ...action.partial },
107
+ validationError: null,
108
+ };
109
+
110
+ case "SET_VALIDATION_ERROR":
111
+ return { ...state, validationError: action.error };
112
+
113
+ default:
114
+ return state;
115
+ }
116
+ };
117
+ }
118
+
119
+ // ---------------------------------------------------------------------------
120
+ // Hook
121
+ // ---------------------------------------------------------------------------
122
+
123
+ /**
124
+ * Headless state machine for multi-step wizard flows.
125
+ *
126
+ * Manages step navigation, per-step validation gating, and accumulated
127
+ * form data. Generic over the data shape — each wizard defines its own
128
+ * `TData` type with fields for all steps.
129
+ *
130
+ * Navigation forward is gated by the current step's `validate` function.
131
+ * Navigation backward is always allowed. Direct step jumps only go backward
132
+ * (prevents skipping required steps).
133
+ *
134
+ * Follows the `useReducer` + discriminated union pattern established
135
+ * by `agentSetupReducer` — pure state transitions, imperative API on top.
136
+ *
137
+ * @typeParam TData - Accumulated form data shape.
138
+ *
139
+ * @example
140
+ * ```tsx
141
+ * const wizard = useWizardState({
142
+ * steps: [
143
+ * { id: "basics", label: "Basics", validate: (d) => d.name ? null : "Name is required" },
144
+ * { id: "review", label: "Review" },
145
+ * ],
146
+ * initialData: { name: "", description: "" },
147
+ * });
148
+ *
149
+ * // wizard.data.name, wizard.updateData({ name: "My Agent" })
150
+ * // wizard.goNext(), wizard.goBack()
151
+ * ```
152
+ */
153
+ export function useWizardState<TData>(
154
+ options: UseWizardStateOptions<TData>,
155
+ ): UseWizardStateReturn<TData> {
156
+ const { steps, initialData } = options;
157
+
158
+ const reducer = useMemo(() => createReducer(steps), [steps]);
159
+
160
+ const [state, dispatch] = useReducer(reducer, {
161
+ currentStepIndex: 0,
162
+ data: initialData,
163
+ validationError: null,
164
+ });
165
+
166
+ const currentStep = steps[state.currentStepIndex]!;
167
+ const isFirstStep = state.currentStepIndex === 0;
168
+ const isLastStep = state.currentStepIndex === steps.length - 1;
169
+
170
+ const canGoNext = useMemo(() => {
171
+ const error = currentStep.validate?.(state.data) ?? null;
172
+ return error === null;
173
+ }, [currentStep, state.data]);
174
+
175
+ const canGoBack = !isFirstStep;
176
+
177
+ const goNext = useCallback(() => {
178
+ dispatch({ type: "GO_NEXT" });
179
+ }, []);
180
+
181
+ const goBack = useCallback(() => {
182
+ dispatch({ type: "GO_BACK" });
183
+ }, []);
184
+
185
+ const goToStep = useCallback((index: number) => {
186
+ dispatch({ type: "GO_TO_STEP", index });
187
+ }, []);
188
+
189
+ const updateData = useCallback((partial: Partial<TData>) => {
190
+ dispatch({ type: "UPDATE_DATA", partial });
191
+ }, []);
192
+
193
+ return useMemo(
194
+ () => ({
195
+ currentStepIndex: state.currentStepIndex,
196
+ currentStep,
197
+ data: state.data,
198
+ updateData,
199
+ canGoNext,
200
+ canGoBack,
201
+ goNext,
202
+ goBack,
203
+ goToStep,
204
+ validationError: state.validationError,
205
+ isFirstStep,
206
+ isLastStep,
207
+ }),
208
+ [
209
+ state.currentStepIndex,
210
+ state.data,
211
+ state.validationError,
212
+ currentStep,
213
+ canGoNext,
214
+ canGoBack,
215
+ isFirstStep,
216
+ isLastStep,
217
+ updateData,
218
+ goNext,
219
+ goBack,
220
+ goToStep,
221
+ ],
222
+ );
223
+ }
@@ -0,0 +1,127 @@
1
+ "use client";
2
+
3
+ import { useCallback, useEffect, useRef } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import type { ConfirmState } from "./types";
6
+
7
+ export interface ConfirmDialogProps {
8
+ /** Pending confirmation state from {@link useConfirmAction}. */
9
+ readonly state: ConfirmState | null;
10
+ /** Accept the pending confirmation. */
11
+ readonly onConfirm: () => void;
12
+ /** Dismiss the pending confirmation. */
13
+ readonly onCancel: () => void;
14
+ }
15
+
16
+ /**
17
+ * Accessible confirmation dialog for destructive actions.
18
+ *
19
+ * Uses the native `<dialog>` element with `showModal()` for built-in
20
+ * focus trapping, Escape key handling, and backdrop. Styled via
21
+ * `--stgm-*` design tokens.
22
+ *
23
+ * Pairs with {@link useConfirmAction} which manages the imperative
24
+ * `confirm()` → Promise pattern.
25
+ *
26
+ * @example
27
+ * ```tsx
28
+ * const { confirmState, confirm, handleConfirm, handleCancel } = useConfirmAction();
29
+ *
30
+ * // Trigger
31
+ * const handleDelete = async () => {
32
+ * const ok = await confirm({
33
+ * title: "Delete agent?",
34
+ * description: "This cannot be undone.",
35
+ * confirmLabel: "Delete",
36
+ * variant: "destructive",
37
+ * });
38
+ * if (ok) await deleteAgent();
39
+ * };
40
+ *
41
+ * // Render
42
+ * <ConfirmDialog
43
+ * state={confirmState}
44
+ * onConfirm={handleConfirm}
45
+ * onCancel={handleCancel}
46
+ * />
47
+ * ```
48
+ */
49
+ export function ConfirmDialog({
50
+ state,
51
+ onConfirm,
52
+ onCancel,
53
+ }: ConfirmDialogProps) {
54
+ const dialogRef = useRef<HTMLDialogElement>(null);
55
+
56
+ useEffect(() => {
57
+ const dialog = dialogRef.current;
58
+ if (!dialog) return;
59
+ if (state && !dialog.open) {
60
+ dialog.showModal();
61
+ } else if (!state && dialog.open) {
62
+ dialog.close();
63
+ }
64
+ }, [state]);
65
+
66
+ const handleDialogCancel = useCallback(
67
+ (e: React.SyntheticEvent) => {
68
+ e.preventDefault();
69
+ onCancel();
70
+ },
71
+ [onCancel],
72
+ );
73
+
74
+ if (!state) return null;
75
+
76
+ const isDestructive = state.variant === "destructive";
77
+
78
+ return (
79
+ <dialog
80
+ ref={dialogRef}
81
+ onCancel={handleDialogCancel}
82
+ className={cn(
83
+ "fixed inset-0 z-50 m-auto w-full max-w-sm rounded-lg border border-border bg-popover p-0 text-popover-foreground shadow-lg",
84
+ "backdrop:bg-black/50",
85
+ "open:animate-in open:fade-in-0 open:zoom-in-95",
86
+ )}
87
+ >
88
+ <div className="flex flex-col gap-4 p-6">
89
+ <div className="flex flex-col gap-1.5">
90
+ <h3 className="text-base font-semibold text-foreground">
91
+ {state.title}
92
+ </h3>
93
+ <p className="text-sm text-muted-foreground">
94
+ {state.description}
95
+ </p>
96
+ </div>
97
+ <div className="flex justify-end gap-2">
98
+ <button
99
+ type="button"
100
+ onClick={onCancel}
101
+ className={cn(
102
+ "rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
103
+ "border border-input bg-background text-foreground",
104
+ "hover:bg-accent hover:text-accent-foreground",
105
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
106
+ )}
107
+ >
108
+ {state.cancelLabel ?? "Cancel"}
109
+ </button>
110
+ <button
111
+ type="button"
112
+ onClick={onConfirm}
113
+ className={cn(
114
+ "rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
115
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
116
+ isDestructive
117
+ ? "bg-destructive text-destructive-foreground hover:bg-destructive-hover"
118
+ : "bg-primary text-primary-foreground hover:bg-primary-hover",
119
+ )}
120
+ >
121
+ {state.confirmLabel ?? "Confirm"}
122
+ </button>
123
+ </div>
124
+ </div>
125
+ </dialog>
126
+ );
127
+ }
@@ -0,0 +1,157 @@
1
+ "use client";
2
+
3
+ import { useMemo } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { ActionMenu } from "../action-menu";
6
+ import type { DetailAction } from "./types";
7
+
8
+ export interface ResourceActionBarProps {
9
+ /**
10
+ * Primary action rendered as a visible button.
11
+ * Use for the most common action on this resource (e.g. "Edit").
12
+ */
13
+ readonly primaryAction?: DetailAction;
14
+ /**
15
+ * Secondary and tertiary actions rendered in the overflow (kebab) menu.
16
+ * Actions with the same `group` are visually grouped with separators.
17
+ */
18
+ readonly actions?: readonly DetailAction[];
19
+ /** Additional CSS classes for the root container. */
20
+ readonly className?: string;
21
+ }
22
+
23
+ /**
24
+ * Horizontal action bar for resource detail page headers.
25
+ *
26
+ * Renders an optional primary action as a visible button and any
27
+ * remaining actions in a kebab overflow menu (using the SDK's
28
+ * {@link ActionMenu} compound component).
29
+ *
30
+ * When there are no actions at all, renders nothing.
31
+ *
32
+ * @example
33
+ * ```tsx
34
+ * <ResourceActionBar
35
+ * primaryAction={{
36
+ * id: "edit",
37
+ * label: "Edit",
38
+ * icon: <PencilIcon />,
39
+ * onAction: () => router.push(editUrl),
40
+ * }}
41
+ * actions={[
42
+ * { id: "copy-id", label: "Copy ID", onAction: () => copyId(id) },
43
+ * { id: "delete", label: "Delete", variant: "destructive", onAction: handleDelete },
44
+ * ]}
45
+ * />
46
+ * ```
47
+ */
48
+ export function ResourceActionBar({
49
+ primaryAction,
50
+ actions,
51
+ className,
52
+ }: ResourceActionBarProps) {
53
+ const hasOverflow = actions != null && actions.length > 0;
54
+ if (!primaryAction && !hasOverflow) return null;
55
+
56
+ return (
57
+ <div className={cn("flex items-center gap-2", className)}>
58
+ {primaryAction && (
59
+ <button
60
+ type="button"
61
+ onClick={primaryAction.onAction}
62
+ disabled={primaryAction.disabled}
63
+ className={cn(
64
+ "inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
65
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
66
+ "bg-primary text-primary-foreground hover:bg-primary-hover",
67
+ "disabled:pointer-events-none disabled:opacity-50",
68
+ )}
69
+ >
70
+ {primaryAction.icon}
71
+ {primaryAction.label}
72
+ </button>
73
+ )}
74
+ {hasOverflow && <OverflowMenu actions={actions} />}
75
+ </div>
76
+ );
77
+ }
78
+
79
+ // ---------------------------------------------------------------------------
80
+ // Overflow kebab menu
81
+ // ---------------------------------------------------------------------------
82
+
83
+ function OverflowMenu({
84
+ actions,
85
+ }: {
86
+ readonly actions: readonly DetailAction[];
87
+ }) {
88
+ const grouped = useGroupedActions(actions);
89
+
90
+ return (
91
+ <ActionMenu>
92
+ <ActionMenu.Trigger aria-label="More actions">
93
+ <KebabIcon className="size-4" />
94
+ </ActionMenu.Trigger>
95
+ <ActionMenu.Content>
96
+ {grouped.map((group, groupIndex) => (
97
+ <ActionMenu.Group key={group.key}>
98
+ {groupIndex > 0 && <ActionMenu.Separator />}
99
+ {group.items.map((action) => (
100
+ <ActionMenu.Item
101
+ key={action.id}
102
+ icon={action.icon}
103
+ shortcut={action.shortcut}
104
+ variant={action.variant}
105
+ disabled={action.disabled}
106
+ onSelect={action.onAction}
107
+ >
108
+ {action.label}
109
+ </ActionMenu.Item>
110
+ ))}
111
+ </ActionMenu.Group>
112
+ ))}
113
+ </ActionMenu.Content>
114
+ </ActionMenu>
115
+ );
116
+ }
117
+
118
+ // ---------------------------------------------------------------------------
119
+ // Action grouping
120
+ // ---------------------------------------------------------------------------
121
+
122
+ interface ActionGroup {
123
+ readonly key: string;
124
+ readonly items: readonly DetailAction[];
125
+ }
126
+
127
+ function useGroupedActions(actions: readonly DetailAction[]): ActionGroup[] {
128
+ return useMemo(() => {
129
+ const map = new Map<string, DetailAction[]>();
130
+ for (const action of actions) {
131
+ const key = action.group ?? "__default";
132
+ const list = map.get(key);
133
+ if (list) list.push(action);
134
+ else map.set(key, [action]);
135
+ }
136
+ return Array.from(map.entries()).map(([key, items]) => ({ key, items }));
137
+ }, [actions]);
138
+ }
139
+
140
+ // ---------------------------------------------------------------------------
141
+ // Kebab icon (inline SVG — no icon library dependency)
142
+ // ---------------------------------------------------------------------------
143
+
144
+ function KebabIcon({ className }: { readonly className?: string }) {
145
+ return (
146
+ <svg
147
+ className={className}
148
+ viewBox="0 0 16 16"
149
+ fill="currentColor"
150
+ aria-hidden="true"
151
+ >
152
+ <circle cx="8" cy="3" r="1.25" />
153
+ <circle cx="8" cy="8" r="1.25" />
154
+ <circle cx="8" cy="13" r="1.25" />
155
+ </svg>
156
+ );
157
+ }
@@ -0,0 +1,184 @@
1
+ "use client";
2
+
3
+ import { cn } from "@stigmer/theme";
4
+ import { StatusBadge } from "../resource-workbench/components/StatusBadge";
5
+ import { Tabs } from "../tabs/Tabs";
6
+ import { ResourceActionBar } from "./ResourceActionBar";
7
+ import type { ResourceDetailShellProps } from "./types";
8
+
9
+ /**
10
+ * Shared layout shell for resource detail pages.
11
+ *
12
+ * Renders a standardized header (icon, name, org, timestamps, status,
13
+ * visibility control), an action bar (primary button + kebab overflow),
14
+ * optional tabs, and a content area — all themed via `--stgm-*` tokens.
15
+ *
16
+ * The shell receives pre-fetched data via props (DD-T03-001). It does
17
+ * NOT own data fetching — resource-specific hooks (`useAgent`, `useSkill`,
18
+ * etc.) handle that. The shell is a layout + behavior coordinator, not
19
+ * a data-fetching component.
20
+ *
21
+ * Zero Console dependencies — safe for platform builder embedding.
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * const { agent } = useAgent(org, slug);
26
+ *
27
+ * <ResourceDetailShell
28
+ * header={{
29
+ * name: agent.metadata.name,
30
+ * id: agent.metadata.id,
31
+ * org: agent.metadata.org,
32
+ * slug: agent.metadata.slug,
33
+ * description: agent.spec.description,
34
+ * }}
35
+ * primaryAction={{ id: "edit", label: "Edit", onAction: handleEdit }}
36
+ * actions={[...]}
37
+ * >
38
+ * <AgentOverview agent={agent} />
39
+ * </ResourceDetailShell>
40
+ * ```
41
+ */
42
+ export function ResourceDetailShell({
43
+ header,
44
+ visibilityControl,
45
+ primaryAction,
46
+ actions,
47
+ tabs,
48
+ activeTab,
49
+ onTabChange,
50
+ tabsAriaLabel,
51
+ children,
52
+ className,
53
+ }: ResourceDetailShellProps) {
54
+ const hasTabs = tabs != null && tabs.length > 0;
55
+
56
+ return (
57
+ <div className={cn("flex flex-col gap-6", className)}>
58
+ {/* Header + Action bar row */}
59
+ <div className="flex items-start justify-between gap-4">
60
+ <Header
61
+ header={header}
62
+ visibilityControl={visibilityControl}
63
+ />
64
+ <ResourceActionBar
65
+ primaryAction={primaryAction}
66
+ actions={actions}
67
+ className="shrink-0"
68
+ />
69
+ </div>
70
+
71
+ {/* Tabs + content or plain content */}
72
+ {hasTabs && activeTab && onTabChange ? (
73
+ <Tabs
74
+ tabs={tabs}
75
+ activeTab={activeTab}
76
+ onTabChange={onTabChange}
77
+ aria-label={tabsAriaLabel}
78
+ >
79
+ {children}
80
+ </Tabs>
81
+ ) : (
82
+ children
83
+ )}
84
+ </div>
85
+ );
86
+ }
87
+
88
+ // ---------------------------------------------------------------------------
89
+ // Header
90
+ // ---------------------------------------------------------------------------
91
+
92
+ function Header({
93
+ header,
94
+ visibilityControl,
95
+ }: {
96
+ readonly header: ResourceDetailShellProps["header"];
97
+ readonly visibilityControl?: ResourceDetailShellProps["visibilityControl"];
98
+ }) {
99
+ const {
100
+ name,
101
+ org,
102
+ slug,
103
+ description,
104
+ iconUrl,
105
+ icon,
106
+ createdAt,
107
+ updatedAt,
108
+ status,
109
+ statusLabel,
110
+ } = header;
111
+
112
+ const showSlug = slug && slug !== name;
113
+
114
+ return (
115
+ <div className="flex min-w-0 items-start gap-3">
116
+ {iconUrl ? (
117
+ <img
118
+ src={iconUrl}
119
+ alt=""
120
+ className="mt-0.5 size-8 shrink-0 rounded object-cover"
121
+ />
122
+ ) : icon ? (
123
+ <span className="mt-1 shrink-0">{icon}</span>
124
+ ) : null}
125
+ <div className="min-w-0 flex-1">
126
+ <div className="flex items-center gap-2">
127
+ <h2 className="truncate text-lg font-semibold text-foreground">
128
+ {name}
129
+ </h2>
130
+ {showSlug && (
131
+ <code className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-xs font-medium text-muted-foreground">
132
+ {slug}
133
+ </code>
134
+ )}
135
+ {status && (
136
+ <StatusBadge
137
+ phase={status}
138
+ label={statusLabel}
139
+ />
140
+ )}
141
+ {visibilityControl}
142
+ </div>
143
+ <div className="mt-0.5 flex flex-wrap items-center gap-x-1.5 text-xs text-muted-foreground">
144
+ {org && <span>{org}</span>}
145
+ {createdAt && (
146
+ <>
147
+ <Dot />
148
+ <span>Created {formatDate(createdAt)}</span>
149
+ </>
150
+ )}
151
+ {updatedAt && (
152
+ <>
153
+ <Dot />
154
+ <span>Updated {formatDate(updatedAt)}</span>
155
+ </>
156
+ )}
157
+ </div>
158
+ {description && (
159
+ <p className="mt-2 text-sm text-muted-foreground">{description}</p>
160
+ )}
161
+ </div>
162
+ </div>
163
+ );
164
+ }
165
+
166
+ // ---------------------------------------------------------------------------
167
+ // Utilities
168
+ // ---------------------------------------------------------------------------
169
+
170
+ function Dot() {
171
+ return (
172
+ <span className="shrink-0" aria-hidden="true">
173
+ {"\u00B7"}
174
+ </span>
175
+ );
176
+ }
177
+
178
+ function formatDate(date: Date): string {
179
+ return date.toLocaleDateString("en-US", {
180
+ month: "short",
181
+ day: "numeric",
182
+ year: "numeric",
183
+ });
184
+ }