@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
|
@@ -4,6 +4,8 @@ import { useState } from "react";
|
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import { AttachmentImageLightbox } from "../attachment/AttachmentImageLightbox.js";
|
|
6
6
|
import { UNSTYLED_BUTTON } from "../internal/form-primitives.js";
|
|
7
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
8
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
7
9
|
import { useArtifactDownload } from "./useArtifactDownload.js";
|
|
8
10
|
import { useArtifactDownloadUrl } from "./useArtifactDownloadUrl.js";
|
|
9
11
|
|
|
@@ -172,38 +174,45 @@ function ImagePreviewChip({
|
|
|
172
174
|
}
|
|
173
175
|
|
|
174
176
|
return (
|
|
175
|
-
<
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
cue. */}
|
|
179
|
-
<button
|
|
180
|
-
type="button"
|
|
181
|
-
onClick={onPreview}
|
|
182
|
-
aria-label={`Preview ${name}`}
|
|
183
|
-
className={cn(
|
|
184
|
-
UNSTYLED_BUTTON,
|
|
185
|
-
"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",
|
|
186
|
-
)}
|
|
177
|
+
<Tooltip>
|
|
178
|
+
<TooltipTrigger
|
|
179
|
+
render={<span role="listitem" aria-label={name} className="stg:inline-flex" />}
|
|
187
180
|
>
|
|
188
|
-
{
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
181
|
+
{/* The whole tile is the preview target. UNSTYLED_BUTTON adds the
|
|
182
|
+
pointer cursor — the image tile carries no other clickability
|
|
183
|
+
cue. */}
|
|
184
|
+
<button
|
|
185
|
+
type="button"
|
|
186
|
+
onClick={onPreview}
|
|
187
|
+
aria-label={`Preview ${name}`}
|
|
188
|
+
className={cn(
|
|
189
|
+
UNSTYLED_BUTTON,
|
|
190
|
+
"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",
|
|
191
|
+
)}
|
|
192
|
+
>
|
|
193
|
+
{url ? (
|
|
194
|
+
<img
|
|
195
|
+
src={url}
|
|
196
|
+
alt=""
|
|
197
|
+
aria-hidden="true"
|
|
198
|
+
loading="lazy"
|
|
199
|
+
className="stg:h-full stg:w-full stg:object-cover"
|
|
200
|
+
/>
|
|
201
|
+
) : (
|
|
202
|
+
// Pulse placeholder while the presigned URL is minted — pulse
|
|
203
|
+
// means work is genuinely in flight (contrast ImageGlyphTile).
|
|
204
|
+
// Same footprint as the image, so no layout shift.
|
|
205
|
+
<span
|
|
206
|
+
className="stg:block stg:h-full stg:w-full stg:animate-pulse stg:bg-muted"
|
|
207
|
+
aria-hidden="true"
|
|
208
|
+
/>
|
|
209
|
+
)}
|
|
210
|
+
</button>
|
|
211
|
+
</TooltipTrigger>
|
|
212
|
+
<TooltipContent side="top" className="stg:break-all">
|
|
213
|
+
{name}
|
|
214
|
+
</TooltipContent>
|
|
215
|
+
</Tooltip>
|
|
207
216
|
);
|
|
208
217
|
}
|
|
209
218
|
|
|
@@ -215,14 +224,22 @@ function ImagePreviewChip({
|
|
|
215
224
|
*/
|
|
216
225
|
function ImageGlyphTile({ name }: { readonly name: string }) {
|
|
217
226
|
return (
|
|
218
|
-
<
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
227
|
+
<Tooltip>
|
|
228
|
+
<TooltipTrigger
|
|
229
|
+
render={
|
|
230
|
+
<span
|
|
231
|
+
role="listitem"
|
|
232
|
+
aria-label={name}
|
|
233
|
+
className="stg:inline-flex stg:h-14 stg:w-14 stg:items-center stg:justify-center stg:rounded-md stg:bg-muted-subtle"
|
|
234
|
+
/>
|
|
235
|
+
}
|
|
236
|
+
>
|
|
237
|
+
<ImageGlyph />
|
|
238
|
+
</TooltipTrigger>
|
|
239
|
+
<TooltipContent side="top" className="stg:break-all">
|
|
240
|
+
{name}
|
|
241
|
+
</TooltipContent>
|
|
242
|
+
</Tooltip>
|
|
226
243
|
);
|
|
227
244
|
}
|
|
228
245
|
|
|
@@ -251,7 +268,7 @@ function DocumentChip({
|
|
|
251
268
|
const content = (
|
|
252
269
|
<>
|
|
253
270
|
<FileGlyph />
|
|
254
|
-
<
|
|
271
|
+
<TruncatedText text={name} className="stg:min-w-0" />
|
|
255
272
|
</>
|
|
256
273
|
);
|
|
257
274
|
|
|
@@ -259,7 +276,6 @@ function DocumentChip({
|
|
|
259
276
|
<span
|
|
260
277
|
role="listitem"
|
|
261
278
|
aria-label={name}
|
|
262
|
-
title={name}
|
|
263
279
|
className="stg:inline-flex stg:max-w-[200px] stg:items-center stg:rounded-md stg:bg-muted-subtle stg:px-2 stg:py-0.5 stg:text-xs stg:text-foreground"
|
|
264
280
|
>
|
|
265
281
|
{downloadable ? (
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
} from "./MessageAttachments.js";
|
|
20
20
|
import { PlanDocumentMessage } from "./PlanDocumentMessage.js";
|
|
21
21
|
import { useRenderTracer } from "../internal/dev/index.js";
|
|
22
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
22
23
|
|
|
23
24
|
/** Props for {@link MessageEntry}. */
|
|
24
25
|
export interface MessageEntryProps {
|
|
@@ -192,21 +193,27 @@ function HumanMessage({
|
|
|
192
193
|
)}
|
|
193
194
|
<p className="stg:text-sm stg:text-foreground stg:whitespace-pre-wrap">{content}</p>
|
|
194
195
|
{onEdit && (
|
|
195
|
-
<
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
196
|
+
<Tooltip>
|
|
197
|
+
<TooltipTrigger
|
|
198
|
+
render={
|
|
199
|
+
<button
|
|
200
|
+
type="button"
|
|
201
|
+
onClick={onEdit}
|
|
202
|
+
aria-label="Edit message"
|
|
203
|
+
className={cn(
|
|
204
|
+
"stg:absolute stg:-top-2.5 stg:-right-2.5 stg:inline-flex stg:h-7 stg:w-7 stg:items-center stg:justify-center stg:rounded-full",
|
|
205
|
+
"stg:border stg:border-border stg:bg-card stg:text-muted-foreground stg:shadow-sm stg:transition",
|
|
206
|
+
"stg:hover:text-foreground stg:hover:bg-accent-hover",
|
|
207
|
+
"stg:opacity-0 stg:group-hover:opacity-100 stg:focus-visible:opacity-100",
|
|
208
|
+
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring",
|
|
209
|
+
)}
|
|
210
|
+
/>
|
|
211
|
+
}
|
|
212
|
+
>
|
|
213
|
+
<EditIcon />
|
|
214
|
+
</TooltipTrigger>
|
|
215
|
+
<TooltipContent side="top">Edit</TooltipContent>
|
|
216
|
+
</Tooltip>
|
|
210
217
|
)}
|
|
211
218
|
</div>
|
|
212
219
|
);
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { memo, useState, type ReactNode } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import type { ExecutionArtifact } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/artifact_pb";
|
|
6
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
6
7
|
import { ArtifactPreviewModal } from "./ArtifactPreviewModal.js";
|
|
7
8
|
import { formatArtifactSize } from "./artifact-utils.js";
|
|
8
9
|
import { useArtifactCopy } from "./useArtifactCopy.js";
|
|
@@ -184,9 +185,11 @@ const FOCUS_RING =
|
|
|
184
185
|
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring stg:focus-visible:rounded-sm";
|
|
185
186
|
|
|
186
187
|
/**
|
|
187
|
-
* An icon-only secondary action. The accessible name doubles as the
|
|
188
|
-
* tooltip
|
|
189
|
-
*
|
|
188
|
+
* An icon-only secondary action. The accessible name doubles as the house
|
|
189
|
+
* tooltip's content; the trigger is a wrapper span so the hint stays
|
|
190
|
+
* hoverable while the action is disabled (`pointer-events-none` on the
|
|
191
|
+
* button would otherwise take the tooltip down with it). The padded hit
|
|
192
|
+
* area keeps the target comfortable despite the compact glyph.
|
|
190
193
|
*/
|
|
191
194
|
function IconAction({
|
|
192
195
|
label,
|
|
@@ -200,21 +203,25 @@ function IconAction({
|
|
|
200
203
|
readonly disabled?: boolean;
|
|
201
204
|
}) {
|
|
202
205
|
return (
|
|
203
|
-
<
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
206
|
+
<Tooltip>
|
|
207
|
+
<TooltipTrigger render={<span className="stg:inline-flex" />}>
|
|
208
|
+
<button
|
|
209
|
+
type="button"
|
|
210
|
+
aria-label={label}
|
|
211
|
+
onClick={onClick}
|
|
212
|
+
disabled={disabled}
|
|
213
|
+
className={cn(
|
|
214
|
+
"stg:inline-flex stg:items-center stg:rounded-md stg:p-1.5 stg:text-muted-foreground",
|
|
215
|
+
"stg:transition-colors stg:hover:bg-muted stg:hover:text-foreground",
|
|
216
|
+
"stg:disabled:pointer-events-none stg:disabled:opacity-50",
|
|
217
|
+
FOCUS_RING,
|
|
218
|
+
)}
|
|
219
|
+
>
|
|
220
|
+
{icon}
|
|
221
|
+
</button>
|
|
222
|
+
</TooltipTrigger>
|
|
223
|
+
<TooltipContent side="top">{label}</TooltipContent>
|
|
224
|
+
</Tooltip>
|
|
218
225
|
);
|
|
219
226
|
}
|
|
220
227
|
|
|
@@ -312,10 +312,7 @@ function ProvenanceNote({ toolCall }: { toolCall: ToolCall }) {
|
|
|
312
312
|
if (!provenance) return null;
|
|
313
313
|
|
|
314
314
|
return (
|
|
315
|
-
<p
|
|
316
|
-
className="stg:text-[11px] stg:italic stg:text-muted-foreground"
|
|
317
|
-
title={provenance}
|
|
318
|
-
>
|
|
315
|
+
<p className="stg:text-[11px] stg:italic stg:text-muted-foreground">
|
|
319
316
|
{provenance}
|
|
320
317
|
</p>
|
|
321
318
|
);
|
|
@@ -31,6 +31,7 @@ import type { FileReviewRowState } from "./file-review-status.js";
|
|
|
31
31
|
import { FilePathLink } from "./FilePathLink.js";
|
|
32
32
|
import { isFileCategory, type ToolCategory } from "./tool-categories.js";
|
|
33
33
|
import { useToolPresentation } from "./tool-presenter.js";
|
|
34
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
34
35
|
|
|
35
36
|
/** Props for {@link ToolCallItem}. */
|
|
36
37
|
export interface ToolCallItemProps {
|
|
@@ -307,13 +308,23 @@ export const ToolCallItem = memo(function ToolCallItem({
|
|
|
307
308
|
/>
|
|
308
309
|
) : (
|
|
309
310
|
displaySubtitle && (
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
311
|
+
// Not TruncatedText: the span must carry the external measurement
|
|
312
|
+
// ref (useIsTextTruncated) that the expanded detail reads.
|
|
313
|
+
<Tooltip>
|
|
314
|
+
<TooltipTrigger
|
|
315
|
+
render={
|
|
316
|
+
<span
|
|
317
|
+
ref={measuresSubtitle ? subtitleRef : undefined}
|
|
318
|
+
className="stg:min-w-0 stg:truncate stg:text-muted-foreground stg:font-mono"
|
|
319
|
+
/>
|
|
320
|
+
}
|
|
321
|
+
>
|
|
322
|
+
{displaySubtitle}
|
|
323
|
+
</TooltipTrigger>
|
|
324
|
+
<TooltipContent side="top" className="stg:break-all">
|
|
325
|
+
{displaySubtitle}
|
|
326
|
+
</TooltipContent>
|
|
327
|
+
</Tooltip>
|
|
317
328
|
)
|
|
318
329
|
)}
|
|
319
330
|
{!isSubAgent && category !== "shell" && resultSummary && (
|
|
@@ -5,6 +5,8 @@ import type { WorkspaceWriteBack } from "@stigmer/protos/ai/stigmer/agentic/agen
|
|
|
5
5
|
import { WorkspaceWriteBackPhase } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/writeback_pb";
|
|
6
6
|
import { cn } from "@stigmer/theme";
|
|
7
7
|
import { DiffSummary } from "../version-history/DiffSummary.js";
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
9
|
+
import { TruncatedText } from "../internal/truncated-text.js";
|
|
8
10
|
import {
|
|
9
11
|
parseDiffStatSummary,
|
|
10
12
|
trailingDiffStatLine,
|
|
@@ -73,12 +75,10 @@ export function WriteBackCard({ writeBack, className }: WriteBackCardProps) {
|
|
|
73
75
|
>
|
|
74
76
|
{/* Header: workspace name + quiet phase caption */}
|
|
75
77
|
<div className="stg:flex stg:items-center stg:gap-2 stg:px-2 stg:py-1">
|
|
76
|
-
<
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
{displayName}
|
|
81
|
-
</span>
|
|
78
|
+
<TruncatedText
|
|
79
|
+
text={displayName}
|
|
80
|
+
className="stg:min-w-0 stg:flex-1 stg:text-xs stg:font-medium stg:text-foreground"
|
|
81
|
+
/>
|
|
82
82
|
<PhaseCaption
|
|
83
83
|
phase={writeBack.phase}
|
|
84
84
|
pullRequestNumber={writeBack.pullRequestNumber}
|
|
@@ -236,16 +236,17 @@ function BranchRow({
|
|
|
236
236
|
|
|
237
237
|
return (
|
|
238
238
|
<div className="stg:group stg:flex stg:items-stretch">
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
>
|
|
239
|
+
{/* The old row title restated "branch ← base", which is already visible
|
|
240
|
+
text; only the branch name can clip, so it alone carries the
|
|
241
|
+
overflow-gated tooltip. */}
|
|
242
|
+
<div className="stg:flex stg:min-w-0 stg:flex-1 stg:items-center stg:gap-2 stg:px-2 stg:py-1 stg:text-xs">
|
|
243
243
|
<span className="stg:shrink-0 stg:text-muted-foreground">
|
|
244
244
|
<GitBranchIcon />
|
|
245
245
|
</span>
|
|
246
|
-
<
|
|
247
|
-
{branchName}
|
|
248
|
-
|
|
246
|
+
<TruncatedText
|
|
247
|
+
text={branchName}
|
|
248
|
+
className="stg:min-w-0 stg:font-mono stg:text-foreground"
|
|
249
|
+
/>
|
|
249
250
|
{baseBranch && (
|
|
250
251
|
<span className="stg:shrink-0 stg:font-mono stg:text-muted-foreground-faint">
|
|
251
252
|
{"\u2190 "}
|
|
@@ -253,22 +254,30 @@ function BranchRow({
|
|
|
253
254
|
</span>
|
|
254
255
|
)}
|
|
255
256
|
</div>
|
|
256
|
-
<
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
257
|
+
<Tooltip>
|
|
258
|
+
<TooltipTrigger
|
|
259
|
+
render={
|
|
260
|
+
<button
|
|
261
|
+
type="button"
|
|
262
|
+
onClick={handleCopy}
|
|
263
|
+
aria-label={copied ? "Branch name copied" : `Copy branch name ${branchName}`}
|
|
264
|
+
className={cn(
|
|
265
|
+
"stg:flex stg:shrink-0 stg:items-center stg:px-2 stg:text-muted-foreground stg:transition-opacity",
|
|
266
|
+
copied
|
|
267
|
+
? "stg:opacity-100"
|
|
268
|
+
: "stg:opacity-0 stg:group-hover:opacity-100 stg:focus-visible:opacity-100",
|
|
269
|
+
"stg:hover:text-foreground",
|
|
270
|
+
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-inset stg:focus-visible:ring-ring",
|
|
271
|
+
)}
|
|
272
|
+
/>
|
|
273
|
+
}
|
|
274
|
+
>
|
|
275
|
+
{copied ? <CheckIcon /> : <CopyIcon />}
|
|
276
|
+
</TooltipTrigger>
|
|
277
|
+
<TooltipContent side="top">
|
|
278
|
+
{copied ? "Copied" : "Copy branch name"}
|
|
279
|
+
</TooltipContent>
|
|
280
|
+
</Tooltip>
|
|
272
281
|
</div>
|
|
273
282
|
);
|
|
274
283
|
}
|
|
@@ -132,8 +132,12 @@ describe("ArtifactRow — download", () => {
|
|
|
132
132
|
});
|
|
133
133
|
});
|
|
134
134
|
|
|
135
|
-
it("
|
|
135
|
+
it("renders the directory Download control with no native title", () => {
|
|
136
136
|
renderRow({ artifact: dirArtifact("return-policy") });
|
|
137
|
-
|
|
137
|
+
// The "Download ZIP" copy moved to the house tooltip (native titles
|
|
138
|
+
// are banned — stigmer-cloud#268); its reveal is pinned in the
|
|
139
|
+
// real-browser suite (artifact-row-tooltips.layout.test.tsx).
|
|
140
|
+
expect(screen.getByLabelText("Download return-policy")).toBeTruthy();
|
|
141
|
+
expect(document.querySelector("[title]")).toBeNull();
|
|
138
142
|
});
|
|
139
143
|
});
|
|
@@ -68,11 +68,14 @@ describe("ArtifactRowView — the shared row primitive", () => {
|
|
|
68
68
|
expect((download as HTMLButtonElement).disabled).toBe(true);
|
|
69
69
|
});
|
|
70
70
|
|
|
71
|
-
it("renders directory affordances
|
|
71
|
+
it("renders directory affordances with no native title anywhere", () => {
|
|
72
72
|
renderView({
|
|
73
73
|
item: { ...fileItem, name: "bundle", tooltip: "bundle", isDirectory: true },
|
|
74
74
|
});
|
|
75
75
|
expect(screen.getByText("bundle/")).toBeTruthy();
|
|
76
|
-
|
|
76
|
+
// The "Download ZIP" copy moved to the house tooltip (native titles
|
|
77
|
+
// are banned — stigmer-cloud#268); its reveal is pinned in the
|
|
78
|
+
// real-browser suite (artifact-row-tooltips.layout.test.tsx).
|
|
79
|
+
expect(document.querySelector("[title]")).toBeNull();
|
|
77
80
|
});
|
|
78
81
|
});
|
|
@@ -46,8 +46,8 @@ describe("FilePathLink filename-first display", () => {
|
|
|
46
46
|
});
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
-
describe("FilePathLink full path
|
|
50
|
-
it("
|
|
49
|
+
describe("FilePathLink full path resolution", () => {
|
|
50
|
+
it("resolves the absolute local path into the accessible name (hover ride the house tooltip)", () => {
|
|
51
51
|
const entries = [localEntry("my-app", "/Users/dev/my-app")];
|
|
52
52
|
render(
|
|
53
53
|
<FilePathContext.Provider value={{ workspaceEntries: entries }}>
|
|
@@ -55,14 +55,18 @@ describe("FilePathLink full path on hover", () => {
|
|
|
55
55
|
</FilePathContext.Provider>,
|
|
56
56
|
);
|
|
57
57
|
const el = screen.getByRole("button");
|
|
58
|
-
|
|
59
|
-
//
|
|
58
|
+
// The resolved path is observable in the accessible name; the visual
|
|
59
|
+
// hover reveal is the house tooltip (native titles are banned,
|
|
60
|
+
// stigmer-cloud#268).
|
|
60
61
|
expect(el.getAttribute("aria-label")).toBe("Copy path: /Users/dev/my-app/src/main.go");
|
|
62
|
+
expect(el.getAttribute("title")).toBeNull();
|
|
61
63
|
});
|
|
62
64
|
|
|
63
|
-
it("falls back to the logical path
|
|
65
|
+
it("falls back to the logical path when unresolved", () => {
|
|
64
66
|
render(<FilePathLink path="src/main.go" />);
|
|
65
|
-
|
|
67
|
+
const el = screen.getByRole("button");
|
|
68
|
+
expect(el.getAttribute("aria-label")).toBe("Copy path: src/main.go");
|
|
69
|
+
expect(el.getAttribute("title")).toBeNull();
|
|
66
70
|
});
|
|
67
71
|
});
|
|
68
72
|
|
|
@@ -883,7 +883,8 @@ describe("FileReviewCard", () => {
|
|
|
883
883
|
expect(screen.getByText("a.ts")).toBeTruthy();
|
|
884
884
|
expect(screen.getByText("b.ts")).toBeTruthy();
|
|
885
885
|
expect(screen.getByRole("button", { name: /Copy path: src\/a\.ts/ })).toBeTruthy();
|
|
886
|
-
|
|
886
|
+
// Full path on hover rides the house tooltip; no native title remains.
|
|
887
|
+
expect(document.querySelector("[title]")).toBeNull();
|
|
887
888
|
});
|
|
888
889
|
|
|
889
890
|
it("keeps a single complete file collapsed behind the 'Files' expander", () => {
|
|
@@ -135,9 +135,10 @@ describe("MessageEntry attachment rendering", () => {
|
|
|
135
135
|
|
|
136
136
|
// The tile is preview-only: no "screenshot.png" text node anywhere…
|
|
137
137
|
expect(screen.queryByText("screenshot.png")).toBeNull();
|
|
138
|
-
// …but the name stays reachable — tooltip on the
|
|
138
|
+
// …but the name stays reachable — house tooltip on the tile (native
|
|
139
|
+
// titles are banned, stigmer-cloud#268), aria on both.
|
|
139
140
|
const tile = screen.getByRole("listitem", { name: "screenshot.png" });
|
|
140
|
-
expect(tile.getAttribute("title")).
|
|
141
|
+
expect(tile.getAttribute("title")).toBeNull();
|
|
141
142
|
expect(
|
|
142
143
|
screen.getByRole("button", { name: "Preview screenshot.png" }),
|
|
143
144
|
).toBeTruthy();
|
|
@@ -365,7 +365,12 @@ describe("MessageThread", () => {
|
|
|
365
365
|
// shows the folded set's changed file.
|
|
366
366
|
expect(screen.getByText("File changes")).toBeTruthy();
|
|
367
367
|
fireEvent.click(screen.getByRole("button", { name: "Show" }));
|
|
368
|
-
|
|
368
|
+
// The changed file renders as a FilePathLink whose accessible name
|
|
369
|
+
// carries the full path (the hover reveal is the house tooltip now —
|
|
370
|
+
// native titles are banned, stigmer-cloud#268).
|
|
371
|
+
expect(
|
|
372
|
+
screen.getByRole("button", { name: /Copy path: src\/a\.ts/ }),
|
|
373
|
+
).toBeTruthy();
|
|
369
374
|
expect(
|
|
370
375
|
document.querySelector('[data-cursor-target="file-review-approve"]'),
|
|
371
376
|
).toBeNull();
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// The interactive-trigger tooltip contract from the native-title sweep
|
|
2
|
+
// (stigmer-cloud#268), pinned in a real Chromium on ArtifactRowView. When
|
|
3
|
+
// an enabled control is its own tooltip trigger, keyboard FOCUS opens the
|
|
4
|
+
// hint too — the concrete accessibility gain over the native `title` this
|
|
5
|
+
// replaced, which no keyboard user ever saw. Focus-open is real focus
|
|
6
|
+
// machinery (Base UI opens on focus-visible), so only a real browser can
|
|
7
|
+
// pin it honestly.
|
|
8
|
+
|
|
9
|
+
import "../../../dist/styles.css";
|
|
10
|
+
|
|
11
|
+
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
12
|
+
import { render, cleanup } from "@testing-library/react";
|
|
13
|
+
import { userEvent } from "@vitest/browser/context";
|
|
14
|
+
import { ArtifactRowView } from "../ArtifactRowView.js";
|
|
15
|
+
|
|
16
|
+
const ITEM = {
|
|
17
|
+
name: "report.pdf",
|
|
18
|
+
tooltip: "/workspace/output/report.pdf",
|
|
19
|
+
subtitlePath: null,
|
|
20
|
+
sizeBytes: 2048,
|
|
21
|
+
isDirectory: false,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
function renderRow() {
|
|
25
|
+
const pane = document.createElement("div");
|
|
26
|
+
pane.className = "stgm";
|
|
27
|
+
pane.style.width = "320px";
|
|
28
|
+
document.body.appendChild(pane);
|
|
29
|
+
render(
|
|
30
|
+
<ul>
|
|
31
|
+
<ArtifactRowView
|
|
32
|
+
item={ITEM}
|
|
33
|
+
onOpen={() => {}}
|
|
34
|
+
onDownload={() => {}}
|
|
35
|
+
isDownloading={false}
|
|
36
|
+
/>
|
|
37
|
+
</ul>,
|
|
38
|
+
{ container: pane },
|
|
39
|
+
);
|
|
40
|
+
return pane;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function portaledText(pane: HTMLElement): string {
|
|
44
|
+
return Array.from(document.body.children)
|
|
45
|
+
.filter((node) => node !== pane)
|
|
46
|
+
.map((node) => node.textContent ?? "")
|
|
47
|
+
.join(" ");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
afterEach(() => {
|
|
51
|
+
cleanup();
|
|
52
|
+
document.querySelectorAll(".stgm").forEach((node) => node.remove());
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
describe("ArtifactRowView tooltips", () => {
|
|
56
|
+
it("opens the full-path hint on keyboard focus — no pointer required", async () => {
|
|
57
|
+
const pane = renderRow();
|
|
58
|
+
expect(pane.querySelector("[title]")).toBeNull();
|
|
59
|
+
|
|
60
|
+
// Tab reaches the open button (first focusable in the row); the
|
|
61
|
+
// tooltip must follow focus per the interactive-trigger pattern.
|
|
62
|
+
await userEvent.tab();
|
|
63
|
+
const openButton = Array.from(pane.querySelectorAll("button")).find((el) =>
|
|
64
|
+
el.textContent?.includes("report.pdf"),
|
|
65
|
+
);
|
|
66
|
+
expect(document.activeElement).toBe(openButton);
|
|
67
|
+
|
|
68
|
+
await vi.waitFor(
|
|
69
|
+
() => expect(portaledText(pane)).toContain("/workspace/output/report.pdf"),
|
|
70
|
+
{ timeout: 3000, interval: 50 },
|
|
71
|
+
);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("keeps the download hint hoverable through the wrapper span", async () => {
|
|
75
|
+
const pane = renderRow();
|
|
76
|
+
|
|
77
|
+
const download = Array.from(pane.querySelectorAll("button")).find(
|
|
78
|
+
(el) => el.getAttribute("aria-label") === "Download report.pdf",
|
|
79
|
+
);
|
|
80
|
+
await userEvent.hover(download!.parentElement!);
|
|
81
|
+
await vi.waitFor(
|
|
82
|
+
() => expect(portaledText(pane)).toContain("Download"),
|
|
83
|
+
{ timeout: 3000, interval: 50 },
|
|
84
|
+
);
|
|
85
|
+
await userEvent.unhover(download!.parentElement!);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it("says 'Download ZIP' for a directory", async () => {
|
|
89
|
+
const pane = document.createElement("div");
|
|
90
|
+
pane.className = "stgm";
|
|
91
|
+
pane.style.width = "320px";
|
|
92
|
+
document.body.appendChild(pane);
|
|
93
|
+
render(
|
|
94
|
+
<ul>
|
|
95
|
+
<ArtifactRowView
|
|
96
|
+
item={{ ...ITEM, name: "bundle", tooltip: "bundle", isDirectory: true }}
|
|
97
|
+
onOpen={() => {}}
|
|
98
|
+
onDownload={() => {}}
|
|
99
|
+
isDownloading={false}
|
|
100
|
+
/>
|
|
101
|
+
</ul>,
|
|
102
|
+
{ container: pane },
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
const download = Array.from(pane.querySelectorAll("button")).find(
|
|
106
|
+
(el) => el.getAttribute("aria-label") === "Download bundle",
|
|
107
|
+
);
|
|
108
|
+
await userEvent.hover(download!.parentElement!);
|
|
109
|
+
await vi.waitFor(
|
|
110
|
+
() => expect(portaledText(pane)).toContain("Download ZIP"),
|
|
111
|
+
{ timeout: 3000, interval: 50 },
|
|
112
|
+
);
|
|
113
|
+
await userEvent.unhover(download!.parentElement!);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
@@ -19,7 +19,7 @@ import type { Artifact } from "@stigmer/protos/ai/stigmer/agentic/artifact/v1/ap
|
|
|
19
19
|
export interface ArtifactRowItem {
|
|
20
20
|
/** Display label (file or directory name). */
|
|
21
21
|
readonly name: string;
|
|
22
|
-
/**
|
|
22
|
+
/** House-tooltip content — the fullest location/name known for the artifact. */
|
|
23
23
|
readonly tooltip: string;
|
|
24
24
|
/**
|
|
25
25
|
* Disambiguation subtitle rendered after the name when another row shares
|