@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,292 @@
1
+ "use client";
2
+
3
+ import { useCallback, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import type { ResourceTemplate } from "./templates/types";
6
+ import { TemplateGallery } from "./TemplateGallery";
7
+
8
+ // ---------------------------------------------------------------------------
9
+ // Public API
10
+ // ---------------------------------------------------------------------------
11
+
12
+ /**
13
+ * The creation path the user selected on the picker screen.
14
+ *
15
+ * - `"scratch"` — start the wizard with empty fields
16
+ * - `"template"` — start the wizard with template-provided data
17
+ * - `"import"` — open the import dialog (handled by the consumer)
18
+ */
19
+ export type CreationPath =
20
+ | { readonly kind: "scratch" }
21
+ | { readonly kind: "template"; readonly data: Partial<unknown> }
22
+ | { readonly kind: "import" };
23
+
24
+ /** Props for {@link CreationPicker}. */
25
+ export interface CreationPickerProps<TData> {
26
+ /** Label for the resource type (e.g. "agent", "MCP server"). Used in headings. */
27
+ readonly resourceLabel: string;
28
+ /** Available templates for the gallery view. */
29
+ readonly templates: readonly ResourceTemplate<TData>[];
30
+ /** Called when the user selects a creation path. */
31
+ readonly onSelect: (path: CreationPath) => void;
32
+ /** Additional CSS classes for the root container. */
33
+ readonly className?: string;
34
+ }
35
+
36
+ // ---------------------------------------------------------------------------
37
+ // Internal state
38
+ // ---------------------------------------------------------------------------
39
+
40
+ type PickerView = "options" | "gallery";
41
+
42
+ // ---------------------------------------------------------------------------
43
+ // Component
44
+ // ---------------------------------------------------------------------------
45
+
46
+ /**
47
+ * "Step 0" landing screen for resource creation flows.
48
+ *
49
+ * Presents three creation entry points as large option cards:
50
+ * 1. **Start from scratch** — blank wizard
51
+ * 2. **Browse templates** — opens the template gallery inline
52
+ * 3. **Import from file** — triggers the import dialog
53
+ *
54
+ * When the user clicks "Browse templates", the picker transitions
55
+ * to show the `TemplateGallery` inline with a back button. Selecting
56
+ * a template emits `onSelect({ kind: "template", data })`.
57
+ *
58
+ * This component is SDK-first with zero Console dependencies. The
59
+ * consumer (e.g. `AgentNewPage`) handles routing, the import dialog,
60
+ * and mounting the wizard.
61
+ *
62
+ * @typeParam TData - The wizard data shape (e.g. `AgentWizardData`).
63
+ *
64
+ * @example
65
+ * ```tsx
66
+ * <CreationPicker
67
+ * resourceLabel="agent"
68
+ * templates={AGENT_TEMPLATES}
69
+ * onSelect={(path) => {
70
+ * if (path.kind === "scratch") startWizard();
71
+ * if (path.kind === "template") startWizard(path.data);
72
+ * if (path.kind === "import") openImportDialog();
73
+ * }}
74
+ * />
75
+ * ```
76
+ */
77
+ export function CreationPicker<TData>({
78
+ resourceLabel,
79
+ templates,
80
+ onSelect,
81
+ className,
82
+ }: CreationPickerProps<TData>) {
83
+ const [view, setView] = useState<PickerView>("options");
84
+
85
+ const handleTemplateSelect = useCallback(
86
+ (template: ResourceTemplate<TData>) => {
87
+ onSelect({ kind: "template", data: template.data });
88
+ },
89
+ [onSelect],
90
+ );
91
+
92
+ const handleBackToOptions = useCallback(() => {
93
+ setView("options");
94
+ }, []);
95
+
96
+ if (view === "gallery") {
97
+ return (
98
+ <div className={cn("flex flex-col gap-4", className)}>
99
+ <div className="flex items-center gap-2">
100
+ <button
101
+ type="button"
102
+ onClick={handleBackToOptions}
103
+ aria-label="Back to creation options"
104
+ className={cn(
105
+ "inline-flex items-center justify-center rounded-md p-1.5",
106
+ "text-muted-foreground transition-colors",
107
+ "hover:bg-accent hover:text-accent-foreground",
108
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
109
+ )}
110
+ >
111
+ <BackArrowIcon />
112
+ </button>
113
+ <h2 className="text-base font-semibold text-foreground">
114
+ Choose a template
115
+ </h2>
116
+ </div>
117
+ <TemplateGallery
118
+ templates={templates}
119
+ onSelect={handleTemplateSelect}
120
+ />
121
+ </div>
122
+ );
123
+ }
124
+
125
+ return (
126
+ <div className={cn("flex flex-col gap-6", className)}>
127
+ <div>
128
+ <h2 className="text-lg font-semibold text-foreground">
129
+ Create a new {resourceLabel}
130
+ </h2>
131
+ <p className="mt-1 text-sm text-muted-foreground">
132
+ Choose how you'd like to get started.
133
+ </p>
134
+ </div>
135
+
136
+ <div className="grid grid-cols-1 gap-3 sm:grid-cols-3">
137
+ {/* Start from scratch */}
138
+ <OptionCard
139
+ title="Start from scratch"
140
+ description={`Create a blank ${resourceLabel} and configure it step by step.`}
141
+ icon={<BlankPageIcon />}
142
+ onClick={() => onSelect({ kind: "scratch" })}
143
+ />
144
+
145
+ {/* Browse templates */}
146
+ {templates.length > 0 && (
147
+ <OptionCard
148
+ title="Browse templates"
149
+ description={`Start with a pre-built ${resourceLabel} configuration.`}
150
+ icon={<GridIcon />}
151
+ onClick={() => setView("gallery")}
152
+ badge={`${templates.length} available`}
153
+ />
154
+ )}
155
+
156
+ {/* Import from file */}
157
+ <OptionCard
158
+ title="Import from file"
159
+ description="Upload a YAML or JSON configuration file."
160
+ icon={<UploadIcon />}
161
+ onClick={() => onSelect({ kind: "import" })}
162
+ />
163
+ </div>
164
+ </div>
165
+ );
166
+ }
167
+
168
+ // ---------------------------------------------------------------------------
169
+ // Internal components
170
+ // ---------------------------------------------------------------------------
171
+
172
+ function OptionCard({
173
+ title,
174
+ description,
175
+ icon,
176
+ onClick,
177
+ badge,
178
+ }: {
179
+ readonly title: string;
180
+ readonly description: string;
181
+ readonly icon: React.ReactNode;
182
+ readonly onClick: () => void;
183
+ readonly badge?: string;
184
+ }) {
185
+ return (
186
+ <button
187
+ type="button"
188
+ onClick={onClick}
189
+ className={cn(
190
+ "group flex flex-col items-center gap-3 rounded-lg border border-border bg-card p-6 text-center",
191
+ "transition-colors hover:border-primary hover:bg-accent",
192
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
193
+ )}
194
+ >
195
+ <span className="text-muted-foreground transition-colors group-hover:text-foreground">
196
+ {icon}
197
+ </span>
198
+ <div className="flex flex-col gap-1">
199
+ <span className="text-sm font-medium text-foreground">{title}</span>
200
+ <span className="text-xs text-muted-foreground">{description}</span>
201
+ </div>
202
+ {badge && (
203
+ <span className="rounded-full bg-muted px-2 py-0.5 text-[10px] font-medium text-muted-foreground">
204
+ {badge}
205
+ </span>
206
+ )}
207
+ </button>
208
+ );
209
+ }
210
+
211
+ // ---------------------------------------------------------------------------
212
+ // Icons (inline SVGs — no external dependency)
213
+ // ---------------------------------------------------------------------------
214
+
215
+ function BlankPageIcon() {
216
+ return (
217
+ <svg
218
+ className="size-8"
219
+ xmlns="http://www.w3.org/2000/svg"
220
+ viewBox="0 0 24 24"
221
+ fill="none"
222
+ stroke="currentColor"
223
+ strokeWidth={1.5}
224
+ strokeLinecap="round"
225
+ strokeLinejoin="round"
226
+ aria-hidden="true"
227
+ >
228
+ <path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z" />
229
+ <polyline points="14 2 14 8 20 8" />
230
+ </svg>
231
+ );
232
+ }
233
+
234
+ function GridIcon() {
235
+ return (
236
+ <svg
237
+ className="size-8"
238
+ xmlns="http://www.w3.org/2000/svg"
239
+ viewBox="0 0 24 24"
240
+ fill="none"
241
+ stroke="currentColor"
242
+ strokeWidth={1.5}
243
+ strokeLinecap="round"
244
+ strokeLinejoin="round"
245
+ aria-hidden="true"
246
+ >
247
+ <rect width="7" height="7" x="3" y="3" rx="1" />
248
+ <rect width="7" height="7" x="14" y="3" rx="1" />
249
+ <rect width="7" height="7" x="14" y="14" rx="1" />
250
+ <rect width="7" height="7" x="3" y="14" rx="1" />
251
+ </svg>
252
+ );
253
+ }
254
+
255
+ function UploadIcon() {
256
+ return (
257
+ <svg
258
+ className="size-8"
259
+ xmlns="http://www.w3.org/2000/svg"
260
+ viewBox="0 0 24 24"
261
+ fill="none"
262
+ stroke="currentColor"
263
+ strokeWidth={1.5}
264
+ strokeLinecap="round"
265
+ strokeLinejoin="round"
266
+ aria-hidden="true"
267
+ >
268
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
269
+ <polyline points="17 8 12 3 7 8" />
270
+ <line x1="12" x2="12" y1="3" y2="15" />
271
+ </svg>
272
+ );
273
+ }
274
+
275
+ function BackArrowIcon() {
276
+ return (
277
+ <svg
278
+ className="size-4"
279
+ xmlns="http://www.w3.org/2000/svg"
280
+ viewBox="0 0 24 24"
281
+ fill="none"
282
+ stroke="currentColor"
283
+ strokeWidth={2}
284
+ strokeLinecap="round"
285
+ strokeLinejoin="round"
286
+ aria-hidden="true"
287
+ >
288
+ <path d="m12 19-7-7 7-7" />
289
+ <path d="M19 12H5" />
290
+ </svg>
291
+ );
292
+ }
@@ -0,0 +1,156 @@
1
+ "use client";
2
+
3
+ import { cn } from "@stigmer/theme";
4
+
5
+ /** Props for {@link StepIndicator}. */
6
+ export interface StepIndicatorProps {
7
+ /** Step definitions to render (only `id` and `label` are used for rendering). */
8
+ readonly steps: readonly { readonly id: string; readonly label: string }[];
9
+ /** Zero-based index of the currently active step. */
10
+ readonly currentStepIndex: number;
11
+ /** Called when a completed step is clicked (backward navigation). */
12
+ readonly onStepClick?: (index: number) => void;
13
+ /** Additional CSS classes for the root container. */
14
+ readonly className?: string;
15
+ }
16
+
17
+ /**
18
+ * Vertical step progress indicator for multi-step wizards.
19
+ *
20
+ * Renders each step as a numbered circle with label. Steps are
21
+ * color-coded by state: completed (filled), active (ring), pending
22
+ * (muted). Completed steps are clickable for backward navigation.
23
+ *
24
+ * Responsive: collapses to a compact horizontal layout on narrow
25
+ * viewports via CSS container queries.
26
+ *
27
+ * Uses `--stgm-*` tokens exclusively. Zero Console dependencies.
28
+ */
29
+ export function StepIndicator({
30
+ steps,
31
+ currentStepIndex,
32
+ onStepClick,
33
+ className,
34
+ }: StepIndicatorProps) {
35
+ return (
36
+ <nav
37
+ aria-label="Wizard progress"
38
+ className={cn("flex flex-col gap-1", className)}
39
+ >
40
+ <ol className="flex flex-col gap-1" role="list">
41
+ {steps.map((step, index) => {
42
+ const state = getStepState(index, currentStepIndex);
43
+ const isClickable = state === "completed" && onStepClick != null;
44
+
45
+ const content = (
46
+ <div className="flex items-center gap-3">
47
+ <StepCircle index={index} state={state} />
48
+ <span
49
+ className={cn(
50
+ "text-sm font-medium transition-colors",
51
+ state === "active" && "text-foreground",
52
+ state === "completed" && "text-foreground",
53
+ state === "pending" && "text-muted-foreground",
54
+ )}
55
+ >
56
+ {step.label}
57
+ </span>
58
+ </div>
59
+ );
60
+
61
+ return (
62
+ <li key={step.id}>
63
+ {isClickable ? (
64
+ <button
65
+ type="button"
66
+ onClick={() => onStepClick(index)}
67
+ className={cn(
68
+ "w-full rounded-md px-2 py-2 text-left transition-colors",
69
+ "hover:bg-accent-hover",
70
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",
71
+ )}
72
+ aria-label={`Go back to step ${index + 1}: ${step.label}`}
73
+ aria-current={undefined}
74
+ >
75
+ {content}
76
+ </button>
77
+ ) : (
78
+ <div
79
+ className="px-2 py-2"
80
+ aria-current={state === "active" ? "step" : undefined}
81
+ >
82
+ {content}
83
+ </div>
84
+ )}
85
+ {index < steps.length - 1 && (
86
+ <div
87
+ className="ml-[18px] h-4 w-px bg-border"
88
+ aria-hidden="true"
89
+ />
90
+ )}
91
+ </li>
92
+ );
93
+ })}
94
+ </ol>
95
+ </nav>
96
+ );
97
+ }
98
+
99
+ // ---------------------------------------------------------------------------
100
+ // Step circle — the numbered indicator
101
+ // ---------------------------------------------------------------------------
102
+
103
+ type StepState = "completed" | "active" | "pending";
104
+
105
+ function getStepState(index: number, currentIndex: number): StepState {
106
+ if (index < currentIndex) return "completed";
107
+ if (index === currentIndex) return "active";
108
+ return "pending";
109
+ }
110
+
111
+ function StepCircle({
112
+ index,
113
+ state,
114
+ }: {
115
+ readonly index: number;
116
+ readonly state: StepState;
117
+ }) {
118
+ return (
119
+ <div
120
+ className={cn(
121
+ "flex size-7 shrink-0 items-center justify-center rounded-full text-xs font-medium transition-colors",
122
+ state === "completed" && "bg-primary text-primary-foreground",
123
+ state === "active" && "border-2 border-primary text-primary",
124
+ state === "pending" && "border border-border text-muted-foreground",
125
+ )}
126
+ aria-hidden="true"
127
+ >
128
+ {state === "completed" ? (
129
+ <CheckIcon className="size-3.5" />
130
+ ) : (
131
+ <span>{index + 1}</span>
132
+ )}
133
+ </div>
134
+ );
135
+ }
136
+
137
+ // ---------------------------------------------------------------------------
138
+ // Icons
139
+ // ---------------------------------------------------------------------------
140
+
141
+ function CheckIcon({ className }: { readonly className?: string }) {
142
+ return (
143
+ <svg
144
+ className={className}
145
+ viewBox="0 0 16 16"
146
+ fill="none"
147
+ stroke="currentColor"
148
+ strokeWidth="2"
149
+ strokeLinecap="round"
150
+ strokeLinejoin="round"
151
+ aria-hidden="true"
152
+ >
153
+ <path d="m3 8.5 3.5 3.5 6.5-8" />
154
+ </svg>
155
+ );
156
+ }
@@ -0,0 +1,143 @@
1
+ "use client";
2
+
3
+ import { useCallback } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import type { ResourceTemplate, TemplateCategory } from "./templates/types";
6
+ import { TEMPLATE_CATEGORY_LABELS } from "./templates/types";
7
+
8
+ // ---------------------------------------------------------------------------
9
+ // Public API
10
+ // ---------------------------------------------------------------------------
11
+
12
+ /** Props for {@link TemplateCard}. */
13
+ export interface TemplateCardProps<TData> {
14
+ /** The template to display. */
15
+ readonly template: ResourceTemplate<TData>;
16
+ /** Called when the card is selected (click or Enter). */
17
+ readonly onSelect: (template: ResourceTemplate<TData>) => void;
18
+ /** Additional CSS classes for the card container. */
19
+ readonly className?: string;
20
+ }
21
+
22
+ // ---------------------------------------------------------------------------
23
+ // Category badge colors
24
+ // ---------------------------------------------------------------------------
25
+
26
+ const CATEGORY_COLORS: Record<TemplateCategory, string> = {
27
+ "customer-support": "bg-blue-500/10 text-blue-700 dark:text-blue-400",
28
+ "code-review": "bg-violet-500/10 text-violet-700 dark:text-violet-400",
29
+ "data-analysis": "bg-amber-500/10 text-amber-700 dark:text-amber-400",
30
+ devops: "bg-emerald-500/10 text-emerald-700 dark:text-emerald-400",
31
+ content: "bg-pink-500/10 text-pink-700 dark:text-pink-400",
32
+ integration: "bg-cyan-500/10 text-cyan-700 dark:text-cyan-400",
33
+ general: "bg-muted text-muted-foreground",
34
+ };
35
+
36
+ // ---------------------------------------------------------------------------
37
+ // Initial avatar colors (deterministic from template id)
38
+ // ---------------------------------------------------------------------------
39
+
40
+ const AVATAR_COLORS = [
41
+ "bg-blue-500/15 text-blue-700 dark:text-blue-400",
42
+ "bg-violet-500/15 text-violet-700 dark:text-violet-400",
43
+ "bg-emerald-500/15 text-emerald-700 dark:text-emerald-400",
44
+ "bg-amber-500/15 text-amber-700 dark:text-amber-400",
45
+ "bg-pink-500/15 text-pink-700 dark:text-pink-400",
46
+ "bg-cyan-500/15 text-cyan-700 dark:text-cyan-400",
47
+ "bg-rose-500/15 text-rose-700 dark:text-rose-400",
48
+ ] as const;
49
+
50
+ function hashCode(str: string): number {
51
+ let hash = 0;
52
+ for (let i = 0; i < str.length; i++) {
53
+ hash = ((hash << 5) - hash + str.charCodeAt(i)) | 0;
54
+ }
55
+ return Math.abs(hash);
56
+ }
57
+
58
+ // ---------------------------------------------------------------------------
59
+ // Component
60
+ // ---------------------------------------------------------------------------
61
+
62
+ /**
63
+ * A clickable card that displays a resource template's metadata.
64
+ *
65
+ * Renders the template's name, description, and category badge.
66
+ * Displays a colored initial avatar derived from the template name.
67
+ *
68
+ * Fully keyboard-accessible: focusable, activates on Enter/Space.
69
+ * Uses `--stgm-*` tokens for all structural styling; category badge
70
+ * colors use Tailwind's semantic palette with opacity for dark mode.
71
+ *
72
+ * @typeParam TData - The wizard data shape this template targets.
73
+ */
74
+ export function TemplateCard<TData>({
75
+ template,
76
+ onSelect,
77
+ className,
78
+ }: TemplateCardProps<TData>) {
79
+ const handleClick = useCallback(() => {
80
+ onSelect(template);
81
+ }, [onSelect, template]);
82
+
83
+ const handleKeyDown = useCallback(
84
+ (e: React.KeyboardEvent) => {
85
+ if (e.key === "Enter" || e.key === " ") {
86
+ e.preventDefault();
87
+ onSelect(template);
88
+ }
89
+ },
90
+ [onSelect, template],
91
+ );
92
+
93
+ const colorIndex = hashCode(template.id) % AVATAR_COLORS.length;
94
+ const avatarColor = AVATAR_COLORS[colorIndex]!;
95
+ const initial = template.name.charAt(0).toUpperCase();
96
+ const categoryLabel =
97
+ TEMPLATE_CATEGORY_LABELS[template.category] ?? template.category;
98
+
99
+ return (
100
+ <div
101
+ role="button"
102
+ tabIndex={0}
103
+ onClick={handleClick}
104
+ onKeyDown={handleKeyDown}
105
+ aria-label={`Use ${template.name} template`}
106
+ className={cn(
107
+ "group flex cursor-pointer flex-col gap-3 rounded-lg border border-border bg-card p-4",
108
+ "transition-colors hover:border-primary hover:bg-accent",
109
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
110
+ className,
111
+ )}
112
+ >
113
+ <div className="flex items-start gap-3">
114
+ {/* Initial avatar */}
115
+ <span
116
+ className={cn(
117
+ "inline-flex size-9 shrink-0 items-center justify-center rounded-md text-sm font-semibold",
118
+ avatarColor,
119
+ )}
120
+ aria-hidden="true"
121
+ >
122
+ {initial}
123
+ </span>
124
+
125
+ <div className="min-w-0 flex-1">
126
+ <p className="text-sm font-medium text-foreground">{template.name}</p>
127
+ <span
128
+ className={cn(
129
+ "mt-1 inline-block rounded-full px-2 py-0.5 text-[10px] font-medium",
130
+ CATEGORY_COLORS[template.category] ?? CATEGORY_COLORS.general,
131
+ )}
132
+ >
133
+ {categoryLabel}
134
+ </span>
135
+ </div>
136
+ </div>
137
+
138
+ <p className="line-clamp-2 text-xs leading-relaxed text-muted-foreground">
139
+ {template.description}
140
+ </p>
141
+ </div>
142
+ );
143
+ }