@stigmer/react 3.11.0 → 3.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/activity/useRecentActivity.d.ts +3 -2
- package/activity/useRecentActivity.d.ts.map +1 -1
- package/activity/useRecentActivity.js +3 -2
- package/activity/useRecentActivity.js.map +1 -1
- package/agent/AgentDetailView.d.ts +2 -12
- package/agent/AgentDetailView.d.ts.map +1 -1
- package/agent/AgentDetailView.js +10 -42
- package/agent/AgentDetailView.js.map +1 -1
- package/agent/internal/agentToInput.d.ts.map +1 -1
- package/agent/internal/agentToInput.js +0 -8
- package/agent/internal/agentToInput.js.map +1 -1
- package/agent-instance/AgentInstanceList.d.ts.map +1 -1
- package/agent-instance/AgentInstanceList.js +2 -1
- package/agent-instance/AgentInstanceList.js.map +1 -1
- package/api-key/ApiKeyListPanel.d.ts.map +1 -1
- package/api-key/ApiKeyListPanel.js +2 -1
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/attachment/AttachmentChipList.d.ts.map +1 -1
- package/attachment/AttachmentChipList.js +9 -8
- package/attachment/AttachmentChipList.js.map +1 -1
- package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
- package/attachment/AttachmentImageLightbox.js +1 -1
- package/attachment/AttachmentImageLightbox.js.map +1 -1
- package/channel/AgentChannelsPanel.d.ts.map +1 -1
- package/channel/AgentChannelsPanel.js +2 -1
- package/channel/AgentChannelsPanel.js.map +1 -1
- package/channel/ChannelConversationsDialog.d.ts.map +1 -1
- package/channel/ChannelConversationsDialog.js +2 -1
- package/channel/ChannelConversationsDialog.js.map +1 -1
- package/channel/ChannelTemplatesDialog.d.ts.map +1 -1
- package/channel/ChannelTemplatesDialog.js +2 -1
- package/channel/ChannelTemplatesDialog.js.map +1 -1
- package/channel-app/internal.d.ts.map +1 -1
- package/channel-app/internal.js +2 -1
- package/channel-app/internal.js.map +1 -1
- package/composer/ComposerToolbar.d.ts.map +1 -1
- package/composer/ComposerToolbar.js +10 -7
- package/composer/ComposerToolbar.js.map +1 -1
- package/composer/ConfigureMenu.d.ts.map +1 -1
- package/composer/ConfigureMenu.js +2 -1
- package/composer/ConfigureMenu.js.map +1 -1
- package/composer/ContextChip.d.ts.map +1 -1
- package/composer/ContextChip.js +2 -1
- package/composer/ContextChip.js.map +1 -1
- package/composer/ContextPopover.d.ts.map +1 -1
- package/composer/ContextPopover.js +2 -1
- package/composer/ContextPopover.js.map +1 -1
- package/composer/SessionComposer.d.ts +13 -0
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +12 -2
- package/composer/SessionComposer.js.map +1 -1
- package/conversation/ConversationMediaAttachment.d.ts.map +1 -1
- package/conversation/ConversationMediaAttachment.js +2 -1
- package/conversation/ConversationMediaAttachment.js.map +1 -1
- package/conversation/ConversationTimelineView.d.ts.map +1 -1
- package/conversation/ConversationTimelineView.js +14 -4
- package/conversation/ConversationTimelineView.js.map +1 -1
- package/conversation/conversationPresentation.d.ts +28 -0
- package/conversation/conversationPresentation.d.ts.map +1 -1
- package/conversation/conversationPresentation.js +38 -1
- package/conversation/conversationPresentation.js.map +1 -1
- package/cursor-accounts/MemberCoverageTable.d.ts.map +1 -1
- package/cursor-accounts/MemberCoverageTable.js +6 -5
- package/cursor-accounts/MemberCoverageTable.js.map +1 -1
- package/dashboard/DashboardKPICards.d.ts.map +1 -1
- package/dashboard/DashboardKPICards.js +3 -1
- package/dashboard/DashboardKPICards.js.map +1 -1
- package/dependency-graph/DependencyTreeNode.d.ts.map +1 -1
- package/dependency-graph/DependencyTreeNode.js +1 -7
- package/dependency-graph/DependencyTreeNode.js.map +1 -1
- package/dependency-graph/types.d.ts +8 -20
- package/dependency-graph/types.d.ts.map +1 -1
- package/dependency-graph/useDependencyGraph.d.ts.map +1 -1
- package/dependency-graph/useDependencyGraph.js +2 -20
- package/dependency-graph/useDependencyGraph.js.map +1 -1
- package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
- package/environment/EnvironmentVariableEditor.js +2 -1
- package/environment/EnvironmentVariableEditor.js.map +1 -1
- package/execution/ApprovalCard.d.ts.map +1 -1
- package/execution/ApprovalCard.js +1 -1
- package/execution/ApprovalCard.js.map +1 -1
- package/execution/ArtifactRowView.d.ts.map +1 -1
- package/execution/ArtifactRowView.js +2 -1
- package/execution/ArtifactRowView.js.map +1 -1
- package/execution/FilePathLink.d.ts +4 -4
- package/execution/FilePathLink.d.ts.map +1 -1
- package/execution/FilePathLink.js +4 -4
- package/execution/FilePathLink.js.map +1 -1
- package/execution/McpToolDetail.d.ts.map +1 -1
- package/execution/McpToolDetail.js +2 -1
- package/execution/McpToolDetail.js.map +1 -1
- package/execution/MessageAttachments.d.ts.map +1 -1
- package/execution/MessageAttachments.js +10 -8
- package/execution/MessageAttachments.js.map +1 -1
- package/execution/MessageEntry.d.ts.map +1 -1
- package/execution/MessageEntry.js +2 -1
- package/execution/MessageEntry.js.map +1 -1
- package/execution/PlanArtifactCard.d.ts.map +1 -1
- package/execution/PlanArtifactCard.js +7 -4
- package/execution/PlanArtifactCard.js.map +1 -1
- package/execution/ToolCallDetail.d.ts.map +1 -1
- package/execution/ToolCallDetail.js +1 -1
- package/execution/ToolCallDetail.js.map +1 -1
- package/execution/ToolCallItem.d.ts.map +1 -1
- package/execution/ToolCallItem.js +5 -1
- package/execution/ToolCallItem.js.map +1 -1
- package/execution/WriteBackCard.d.ts.map +1 -1
- package/execution/WriteBackCard.js +6 -4
- package/execution/WriteBackCard.js.map +1 -1
- package/execution/artifact-row-item.d.ts +1 -1
- package/execution/artifact-row-item.d.ts.map +1 -1
- package/file-reference/FileReferenceChipList.d.ts.map +1 -1
- package/file-reference/FileReferenceChipList.js +6 -1
- package/file-reference/FileReferenceChipList.js.map +1 -1
- package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +6 -5
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/ProviderBadge.d.ts.map +1 -1
- package/iam-policy/ProviderBadge.js +3 -2
- package/iam-policy/ProviderBadge.js.map +1 -1
- package/iam-policy/RoleSelector.d.ts.map +1 -1
- package/iam-policy/RoleSelector.js +1 -1
- package/iam-policy/RoleSelector.js.map +1 -1
- package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +2 -1
- package/identity-provider/IdentityProviderListPanel.js.map +1 -1
- package/index.d.ts +0 -2
- package/index.d.ts.map +1 -1
- package/index.js +0 -6
- package/index.js.map +1 -1
- package/internal/truncated-text.d.ts +17 -0
- package/internal/truncated-text.d.ts.map +1 -0
- package/internal/truncated-text.js +27 -0
- package/internal/truncated-text.js.map +1 -0
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +4 -3
- package/invitation/InvitationManager.js.map +1 -1
- package/library/ScopeToggle.d.ts.map +1 -1
- package/library/ScopeToggle.js +10 -2
- package/library/ScopeToggle.js.map +1 -1
- package/library/VisibilitySelector.d.ts.map +1 -1
- package/library/VisibilitySelector.js +2 -1
- package/library/VisibilitySelector.js.map +1 -1
- package/library/useExportResource.d.ts +3 -4
- package/library/useExportResource.d.ts.map +1 -1
- package/library/useExportResource.js +1 -1
- package/library/useExportResource.js.map +1 -1
- package/manifest/EditResourceYamlDialog.d.ts.map +1 -1
- package/manifest/EditResourceYamlDialog.js.map +1 -1
- package/mcp-server/McpServerConfigPanel.d.ts +30 -1
- package/mcp-server/McpServerConfigPanel.d.ts.map +1 -1
- package/mcp-server/McpServerConfigPanel.js +18 -8
- package/mcp-server/McpServerConfigPanel.js.map +1 -1
- package/mcp-server/McpServerConnectDialog.d.ts +12 -1
- package/mcp-server/McpServerConnectDialog.d.ts.map +1 -1
- package/mcp-server/McpServerConnectDialog.js +8 -7
- package/mcp-server/McpServerConnectDialog.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +4 -4
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/McpServerPicker.d.ts.map +1 -1
- package/mcp-server/McpServerPicker.js +86 -5
- package/mcp-server/McpServerPicker.js.map +1 -1
- package/mcp-server/McpToolSelector.d.ts.map +1 -1
- package/mcp-server/McpToolSelector.js +2 -1
- package/mcp-server/McpToolSelector.js.map +1 -1
- package/mcp-server/VendorApprovalBlockedNotice.d.ts +77 -0
- package/mcp-server/VendorApprovalBlockedNotice.d.ts.map +1 -0
- package/mcp-server/VendorApprovalBlockedNotice.js +62 -0
- package/mcp-server/VendorApprovalBlockedNotice.js.map +1 -0
- package/mcp-server/mcpServerSetupReducer.d.ts +18 -0
- package/mcp-server/mcpServerSetupReducer.d.ts.map +1 -1
- package/mcp-server/mcpServerSetupReducer.js +6 -0
- package/mcp-server/mcpServerSetupReducer.js.map +1 -1
- package/mcp-server/useMcpServerSetup.d.ts.map +1 -1
- package/mcp-server/useMcpServerSetup.js +7 -0
- package/mcp-server/useMcpServerSetup.js.map +1 -1
- package/oauth-app/OAuthAppListPanel.d.ts.map +1 -1
- package/oauth-app/OAuthAppListPanel.js +2 -1
- package/oauth-app/OAuthAppListPanel.js.map +1 -1
- package/package.json +4 -4
- package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +3 -2
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/pricing-governance/BaselineEditor.d.ts.map +1 -1
- package/pricing-governance/BaselineEditor.js +7 -1
- package/pricing-governance/BaselineEditor.js.map +1 -1
- package/pricing-governance/ModelCatalogPanel.d.ts.map +1 -1
- package/pricing-governance/ModelCatalogPanel.js +2 -1
- package/pricing-governance/ModelCatalogPanel.js.map +1 -1
- package/pricing-governance/PricingGovernanceConsole.d.ts.map +1 -1
- package/pricing-governance/PricingGovernanceConsole.js +2 -1
- package/pricing-governance/PricingGovernanceConsole.js.map +1 -1
- package/pricing-governance/PricingGovernancePanel.d.ts.map +1 -1
- package/pricing-governance/PricingGovernancePanel.js +2 -1
- package/pricing-governance/PricingGovernancePanel.js.map +1 -1
- package/resource-workbench/components/StatusBadge.d.ts.map +1 -1
- package/resource-workbench/components/StatusBadge.js +2 -1
- package/resource-workbench/components/StatusBadge.js.map +1 -1
- package/schedule/CadenceField.d.ts.map +1 -1
- package/schedule/CadenceField.js +15 -8
- package/schedule/CadenceField.js.map +1 -1
- package/schedule/ScheduleRunsTable.d.ts.map +1 -1
- package/schedule/ScheduleRunsTable.js +3 -2
- package/schedule/ScheduleRunsTable.js.map +1 -1
- package/session/PlanEditor.d.ts.map +1 -1
- package/session/PlanEditor.js +3 -5
- package/session/PlanEditor.js.map +1 -1
- package/sharing/AgentShareList.d.ts.map +1 -1
- package/sharing/AgentShareList.js +3 -1
- package/sharing/AgentShareList.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +2 -1
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/skill/SkillDetailView.d.ts.map +1 -1
- package/skill/SkillDetailView.js +3 -2
- package/skill/SkillDetailView.js.map +1 -1
- package/src/__tests__/helpers/open-menu.ts +88 -0
- package/src/__tests__/portal-container.test.tsx +3 -3
- package/src/activity/useRecentActivity.ts +3 -2
- package/src/agent/AgentDetailView.tsx +6 -130
- package/src/agent/internal/__tests__/agentToInput.test.ts +2 -11
- package/src/agent/internal/agentToInput.ts +0 -11
- package/src/agent-instance/AgentInstanceList.tsx +5 -6
- package/src/agent-instance/__tests__/AgentInstanceList.test.tsx +5 -4
- package/src/api-key/ApiKeyListPanel.tsx +11 -3
- package/src/attachment/AttachmentChipList.tsx +74 -65
- package/src/attachment/AttachmentImageLightbox.tsx +5 -4
- package/src/attachment/__tests__/AttachmentChipList.test.tsx +4 -3
- package/src/channel/AgentChannelsPanel.tsx +5 -6
- package/src/channel/ChannelConversationsDialog.tsx +5 -3
- package/src/channel/ChannelTemplatesDialog.tsx +5 -6
- package/src/channel/__tests__/AgentChannelsPanel.test.tsx +14 -9
- package/src/channel-app/internal.tsx +5 -6
- package/src/composer/ComposerToolbar.tsx +122 -90
- package/src/composer/ConfigureMenu.tsx +33 -24
- package/src/composer/ContextChip.tsx +2 -3
- package/src/composer/ContextPopover.tsx +27 -18
- package/src/composer/SessionComposer.tsx +41 -9
- package/src/composer/__tests__/SessionComposer-agentSetupError.test.tsx +124 -0
- package/src/composer/__tests__/SessionComposer-lockAgent.test.tsx +4 -9
- package/src/conversation/ConversationMediaAttachment.tsx +2 -2
- package/src/conversation/ConversationTimelineView.tsx +19 -2
- package/src/conversation/__tests__/ConversationTimelineView.test.tsx +106 -3
- package/src/conversation/conversationPresentation.ts +52 -1
- package/src/cursor-accounts/MemberCoverageTable.tsx +15 -13
- package/src/cursor-accounts/__tests__/CursorAccountsConsole.test.tsx +4 -4
- package/src/dashboard/DashboardKPICards.tsx +2 -1
- package/src/dependency-graph/DependencyTreeNode.tsx +1 -7
- package/src/dependency-graph/__tests__/useDependencyGraph.test.ts +18 -34
- package/src/dependency-graph/types.ts +8 -20
- package/src/dependency-graph/useDependencyGraph.ts +2 -22
- package/src/environment/EnvironmentVariableEditor.tsx +17 -6
- package/src/execution/ApprovalCard.tsx +1 -3
- package/src/execution/ArtifactRowView.tsx +68 -48
- package/src/execution/FilePathLink.tsx +43 -27
- package/src/execution/McpToolDetail.tsx +6 -2
- package/src/execution/MessageAttachments.tsx +57 -41
- package/src/execution/MessageEntry.tsx +22 -15
- package/src/execution/PlanArtifactCard.tsx +25 -18
- package/src/execution/ToolCallDetail.tsx +1 -4
- package/src/execution/ToolCallItem.tsx +18 -7
- package/src/execution/WriteBackCard.tsx +38 -29
- package/src/execution/__tests__/ArtifactRow.test.tsx +6 -2
- package/src/execution/__tests__/ArtifactRowView.test.tsx +5 -2
- package/src/execution/__tests__/FilePathLink.test.tsx +10 -6
- package/src/execution/__tests__/FileReviewCard.test.tsx +2 -1
- package/src/execution/__tests__/MessageEntry-attachments.test.tsx +3 -2
- package/src/execution/__tests__/MessageThread.test.tsx +6 -1
- package/src/execution/__tests__/artifact-row-tooltips.layout.test.tsx +115 -0
- package/src/execution/artifact-row-item.ts +1 -1
- package/src/file-reference/FileReferenceChipList.tsx +29 -17
- package/src/file-reference/__tests__/FileReferenceChipList.test.tsx +5 -2
- package/src/iam-policy/OrgMembersPanel.tsx +26 -19
- package/src/iam-policy/ProviderBadge.tsx +17 -10
- package/src/iam-policy/RoleSelector.tsx +0 -1
- package/src/identity-provider/IdentityProviderListPanel.tsx +11 -3
- package/src/index.ts +0 -82
- package/src/internal/__tests__/truncated-text.layout.test.tsx +68 -0
- package/src/internal/__tests__/truncated-text.test.tsx +33 -0
- package/src/internal/truncated-text.tsx +81 -0
- package/src/invitation/InvitationManager.tsx +18 -5
- package/src/library/ScopeToggle.tsx +14 -2
- package/src/library/VisibilitySelector.tsx +21 -14
- package/src/library/useExportResource.ts +3 -4
- package/src/manifest/EditResourceYamlDialog.tsx +1 -2
- package/src/manifest/__tests__/ApplyManifestDialog.test.tsx +2 -2
- package/src/manifest/__tests__/EditResourceYamlDialog.test.tsx +9 -9
- package/src/mcp-server/McpServerConfigPanel.tsx +79 -37
- package/src/mcp-server/McpServerConnectDialog.tsx +41 -5
- package/src/mcp-server/McpServerDetailView.tsx +23 -39
- package/src/mcp-server/McpServerPicker.tsx +99 -7
- package/src/mcp-server/McpToolSelector.tsx +12 -7
- package/src/mcp-server/VendorApprovalBlockedNotice.tsx +221 -0
- package/src/mcp-server/__tests__/McpServerPicker.test.tsx +504 -0
- package/src/mcp-server/__tests__/VendorApprovalBlocked.surfaces.test.tsx +321 -0
- package/src/mcp-server/__tests__/VendorApprovalBlockedNotice.test.tsx +154 -0
- package/src/mcp-server/mcpServerSetupReducer.ts +24 -0
- package/src/mcp-server/useMcpServerSetup.ts +9 -0
- package/src/oauth-app/OAuthAppListPanel.tsx +11 -3
- package/src/platform-client/PlatformClientListPanel.tsx +35 -18
- package/src/pricing-governance/BaselineEditor.tsx +20 -0
- package/src/pricing-governance/ModelCatalogPanel.tsx +9 -5
- package/src/pricing-governance/PricingGovernanceConsole.tsx +9 -5
- package/src/pricing-governance/PricingGovernancePanel.tsx +13 -4
- package/src/pricing-governance/__tests__/ModelCatalogPanel.test.tsx +37 -0
- package/src/resource-workbench/components/StatusBadge.tsx +7 -3
- package/src/schedule/CadenceField.tsx +38 -27
- package/src/schedule/ScheduleRunsTable.tsx +23 -11
- package/src/schedule/__tests__/cadence-tooltips.layout.test.tsx +86 -0
- package/src/session/PlanEditor.tsx +9 -8
- package/src/sharing/AgentShareList.tsx +28 -22
- package/src/sharing/ShareAgentDialog.tsx +5 -6
- package/src/sharing/__tests__/AgentShareList.test.tsx +4 -4
- package/src/skill/SkillDetailView.tsx +23 -12
- package/src/version-history/VersionTimelineEntry.tsx +21 -12
- package/src/workflow/CanvasTransitionEdge.tsx +23 -16
- package/src/workflow/ExecutionActiveTaskIndicator.tsx +74 -59
- package/src/workflow/TaskPickerPopover.tsx +0 -1
- package/src/workflow/WorkflowCanvasEditor.tsx +95 -64
- package/src/workflow/WorkflowNode.tsx +13 -6
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +18 -11
- package/src/workflow/WorkflowTaskList.tsx +2 -2
- package/src/workflow/WorkflowVersionBadge.tsx +33 -18
- package/src/workflow/WorkflowVersionTimeline.tsx +7 -6
- package/src/workflow/__tests__/WorkflowTaskApprovalSummary.test.tsx +3 -1
- package/src/workflow/__tests__/structured-data-viewer.test.tsx +5 -2
- package/src/workflow/execution-comparison/ExecutionComparisonView.tsx +5 -3
- package/src/workflow/execution-comparison/TaskComparisonTable.tsx +12 -5
- package/src/workflow/execution-history/ExecutionHistoryTable.tsx +24 -15
- package/src/workflow/inspector/InspectorHeader.tsx +20 -11
- package/src/workflow/inspector/NestedTaskList.tsx +18 -11
- package/src/workflow/inspector/WorkflowSummaryPanel.tsx +5 -3
- package/src/workflow/inspector/tabs/BranchesTab.tsx +61 -31
- package/src/workflow/instance/WorkflowInstanceList.tsx +5 -6
- package/src/workflow/instance/__tests__/WorkflowInstanceList.test.tsx +5 -4
- package/src/workflow/node-shell/DiffBadge.tsx +18 -11
- package/src/workflow/node-shell/ExecutionBadge.tsx +73 -46
- package/src/workflow/node-shell/NodeActions.tsx +128 -94
- package/src/workflow/task-detail/StructuredDataViewer.tsx +4 -2
- package/src/workspace/EditorTabs.tsx +102 -85
- package/src/workspace/ExplorerTree.tsx +47 -30
- package/src/workspace/FileViewer.tsx +11 -3
- package/src/workspace/PanelChip.tsx +32 -23
- package/src/workspace/WorkspaceEditor.tsx +21 -9
- package/src/workspace/WorkspaceSummary.tsx +21 -12
- package/src/workspace/WorkspaceSurface.tsx +86 -61
- package/src/workspace/__tests__/EditorTabs.test.tsx +5 -2
- package/src/workspace/__tests__/WorkspaceSurface.test.tsx +5 -2
- package/styles.css +1 -1
- package/version-history/VersionTimelineEntry.d.ts.map +1 -1
- package/version-history/VersionTimelineEntry.js +2 -1
- package/version-history/VersionTimelineEntry.js.map +1 -1
- package/workflow/CanvasTransitionEdge.d.ts +1 -1
- package/workflow/CanvasTransitionEdge.d.ts.map +1 -1
- package/workflow/CanvasTransitionEdge.js +3 -2
- package/workflow/CanvasTransitionEdge.js.map +1 -1
- package/workflow/ExecutionActiveTaskIndicator.d.ts.map +1 -1
- package/workflow/ExecutionActiveTaskIndicator.js +12 -11
- package/workflow/ExecutionActiveTaskIndicator.js.map +1 -1
- package/workflow/TaskPickerPopover.js +1 -1
- package/workflow/TaskPickerPopover.js.map +1 -1
- package/workflow/WorkflowCanvasEditor.d.ts.map +1 -1
- package/workflow/WorkflowCanvasEditor.js +9 -2
- package/workflow/WorkflowCanvasEditor.js.map +1 -1
- package/workflow/WorkflowNode.d.ts.map +1 -1
- package/workflow/WorkflowNode.js +2 -1
- package/workflow/WorkflowNode.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +6 -4
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowTaskList.js +2 -2
- package/workflow/WorkflowTaskList.js.map +1 -1
- package/workflow/WorkflowVersionBadge.d.ts.map +1 -1
- package/workflow/WorkflowVersionBadge.js +2 -1
- package/workflow/WorkflowVersionBadge.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +2 -1
- package/workflow/WorkflowVersionTimeline.js.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonView.d.ts.map +1 -1
- package/workflow/execution-comparison/ExecutionComparisonView.js +2 -1
- package/workflow/execution-comparison/ExecutionComparisonView.js.map +1 -1
- package/workflow/execution-comparison/TaskComparisonTable.d.ts.map +1 -1
- package/workflow/execution-comparison/TaskComparisonTable.js +2 -1
- package/workflow/execution-comparison/TaskComparisonTable.js.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.d.ts.map +1 -1
- package/workflow/execution-history/ExecutionHistoryTable.js +6 -4
- package/workflow/execution-history/ExecutionHistoryTable.js.map +1 -1
- package/workflow/inspector/InspectorHeader.d.ts.map +1 -1
- package/workflow/inspector/InspectorHeader.js +4 -2
- package/workflow/inspector/InspectorHeader.js.map +1 -1
- package/workflow/inspector/NestedTaskList.d.ts.map +1 -1
- package/workflow/inspector/NestedTaskList.js +2 -1
- package/workflow/inspector/NestedTaskList.js.map +1 -1
- package/workflow/inspector/WorkflowSummaryPanel.d.ts.map +1 -1
- package/workflow/inspector/WorkflowSummaryPanel.js +2 -1
- package/workflow/inspector/WorkflowSummaryPanel.js.map +1 -1
- package/workflow/inspector/tabs/BranchesTab.d.ts.map +1 -1
- package/workflow/inspector/tabs/BranchesTab.js +5 -2
- package/workflow/inspector/tabs/BranchesTab.js.map +1 -1
- package/workflow/instance/WorkflowInstanceList.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceList.js +2 -1
- package/workflow/instance/WorkflowInstanceList.js.map +1 -1
- package/workflow/node-shell/DiffBadge.d.ts.map +1 -1
- package/workflow/node-shell/DiffBadge.js +3 -2
- package/workflow/node-shell/DiffBadge.js.map +1 -1
- package/workflow/node-shell/ExecutionBadge.d.ts.map +1 -1
- package/workflow/node-shell/ExecutionBadge.js +5 -4
- package/workflow/node-shell/ExecutionBadge.js.map +1 -1
- package/workflow/node-shell/NodeActions.d.ts.map +1 -1
- package/workflow/node-shell/NodeActions.js +12 -11
- package/workflow/node-shell/NodeActions.js.map +1 -1
- package/workflow/task-detail/StructuredDataViewer.d.ts.map +1 -1
- package/workflow/task-detail/StructuredDataViewer.js +5 -1
- package/workflow/task-detail/StructuredDataViewer.js.map +1 -1
- package/workspace/EditorTabs.d.ts.map +1 -1
- package/workspace/EditorTabs.js +38 -37
- package/workspace/EditorTabs.js.map +1 -1
- package/workspace/ExplorerTree.d.ts.map +1 -1
- package/workspace/ExplorerTree.js +2 -1
- package/workspace/ExplorerTree.js.map +1 -1
- package/workspace/FileViewer.d.ts.map +1 -1
- package/workspace/FileViewer.js +2 -1
- package/workspace/FileViewer.js.map +1 -1
- package/workspace/PanelChip.d.ts.map +1 -1
- package/workspace/PanelChip.js +2 -1
- package/workspace/PanelChip.js.map +1 -1
- package/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/workspace/WorkspaceEditor.js +2 -1
- package/workspace/WorkspaceEditor.js.map +1 -1
- package/workspace/WorkspaceSummary.d.ts.map +1 -1
- package/workspace/WorkspaceSummary.js +7 -2
- package/workspace/WorkspaceSummary.js.map +1 -1
- package/workspace/WorkspaceSurface.d.ts.map +1 -1
- package/workspace/WorkspaceSurface.js +12 -11
- package/workspace/WorkspaceSurface.js.map +1 -1
- package/datastore/CollectionRecordsBrowser.d.ts +0 -34
- package/datastore/CollectionRecordsBrowser.d.ts.map +0 -1
- package/datastore/CollectionRecordsBrowser.js +0 -223
- package/datastore/CollectionRecordsBrowser.js.map +0 -1
- package/datastore/CollectionSchemaView.d.ts +0 -29
- package/datastore/CollectionSchemaView.d.ts.map +0 -1
- package/datastore/CollectionSchemaView.js +0 -93
- package/datastore/CollectionSchemaView.js.map +0 -1
- package/datastore/DatastoreDetailView.d.ts +0 -44
- package/datastore/DatastoreDetailView.d.ts.map +0 -1
- package/datastore/DatastoreDetailView.js +0 -76
- package/datastore/DatastoreDetailView.js.map +0 -1
- package/datastore/DatastoreSyncReport.d.ts +0 -19
- package/datastore/DatastoreSyncReport.d.ts.map +0 -1
- package/datastore/DatastoreSyncReport.js +0 -45
- package/datastore/DatastoreSyncReport.js.map +0 -1
- package/datastore/DeleteDatastoreDialog.d.ts +0 -35
- package/datastore/DeleteDatastoreDialog.d.ts.map +0 -1
- package/datastore/DeleteDatastoreDialog.js +0 -90
- package/datastore/DeleteDatastoreDialog.js.map +0 -1
- package/datastore/FieldValueControl.d.ts +0 -55
- package/datastore/FieldValueControl.d.ts.map +0 -1
- package/datastore/FieldValueControl.js +0 -138
- package/datastore/FieldValueControl.js.map +0 -1
- package/datastore/RecordFilterBuilder.d.ts +0 -37
- package/datastore/RecordFilterBuilder.d.ts.map +0 -1
- package/datastore/RecordFilterBuilder.js +0 -122
- package/datastore/RecordFilterBuilder.js.map +0 -1
- package/datastore/RecordFormPanel.d.ts +0 -45
- package/datastore/RecordFormPanel.d.ts.map +0 -1
- package/datastore/RecordFormPanel.js +0 -215
- package/datastore/RecordFormPanel.js.map +0 -1
- package/datastore/index.d.ts +0 -43
- package/datastore/index.d.ts.map +0 -1
- package/datastore/index.js +0 -22
- package/datastore/index.js.map +0 -1
- package/datastore/recordFilter.d.ts +0 -62
- package/datastore/recordFilter.d.ts.map +0 -1
- package/datastore/recordFilter.js +0 -104
- package/datastore/recordFilter.js.map +0 -1
- package/datastore/recordValues.d.ts +0 -85
- package/datastore/recordValues.d.ts.map +0 -1
- package/datastore/recordValues.js +0 -282
- package/datastore/recordValues.js.map +0 -1
- package/datastore/useDatastore.d.ts +0 -39
- package/datastore/useDatastore.d.ts.map +0 -1
- package/datastore/useDatastore.js +0 -44
- package/datastore/useDatastore.js.map +0 -1
- package/datastore/useDatastoreCount.d.ts +0 -50
- package/datastore/useDatastoreCount.d.ts.map +0 -1
- package/datastore/useDatastoreCount.js +0 -27
- package/datastore/useDatastoreCount.js.map +0 -1
- package/datastore/useDatastoreDescription.d.ts +0 -54
- package/datastore/useDatastoreDescription.d.ts.map +0 -1
- package/datastore/useDatastoreDescription.js +0 -50
- package/datastore/useDatastoreDescription.js.map +0 -1
- package/datastore/useDatastoreList.d.ts +0 -57
- package/datastore/useDatastoreList.d.ts.map +0 -1
- package/datastore/useDatastoreList.js +0 -29
- package/datastore/useDatastoreList.js.map +0 -1
- package/datastore/useDatastoreSearch.d.ts +0 -19
- package/datastore/useDatastoreSearch.d.ts.map +0 -1
- package/datastore/useDatastoreSearch.js +0 -22
- package/datastore/useDatastoreSearch.js.map +0 -1
- package/datastore/useDeleteDatastore.d.ts +0 -53
- package/datastore/useDeleteDatastore.d.ts.map +0 -1
- package/datastore/useDeleteDatastore.js +0 -40
- package/datastore/useDeleteDatastore.js.map +0 -1
- package/datastore/useDeleteRecord.d.ts +0 -34
- package/datastore/useDeleteRecord.d.ts.map +0 -1
- package/datastore/useDeleteRecord.js +0 -43
- package/datastore/useDeleteRecord.js.map +0 -1
- package/datastore/useInsertRecord.d.ts +0 -50
- package/datastore/useInsertRecord.d.ts.map +0 -1
- package/datastore/useInsertRecord.js +0 -55
- package/datastore/useInsertRecord.js.map +0 -1
- package/datastore/useRecordCollection.d.ts +0 -104
- package/datastore/useRecordCollection.d.ts.map +0 -1
- package/datastore/useRecordCollection.js +0 -136
- package/datastore/useRecordCollection.js.map +0 -1
- package/datastore/useRecordList.d.ts +0 -66
- package/datastore/useRecordList.d.ts.map +0 -1
- package/datastore/useRecordList.js +0 -58
- package/datastore/useRecordList.js.map +0 -1
- package/datastore/useUpdateRecord.d.ts +0 -52
- package/datastore/useUpdateRecord.d.ts.map +0 -1
- package/datastore/useUpdateRecord.js +0 -55
- package/datastore/useUpdateRecord.js.map +0 -1
- package/src/agent/__tests__/AgentDetailView.datastores.test.tsx +0 -166
- package/src/datastore/CollectionRecordsBrowser.tsx +0 -570
- package/src/datastore/CollectionSchemaView.tsx +0 -247
- package/src/datastore/DatastoreDetailView.tsx +0 -201
- package/src/datastore/DatastoreSyncReport.tsx +0 -105
- package/src/datastore/DeleteDatastoreDialog.tsx +0 -202
- package/src/datastore/FieldValueControl.tsx +0 -289
- package/src/datastore/RecordFilterBuilder.tsx +0 -422
- package/src/datastore/RecordFormPanel.tsx +0 -432
- package/src/datastore/__tests__/CollectionRecordsBrowser.test.tsx +0 -245
- package/src/datastore/__tests__/DeleteDatastoreDialog.test.tsx +0 -133
- package/src/datastore/__tests__/FieldValueControl.test.tsx +0 -160
- package/src/datastore/__tests__/RecordFilterBuilder.test.tsx +0 -155
- package/src/datastore/__tests__/RecordFormPanel.test.tsx +0 -227
- package/src/datastore/__tests__/recordFilter.test.ts +0 -169
- package/src/datastore/__tests__/recordMutations.test.tsx +0 -195
- package/src/datastore/__tests__/recordValues.test.ts +0 -359
- package/src/datastore/__tests__/schemaAndSyncViews.test.tsx +0 -142
- package/src/datastore/__tests__/useDatastoreDescription.test.tsx +0 -143
- package/src/datastore/__tests__/useRecordCollection.test.tsx +0 -250
- package/src/datastore/__tests__/useRecordList.test.tsx +0 -85
- package/src/datastore/index.ts +0 -111
- package/src/datastore/recordFilter.ts +0 -154
- package/src/datastore/recordValues.ts +0 -327
- package/src/datastore/useDatastore.ts +0 -67
- package/src/datastore/useDatastoreCount.ts +0 -69
- package/src/datastore/useDatastoreDescription.ts +0 -90
- package/src/datastore/useDatastoreList.ts +0 -79
- package/src/datastore/useDatastoreSearch.ts +0 -39
- package/src/datastore/useDeleteDatastore.ts +0 -87
- package/src/datastore/useDeleteRecord.ts +0 -77
- package/src/datastore/useInsertRecord.ts +0 -92
- package/src/datastore/useRecordCollection.ts +0 -256
- package/src/datastore/useRecordList.ts +0 -131
- package/src/datastore/useUpdateRecord.ts +0 -95
|
@@ -7,6 +7,7 @@ import { formatFileSize } from "./attachment-utils.js";
|
|
|
7
7
|
import { useObjectUrl } from "./useObjectUrl.js";
|
|
8
8
|
import { AttachmentImageLightbox } from "./AttachmentImageLightbox.js";
|
|
9
9
|
import { UNSTYLED_BUTTON } from "../internal/form-primitives.js";
|
|
10
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
10
11
|
|
|
11
12
|
/** Props for {@link AttachmentChipList}. */
|
|
12
13
|
export interface AttachmentChipListProps {
|
|
@@ -216,84 +217,92 @@ function ImageAttachmentChip({
|
|
|
216
217
|
return (
|
|
217
218
|
// The remove badge and retry pill are SIBLINGS of the preview button,
|
|
218
219
|
// absolutely positioned over it — buttons cannot nest inside buttons.
|
|
219
|
-
<
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
UNSTYLED_BUTTON adds the pointer cursor — the image tile carries
|
|
229
|
-
no other clickability cue. */}
|
|
230
|
-
<button
|
|
231
|
-
type="button"
|
|
232
|
-
onClick={onPreview}
|
|
233
|
-
aria-label={`Preview ${entry.file.name}`}
|
|
234
|
-
className={cn(
|
|
235
|
-
UNSTYLED_BUTTON,
|
|
236
|
-
"stg:relative stg:block stg:h-14 stg:w-14 stg:overflow-hidden stg:rounded-md stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring",
|
|
237
|
-
isError && "stg:ring-1 stg:ring-destructive",
|
|
238
|
-
)}
|
|
220
|
+
<Tooltip>
|
|
221
|
+
<TooltipTrigger
|
|
222
|
+
render={
|
|
223
|
+
<span
|
|
224
|
+
role="listitem"
|
|
225
|
+
aria-label={chipAriaLabel(entry)}
|
|
226
|
+
className="stg:relative stg:inline-flex"
|
|
227
|
+
/>
|
|
228
|
+
}
|
|
239
229
|
>
|
|
240
|
-
{
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
230
|
+
{/* The whole tile is the preview target. Preview stays enabled while
|
|
231
|
+
`disabled` (that prop gates the mutating remove/retry actions) and
|
|
232
|
+
in every phase: the object URL wraps in-memory bytes, no fetch.
|
|
233
|
+
UNSTYLED_BUTTON adds the pointer cursor — the image tile carries
|
|
234
|
+
no other clickability cue. */}
|
|
235
|
+
<button
|
|
236
|
+
type="button"
|
|
237
|
+
onClick={onPreview}
|
|
238
|
+
aria-label={`Preview ${entry.file.name}`}
|
|
239
|
+
className={cn(
|
|
240
|
+
UNSTYLED_BUTTON,
|
|
241
|
+
"stg:relative stg:block stg:h-14 stg:w-14 stg:overflow-hidden stg:rounded-md stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring",
|
|
242
|
+
isError && "stg:ring-1 stg:ring-destructive",
|
|
243
|
+
)}
|
|
244
|
+
>
|
|
245
|
+
{url ? (
|
|
246
|
+
<img
|
|
247
|
+
src={url}
|
|
248
|
+
alt=""
|
|
249
|
+
aria-hidden="true"
|
|
250
|
+
onError={() => setLoadFailed(true)}
|
|
251
|
+
className={cn(
|
|
252
|
+
"stg:h-full stg:w-full stg:object-cover",
|
|
253
|
+
(isUploading || isError) && "stg:opacity-50",
|
|
254
|
+
)}
|
|
255
|
+
/>
|
|
256
|
+
) : (
|
|
257
|
+
// One-frame placeholder until the object-URL effect runs; same
|
|
258
|
+
// footprint as the image, so no layout shift.
|
|
259
|
+
<span
|
|
260
|
+
className="stg:block stg:h-full stg:w-full stg:animate-pulse stg:bg-muted"
|
|
261
|
+
aria-hidden="true"
|
|
262
|
+
/>
|
|
263
|
+
)}
|
|
264
|
+
{isUploading && (
|
|
265
|
+
<span className="stg:absolute stg:inset-0 stg:flex stg:items-center stg:justify-center">
|
|
266
|
+
<ChipSpinner size={16} />
|
|
267
|
+
</span>
|
|
268
|
+
)}
|
|
269
|
+
</button>
|
|
270
|
+
|
|
271
|
+
{isError && (
|
|
272
|
+
<button
|
|
273
|
+
type="button"
|
|
274
|
+
onClick={onRetry}
|
|
275
|
+
disabled={disabled}
|
|
276
|
+
aria-label={`Retry uploading ${entry.file.name}`}
|
|
246
277
|
className={cn(
|
|
247
|
-
|
|
248
|
-
|
|
278
|
+
UNSTYLED_BUTTON,
|
|
279
|
+
"stg:absolute stg:left-1/2 stg:top-1/2 stg:-translate-x-1/2 stg:-translate-y-1/2 stg:rounded-full stg:bg-destructive stg:px-1.5 stg:py-0.5 stg:text-[0.6rem] stg:font-medium stg:leading-none stg:text-destructive-foreground stg:shadow-sm stg:hover:bg-destructive-hover stg:disabled:pointer-events-none",
|
|
249
280
|
)}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
// footprint as the image, so no layout shift.
|
|
254
|
-
<span
|
|
255
|
-
className="stg:block stg:h-full stg:w-full stg:animate-pulse stg:bg-muted"
|
|
256
|
-
aria-hidden="true"
|
|
257
|
-
/>
|
|
281
|
+
>
|
|
282
|
+
Retry
|
|
283
|
+
</button>
|
|
258
284
|
)}
|
|
259
|
-
{isUploading && (
|
|
260
|
-
<span className="stg:absolute stg:inset-0 stg:flex stg:items-center stg:justify-center">
|
|
261
|
-
<ChipSpinner size={16} />
|
|
262
|
-
</span>
|
|
263
|
-
)}
|
|
264
|
-
</button>
|
|
265
285
|
|
|
266
|
-
{isError && (
|
|
267
286
|
<button
|
|
268
287
|
type="button"
|
|
269
|
-
onClick={
|
|
288
|
+
onClick={onRemove}
|
|
270
289
|
disabled={disabled}
|
|
271
|
-
aria-label={`
|
|
290
|
+
aria-label={`Remove ${entry.file.name}`}
|
|
272
291
|
className={cn(
|
|
273
292
|
UNSTYLED_BUTTON,
|
|
274
|
-
|
|
293
|
+
// The established corner-badge geometry (ContextPopover,
|
|
294
|
+
// ComposerToolbar). Solid bg + border keep it legible over any
|
|
295
|
+
// image without opacity-modified tokens (Dont-Do #4).
|
|
296
|
+
"stg:absolute stg:-right-1.5 stg:-top-1.5 stg:flex stg:h-4 stg:w-4 stg:items-center stg:justify-center stg:rounded-full stg:border stg:border-border stg:bg-background stg:text-muted-foreground stg:shadow-sm stg:hover:text-destructive stg:disabled:pointer-events-none",
|
|
275
297
|
)}
|
|
276
298
|
>
|
|
277
|
-
|
|
299
|
+
<XIcon />
|
|
278
300
|
</button>
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
disabled={disabled}
|
|
285
|
-
aria-label={`Remove ${entry.file.name}`}
|
|
286
|
-
className={cn(
|
|
287
|
-
UNSTYLED_BUTTON,
|
|
288
|
-
// The established corner-badge geometry (ContextPopover,
|
|
289
|
-
// ComposerToolbar). Solid bg + border keep it legible over any
|
|
290
|
-
// image without opacity-modified tokens (Dont-Do #4).
|
|
291
|
-
"stg:absolute stg:-right-1.5 stg:-top-1.5 stg:flex stg:h-4 stg:w-4 stg:items-center stg:justify-center stg:rounded-full stg:border stg:border-border stg:bg-background stg:text-muted-foreground stg:shadow-sm stg:hover:text-destructive stg:disabled:pointer-events-none",
|
|
292
|
-
)}
|
|
293
|
-
>
|
|
294
|
-
<XIcon />
|
|
295
|
-
</button>
|
|
296
|
-
</span>
|
|
301
|
+
</TooltipTrigger>
|
|
302
|
+
<TooltipContent side="top" className="stg:break-all">
|
|
303
|
+
{entry.file.name}
|
|
304
|
+
</TooltipContent>
|
|
305
|
+
</Tooltip>
|
|
297
306
|
);
|
|
298
307
|
}
|
|
299
308
|
|
|
@@ -95,10 +95,11 @@ export function AttachmentImageLightbox({
|
|
|
95
95
|
{open && (
|
|
96
96
|
<div className="stg:flex stg:flex-col">
|
|
97
97
|
<div className="stg:flex stg:items-center stg:gap-2 stg:px-3 stg:py-2">
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
{/* No tooltip here: the house tooltip portals OUTSIDE this native
|
|
99
|
+
showModal() dialog, where the top layer covers it and `inert`
|
|
100
|
+
disables it. The old title only restated the visible filename
|
|
101
|
+
(also the image's alt), so it is dropped rather than replaced. */}
|
|
102
|
+
<span className="stg:min-w-0 stg:flex-1 stg:truncate stg:text-xs stg:font-semibold stg:text-foreground">
|
|
102
103
|
{filename}
|
|
103
104
|
</span>
|
|
104
105
|
<button
|
|
@@ -106,11 +106,12 @@ describe("AttachmentChipList — image miniature", () => {
|
|
|
106
106
|
|
|
107
107
|
await waitFor(() => expect(chipImage(container)).toBeTruthy());
|
|
108
108
|
|
|
109
|
-
// The tile is the chip — the name lives in the tooltip and
|
|
110
|
-
// label, never as a text node (file chips, by contrast,
|
|
109
|
+
// The tile is the chip — the name lives in the house tooltip and
|
|
110
|
+
// accessible label, never as a text node (file chips, by contrast,
|
|
111
|
+
// keep theirs) and never a native title (banned, stigmer-cloud#268).
|
|
111
112
|
expect(screen.queryByText("shot.png")).toBeNull();
|
|
112
113
|
const tile = screen.getByRole("listitem", { name: /^shot\.png/ });
|
|
113
|
-
expect(tile.getAttribute("title")).
|
|
114
|
+
expect(tile.getAttribute("title")).toBeNull();
|
|
114
115
|
// Remove is an always-visible corner badge, not hover-revealed.
|
|
115
116
|
expect(screen.getByRole("button", { name: "Remove shot.png" })).toBeTruthy();
|
|
116
117
|
});
|
|
@@ -22,6 +22,7 @@ import { useConfirmAction } from "../resource-detail/useConfirmAction.js";
|
|
|
22
22
|
import { EditResourceYamlDialog } from "../manifest/EditResourceYamlDialog.js";
|
|
23
23
|
import { useDeploymentMode } from "../deployment-mode.js";
|
|
24
24
|
import { CloudFeatureNotice } from "../internal/CloudFeatureNotice.js";
|
|
25
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
25
26
|
import { ChannelConversationsDialog } from "./ChannelConversationsDialog.js";
|
|
26
27
|
import { ChannelCredentialsDialog } from "./ChannelCredentialsDialog.js";
|
|
27
28
|
import { ChannelTemplatesDialog } from "./ChannelTemplatesDialog.js";
|
|
@@ -510,12 +511,10 @@ function ChannelCard({
|
|
|
510
511
|
<provider.Icon className="stg:size-5 stg:shrink-0 stg:text-foreground" />
|
|
511
512
|
<div className="stg:min-w-0">
|
|
512
513
|
<div className="stg:flex stg:items-center stg:gap-2">
|
|
513
|
-
<
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
{meta?.name || meta?.slug || "\u2014"}
|
|
518
|
-
</span>
|
|
514
|
+
<TruncatedText
|
|
515
|
+
text={meta?.name || meta?.slug || "\u2014"}
|
|
516
|
+
className="stg:text-sm stg:font-medium stg:text-foreground"
|
|
517
|
+
/>
|
|
519
518
|
<InstallStatePill state={installState} />
|
|
520
519
|
</div>
|
|
521
520
|
<p className="stg:mt-0.5 stg:text-xs stg:text-muted-foreground">
|
|
@@ -10,6 +10,7 @@ import type { Session } from "@stigmer/protos/ai/stigmer/agentic/session/v1/api_
|
|
|
10
10
|
import { formatRelativeTime } from "../activity/format-relative-time.js";
|
|
11
11
|
import { Button } from "../button/Button.js";
|
|
12
12
|
import { EmptyState } from "../empty-state/EmptyState.js";
|
|
13
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
13
14
|
import { channelSessionExternalUserKey } from "../session/channelOrigin.js";
|
|
14
15
|
import { useChannelSessions } from "./useChannelSessions.js";
|
|
15
16
|
|
|
@@ -200,9 +201,10 @@ function ConversationRow({
|
|
|
200
201
|
const content = (
|
|
201
202
|
<>
|
|
202
203
|
<div className="stg:min-w-0 stg:flex-1">
|
|
203
|
-
<
|
|
204
|
-
{subject}
|
|
205
|
-
|
|
204
|
+
<TruncatedText
|
|
205
|
+
text={subject}
|
|
206
|
+
className="stg:block stg:text-sm stg:text-foreground"
|
|
207
|
+
/>
|
|
206
208
|
{externalUser && (
|
|
207
209
|
<p className="stg:mt-0.5 stg:flex stg:items-center stg:gap-1 stg:text-xs stg:text-muted-foreground">
|
|
208
210
|
<User aria-hidden="true" className="stg:size-3" />
|
|
@@ -9,6 +9,7 @@ import type { ChannelTemplate } from "@stigmer/protos/ai/stigmer/agentic/agentch
|
|
|
9
9
|
import { Button } from "../button/Button.js";
|
|
10
10
|
import { EmptyState } from "../empty-state/EmptyState.js";
|
|
11
11
|
import { CloudFeatureNotice } from "../internal/CloudFeatureNotice.js";
|
|
12
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
12
13
|
import { StatusBadge } from "../resource-workbench/components/StatusBadge.js";
|
|
13
14
|
import {
|
|
14
15
|
channelPresentationOf,
|
|
@@ -332,12 +333,10 @@ function TemplateRow({ template }: { readonly template: ChannelTemplate }) {
|
|
|
332
333
|
<li className="stg:rounded-lg stg:border stg:border-border stg:p-3">
|
|
333
334
|
<div className="stg:flex stg:items-start stg:justify-between stg:gap-3">
|
|
334
335
|
<div className="stg:flex stg:min-w-0 stg:flex-wrap stg:items-center stg:gap-x-2 stg:gap-y-1">
|
|
335
|
-
<
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
{template.name}
|
|
340
|
-
</span>
|
|
336
|
+
<TruncatedText
|
|
337
|
+
text={template.name}
|
|
338
|
+
className="stg:text-sm stg:font-medium stg:text-foreground"
|
|
339
|
+
/>
|
|
341
340
|
{/* (name, language) is the template's identity — each
|
|
342
341
|
language is approved independently, so it always shows. */}
|
|
343
342
|
<span className="stg:shrink-0 stg:text-xs stg:text-muted-foreground">
|
|
@@ -5,6 +5,7 @@ import type { AgentChannelInput } from "@stigmer/sdk";
|
|
|
5
5
|
import { StigmerContext } from "../../context";
|
|
6
6
|
import { FetchCacheContext } from "../../internal/FetchCacheProvider";
|
|
7
7
|
import { DeploymentModeContext } from "../../deployment-mode";
|
|
8
|
+
import { openMenu } from "../../__tests__/helpers/open-menu";
|
|
8
9
|
import { AgentChannelsPanel } from "../AgentChannelsPanel";
|
|
9
10
|
|
|
10
11
|
// Toasts are visual feedback owned by the feedback module; keep them inert.
|
|
@@ -272,7 +273,7 @@ describe("AgentChannelsPanel", () => {
|
|
|
272
273
|
);
|
|
273
274
|
|
|
274
275
|
await waitFor(() => expect(screen.getByText("Support Slack")).toBeTruthy());
|
|
275
|
-
|
|
276
|
+
await openMenu(screen.getByRole("button", { name: /actions for/i }));
|
|
276
277
|
fireEvent.click(await screen.findByRole("menuitem", { name: "Disconnect" }));
|
|
277
278
|
|
|
278
279
|
// The confirmation explains teardown vs pause before anything happens.
|
|
@@ -409,14 +410,18 @@ describe("AgentChannelsPanel", () => {
|
|
|
409
410
|
await waitFor(() => expect(screen.getByText("Support Slack")).toBeTruthy());
|
|
410
411
|
await waitFor(() => expect(checkMyPermission).toHaveBeenCalled());
|
|
411
412
|
|
|
412
|
-
|
|
413
|
+
// The panel renders mutation affordances optimistic-visible and hides
|
|
414
|
+
// them when the denial lands. "Mock was called" precedes "denial
|
|
415
|
+
// rendered", so wait for the state this test is actually about instead
|
|
416
|
+
// of racing the re-render (flaked under CPU contention, ~1/20).
|
|
417
|
+
await waitFor(() => expect(screen.queryByRole("switch")).toBeNull());
|
|
413
418
|
expect(screen.queryByRole("button", { name: /connect to slack/i })).toBeNull();
|
|
414
419
|
|
|
415
420
|
// The card menu still renders: Sessions is a viewer-level action
|
|
416
421
|
// (everyone who sees the card holds can_view on the channel — the same
|
|
417
422
|
// bar as viewing its sessions, DD-012). Mutation items stay
|
|
418
423
|
// permission-gated and absent.
|
|
419
|
-
|
|
424
|
+
await openMenu(screen.getByRole("button", { name: /actions for/i }));
|
|
420
425
|
// The awaited query anchors on the portaled menu's mount (#323) — only
|
|
421
426
|
// then are the absence assertions below meaningful rather than vacuous.
|
|
422
427
|
expect(await screen.findByRole("menuitem", { name: /sessions/i })).toBeTruthy();
|
|
@@ -441,7 +446,7 @@ describe("AgentChannelsPanel", () => {
|
|
|
441
446
|
);
|
|
442
447
|
await waitFor(() => expect(screen.getByText("Support Slack")).toBeTruthy());
|
|
443
448
|
|
|
444
|
-
|
|
449
|
+
await openMenu(screen.getByRole("button", { name: /actions for/i }));
|
|
445
450
|
fireEvent.click(await screen.findByRole("menuitem", { name: /manage access/i }));
|
|
446
451
|
|
|
447
452
|
// The one canonical dialog opens, and its subtitle names the channel
|
|
@@ -501,7 +506,7 @@ describe("AgentChannelsPanel", () => {
|
|
|
501
506
|
);
|
|
502
507
|
|
|
503
508
|
await waitFor(() => expect(screen.getByText("Support Slack")).toBeTruthy());
|
|
504
|
-
|
|
509
|
+
await openMenu(screen.getByRole("button", { name: /actions for/i }));
|
|
505
510
|
fireEvent.click(
|
|
506
511
|
await screen.findByRole("menuitem", { name: "Tool credentials" }),
|
|
507
512
|
);
|
|
@@ -629,7 +634,7 @@ describe("AgentChannelsPanel", () => {
|
|
|
629
634
|
await waitFor(() =>
|
|
630
635
|
expect(screen.getByText("Support WhatsApp")).toBeTruthy(),
|
|
631
636
|
);
|
|
632
|
-
|
|
637
|
+
await openMenu(screen.getByRole("button", { name: /actions for/i }));
|
|
633
638
|
fireEvent.click(await screen.findByRole("menuitem", { name: "Disconnect" }));
|
|
634
639
|
|
|
635
640
|
// WhatsApp credentials live on the shared ChannelApp and survive the
|
|
@@ -652,7 +657,7 @@ describe("AgentChannelsPanel", () => {
|
|
|
652
657
|
await waitFor(() =>
|
|
653
658
|
expect(screen.getByText("Support WhatsApp")).toBeTruthy(),
|
|
654
659
|
);
|
|
655
|
-
|
|
660
|
+
await openMenu(screen.getByRole("button", { name: /actions for/i }));
|
|
656
661
|
fireEvent.click(await screen.findByRole("menuitem", { name: "Templates" }));
|
|
657
662
|
|
|
658
663
|
expect(
|
|
@@ -676,7 +681,7 @@ describe("AgentChannelsPanel", () => {
|
|
|
676
681
|
);
|
|
677
682
|
|
|
678
683
|
await waitFor(() => expect(screen.getByText("Support Slack")).toBeTruthy());
|
|
679
|
-
|
|
684
|
+
await openMenu(screen.getByRole("button", { name: /actions for/i }));
|
|
680
685
|
|
|
681
686
|
// Slack has no template concept: hidden, not disabled — a disabled
|
|
682
687
|
// item would imply the capability might one day exist there.
|
|
@@ -704,7 +709,7 @@ describe("AgentChannelsPanel", () => {
|
|
|
704
709
|
expect(screen.getByText("Support WhatsApp")).toBeTruthy(),
|
|
705
710
|
);
|
|
706
711
|
await waitFor(() => expect(checkMyPermission).toHaveBeenCalled());
|
|
707
|
-
|
|
712
|
+
await openMenu(screen.getByRole("button", { name: /actions for/i }));
|
|
708
713
|
|
|
709
714
|
expect(
|
|
710
715
|
await screen.findByRole("menuitem", { name: /sessions/i }),
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Internal building blocks shared by the channel-app forms and panels.
|
|
@@ -74,15 +75,13 @@ export function CopyRow({
|
|
|
74
75
|
<div className="stg:space-y-1">
|
|
75
76
|
<p className="stg:text-xs stg:font-medium stg:text-foreground">{label}</p>
|
|
76
77
|
<div className="stg:flex stg:items-center stg:gap-1.5">
|
|
77
|
-
<
|
|
78
|
+
<TruncatedText
|
|
79
|
+
text={value}
|
|
78
80
|
className={cn(
|
|
79
|
-
"stg:min-w-0 stg:flex-1 stg:
|
|
81
|
+
"stg:min-w-0 stg:flex-1 stg:rounded-md stg:border stg:border-border stg:bg-muted-subtle",
|
|
80
82
|
"stg:px-2 stg:py-1.5 stg:font-mono stg:text-[0.65rem] stg:text-foreground",
|
|
81
83
|
)}
|
|
82
|
-
|
|
83
|
-
>
|
|
84
|
-
{value}
|
|
85
|
-
</code>
|
|
84
|
+
/>
|
|
86
85
|
<CopyButton copied={copied} onCopy={copy} copyTargetId={copyTargetId} />
|
|
87
86
|
</div>
|
|
88
87
|
</div>
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { cn } from "@stigmer/theme";
|
|
4
|
+
import {
|
|
5
|
+
Tooltip,
|
|
6
|
+
TooltipContent,
|
|
7
|
+
TooltipProvider,
|
|
8
|
+
TooltipTrigger,
|
|
9
|
+
} from "../internal/tooltip.js";
|
|
4
10
|
import { ContextPopover } from "./ContextPopover.js";
|
|
5
11
|
import { ConfigureMenu, type ConfigureMenuItem } from "./ConfigureMenu.js";
|
|
6
12
|
import { ModelSelector } from "../models/ModelSelector.js";
|
|
@@ -160,101 +166,127 @@ export function ComposerToolbar({
|
|
|
160
166
|
)}
|
|
161
167
|
</div>
|
|
162
168
|
|
|
163
|
-
{/* ---- Right group: Secondary actions (icon-only) + Send ----
|
|
169
|
+
{/* ---- Right group: Secondary actions (icon-only) + Send ----
|
|
164
170
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
171
|
+
Icon-only actions carry house tooltips (never native `title` —
|
|
172
|
+
OS-delayed and unreachable from keyboard/touch, dead entirely on
|
|
173
|
+
disabled controls). Disabled-capable buttons put the trigger on a
|
|
174
|
+
plain wrapper span: `disabled` adds `pointer-events-none`, so the
|
|
175
|
+
span, not the button, must own the hover for the tooltip to keep
|
|
176
|
+
working while disabled. The provider is context-only (no DOM node)
|
|
177
|
+
and groups the buttons' hover delay. */}
|
|
178
|
+
|
|
179
|
+
<TooltipProvider>
|
|
180
|
+
<div className="stg:flex stg:shrink-0 stg:items-center stg:gap-1">
|
|
181
|
+
{showWorkspace && (
|
|
182
|
+
onWorkspaceDirectAction
|
|
183
|
+
? <Tooltip>
|
|
184
|
+
<TooltipTrigger render={<span className="stg:inline-flex" />}>
|
|
185
|
+
<button
|
|
186
|
+
type="button"
|
|
187
|
+
disabled={disabled}
|
|
188
|
+
onClick={onWorkspaceDirectAction}
|
|
189
|
+
className={cn(
|
|
190
|
+
"stg:inline-flex stg:h-8 stg:w-8 stg:items-center stg:justify-center stg:rounded-md stg:text-xs stg:transition-colors",
|
|
191
|
+
"stg:text-muted-foreground stg:hover:text-foreground stg:hover:bg-accent-hover",
|
|
192
|
+
"stg:disabled:pointer-events-none stg:disabled:opacity-50",
|
|
193
|
+
)}
|
|
194
|
+
aria-label="Workspace"
|
|
195
|
+
>
|
|
196
|
+
<span className="stg:relative">
|
|
197
|
+
<WorkspaceIcon />
|
|
198
|
+
{workspaceCount > 0 && (
|
|
199
|
+
<span className="stg:absolute stg:-right-1.5 stg:-top-1.5 stg:flex stg:h-3.5 stg:min-w-3.5 stg:items-center stg:justify-center stg:rounded-full stg:bg-primary stg:px-0.5 stg:text-[0.5rem] stg:font-medium stg:leading-none stg:text-primary-foreground">
|
|
200
|
+
{workspaceCount}
|
|
201
|
+
</span>
|
|
202
|
+
)}
|
|
203
|
+
</span>
|
|
204
|
+
</button>
|
|
205
|
+
</TooltipTrigger>
|
|
206
|
+
<TooltipContent side="top">Workspace</TooltipContent>
|
|
207
|
+
</Tooltip>
|
|
208
|
+
: <ContextPopover
|
|
209
|
+
icon={<WorkspaceIcon />}
|
|
210
|
+
label="Workspace"
|
|
211
|
+
count={workspaceCount}
|
|
212
|
+
disabled={disabled}
|
|
213
|
+
>
|
|
214
|
+
{workspaceContent}
|
|
215
|
+
</ContextPopover>
|
|
216
|
+
)}
|
|
217
|
+
|
|
218
|
+
{showAttach && (
|
|
219
|
+
<Tooltip>
|
|
220
|
+
<TooltipTrigger render={<span className="stg:inline-flex" />}>
|
|
221
|
+
<button
|
|
222
|
+
type="button"
|
|
223
|
+
disabled={disabled}
|
|
224
|
+
onClick={onAttachClick}
|
|
225
|
+
className={cn(
|
|
226
|
+
"stg:inline-flex stg:h-8 stg:w-8 stg:items-center stg:justify-center stg:rounded-md stg:text-xs stg:transition-colors",
|
|
227
|
+
"stg:text-muted-foreground stg:hover:text-foreground stg:hover:bg-accent-hover",
|
|
228
|
+
"stg:disabled:pointer-events-none stg:disabled:opacity-50",
|
|
186
229
|
)}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
230
|
+
aria-label="Attach files"
|
|
231
|
+
>
|
|
232
|
+
<span className="stg:relative">
|
|
233
|
+
<PaperclipIcon />
|
|
234
|
+
{attachmentCount > 0 && (
|
|
235
|
+
<span className="stg:absolute stg:-right-1.5 stg:-top-1.5 stg:flex stg:h-3.5 stg:min-w-3.5 stg:items-center stg:justify-center stg:rounded-full stg:bg-primary stg:px-0.5 stg:text-[0.5rem] stg:font-medium stg:leading-none stg:text-primary-foreground">
|
|
236
|
+
{attachmentCount}
|
|
237
|
+
</span>
|
|
238
|
+
)}
|
|
239
|
+
</span>
|
|
240
|
+
</button>
|
|
241
|
+
</TooltipTrigger>
|
|
242
|
+
<TooltipContent side="top">Attach files</TooltipContent>
|
|
243
|
+
</Tooltip>
|
|
244
|
+
)}
|
|
198
245
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
246
|
+
<ConfigureMenu
|
|
247
|
+
open={configOpen}
|
|
248
|
+
onOpenChange={onConfigOpenChange}
|
|
249
|
+
activePanel={configActivePanel}
|
|
250
|
+
onActivePanelChange={onConfigActivePanelChange}
|
|
251
|
+
items={configureItems}
|
|
252
|
+
renderPanel={renderConfigPanel}
|
|
202
253
|
disabled={disabled}
|
|
203
|
-
|
|
204
|
-
title="Attach files"
|
|
205
|
-
className={cn(
|
|
206
|
-
"stg:inline-flex stg:h-8 stg:w-8 stg:items-center stg:justify-center stg:rounded-md stg:text-xs stg:transition-colors",
|
|
207
|
-
"stg:text-muted-foreground stg:hover:text-foreground stg:hover:bg-accent-hover",
|
|
208
|
-
"stg:disabled:pointer-events-none stg:disabled:opacity-50",
|
|
209
|
-
)}
|
|
210
|
-
aria-label="Attach files"
|
|
211
|
-
>
|
|
212
|
-
<span className="stg:relative">
|
|
213
|
-
<PaperclipIcon />
|
|
214
|
-
{attachmentCount > 0 && (
|
|
215
|
-
<span className="stg:absolute stg:-right-1.5 stg:-top-1.5 stg:flex stg:h-3.5 stg:min-w-3.5 stg:items-center stg:justify-center stg:rounded-full stg:bg-primary stg:px-0.5 stg:text-[0.5rem] stg:font-medium stg:leading-none stg:text-primary-foreground">
|
|
216
|
-
{attachmentCount}
|
|
217
|
-
</span>
|
|
218
|
-
)}
|
|
219
|
-
</span>
|
|
220
|
-
</button>
|
|
221
|
-
)}
|
|
222
|
-
|
|
223
|
-
<ConfigureMenu
|
|
224
|
-
open={configOpen}
|
|
225
|
-
onOpenChange={onConfigOpenChange}
|
|
226
|
-
activePanel={configActivePanel}
|
|
227
|
-
onActivePanelChange={onConfigActivePanelChange}
|
|
228
|
-
items={configureItems}
|
|
229
|
-
renderPanel={renderConfigPanel}
|
|
230
|
-
disabled={disabled}
|
|
231
|
-
/>
|
|
254
|
+
/>
|
|
232
255
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
256
|
+
{onStop ? (
|
|
257
|
+
// Circular container (vs. Send's rounded-square) gives the square glyph
|
|
258
|
+
// a proper home — the canonical stop affordance — and the shape morph
|
|
259
|
+
// from Send→Stop signals the running state at a glance. Always
|
|
260
|
+
// enabled, so the button itself is the tooltip trigger (keyboard
|
|
261
|
+
// focus opens it too).
|
|
262
|
+
<Tooltip>
|
|
263
|
+
<TooltipTrigger
|
|
264
|
+
render={
|
|
265
|
+
<button
|
|
266
|
+
type="button"
|
|
267
|
+
onClick={onStop}
|
|
268
|
+
className="stg:flex stg:h-8 stg:w-8 stg:shrink-0 stg:items-center stg:justify-center stg:rounded-full stg:bg-primary stg:text-primary-foreground stg:transition-colors stg:hover:bg-primary-hover"
|
|
269
|
+
aria-label="Stop generating"
|
|
270
|
+
/>
|
|
271
|
+
}
|
|
272
|
+
>
|
|
273
|
+
{isStopping ? <SpinnerIcon /> : <StopIcon />}
|
|
274
|
+
</TooltipTrigger>
|
|
275
|
+
<TooltipContent side="top">Stop</TooltipContent>
|
|
276
|
+
</Tooltip>
|
|
277
|
+
) : (
|
|
278
|
+
<button
|
|
279
|
+
type="button"
|
|
280
|
+
disabled={!canSend}
|
|
281
|
+
onClick={onSend}
|
|
282
|
+
className="stg:flex stg:h-8 stg:w-8 stg:shrink-0 stg:items-center stg:justify-center stg:rounded-lg stg:bg-primary stg:text-primary-foreground stg:transition-colors stg:hover:bg-primary-hover stg:disabled:pointer-events-none stg:disabled:opacity-40"
|
|
283
|
+
aria-label="Send message"
|
|
284
|
+
>
|
|
285
|
+
{isSubmitting ? <SpinnerIcon /> : <ArrowUpIcon />}
|
|
286
|
+
</button>
|
|
287
|
+
)}
|
|
288
|
+
</div>
|
|
289
|
+
</TooltipProvider>
|
|
258
290
|
</div>
|
|
259
291
|
);
|
|
260
292
|
}
|