@stigmer/react 3.12.1 → 3.12.2

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 (658) hide show
  1. package/access/ManageAccessDialog.d.ts.map +1 -1
  2. package/access/ManageAccessDialog.js +7 -2
  3. package/access/ManageAccessDialog.js.map +1 -1
  4. package/activity/format-relative-time.d.ts +11 -9
  5. package/activity/format-relative-time.d.ts.map +1 -1
  6. package/activity/format-relative-time.js +11 -9
  7. package/activity/format-relative-time.js.map +1 -1
  8. package/agent/steps/CapabilitiesStep.js +5 -2
  9. package/agent/steps/CapabilitiesStep.js.map +1 -1
  10. package/agent/steps/IdentityStep.d.ts.map +1 -1
  11. package/agent/steps/IdentityStep.js +6 -5
  12. package/agent/steps/IdentityStep.js.map +1 -1
  13. package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
  14. package/agent-instance/CreateAgentInstanceDialog.js +10 -2
  15. package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
  16. package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
  17. package/api-key/ApiKeyCreatedAlert.js +12 -20
  18. package/api-key/ApiKeyCreatedAlert.js.map +1 -1
  19. package/api-key/ApiKeyListPanel.d.ts.map +1 -1
  20. package/api-key/ApiKeyListPanel.js +3 -23
  21. package/api-key/ApiKeyListPanel.js.map +1 -1
  22. package/api-key/CreateApiKeyForm.d.ts.map +1 -1
  23. package/api-key/CreateApiKeyForm.js +6 -10
  24. package/api-key/CreateApiKeyForm.js.map +1 -1
  25. package/approval-defaults-context.d.ts +47 -0
  26. package/approval-defaults-context.d.ts.map +1 -0
  27. package/approval-defaults-context.js +27 -0
  28. package/approval-defaults-context.js.map +1 -0
  29. package/attachment/index.d.ts +2 -0
  30. package/attachment/index.d.ts.map +1 -1
  31. package/attachment/index.js +1 -0
  32. package/attachment/index.js.map +1 -1
  33. package/attachment/vision-preflight.d.ts +113 -0
  34. package/attachment/vision-preflight.d.ts.map +1 -0
  35. package/attachment/vision-preflight.js +143 -0
  36. package/attachment/vision-preflight.js.map +1 -0
  37. package/billing/AutoRechargeCard.d.ts.map +1 -1
  38. package/billing/AutoRechargeCard.js +3 -2
  39. package/billing/AutoRechargeCard.js.map +1 -1
  40. package/billing/BillingSection.d.ts.map +1 -1
  41. package/billing/BillingSection.js +3 -2
  42. package/billing/BillingSection.js.map +1 -1
  43. package/channel/ChannelConversationsDialog.d.ts.map +1 -1
  44. package/channel/ChannelConversationsDialog.js +5 -4
  45. package/channel/ChannelConversationsDialog.js.map +1 -1
  46. package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
  47. package/channel/ChannelCredentialsDialog.js +9 -4
  48. package/channel/ChannelCredentialsDialog.js.map +1 -1
  49. package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
  50. package/channel/ChannelTemplatesDialog.js +5 -4
  51. package/channel/ChannelTemplatesDialog.js.map +1 -1
  52. package/channel/ConnectSlackDialog.d.ts.map +1 -1
  53. package/channel/ConnectSlackDialog.js +9 -4
  54. package/channel/ConnectSlackDialog.js.map +1 -1
  55. package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
  56. package/channel/ConnectWhatsAppDialog.js +9 -4
  57. package/channel/ConnectWhatsAppDialog.js.map +1 -1
  58. package/channel/useChannelSessions.d.ts.map +1 -1
  59. package/channel/useChannelSessions.js.map +1 -1
  60. package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
  61. package/channel-app/ChannelAppDetailPanel.js +8 -5
  62. package/channel-app/ChannelAppDetailPanel.js.map +1 -1
  63. package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
  64. package/channel-app/CreateChannelAppForm.js +12 -7
  65. package/channel-app/CreateChannelAppForm.js.map +1 -1
  66. package/channel-app/internal.d.ts +0 -1
  67. package/channel-app/internal.d.ts.map +1 -1
  68. package/channel-app/internal.js +5 -10
  69. package/channel-app/internal.js.map +1 -1
  70. package/composer/ComposerToolbar.js +2 -1
  71. package/composer/ComposerToolbar.js.map +1 -1
  72. package/composer/SessionComposer.d.ts +1 -1
  73. package/composer/SessionComposer.d.ts.map +1 -1
  74. package/composer/SessionComposer.js +120 -13
  75. package/composer/SessionComposer.js.map +1 -1
  76. package/composer/icons.d.ts +0 -1
  77. package/composer/icons.d.ts.map +1 -1
  78. package/composer/icons.js +0 -3
  79. package/composer/icons.js.map +1 -1
  80. package/conversation/ConversationComposer.js +1 -1
  81. package/conversation/ConversationComposer.js.map +1 -1
  82. package/conversation/ConversationListPane.d.ts.map +1 -1
  83. package/conversation/ConversationListPane.js +3 -2
  84. package/conversation/ConversationListPane.js.map +1 -1
  85. package/cursor-accounts/MemberCoverageTable.js +3 -14
  86. package/cursor-accounts/MemberCoverageTable.js.map +1 -1
  87. package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
  88. package/dashboard/DashboardFailedRuns.js +2 -14
  89. package/dashboard/DashboardFailedRuns.js.map +1 -1
  90. package/environment/CreateEnvironmentForm.d.ts.map +1 -1
  91. package/environment/CreateEnvironmentForm.js +4 -8
  92. package/environment/CreateEnvironmentForm.js.map +1 -1
  93. package/environment/EnvVarForm.d.ts.map +1 -1
  94. package/environment/EnvVarForm.js +2 -4
  95. package/environment/EnvVarForm.js.map +1 -1
  96. package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
  97. package/environment/EnvironmentVariableEditor.js +5 -7
  98. package/environment/EnvironmentVariableEditor.js.map +1 -1
  99. package/execution/ArtifactApplyButton.d.ts.map +1 -1
  100. package/execution/ArtifactApplyButton.js +2 -4
  101. package/execution/ArtifactApplyButton.js.map +1 -1
  102. package/execution/ExecutionErrorNotice.d.ts +36 -0
  103. package/execution/ExecutionErrorNotice.d.ts.map +1 -0
  104. package/execution/ExecutionErrorNotice.js +39 -0
  105. package/execution/ExecutionErrorNotice.js.map +1 -0
  106. package/execution/FilePathLink.d.ts.map +1 -1
  107. package/execution/FilePathLink.js +5 -8
  108. package/execution/FilePathLink.js.map +1 -1
  109. package/execution/FileReviewCard.d.ts.map +1 -1
  110. package/execution/FileReviewCard.js +1 -6
  111. package/execution/FileReviewCard.js.map +1 -1
  112. package/execution/FollowUpInput.d.ts.map +1 -1
  113. package/execution/FollowUpInput.js +1 -3
  114. package/execution/FollowUpInput.js.map +1 -1
  115. package/execution/LivenessStatusLine.d.ts +40 -0
  116. package/execution/LivenessStatusLine.d.ts.map +1 -0
  117. package/execution/LivenessStatusLine.js +34 -0
  118. package/execution/LivenessStatusLine.js.map +1 -0
  119. package/execution/MessageEntry.d.ts.map +1 -1
  120. package/execution/MessageEntry.js +31 -3
  121. package/execution/MessageEntry.js.map +1 -1
  122. package/execution/MessageThread.d.ts +25 -0
  123. package/execution/MessageThread.d.ts.map +1 -1
  124. package/execution/MessageThread.js +51 -36
  125. package/execution/MessageThread.js.map +1 -1
  126. package/execution/SetupProgress.d.ts.map +1 -1
  127. package/execution/SetupProgress.js +1 -1
  128. package/execution/SetupProgress.js.map +1 -1
  129. package/execution/SubAgentSection.d.ts.map +1 -1
  130. package/execution/SubAgentSection.js +9 -7
  131. package/execution/SubAgentSection.js.map +1 -1
  132. package/execution/TerminalSession.d.ts +30 -0
  133. package/execution/TerminalSession.d.ts.map +1 -1
  134. package/execution/TerminalSession.js +37 -1
  135. package/execution/TerminalSession.js.map +1 -1
  136. package/execution/ToolCallDetail.d.ts +9 -0
  137. package/execution/ToolCallDetail.d.ts.map +1 -1
  138. package/execution/ToolCallDetail.js +16 -0
  139. package/execution/ToolCallDetail.js.map +1 -1
  140. package/execution/ToolCallItem.d.ts +20 -6
  141. package/execution/ToolCallItem.d.ts.map +1 -1
  142. package/execution/ToolCallItem.js +102 -29
  143. package/execution/ToolCallItem.js.map +1 -1
  144. package/execution/ToolRunGroup.d.ts.map +1 -1
  145. package/execution/ToolRunGroup.js +11 -11
  146. package/execution/ToolRunGroup.js.map +1 -1
  147. package/execution/WriteBackCard.d.ts.map +1 -1
  148. package/execution/WriteBackCard.js +5 -20
  149. package/execution/WriteBackCard.js.map +1 -1
  150. package/execution/index.d.ts +6 -2
  151. package/execution/index.d.ts.map +1 -1
  152. package/execution/index.js +3 -1
  153. package/execution/index.js.map +1 -1
  154. package/execution/tool-categories.d.ts +42 -7
  155. package/execution/tool-categories.d.ts.map +1 -1
  156. package/execution/tool-categories.js +38 -4
  157. package/execution/tool-categories.js.map +1 -1
  158. package/execution/tool-presenter.d.ts +17 -1
  159. package/execution/tool-presenter.d.ts.map +1 -1
  160. package/execution/tool-presenter.js +4 -1
  161. package/execution/tool-presenter.js.map +1 -1
  162. package/execution/useArtifactInspection.d.ts.map +1 -1
  163. package/execution/useArtifactInspection.js +4 -7
  164. package/execution/useArtifactInspection.js.map +1 -1
  165. package/iam-policy/GrantAccessForm.d.ts.map +1 -1
  166. package/iam-policy/GrantAccessForm.js +2 -4
  167. package/iam-policy/GrantAccessForm.js.map +1 -1
  168. package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
  169. package/iam-policy/OrgMembersPanel.js +3 -5
  170. package/iam-policy/OrgMembersPanel.js.map +1 -1
  171. package/iam-policy/RoleSelector.d.ts.map +1 -1
  172. package/iam-policy/RoleSelector.js +7 -1
  173. package/iam-policy/RoleSelector.js.map +1 -1
  174. package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
  175. package/identity-provider/CreateIdentityProviderForm.js +6 -9
  176. package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
  177. package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
  178. package/identity-provider/IdentityProviderDetailPanel.js +17 -26
  179. package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
  180. package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
  181. package/identity-provider/IdentityProviderListPanel.js +2 -4
  182. package/identity-provider/IdentityProviderListPanel.js.map +1 -1
  183. package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
  184. package/identity-provider/IdentityProviderWizard.js +8 -7
  185. package/identity-provider/IdentityProviderWizard.js.map +1 -1
  186. package/identity-provider/SsoLoginPrompt.js +5 -6
  187. package/identity-provider/SsoLoginPrompt.js.map +1 -1
  188. package/index.d.ts +9 -8
  189. package/index.d.ts.map +1 -1
  190. package/index.js +4 -4
  191. package/index.js.map +1 -1
  192. package/internal/DecisionButton.d.ts.map +1 -1
  193. package/internal/DecisionButton.js +1 -6
  194. package/internal/DecisionButton.js.map +1 -1
  195. package/internal/SpinnerIcon.d.ts +22 -0
  196. package/internal/SpinnerIcon.d.ts.map +1 -0
  197. package/internal/SpinnerIcon.js +23 -0
  198. package/internal/SpinnerIcon.js.map +1 -0
  199. package/internal/select-element-text.d.ts +11 -0
  200. package/internal/select-element-text.d.ts.map +1 -0
  201. package/internal/select-element-text.js +19 -0
  202. package/internal/select-element-text.js.map +1 -0
  203. package/internal/thread-card/ThreadCardShell.d.ts +27 -10
  204. package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
  205. package/internal/thread-card/ThreadCardShell.js +11 -5
  206. package/internal/thread-card/ThreadCardShell.js.map +1 -1
  207. package/internal/thread-card/glyphs.d.ts +11 -2
  208. package/internal/thread-card/glyphs.d.ts.map +1 -1
  209. package/internal/thread-card/glyphs.js +9 -3
  210. package/internal/thread-card/glyphs.js.map +1 -1
  211. package/internal/thread-card/index.d.ts +1 -1
  212. package/internal/thread-card/index.d.ts.map +1 -1
  213. package/internal/thread-card/index.js.map +1 -1
  214. package/internal/useCopyFeedback.d.ts +28 -0
  215. package/internal/useCopyFeedback.d.ts.map +1 -0
  216. package/internal/useCopyFeedback.js +40 -0
  217. package/internal/useCopyFeedback.js.map +1 -0
  218. package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
  219. package/invitation/InvitationCreatedAlert.js +12 -19
  220. package/invitation/InvitationCreatedAlert.js.map +1 -1
  221. package/invitation/InvitationManager.d.ts.map +1 -1
  222. package/invitation/InvitationManager.js +14 -21
  223. package/invitation/InvitationManager.js.map +1 -1
  224. package/invitation/InvitationRedemption.d.ts.map +1 -1
  225. package/invitation/InvitationRedemption.js +2 -4
  226. package/invitation/InvitationRedemption.js.map +1 -1
  227. package/library/useExportResource.d.ts.map +1 -1
  228. package/library/useExportResource.js +16 -27
  229. package/library/useExportResource.js.map +1 -1
  230. package/manifest/ApplyManifestDialog.js +1 -1
  231. package/manifest/EditResourceYamlDialog.js +1 -1
  232. package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
  233. package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
  234. package/mcp-server/DefinitionDriftNotice.js +52 -0
  235. package/mcp-server/DefinitionDriftNotice.js.map +1 -0
  236. package/mcp-server/McpServerConnectDialog.js +1 -1
  237. package/mcp-server/McpServerDetailView.d.ts.map +1 -1
  238. package/mcp-server/McpServerDetailView.js +47 -14
  239. package/mcp-server/McpServerDetailView.js.map +1 -1
  240. package/mcp-server/OAuthAppForm.d.ts.map +1 -1
  241. package/mcp-server/OAuthAppForm.js +2 -4
  242. package/mcp-server/OAuthAppForm.js.map +1 -1
  243. package/mcp-server/internal/definitionDrift.d.ts +39 -0
  244. package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
  245. package/mcp-server/internal/definitionDrift.js +122 -0
  246. package/mcp-server/internal/definitionDrift.js.map +1 -0
  247. package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
  248. package/mcp-server/internal/mcpServerToInput.js +3 -0
  249. package/mcp-server/internal/mcpServerToInput.js.map +1 -1
  250. package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
  251. package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
  252. package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
  253. package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
  254. package/mcp-server/steps/IdentityTransportStep.js +5 -4
  255. package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
  256. package/mcp-server/useMcpServerConnect.d.ts +1 -1
  257. package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
  258. package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
  259. package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
  260. package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
  261. package/models/ModelRegistryContext.d.ts +7 -1
  262. package/models/ModelRegistryContext.d.ts.map +1 -1
  263. package/models/ModelRegistryContext.js.map +1 -1
  264. package/models/ModelSelector.js +9 -1
  265. package/models/ModelSelector.js.map +1 -1
  266. package/models/index.d.ts +2 -2
  267. package/models/index.d.ts.map +1 -1
  268. package/models/index.js +1 -1
  269. package/models/index.js.map +1 -1
  270. package/models/registry.d.ts +88 -6
  271. package/models/registry.d.ts.map +1 -1
  272. package/models/registry.js +133 -27
  273. package/models/registry.js.map +1 -1
  274. package/models/useModelRegistry.d.ts +7 -1
  275. package/models/useModelRegistry.d.ts.map +1 -1
  276. package/models/useModelRegistry.js +3 -2
  277. package/models/useModelRegistry.js.map +1 -1
  278. package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
  279. package/oauth-app/CreateOAuthAppForm.js +4 -5
  280. package/oauth-app/CreateOAuthAppForm.js.map +1 -1
  281. package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
  282. package/oauth-app/OAuthAppDetailPanel.js +5 -6
  283. package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
  284. package/organization/CreateOrganizationForm.d.ts.map +1 -1
  285. package/organization/CreateOrganizationForm.js +5 -9
  286. package/organization/CreateOrganizationForm.js.map +1 -1
  287. package/organization/OrgProfilePanel.d.ts.map +1 -1
  288. package/organization/OrgProfilePanel.js +7 -16
  289. package/organization/OrgProfilePanel.js.map +1 -1
  290. package/package.json +4 -4
  291. package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
  292. package/platform-client/CreatePlatformClientForm.js +5 -6
  293. package/platform-client/CreatePlatformClientForm.js.map +1 -1
  294. package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
  295. package/platform-client/PlatformClientDetailPanel.js +6 -7
  296. package/platform-client/PlatformClientDetailPanel.js.map +1 -1
  297. package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
  298. package/platform-client/PlatformClientListPanel.js +2 -4
  299. package/platform-client/PlatformClientListPanel.js.map +1 -1
  300. package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
  301. package/platform-client/PlatformClientSecretAlert.js +18 -25
  302. package/platform-client/PlatformClientSecretAlert.js.map +1 -1
  303. package/provider.d.ts +34 -1
  304. package/provider.d.ts.map +1 -1
  305. package/provider.js +14 -7
  306. package/provider.js.map +1 -1
  307. package/resource-creation/WizardNav.d.ts.map +1 -1
  308. package/resource-creation/WizardNav.js +2 -4
  309. package/resource-creation/WizardNav.js.map +1 -1
  310. package/resource-detail/ConfirmDialog.js +1 -1
  311. package/resource-detail/useCopyResource.d.ts +4 -3
  312. package/resource-detail/useCopyResource.d.ts.map +1 -1
  313. package/resource-detail/useCopyResource.js +10 -19
  314. package/resource-detail/useCopyResource.js.map +1 -1
  315. package/schedule/ScheduleDetailView.d.ts.map +1 -1
  316. package/schedule/ScheduleDetailView.js +2 -4
  317. package/schedule/ScheduleDetailView.js.map +1 -1
  318. package/schedule/ScheduleForm.d.ts.map +1 -1
  319. package/schedule/ScheduleForm.js +6 -7
  320. package/schedule/ScheduleForm.js.map +1 -1
  321. package/session/NewSessionViewer.d.ts +52 -2
  322. package/session/NewSessionViewer.d.ts.map +1 -1
  323. package/session/NewSessionViewer.js +21 -6
  324. package/session/NewSessionViewer.js.map +1 -1
  325. package/session/SessionViewer.d.ts +63 -2
  326. package/session/SessionViewer.d.ts.map +1 -1
  327. package/session/SessionViewer.js +43 -17
  328. package/session/SessionViewer.js.map +1 -1
  329. package/session/audience.d.ts +17 -0
  330. package/session/audience.d.ts.map +1 -1
  331. package/session/index.d.ts +2 -1
  332. package/session/index.d.ts.map +1 -1
  333. package/session/index.js.map +1 -1
  334. package/session/run-config.d.ts +50 -0
  335. package/session/run-config.d.ts.map +1 -0
  336. package/session/run-config.js +15 -0
  337. package/session/run-config.js.map +1 -0
  338. package/session/useNewSessionFlow.d.ts +11 -0
  339. package/session/useNewSessionFlow.d.ts.map +1 -1
  340. package/session/useNewSessionFlow.js +29 -2
  341. package/session/useNewSessionFlow.js.map +1 -1
  342. package/session/useSessionConversation.d.ts +7 -7
  343. package/session/useSessionConversation.d.ts.map +1 -1
  344. package/session/useSessionConversation.js +2 -0
  345. package/session/useSessionConversation.js.map +1 -1
  346. package/session/useSessionPageFlow.d.ts +18 -4
  347. package/session/useSessionPageFlow.d.ts.map +1 -1
  348. package/session/useSessionPageFlow.js +33 -6
  349. package/session/useSessionPageFlow.js.map +1 -1
  350. package/session/useSessionPanel.d.ts +37 -2
  351. package/session/useSessionPanel.d.ts.map +1 -1
  352. package/session/useSessionPanel.js +44 -10
  353. package/session/useSessionPanel.js.map +1 -1
  354. package/settings/ApiKeysSection.d.ts.map +1 -1
  355. package/settings/ApiKeysSection.js +3 -2
  356. package/settings/ApiKeysSection.js.map +1 -1
  357. package/settings/ChannelAppsSection.d.ts.map +1 -1
  358. package/settings/ChannelAppsSection.js +3 -2
  359. package/settings/ChannelAppsSection.js.map +1 -1
  360. package/settings/EnvironmentsSection.js +5 -3
  361. package/settings/EnvironmentsSection.js.map +1 -1
  362. package/settings/IdentityProvidersSection.d.ts.map +1 -1
  363. package/settings/IdentityProvidersSection.js +3 -2
  364. package/settings/IdentityProvidersSection.js.map +1 -1
  365. package/settings/InvitationsSection.d.ts.map +1 -1
  366. package/settings/InvitationsSection.js +3 -1
  367. package/settings/InvitationsSection.js.map +1 -1
  368. package/settings/MembersSection.d.ts.map +1 -1
  369. package/settings/MembersSection.js +3 -1
  370. package/settings/MembersSection.js.map +1 -1
  371. package/settings/OAuthAppsSection.d.ts.map +1 -1
  372. package/settings/OAuthAppsSection.js +3 -2
  373. package/settings/OAuthAppsSection.js.map +1 -1
  374. package/settings/OrgProfileSection.d.ts.map +1 -1
  375. package/settings/OrgProfileSection.js +3 -2
  376. package/settings/OrgProfileSection.js.map +1 -1
  377. package/settings/PlatformClientsSection.d.ts.map +1 -1
  378. package/settings/PlatformClientsSection.js +3 -2
  379. package/settings/PlatformClientsSection.js.map +1 -1
  380. package/settings/UsageSection.d.ts.map +1 -1
  381. package/settings/UsageSection.js +3 -1
  382. package/settings/UsageSection.js.map +1 -1
  383. package/sharing/ShareAgentDialog.d.ts.map +1 -1
  384. package/sharing/ShareAgentDialog.js +18 -7
  385. package/sharing/ShareAgentDialog.js.map +1 -1
  386. package/sidebar/chrome.d.ts +3 -4
  387. package/sidebar/chrome.d.ts.map +1 -1
  388. package/sidebar/chrome.js +5 -4
  389. package/sidebar/chrome.js.map +1 -1
  390. package/skill/SkillDiffDialog.js +1 -1
  391. package/src/access/ManageAccessDialog.tsx +10 -4
  392. package/src/activity/format-relative-time.ts +11 -9
  393. package/src/agent/steps/CapabilitiesStep.tsx +6 -3
  394. package/src/agent/steps/IdentityStep.tsx +19 -12
  395. package/src/agent-instance/CreateAgentInstanceDialog.tsx +17 -8
  396. package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
  397. package/src/api-key/ApiKeyListPanel.tsx +3 -39
  398. package/src/api-key/CreateApiKeyForm.tsx +12 -26
  399. package/src/approval-defaults-context.ts +56 -0
  400. package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
  401. package/src/attachment/index.ts +12 -0
  402. package/src/attachment/vision-preflight.ts +236 -0
  403. package/src/billing/AutoRechargeCard.tsx +5 -4
  404. package/src/billing/BillingSection.tsx +4 -3
  405. package/src/channel/ChannelConversationsDialog.tsx +8 -4
  406. package/src/channel/ChannelCredentialsDialog.tsx +14 -4
  407. package/src/channel/ChannelTemplatesDialog.tsx +8 -4
  408. package/src/channel/ConnectSlackDialog.tsx +14 -4
  409. package/src/channel/ConnectWhatsAppDialog.tsx +14 -4
  410. package/src/channel/useChannelSessions.ts +3 -0
  411. package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
  412. package/src/channel-app/CreateChannelAppForm.tsx +17 -12
  413. package/src/channel-app/internal.tsx +5 -25
  414. package/src/composer/ComposerToolbar.tsx +1 -1
  415. package/src/composer/SessionComposer.tsx +160 -13
  416. package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
  417. package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
  418. package/src/composer/icons.tsx +0 -18
  419. package/src/conversation/ConversationComposer.tsx +1 -1
  420. package/src/conversation/ConversationListPane.tsx +4 -3
  421. package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
  422. package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
  423. package/src/dashboard/DashboardFailedRuns.tsx +2 -12
  424. package/src/environment/CreateEnvironmentForm.tsx +8 -27
  425. package/src/environment/EnvVarForm.tsx +2 -18
  426. package/src/environment/EnvironmentVariableEditor.tsx +5 -21
  427. package/src/execution/ArtifactApplyButton.tsx +2 -17
  428. package/src/execution/ExecutionErrorNotice.tsx +99 -0
  429. package/src/execution/FilePathLink.tsx +5 -9
  430. package/src/execution/FileReviewCard.tsx +1 -20
  431. package/src/execution/FollowUpInput.tsx +1 -16
  432. package/src/execution/LivenessStatusLine.tsx +59 -0
  433. package/src/execution/MessageEntry.tsx +136 -25
  434. package/src/execution/MessageThread.tsx +84 -83
  435. package/src/execution/SetupProgress.tsx +5 -1
  436. package/src/execution/SubAgentSection.tsx +9 -20
  437. package/src/execution/TerminalSession.tsx +97 -10
  438. package/src/execution/ToolCallDetail.tsx +19 -0
  439. package/src/execution/ToolCallItem.tsx +157 -37
  440. package/src/execution/ToolRunGroup.tsx +30 -32
  441. package/src/execution/WriteBackCard.tsx +5 -24
  442. package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
  443. package/src/execution/__tests__/MessageThread.test.tsx +97 -0
  444. package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
  445. package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
  446. package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
  447. package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
  448. package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
  449. package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
  450. package/src/execution/index.ts +8 -2
  451. package/src/execution/tool-categories.ts +72 -8
  452. package/src/execution/tool-presenter.ts +22 -1
  453. package/src/execution/useArtifactInspection.ts +4 -8
  454. package/src/iam-policy/GrantAccessForm.tsx +2 -18
  455. package/src/iam-policy/OrgMembersPanel.tsx +3 -19
  456. package/src/iam-policy/RoleSelector.tsx +8 -1
  457. package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
  458. package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
  459. package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
  460. package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
  461. package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
  462. package/src/index.ts +23 -1
  463. package/src/internal/DecisionButton.tsx +1 -20
  464. package/src/internal/SpinnerIcon.tsx +42 -0
  465. package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
  466. package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
  467. package/src/internal/select-element-text.ts +17 -0
  468. package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
  469. package/src/internal/thread-card/glyphs.tsx +24 -3
  470. package/src/internal/thread-card/index.ts +1 -0
  471. package/src/internal/useCopyFeedback.ts +61 -0
  472. package/src/invitation/InvitationCreatedAlert.tsx +10 -18
  473. package/src/invitation/InvitationManager.tsx +23 -34
  474. package/src/invitation/InvitationRedemption.tsx +2 -18
  475. package/src/library/useExportResource.ts +15 -29
  476. package/src/manifest/ApplyManifestDialog.tsx +1 -1
  477. package/src/manifest/EditResourceYamlDialog.tsx +1 -1
  478. package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
  479. package/src/mcp-server/McpServerConnectDialog.tsx +1 -1
  480. package/src/mcp-server/McpServerDetailView.tsx +58 -26
  481. package/src/mcp-server/OAuthAppForm.tsx +2 -18
  482. package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
  483. package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
  484. package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
  485. package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
  486. package/src/mcp-server/internal/definitionDrift.ts +158 -0
  487. package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
  488. package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
  489. package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
  490. package/src/mcp-server/useMcpServerConnect.ts +1 -1
  491. package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
  492. package/src/models/ModelRegistryContext.ts +7 -1
  493. package/src/models/ModelSelector.tsx +37 -0
  494. package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
  495. package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
  496. package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
  497. package/src/models/index.ts +2 -2
  498. package/src/models/registry.ts +196 -29
  499. package/src/models/useModelRegistry.ts +10 -2
  500. package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
  501. package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
  502. package/src/organization/CreateOrganizationForm.tsx +10 -29
  503. package/src/organization/OrgProfilePanel.tsx +13 -44
  504. package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
  505. package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
  506. package/src/platform-client/PlatformClientListPanel.tsx +2 -18
  507. package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
  508. package/src/provider.tsx +76 -33
  509. package/src/resource-creation/WizardNav.tsx +2 -18
  510. package/src/resource-detail/ConfirmDialog.tsx +1 -1
  511. package/src/resource-detail/useCopyResource.ts +17 -23
  512. package/src/schedule/ScheduleDetailView.tsx +2 -18
  513. package/src/schedule/ScheduleForm.tsx +19 -34
  514. package/src/session/NewSessionViewer.tsx +85 -7
  515. package/src/session/SessionViewer.tsx +120 -17
  516. package/src/session/__tests__/audienceWiring.test.tsx +76 -0
  517. package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
  518. package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
  519. package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
  520. package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
  521. package/src/session/__tests__/useSessionPanel.test.ts +114 -0
  522. package/src/session/audience.ts +18 -0
  523. package/src/session/index.ts +2 -1
  524. package/src/session/run-config.ts +59 -0
  525. package/src/session/useNewSessionFlow.ts +39 -2
  526. package/src/session/useSessionConversation.ts +10 -8
  527. package/src/session/useSessionPageFlow.ts +51 -10
  528. package/src/session/useSessionPanel.ts +91 -10
  529. package/src/settings/ApiKeysSection.tsx +4 -3
  530. package/src/settings/ChannelAppsSection.tsx +4 -3
  531. package/src/settings/EnvironmentsSection.tsx +8 -5
  532. package/src/settings/IdentityProvidersSection.tsx +4 -3
  533. package/src/settings/InvitationsSection.tsx +4 -2
  534. package/src/settings/MembersSection.tsx +4 -2
  535. package/src/settings/OAuthAppsSection.tsx +4 -3
  536. package/src/settings/OrgProfileSection.tsx +4 -3
  537. package/src/settings/PlatformClientsSection.tsx +4 -3
  538. package/src/settings/UsageSection.tsx +4 -2
  539. package/src/sharing/ShareAgentDialog.tsx +28 -10
  540. package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
  541. package/src/sidebar/chrome.tsx +6 -6
  542. package/src/skill/SkillDiffDialog.tsx +1 -1
  543. package/src/styles.css +43 -0
  544. package/src/version-history/VersionTimelineEntry.tsx +1 -21
  545. package/src/workflow/FailedRunsWidget.tsx +2 -9
  546. package/src/workflow/PendingApprovalsWidget.tsx +2 -9
  547. package/src/workflow/ViewYamlDialog.tsx +7 -22
  548. package/src/workflow/WorkflowArchitectDialog.tsx +8 -27
  549. package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
  550. package/src/workflow/WorkflowCanvasEditor.tsx +2 -0
  551. package/src/workflow/WorkflowCanvasInner.tsx +14 -1
  552. package/src/workflow/WorkflowDiffGraph.tsx +7 -1
  553. package/src/workflow/WorkflowExecutionViewer.tsx +88 -11
  554. package/src/workflow/WorkflowExplainDialog.tsx +8 -24
  555. package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
  556. package/src/workflow/WorkflowRefinePanel.tsx +2 -18
  557. package/src/workflow/WorkflowRepairCard.tsx +2 -18
  558. package/src/workflow/WorkflowRunDialog.tsx +3 -23
  559. package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
  560. package/src/workflow/WorkflowVersionBadge.tsx +4 -13
  561. package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
  562. package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
  563. package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
  564. package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
  565. package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
  566. package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +7 -11
  567. package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
  568. package/src/workflow/index.ts +1 -0
  569. package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +1 -1
  570. package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
  571. package/src/workflow/picker/BranchAddPopover.tsx +4 -3
  572. package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
  573. package/src/workflow/useApprovalBoundary.ts +1 -1
  574. package/src/workflow/useWorkflowCanvas.ts +114 -11
  575. package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
  576. package/styles.css +1 -1
  577. package/version-history/VersionTimelineEntry.d.ts.map +1 -1
  578. package/version-history/VersionTimelineEntry.js +1 -23
  579. package/version-history/VersionTimelineEntry.js.map +1 -1
  580. package/workflow/CanvasTransitionEdge.d.ts +1 -1
  581. package/workflow/FailedRunsWidget.d.ts.map +1 -1
  582. package/workflow/FailedRunsWidget.js +2 -11
  583. package/workflow/FailedRunsWidget.js.map +1 -1
  584. package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
  585. package/workflow/PendingApprovalsWidget.js +2 -11
  586. package/workflow/PendingApprovalsWidget.js.map +1 -1
  587. package/workflow/ViewYamlDialog.d.ts.map +1 -1
  588. package/workflow/ViewYamlDialog.js +7 -23
  589. package/workflow/ViewYamlDialog.js.map +1 -1
  590. package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
  591. package/workflow/WorkflowArchitectDialog.js +7 -11
  592. package/workflow/WorkflowArchitectDialog.js.map +1 -1
  593. package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
  594. package/workflow/WorkflowArtifactDocument.js +5 -8
  595. package/workflow/WorkflowArtifactDocument.js.map +1 -1
  596. package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
  597. package/workflow/WorkflowCanvasEditor.js +1 -1
  598. package/workflow/WorkflowCanvasEditor.js.map +1 -1
  599. package/workflow/WorkflowCanvasInner.d.ts +4 -2
  600. package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
  601. package/workflow/WorkflowCanvasInner.js +7 -3
  602. package/workflow/WorkflowCanvasInner.js.map +1 -1
  603. package/workflow/WorkflowDiffGraph.js +6 -2
  604. package/workflow/WorkflowDiffGraph.js.map +1 -1
  605. package/workflow/WorkflowExecutionViewer.d.ts +51 -0
  606. package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
  607. package/workflow/WorkflowExecutionViewer.js +23 -6
  608. package/workflow/WorkflowExecutionViewer.js.map +1 -1
  609. package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
  610. package/workflow/WorkflowExplainDialog.js +6 -8
  611. package/workflow/WorkflowExplainDialog.js.map +1 -1
  612. package/workflow/WorkflowOverviewGraph.js +8 -2
  613. package/workflow/WorkflowOverviewGraph.js.map +1 -1
  614. package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
  615. package/workflow/WorkflowRefinePanel.js +2 -4
  616. package/workflow/WorkflowRefinePanel.js.map +1 -1
  617. package/workflow/WorkflowRepairCard.d.ts.map +1 -1
  618. package/workflow/WorkflowRepairCard.js +2 -4
  619. package/workflow/WorkflowRepairCard.js.map +1 -1
  620. package/workflow/WorkflowRunDialog.d.ts.map +1 -1
  621. package/workflow/WorkflowRunDialog.js +2 -7
  622. package/workflow/WorkflowRunDialog.js.map +1 -1
  623. package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
  624. package/workflow/WorkflowTaskApprovalSummary.js +2 -4
  625. package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
  626. package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
  627. package/workflow/WorkflowVersionBadge.js +4 -13
  628. package/workflow/WorkflowVersionBadge.js.map +1 -1
  629. package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
  630. package/workflow/WorkflowVersionTimeline.js +1 -26
  631. package/workflow/WorkflowVersionTimeline.js.map +1 -1
  632. package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
  633. package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -15
  634. package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
  635. package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
  636. package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
  637. package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
  638. package/workflow/index.d.ts +1 -1
  639. package/workflow/index.d.ts.map +1 -1
  640. package/workflow/index.js.map +1 -1
  641. package/workflow/instance/CreateWorkflowInstanceDialog.js +1 -1
  642. package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
  643. package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
  644. package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
  645. package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
  646. package/workflow/picker/BranchAddPopover.js +3 -2
  647. package/workflow/picker/BranchAddPopover.js.map +1 -1
  648. package/workflow/templates/WorkflowTemplatePreview.js +1 -1
  649. package/workflow/useApprovalBoundary.d.ts +1 -1
  650. package/workflow/useApprovalBoundary.js +1 -1
  651. package/workflow/useWorkflowCanvas.d.ts +5 -1
  652. package/workflow/useWorkflowCanvas.d.ts.map +1 -1
  653. package/workflow/useWorkflowCanvas.js +99 -13
  654. package/workflow/useWorkflowCanvas.js.map +1 -1
  655. package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
  656. package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
  657. package/workflow/useWorkflowExecutionPanel.js +46 -13
  658. package/workflow/useWorkflowExecutionPanel.js.map +1 -1
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useRef, useState, type FormEvent } from "react";
3
+ import { type FormEvent, useCallback, useId, useRef, useState } from "react";
4
4
  import { create as createMessage } from "@bufbuild/protobuf";
