@stigmer/react 3.12.1 → 3.12.3
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 +8 -19
- 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 +15 -20
- 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/AttachmentImageLightbox.d.ts.map +1 -1
- package/attachment/AttachmentImageLightbox.js +8 -23
- package/attachment/AttachmentImageLightbox.js.map +1 -1
- 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 +6 -21
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelCredentialsDialog.d.ts.map +1 -1
- package/channel/ChannelCredentialsDialog.js +10 -21
- package/channel/ChannelCredentialsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +7 -22
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel/ConnectSlackDialog.d.ts.map +1 -1
- package/channel/ConnectSlackDialog.js +10 -23
- package/channel/ConnectSlackDialog.js.map +1 -1
- package/channel/ConnectWhatsAppDialog.d.ts.map +1 -1
- package/channel/ConnectWhatsAppDialog.js +10 -23
- 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/ConversationAttentionBanner.d.ts +23 -6
- package/conversation/ConversationAttentionBanner.d.ts.map +1 -1
- package/conversation/ConversationAttentionBanner.js +25 -10
- package/conversation/ConversationAttentionBanner.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 +28 -8
- package/conversation/ConversationListPane.js.map +1 -1
- package/conversation/ConversationsWorkbench.d.ts.map +1 -1
- package/conversation/ConversationsWorkbench.js +1 -1
- package/conversation/ConversationsWorkbench.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/ApprovalCard.d.ts.map +1 -1
- package/execution/ApprovalCard.js +13 -3
- package/execution/ApprovalCard.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/ArtifactPreviewModal.d.ts.map +1 -1
- package/execution/ArtifactPreviewModal.js +11 -17
- package/execution/ArtifactPreviewModal.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 +23 -7
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +120 -35
- 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 +7 -3
- package/execution/index.d.ts.map +1 -1
- package/execution/index.js +4 -2
- package/execution/index.js.map +1 -1
- package/execution/tool-categories.d.ts +93 -7
- package/execution/tool-categories.d.ts.map +1 -1
- package/execution/tool-categories.js +141 -5
- package/execution/tool-categories.js.map +1 -1
- package/execution/tool-presenter.d.ts +32 -1
- package/execution/tool-presenter.d.ts.map +1 -1
- package/execution/tool-presenter.js +10 -2
- 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/DialogShell.d.ts +77 -0
- package/internal/DialogShell.d.ts.map +1 -0
- package/internal/DialogShell.js +77 -0
- package/internal/DialogShell.js.map +1 -0
- 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.d.ts.map +1 -1
- package/manifest/ApplyManifestDialog.js +7 -17
- package/manifest/ApplyManifestDialog.js.map +1 -1
- package/manifest/EditResourceYamlDialog.d.ts.map +1 -1
- package/manifest/EditResourceYamlDialog.js +3 -19
- package/manifest/EditResourceYamlDialog.js.map +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.d.ts.map +1 -1
- package/mcp-server/McpServerConnectDialog.js +8 -20
- package/mcp-server/McpServerConnectDialog.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +50 -28
- 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.d.ts +2 -3
- package/resource-detail/ConfirmDialog.d.ts.map +1 -1
- package/resource-detail/ConfirmDialog.js +8 -20
- package/resource-detail/ConfirmDialog.js.map +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 +19 -26
- 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.d.ts.map +1 -1
- package/skill/SkillDiffDialog.js +5 -21
- package/skill/SkillDiffDialog.js.map +1 -1
- package/src/access/ManageAccessDialog.tsx +14 -28
- 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 +29 -33
- 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/AttachmentImageLightbox.tsx +13 -36
- 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 +14 -29
- package/src/channel/ChannelCredentialsDialog.tsx +19 -29
- package/src/channel/ChannelTemplatesDialog.tsx +16 -31
- package/src/channel/ConnectSlackDialog.tsx +19 -31
- package/src/channel/ConnectWhatsAppDialog.tsx +19 -31
- 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/ConversationAttentionBanner.tsx +64 -19
- package/src/conversation/ConversationComposer.tsx +1 -1
- package/src/conversation/ConversationListPane.tsx +46 -20
- package/src/conversation/ConversationsWorkbench.tsx +1 -0
- package/src/conversation/__tests__/ConversationAttentionBanner.test.tsx +76 -2
- package/src/conversation/__tests__/ConversationListPane.test.tsx +15 -4
- 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/ApprovalCard.tsx +23 -2
- package/src/execution/ArtifactApplyButton.tsx +2 -17
- package/src/execution/ArtifactPreviewModal.tsx +15 -27
- 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 +175 -44
- 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__/intent-title.test.tsx +221 -0
- 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 +11 -2
- package/src/execution/tool-categories.ts +195 -9
- package/src/execution/tool-presenter.ts +44 -2
- 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 +26 -1
- package/src/internal/DecisionButton.tsx +1 -20
- package/src/internal/DialogShell.tsx +169 -0
- package/src/internal/SpinnerIcon.tsx +42 -0
- package/src/internal/__tests__/DialogShell.test.tsx +223 -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 +8 -26
- package/src/manifest/EditResourceYamlDialog.tsx +4 -31
- package/src/mcp-server/DefinitionDriftNotice.tsx +120 -0
- package/src/mcp-server/McpServerConnectDialog.tsx +15 -29
- package/src/mcp-server/McpServerDetailView.tsx +69 -49
- 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 +9 -30
- 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 +33 -37
- package/src/sidebar/__tests__/WorkspaceSidebar.test.tsx +4 -1
- package/src/sidebar/chrome.tsx +6 -6
- package/src/skill/SkillDiffDialog.tsx +13 -36
- 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 +21 -55
- package/src/workflow/WorkflowArchitectDialog.tsx +17 -68
- 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 +18 -60
- package/src/workflow/WorkflowGraphFullscreenDialog.tsx +14 -26
- 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 +23 -70
- 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 +20 -41
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +1 -25
- package/src/workflow/index.ts +1 -0
- package/src/workflow/instance/CreateWorkflowInstanceDialog.tsx +14 -27
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +2 -1
- package/src/workflow/picker/BranchAddPopover.tsx +4 -3
- package/src/workflow/templates/WorkflowTemplatePreview.tsx +18 -28
- 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 +14 -49
- package/workflow/ViewYamlDialog.js.map +1 -1
- package/workflow/WorkflowArchitectDialog.d.ts.map +1 -1
- package/workflow/WorkflowArchitectDialog.js +10 -33
- 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 +10 -28
- package/workflow/WorkflowExplainDialog.js.map +1 -1
- package/workflow/WorkflowGraphFullscreenDialog.d.ts.map +1 -1
- package/workflow/WorkflowGraphFullscreenDialog.js +11 -17
- package/workflow/WorkflowGraphFullscreenDialog.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 +14 -35
- 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 +14 -40
- 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.d.ts.map +1 -1
- package/workflow/instance/CreateWorkflowInstanceDialog.js +7 -20
- package/workflow/instance/CreateWorkflowInstanceDialog.js.map +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.d.ts +1 -1
- package/workflow/templates/WorkflowTemplatePreview.d.ts.map +1 -1
- package/workflow/templates/WorkflowTemplatePreview.js +10 -22
- package/workflow/templates/WorkflowTemplatePreview.js.map +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
package/src/index.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Provider and context
|
|
2
2
|
export { StigmerProvider, type StigmerProviderProps } from "./provider.js";
|
|
3
|
+
export { type ApprovalDefaults } from "./approval-defaults-context.js";
|
|
3
4
|
export { StigmerContext } from "./context.js";
|
|
4
5
|
|
|
5
6
|
// Runner adapter
|
|
@@ -39,7 +40,9 @@ export {
|
|
|
39
40
|
modelKey,
|
|
40
41
|
parseModelKey,
|
|
41
42
|
fetchModelRegistry,
|
|
43
|
+
fetchModelRegistryDocument,
|
|
42
44
|
parseRegistryJson,
|
|
45
|
+
parseRegistryDocument,
|
|
43
46
|
useModelRegistry,
|
|
44
47
|
ModelRegistryContext,
|
|
45
48
|
ModelSelector,
|
|
@@ -51,6 +54,7 @@ export {
|
|
|
51
54
|
} from "./models/index.js";
|
|
52
55
|
export type {
|
|
53
56
|
ModelInfo,
|
|
57
|
+
ModelRegistryDocument,
|
|
54
58
|
ModelRegistryState,
|
|
55
59
|
ParsedModelKey,
|
|
56
60
|
Provider,
|
|
@@ -60,6 +64,7 @@ export type {
|
|
|
60
64
|
ModelSelectorProps,
|
|
61
65
|
HarnessSelectorProps,
|
|
62
66
|
HarnessOption,
|
|
67
|
+
VisionLimits,
|
|
63
68
|
} from "./models/index.js";
|
|
64
69
|
|
|
65
70
|
// Workspace — behavior hooks and styled components
|
|
@@ -215,6 +220,7 @@ export type {
|
|
|
215
220
|
ExecutionTargetOption,
|
|
216
221
|
RuntimeEnvProvider,
|
|
217
222
|
SessionAudience,
|
|
223
|
+
SessionPanelMode,
|
|
218
224
|
SetupTabProps,
|
|
219
225
|
SetupTabMutationCallbacks,
|
|
220
226
|
} from "./session/index.js";
|
|
@@ -257,6 +263,7 @@ export {
|
|
|
257
263
|
ExecutionPhaseBadge,
|
|
258
264
|
InteractionModeBadge,
|
|
259
265
|
SetupProgress,
|
|
266
|
+
LivenessStatusLine,
|
|
260
267
|
ExecutionProgress,
|
|
261
268
|
TodoList,
|
|
262
269
|
TodoCard,
|
|
@@ -279,6 +286,7 @@ export {
|
|
|
279
286
|
ResultView,
|
|
280
287
|
summarizeResultView,
|
|
281
288
|
TerminalSession,
|
|
289
|
+
TerminalTail,
|
|
282
290
|
useToolPresentation,
|
|
283
291
|
registerToolPresenter,
|
|
284
292
|
getToolPresenter,
|
|
@@ -288,6 +296,9 @@ export {
|
|
|
288
296
|
toolKindToCategoryInfo,
|
|
289
297
|
defaultDisclosureForCategory,
|
|
290
298
|
extractPrimaryArg,
|
|
299
|
+
extractShellIntent,
|
|
300
|
+
extractShellIntentFromPreview,
|
|
301
|
+
SHELL_INTENT_ARG_FIELD,
|
|
291
302
|
McpToolDetail,
|
|
292
303
|
parseMcpResult,
|
|
293
304
|
formatDuration,
|
|
@@ -296,6 +307,7 @@ export {
|
|
|
296
307
|
SubAgentSection,
|
|
297
308
|
MessageEntry,
|
|
298
309
|
MessageThread,
|
|
310
|
+
ExecutionErrorNotice,
|
|
299
311
|
ThreadSkeleton,
|
|
300
312
|
FollowUpInput,
|
|
301
313
|
ApprovalCard,
|
|
@@ -380,6 +392,7 @@ export type {
|
|
|
380
392
|
ExecutionPhaseBadgeProps,
|
|
381
393
|
InteractionModeBadgeProps,
|
|
382
394
|
SetupProgressProps,
|
|
395
|
+
LivenessStatusLineProps,
|
|
383
396
|
ExecutionProgressProps,
|
|
384
397
|
TodoListProps,
|
|
385
398
|
TodoCardProps,
|
|
@@ -398,6 +411,7 @@ export type {
|
|
|
398
411
|
ToolCallDetailProps,
|
|
399
412
|
ResultViewProps,
|
|
400
413
|
TerminalSessionProps,
|
|
414
|
+
TerminalTailProps,
|
|
401
415
|
ToolPresentation,
|
|
402
416
|
ToolPresenter,
|
|
403
417
|
ToolDisclosure,
|
|
@@ -409,6 +423,8 @@ export type {
|
|
|
409
423
|
SubAgentSectionProps,
|
|
410
424
|
MessageEntryProps,
|
|
411
425
|
MessageThreadProps,
|
|
426
|
+
MessageThreadSlots,
|
|
427
|
+
ExecutionErrorNoticeProps,
|
|
412
428
|
ThreadContentColumn,
|
|
413
429
|
ThreadSkeletonProps,
|
|
414
430
|
FollowUpInputProps,
|
|
@@ -466,13 +482,14 @@ export type { ExecutionArtifact } from "@stigmer/protos/ai/stigmer/agentic/agent
|
|
|
466
482
|
export { ExecutionArtifactKind } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
|
|
467
483
|
|
|
468
484
|
// Attachment — file upload behavior hook, styled chip list, clipboard paste,
|
|
469
|
-
//
|
|
485
|
+
// vision-resolution image preparation, and vision preflight warnings
|
|
470
486
|
export {
|
|
471
487
|
useAttachments,
|
|
472
488
|
AttachmentChipList,
|
|
473
489
|
MAX_ATTACHMENT_BYTES,
|
|
474
490
|
MAX_VISION_LONG_EDGE_PX,
|
|
475
491
|
MAX_VISION_PIXELS,
|
|
492
|
+
assessVisionPreflight,
|
|
476
493
|
detectContentType,
|
|
477
494
|
exceedsVisionResolution,
|
|
478
495
|
extractClipboardFiles,
|
|
@@ -481,15 +498,22 @@ export {
|
|
|
481
498
|
prepareImageForVision,
|
|
482
499
|
uniquifyFilename,
|
|
483
500
|
validateAttachmentSize,
|
|
501
|
+
visionPreflightMessage,
|
|
484
502
|
} from "./attachment/index.js";
|
|
485
503
|
export type {
|
|
486
504
|
AttachmentPhase,
|
|
487
505
|
AttachmentEntry,
|
|
506
|
+
AssessVisionPreflightOptions,
|
|
488
507
|
ClipboardFilesSource,
|
|
489
508
|
UseAttachmentsOptions,
|
|
490
509
|
UseAttachmentsReturn,
|
|
491
510
|
AttachmentChipListProps,
|
|
492
511
|
VisionFitSize,
|
|
512
|
+
VisionPreflight,
|
|
513
|
+
VisionPreflightAttachment,
|
|
514
|
+
VisionPreflightMessageOptions,
|
|
515
|
+
VisionPreflightReason,
|
|
516
|
+
VisionPreflightWarning,
|
|
493
517
|
} from "./attachment/index.js";
|
|
494
518
|
|
|
495
519
|
// File Reference — workspace file-reference behavior hook and styled chip list
|
|
@@ -1868,6 +1892,7 @@ export type {
|
|
|
1868
1892
|
WorkflowTaskListProps,
|
|
1869
1893
|
WorkflowDetailViewProps,
|
|
1870
1894
|
WorkflowExecutionViewerProps,
|
|
1895
|
+
WorkflowExecutionPanelMode,
|
|
1871
1896
|
WorkflowExecutionHeaderProps,
|
|
1872
1897
|
WorkflowExecutionPanelController,
|
|
1873
1898
|
UseWorkflowExecutionPanelOptions,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { cn } from "@stigmer/theme";
|
|
4
|
+
import { SpinnerIcon } from "../internal/thread-card/glyphs.js";
|
|
4
5
|
|
|
5
6
|
/** The visual weight of a {@link DecisionButton}. */
|
|
6
7
|
export type DecisionVariant = "primary" | "ghost" | "danger";
|
|
@@ -106,23 +107,3 @@ export function DecisionButton({
|
|
|
106
107
|
);
|
|
107
108
|
}
|
|
108
109
|
|
|
109
|
-
// ---------------------------------------------------------------------------
|
|
110
|
-
// Inline SVG icon
|
|
111
|
-
// ---------------------------------------------------------------------------
|
|
112
|
-
|
|
113
|
-
function SpinnerIcon() {
|
|
114
|
-
return (
|
|
115
|
-
<svg
|
|
116
|
-
width="10"
|
|
117
|
-
height="10"
|
|
118
|
-
viewBox="0 0 12 12"
|
|
119
|
-
fill="none"
|
|
120
|
-
stroke="currentColor"
|
|
121
|
-
strokeWidth="1.5"
|
|
122
|
-
className="stg:animate-spin"
|
|
123
|
-
aria-hidden="true"
|
|
124
|
-
>
|
|
125
|
-
<path d="M6 1.5A4.5 4.5 0 1 1 1.5 6" strokeLinecap="round" />
|
|
126
|
-
</svg>
|
|
127
|
-
);
|
|
128
|
-
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
4
|
+
import type { MouseEvent, ReactNode, SyntheticEvent } from "react";
|
|
5
|
+
import { cn } from "@stigmer/theme";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Width presets for {@link DialogShell}, mapping to Tailwind `max-w-*`
|
|
9
|
+
* utilities. Free-form sizes (e.g. a lightbox's `85vw`) ride `className`,
|
|
10
|
+
* which wins over the preset via `cn()`'s tailwind-merge.
|
|
11
|
+
*/
|
|
12
|
+
export type DialogShellWidth = "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl";
|
|
13
|
+
|
|
14
|
+
const WIDTH_CLASS: Record<DialogShellWidth, string> = {
|
|
15
|
+
sm: "stg:max-w-sm",
|
|
16
|
+
md: "stg:max-w-md",
|
|
17
|
+
lg: "stg:max-w-lg",
|
|
18
|
+
xl: "stg:max-w-xl",
|
|
19
|
+
"2xl": "stg:max-w-2xl",
|
|
20
|
+
"3xl": "stg:max-w-3xl",
|
|
21
|
+
"4xl": "stg:max-w-4xl",
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/** Props for {@link DialogShell}. */
|
|
25
|
+
export interface DialogShellProps {
|
|
26
|
+
/** Whether the dialog is open (controlled — the SDK dialog convention). */
|
|
27
|
+
readonly open: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Called with `false` when the dialog should close: Escape / the platform
|
|
30
|
+
* cancel gesture, or a native close the host did not drive (e.g. a
|
|
31
|
+
* `method="dialog"` form submit). The shell never closes itself — state
|
|
32
|
+
* stays authoritative, so a host that ignores the callback keeps the
|
|
33
|
+
* dialog open (matching the pre-extraction per-dialog behavior).
|
|
34
|
+
*/
|
|
35
|
+
readonly onOpenChange: (open: boolean) => void;
|
|
36
|
+
/** Max-width preset (default `"md"`). See {@link DialogShellWidth}. */
|
|
37
|
+
readonly width?: DialogShellWidth;
|
|
38
|
+
/**
|
|
39
|
+
* Modal (default) renders in the top layer via `showModal()` — focus trap,
|
|
40
|
+
* Escape, and the token backdrop. `modal={false}` renders the dialog
|
|
41
|
+
* in-flow (`open` attribute, relative positioning, no backdrop, no focus
|
|
42
|
+
* trap) — the channel-dialog embedding mode.
|
|
43
|
+
*/
|
|
44
|
+
readonly modal?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Light dismiss: a click on the backdrop (the dialog element itself —
|
|
47
|
+
* clicks inside the content land on descendants) reports close intent.
|
|
48
|
+
* The house rule from the pre-extraction census: read-only viewers
|
|
49
|
+
* (diff/YAML/explain/lightbox/pickers) dismiss on backdrop, form dialogs
|
|
50
|
+
* do NOT — a stray click must never discard a half-filled form. Default
|
|
51
|
+
* `false`.
|
|
52
|
+
*/
|
|
53
|
+
readonly dismissOnBackdrop?: boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Merged after the shell's own chrome, so deliberate outliers (a
|
|
56
|
+
* lightbox's viewport sizing, a fullscreen graph's `h-[90vh]`, a
|
|
57
|
+
* `bg-background` surface) override the defaults per class.
|
|
58
|
+
*/
|
|
59
|
+
readonly className?: string;
|
|
60
|
+
/** Dialog content. Lazy-mounting bodies (`{open && …}`) stay caller-owned. */
|
|
61
|
+
readonly children: ReactNode;
|
|
62
|
+
/** Accessible name, when no visible heading labels the dialog. */
|
|
63
|
+
readonly "aria-label"?: string;
|
|
64
|
+
/** Id of the visible heading that labels the dialog. */
|
|
65
|
+
readonly "aria-labelledby"?: string;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The one dialog shell (stigmer#653). Owns everything every modal dialog in
|
|
70
|
+
* the SDK used to re-transcribe by hand: the `<dialog>` element and its
|
|
71
|
+
* `showModal()`/`close()` lifecycle, cancel/Escape wiring, the token
|
|
72
|
+
* backdrop (`--stgm-backdrop`), the open animation, and the base
|
|
73
|
+
* positioning/chrome — parameterized by {@link DialogShellWidth}.
|
|
74
|
+
*
|
|
75
|
+
* Converged chrome: `rounded-xl` + `shadow-xl` on the `popover` token
|
|
76
|
+
* surface (the token family for top-layer content). Before the extraction
|
|
77
|
+
* the 24 hand-rolled shells had drifted across `rounded-lg/xl`,
|
|
78
|
+
* `shadow-lg/xl/2xl`, three background tokens, two hardcoded backdrops that
|
|
79
|
+
* escaped the #652 fence, and animation classes present on some dialogs and
|
|
80
|
+
* missing from others.
|
|
81
|
+
*
|
|
82
|
+
* Internal on purpose — not exported from the package until a host needs it.
|
|
83
|
+
* The `stigmer/no-handrolled-dialog` lint rule fences new `<dialog>`
|
|
84
|
+
* elements onto this shell.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```tsx
|
|
88
|
+
* <DialogShell open={open} onOpenChange={setOpen} width="lg" aria-labelledby={titleId}>
|
|
89
|
+
* {open && <MyDialogBody titleId={titleId} onClose={() => setOpen(false)} />}
|
|
90
|
+
* </DialogShell>
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export function DialogShell({
|
|
94
|
+
open,
|
|
95
|
+
onOpenChange,
|
|
96
|
+
width = "md",
|
|
97
|
+
modal = true,
|
|
98
|
+
dismissOnBackdrop = false,
|
|
99
|
+
className,
|
|
100
|
+
children,
|
|
101
|
+
"aria-label": ariaLabel,
|
|
102
|
+
"aria-labelledby": ariaLabelledby,
|
|
103
|
+
}: DialogShellProps) {
|
|
104
|
+
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
105
|
+
|
|
106
|
+
// Sync the native top-layer state to the controlled prop. Runs on mount
|
|
107
|
+
// too, so a shell mounted with `open` already true shows immediately.
|
|
108
|
+
useEffect(() => {
|
|
109
|
+
const dialog = dialogRef.current;
|
|
110
|
+
if (!dialog || !modal) return;
|
|
111
|
+
if (open && !dialog.open) {
|
|
112
|
+
dialog.showModal();
|
|
113
|
+
} else if (!open && dialog.open) {
|
|
114
|
+
dialog.close();
|
|
115
|
+
}
|
|
116
|
+
}, [open, modal]);
|
|
117
|
+
|
|
118
|
+
// Escape / platform cancel: keep the native dialog open (preventDefault)
|
|
119
|
+
// and report the intent — the controlled `open` prop then drives the
|
|
120
|
+
// actual close through the effect above.
|
|
121
|
+
const handleCancel = useCallback(
|
|
122
|
+
(e: SyntheticEvent<HTMLDialogElement>) => {
|
|
123
|
+
e.preventDefault();
|
|
124
|
+
onOpenChange(false);
|
|
125
|
+
},
|
|
126
|
+
[onOpenChange],
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
// A native close the effect did not perform (e.g. a `method="dialog"`
|
|
130
|
+
// form submit) must not leave the controlled state stranded open.
|
|
131
|
+
const handleClose = useCallback(() => {
|
|
132
|
+
if (open) onOpenChange(false);
|
|
133
|
+
}, [open, onOpenChange]);
|
|
134
|
+
|
|
135
|
+
// Backdrop clicks hit the <dialog> element itself; clicks anywhere in the
|
|
136
|
+
// content land on a descendant, so the target check is exact.
|
|
137
|
+
const handleClick = useCallback(
|
|
138
|
+
(e: MouseEvent<HTMLDialogElement>) => {
|
|
139
|
+
if (e.target === e.currentTarget) onOpenChange(false);
|
|
140
|
+
},
|
|
141
|
+
[onOpenChange],
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
return (
|
|
145
|
+
<dialog
|
|
146
|
+
ref={dialogRef}
|
|
147
|
+
open={modal ? undefined : open || undefined}
|
|
148
|
+
onCancel={modal ? handleCancel : undefined}
|
|
149
|
+
onClose={modal ? handleClose : undefined}
|
|
150
|
+
onClick={modal && dismissOnBackdrop ? handleClick : undefined}
|
|
151
|
+
aria-label={ariaLabel}
|
|
152
|
+
aria-labelledby={ariaLabelledby}
|
|
153
|
+
className={cn(
|
|
154
|
+
"stg:w-full stg:rounded-xl stg:border stg:border-border stg:bg-popover stg:p-0 stg:text-popover-foreground stg:shadow-xl",
|
|
155
|
+
modal
|
|
156
|
+
? cn(
|
|
157
|
+
"stg:fixed stg:inset-0 stg:z-50 stg:m-auto",
|
|
158
|
+
"stg:backdrop:bg-backdrop",
|
|
159
|
+
"stg:open:animate-in stg:open:fade-in-0 stg:open:zoom-in-95",
|
|
160
|
+
)
|
|
161
|
+
: "stg:relative",
|
|
162
|
+
WIDTH_CLASS[width],
|
|
163
|
+
className,
|
|
164
|
+
)}
|
|
165
|
+
>
|
|
166
|
+
{children}
|
|
167
|
+
</dialog>
|
|
168
|
+
);
|
|
169
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { cn } from "@stigmer/theme";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The SDK's canonical in-flight spinner: a three-quarter arc on a 16×16
|
|
5
|
+
* grid, colored by `currentColor` so the consumer's text token drives it
|
|
6
|
+
* (never hardcoded values — Dont-Do #3). Extracted from ~33 identical
|
|
7
|
+
* per-component copies (stigmer-cloud#270); new busy states import this
|
|
8
|
+
* instead of pasting another one.
|
|
9
|
+
*
|
|
10
|
+
* `size` is the rendered box; the glyph scales from the same viewBox, so
|
|
11
|
+
* every size renders the identical shape. Decorative by contract
|
|
12
|
+
* (`aria-hidden`) — pair it with visible or `sr-only` text when the busy
|
|
13
|
+
* state itself must be announced.
|
|
14
|
+
*
|
|
15
|
+
* The thread-card rows deliberately use a finer quarter-arc micro-glyph
|
|
16
|
+
* instead — see `internal/thread-card/glyphs.tsx`.
|
|
17
|
+
*
|
|
18
|
+
* @internal Not part of the public API.
|
|
19
|
+
*/
|
|
20
|
+
export function SpinnerIcon({
|
|
21
|
+
size = 16,
|
|
22
|
+
className,
|
|
23
|
+
}: {
|
|
24
|
+
readonly size?: number;
|
|
25
|
+
readonly className?: string;
|
|
26
|
+
} = {}) {
|
|
27
|
+
return (
|
|
28
|
+
<svg
|
|
29
|
+
width={size}
|
|
30
|
+
height={size}
|
|
31
|
+
viewBox="0 0 16 16"
|
|
32
|
+
fill="none"
|
|
33
|
+
stroke="currentColor"
|
|
34
|
+
strokeWidth="2"
|
|
35
|
+
strokeLinecap="round"
|
|
36
|
+
className={cn("stg:animate-spin", className)}
|
|
37
|
+
aria-hidden="true"
|
|
38
|
+
>
|
|
39
|
+
<path d="M8 2a6 6 0 1 0 6 6" />
|
|
40
|
+
</svg>
|
|
41
|
+
);
|
|
42
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DialogShell (stigmer#653): the one modal shell — showModal lifecycle,
|
|
3
|
+
* cancel/Escape wiring with state authority, native-close sync, the token
|
|
4
|
+
* backdrop + converged chrome, and the non-modal in-flow mode.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { describe, it, expect, vi, beforeAll, afterEach } from "vitest";
|
|
8
|
+
import { render, cleanup, fireEvent } from "@testing-library/react";
|
|
9
|
+
import { DialogShell } from "../DialogShell";
|
|
10
|
+
|
|
11
|
+
// happy-dom does not implement the native dialog show/close methods.
|
|
12
|
+
beforeAll(() => {
|
|
13
|
+
HTMLDialogElement.prototype.showModal = function showModal() {
|
|
14
|
+
this.open = true;
|
|
15
|
+
};
|
|
16
|
+
HTMLDialogElement.prototype.close = function close() {
|
|
17
|
+
this.open = false;
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
afterEach(cleanup);
|
|
22
|
+
|
|
23
|
+
function dialogOf(container: HTMLElement): HTMLDialogElement {
|
|
24
|
+
return container.querySelector("dialog")!;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
describe("DialogShell lifecycle", () => {
|
|
28
|
+
it("opens via showModal when the controlled prop flips true", () => {
|
|
29
|
+
const { container, rerender } = render(
|
|
30
|
+
<DialogShell open={false} onOpenChange={() => {}}>
|
|
31
|
+
<p>body</p>
|
|
32
|
+
</DialogShell>,
|
|
33
|
+
);
|
|
34
|
+
expect(dialogOf(container).open).toBe(false);
|
|
35
|
+
|
|
36
|
+
rerender(
|
|
37
|
+
<DialogShell open onOpenChange={() => {}}>
|
|
38
|
+
<p>body</p>
|
|
39
|
+
</DialogShell>,
|
|
40
|
+
);
|
|
41
|
+
expect(dialogOf(container).open).toBe(true);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it("shows immediately when mounted already open", () => {
|
|
45
|
+
const { container } = render(
|
|
46
|
+
<DialogShell open onOpenChange={() => {}}>
|
|
47
|
+
<p>body</p>
|
|
48
|
+
</DialogShell>,
|
|
49
|
+
);
|
|
50
|
+
expect(dialogOf(container).open).toBe(true);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it("closes the native dialog when the controlled prop flips false", () => {
|
|
54
|
+
const { container, rerender } = render(
|
|
55
|
+
<DialogShell open onOpenChange={() => {}}>
|
|
56
|
+
<p>body</p>
|
|
57
|
+
</DialogShell>,
|
|
58
|
+
);
|
|
59
|
+
rerender(
|
|
60
|
+
<DialogShell open={false} onOpenChange={() => {}}>
|
|
61
|
+
<p>body</p>
|
|
62
|
+
</DialogShell>,
|
|
63
|
+
);
|
|
64
|
+
expect(dialogOf(container).open).toBe(false);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("Escape/cancel reports intent but never closes on its own — state stays authoritative", () => {
|
|
68
|
+
const onOpenChange = vi.fn();
|
|
69
|
+
const { container } = render(
|
|
70
|
+
<DialogShell open onOpenChange={onOpenChange}>
|
|
71
|
+
<p>body</p>
|
|
72
|
+
</DialogShell>,
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
fireEvent(dialogOf(container), new Event("cancel", { cancelable: true }));
|
|
76
|
+
|
|
77
|
+
expect(onOpenChange).toHaveBeenCalledExactlyOnceWith(false);
|
|
78
|
+
// The shell prevented the native close; the dialog stays open until the
|
|
79
|
+
// host flips the prop.
|
|
80
|
+
expect(dialogOf(container).open).toBe(true);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it("syncs the controlled state when something else closes the dialog natively", () => {
|
|
84
|
+
const onOpenChange = vi.fn();
|
|
85
|
+
const { container } = render(
|
|
86
|
+
<DialogShell open onOpenChange={onOpenChange}>
|
|
87
|
+
<p>body</p>
|
|
88
|
+
</DialogShell>,
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
// e.g. a method="dialog" form submit closes without going through props.
|
|
92
|
+
const dialog = dialogOf(container);
|
|
93
|
+
dialog.close();
|
|
94
|
+
fireEvent(dialog, new Event("close"));
|
|
95
|
+
|
|
96
|
+
expect(onOpenChange).toHaveBeenCalledExactlyOnceWith(false);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it("does not re-report a close the host itself drove", () => {
|
|
100
|
+
const onOpenChange = vi.fn();
|
|
101
|
+
const { container, rerender } = render(
|
|
102
|
+
<DialogShell open onOpenChange={onOpenChange}>
|
|
103
|
+
<p>body</p>
|
|
104
|
+
</DialogShell>,
|
|
105
|
+
);
|
|
106
|
+
rerender(
|
|
107
|
+
<DialogShell open={false} onOpenChange={onOpenChange}>
|
|
108
|
+
<p>body</p>
|
|
109
|
+
</DialogShell>,
|
|
110
|
+
);
|
|
111
|
+
// The effect's own dialog.close() fires a native close event in real
|
|
112
|
+
// browsers — replay it against the now-false prop.
|
|
113
|
+
fireEvent(dialogOf(container), new Event("close"));
|
|
114
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
describe("DialogShell chrome", () => {
|
|
119
|
+
it("carries the token backdrop, animation, positioning, and width preset", () => {
|
|
120
|
+
const { container } = render(
|
|
121
|
+
<DialogShell open onOpenChange={() => {}} width="3xl">
|
|
122
|
+
<p>body</p>
|
|
123
|
+
</DialogShell>,
|
|
124
|
+
);
|
|
125
|
+
const cls = dialogOf(container).className;
|
|
126
|
+
|
|
127
|
+
expect(cls).toContain("stg:backdrop:bg-backdrop");
|
|
128
|
+
expect(cls).toContain("stg:open:animate-in");
|
|
129
|
+
expect(cls).toContain("stg:fixed");
|
|
130
|
+
expect(cls).toContain("stg:m-auto");
|
|
131
|
+
expect(cls).toContain("stg:max-w-3xl");
|
|
132
|
+
expect(cls).toContain("stg:bg-popover");
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it("className overrides the shell's own chrome per class (tailwind-merge)", () => {
|
|
136
|
+
const { container } = render(
|
|
137
|
+
<DialogShell
|
|
138
|
+
open
|
|
139
|
+
onOpenChange={() => {}}
|
|
140
|
+
className="stg:bg-background stg:max-w-[85vw]"
|
|
141
|
+
>
|
|
142
|
+
<p>body</p>
|
|
143
|
+
</DialogShell>,
|
|
144
|
+
);
|
|
145
|
+
const cls = dialogOf(container).className;
|
|
146
|
+
|
|
147
|
+
expect(cls).toContain("stg:bg-background");
|
|
148
|
+
expect(cls).not.toContain("stg:bg-popover");
|
|
149
|
+
expect(cls).toContain("stg:max-w-[85vw]");
|
|
150
|
+
expect(cls).not.toContain("stg:max-w-md");
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
it("labels the dialog for assistive tech", () => {
|
|
154
|
+
const { container } = render(
|
|
155
|
+
<DialogShell open onOpenChange={() => {}} aria-label="Confirm delete">
|
|
156
|
+
<p>body</p>
|
|
157
|
+
</DialogShell>,
|
|
158
|
+
);
|
|
159
|
+
expect(dialogOf(container).getAttribute("aria-label")).toBe("Confirm delete");
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
describe("DialogShell backdrop dismiss", () => {
|
|
164
|
+
it("dismissOnBackdrop: a click on the dialog element itself reports close intent", () => {
|
|
165
|
+
const onOpenChange = vi.fn();
|
|
166
|
+
const { container } = render(
|
|
167
|
+
<DialogShell open onOpenChange={onOpenChange} dismissOnBackdrop>
|
|
168
|
+
<p>body</p>
|
|
169
|
+
</DialogShell>,
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
fireEvent.click(dialogOf(container));
|
|
173
|
+
expect(onOpenChange).toHaveBeenCalledExactlyOnceWith(false);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it("dismissOnBackdrop: clicks on content descendants never dismiss", () => {
|
|
177
|
+
const onOpenChange = vi.fn();
|
|
178
|
+
const { container, getByText } = render(
|
|
179
|
+
<DialogShell open onOpenChange={onOpenChange} dismissOnBackdrop>
|
|
180
|
+
<p>body</p>
|
|
181
|
+
</DialogShell>,
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
fireEvent.click(getByText("body"));
|
|
185
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
186
|
+
expect(dialogOf(container).open).toBe(true);
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it("default: backdrop clicks are inert (form dialogs)", () => {
|
|
190
|
+
const onOpenChange = vi.fn();
|
|
191
|
+
const { container } = render(
|
|
192
|
+
<DialogShell open onOpenChange={onOpenChange}>
|
|
193
|
+
<p>body</p>
|
|
194
|
+
</DialogShell>,
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
fireEvent.click(dialogOf(container));
|
|
198
|
+
expect(onOpenChange).not.toHaveBeenCalled();
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
describe("DialogShell non-modal mode", () => {
|
|
203
|
+
it("renders in-flow: open attribute, no backdrop, no fixed positioning", () => {
|
|
204
|
+
const { container, rerender } = render(
|
|
205
|
+
<DialogShell open modal={false} onOpenChange={() => {}}>
|
|
206
|
+
<p>body</p>
|
|
207
|
+
</DialogShell>,
|
|
208
|
+
);
|
|
209
|
+
const dialog = dialogOf(container);
|
|
210
|
+
|
|
211
|
+
expect(dialog.open).toBe(true);
|
|
212
|
+
expect(dialog.className).toContain("stg:relative");
|
|
213
|
+
expect(dialog.className).not.toContain("stg:backdrop:bg-backdrop");
|
|
214
|
+
expect(dialog.className).not.toContain("stg:fixed");
|
|
215
|
+
|
|
216
|
+
rerender(
|
|
217
|
+
<DialogShell open={false} modal={false} onOpenChange={() => {}}>
|
|
218
|
+
<p>body</p>
|
|
219
|
+
</DialogShell>,
|
|
220
|
+
);
|
|
221
|
+
expect(dialogOf(container).open).toBe(false);
|
|
222
|
+
});
|
|
223
|
+
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Contract tests for the shared thread-card shell (T05/T06): the chrome
|
|
2
|
-
//
|
|
3
|
-
// (`expand` / `none` — `select` died with the Inspect
|
|
4
|
-
// with their ARIA semantics, and the nested-button keydown
|
|
5
|
-
// consuming threads pin their own compositions; this file
|
|
6
|
-
// share.
|
|
2
|
+
// tiers (card / nested divider row / quiet unboxed line, gate accent), the
|
|
3
|
+
// header gestures (`expand` / `none` — `select` died with the Inspect
|
|
4
|
+
// drill-down, T06) with their ARIA semantics, and the nested-button keydown
|
|
5
|
+
// guard. The two consuming threads pin their own compositions; this file
|
|
6
|
+
// pins what they share.
|
|
7
7
|
|
|
8
8
|
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
9
9
|
import { render, screen, fireEvent, cleanup } from "@testing-library/react";
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
afterEach(cleanup);
|
|
17
17
|
|
|
18
18
|
describe("ThreadCardShell chrome", () => {
|
|
19
|
-
it("renders a bordered card by default
|
|
19
|
+
it("renders a bordered card by default, a divider row when nested, and no chrome when quiet", () => {
|
|
20
20
|
const { rerender, container } = render(
|
|
21
21
|
<ThreadCardShell cursorTarget="row">
|
|
22
22
|
<ThreadCardHeader>content</ThreadCardHeader>
|
|
@@ -27,12 +27,22 @@ describe("ThreadCardShell chrome", () => {
|
|
|
27
27
|
expect(root().className).toContain("stg:border-border-prominent");
|
|
28
28
|
|
|
29
29
|
rerender(
|
|
30
|
-
<ThreadCardShell cursorTarget="row"
|
|
30
|
+
<ThreadCardShell cursorTarget="row" variant="row">
|
|
31
31
|
<ThreadCardHeader>content</ThreadCardHeader>
|
|
32
32
|
</ThreadCardShell>,
|
|
33
33
|
);
|
|
34
34
|
expect(root().className).toContain("stg:border-b");
|
|
35
35
|
expect(root().className).not.toContain("stg:border-border-prominent");
|
|
36
|
+
|
|
37
|
+
rerender(
|
|
38
|
+
<ThreadCardShell cursorTarget="row" variant="quiet">
|
|
39
|
+
<ThreadCardHeader>content</ThreadCardHeader>
|
|
40
|
+
</ThreadCardShell>,
|
|
41
|
+
);
|
|
42
|
+
// The quiet tier is an unboxed line: no card border, no divider.
|
|
43
|
+
expect(root().className).not.toContain("stg:border-border-prominent");
|
|
44
|
+
expect(root().className).not.toContain("stg:border-b");
|
|
45
|
+
expect(root().className).not.toContain("stg:rounded-lg");
|
|
36
46
|
});
|
|
37
47
|
|
|
38
48
|
it("carries the gate accent", () => {
|
|
@@ -44,6 +54,19 @@ describe("ThreadCardShell chrome", () => {
|
|
|
44
54
|
const root = container.querySelector('[data-cursor-target="row"]') as HTMLElement;
|
|
45
55
|
expect(root.className).toContain("stg:border-l-warning");
|
|
46
56
|
});
|
|
57
|
+
|
|
58
|
+
it("never draws the gate accent on a quiet shell — escalation is the caller's job", () => {
|
|
59
|
+
// The quiet tier deliberately ignores `accent`: a gated row must be
|
|
60
|
+
// escalated to variant="card" by its component, never rendered as an
|
|
61
|
+
// accented bare line (see ThreadCardVariant).
|
|
62
|
+
const { container } = render(
|
|
63
|
+
<ThreadCardShell cursorTarget="row" variant="quiet" accent="warning">
|
|
64
|
+
<ThreadCardHeader>content</ThreadCardHeader>
|
|
65
|
+
</ThreadCardShell>,
|
|
66
|
+
);
|
|
67
|
+
const root = container.querySelector('[data-cursor-target="row"]') as HTMLElement;
|
|
68
|
+
expect(root.className).not.toContain("stg:border-l-warning");
|
|
69
|
+
});
|
|
47
70
|
});
|
|
48
71
|
|
|
49
72
|
describe("ThreadCardHeader gestures", () => {
|
|
@@ -102,4 +125,17 @@ describe("ThreadCardBody", () => {
|
|
|
102
125
|
render(<ThreadCardBody id="detail-1">body</ThreadCardBody>);
|
|
103
126
|
expect(document.getElementById("detail-1")?.textContent).toBe("body");
|
|
104
127
|
});
|
|
128
|
+
|
|
129
|
+
it("swaps the card padding for a left rail when the body is quiet-contained", () => {
|
|
130
|
+
const { rerender } = render(<ThreadCardBody id="detail-1">body</ThreadCardBody>);
|
|
131
|
+
const el = () => document.getElementById("detail-1")!;
|
|
132
|
+
expect(el().className).not.toContain("stg:border-l-2");
|
|
133
|
+
|
|
134
|
+
rerender(
|
|
135
|
+
<ThreadCardBody id="detail-1" rail>
|
|
136
|
+
body
|
|
137
|
+
</ThreadCardBody>,
|
|
138
|
+
);
|
|
139
|
+
expect(el().className).toContain("stg:border-l-2");
|
|
140
|
+
});
|
|
105
141
|
});
|