@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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import { cn } from "@stigmer/theme";
|
|
4
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
4
5
|
|
|
5
6
|
/** Props for {@link FileReferenceChipList}. */
|
|
6
7
|
export interface FileReferenceChipListProps {
|
|
@@ -83,24 +84,35 @@ function FileReferenceChip({
|
|
|
83
84
|
const filename = path.split("/").pop() ?? path;
|
|
84
85
|
|
|
85
86
|
return (
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
className="stg:ml-0.5 stg:shrink-0 stg:text-muted-foreground stg:hover:text-destructive stg:disabled:pointer-events-none"
|
|
99
|
-
aria-label={`Remove reference to ${path}`}
|
|
87
|
+
// The chip shows only the basename; the tooltip restores the full path,
|
|
88
|
+
// so it is a hover-always hint on the chip, not an overflow-gated
|
|
89
|
+
// TruncatedText.
|
|
90
|
+
<Tooltip>
|
|
91
|
+
<TooltipTrigger
|
|
92
|
+
render={
|
|
93
|
+
<span
|
|
94
|
+
role="listitem"
|
|
95
|
+
aria-label={`Referenced file: ${path}`}
|
|
96
|
+
className="stg:inline-flex stg:max-w-[200px] stg:items-center stg:gap-1 stg:rounded-md stg:bg-muted-subtle stg:px-2 stg:py-0.5 stg:text-xs stg:text-foreground"
|
|
97
|
+
/>
|
|
98
|
+
}
|
|
100
99
|
>
|
|
101
|
-
<
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
<FileRefIcon />
|
|
101
|
+
<span className="stg:truncate">{filename}</span>
|
|
102
|
+
<button
|
|
103
|
+
type="button"
|
|
104
|
+
onClick={onRemove}
|
|
105
|
+
disabled={disabled}
|
|
106
|
+
className="stg:ml-0.5 stg:shrink-0 stg:text-muted-foreground stg:hover:text-destructive stg:disabled:pointer-events-none"
|
|
107
|
+
aria-label={`Remove reference to ${path}`}
|
|
108
|
+
>
|
|
109
|
+
<XIcon />
|
|
110
|
+
</button>
|
|
111
|
+
</TooltipTrigger>
|
|
112
|
+
<TooltipContent side="top" className="stg:break-all">
|
|
113
|
+
{path}
|
|
114
|
+
</TooltipContent>
|
|
115
|
+
</Tooltip>
|
|
104
116
|
);
|
|
105
117
|
}
|
|
106
118
|
|
|
@@ -80,7 +80,7 @@ describe("FileReferenceChipList", () => {
|
|
|
80
80
|
expect(list.getAttribute("aria-label")).toBe("Referenced workspace files");
|
|
81
81
|
});
|
|
82
82
|
|
|
83
|
-
it("
|
|
83
|
+
it("keeps the chip free of native titles — the full path rides the house tooltip", () => {
|
|
84
84
|
render(
|
|
85
85
|
<FileReferenceChipList
|
|
86
86
|
refs={["src/deeply/nested/file.ts"]}
|
|
@@ -89,6 +89,9 @@ describe("FileReferenceChipList", () => {
|
|
|
89
89
|
);
|
|
90
90
|
|
|
91
91
|
const item = screen.getByRole("listitem");
|
|
92
|
-
expect(item.getAttribute("title")).
|
|
92
|
+
expect(item.getAttribute("title")).toBeNull();
|
|
93
|
+
// The basename stays visible; the full path is the tooltip's content
|
|
94
|
+
// (reveal pinned in the real-browser suites).
|
|
95
|
+
expect(item.textContent).toContain("file.ts");
|
|
93
96
|
});
|
|
94
97
|
});
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
iamRoleFromString,
|
|
16
16
|
iamRoleToString,
|
|
17
17
|
} from "@stigmer/sdk";
|
|
18
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
18
19
|
import { useResourceAccess } from "./useResourceAccess.js";
|
|
19
20
|
import { usePrincipalsCount } from "./usePrincipalsCount.js";
|
|
20
21
|
import { useWhoAmI } from "./useWhoAmI.js";
|
|
@@ -282,26 +283,32 @@ function MemberRow({
|
|
|
282
283
|
function RoleBadge({ grant }: { grant: RoleGrant }) {
|
|
283
284
|
const roleName = grant.role?.name || grant.role?.code || "Unknown";
|
|
284
285
|
return (
|
|
285
|
-
<
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
286
|
+
<Tooltip>
|
|
287
|
+
<TooltipTrigger
|
|
288
|
+
render={
|
|
289
|
+
<span
|
|
290
|
+
className={cn(
|
|
291
|
+
"stg:inline-flex stg:items-center stg:rounded-md stg:border stg:px-2 stg:py-0.5 stg:text-[0.65rem] stg:font-medium",
|
|
292
|
+
grant.isInherited
|
|
293
|
+
? "stg:border-border-muted stg:text-muted-foreground stg:bg-muted-subtle stg:italic"
|
|
294
|
+
: "stg:border-border stg:bg-muted stg:text-foreground",
|
|
295
|
+
)}
|
|
296
|
+
/>
|
|
297
|
+
}
|
|
298
|
+
>
|
|
299
|
+
{roleName}
|
|
300
|
+
{grant.isInherited && (
|
|
301
|
+
<span className="stg:ml-1 stg:text-[0.55rem] stg:text-muted-foreground">
|
|
302
|
+
(inherited)
|
|
303
|
+
</span>
|
|
304
|
+
)}
|
|
305
|
+
</TooltipTrigger>
|
|
306
|
+
<TooltipContent side="top">
|
|
307
|
+
{grant.isInherited
|
|
294
308
|
? `Inherited from ${grant.ownerResource?.kind ?? "parent"}`
|
|
295
|
-
: `Directly assigned`
|
|
296
|
-
|
|
297
|
-
>
|
|
298
|
-
{roleName}
|
|
299
|
-
{grant.isInherited && (
|
|
300
|
-
<span className="stg:ml-1 stg:text-[0.55rem] stg:text-muted-foreground">
|
|
301
|
-
(inherited)
|
|
302
|
-
</span>
|
|
303
|
-
)}
|
|
304
|
-
</span>
|
|
309
|
+
: `Directly assigned`}
|
|
310
|
+
</TooltipContent>
|
|
311
|
+
</Tooltip>
|
|
305
312
|
);
|
|
306
313
|
}
|
|
307
314
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import type { ApiResourceRefView } from "@stigmer/protos/ai/stigmer/iam/iampolicy/v1/io_pb";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* The human-readable identity-source label for a principal, or `""` when none
|
|
@@ -39,15 +40,21 @@ export function ProviderBadge({ principal, className }: ProviderBadgeProps) {
|
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
return (
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
43
|
+
<Tooltip>
|
|
44
|
+
<TooltipTrigger
|
|
45
|
+
render={
|
|
46
|
+
<span
|
|
47
|
+
className={cn(
|
|
48
|
+
"stg:inline-flex stg:items-center stg:rounded stg:px-1.5 stg:py-0.5 stg:text-[0.6rem] stg:font-medium",
|
|
49
|
+
"stg:bg-muted-subtle stg:text-muted-foreground",
|
|
50
|
+
className,
|
|
51
|
+
)}
|
|
52
|
+
/>
|
|
53
|
+
}
|
|
54
|
+
>
|
|
55
|
+
{label}
|
|
56
|
+
</TooltipTrigger>
|
|
57
|
+
<TooltipContent side="top">{`Identity provider: ${label}`}</TooltipContent>
|
|
58
|
+
</Tooltip>
|
|
52
59
|
);
|
|
53
60
|
}
|
|
@@ -74,7 +74,6 @@ export function RoleSelector({
|
|
|
74
74
|
return (
|
|
75
75
|
<label
|
|
76
76
|
key={opt.value}
|
|
77
|
-
title={opt.description}
|
|
78
77
|
className={cn(
|
|
79
78
|
"stg:inline-flex stg:cursor-pointer stg:flex-col stg:rounded-md stg:border stg:px-3 stg:py-1.5 stg:text-xs stg:transition-colors",
|
|
80
79
|
isChecked
|
|
@@ -5,6 +5,7 @@ import { cn } from "@stigmer/theme";
|
|
|
5
5
|
import { getUserMessage } from "@stigmer/sdk";
|
|
6
6
|
import { timestampDate } from "@bufbuild/protobuf/wkt";
|
|
7
7
|
import type { IdentityProvider } from "@stigmer/protos/ai/stigmer/iam/identityprovider/v1/api_pb";
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
8
9
|
import { useIdentityProviderList } from "./useIdentityProviderList.js";
|
|
9
10
|
import { useDeleteIdentityProvider } from "./useDeleteIdentityProvider.js";
|
|
10
11
|
|
|
@@ -246,9 +247,16 @@ function IdpRow({
|
|
|
246
247
|
</span>
|
|
247
248
|
)}
|
|
248
249
|
{createdAt && (
|
|
249
|
-
<
|
|
250
|
-
|
|
251
|
-
|
|
250
|
+
<Tooltip>
|
|
251
|
+
<TooltipTrigger
|
|
252
|
+
render={<time dateTime={timestampDate(createdAt).toISOString()} />}
|
|
253
|
+
>
|
|
254
|
+
{formatShortDate(timestampDate(createdAt))}
|
|
255
|
+
</TooltipTrigger>
|
|
256
|
+
<TooltipContent side="top">
|
|
257
|
+
{`Created ${timestampDate(createdAt).toISOString()}`}
|
|
258
|
+
</TooltipContent>
|
|
259
|
+
</Tooltip>
|
|
252
260
|
)}
|
|
253
261
|
</div>
|
|
254
262
|
|
package/src/index.ts
CHANGED
|
@@ -701,88 +701,6 @@ export type {
|
|
|
701
701
|
AgentWizardData,
|
|
702
702
|
} from "./agent/index.js";
|
|
703
703
|
|
|
704
|
-
// Datastore — data hooks (kind family + describe projection), record
|
|
705
|
-
// hooks (find/insert/update/delete + grid collection), guarded delete,
|
|
706
|
-
// the canonical value semantics of declared fields, the typed filter
|
|
707
|
-
// model, and the six styled components (detail view, records browser,
|
|
708
|
-
// filter builder, record form, schema view, sync report, delete dialog)
|
|
709
|
-
export {
|
|
710
|
-
useDatastore,
|
|
711
|
-
useDatastoreList,
|
|
712
|
-
useDatastoreCount,
|
|
713
|
-
useDatastoreSearch,
|
|
714
|
-
useDatastoreDescription,
|
|
715
|
-
DEFAULT_PARTITION,
|
|
716
|
-
useRecordList,
|
|
717
|
-
useInsertRecord,
|
|
718
|
-
useUpdateRecord,
|
|
719
|
-
useDeleteRecord,
|
|
720
|
-
useRecordCollection,
|
|
721
|
-
useDeleteDatastore,
|
|
722
|
-
buildUpdateFields,
|
|
723
|
-
coerceFieldValue,
|
|
724
|
-
formatFieldValue,
|
|
725
|
-
formatSystemTimestamp,
|
|
726
|
-
isListOperator,
|
|
727
|
-
isSortableField,
|
|
728
|
-
isValuelessOperator,
|
|
729
|
-
operatorsForField,
|
|
730
|
-
OPERATOR_LABELS,
|
|
731
|
-
RESERVED_FIELD_NAMES,
|
|
732
|
-
SYSTEM_FIELD_OPERATORS,
|
|
733
|
-
buildRecordFilter,
|
|
734
|
-
filterableFields,
|
|
735
|
-
formatConditionChip,
|
|
736
|
-
isConditionComplete,
|
|
737
|
-
FieldValueControl,
|
|
738
|
-
FIELD_INPUT_CLASSES,
|
|
739
|
-
CollectionSchemaView,
|
|
740
|
-
formatSubject,
|
|
741
|
-
DatastoreSyncReport,
|
|
742
|
-
RecordFilterBuilder,
|
|
743
|
-
RecordFormPanel,
|
|
744
|
-
CollectionRecordsBrowser,
|
|
745
|
-
DeleteDatastoreDialog,
|
|
746
|
-
DatastoreDetailView,
|
|
747
|
-
DatastoreIcon,
|
|
748
|
-
} from "./datastore/index.js";
|
|
749
|
-
export type {
|
|
750
|
-
UseDatastoreReturn,
|
|
751
|
-
UseDatastoreListOptions,
|
|
752
|
-
UseDatastoreListReturn,
|
|
753
|
-
UseDatastoreCountOptions,
|
|
754
|
-
UseDatastoreCountReturn,
|
|
755
|
-
UseDatastoreSearchOptions,
|
|
756
|
-
UseDatastoreSearchReturn,
|
|
757
|
-
UseDatastoreDescriptionReturn,
|
|
758
|
-
RecordScope,
|
|
759
|
-
UseRecordListParams,
|
|
760
|
-
UseRecordListReturn,
|
|
761
|
-
InsertRecordArgs,
|
|
762
|
-
UseInsertRecordReturn,
|
|
763
|
-
UpdateRecordArgs,
|
|
764
|
-
UseUpdateRecordReturn,
|
|
765
|
-
DeleteRecordArgs,
|
|
766
|
-
UseDeleteRecordReturn,
|
|
767
|
-
RecordColumnDef,
|
|
768
|
-
UseRecordCollectionOptions,
|
|
769
|
-
UseRecordCollectionReturn,
|
|
770
|
-
DeleteDatastoreArgs,
|
|
771
|
-
UseDeleteDatastoreReturn,
|
|
772
|
-
CoerceResult,
|
|
773
|
-
FilterableField,
|
|
774
|
-
RecordConditionDraft,
|
|
775
|
-
FieldValueControlProps,
|
|
776
|
-
CollectionSchemaViewProps,
|
|
777
|
-
DatastoreSyncReportProps,
|
|
778
|
-
RecordFilterBuilderProps,
|
|
779
|
-
RecordFormPanelProps,
|
|
780
|
-
CollectionRecordsBrowserProps,
|
|
781
|
-
DeleteDatastoreDialogProps,
|
|
782
|
-
DatastoreDetailTab,
|
|
783
|
-
DatastoreDetailViewProps,
|
|
784
|
-
} from "./datastore/index.js";
|
|
785
|
-
|
|
786
704
|
// Schedule — the disabled-vs-paused state derivation, the direct-query
|
|
787
705
|
// list core + workbench adapter (schedules are not search-backed), data
|
|
788
706
|
// hooks (get by reference, paginated list, count), behavior hooks
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// TruncatedText's overflow gating in a real Chromium (stigmer-cloud#268).
|
|
2
|
+
// The native `title` idiom this helper replaced fired whether or not the
|
|
3
|
+
// text was actually clipped; the helper opens the house tooltip ONLY when
|
|
4
|
+
// CSS truncation really happened. That distinction is a layout fact —
|
|
5
|
+
// happy-dom reports zero geometry — so only a real browser can pin it.
|
|
6
|
+
|
|
7
|
+
import "../../../dist/styles.css";
|
|
8
|
+
|
|
9
|
+
import { describe, it, expect, vi, afterEach } from "vitest";
|
|
10
|
+
import { render, cleanup } from "@testing-library/react";
|
|
11
|
+
import { userEvent } from "@vitest/browser/context";
|
|
12
|
+
import type { ReactElement } from "react";
|
|
13
|
+
import { TruncatedText } from "../truncated-text.js";
|
|
14
|
+
|
|
15
|
+
const LONG = "a-very-long-model-identifier/that-cannot-fit-in-eighty-pixels";
|
|
16
|
+
const SHORT = "fits";
|
|
17
|
+
|
|
18
|
+
/** A themed, hard-sized cell so truncation geometry is real. */
|
|
19
|
+
function renderInCell(ui: ReactElement, width: string) {
|
|
20
|
+
const cell = document.createElement("div");
|
|
21
|
+
cell.className = "stgm";
|
|
22
|
+
cell.style.width = width;
|
|
23
|
+
cell.style.display = "block";
|
|
24
|
+
document.body.appendChild(cell);
|
|
25
|
+
render(ui, { container: cell });
|
|
26
|
+
return cell;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function portaledText(cell: HTMLElement): string {
|
|
30
|
+
return Array.from(document.body.children)
|
|
31
|
+
.filter((node) => node !== cell)
|
|
32
|
+
.map((node) => node.textContent ?? "")
|
|
33
|
+
.join(" ");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
afterEach(() => {
|
|
37
|
+
cleanup();
|
|
38
|
+
document.querySelectorAll(".stgm").forEach((node) => node.remove());
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe("TruncatedText overflow gating", () => {
|
|
42
|
+
it("reveals the full value on hover when the text is actually clipped", async () => {
|
|
43
|
+
const cell = renderInCell(<TruncatedText text={LONG} />, "80px");
|
|
44
|
+
expect(cell.querySelector("[title]")).toBeNull();
|
|
45
|
+
|
|
46
|
+
const span = cell.querySelector("span");
|
|
47
|
+
expect(span!.scrollWidth).toBeGreaterThan(span!.clientWidth);
|
|
48
|
+
|
|
49
|
+
await userEvent.hover(span!);
|
|
50
|
+
await vi.waitFor(
|
|
51
|
+
() => expect(portaledText(cell)).toContain(LONG),
|
|
52
|
+
{ timeout: 3000, interval: 50 },
|
|
53
|
+
);
|
|
54
|
+
await userEvent.unhover(span!);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("stays quiet when nothing is clipped — the tooltip would only repeat the cell", async () => {
|
|
58
|
+
const cell = renderInCell(<TruncatedText text={SHORT} />, "300px");
|
|
59
|
+
|
|
60
|
+
const span = cell.querySelector("span");
|
|
61
|
+
await userEvent.hover(span!);
|
|
62
|
+
// Base UI's default open delay is 600ms; wait past it and assert the
|
|
63
|
+
// portal never produced the tooltip.
|
|
64
|
+
await new Promise((resolve) => setTimeout(resolve, 1200));
|
|
65
|
+
expect(portaledText(cell)).not.toContain(SHORT);
|
|
66
|
+
await userEvent.unhover(span!);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Fast structural pins for TruncatedText (the native-title sweep's
|
|
2
|
+
// truncation replacement, stigmer-cloud#268). Happy-dom can honestly pin
|
|
3
|
+
// the STRUCTURE — full text in the DOM, zero native titles, zero new tab
|
|
4
|
+
// stops; the overflow-gated REVEAL needs real layout and lives in
|
|
5
|
+
// truncated-text.layout.test.tsx.
|
|
6
|
+
|
|
7
|
+
import { describe, it, expect, afterEach } from "vitest";
|
|
8
|
+
import { render, cleanup, screen } from "@testing-library/react";
|
|
9
|
+
import { TruncatedText } from "../truncated-text.js";
|
|
10
|
+
|
|
11
|
+
afterEach(cleanup);
|
|
12
|
+
|
|
13
|
+
describe("TruncatedText", () => {
|
|
14
|
+
it("renders the full text in the DOM with no native title and no tab stop", () => {
|
|
15
|
+
render(<TruncatedText text="models/anthropic/claude-4.6-opus" />);
|
|
16
|
+
|
|
17
|
+
// CSS truncation is purely visual: screen readers and selection get
|
|
18
|
+
// the full value from the DOM, so no sr-only duplicate is needed.
|
|
19
|
+
const span = screen.getByText("models/anthropic/claude-4.6-opus");
|
|
20
|
+
expect(span.closest("[title]")).toBeNull();
|
|
21
|
+
expect(span.closest("[tabindex]")).toBeNull();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("applies stg:truncate by default and yields to a line-clamp class", () => {
|
|
25
|
+
const { rerender } = render(<TruncatedText text="abc" />);
|
|
26
|
+
expect(screen.getByText("abc").className).toContain("stg:truncate");
|
|
27
|
+
|
|
28
|
+
rerender(<TruncatedText text="abc" className="stg:line-clamp-2" />);
|
|
29
|
+
const clamped = screen.getByText("abc");
|
|
30
|
+
expect(clamped.className).toContain("stg:line-clamp-2");
|
|
31
|
+
expect(clamped.className).not.toContain("stg:truncate");
|
|
32
|
+
});
|
|
33
|
+
});
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "./tooltip.js";
|
|
6
|
+
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// SDK-internal truncated-text span with an overflow-gated house tooltip.
|
|
9
|
+
//
|
|
10
|
+
// Replaces the `title={fullValue}` idiom on truncated cells (paths, hashes,
|
|
11
|
+
// model ids, …) after the native-title sweep (stigmer/stigmer-cloud#268).
|
|
12
|
+
// Native titles were OS-delayed and fired whether or not the text was
|
|
13
|
+
// actually clipped; this helper opens the house tooltip ONLY when the text
|
|
14
|
+
// truly overflows its box, checked at open time — a non-truncated cell
|
|
15
|
+
// stays tooltip-free.
|
|
16
|
+
//
|
|
17
|
+
// The trigger is a plain, non-focusable span (the StatusHint precedent in
|
|
18
|
+
// ConversationTimelineView): CSS truncation is purely visual, so the full
|
|
19
|
+
// text is already in the DOM for screen readers and selection — the tooltip
|
|
20
|
+
// is a sighted-pointer convenience, and a tab stop per table cell would be
|
|
21
|
+
// noise. Works with or without a `TooltipProvider` in scope (the provider
|
|
22
|
+
// only adds delay grouping); like ./tooltip.tsx, NOT exported from
|
|
23
|
+
// @stigmer/react.
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
interface TruncatedTextProps {
|
|
27
|
+
/** The full value: rendered inside the span and shown by the tooltip. */
|
|
28
|
+
readonly text: string;
|
|
29
|
+
/**
|
|
30
|
+
* Classes for the truncating span. `stg:truncate` is applied by default;
|
|
31
|
+
* pass a `stg:line-clamp-*` class instead for multi-line clamping (the
|
|
32
|
+
* overflow check covers both axes).
|
|
33
|
+
*/
|
|
34
|
+
readonly className?: string;
|
|
35
|
+
/** Tooltip placement; truncated cells read best with the default "top". */
|
|
36
|
+
readonly side?: React.ComponentProps<typeof TooltipContent>["side"];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** True when CSS actually clipped the element on either axis. */
|
|
40
|
+
function isOverflowing(el: HTMLElement): boolean {
|
|
41
|
+
return el.scrollWidth > el.clientWidth || el.scrollHeight > el.clientHeight;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function TruncatedText({ text, className, side = "top" }: TruncatedTextProps) {
|
|
45
|
+
const spanRef = React.useRef<HTMLSpanElement>(null);
|
|
46
|
+
const [open, setOpen] = React.useState(false);
|
|
47
|
+
|
|
48
|
+
const handleOpenChange = React.useCallback((nextOpen: boolean) => {
|
|
49
|
+
if (nextOpen && spanRef.current && !isOverflowing(spanRef.current)) {
|
|
50
|
+
return; // Nothing is clipped — the tooltip would only repeat the cell.
|
|
51
|
+
}
|
|
52
|
+
setOpen(nextOpen);
|
|
53
|
+
}, []);
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<Tooltip open={open} onOpenChange={handleOpenChange}>
|
|
57
|
+
<TooltipTrigger
|
|
58
|
+
render={
|
|
59
|
+
<span
|
|
60
|
+
ref={spanRef}
|
|
61
|
+
className={cn(
|
|
62
|
+
// A plain inline span can neither truncate (overflow does not
|
|
63
|
+
// apply to inline boxes) nor be measured (clientWidth is 0 by
|
|
64
|
+
// spec), so the span defaults to block; cn()'s conflict
|
|
65
|
+
// resolution lets callers override with their own display
|
|
66
|
+
// class (inline-block, flex-1 cells, …).
|
|
67
|
+
"stg:block",
|
|
68
|
+
className?.match(/(?:^|\s)stg:line-clamp-/) ? undefined : "stg:truncate",
|
|
69
|
+
className,
|
|
70
|
+
)}
|
|
71
|
+
/>
|
|
72
|
+
}
|
|
73
|
+
>
|
|
74
|
+
{text}
|
|
75
|
+
</TooltipTrigger>
|
|
76
|
+
<TooltipContent side={side} className="stg:break-all">
|
|
77
|
+
{text}
|
|
78
|
+
</TooltipContent>
|
|
79
|
+
</Tooltip>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
@@ -15,6 +15,7 @@ import { useOrgInvitations } from "./useOrgInvitations.js";
|
|
|
15
15
|
import { useCreateInvitation } from "./useCreateInvitation.js";
|
|
16
16
|
import { useRevokeInvitation } from "./useRevokeInvitation.js";
|
|
17
17
|
import { InvitationCreatedAlert } from "./InvitationCreatedAlert.js";
|
|
18
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
18
19
|
import { RoleSelector } from "../iam-policy/RoleSelector.js";
|
|
19
20
|
|
|
20
21
|
// ---------------------------------------------------------------------------
|
|
@@ -465,11 +466,23 @@ function InvitationRow({
|
|
|
465
466
|
|
|
466
467
|
{/* Expiry */}
|
|
467
468
|
{expiresAt && (
|
|
468
|
-
<
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
469
|
+
<Tooltip>
|
|
470
|
+
<TooltipTrigger
|
|
471
|
+
render={
|
|
472
|
+
<time
|
|
473
|
+
dateTime={timestampDate(expiresAt).toISOString()}
|
|
474
|
+
className="stg:text-xs stg:text-muted-foreground"
|
|
475
|
+
/>
|
|
476
|
+
}
|
|
477
|
+
>
|
|
478
|
+
{isActive
|
|
479
|
+
? formatRelativeExpiry(timestampDate(expiresAt))
|
|
480
|
+
: formatShortDate(timestampDate(expiresAt))}
|
|
481
|
+
</TooltipTrigger>
|
|
482
|
+
<TooltipContent side="top">
|
|
483
|
+
{timestampDate(expiresAt).toISOString()}
|
|
484
|
+
</TooltipContent>
|
|
485
|
+
</Tooltip>
|
|
473
486
|
)}
|
|
474
487
|
</div>
|
|
475
488
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useRef } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
5
6
|
import type { ResourceListScope } from "../search/index.js";
|
|
6
7
|
|
|
7
8
|
/** Props for {@link ScopeToggle}. */
|
|
@@ -116,7 +117,7 @@ export function ScopeToggle({
|
|
|
116
117
|
const isSelected = value === option.value;
|
|
117
118
|
const Icon = option.icon;
|
|
118
119
|
|
|
119
|
-
|
|
120
|
+
const radio = (
|
|
120
121
|
<button
|
|
121
122
|
key={option.value}
|
|
122
123
|
ref={(el) => {
|
|
@@ -126,7 +127,6 @@ export function ScopeToggle({
|
|
|
126
127
|
role="radio"
|
|
127
128
|
aria-checked={isSelected}
|
|
128
129
|
aria-label={option.ariaLabel}
|
|
129
|
-
title={compact ? option.ariaLabel : undefined}
|
|
130
130
|
tabIndex={isSelected ? 0 : -1}
|
|
131
131
|
disabled={disabled}
|
|
132
132
|
onClick={() => handleSelect(option.value)}
|
|
@@ -143,6 +143,18 @@ export function ScopeToggle({
|
|
|
143
143
|
{!compact && option.label}
|
|
144
144
|
</button>
|
|
145
145
|
);
|
|
146
|
+
|
|
147
|
+
// Icon-only radios need their name discoverable by sighted users
|
|
148
|
+
// too: in compact mode each radio is its own tooltip trigger (hover
|
|
149
|
+
// and roving-tabindex focus both open it). Full mode shows visible
|
|
150
|
+
// labels, so a tooltip would only repeat them.
|
|
151
|
+
if (!compact) return radio;
|
|
152
|
+
return (
|
|
153
|
+
<Tooltip key={option.value}>
|
|
154
|
+
<TooltipTrigger render={radio} />
|
|
155
|
+
<TooltipContent side="top">{option.ariaLabel}</TooltipContent>
|
|
156
|
+
</Tooltip>
|
|
157
|
+
);
|
|
146
158
|
})}
|
|
147
159
|
</div>
|
|
148
160
|
);
|
|
@@ -5,6 +5,7 @@ import { Popover } from "@base-ui/react/popover";
|
|
|
5
5
|
import { cn } from "@stigmer/theme";
|
|
6
6
|
import { ApiResourceVisibility } from "@stigmer/protos/ai/stigmer/commons/apiresource/enum_pb";
|
|
7
7
|
import { useStigmerPortalContainer } from "../portal-container.js";
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../internal/tooltip.js";
|
|
8
9
|
import { ConfirmDialog } from "../resource-detail/ConfirmDialog.js";
|
|
9
10
|
import { useConfirmAction } from "../resource-detail/useConfirmAction.js";
|
|
10
11
|
import {
|
|
@@ -454,20 +455,26 @@ export function VisibilityBadge({
|
|
|
454
455
|
|
|
455
456
|
if (onClick) {
|
|
456
457
|
return (
|
|
457
|
-
<
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
458
|
+
<Tooltip>
|
|
459
|
+
<TooltipTrigger
|
|
460
|
+
render={
|
|
461
|
+
<button
|
|
462
|
+
type="button"
|
|
463
|
+
onClick={onClick}
|
|
464
|
+
aria-label={`${option.label} visibility — manage access`}
|
|
465
|
+
className={cn(
|
|
466
|
+
VISIBILITY_CHIP_CLASS,
|
|
467
|
+
"stg:transition-colors stg:hover:bg-accent-hover stg:hover:text-foreground",
|
|
468
|
+
"stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring",
|
|
469
|
+
className,
|
|
470
|
+
)}
|
|
471
|
+
/>
|
|
472
|
+
}
|
|
473
|
+
>
|
|
474
|
+
{content}
|
|
475
|
+
</TooltipTrigger>
|
|
476
|
+
<TooltipContent side="top">Manage access</TooltipContent>
|
|
477
|
+
</Tooltip>
|
|
471
478
|
);
|
|
472
479
|
}
|
|
473
480
|
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import { useCallback, useMemo } from "react";
|
|
4
4
|
import { parse as parseYaml } from "yaml";
|
|
5
5
|
import type { Agent } from "@stigmer/protos/ai/stigmer/agentic/agent/v1/api_pb";
|
|
6
|
-
import type { Datastore } from "@stigmer/protos/ai/stigmer/agentic/datastore/v1/api_pb";
|
|
7
6
|
import type { McpServer } from "@stigmer/protos/ai/stigmer/agentic/mcpserver/v1/api_pb";
|
|
8
7
|
import type { Schedule } from "@stigmer/protos/ai/stigmer/agentic/schedule/v1/api_pb";
|
|
9
8
|
import type { Workflow } from "@stigmer/protos/ai/stigmer/agentic/workflow/v1/api_pb";
|
|
@@ -18,9 +17,9 @@ import { serializeWorkflowYaml } from "../workflow/serialize-workflow-yaml.js";
|
|
|
18
17
|
/** Options for {@link useExportResource}. */
|
|
19
18
|
export interface UseExportResourceOptions {
|
|
20
19
|
/** The resource kind — determines which serializer is used. */
|
|
21
|
-
readonly kind: "Agent" | "McpServer" | "Workflow" | "
|
|
20
|
+
readonly kind: "Agent" | "McpServer" | "Workflow" | "Schedule";
|
|
22
21
|
/** The proto resource to export, or `null` when not yet loaded. */
|
|
23
|
-
readonly resource: Agent | McpServer | Workflow |
|
|
22
|
+
readonly resource: Agent | McpServer | Workflow | Schedule | null;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
/** Return value of {@link useExportResource}. */
|
|
@@ -45,7 +44,7 @@ export interface UseExportResourceReturn {
|
|
|
45
44
|
|
|
46
45
|
/**
|
|
47
46
|
* Headless export hook for Stigmer resources (Agent, McpServer,
|
|
48
|
-
* Workflow,
|
|
47
|
+
* Workflow, Schedule).
|
|
49
48
|
*
|
|
50
49
|
* Serializes the resource into YAML and JSON formats and provides
|
|
51
50
|
* stable callbacks for copying to clipboard or triggering a file
|
|
@@ -155,8 +155,7 @@ export function EditResourceYamlDialog({
|
|
|
155
155
|
</div>
|
|
156
156
|
)}
|
|
157
157
|
|
|
158
|
-
{/* Apply error — the server's refusal
|
|
159
|
-
collection-removal rejection) rendered verbatim, with an
|
|
158
|
+
{/* Apply error — the server's refusal rendered verbatim, with an
|
|
160
159
|
acknowledge-and-retry affordance: the operator reads the
|
|
161
160
|
guard, edits or decides, and re-applies without reopening
|
|
162
161
|
the dialog. */}
|