@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
|
@@ -5,6 +5,7 @@ import Markdown from "react-markdown";
|
|
|
5
5
|
import type { JsonObject } from "@bufbuild/protobuf";
|
|
6
6
|
import { cn } from "@stigmer/theme";
|
|
7
7
|
import { MARKDOWN_COMPONENTS, REMARK_PLUGINS } from "../internal/markdown-components.js";
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
8
9
|
import { formatDuration, formatTimestamp } from "./format-utils.js";
|
|
9
10
|
import type { TaskOutcome } from "./WorkflowTaskApprovalCard.js";
|
|
10
11
|
import {
|
|
@@ -190,27 +191,33 @@ export const WorkflowTaskApprovalSummary = memo(function WorkflowTaskApprovalSum
|
|
|
190
191
|
/**
|
|
191
192
|
* `by <avatar> Ada Lovelace` — the reviewer's display identity, following
|
|
192
193
|
* the platform's actor pattern (see `WorkflowVersionTimeline`). The email
|
|
193
|
-
* rides
|
|
194
|
+
* rides on the house tooltip when it is not already the visible label. A
|
|
194
195
|
* label that fell through to the raw identity (legacy records) renders
|
|
195
196
|
* de-emphasized — internal IDs are never presented as if they were names.
|
|
196
197
|
*/
|
|
197
198
|
function ReviewerChip({ reviewer }: { readonly reviewer: TaskReviewerView }) {
|
|
199
|
+
const nameClass = cn(
|
|
200
|
+
reviewer.isRawId
|
|
201
|
+
? "stg:font-mono stg:text-[10px] stg:text-muted-foreground"
|
|
202
|
+
: "stg:font-medium stg:text-foreground",
|
|
203
|
+
);
|
|
204
|
+
|
|
198
205
|
return (
|
|
199
206
|
<span className="stg:flex stg:items-center stg:gap-1">
|
|
200
207
|
by{" "}
|
|
201
208
|
{reviewer.avatar && (
|
|
202
209
|
<img src={reviewer.avatar} alt="" className="stg:size-3.5 stg:rounded-full" />
|
|
203
210
|
)}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
{reviewer.label}
|
|
213
|
-
|
|
211
|
+
{reviewer.email ? (
|
|
212
|
+
<Tooltip>
|
|
213
|
+
<TooltipTrigger render={<span className={nameClass} />}>
|
|
214
|
+
{reviewer.label}
|
|
215
|
+
</TooltipTrigger>
|
|
216
|
+
<TooltipContent side="top">{reviewer.email}</TooltipContent>
|
|
217
|
+
</Tooltip>
|
|
218
|
+
) : (
|
|
219
|
+
<span className={nameClass}>{reviewer.label}</span>
|
|
220
|
+
)}
|
|
214
221
|
</span>
|
|
215
222
|
);
|
|
216
223
|
}
|
|
@@ -141,16 +141,16 @@ function formatKindName(kind: WorkflowTaskKind): string {
|
|
|
141
141
|
* keep the bundle size minimal (DD-004).
|
|
142
142
|
*/
|
|
143
143
|
function TaskKindIcon({
|
|
144
|
-
iconName,
|
|
145
144
|
className,
|
|
146
145
|
}: {
|
|
146
|
+
// The icon name is accepted (future per-kind icons) but not surfaced: the
|
|
147
|
+
// glyph is decorative and the kind label is already visible next to it.
|
|
147
148
|
readonly iconName: string;
|
|
148
149
|
readonly className?: string;
|
|
149
150
|
}) {
|
|
150
151
|
return (
|
|
151
152
|
<span
|
|
152
153
|
className={cn("stg:inline-flex stg:items-center stg:justify-center", className)}
|
|
153
|
-
title={iconName}
|
|
154
154
|
aria-hidden="true"
|
|
155
155
|
>
|
|
156
156
|
<TaskDotIcon />
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { memo, useCallback, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
5
6
|
|
|
6
7
|
/** Props for {@link WorkflowVersionBadge}. */
|
|
7
8
|
export interface WorkflowVersionBadgeProps {
|
|
@@ -56,26 +57,40 @@ export const WorkflowVersionBadge = memo(function WorkflowVersionBadge({
|
|
|
56
57
|
return (
|
|
57
58
|
<span className={cn("stg:inline-flex stg:items-center stg:gap-1.5", className)}>
|
|
58
59
|
{isCurrent && (
|
|
59
|
-
<
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
<Tooltip>
|
|
61
|
+
<TooltipTrigger
|
|
62
|
+
render={
|
|
63
|
+
<span
|
|
64
|
+
className="stg:size-2 stg:shrink-0 stg:rounded-full stg:bg-status-ready"
|
|
65
|
+
aria-label="Current version"
|
|
66
|
+
/>
|
|
67
|
+
}
|
|
68
|
+
/>
|
|
69
|
+
<TooltipContent side="top">Current version</TooltipContent>
|
|
70
|
+
</Tooltip>
|
|
64
71
|
)}
|
|
65
72
|
|
|
66
|
-
<
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
73
|
+
<Tooltip>
|
|
74
|
+
<TooltipTrigger
|
|
75
|
+
render={
|
|
76
|
+
<button
|
|
77
|
+
type="button"
|
|
78
|
+
onClick={handleCopy}
|
|
79
|
+
className={cn(
|
|
80
|
+
"stg:shrink-0 stg:rounded stg:bg-muted stg:px-1.5 stg:py-0.5 stg:font-mono stg:text-[11px] stg:font-medium stg:text-foreground stg:transition-colors",
|
|
81
|
+
"stg:hover:bg-accent-hover",
|
|
82
|
+
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring",
|
|
83
|
+
copied && "stg:bg-status-ready-subtle stg:text-status-ready",
|
|
84
|
+
)}
|
|
85
|
+
/>
|
|
86
|
+
}
|
|
87
|
+
>
|
|
88
|
+
{copied ? "copied" : truncated}
|
|
89
|
+
</TooltipTrigger>
|
|
90
|
+
<TooltipContent side="top" className="stg:break-all">
|
|
91
|
+
{copied ? "Copied!" : `Copy full hash: ${versionHash}`}
|
|
92
|
+
</TooltipContent>
|
|
93
|
+
</Tooltip>
|
|
79
94
|
|
|
80
95
|
{tag && (
|
|
81
96
|
<span className="stg:shrink-0 stg:rounded-full stg:bg-primary-subtle stg:px-1.5 stg:py-0.5 stg:text-[10px] stg:font-medium stg:text-primary">
|
|
@@ -5,6 +5,7 @@ import { cn } from "@stigmer/theme";
|
|
|
5
5
|
import { useWorkflowVersions } from "./useWorkflowVersions.js";
|
|
6
6
|
import { WorkflowVersionBadge } from "./WorkflowVersionBadge.js";
|
|
7
7
|
import type { VersionEntry } from "../version-history/types.js";
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
8
9
|
|
|
9
10
|
/** Props for {@link WorkflowVersionTimeline}. */
|
|
10
11
|
export interface WorkflowVersionTimelineProps {
|
|
@@ -169,12 +170,12 @@ function VersionTimelineRow({
|
|
|
169
170
|
|
|
170
171
|
{/* Second line: timestamp + actor */}
|
|
171
172
|
<div className="stg:flex stg:items-center stg:gap-2 stg:text-xs stg:text-muted-foreground">
|
|
172
|
-
<
|
|
173
|
-
dateTime={entry.timestamp.toISOString()}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
{
|
|
177
|
-
</
|
|
173
|
+
<Tooltip>
|
|
174
|
+
<TooltipTrigger render={<time dateTime={entry.timestamp.toISOString()} />}>
|
|
175
|
+
{formatRelativeTime(entry.timestamp)}
|
|
176
|
+
</TooltipTrigger>
|
|
177
|
+
<TooltipContent side="top">{entry.timestamp.toLocaleString()}</TooltipContent>
|
|
178
|
+
</Tooltip>
|
|
178
179
|
|
|
179
180
|
{entry.actor && (
|
|
180
181
|
<>
|
|
@@ -74,7 +74,9 @@ describe("WorkflowTaskApprovalSummary", () => {
|
|
|
74
74
|
/>,
|
|
75
75
|
);
|
|
76
76
|
const name = screen.getByText("Ada Lovelace");
|
|
77
|
-
|
|
77
|
+
// The email rides the house tooltip now (native titles are banned,
|
|
78
|
+
// stigmer-cloud#268); the name span stays title-free.
|
|
79
|
+
expect(name.getAttribute("title")).toBeNull();
|
|
78
80
|
expect(document.querySelector('img[src="https://example.com/ada.png"]')).toBeTruthy();
|
|
79
81
|
// The raw identity is never shown when a display identity exists.
|
|
80
82
|
expect(screen.queryByText("ida_01abc")).toBeNull();
|
|
@@ -69,8 +69,11 @@ describe("StructuredDataViewer", () => {
|
|
|
69
69
|
it("does not treat IDs/URLs > 120 chars as prose", () => {
|
|
70
70
|
const longId = "aex_" + "a".repeat(200);
|
|
71
71
|
render(<StructuredDataViewer data={{ execution_id: longId }} />);
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
// A long ID renders as a truncating value (TruncatedText — the full
|
|
73
|
+
// string stays in the DOM; native titles are banned), never as a <p>.
|
|
74
|
+
const element = screen.getByText(longId);
|
|
75
|
+
expect(element.tagName).not.toBe("P");
|
|
76
|
+
expect(element.closest("[title]")).toBeNull();
|
|
74
77
|
});
|
|
75
78
|
});
|
|
76
79
|
|
|
@@ -6,6 +6,7 @@ import { WorkflowExecutionPhaseBadge } from "../WorkflowExecutionPhaseBadge.js";
|
|
|
6
6
|
import { useExecutionComparison } from "./useExecutionComparison.js";
|
|
7
7
|
import { ComparisonSummaryCards } from "./ComparisonSummaryCards.js";
|
|
8
8
|
import { TaskComparisonTable } from "./TaskComparisonTable.js";
|
|
9
|
+
import { TruncatedText } from "../../internal/truncated-text.js";
|
|
9
10
|
|
|
10
11
|
/** Props for {@link ExecutionComparisonView}. */
|
|
11
12
|
export interface ExecutionComparisonViewProps {
|
|
@@ -146,9 +147,10 @@ function ExecutionLabel({
|
|
|
146
147
|
{label}:
|
|
147
148
|
</span>
|
|
148
149
|
<WorkflowExecutionPhaseBadge phase={phase} />
|
|
149
|
-
<
|
|
150
|
-
{name}
|
|
151
|
-
|
|
150
|
+
<TruncatedText
|
|
151
|
+
text={name}
|
|
152
|
+
className="stg:max-w-[10rem] stg:text-xs stg:font-medium stg:text-[var(--stgm-foreground,#1a1a2e)]"
|
|
153
|
+
/>
|
|
152
154
|
</div>
|
|
153
155
|
);
|
|
154
156
|
}
|
|
@@ -5,6 +5,7 @@ import { cn } from "@stigmer/theme";
|
|
|
5
5
|
import { WorkflowTaskStatus } from "@stigmer/protos/ai/stigmer/agentic/workflowexecution/v1/enum_pb";
|
|
6
6
|
import { formatDuration, formatMicroUsd } from "../format-utils.js";
|
|
7
7
|
import type { TaskComparison, ExecutionComparison } from "./types.js";
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../../internal/tooltip.js";
|
|
8
9
|
|
|
9
10
|
/** Props for {@link TaskComparisonTable}. */
|
|
10
11
|
export interface TaskComparisonTableProps {
|
|
@@ -152,11 +153,17 @@ const TaskRow = memo(function TaskRow({
|
|
|
152
153
|
<td className="stg:px-3 stg:py-2">
|
|
153
154
|
<div className="stg:flex stg:items-center stg:gap-1.5">
|
|
154
155
|
{isDivergencePoint && (
|
|
155
|
-
<
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
156
|
+
<Tooltip>
|
|
157
|
+
<TooltipTrigger
|
|
158
|
+
render={
|
|
159
|
+
<span
|
|
160
|
+
className="stg:inline-block stg:h-1.5 stg:w-1.5 stg:rounded-full stg:bg-[var(--stgm-warning,#f59e0b)]"
|
|
161
|
+
aria-label="Divergence point"
|
|
162
|
+
/>
|
|
163
|
+
}
|
|
164
|
+
/>
|
|
165
|
+
<TooltipContent side="top">First point of divergence</TooltipContent>
|
|
166
|
+
</Tooltip>
|
|
160
167
|
)}
|
|
161
168
|
<span className="stg:font-medium stg:text-[var(--stgm-foreground,#1a1a2e)]">
|
|
162
169
|
{task.taskName}
|
|
@@ -10,6 +10,8 @@ import {
|
|
|
10
10
|
type ExecutionSortField,
|
|
11
11
|
type SortDirection,
|
|
12
12
|
} from "./derive-execution-row.js";
|
|
13
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../../internal/tooltip.js";
|
|
14
|
+
import { TruncatedText } from "../../internal/truncated-text.js";
|
|
13
15
|
|
|
14
16
|
// ---------------------------------------------------------------------------
|
|
15
17
|
// Column definitions
|
|
@@ -33,9 +35,10 @@ const COLUMNS: readonly ColumnDef[] = [
|
|
|
33
35
|
header: "Name",
|
|
34
36
|
sortField: "name",
|
|
35
37
|
cell: (row) => (
|
|
36
|
-
<
|
|
37
|
-
{row.name || "\u2014"}
|
|
38
|
-
|
|
38
|
+
<TruncatedText
|
|
39
|
+
text={row.name || "\u2014"}
|
|
40
|
+
className="stg:font-medium stg:text-foreground stg:max-w-[12rem] stg:inline-block"
|
|
41
|
+
/>
|
|
39
42
|
),
|
|
40
43
|
defaultVisible: true,
|
|
41
44
|
minWidth: "8rem",
|
|
@@ -54,9 +57,12 @@ const COLUMNS: readonly ColumnDef[] = [
|
|
|
54
57
|
sortField: "startedAt",
|
|
55
58
|
cell: (row) =>
|
|
56
59
|
row.startedAt ? (
|
|
57
|
-
<
|
|
58
|
-
{
|
|
59
|
-
|
|
60
|
+
<Tooltip>
|
|
61
|
+
<TooltipTrigger render={<time dateTime={row.startedAt.toISOString()} />}>
|
|
62
|
+
{formatRelativeTime(row.startedAt)}
|
|
63
|
+
</TooltipTrigger>
|
|
64
|
+
<TooltipContent side="top">{row.startedAt.toLocaleString()}</TooltipContent>
|
|
65
|
+
</Tooltip>
|
|
60
66
|
) : (
|
|
61
67
|
"\u2014"
|
|
62
68
|
),
|
|
@@ -103,9 +109,14 @@ const COLUMNS: readonly ColumnDef[] = [
|
|
|
103
109
|
sortField: "tasks",
|
|
104
110
|
cell: (row) =>
|
|
105
111
|
row.taskCount > 0 ? (
|
|
106
|
-
<
|
|
107
|
-
{
|
|
108
|
-
|
|
112
|
+
<Tooltip>
|
|
113
|
+
<TooltipTrigger render={<span />}>
|
|
114
|
+
{row.completedTaskCount}/{row.taskCount}
|
|
115
|
+
</TooltipTrigger>
|
|
116
|
+
<TooltipContent side="top">
|
|
117
|
+
{`${row.completedTaskCount} of ${row.taskCount} tasks finished`}
|
|
118
|
+
</TooltipContent>
|
|
119
|
+
</Tooltip>
|
|
109
120
|
) : (
|
|
110
121
|
"\u2014"
|
|
111
122
|
),
|
|
@@ -122,15 +133,13 @@ const COLUMNS: readonly ColumnDef[] = [
|
|
|
122
133
|
if (!label) return "\u2014";
|
|
123
134
|
const isFailed = !!row.failedTaskName;
|
|
124
135
|
return (
|
|
125
|
-
<
|
|
136
|
+
<TruncatedText
|
|
137
|
+
text={label}
|
|
126
138
|
className={cn(
|
|
127
|
-
"stg:
|
|
139
|
+
"stg:max-w-[10rem] stg:inline-block stg:text-xs",
|
|
128
140
|
isFailed ? "stg:text-destructive" : "stg:text-muted-foreground",
|
|
129
141
|
)}
|
|
130
|
-
|
|
131
|
-
>
|
|
132
|
-
{label}
|
|
133
|
-
</span>
|
|
142
|
+
/>
|
|
134
143
|
);
|
|
135
144
|
},
|
|
136
145
|
defaultVisible: true,
|
|
@@ -5,6 +5,8 @@ import { cn } from "@stigmer/theme";
|
|
|
5
5
|
import type { WorkflowGraphModel } from "../workflow-graph-model.js";
|
|
6
6
|
import { TASK_NAME_PATTERN, TASK_NAME_PATTERN_ERROR } from "../canvas-constants.js";
|
|
7
7
|
import type { InspectorNodeIdentity, InspectorMutations } from "./types.js";
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../../internal/tooltip.js";
|
|
9
|
+
import { TruncatedText } from "../../internal/truncated-text.js";
|
|
8
10
|
|
|
9
11
|
/** Props for {@link InspectorHeader}. */
|
|
10
12
|
export interface InspectorHeaderProps {
|
|
@@ -107,14 +109,20 @@ export const InspectorHeader = memo(function InspectorHeader({
|
|
|
107
109
|
)}
|
|
108
110
|
</div>
|
|
109
111
|
) : (
|
|
110
|
-
<
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
112
|
+
<Tooltip>
|
|
113
|
+
<TooltipTrigger
|
|
114
|
+
render={
|
|
115
|
+
<button
|
|
116
|
+
type="button"
|
|
117
|
+
onClick={startEditing}
|
|
118
|
+
className="stg:w-fit stg:max-w-full stg:truncate stg:text-left stg:text-sm stg:font-semibold stg:text-[var(--stgm-foreground,#1a1a2e)] stg:hover:underline"
|
|
119
|
+
/>
|
|
120
|
+
}
|
|
121
|
+
>
|
|
122
|
+
{identity.taskName}
|
|
123
|
+
</TooltipTrigger>
|
|
124
|
+
<TooltipContent side="top">Click to rename</TooltipContent>
|
|
125
|
+
</Tooltip>
|
|
118
126
|
)}
|
|
119
127
|
</div>
|
|
120
128
|
|
|
@@ -155,9 +163,10 @@ export const InspectorHeader = memo(function InspectorHeader({
|
|
|
155
163
|
{identity.kindString.replace(/_/g, " ")}
|
|
156
164
|
</span>
|
|
157
165
|
{identity.description && (
|
|
158
|
-
<
|
|
159
|
-
{identity.description}
|
|
160
|
-
|
|
166
|
+
<TruncatedText
|
|
167
|
+
text={identity.description}
|
|
168
|
+
className="stg:text-[10px] stg:text-[var(--stgm-muted-foreground,#737373)]"
|
|
169
|
+
/>
|
|
161
170
|
)}
|
|
162
171
|
</div>
|
|
163
172
|
</div>
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { memo, useCallback } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../../internal/tooltip.js";
|
|
5
6
|
|
|
6
7
|
/** A nested task entry for display in the inspector. */
|
|
7
8
|
export interface NestedTaskEntry {
|
|
@@ -118,17 +119,23 @@ export const NestedTaskList = memo(function NestedTaskList({
|
|
|
118
119
|
|
|
119
120
|
{/* Remove button */}
|
|
120
121
|
{editable && onRemove && (
|
|
121
|
-
<
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
122
|
+
<Tooltip>
|
|
123
|
+
<TooltipTrigger
|
|
124
|
+
render={
|
|
125
|
+
<button
|
|
126
|
+
type="button"
|
|
127
|
+
onClick={(e) => { e.stopPropagation(); onRemove(idx); }}
|
|
128
|
+
className="stg:shrink-0 stg:opacity-0 stg:group-hover/task:opacity-100 stg:transition-opacity stg:text-[var(--stgm-muted-foreground,#737373)] stg:hover:text-[var(--stgm-destructive,#ef4444)]"
|
|
129
|
+
aria-label={`Remove task ${task.name}`}
|
|
130
|
+
/>
|
|
131
|
+
}
|
|
132
|
+
>
|
|
133
|
+
<svg width="10" height="10" viewBox="0 0 10 10" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" aria-hidden="true">
|
|
134
|
+
<path d="M2.5 2.5l5 5M7.5 2.5l-5 5" />
|
|
135
|
+
</svg>
|
|
136
|
+
</TooltipTrigger>
|
|
137
|
+
<TooltipContent side="top">Remove</TooltipContent>
|
|
138
|
+
</Tooltip>
|
|
132
139
|
)}
|
|
133
140
|
</div>
|
|
134
141
|
))}
|
|
@@ -6,6 +6,7 @@ import type { WorkflowGraphModel, WorkflowGraphBudget, WorkflowGraphEnvVar } fro
|
|
|
6
6
|
import { START_NODE_ID, END_NODE_ID } from "../workflow-graph-model.js";
|
|
7
7
|
import { CATEGORY_DISPLAY_NAMES } from "../canvas-constants.js";
|
|
8
8
|
import type { TopologyNodeCategory } from "../useWorkflowTopology.js";
|
|
9
|
+
import { TruncatedText } from "../../internal/truncated-text.js";
|
|
9
10
|
|
|
10
11
|
/** Props for {@link WorkflowSummaryPanel}. */
|
|
11
12
|
export interface WorkflowSummaryPanelProps {
|
|
@@ -201,9 +202,10 @@ function EnvVarsSection({
|
|
|
201
202
|
<span className="stg:text-[var(--stgm-muted-foreground,#737373)]">optional</span>
|
|
202
203
|
)}
|
|
203
204
|
{env.description && (
|
|
204
|
-
<
|
|
205
|
-
{env.description}
|
|
206
|
-
|
|
205
|
+
<TruncatedText
|
|
206
|
+
text={env.description}
|
|
207
|
+
className="stg:text-[var(--stgm-muted-foreground,#737373)]"
|
|
208
|
+
/>
|
|
207
209
|
)}
|
|
208
210
|
</div>
|
|
209
211
|
))}
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
import { memo, useCallback, useMemo, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import {
|
|
6
|
+
Tooltip,
|
|
7
|
+
TooltipContent,
|
|
8
|
+
TooltipTrigger,
|
|
9
|
+
} from "../../../internal/tooltip.js";
|
|
5
10
|
import type { WorkflowGraphNode, WorkflowGraphModel } from "../../workflow-graph-model.js";
|
|
6
11
|
import type { InspectorMutations } from "../types.js";
|
|
7
12
|
|
|
@@ -172,17 +177,23 @@ function SwitchCaseBranches({
|
|
|
172
177
|
</div>
|
|
173
178
|
|
|
174
179
|
{/* Remove button */}
|
|
175
|
-
<
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
180
|
+
<Tooltip>
|
|
181
|
+
<TooltipTrigger
|
|
182
|
+
render={
|
|
183
|
+
<button
|
|
184
|
+
type="button"
|
|
185
|
+
onClick={() => handleRemove(caseEntry.name)}
|
|
186
|
+
className="stg:shrink-0 stg:opacity-0 stg:group-hover/case:opacity-100 stg:transition-opacity stg:text-[var(--stgm-muted-foreground,#737373)] stg:hover:text-[var(--stgm-destructive,#ef4444)]"
|
|
187
|
+
aria-label={`Remove case ${caseEntry.name}`}
|
|
188
|
+
/>
|
|
189
|
+
}
|
|
190
|
+
>
|
|
191
|
+
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" aria-hidden="true">
|
|
192
|
+
<path d="M3 3l6 6M9 3l-6 6" />
|
|
193
|
+
</svg>
|
|
194
|
+
</TooltipTrigger>
|
|
195
|
+
<TooltipContent side="top">Remove case</TooltipContent>
|
|
196
|
+
</Tooltip>
|
|
186
197
|
</div>
|
|
187
198
|
);
|
|
188
199
|
})}
|
|
@@ -354,32 +365,51 @@ function ForkBranches({
|
|
|
354
365
|
className="stg:w-full stg:rounded stg:border stg:border-[var(--stgm-ring,#3b82f6)] stg:bg-[var(--stgm-background,#fff)] stg:px-1 stg:py-0.5 stg:text-[11px] stg:text-[var(--stgm-foreground,#1a1a2e)] stg:outline-none"
|
|
355
366
|
/>
|
|
356
367
|
) : (
|
|
357
|
-
<
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
368
|
+
<Tooltip>
|
|
369
|
+
<TooltipTrigger
|
|
370
|
+
render={
|
|
371
|
+
<span
|
|
372
|
+
className="stg:text-[11px] stg:font-medium stg:text-[var(--stgm-foreground,#1a1a2e)] stg:truncate stg:block stg:cursor-text"
|
|
373
|
+
onDoubleClick={() => startRename(idx, branch.name)}
|
|
374
|
+
/>
|
|
375
|
+
}
|
|
376
|
+
>
|
|
377
|
+
{branch.name}
|
|
378
|
+
</TooltipTrigger>
|
|
379
|
+
<TooltipContent side="top">
|
|
380
|
+
Double-click to rename
|
|
381
|
+
</TooltipContent>
|
|
382
|
+
</Tooltip>
|
|
364
383
|
)}
|
|
365
384
|
<span className="stg:text-[10px] stg:text-[var(--stgm-muted-foreground,#737373)]">
|
|
366
385
|
{branch.taskCount} {branch.taskCount === 1 ? "task" : "tasks"}
|
|
367
386
|
</span>
|
|
368
387
|
</div>
|
|
369
388
|
|
|
370
|
-
{/* Remove — disabled if only 2 branches
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
className="stg:
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
389
|
+
{/* Remove — disabled if only 2 branches. The tooltip trigger is
|
|
390
|
+
a wrapper span so the "why is this disabled" explanation
|
|
391
|
+
stays hoverable (disabled buttons never receive pointer
|
|
392
|
+
events). */}
|
|
393
|
+
<Tooltip>
|
|
394
|
+
<TooltipTrigger render={<span className="stg:inline-flex stg:shrink-0" />}>
|
|
395
|
+
<button
|
|
396
|
+
type="button"
|
|
397
|
+
onClick={() => handleRemove(branch.name)}
|
|
398
|
+
disabled={branches.length <= 2}
|
|
399
|
+
className="stg:shrink-0 stg:opacity-0 stg:group-hover/branch:opacity-100 stg:transition-opacity stg:text-[var(--stgm-muted-foreground,#737373)] stg:hover:text-[var(--stgm-destructive,#ef4444)] stg:disabled:opacity-30 stg:disabled:cursor-not-allowed"
|
|
400
|
+
aria-label={`Remove branch ${branch.name}`}
|
|
401
|
+
>
|
|
402
|
+
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" aria-hidden="true">
|
|
403
|
+
<path d="M3 3l6 6M9 3l-6 6" />
|
|
404
|
+
</svg>
|
|
405
|
+
</button>
|
|
406
|
+
</TooltipTrigger>
|
|
407
|
+
<TooltipContent side="top">
|
|
408
|
+
{branches.length <= 2
|
|
409
|
+
? "Fork requires at least 2 branches"
|
|
410
|
+
: "Remove branch"}
|
|
411
|
+
</TooltipContent>
|
|
412
|
+
</Tooltip>
|
|
383
413
|
</div>
|
|
384
414
|
))}
|
|
385
415
|
</div>
|
|
@@ -12,6 +12,7 @@ import { useEnvironmentList } from "../../environment/useEnvironmentList.js";
|
|
|
12
12
|
import { ResourceVisibilityControl } from "../../library/ResourceVisibilityControl.js";
|
|
13
13
|
import { useCheckPermission } from "../../iam-policy/useCheckPermission.js";
|
|
14
14
|
import { WorkflowInstanceEmptyState } from "./WorkflowInstanceEmptyState.js";
|
|
15
|
+
import { TruncatedText } from "../../internal/truncated-text.js";
|
|
15
16
|
|
|
16
17
|
/** Props for {@link WorkflowInstanceList}. */
|
|
17
18
|
export interface WorkflowInstanceListProps {
|
|
@@ -206,12 +207,10 @@ function InstanceRow({
|
|
|
206
207
|
>
|
|
207
208
|
<td className="stg:px-4 stg:py-2.5">
|
|
208
209
|
<div className="stg:min-w-0">
|
|
209
|
-
<
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
{meta?.name || meta?.slug || "—"}
|
|
214
|
-
</span>
|
|
210
|
+
<TruncatedText
|
|
211
|
+
text={meta?.name || meta?.slug || "—"}
|
|
212
|
+
className="stg:block stg:font-medium stg:text-foreground"
|
|
213
|
+
/>
|
|
215
214
|
{instance.spec?.description && (
|
|
216
215
|
<p className="stg:text-[0.65rem] stg:text-muted-foreground stg:truncate">
|
|
217
216
|
{instance.spec.description}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeAll, afterEach } from "vitest";
|
|
2
2
|
import { render, screen, fireEvent, cleanup } from "@testing-library/react";
|
|
3
3
|
import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
|
|
4
|
+
import { openMenu } from "../../../__tests__/helpers/open-menu";
|
|
4
5
|
import { WorkflowInstanceList } from "../WorkflowInstanceList";
|
|
5
6
|
|
|
6
7
|
// Isolate the row-actions behavior under test from the data, environment,
|
|
@@ -78,7 +79,7 @@ describe("WorkflowInstanceList row actions", () => {
|
|
|
78
79
|
|
|
79
80
|
// No always-visible action buttons; the row shows a single kebab.
|
|
80
81
|
expect(screen.queryByRole("button", { name: "Run" })).toBeNull();
|
|
81
|
-
|
|
82
|
+
await openMenu(screen.getByRole("button", { name: /^Actions for/ }));
|
|
82
83
|
|
|
83
84
|
expect(await screen.findByRole("menuitem", { name: "Run" })).toBeTruthy();
|
|
84
85
|
expect(screen.getByRole("menuitem", { name: "Delete" })).toBeTruthy();
|
|
@@ -97,7 +98,7 @@ describe("WorkflowInstanceList row actions", () => {
|
|
|
97
98
|
/>,
|
|
98
99
|
);
|
|
99
100
|
|
|
100
|
-
|
|
101
|
+
await openMenu(screen.getByRole("button", { name: /^Actions for/ }));
|
|
101
102
|
fireEvent.click(await screen.findByRole("menuitem", { name: "Run" }));
|
|
102
103
|
|
|
103
104
|
expect(onRun).toHaveBeenCalledTimes(1);
|
|
@@ -117,7 +118,7 @@ describe("WorkflowInstanceList row actions", () => {
|
|
|
117
118
|
/>,
|
|
118
119
|
);
|
|
119
120
|
|
|
120
|
-
|
|
121
|
+
await openMenu(screen.getByRole("button", { name: /^Actions for/ }));
|
|
121
122
|
fireEvent.click(await screen.findByRole("menuitem", { name: "Delete" }));
|
|
122
123
|
|
|
123
124
|
expect(onDelete).toHaveBeenCalledWith(inst);
|
|
@@ -135,7 +136,7 @@ describe("WorkflowInstanceList row actions", () => {
|
|
|
135
136
|
/>,
|
|
136
137
|
);
|
|
137
138
|
|
|
138
|
-
|
|
139
|
+
await openMenu(screen.getByRole("button", { name: /^Actions for/ }));
|
|
139
140
|
expect(await screen.findByRole("menuitem", { name: "Run" })).toBeTruthy();
|
|
140
141
|
expect(screen.queryByRole("menuitem", { name: "Delete" })).toBeNull();
|
|
141
142
|
});
|