@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.
- package/access/ManageAccessDialog.d.ts.map +1 -1
- package/access/ManageAccessDialog.js +7 -2
- package/access/ManageAccessDialog.js.map +1 -1
- package/activity/format-relative-time.d.ts +11 -9
- package/activity/format-relative-time.d.ts.map +1 -1
- package/activity/format-relative-time.js +11 -9
- package/activity/format-relative-time.js.map +1 -1
- package/agent/steps/CapabilitiesStep.js +5 -2
- package/agent/steps/CapabilitiesStep.js.map +1 -1
- package/agent/steps/IdentityStep.d.ts.map +1 -1
- package/agent/steps/IdentityStep.js +6 -5
- package/agent/steps/IdentityStep.js.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.d.ts.map +1 -1
- package/agent-instance/CreateAgentInstanceDialog.js +10 -2
- package/agent-instance/CreateAgentInstanceDialog.js.map +1 -1
- package/api-key/ApiKeyCreatedAlert.d.ts.map +1 -1
- package/api-key/ApiKeyCreatedAlert.js +12 -20
- package/api-key/ApiKeyCreatedAlert.js.map +1 -1
- package/api-key/ApiKeyListPanel.d.ts.map +1 -1
- package/api-key/ApiKeyListPanel.js +3 -23
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/api-key/CreateApiKeyForm.d.ts.map +1 -1
- package/api-key/CreateApiKeyForm.js +6 -10
- package/api-key/CreateApiKeyForm.js.map +1 -1
- package/approval-defaults-context.d.ts +47 -0
- package/approval-defaults-context.d.ts.map +1 -0
- package/approval-defaults-context.js +27 -0
- package/approval-defaults-context.js.map +1 -0
- package/attachment/index.d.ts +2 -0
- package/attachment/index.d.ts.map +1 -1
- package/attachment/index.js +1 -0
- package/attachment/index.js.map +1 -1
- package/attachment/vision-preflight.d.ts +113 -0
- package/attachment/vision-preflight.d.ts.map +1 -0
- package/attachment/vision-preflight.js +143 -0
- package/attachment/vision-preflight.js.map +1 -0
- package/billing/AutoRechargeCard.d.ts.map +1 -1
- package/billing/AutoRechargeCard.js +3 -2
- package/billing/AutoRechargeCard.js.map +1 -1
- package/billing/BillingSection.d.ts.map +1 -1
- package/billing/BillingSection.js +3 -2
- package/billing/BillingSection.js.map +1 -1
- package/channel/ChannelConversationsDialog.d.ts.map +1 -1
- package/channel/ChannelConversationsDialog.js +5 -4
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
- package/channel/ChannelCredentialsDialog.js +9 -4
- package/channel/ChannelCredentialsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +5 -4
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel/ConnectSlackDialog.d.ts.map +1 -1
- package/channel/ConnectSlackDialog.js +9 -4
- package/channel/ConnectSlackDialog.js.map +1 -1
- package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
- package/channel/ConnectWhatsAppDialog.js +9 -4
- package/channel/ConnectWhatsAppDialog.js.map +1 -1
- package/channel/useChannelSessions.d.ts.map +1 -1
- package/channel/useChannelSessions.js.map +1 -1
- package/channel-app/ChannelAppDetailPanel.d.ts.map +1 -1
- package/channel-app/ChannelAppDetailPanel.js +8 -5
- package/channel-app/ChannelAppDetailPanel.js.map +1 -1
- package/channel-app/CreateChannelAppForm.d.ts.map +1 -1
- package/channel-app/CreateChannelAppForm.js +12 -7
- package/channel-app/CreateChannelAppForm.js.map +1 -1
- package/channel-app/internal.d.ts +0 -1
- package/channel-app/internal.d.ts.map +1 -1
- package/channel-app/internal.js +5 -10
- package/channel-app/internal.js.map +1 -1
- package/composer/ComposerToolbar.js +2 -1
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/SessionComposer.d.ts +1 -1
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +120 -13
- package/composer/SessionComposer.js.map +1 -1
- package/composer/icons.d.ts +0 -1
- package/composer/icons.d.ts.map +1 -1
- package/composer/icons.js +0 -3
- package/composer/icons.js.map +1 -1
- package/conversation/ConversationComposer.js +1 -1
- package/conversation/ConversationComposer.js.map +1 -1
- package/conversation/ConversationListPane.d.ts.map +1 -1
- package/conversation/ConversationListPane.js +3 -2
- package/conversation/ConversationListPane.js.map +1 -1
- package/cursor-accounts/MemberCoverageTable.js +3 -14
- package/cursor-accounts/MemberCoverageTable.js.map +1 -1
- package/dashboard/DashboardFailedRuns.d.ts.map +1 -1
- package/dashboard/DashboardFailedRuns.js +2 -14
- package/dashboard/DashboardFailedRuns.js.map +1 -1
- package/environment/CreateEnvironmentForm.d.ts.map +1 -1
- package/environment/CreateEnvironmentForm.js +4 -8
- package/environment/CreateEnvironmentForm.js.map +1 -1
- package/environment/EnvVarForm.d.ts.map +1 -1
- package/environment/EnvVarForm.js +2 -4
- package/environment/EnvVarForm.js.map +1 -1
- package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
- package/environment/EnvironmentVariableEditor.js +5 -7
- package/environment/EnvironmentVariableEditor.js.map +1 -1
- package/execution/ArtifactApplyButton.d.ts.map +1 -1
- package/execution/ArtifactApplyButton.js +2 -4
- package/execution/ArtifactApplyButton.js.map +1 -1
- package/execution/ExecutionErrorNotice.d.ts +36 -0
- package/execution/ExecutionErrorNotice.d.ts.map +1 -0
- package/execution/ExecutionErrorNotice.js +39 -0
- package/execution/ExecutionErrorNotice.js.map +1 -0
- package/execution/FilePathLink.d.ts.map +1 -1
- package/execution/FilePathLink.js +5 -8
- package/execution/FilePathLink.js.map +1 -1
- package/execution/FileReviewCard.d.ts.map +1 -1
- package/execution/FileReviewCard.js +1 -6
- package/execution/FileReviewCard.js.map +1 -1
- package/execution/FollowUpInput.d.ts.map +1 -1
- package/execution/FollowUpInput.js +1 -3
- package/execution/FollowUpInput.js.map +1 -1
- package/execution/LivenessStatusLine.d.ts +40 -0
- package/execution/LivenessStatusLine.d.ts.map +1 -0
- package/execution/LivenessStatusLine.js +34 -0
- package/execution/LivenessStatusLine.js.map +1 -0
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +31 -3
- package/execution/MessageEntry.js.map +1 -1
- package/execution/MessageThread.d.ts +25 -0
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +51 -36
- package/execution/MessageThread.js.map +1 -1
- package/execution/SetupProgress.d.ts.map +1 -1
- package/execution/SetupProgress.js +1 -1
- package/execution/SetupProgress.js.map +1 -1
- package/execution/SubAgentSection.d.ts.map +1 -1
- package/execution/SubAgentSection.js +9 -7
- package/execution/SubAgentSection.js.map +1 -1
- package/execution/TerminalSession.d.ts +30 -0
- package/execution/TerminalSession.d.ts.map +1 -1
- package/execution/TerminalSession.js +37 -1
- package/execution/TerminalSession.js.map +1 -1
- package/execution/ToolCallDetail.d.ts +9 -0
- package/execution/ToolCallDetail.d.ts.map +1 -1
- package/execution/ToolCallDetail.js +16 -0
- package/execution/ToolCallDetail.js.map +1 -1
- package/execution/ToolCallItem.d.ts +20 -6
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +102 -29
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/ToolRunGroup.d.ts.map +1 -1
- package/execution/ToolRunGroup.js +11 -11
- package/execution/ToolRunGroup.js.map +1 -1
- package/execution/WriteBackCard.d.ts.map +1 -1
- package/execution/WriteBackCard.js +5 -20
- package/execution/WriteBackCard.js.map +1 -1
- package/execution/index.d.ts +6 -2
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +3 -1
- package/execution/index.js.map +1 -1
- package/execution/tool-categories.d.ts +42 -7
- package/execution/tool-categories.d.ts.map +1 -1
- package/execution/tool-categories.js +38 -4
- package/execution/tool-categories.js.map +1 -1
- package/execution/tool-presenter.d.ts +17 -1
- package/execution/tool-presenter.d.ts.map +1 -1
- package/execution/tool-presenter.js +4 -1
- package/execution/tool-presenter.js.map +1 -1
- package/execution/useArtifactInspection.d.ts.map +1 -1
- package/execution/useArtifactInspection.js +4 -7
- package/execution/useArtifactInspection.js.map +1 -1
- package/iam-policy/GrantAccessForm.d.ts.map +1 -1
- package/iam-policy/GrantAccessForm.js +2 -4
- package/iam-policy/GrantAccessForm.js.map +1 -1
- package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +3 -5
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/RoleSelector.d.ts.map +1 -1
- package/iam-policy/RoleSelector.js +7 -1
- package/iam-policy/RoleSelector.js.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.d.ts.map +1 -1
- package/identity-provider/CreateIdentityProviderForm.js +6 -9
- package/identity-provider/CreateIdentityProviderForm.js.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.js +17 -26
- package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
- package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +2 -4
- package/identity-provider/IdentityProviderListPanel.js.map +1 -1
- package/identity-provider/IdentityProviderWizard.d.ts.map +1 -1
- package/identity-provider/IdentityProviderWizard.js +8 -7
- package/identity-provider/IdentityProviderWizard.js.map +1 -1
- package/identity-provider/SsoLoginPrompt.js +5 -6
- package/identity-provider/SsoLoginPrompt.js.map +1 -1
- package/index.d.ts +9 -8
- package/index.d.ts.map +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/internal/DecisionButton.d.ts.map +1 -1
- package/internal/DecisionButton.js +1 -6
- package/internal/DecisionButton.js.map +1 -1
- package/internal/SpinnerIcon.d.ts +22 -0
- package/internal/SpinnerIcon.d.ts.map +1 -0
- package/internal/SpinnerIcon.js +23 -0
- package/internal/SpinnerIcon.js.map +1 -0
- package/internal/select-element-text.d.ts +11 -0
- package/internal/select-element-text.d.ts.map +1 -0
- package/internal/select-element-text.js +19 -0
- package/internal/select-element-text.js.map +1 -0
- package/internal/thread-card/ThreadCardShell.d.ts +27 -10
- package/internal/thread-card/ThreadCardShell.d.ts.map +1 -1
- package/internal/thread-card/ThreadCardShell.js +11 -5
- package/internal/thread-card/ThreadCardShell.js.map +1 -1
- package/internal/thread-card/glyphs.d.ts +11 -2
- package/internal/thread-card/glyphs.d.ts.map +1 -1
- package/internal/thread-card/glyphs.js +9 -3
- package/internal/thread-card/glyphs.js.map +1 -1
- package/internal/thread-card/index.d.ts +1 -1
- package/internal/thread-card/index.d.ts.map +1 -1
- package/internal/thread-card/index.js.map +1 -1
- package/internal/useCopyFeedback.d.ts +28 -0
- package/internal/useCopyFeedback.d.ts.map +1 -0
- package/internal/useCopyFeedback.js +40 -0
- package/internal/useCopyFeedback.js.map +1 -0
- package/invitation/InvitationCreatedAlert.d.ts.map +1 -1
- package/invitation/InvitationCreatedAlert.js +12 -19
- package/invitation/InvitationCreatedAlert.js.map +1 -1
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +14 -21
- package/invitation/InvitationManager.js.map +1 -1
- package/invitation/InvitationRedemption.d.ts.map +1 -1
- package/invitation/InvitationRedemption.js +2 -4
- package/invitation/InvitationRedemption.js.map +1 -1
- package/library/useExportResource.d.ts.map +1 -1
- package/library/useExportResource.js +16 -27
- package/library/useExportResource.js.map +1 -1
- package/manifest/ApplyManifestDialog.js +1 -1
- package/manifest/EditResourceYamlDialog.js +1 -1
- package/mcp-server/DefinitionDriftNotice.d.ts +42 -0
- package/mcp-server/DefinitionDriftNotice.d.ts.map +1 -0
- package/mcp-server/DefinitionDriftNotice.js +52 -0
- package/mcp-server/DefinitionDriftNotice.js.map +1 -0
- package/mcp-server/McpServerConnectDialog.js +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +47 -14
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/OAuthAppForm.d.ts.map +1 -1
- package/mcp-server/OAuthAppForm.js +2 -4
- package/mcp-server/OAuthAppForm.js.map +1 -1
- package/mcp-server/internal/definitionDrift.d.ts +39 -0
- package/mcp-server/internal/definitionDrift.d.ts.map +1 -0
- package/mcp-server/internal/definitionDrift.js +122 -0
- package/mcp-server/internal/definitionDrift.js.map +1 -0
- package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -1
- package/mcp-server/internal/mcpServerToInput.js +3 -0
- package/mcp-server/internal/mcpServerToInput.js.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -1
- package/mcp-server/steps/EnvironmentAuthStep.js +8 -4
- package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -1
- package/mcp-server/steps/IdentityTransportStep.js +5 -4
- package/mcp-server/steps/IdentityTransportStep.js.map +1 -1
- package/mcp-server/useMcpServerConnect.d.ts +1 -1
- package/mcp-server/useMcpServerDefinitionDrift.d.ts +44 -0
- package/mcp-server/useMcpServerDefinitionDrift.d.ts.map +1 -0
- package/mcp-server/useMcpServerDefinitionDrift.js +61 -0
- package/mcp-server/useMcpServerDefinitionDrift.js.map +1 -0
- package/models/ModelRegistryContext.d.ts +7 -1
- package/models/ModelRegistryContext.d.ts.map +1 -1
- package/models/ModelRegistryContext.js.map +1 -1
- package/models/ModelSelector.js +9 -1
- package/models/ModelSelector.js.map +1 -1
- package/models/index.d.ts +2 -2
- package/models/index.d.ts.map +1 -1
- package/models/index.js +1 -1
- package/models/index.js.map +1 -1
- package/models/registry.d.ts +88 -6
- package/models/registry.d.ts.map +1 -1
- package/models/registry.js +133 -27
- package/models/registry.js.map +1 -1
- package/models/useModelRegistry.d.ts +7 -1
- package/models/useModelRegistry.d.ts.map +1 -1
- package/models/useModelRegistry.js +3 -2
- package/models/useModelRegistry.js.map +1 -1
- package/oauth-app/CreateOAuthAppForm.d.ts.map +1 -1
- package/oauth-app/CreateOAuthAppForm.js +4 -5
- package/oauth-app/CreateOAuthAppForm.js.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.d.ts.map +1 -1
- package/oauth-app/OAuthAppDetailPanel.js +5 -6
- package/oauth-app/OAuthAppDetailPanel.js.map +1 -1
- package/organization/CreateOrganizationForm.d.ts.map +1 -1
- package/organization/CreateOrganizationForm.js +5 -9
- package/organization/CreateOrganizationForm.js.map +1 -1
- package/organization/OrgProfilePanel.d.ts.map +1 -1
- package/organization/OrgProfilePanel.js +7 -16
- package/organization/OrgProfilePanel.js.map +1 -1
- package/package.json +4 -4
- package/platform-client/CreatePlatformClientForm.d.ts.map +1 -1
- package/platform-client/CreatePlatformClientForm.js +5 -6
- package/platform-client/CreatePlatformClientForm.js.map +1 -1
- package/platform-client/PlatformClientDetailPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientDetailPanel.js +6 -7
- package/platform-client/PlatformClientDetailPanel.js.map +1 -1
- package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +2 -4
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/platform-client/PlatformClientSecretAlert.d.ts.map +1 -1
- package/platform-client/PlatformClientSecretAlert.js +18 -25
- package/platform-client/PlatformClientSecretAlert.js.map +1 -1
- package/provider.d.ts +34 -1
- package/provider.d.ts.map +1 -1
- package/provider.js +14 -7
- package/provider.js.map +1 -1
- package/resource-creation/WizardNav.d.ts.map +1 -1
- package/resource-creation/WizardNav.js +2 -4
- package/resource-creation/WizardNav.js.map +1 -1
- package/resource-detail/ConfirmDialog.js +1 -1
- package/resource-detail/useCopyResource.d.ts +4 -3
- package/resource-detail/useCopyResource.d.ts.map +1 -1
- package/resource-detail/useCopyResource.js +10 -19
- package/resource-detail/useCopyResource.js.map +1 -1
- package/schedule/ScheduleDetailView.d.ts.map +1 -1
- package/schedule/ScheduleDetailView.js +2 -4
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/schedule/ScheduleForm.d.ts.map +1 -1
- package/schedule/ScheduleForm.js +6 -7
- package/schedule/ScheduleForm.js.map +1 -1
- package/session/NewSessionViewer.d.ts +52 -2
- package/session/NewSessionViewer.d.ts.map +1 -1
- package/session/NewSessionViewer.js +21 -6
- package/session/NewSessionViewer.js.map +1 -1
- package/session/SessionViewer.d.ts +63 -2
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +43 -17
- package/session/SessionViewer.js.map +1 -1
- package/session/audience.d.ts +17 -0
- package/session/audience.d.ts.map +1 -1
- package/session/index.d.ts +2 -1
- package/session/index.d.ts.map +1 -1
- package/session/index.js.map +1 -1
- package/session/run-config.d.ts +50 -0
- package/session/run-config.d.ts.map +1 -0
- package/session/run-config.js +15 -0
- package/session/run-config.js.map +1 -0
- package/session/useNewSessionFlow.d.ts +11 -0
- package/session/useNewSessionFlow.d.ts.map +1 -1
- package/session/useNewSessionFlow.js +29 -2
- package/session/useNewSessionFlow.js.map +1 -1
- package/session/useSessionConversation.d.ts +7 -7
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +2 -0
- package/session/useSessionConversation.js.map +1 -1
- package/session/useSessionPageFlow.d.ts +18 -4
- package/session/useSessionPageFlow.d.ts.map +1 -1
- package/session/useSessionPageFlow.js +33 -6
- package/session/useSessionPageFlow.js.map +1 -1
- package/session/useSessionPanel.d.ts +37 -2
- package/session/useSessionPanel.d.ts.map +1 -1
- package/session/useSessionPanel.js +44 -10
- package/session/useSessionPanel.js.map +1 -1
- package/settings/ApiKeysSection.d.ts.map +1 -1
- package/settings/ApiKeysSection.js +3 -2
- package/settings/ApiKeysSection.js.map +1 -1
- package/settings/ChannelAppsSection.d.ts.map +1 -1
- package/settings/ChannelAppsSection.js +3 -2
- package/settings/ChannelAppsSection.js.map +1 -1
- package/settings/EnvironmentsSection.js +5 -3
- package/settings/EnvironmentsSection.js.map +1 -1
- package/settings/IdentityProvidersSection.d.ts.map +1 -1
- package/settings/IdentityProvidersSection.js +3 -2
- package/settings/IdentityProvidersSection.js.map +1 -1
- package/settings/InvitationsSection.d.ts.map +1 -1
- package/settings/InvitationsSection.js +3 -1
- package/settings/InvitationsSection.js.map +1 -1
- package/settings/MembersSection.d.ts.map +1 -1
- package/settings/MembersSection.js +3 -1
- package/settings/MembersSection.js.map +1 -1
- package/settings/OAuthAppsSection.d.ts.map +1 -1
- package/settings/OAuthAppsSection.js +3 -2
- package/settings/OAuthAppsSection.js.map +1 -1
- package/settings/OrgProfileSection.d.ts.map +1 -1
- package/settings/OrgProfileSection.js +3 -2
- package/settings/OrgProfileSection.js.map +1 -1
- package/settings/PlatformClientsSection.d.ts.map +1 -1
- package/settings/PlatformClientsSection.js +3 -2
- package/settings/PlatformClientsSection.js.map +1 -1
- package/settings/UsageSection.d.ts.map +1 -1
- package/settings/UsageSection.js +3 -1
- package/settings/UsageSection.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +18 -7
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/sidebar/chrome.d.ts +3 -4
- package/sidebar/chrome.d.ts.map +1 -1
- package/sidebar/chrome.js +5 -4
- package/sidebar/chrome.js.map +1 -1
- package/skill/SkillDiffDialog.js +1 -1
- package/src/access/ManageAccessDialog.tsx +10 -4
- package/src/activity/format-relative-time.ts +11 -9
- package/src/agent/steps/CapabilitiesStep.tsx +6 -3
- package/src/agent/steps/IdentityStep.tsx +19 -12
- package/src/agent-instance/CreateAgentInstanceDialog.tsx +17 -8
- package/src/api-key/ApiKeyCreatedAlert.tsx +10 -19
- package/src/api-key/ApiKeyListPanel.tsx +3 -39
- package/src/api-key/CreateApiKeyForm.tsx +12 -26
- package/src/approval-defaults-context.ts +56 -0
- package/src/attachment/__tests__/vision-preflight.test.ts +311 -0
- package/src/attachment/index.ts +12 -0
- package/src/attachment/vision-preflight.ts +236 -0
- package/src/billing/AutoRechargeCard.tsx +5 -4
- package/src/billing/BillingSection.tsx +4 -3
- package/src/channel/ChannelConversationsDialog.tsx +8 -4
- package/src/channel/ChannelCredentialsDialog.tsx +14 -4
- package/src/channel/ChannelTemplatesDialog.tsx +8 -4
- package/src/channel/ConnectSlackDialog.tsx +14 -4
- package/src/channel/ConnectWhatsAppDialog.tsx +14 -4
- package/src/channel/useChannelSessions.ts +3 -0
- package/src/channel-app/ChannelAppDetailPanel.tsx +15 -12
- package/src/channel-app/CreateChannelAppForm.tsx +17 -12
- package/src/channel-app/internal.tsx +5 -25
- package/src/composer/ComposerToolbar.tsx +1 -1
- package/src/composer/SessionComposer.tsx +160 -13
- package/src/composer/__tests__/SessionComposer-modelCoherence.test.tsx +220 -0
- package/src/composer/__tests__/SessionComposer-visionPreflight.test.tsx +222 -0
- package/src/composer/icons.tsx +0 -18
- package/src/conversation/ConversationComposer.tsx +1 -1
- package/src/conversation/ConversationListPane.tsx +4 -3
- package/src/cursor-accounts/MemberCoverageTable.tsx +3 -14
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +2 -10
- package/src/dashboard/DashboardFailedRuns.tsx +2 -12
- package/src/environment/CreateEnvironmentForm.tsx +8 -27
- package/src/environment/EnvVarForm.tsx +2 -18
- package/src/environment/EnvironmentVariableEditor.tsx +5 -21
- package/src/execution/ArtifactApplyButton.tsx +2 -17
- package/src/execution/ExecutionErrorNotice.tsx +99 -0
- package/src/execution/FilePathLink.tsx +5 -9
- package/src/execution/FileReviewCard.tsx +1 -20
- package/src/execution/FollowUpInput.tsx +1 -16
- package/src/execution/LivenessStatusLine.tsx +59 -0
- package/src/execution/MessageEntry.tsx +136 -25
- package/src/execution/MessageThread.tsx +84 -83
- package/src/execution/SetupProgress.tsx +5 -1
- package/src/execution/SubAgentSection.tsx +9 -20
- package/src/execution/TerminalSession.tsx +97 -10
- package/src/execution/ToolCallDetail.tsx +19 -0
- package/src/execution/ToolCallItem.tsx +157 -37
- package/src/execution/ToolRunGroup.tsx +30 -32
- package/src/execution/WriteBackCard.tsx +5 -24
- package/src/execution/__tests__/MessageEntry-copy.test.tsx +125 -0
- package/src/execution/__tests__/MessageThread.test.tsx +97 -0
- package/src/execution/__tests__/TerminalSession.test.tsx +71 -1
- package/src/execution/__tests__/ToolCallDetail.test.tsx +33 -1
- package/src/execution/__tests__/ToolCallItem.test.tsx +299 -11
- package/src/execution/__tests__/ToolRunGroup.test.tsx +41 -9
- package/src/execution/__tests__/message-thread-slots.test.tsx +92 -0
- package/src/execution/__tests__/tool-presenter.test.tsx +41 -4
- package/src/execution/index.ts +8 -2
- package/src/execution/tool-categories.ts +72 -8
- package/src/execution/tool-presenter.ts +22 -1
- package/src/execution/useArtifactInspection.ts +4 -8
- package/src/iam-policy/GrantAccessForm.tsx +2 -18
- package/src/iam-policy/OrgMembersPanel.tsx +3 -19
- package/src/iam-policy/RoleSelector.tsx +8 -1
- package/src/identity-provider/CreateIdentityProviderForm.tsx +13 -31
- package/src/identity-provider/IdentityProviderDetailPanel.tsx +24 -49
- package/src/identity-provider/IdentityProviderListPanel.tsx +2 -18
- package/src/identity-provider/IdentityProviderWizard.tsx +15 -32
- package/src/identity-provider/SsoLoginPrompt.tsx +6 -21
- package/src/index.ts +23 -1
- package/src/internal/DecisionButton.tsx +1 -20
- package/src/internal/SpinnerIcon.tsx +42 -0
- package/src/internal/__tests__/ThreadCardShell.test.tsx +43 -7
- package/src/internal/__tests__/useCopyFeedback.test.ts +92 -0
- package/src/internal/select-element-text.ts +17 -0
- package/src/internal/thread-card/ThreadCardShell.tsx +53 -21
- package/src/internal/thread-card/glyphs.tsx +24 -3
- package/src/internal/thread-card/index.ts +1 -0
- package/src/internal/useCopyFeedback.ts +61 -0
- package/src/invitation/InvitationCreatedAlert.tsx +10 -18
- package/src/invitation/InvitationManager.tsx +23 -34
- package/src/invitation/InvitationRedemption.tsx +2 -18
- package/src/library/useExportResource.ts +15 -29
- package/src/manifest/ApplyManifestDialog.tsx +1 -1
- package/src/manifest/EditResourceYamlDialog.tsx +1 -1
- package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
- package/src/mcp-server/McpServerConnectDialog.tsx +1 -1
- package/src/mcp-server/McpServerDetailView.tsx +58 -26
- package/src/mcp-server/OAuthAppForm.tsx +2 -18
- package/src/mcp-server/__tests__/DefinitionDriftNotice.test.tsx +57 -0
- package/src/mcp-server/__tests__/definitionDrift.test.ts +245 -0
- package/src/mcp-server/__tests__/mcpServerToInput.test.ts +201 -0
- package/src/mcp-server/__tests__/useMcpServerDefinitionDrift.test.tsx +173 -0
- package/src/mcp-server/internal/definitionDrift.ts +158 -0
- package/src/mcp-server/internal/mcpServerToInput.ts +3 -0
- package/src/mcp-server/steps/EnvironmentAuthStep.tsx +19 -19
- package/src/mcp-server/steps/IdentityTransportStep.tsx +24 -23
- package/src/mcp-server/useMcpServerConnect.ts +1 -1
- package/src/mcp-server/useMcpServerDefinitionDrift.ts +95 -0
- package/src/models/ModelRegistryContext.ts +7 -1
- package/src/models/ModelSelector.tsx +37 -0
- package/src/models/__tests__/ModelSelector-visionIndicator.test.tsx +129 -0
- package/src/models/__tests__/resolveDefaultModel.test.ts +115 -0
- package/src/models/__tests__/useModelRegistry.test.tsx +99 -4
- package/src/models/index.ts +2 -2
- package/src/models/registry.ts +196 -29
- package/src/models/useModelRegistry.ts +10 -2
- package/src/oauth-app/CreateOAuthAppForm.tsx +16 -31
- package/src/oauth-app/OAuthAppDetailPanel.tsx +16 -31
- package/src/organization/CreateOrganizationForm.tsx +10 -29
- package/src/organization/OrgProfilePanel.tsx +13 -44
- package/src/platform-client/CreatePlatformClientForm.tsx +9 -29
- package/src/platform-client/PlatformClientDetailPanel.tsx +10 -30
- package/src/platform-client/PlatformClientListPanel.tsx +2 -18
- package/src/platform-client/PlatformClientSecretAlert.tsx +26 -55
- package/src/provider.tsx +76 -33
- package/src/resource-creation/WizardNav.tsx +2 -18
- package/src/resource-detail/ConfirmDialog.tsx +1 -1
- package/src/resource-detail/useCopyResource.ts +17 -23
- package/src/schedule/ScheduleDetailView.tsx +2 -18
- package/src/schedule/ScheduleForm.tsx +19 -34
- package/src/session/NewSessionViewer.tsx +85 -7
- package/src/session/SessionViewer.tsx +120 -17
- package/src/session/__tests__/audienceWiring.test.tsx +76 -0
- package/src/session/__tests__/panelNegotiation.test.tsx +302 -0
- package/src/session/__tests__/useNewSessionFlow.test.tsx +134 -5
- package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +74 -0
- package/src/session/__tests__/useSessionPageFlow.runConfig.test.tsx +157 -0
- package/src/session/__tests__/useSessionPanel.test.ts +114 -0
- package/src/session/audience.ts +18 -0
- package/src/session/index.ts +2 -1
- package/src/session/run-config.ts +59 -0
- package/src/session/useNewSessionFlow.ts +39 -2
- package/src/session/useSessionConversation.ts +10 -8
- package/src/session/useSessionPageFlow.ts +51 -10
- package/src/session/useSessionPanel.ts +91 -10
- package/src/settings/ApiKeysSection.tsx +4 -3
- package/src/settings/ChannelAppsSection.tsx +4 -3
- package/src/settings/EnvironmentsSection.tsx +8 -5
- package/src/settings/IdentityProvidersSection.tsx +4 -3
- package/src/settings/InvitationsSection.tsx +4 -2
- package/src/settings/MembersSection.tsx +4 -2
- package/src/settings/OAuthAppsSection.tsx +4 -3
- package/src/settings/OrgProfileSection.tsx +4 -3
- package/src/settings/PlatformClientsSection.tsx +4 -3
- package/src/settings/UsageSection.tsx +4 -2
- package/src/sharing/ShareAgentDialog.tsx +28 -10
- package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
- package/src/sidebar/chrome.tsx +6 -6
- package/src/skill/SkillDiffDialog.tsx +1 -1
- package/src/styles.css +43 -0
- package/src/version-history/VersionTimelineEntry.tsx +1 -21
- package/src/workflow/FailedRunsWidget.tsx +2 -9
- package/src/workflow/PendingApprovalsWidget.tsx +2 -9
- package/src/workflow/ViewYamlDialog.tsx +7 -22
- package/src/workflow/WorkflowArchitectDialog.tsx +8 -27
- package/src/workflow/WorkflowArtifactDocument.tsx +5 -9
- package/src/workflow/WorkflowCanvasEditor.tsx +2 -0
- package/src/workflow/WorkflowCanvasInner.tsx +14 -1
- package/src/workflow/WorkflowDiffGraph.tsx +7 -1
- package/src/workflow/WorkflowExecutionViewer.tsx +88 -11
- package/src/workflow/WorkflowExplainDialog.tsx +8 -24
- package/src/workflow/WorkflowOverviewGraph.tsx +9 -1
- package/src/workflow/WorkflowRefinePanel.tsx +2 -18
- package/src/workflow/WorkflowRepairCard.tsx +2 -18
- package/src/workflow/WorkflowRunDialog.tsx +3 -23
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +2 -17
- package/src/workflow/WorkflowVersionBadge.tsx +4 -13
- package/src/workflow/WorkflowVersionTimeline.tsx +1 -25
- package/src/workflow/__tests__/panelNegotiation.test.tsx +230 -0
- package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +178 -0
- package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +224 -0
- package/src/workflow/__tests__/useWorkflowExecutionPanel.test.ts +100 -0
- package/src/workflow/execution-comparison/ExecutionComparisonPicker.tsx +7 -11
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
- package/src/workflow/index.ts +1 -0
- package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +1 -1
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
- package/src/workflow/picker/BranchAddPopover.tsx +4 -3
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +1 -1
- package/src/workflow/useApprovalBoundary.ts +1 -1
- package/src/workflow/useWorkflowCanvas.ts +114 -11
- package/src/workflow/useWorkflowExecutionPanel.ts +95 -13
- package/styles.css +1 -1
- package/version-history/VersionTimelineEntry.d.ts.map +1 -1
- package/version-history/VersionTimelineEntry.js +1 -23
- package/version-history/VersionTimelineEntry.js.map +1 -1
- package/workflow/CanvasTransitionEdge.d.ts +1 -1
- package/workflow/FailedRunsWidget.d.ts.map +1 -1
- package/workflow/FailedRunsWidget.js +2 -11
- package/workflow/FailedRunsWidget.js.map +1 -1
- package/workflow/PendingApprovalsWidget.d.ts.map +1 -1
- package/workflow/PendingApprovalsWidget.js +2 -11
- package/workflow/PendingApprovalsWidget.js.map +1 -1
- package/workflow/ViewYamlDialog.d.ts.map +1 -1
- package/workflow/ViewYamlDialog.js +7 -23
- package/workflow/ViewYamlDialog.js.map +1 -1
- package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
- package/workflow/WorkflowArchitectDialog.js +7 -11
- package/workflow/WorkflowArchitectDialog.js.map +1 -1
- package/workflow/WorkflowArtifactDocument.d.ts.map +1 -1
- package/workflow/WorkflowArtifactDocument.js +5 -8
- package/workflow/WorkflowArtifactDocument.js.map +1 -1
- package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
- package/workflow/WorkflowCanvasEditor.js +1 -1
- package/workflow/WorkflowCanvasEditor.js.map +1 -1
- package/workflow/WorkflowCanvasInner.d.ts +4 -2
- package/workflow/WorkflowCanvasInner.d.ts.map +1 -1
- package/workflow/WorkflowCanvasInner.js +7 -3
- package/workflow/WorkflowCanvasInner.js.map +1 -1
- package/workflow/WorkflowDiffGraph.js +6 -2
- package/workflow/WorkflowDiffGraph.js.map +1 -1
- package/workflow/WorkflowExecutionViewer.d.ts +51 -0
- package/workflow/WorkflowExecutionViewer.d.ts.map +1 -1
- package/workflow/WorkflowExecutionViewer.js +23 -6
- package/workflow/WorkflowExecutionViewer.js.map +1 -1
- package/workflow/WorkflowExplainDialog.d.ts.map +1 -1
- package/workflow/WorkflowExplainDialog.js +6 -8
- package/workflow/WorkflowExplainDialog.js.map +1 -1
- package/workflow/WorkflowOverviewGraph.js +8 -2
- package/workflow/WorkflowOverviewGraph.js.map +1 -1
- package/workflow/WorkflowRefinePanel.d.ts.map +1 -1
- package/workflow/WorkflowRefinePanel.js +2 -4
- package/workflow/WorkflowRefinePanel.js.map +1 -1
- package/workflow/WorkflowRepairCard.d.ts.map +1 -1
- package/workflow/WorkflowRepairCard.js +2 -4
- package/workflow/WorkflowRepairCard.js.map +1 -1
- package/workflow/WorkflowRunDialog.d.ts.map +1 -1
- package/workflow/WorkflowRunDialog.js +2 -7
- package/workflow/WorkflowRunDialog.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +2 -4
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
- package/workflow/WorkflowVersionBadge.js +4 -13
- package/workflow/WorkflowVersionBadge.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +1 -26
- package/workflow/WorkflowVersionTimeline.js.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.d.ts.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonPicker.js +7 -15
- package/workflow/execution-comparison/ExecutionComparisonPicker.js.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.js +1 -24
- package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
- package/workflow/index.d.ts +1 -1
- package/workflow/index.d.ts.map +1 -1
- package/workflow/index.js.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.js +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
- package/workflow/picker/BranchAddPopover.d.ts.map +1 -1
- package/workflow/picker/BranchAddPopover.js +3 -2
- package/workflow/picker/BranchAddPopover.js.map +1 -1
- package/workflow/templates/WorkflowTemplatePreview.js +1 -1
- package/workflow/useApprovalBoundary.d.ts +1 -1
- package/workflow/useApprovalBoundary.js +1 -1
- package/workflow/useWorkflowCanvas.d.ts +5 -1
- package/workflow/useWorkflowCanvas.d.ts.map +1 -1
- package/workflow/useWorkflowCanvas.js +99 -13
- package/workflow/useWorkflowCanvas.js.map +1 -1
- package/workflow/useWorkflowExecutionPanel.d.ts +38 -2
- package/workflow/useWorkflowExecutionPanel.d.ts.map +1 -1
- package/workflow/useWorkflowExecutionPanel.js +46 -13
- package/workflow/useWorkflowExecutionPanel.js.map +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useRef, useState } from "react";
|
|
3
|
+
import { useCallback, useId, useRef, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage, type ResourceRef } from "@stigmer/sdk";
|
|
6
6
|
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
@@ -53,6 +53,12 @@ export function ChannelCredentialsDialog({
|
|
|
53
53
|
}: ChannelCredentialsDialogProps) {
|
|
54
54
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
55
55
|
|
|
56
|
+
// Instance-scoped title id (oss#593): a reusable component must not
|
|
57
|
+
// hardcode DOM ids — hosts legitimately mount this dialog more than once
|
|
58
|
+
// per page (e.g. zone-cached detail pages), and duplicate ids break the
|
|
59
|
+
// aria-labelledby association for every copy after the first.
|
|
60
|
+
const titleId = useId();
|
|
61
|
+
|
|
56
62
|
const handleClose = useCallback(() => {
|
|
57
63
|
dialogRef.current?.close();
|
|
58
64
|
onOpenChange(false);
|
|
@@ -80,9 +86,9 @@ export function ChannelCredentialsDialog({
|
|
|
80
86
|
onClose={handleClose}
|
|
81
87
|
className={cn(
|
|
82
88
|
"stg:w-full stg:max-w-md stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
83
|
-
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-
|
|
89
|
+
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-backdrop" : "stg:relative",
|
|
84
90
|
)}
|
|
85
|
-
aria-labelledby=
|
|
91
|
+
aria-labelledby={titleId}
|
|
86
92
|
>
|
|
87
93
|
{/* Body mounts only while open so its draft resets per session —
|
|
88
94
|
reopening never resumes stale, unsaved edits. */}
|
|
@@ -92,6 +98,7 @@ export function ChannelCredentialsDialog({
|
|
|
92
98
|
channel={channel}
|
|
93
99
|
onSaved={onSaved}
|
|
94
100
|
onClose={handleClose}
|
|
101
|
+
titleId={titleId}
|
|
95
102
|
/>
|
|
96
103
|
)}
|
|
97
104
|
</dialog>
|
|
@@ -103,11 +110,14 @@ function ChannelCredentialsDialogBody({
|
|
|
103
110
|
channel,
|
|
104
111
|
onSaved,
|
|
105
112
|
onClose,
|
|
113
|
+
titleId,
|
|
106
114
|
}: {
|
|
107
115
|
readonly agent: Agent;
|
|
108
116
|
readonly channel: AgentChannel;
|
|
109
117
|
readonly onSaved?: () => void;
|
|
110
118
|
readonly onClose: () => void;
|
|
119
|
+
/** Heading id minted by the outer dialog for its aria-labelledby. */
|
|
120
|
+
readonly titleId: string;
|
|
111
121
|
}) {
|
|
112
122
|
const channelName =
|
|
113
123
|
channel.metadata?.name || channel.metadata?.slug || "this channel";
|
|
@@ -142,7 +152,7 @@ function ChannelCredentialsDialogBody({
|
|
|
142
152
|
<div className="stg:flex stg:items-start stg:justify-between stg:gap-3 stg:border-b stg:border-border stg:px-5 stg:py-4">
|
|
143
153
|
<div className="stg:min-w-0">
|
|
144
154
|
<h2
|
|
145
|
-
id=
|
|
155
|
+
id={titleId}
|
|
146
156
|
className="stg:text-sm stg:font-semibold stg:text-foreground"
|
|
147
157
|
>
|
|
148
158
|
Tool credentials
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useRef, type ReactNode } from "react";
|
|
3
|
+
import { useCallback, useId, useRef, type ReactNode } from "react";
|
|
4
4
|
import { ExternalLink, LayoutTemplate, X } from "lucide-react";
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
6
|
import { getUserMessage } from "@stigmer/sdk";
|
|
@@ -90,6 +90,7 @@ export function ChannelTemplatesDialog({
|
|
|
90
90
|
modal = true,
|
|
91
91
|
}: ChannelTemplatesDialogProps) {
|
|
92
92
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
93
|
+
const titleId = useId();
|
|
93
94
|
|
|
94
95
|
const handleClose = useCallback(() => {
|
|
95
96
|
dialogRef.current?.close();
|
|
@@ -120,14 +121,15 @@ export function ChannelTemplatesDialog({
|
|
|
120
121
|
// Wider than the conversations dialog on purpose: template
|
|
121
122
|
// bodies are the content, and a narrow column shreds them.
|
|
122
123
|
"stg:w-full stg:max-w-2xl stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
123
|
-
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-
|
|
124
|
+
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-backdrop" : "stg:relative",
|
|
124
125
|
)}
|
|
125
|
-
aria-labelledby=
|
|
126
|
+
aria-labelledby={titleId}
|
|
126
127
|
>
|
|
127
128
|
{/* Body mounts only while open so each opening fetches fresh —
|
|
128
129
|
approval statuses change on the provider's side at any time. */}
|
|
129
130
|
{open && (
|
|
130
131
|
<ChannelTemplatesDialogBody
|
|
132
|
+
titleId={titleId}
|
|
131
133
|
channel={channel}
|
|
132
134
|
onEditYaml={onEditYaml}
|
|
133
135
|
onClose={handleClose}
|
|
@@ -138,10 +140,12 @@ export function ChannelTemplatesDialog({
|
|
|
138
140
|
}
|
|
139
141
|
|
|
140
142
|
function ChannelTemplatesDialogBody({
|
|
143
|
+
titleId,
|
|
141
144
|
channel,
|
|
142
145
|
onEditYaml,
|
|
143
146
|
onClose,
|
|
144
147
|
}: {
|
|
148
|
+
readonly titleId: string;
|
|
145
149
|
readonly channel: AgentChannel;
|
|
146
150
|
readonly onEditYaml?: () => void;
|
|
147
151
|
readonly onClose: () => void;
|
|
@@ -154,7 +158,7 @@ function ChannelTemplatesDialogBody({
|
|
|
154
158
|
<div className="stg:flex stg:items-start stg:justify-between stg:gap-3 stg:border-b stg:border-border stg:px-5 stg:py-4">
|
|
155
159
|
<div className="stg:min-w-0">
|
|
156
160
|
<h2
|
|
157
|
-
id=
|
|
161
|
+
id={titleId}
|
|
158
162
|
className="stg:text-sm stg:font-semibold stg:text-popover-foreground"
|
|
159
163
|
>
|
|
160
164
|
Templates
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { useCallback, useId, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getErrorReason, type ResourceRef } from "@stigmer/sdk";
|
|
6
6
|
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
@@ -91,6 +91,12 @@ export function ConnectSlackDialog({
|
|
|
91
91
|
}: ConnectSlackDialogProps) {
|
|
92
92
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
93
93
|
|
|
94
|
+
// Instance-scoped title id (oss#593): a reusable component must not
|
|
95
|
+
// hardcode DOM ids — hosts legitimately mount this dialog more than once
|
|
96
|
+
// per page (e.g. zone-cached detail pages), and duplicate ids break the
|
|
97
|
+
// aria-labelledby association for every copy after the first.
|
|
98
|
+
const titleId = useId();
|
|
99
|
+
|
|
94
100
|
const handleClose = useCallback(() => {
|
|
95
101
|
dialogRef.current?.close();
|
|
96
102
|
onOpenChange(false);
|
|
@@ -120,9 +126,9 @@ export function ConnectSlackDialog({
|
|
|
120
126
|
onClose={handleClose}
|
|
121
127
|
className={cn(
|
|
122
128
|
"stg:w-full stg:max-w-md stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
123
|
-
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-
|
|
129
|
+
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-backdrop" : "stg:relative",
|
|
124
130
|
)}
|
|
125
|
-
aria-labelledby=
|
|
131
|
+
aria-labelledby={titleId}
|
|
126
132
|
>
|
|
127
133
|
{/* Body mounts only while open so its flow state resets per
|
|
128
134
|
session — reopening the dialog never resumes a stale flow. */}
|
|
@@ -132,6 +138,7 @@ export function ConnectSlackDialog({
|
|
|
132
138
|
channel={channel ?? null}
|
|
133
139
|
onChannelsChanged={onChannelsChanged}
|
|
134
140
|
onClose={handleClose}
|
|
141
|
+
titleId={titleId}
|
|
135
142
|
channelAppsHref={channelAppsHref}
|
|
136
143
|
/>
|
|
137
144
|
)}
|
|
@@ -149,6 +156,8 @@ interface ConnectSlackDialogBodyProps {
|
|
|
149
156
|
readonly onChannelsChanged?: () => void;
|
|
150
157
|
readonly onClose: () => void;
|
|
151
158
|
readonly channelAppsHref?: string;
|
|
159
|
+
/** Heading id minted by the outer dialog for its aria-labelledby. */
|
|
160
|
+
readonly titleId: string;
|
|
152
161
|
}
|
|
153
162
|
|
|
154
163
|
function ConnectSlackDialogBody({
|
|
@@ -157,6 +166,7 @@ function ConnectSlackDialogBody({
|
|
|
157
166
|
onChannelsChanged,
|
|
158
167
|
onClose,
|
|
159
168
|
channelAppsHref,
|
|
169
|
+
titleId,
|
|
160
170
|
}: ConnectSlackDialogBodyProps) {
|
|
161
171
|
const deploymentMode = useDeploymentMode();
|
|
162
172
|
const agentName = agent.metadata?.name || agent.metadata?.slug || "this agent";
|
|
@@ -276,7 +286,7 @@ function ConnectSlackDialogBody({
|
|
|
276
286
|
<div className="stg:flex stg:items-start stg:justify-between stg:gap-3 stg:border-b stg:border-border stg:px-5 stg:py-4">
|
|
277
287
|
<div className="stg:flex stg:items-center stg:gap-2.5">
|
|
278
288
|
<SlackMarkIcon className="stg:size-5 stg:text-foreground" />
|
|
279
|
-
<h2 id=
|
|
289
|
+
<h2 id={titleId} className="stg:text-sm stg:font-semibold stg:text-foreground">
|
|
280
290
|
{channel ? "Reconnect to Slack" : "Connect to Slack"}
|
|
281
291
|
</h2>
|
|
282
292
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { useCallback, useId, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getErrorReason, type ResourceRef } from "@stigmer/sdk";
|
|
6
6
|
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
@@ -102,6 +102,12 @@ export function ConnectWhatsAppDialog({
|
|
|
102
102
|
}: ConnectWhatsAppDialogProps) {
|
|
103
103
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
104
104
|
|
|
105
|
+
// Instance-scoped title id (oss#593): a reusable component must not
|
|
106
|
+
// hardcode DOM ids — hosts legitimately mount this dialog more than once
|
|
107
|
+
// per page (e.g. zone-cached detail pages), and duplicate ids break the
|
|
108
|
+
// aria-labelledby association for every copy after the first.
|
|
109
|
+
const titleId = useId();
|
|
110
|
+
|
|
105
111
|
const handleClose = useCallback(() => {
|
|
106
112
|
dialogRef.current?.close();
|
|
107
113
|
onOpenChange(false);
|
|
@@ -131,9 +137,9 @@ export function ConnectWhatsAppDialog({
|
|
|
131
137
|
onClose={handleClose}
|
|
132
138
|
className={cn(
|
|
133
139
|
"stg:w-full stg:max-w-md stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:shadow-xl",
|
|
134
|
-
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-
|
|
140
|
+
modal ? "stg:fixed stg:inset-0 stg:m-auto stg:backdrop:bg-backdrop" : "stg:relative",
|
|
135
141
|
)}
|
|
136
|
-
aria-labelledby=
|
|
142
|
+
aria-labelledby={titleId}
|
|
137
143
|
>
|
|
138
144
|
{/* Body mounts only while open so its flow state resets per
|
|
139
145
|
session — reopening the dialog never resumes a stale flow. */}
|
|
@@ -144,6 +150,7 @@ export function ConnectWhatsAppDialog({
|
|
|
144
150
|
onChannelsChanged={onChannelsChanged}
|
|
145
151
|
onClose={handleClose}
|
|
146
152
|
channelAppsHref={channelAppsHref}
|
|
153
|
+
titleId={titleId}
|
|
147
154
|
/>
|
|
148
155
|
)}
|
|
149
156
|
</dialog>
|
|
@@ -160,6 +167,8 @@ interface ConnectWhatsAppDialogBodyProps {
|
|
|
160
167
|
readonly onChannelsChanged?: () => void;
|
|
161
168
|
readonly onClose: () => void;
|
|
162
169
|
readonly channelAppsHref?: string;
|
|
170
|
+
/** Heading id minted by the outer dialog for its aria-labelledby. */
|
|
171
|
+
readonly titleId: string;
|
|
163
172
|
}
|
|
164
173
|
|
|
165
174
|
function ConnectWhatsAppDialogBody({
|
|
@@ -168,6 +177,7 @@ function ConnectWhatsAppDialogBody({
|
|
|
168
177
|
onChannelsChanged,
|
|
169
178
|
onClose,
|
|
170
179
|
channelAppsHref,
|
|
180
|
+
titleId,
|
|
171
181
|
}: ConnectWhatsAppDialogBodyProps) {
|
|
172
182
|
const stigmer = useStigmer();
|
|
173
183
|
const deploymentMode = useDeploymentMode();
|
|
@@ -314,7 +324,7 @@ function ConnectWhatsAppDialogBody({
|
|
|
314
324
|
<div className="stg:flex stg:items-start stg:justify-between stg:gap-3 stg:border-b stg:border-border stg:px-5 stg:py-4">
|
|
315
325
|
<div className="stg:flex stg:items-center stg:gap-2.5">
|
|
316
326
|
<WhatsAppMarkIcon className="stg:size-5 stg:text-foreground" />
|
|
317
|
-
<h2 id=
|
|
327
|
+
<h2 id={titleId} className="stg:text-sm stg:font-semibold stg:text-foreground">
|
|
318
328
|
{channel ? "Reconnect to WhatsApp" : "Connect to WhatsApp"}
|
|
319
329
|
</h2>
|
|
320
330
|
</div>
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { create } from "@bufbuild/protobuf";
|
|
4
|
+
// AgentChannel is type-only here so the doc link below resolves (the sibling
|
|
5
|
+
// channel hooks import it for real use); the strict tsdoc gate guards it.
|
|
6
|
+
import type { AgentChannel } from "@stigmer/protos/ai/stigmer/agentic/agentchannel/v1/api_pb";
|
|
4
7
|
import type { Session } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_pb";
|
|
5
8
|
import { ListSessionsByChannelRequestSchema } from "@stigmer/protos/ai/stigmer/agentic/session/v1/io_pb";
|
|
6
9
|
import { useStigmer } from "../hooks.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useMemo, useState
|
|
3
|
+
import { type FormEvent, useCallback, useId, useMemo, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
6
|
import type { ChannelApp } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/api_pb";
|
|
@@ -17,7 +17,8 @@ import {
|
|
|
17
17
|
WHATSAPP_CHANNEL_APP_WEBHOOK_FIELDS,
|
|
18
18
|
whatsappChannelAppWebhookUrl,
|
|
19
19
|
} from "./whatsappAppSetup.js";
|
|
20
|
-
import { CopyBlock, CopyRow, FormField
|
|
20
|
+
import { CopyBlock, CopyRow, FormField } from "./internal.js";
|
|
21
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
21
22
|
|
|
22
23
|
// ---------------------------------------------------------------------------
|
|
23
24
|
// Public API
|
|
@@ -148,7 +149,7 @@ export function ChannelAppDetailPanel({
|
|
|
148
149
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
149
150
|
)}
|
|
150
151
|
>
|
|
151
|
-
{isDeleting && <SpinnerIcon />}
|
|
152
|
+
{isDeleting && <SpinnerIcon size={12} />}
|
|
152
153
|
Delete
|
|
153
154
|
</button>
|
|
154
155
|
<button
|
|
@@ -187,6 +188,7 @@ function SlackAppDetail({
|
|
|
187
188
|
readonly consoleOrigin?: string;
|
|
188
189
|
readonly onUpdated?: (app: ChannelApp) => void;
|
|
189
190
|
}) {
|
|
191
|
+
const baseId = useId();
|
|
190
192
|
const stigmer = useStigmer();
|
|
191
193
|
const { update, isUpdating, error: updateError, clearError } = useUpdateChannelApp();
|
|
192
194
|
|
|
@@ -277,7 +279,7 @@ function SlackAppDetail({
|
|
|
277
279
|
</p>
|
|
278
280
|
|
|
279
281
|
<FormField
|
|
280
|
-
id=
|
|
282
|
+
id={`${baseId}-client-id`}
|
|
281
283
|
label="Client ID"
|
|
282
284
|
value={clientId}
|
|
283
285
|
onChange={setClientId}
|
|
@@ -286,7 +288,7 @@ function SlackAppDetail({
|
|
|
286
288
|
required
|
|
287
289
|
/>
|
|
288
290
|
<FormField
|
|
289
|
-
id=
|
|
291
|
+
id={`${baseId}-client-secret`}
|
|
290
292
|
label="Client secret"
|
|
291
293
|
value={clientSecret}
|
|
292
294
|
onChange={setClientSecret}
|
|
@@ -296,7 +298,7 @@ function SlackAppDetail({
|
|
|
296
298
|
required
|
|
297
299
|
/>
|
|
298
300
|
<FormField
|
|
299
|
-
id=
|
|
301
|
+
id={`${baseId}-signing-secret`}
|
|
300
302
|
label="Signing secret"
|
|
301
303
|
value={signingSecret}
|
|
302
304
|
onChange={setSigningSecret}
|
|
@@ -321,7 +323,7 @@ function SlackAppDetail({
|
|
|
321
323
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
322
324
|
)}
|
|
323
325
|
>
|
|
324
|
-
{isUpdating && <SpinnerIcon />}
|
|
326
|
+
{isUpdating && <SpinnerIcon size={12} />}
|
|
325
327
|
Save credentials
|
|
326
328
|
</button>
|
|
327
329
|
</form>
|
|
@@ -342,6 +344,7 @@ function WhatsAppAppDetail({
|
|
|
342
344
|
readonly createHandoff?: ChannelAppCreateHandoff;
|
|
343
345
|
readonly onUpdated?: (app: ChannelApp) => void;
|
|
344
346
|
}) {
|
|
347
|
+
const baseId = useId();
|
|
345
348
|
const stigmer = useStigmer();
|
|
346
349
|
const { update, isUpdating, error: updateError, clearError } = useUpdateChannelApp();
|
|
347
350
|
|
|
@@ -446,7 +449,7 @@ function WhatsAppAppDetail({
|
|
|
446
449
|
</p>
|
|
447
450
|
|
|
448
451
|
<FormField
|
|
449
|
-
id=
|
|
452
|
+
id={`${baseId}-app-id`}
|
|
450
453
|
label="App ID"
|
|
451
454
|
value={metaAppId}
|
|
452
455
|
onChange={setMetaAppId}
|
|
@@ -455,7 +458,7 @@ function WhatsAppAppDetail({
|
|
|
455
458
|
required
|
|
456
459
|
/>
|
|
457
460
|
<FormField
|
|
458
|
-
id=
|
|
461
|
+
id={`${baseId}-app-secret`}
|
|
459
462
|
label="App secret"
|
|
460
463
|
value={appSecret}
|
|
461
464
|
onChange={setAppSecret}
|
|
@@ -465,7 +468,7 @@ function WhatsAppAppDetail({
|
|
|
465
468
|
required
|
|
466
469
|
/>
|
|
467
470
|
<FormField
|
|
468
|
-
id=
|
|
471
|
+
id={`${baseId}-access-token`}
|
|
469
472
|
label="Access token"
|
|
470
473
|
value={accessToken}
|
|
471
474
|
onChange={setAccessToken}
|
|
@@ -475,7 +478,7 @@ function WhatsAppAppDetail({
|
|
|
475
478
|
required
|
|
476
479
|
/>
|
|
477
480
|
<FormField
|
|
478
|
-
id=
|
|
481
|
+
id={`${baseId}-verify-token`}
|
|
479
482
|
label="Verify token"
|
|
480
483
|
value={verifyToken}
|
|
481
484
|
onChange={setVerifyToken}
|
|
@@ -501,7 +504,7 @@ function WhatsAppAppDetail({
|
|
|
501
504
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
502
505
|
)}
|
|
503
506
|
>
|
|
504
|
-
{isUpdating && <SpinnerIcon />}
|
|
507
|
+
{isUpdating && <SpinnerIcon size={12} />}
|
|
505
508
|
Save credentials
|
|
506
509
|
</button>
|
|
507
510
|
</form>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useMemo, useState
|
|
3
|
+
import { type FormEvent, useCallback, useId, useMemo, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
6
|
import type { ChannelApp } from "@stigmer/protos/ai/stigmer/agentic/channelapp/v1/api_pb";
|
|
@@ -14,7 +14,8 @@ import {
|
|
|
14
14
|
slackChannelAppRedirectUrl,
|
|
15
15
|
} from "./slackAppSetup.js";
|
|
16
16
|
import { generateWhatsAppVerifyToken } from "./whatsappAppSetup.js";
|
|
17
|
-
import { CopyBlock, FormField
|
|
17
|
+
import { CopyBlock, FormField } from "./internal.js";
|
|
18
|
+
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
18
19
|
|
|
19
20
|
// ---------------------------------------------------------------------------
|
|
20
21
|
// Public API
|
|
@@ -80,6 +81,7 @@ export function CreateChannelAppForm({
|
|
|
80
81
|
onCancel,
|
|
81
82
|
className,
|
|
82
83
|
}: CreateChannelAppFormProps) {
|
|
84
|
+
const baseId = useId();
|
|
83
85
|
const { create, isCreating, error, clearError } = useCreateChannelApp();
|
|
84
86
|
|
|
85
87
|
const [provider, setProvider] = useState<ChannelProviderId>("slack");
|
|
@@ -185,7 +187,7 @@ export function CreateChannelAppForm({
|
|
|
185
187
|
/>
|
|
186
188
|
|
|
187
189
|
<FormField
|
|
188
|
-
id=
|
|
190
|
+
id={`${baseId}-name`}
|
|
189
191
|
label="Name"
|
|
190
192
|
value={name}
|
|
191
193
|
onChange={setName}
|
|
@@ -241,7 +243,7 @@ export function CreateChannelAppForm({
|
|
|
241
243
|
"stg:disabled:pointer-events-none stg:disabled:opacity-40",
|
|
242
244
|
)}
|
|
243
245
|
>
|
|
244
|
-
{isCreating && <SpinnerIcon />}
|
|
246
|
+
{isCreating && <SpinnerIcon size={12} />}
|
|
245
247
|
Register channel app
|
|
246
248
|
</button>
|
|
247
249
|
|
|
@@ -282,6 +284,7 @@ function ProviderPicker({
|
|
|
282
284
|
readonly onChange: (id: ChannelProviderId) => void;
|
|
283
285
|
readonly disabled: boolean;
|
|
284
286
|
}) {
|
|
287
|
+
const groupName = useId();
|
|
285
288
|
return (
|
|
286
289
|
<fieldset>
|
|
287
290
|
<legend className="stg:mb-1.5 stg:block stg:text-xs stg:font-medium stg:text-foreground">
|
|
@@ -303,7 +306,7 @@ function ProviderPicker({
|
|
|
303
306
|
<input
|
|
304
307
|
id={`stgm-chapp-provider-${p.id}`}
|
|
305
308
|
type="radio"
|
|
306
|
-
name=
|
|
309
|
+
name={`${groupName}-provider`}
|
|
307
310
|
checked={checked}
|
|
308
311
|
onChange={() => onChange(p.id)}
|
|
309
312
|
disabled={disabled}
|
|
@@ -342,6 +345,7 @@ function SlackCreateSection({
|
|
|
342
345
|
readonly onSigningSecretChange: (v: string) => void;
|
|
343
346
|
readonly disabled: boolean;
|
|
344
347
|
}) {
|
|
348
|
+
const baseId = useId();
|
|
345
349
|
return (
|
|
346
350
|
<>
|
|
347
351
|
<div className="stg:space-y-1.5">
|
|
@@ -380,7 +384,7 @@ function SlackCreateSection({
|
|
|
380
384
|
</p>
|
|
381
385
|
|
|
382
386
|
<FormField
|
|
383
|
-
id=
|
|
387
|
+
id={`${baseId}-client-id`}
|
|
384
388
|
label="Client ID"
|
|
385
389
|
value={clientId}
|
|
386
390
|
onChange={onClientIdChange}
|
|
@@ -390,7 +394,7 @@ function SlackCreateSection({
|
|
|
390
394
|
/>
|
|
391
395
|
|
|
392
396
|
<FormField
|
|
393
|
-
id=
|
|
397
|
+
id={`${baseId}-client-secret`}
|
|
394
398
|
label="Client secret"
|
|
395
399
|
value={clientSecret}
|
|
396
400
|
onChange={onClientSecretChange}
|
|
@@ -401,7 +405,7 @@ function SlackCreateSection({
|
|
|
401
405
|
/>
|
|
402
406
|
|
|
403
407
|
<FormField
|
|
404
|
-
id=
|
|
408
|
+
id={`${baseId}-signing-secret`}
|
|
405
409
|
label="Signing secret"
|
|
406
410
|
value={signingSecret}
|
|
407
411
|
onChange={onSigningSecretChange}
|
|
@@ -441,6 +445,7 @@ function WhatsAppCreateSection({
|
|
|
441
445
|
readonly onVerifyTokenChange: (v: string) => void;
|
|
442
446
|
readonly disabled: boolean;
|
|
443
447
|
}) {
|
|
448
|
+
const baseId = useId();
|
|
444
449
|
return (
|
|
445
450
|
<>
|
|
446
451
|
<div className="stg:space-y-1.5">
|
|
@@ -476,7 +481,7 @@ function WhatsAppCreateSection({
|
|
|
476
481
|
</p>
|
|
477
482
|
|
|
478
483
|
<FormField
|
|
479
|
-
id=
|
|
484
|
+
id={`${baseId}-app-id`}
|
|
480
485
|
label="App ID"
|
|
481
486
|
value={appId}
|
|
482
487
|
onChange={onAppIdChange}
|
|
@@ -486,7 +491,7 @@ function WhatsAppCreateSection({
|
|
|
486
491
|
/>
|
|
487
492
|
|
|
488
493
|
<FormField
|
|
489
|
-
id=
|
|
494
|
+
id={`${baseId}-app-secret`}
|
|
490
495
|
label="App secret"
|
|
491
496
|
value={appSecret}
|
|
492
497
|
onChange={onAppSecretChange}
|
|
@@ -498,7 +503,7 @@ function WhatsAppCreateSection({
|
|
|
498
503
|
/>
|
|
499
504
|
|
|
500
505
|
<FormField
|
|
501
|
-
id=
|
|
506
|
+
id={`${baseId}-access-token`}
|
|
502
507
|
label="Access token"
|
|
503
508
|
value={accessToken}
|
|
504
509
|
onChange={onAccessTokenChange}
|
|
@@ -510,7 +515,7 @@ function WhatsAppCreateSection({
|
|
|
510
515
|
/>
|
|
511
516
|
|
|
512
517
|
<FormField
|
|
513
|
-
id=
|
|
518
|
+
id={`${baseId}-verify-token`}
|
|
514
519
|
label="Verify token"
|
|
515
520
|
value={verifyToken}
|
|
516
521
|
onChange={onVerifyTokenChange}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback
|
|
3
|
+
import { useCallback } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { TruncatedText } from "../internal/truncated-text.js";
|
|
6
|
+
import { useCopyFeedback } from "../internal/useCopyFeedback.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Internal building blocks shared by the channel-app forms and panels.
|
|
@@ -148,32 +149,11 @@ function CopyButton({
|
|
|
148
149
|
}
|
|
149
150
|
|
|
150
151
|
function useCopy(value: string) {
|
|
151
|
-
const
|
|
152
|
+
const { copy: copyText, copied } = useCopyFeedback();
|
|
152
153
|
|
|
153
154
|
const copy = useCallback(() => {
|
|
154
|
-
void
|
|
155
|
-
|
|
156
|
-
window.setTimeout(() => setCopied(false), 1500);
|
|
157
|
-
});
|
|
158
|
-
}, [value]);
|
|
155
|
+
void copyText(value);
|
|
156
|
+
}, [copyText, value]);
|
|
159
157
|
|
|
160
158
|
return { copied, copy };
|
|
161
159
|
}
|
|
162
|
-
|
|
163
|
-
export function SpinnerIcon() {
|
|
164
|
-
return (
|
|
165
|
-
<svg
|
|
166
|
-
width="12"
|
|
167
|
-
height="12"
|
|
168
|
-
viewBox="0 0 16 16"
|
|
169
|
-
fill="none"
|
|
170
|
-
stroke="currentColor"
|
|
171
|
-
strokeWidth="2"
|
|
172
|
-
strokeLinecap="round"
|
|
173
|
-
className="stg:animate-spin"
|
|
174
|
-
aria-hidden="true"
|
|
175
|
-
>
|
|
176
|
-
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
177
|
-
</svg>
|
|
178
|
-
);
|
|
179
|
-
}
|