5
5
  import { cn } from "@stigmer/theme";
6
6
  import { getUserMessage } from "@stigmer/sdk";
@@ -9,6 +9,7 @@ import { ApiResourceMetadataSchema } from "@stigmer/protos/ai/stigmer/commons/ap
9
9
  import { useCreateOrganization } from "./useCreateOrganization.js";
10
10
  import { generateSlug } from "../internal/slug.js";
11
11
  import { validateMessage, getFieldError } from "../internal/validate.js";
12
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
12
13
 
13
14
  // ---------------------------------------------------------------------------
14
15
  // Public API
@@ -47,6 +48,7 @@ export function CreateOrganizationForm({
47
48
  onCancel,
48
49
  className,
49
50
  }: CreateOrganizationFormProps) {
51
+ const baseId = useId();
50
52
  const { create, isCreating, error, clearError } = useCreateOrganization();
51
53
 
52
54
  const [name, setName] = useState("");
@@ -120,13 +122,13 @@ export function CreateOrganizationForm({
120
122
  {/* ---- Name ---- */}
121
123
  <div className="stg:space-y-1">
122
124
  <label
123
- htmlFor="stgm-new-org-name"
125
+ htmlFor={`${baseId}-name`}
124
126
  className="stg:text-xs stg:font-medium stg:text-foreground"
125
127
  >
126
128
  Name
127
129
  </label>
128
130
  <input
129
- id="stgm-new-org-name"
131
+ id={`${baseId}-name`}
130
132
  type="text"
131
133
  value={name}
132
134
  onChange={(e) => handleNameChange(e.target.value)}
@@ -157,13 +159,13 @@ export function CreateOrganizationForm({
157
159
  {/* ---- Slug ---- */}
158
160
  <div className="stg:space-y-1">
159
161
  <label
160
- htmlFor="stgm-new-org-slug"
162
+ htmlFor={`${baseId}-slug`}
161
163
  className="stg:text-xs stg:font-medium stg:text-foreground"
162
164
  >
163
165
  Slug
164
166
  </label>
165
167
  <input
166
- id="stgm-new-org-slug"
168
+ id={`${baseId}-slug`}
167
169
  type="text"
168
170
  value={slug}
169
171
  onChange={(e) => handleSlugChange(e.target.value)}
@@ -195,14 +197,14 @@ export function CreateOrganizationForm({
195
197
  {/* ---- Description ---- */}
196
198
  <div className="stg:space-y-1">
197
199
  <label
198
- htmlFor="stgm-new-org-desc"
200
+ htmlFor={`${baseId}-desc`}
199
201
  className="stg:text-xs stg:font-medium stg:text-muted-foreground"
200
202
  >
201
203
  Description{" "}
202
204
  <span className="stg:text-muted-foreground-subtle">(optional)</span>
203
205
  </label>
204
206
  <input
205
- id="stgm-new-org-desc"
207
+ id={`${baseId}-desc`}
206
208
  type="text"
207
209
  value={description}
208
210
  onChange={(e) => setDescription(e.target.value)}
@@ -234,7 +236,7 @@ export function CreateOrganizationForm({
234
236
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
235
237
  )}
236
238
  >
237
- {isCreating && <SpinnerIcon />}
239
+ {isCreating && <SpinnerIcon size={12} />}
238
240
  Create organization
239
241
  </button>
240
242
 
@@ -257,24 +259,3 @@ export function CreateOrganizationForm({
257
259
  );
258
260
  }
259
261
 
260
- // ---------------------------------------------------------------------------
261
- // Icons
262
- // ---------------------------------------------------------------------------
263
-
264
- function SpinnerIcon() {
265
- return (
266
- <svg
267
- width="12"
268
- height="12"
269
- viewBox="0 0 16 16"
270
- fill="none"
271
- stroke="currentColor"
272
- strokeWidth="2"
273
- strokeLinecap="round"
274
- className="stg:animate-spin"
275
- aria-hidden="true"
276
- >
277
- <path d="M8 2a6 6 0 1 0 6 6" />
278
- </svg>
279
- );
280
- }
@@ -1,12 +1,6 @@
1
1
  "use client";
2
2
 
3
- import {
4
- useCallback,
5
- useEffect,
6
- useMemo,
7
- useState,
8
- type FormEvent,
9
- } from "react";
3
+ import { type FormEvent, useCallback, useEffect, useId, useMemo, useState } from "react";
10
4
  import { cn } from "@stigmer/theme";
11
5
  import { getUserMessage } from "@stigmer/sdk";
12
6
  import type { Organization } from "@stigmer/protos/ai/stigmer/tenancy/organization/v1/api_pb";
@@ -14,6 +8,8 @@ import { useOrganization } from "./useOrganization.js";
14
8
  import { useUpdateOrganization } from "./useUpdateOrganization.js";
15
9
  import { useIdentityProviderList } from "../identity-provider/useIdentityProviderList.js";
16
10
  import { useResourceAvailable, ApiResourceKind } from "../deployment-mode.js";
11
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
12
+ import { useCopyFeedback } from "../internal/useCopyFeedback.js";
17
13
 
18
14
  // ---------------------------------------------------------------------------
19
15
  // Constants
@@ -60,6 +56,7 @@ export function OrgProfilePanel({
60
56
  onUpdated,
61
57
  className,
62
58
  }: OrgProfilePanelProps) {
59
+ const baseId = useId();
63
60
  const {
64
61
  organization,
65
62
  isLoading: isFetching,
@@ -223,13 +220,13 @@ export function OrgProfilePanel({
223
220
  {/* Name */}
224
221
  <div className="stg:space-y-1">
225
222
  <label
226
- htmlFor="stgm-org-profile-name"
223
+ htmlFor={`${baseId}-name`}
227
224
  className="stg:text-xs stg:font-medium stg:text-foreground"
228
225
  >
229
226
  Name
230
227
  </label>
231
228
  <input
232
- id="stgm-org-profile-name"
229
+ id={`${baseId}-name`}
233
230
  type="text"
234
231
  value={name}
235
232
  onChange={(e) => setName(e.target.value)}
@@ -250,13 +247,13 @@ export function OrgProfilePanel({
250
247
  {/* Description */}
251
248
  <div className="stg:space-y-1">
252
249
  <label
253
- htmlFor="stgm-org-profile-desc"
250
+ htmlFor={`${baseId}-desc`}
254
251
  className="stg:text-xs stg:font-medium stg:text-foreground"
255
252
  >
256
253
  Description
257
254
  </label>
258
255
  <textarea
259
- id="stgm-org-profile-desc"
256
+ id={`${baseId}-desc`}
260
257
  value={description}
261
258
  onChange={(e) => setDescription(e.target.value)}
262
259
  maxLength={DESCRIPTION_MAX_LEN}
@@ -278,13 +275,13 @@ export function OrgProfilePanel({
278
275
  {/* Logo URL */}
279
276
  <div className="stg:space-y-1">
280
277
  <label
281
- htmlFor="stgm-org-profile-logo"
278
+ htmlFor={`${baseId}-logo`}
282
279
  className="stg:text-xs stg:font-medium stg:text-foreground"
283
280
  >
284
281
  Logo URL
285
282
  </label>
286
283
  <input
287
- id="stgm-org-profile-logo"
284
+ id={`${baseId}-logo`}
288
285
  type="url"
289
286
  value={logoUrl}
290
287
  onChange={(e) => setLogoUrl(e.target.value)}
@@ -323,7 +320,7 @@ export function OrgProfilePanel({
323
320
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
324
321
  )}
325
322
  >
326
- {isUpdating && <SpinnerIcon />}
323
+ {isUpdating && <SpinnerIcon size={12} />}
327
324
  Save changes
328
325
  </button>
329
326
 
@@ -453,14 +450,7 @@ function ReadOnlyField({
453
450
  value: string;
454
451
  mono?: boolean;
455
452
  }) {
456
- const [copied, setCopied] = useState(false);
457
-
458
- const handleCopy = useCallback(() => {
459
- navigator.clipboard.writeText(value).then(() => {
460
- setCopied(true);
461
- setTimeout(() => setCopied(false), 1500);
462
- });
463
- }, [value]);
453
+ const { copy, copied } = useCopyFeedback();
464
454
 
465
455
  if (!value) return null;
466
456
 
@@ -480,7 +470,7 @@ function ReadOnlyField({
480
470
  </span>
481
471
  <button
482
472
  type="button"
483
- onClick={handleCopy}
473
+ onClick={() => void copy(value)}
484
474
  className={cn(
485
475
  "stg:rounded stg:px-1.5 stg:py-0.5 stg:text-[0.6rem]",
486
476
  "stg:text-muted-foreground stg:hover:text-foreground stg:hover:bg-accent-hover",
@@ -525,24 +515,3 @@ function LogoPreview({ url }: { url: string }) {
525
515
  );
526
516
  }
527
517
 
528
- // ---------------------------------------------------------------------------
529
- // SpinnerIcon
530
- // ---------------------------------------------------------------------------
531
-
532
- function SpinnerIcon() {
533
- return (
534
- <svg
535
- width="12"
536
- height="12"
537
- viewBox="0 0 16 16"
538
- fill="none"
539
- stroke="currentColor"
540
- strokeWidth="2"
541
- strokeLinecap="round"
542
- className="stg:animate-spin"
543
- aria-hidden="true"
544
- >
545
- <path d="M8 2a6 6 0 1 0 6 6" />
546
- </svg>
547
- );
548
- }
@@ -1,16 +1,12 @@
1
1
  "use client";
2
2
 
3
- import {
4
- useCallback,
5
- useState,
6
- type FormEvent,
7
- type KeyboardEvent,
8
- } from "react";
3
+ import { type FormEvent, type KeyboardEvent, useCallback, useId, useState } from "react";
9
4
  import { cn } from "@stigmer/theme";
10
5
  import { getUserMessage } from "@stigmer/sdk";
11
6
  import { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
12
7
  import type { PlatformClientCreateResponse } from "@stigmer/protos/ai/stigmer/iam/platformclient/v1/io_pb";
13
8
  import { useCreatePlatformClient } from "./useCreatePlatformClient.js";
9
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
14
10
 
15
11
  /** Props for {@link CreatePlatformClientForm}. */
16
12
  export interface CreatePlatformClientFormProps {
@@ -58,6 +54,7 @@ export function CreatePlatformClientForm({
58
54
  onCancel,
59
55
  className,
60
56
  }: CreatePlatformClientFormProps) {
57
+ const baseId = useId();
61
58
  const { create, isCreating, error, clearError } =
62
59
  useCreatePlatformClient();
63
60
 
@@ -160,7 +157,7 @@ export function CreatePlatformClientForm({
160
157
  return (
161
158
  <form onSubmit={handleSubmit} className={cn("stg:space-y-3", className)}>
162
159
  <FormField
163
- id="stgm-pc-name"
160
+ id={`${baseId}-name`}
164
161
  label="Name"
165
162
  value={name}
166
163
  onChange={setName}
@@ -183,13 +180,13 @@ export function CreatePlatformClientForm({
183
180
  {!neverExpires && (
184
181
  <div className="stg:space-y-1">
185
182
  <label
186
- htmlFor="stgm-pc-expires-at"
183
+ htmlFor={`${baseId}-expires-at`}
187
184
  className="stg:text-xs stg:font-medium stg:text-foreground"
188
185
  >
189
186
  Expires at
190
187
  </label>
191
188
  <input
192
- id="stgm-pc-expires-at"
189
+ id={`${baseId}-expires-at`}
193
190
  type="datetime-local"
194
191
  value={expiresAt}
195
192
  onChange={(e) => setExpiresAt(e.target.value)}
@@ -234,13 +231,13 @@ export function CreatePlatformClientForm({
234
231
  {autoGrant && (
235
232
  <div className="stg:space-y-1">
236
233
  <label
237
- htmlFor="stgm-pc-grant-role"
234
+ htmlFor={`${baseId}-grant-role`}
238
235
  className="stg:text-xs stg:font-medium stg:text-foreground"
239
236
  >
240
237
  Auto-grant role
241
238
  </label>
242
239
  <select
243
- id="stgm-pc-grant-role"
240
+ id={`${baseId}-grant-role`}
244
241
  value={String(autoGrantRole)}
245
242
  onChange={(e) =>
246
243
  setAutoGrantRole(Number(e.target.value) as IamRole)
@@ -348,7 +345,7 @@ export function CreatePlatformClientForm({
348
345
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
349
346
  )}
350
347
  >
351
- {isCreating && <SpinnerIcon />}
348
+ {isCreating && <SpinnerIcon size={12} />}
352
349
  Create platform client
353
350
  </button>
354
351
 
@@ -500,20 +497,3 @@ function XIcon() {
500
497
  );
501
498
  }
502
499
 
503
- function SpinnerIcon() {
504
- return (
505
- <svg
506
- width="12"
507
- height="12"
508
- viewBox="0 0 16 16"
509
- fill="none"
510
- stroke="currentColor"
511
- strokeWidth="2"
512
- strokeLinecap="round"
513
- className="stg:animate-spin"
514
- aria-hidden="true"
515
- >
516
- <path d="M8 2a6 6 0 1 0 6 6" />
517
- </svg>
518
- );
519
- }
@@ -1,11 +1,6 @@
1
1
  "use client";
2
2
 
3
- import {
4
- useCallback,
5
- useState,
6
- type FormEvent,
7
- type KeyboardEvent,
8
- } from "react";
3
+ import { type FormEvent, type KeyboardEvent, useCallback, useId, useState } from "react";
9
4
  import { cn } from "@stigmer/theme";
10
5
  import { getUserMessage } from "@stigmer/sdk";
11
6
  import { IamRole } from "@stigmer/protos/ai/stigmer/iam/v1/enum_pb";
@@ -15,6 +10,7 @@ import type { PlatformClientCreateResponse } from "@stigmer/protos/ai/stigmer/ia
15
10
  import { useUpdatePlatformClient } from "./useUpdatePlatformClient.js";
16
11
  import { useRotatePlatformClientSecret } from "./useRotatePlatformClientSecret.js";
17
12
  import { useDeletePlatformClient } from "./useDeletePlatformClient.js";
13
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
18
14
 
19
15
  /** Props for {@link PlatformClientDetailPanel}. */
20
16
  export interface PlatformClientDetailPanelProps {
@@ -74,6 +70,7 @@ export function PlatformClientDetailPanel({
74
70
  onBack,
75
71
  className,
76
72
  }: PlatformClientDetailPanelProps) {
73
+ const baseId = useId();
77
74
  const spec = platformClient.spec;
78
75
  const meta = platformClient.metadata;
79
76
 
@@ -318,13 +315,13 @@ export function PlatformClientDetailPanel({
318
315
  {!neverExpires && (
319
316
  <div className="stg:space-y-1">
320
317
  <label
321
- htmlFor="stgm-pc-edit-expires-at"
318
+ htmlFor={`${baseId}-expires-at`}
322
319
  className="stg:text-xs stg:font-medium stg:text-foreground"
323
320
  >
324
321
  Expires at
325
322
  </label>
326
323
  <input
327
- id="stgm-pc-edit-expires-at"
324
+ id={`${baseId}-expires-at`}
328
325
  type="datetime-local"
329
326
  value={expiresAt}
330
327
  onChange={(e) => setExpiresAt(e.target.value)}
@@ -365,13 +362,13 @@ export function PlatformClientDetailPanel({
365
362
  {autoGrant && (
366
363
  <div className="stg:space-y-1">
367
364
  <label
368
- htmlFor="stgm-pc-edit-grant-role"
365
+ htmlFor={`${baseId}-grant-role`}
369
366
  className="stg:text-xs stg:font-medium stg:text-foreground"
370
367
  >
371
368
  Auto-grant role
372
369
  </label>
373
370
  <select
374
- id="stgm-pc-edit-grant-role"
371
+ id={`${baseId}-grant-role`}
375
372
  value={String(autoGrantRole)}
376
373
  onChange={(e) =>
377
374
  setAutoGrantRole(
@@ -478,7 +475,7 @@ export function PlatformClientDetailPanel({
478
475
  "stg:disabled:pointer-events-none stg:disabled:opacity-40",
479
476
  )}
480
477
  >
481
- {isUpdating && <SpinnerIcon />}
478
+ {isUpdating && <SpinnerIcon size={12} />}
482
479
  Save changes
483
480
  </button>
484
481
  <button
@@ -520,7 +517,7 @@ export function PlatformClientDetailPanel({
520
517
  "stg:disabled:pointer-events-none stg:disabled:opacity-50",
521
518
  )}
522
519
  >
523
- {isRotating && <SpinnerIcon />}
520
+ {isRotating && <SpinnerIcon size={12} />}
524
521
  Rotate
525
522
  </button>
526
523
  <button
@@ -587,7 +584,7 @@ export function PlatformClientDetailPanel({
587
584
  "stg:disabled:pointer-events-none stg:disabled:opacity-50",
588
585
  )}
589
586
  >
590
- {isDeleting && <SpinnerIcon />}
587
+ {isDeleting && <SpinnerIcon size={12} />}
591
588
  Delete
592
589
  </button>
593
590
  <button
@@ -879,20 +876,3 @@ function ArrowLeftIcon() {
879
876
  );
880
877
  }
881
878
 
882
- function SpinnerIcon() {
883
- return (
884
- <svg
885
- width="12"
886
- height="12"
887
- viewBox="0 0 16 16"
888
- fill="none"
889
- stroke="currentColor"
890
- strokeWidth="2"
891
- strokeLinecap="round"
892
- className="stg:animate-spin"
893
- aria-hidden="true"
894
- >
895
- <path d="M8 2a6 6 0 1 0 6 6" />
896
- </svg>
897
- );
898
- }
@@ -8,6 +8,7 @@ import type { PlatformClient } from "@stigmer/protos/ai/stigmer/iam/platformclie
8
8
  import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
9
9
  import { usePlatformClientList } from "./usePlatformClientList.js";
10
10
  import { useDeletePlatformClient } from "./useDeletePlatformClient.js";
11
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
11
12
 
12
13
  /** Props for {@link PlatformClientListPanel}. */
13
14
  export interface PlatformClientListPanelProps {
@@ -200,7 +201,7 @@ function PlatformClientRow({
200
201
  "stg:disabled:pointer-events-none stg:disabled:opacity-50",
201
202
  )}
202
203
  >
203
- {isDeleting && <SpinnerIcon />}
204
+ {isDeleting && <SpinnerIcon size={12} />}
204
205
  Delete
205
206
  </button>
206
207
  <button
@@ -411,20 +412,3 @@ function TrashIcon() {
411
412
  );
412
413
  }
413
414
 
414
- function SpinnerIcon() {
415
- return (
416
- <svg
417
- width="12"
418
- height="12"
419
- viewBox="0 0 16 16"
420
- fill="none"
421
- stroke="currentColor"
422
- strokeWidth="2"
423
- strokeLinecap="round"
424
- className="stg:animate-spin"
425
- aria-hidden="true"
426
- >
427
- <path d="M8 2a6 6 0 1 0 6 6" />
428
- </svg>
429
- );
430
- }
@@ -1,7 +1,9 @@
1
1
  "use client";
2
2
 
3
- import { useCallback, useState } from "react";
3
+ import { useCallback, useRef } from "react";
4
4
  import { cn } from "@stigmer/theme";
5
+ import { selectElementText } from "../internal/select-element-text.js";
6
+ import { useCopyFeedback } from "../internal/useCopyFeedback.js";
5
7
 
6
8
  /** Props for {@link PlatformClientSecretAlert}. */
7
9
  export interface PlatformClientSecretAlertProps {
@@ -17,8 +19,6 @@ export interface PlatformClientSecretAlertProps {
17
19
  readonly className?: string;
18
20
  }
19
21
 
20
- const COPIED_FEEDBACK_MS = 2000;
21
-
22
22
  /**
23
23
  * One-time reveal component displayed after a platform client is
24
24
  * created or its secret is rotated.
@@ -50,34 +50,6 @@ export function PlatformClientSecretAlert({
50
50
  onDismiss,
51
51
  className,
52
52
  }: PlatformClientSecretAlertProps) {
53
- const [copiedField, setCopiedField] = useState<
54
- "id" | "secret" | null
55
- >(null);
56
-
57
- const handleCopy = useCallback(
58
- async (value: string, field: "id" | "secret") => {
59
- try {
60
- await navigator.clipboard.writeText(value);
61
- setCopiedField(field);
62
- setTimeout(() => setCopiedField(null), COPIED_FEEDBACK_MS);
63
- } catch {
64
- const el = document.getElementById(
65
- field === "secret"
66
- ? "stgm-pc-secret-reveal"
67
- : "stgm-pc-client-id-reveal",
68
- );
69
- if (el) {
70
- const selection = window.getSelection();
71
- const range = document.createRange();
72
- range.selectNodeContents(el);
73
- selection?.removeAllRanges();
74
- selection?.addRange(range);
75
- }
76
- }
77
- },
78
- [],
79
- );
80
-
81
53
  const title =
82
54
  context === "created"
83
55
  ? "Platform client created"
@@ -114,30 +86,14 @@ export function PlatformClientSecretAlert({
114
86
 
115
87
  <div className="stg:space-y-2">
116
88
  <CopyableField
117
- id="stgm-pc-client-id-reveal"
118
89
  label="Client ID"
119
90
  value={clientId}
120
- copied={copiedField === "id"}
121
- onCopy={() => handleCopy(clientId, "id")}
122
91
  />
123
92
  <CopyableField
124
- id="stgm-pc-secret-reveal"
125
93
  label="Client secret"
126
94
  value={clientSecret}
127
- copied={copiedField === "secret"}
128
- onCopy={() => handleCopy(clientSecret, "secret")}
129
95
  />
130
96
  </div>
131
-
132
- <div
133
- role="status"
134
- aria-live="polite"
135
- aria-atomic="true"
136
- className="stg:sr-only"
137
- >
138
- {copiedField === "id" && "Client ID copied to clipboard"}
139
- {copiedField === "secret" && "Client secret copied to clipboard"}
140
- </div>
141
97
  </div>
142
98
  );
143
99
  }
@@ -147,18 +103,24 @@ export function PlatformClientSecretAlert({
147
103
  // ---------------------------------------------------------------------------
148
104
 
149
105
  function CopyableField({
150
- id,
151
106
  label,
152
107
  value,
153
- copied,
154
- onCopy,
155
108
  }: {
156
- id: string;
157
109
  label: string;
158
110
  value: string;
159
- copied: boolean;
160
- onCopy: () => void;
161
111
  }) {
112
+ // Each field owns its feedback: the copied flag and the select-text
113
+ // fallback belong to the markup they describe, so two fields never
114
+ // share (and race on) one parent-level "which field copied" state.
115
+ const { copy, copied } = useCopyFeedback();
116
+ const revealRef = useRef<HTMLElement>(null);
117
+
118
+ const handleCopy = useCallback(async () => {
119
+ if (await copy(value)) return;
120
+ // Rejected write: select the revealed value so the user can copy manually.
121
+ if (revealRef.current) selectElementText(revealRef.current);
122
+ }, [copy, value]);
123
+
162
124
  return (
163
125
  <div>
164
126
  <span className="stg:text-[0.65rem] stg:font-medium stg:text-muted-foreground">
@@ -166,7 +128,7 @@ function CopyableField({
166
128
  </span>
167
129
  <div className="stg:mt-0.5 stg:flex stg:items-center stg:gap-2">
168
130
  <code
169
- id={id}
131
+ ref={revealRef}
170
132
  className={cn(
171
133
  "stg:min-w-0 stg:flex-1 stg:select-all stg:truncate stg:rounded-md",
172
134
  "stg:border stg:border-input stg:bg-background stg:px-2.5 stg:py-1.5",
@@ -177,7 +139,7 @@ function CopyableField({
177
139
  </code>
178
140
  <button
179
141
  type="button"
180
- onClick={onCopy}
142
+ onClick={() => void handleCopy()}
181
143
  aria-label={`Copy ${label}`}
182
144
  className={cn(
183
145
  "stg:inline-flex stg:shrink-0 stg:items-center stg:gap-1.5 stg:rounded-md stg:px-3 stg:py-1.5 stg:text-xs stg:font-medium",
@@ -189,6 +151,15 @@ function CopyableField({
189
151
  {copied ? "Copied" : "Copy"}
190
152
  </button>
191
153
  </div>
154
+
155
+ <div
156
+ role="status"
157
+ aria-live="polite"
158
+ aria-atomic="true"
159
+ className="stg:sr-only"
160
+ >
161
+ {copied && `${label} copied to clipboard`}
162
+ </div>
192
163
  </div>
193
164
  );
194
165
  }