@vertesia/ui 1.5.0-dev.20260901.052906Z → 1.5.0-dev.20260910.051115Z
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/lib/core/components/Avatar.d.ts.map +1 -1
- package/lib/core/components/Avatar.js +3 -3
- package/lib/core/components/Avatar.js.map +1 -1
- package/lib/core/components/ComboBox.js +1 -1
- package/lib/core/components/ComboBox.js.map +1 -1
- package/lib/core/components/FileUpload.js +1 -1
- package/lib/core/components/FileUpload.js.map +1 -1
- package/lib/core/components/Link.js +1 -1
- package/lib/core/components/Link.js.map +1 -1
- package/lib/core/components/SelectList.js +1 -1
- package/lib/core/components/SelectList.js.map +1 -1
- package/lib/core/components/SidePanel.js +1 -1
- package/lib/core/components/SidePanel.js.map +1 -1
- package/lib/core/components/Spinner.js +1 -1
- package/lib/core/components/Spinner.js.map +1 -1
- package/lib/core/components/TagsInput.js +8 -8
- package/lib/core/components/TagsInput.js.map +1 -1
- package/lib/core/components/shadcn/MessageBox.js +1 -1
- package/lib/core/components/shadcn/MessageBox.js.map +1 -1
- package/lib/core/components/shadcn/button.js +1 -1
- package/lib/core/components/shadcn/button.js.map +1 -1
- package/lib/core/components/shadcn/card.d.ts.map +1 -1
- package/lib/core/components/shadcn/card.js +1 -1
- package/lib/core/components/shadcn/card.js.map +1 -1
- package/lib/core/components/shadcn/command.js +5 -5
- package/lib/core/components/shadcn/command.js.map +1 -1
- package/lib/core/components/shadcn/filters/DynamicLabel.js +1 -1
- package/lib/core/components/shadcn/filters/DynamicLabel.js.map +1 -1
- package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js +3 -3
- package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
- package/lib/core/components/shadcn/input.js +3 -3
- package/lib/core/components/shadcn/input.js.map +1 -1
- package/lib/core/components/shadcn/modal/ConfirmModal.js +1 -1
- package/lib/core/components/shadcn/modal/ConfirmModal.js.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.js +2 -2
- package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
- package/lib/core/components/shadcn/overflowTabs.js +2 -2
- package/lib/core/components/shadcn/overflowTabs.js.map +1 -1
- package/lib/core/components/shadcn/popover.js +1 -1
- package/lib/core/components/shadcn/popover.js.map +1 -1
- package/lib/core/components/shadcn/radioGroup.d.ts.map +1 -1
- package/lib/core/components/shadcn/radioGroup.js +3 -3
- package/lib/core/components/shadcn/radioGroup.js.map +1 -1
- package/lib/core/components/shadcn/selectBox.js +1 -1
- package/lib/core/components/shadcn/selectBox.js.map +1 -1
- package/lib/core/components/shadcn/tabs.d.ts.map +1 -1
- package/lib/core/components/shadcn/tabs.js +5 -2
- package/lib/core/components/shadcn/tabs.js.map +1 -1
- package/lib/core/components/styles.js +1 -1
- package/lib/core/components/styles.js.map +1 -1
- package/lib/core/components/table/index.js +1 -1
- package/lib/core/hooks/useFetch.d.ts.map +1 -1
- package/lib/core/hooks/useFetch.js +2 -0
- package/lib/core/hooks/useFetch.js.map +1 -1
- package/lib/features/activity-doc/ActivityDoc.js +8 -8
- package/lib/features/activity-doc/ActivityDoc.js.map +1 -1
- package/lib/features/agent/chat/AgentChart.js +1 -1
- package/lib/features/agent/chat/AgentChart.js.map +1 -1
- package/lib/features/agent/chat/AgentRightPanel.d.ts +2 -3
- package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentRightPanel.js +3 -3
- package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
- package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
- package/lib/features/agent/chat/AskUserWidget.js +13 -13
- package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
- package/lib/features/agent/chat/DocumentPanel.d.ts +7 -7
- package/lib/features/agent/chat/DocumentPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/DocumentPanel.js +6 -12
- package/lib/features/agent/chat/DocumentPanel.js.map +1 -1
- package/lib/features/agent/chat/DocumentsTab.d.ts +15 -0
- package/lib/features/agent/chat/DocumentsTab.d.ts.map +1 -0
- package/lib/features/agent/chat/DocumentsTab.js +33 -0
- package/lib/features/agent/chat/DocumentsTab.js.map +1 -0
- package/lib/features/agent/chat/JumpingDots.js +1 -1
- package/lib/features/agent/chat/JumpingDots.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js +3 -3
- package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +22 -9
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +5 -5
- package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/Header.js +16 -11
- package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +7 -7
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessagesContainer.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessagesContainer.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js +10 -10
- package/lib/features/agent/chat/ModernAgentOutput/PlanPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlideInPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlidingMessages.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js +17 -17
- package/lib/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js +14 -2
- package/lib/features/agent/chat/ModernAgentOutput/SummaryConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js +15 -15
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +18 -0
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
- package/lib/features/agent/chat/SlidingThinkingIndicator.d.ts.map +1 -1
- package/lib/features/agent/chat/SlidingThinkingIndicator.js +5 -2
- package/lib/features/agent/chat/SlidingThinkingIndicator.js.map +1 -1
- package/lib/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
- package/lib/features/agent/chat/VegaLiteChart.js +6 -2
- package/lib/features/agent/chat/VegaLiteChart.js.map +1 -1
- package/lib/features/agent/chat/hooks/useDocumentPanel.d.ts +2 -2
- package/lib/features/agent/chat/hooks/useDocumentPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/hooks/useDocumentPanel.js +0 -18
- package/lib/features/agent/chat/hooks/useDocumentPanel.js.map +1 -1
- package/lib/features/errors/RowErrorBoundary.js +1 -1
- package/lib/features/errors/RowErrorBoundary.js.map +1 -1
- package/lib/features/facets/AgentRunnerFacetsNav.js +1 -1
- package/lib/features/facets/AgentRunnerFacetsNav.js.map +1 -1
- package/lib/features/facets/utils/VInteractionFacet.d.ts +3 -5
- package/lib/features/facets/utils/VInteractionFacet.d.ts.map +1 -1
- package/lib/features/facets/utils/VInteractionFacet.js +10 -23
- package/lib/features/facets/utils/VInteractionFacet.js.map +1 -1
- package/lib/features/facets/utils/VUserFacet.js +1 -1
- package/lib/features/facets/utils/VUserFacet.js.map +1 -1
- package/lib/features/layout/GenericPageNavHeader.d.ts.map +1 -1
- package/lib/features/layout/GenericPageNavHeader.js +4 -1
- package/lib/features/layout/GenericPageNavHeader.js.map +1 -1
- package/lib/features/layout/NotFoundView.js +1 -1
- package/lib/features/layout/NotFoundView.js.map +1 -1
- package/lib/features/magic-pdf/AnnotatedImageSlider.js +4 -12
- package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
- package/lib/features/magic-pdf/ExtractedContentView.js +4 -4
- package/lib/features/magic-pdf/ExtractedContentView.js.map +1 -1
- package/lib/features/magic-pdf/MagicPdfView.js +1 -1
- package/lib/features/magic-pdf/MagicPdfView.js.map +1 -1
- package/lib/features/oauth/McpConnectionsButton.d.ts.map +1 -1
- package/lib/features/oauth/McpConnectionsButton.js +4 -1
- package/lib/features/oauth/McpConnectionsButton.js.map +1 -1
- package/lib/features/oauth/McpConnectionsDialog.d.ts.map +1 -1
- package/lib/features/oauth/McpConnectionsDialog.js +3 -2
- package/lib/features/oauth/McpConnectionsDialog.js.map +1 -1
- package/lib/features/oauth/useMcpConnections.d.ts +6 -7
- package/lib/features/oauth/useMcpConnections.d.ts.map +1 -1
- package/lib/features/oauth/useMcpConnections.js +27 -20
- package/lib/features/oauth/useMcpConnections.js.map +1 -1
- package/lib/features/pdf-viewer/PdfPageRenderer.js +2 -2
- package/lib/features/pdf-viewer/PdfPageRenderer.js.map +1 -1
- package/lib/features/pdf-viewer/PdfPageSlider.js +3 -3
- package/lib/features/pdf-viewer/PdfPageSlider.js.map +1 -1
- package/lib/features/pdf-viewer/SimplePdfViewer.js +1 -1
- package/lib/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
- package/lib/features/permissions/UserPermissionsProvider.d.ts +2 -1
- package/lib/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
- package/lib/features/permissions/UserPermissionsProvider.js +35 -22
- package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
- package/lib/features/permissions/useRoleMappings.d.ts +19 -0
- package/lib/features/permissions/useRoleMappings.d.ts.map +1 -0
- package/lib/features/permissions/useRoleMappings.js +87 -0
- package/lib/features/permissions/useRoleMappings.js.map +1 -0
- package/lib/features/store/collections/SelectCollection.js +1 -1
- package/lib/features/store/collections/SelectCollection.js.map +1 -1
- package/lib/features/store/objects/DocumentPreviewPanel.d.ts.map +1 -1
- package/lib/features/store/objects/DocumentPreviewPanel.js +9 -9
- package/lib/features/store/objects/DocumentPreviewPanel.js.map +1 -1
- package/lib/features/store/objects/DocumentTable.js +1 -1
- package/lib/features/store/objects/DocumentTable.js.map +1 -1
- package/lib/features/store/objects/components/DocumentIcon.js +2 -2
- package/lib/features/store/objects/components/DocumentIcon.js.map +1 -1
- package/lib/features/store/objects/components/DocumentInput.js +1 -1
- package/lib/features/store/objects/components/DocumentInput.js.map +1 -1
- package/lib/features/store/objects/components/PropertiesEditorModal.js +1 -1
- package/lib/features/store/objects/components/PropertiesEditorModal.js.map +1 -1
- package/lib/features/store/objects/components/SaveVersionConfirmModal.js +1 -1
- package/lib/features/store/objects/components/SaveVersionConfirmModal.js.map +1 -1
- package/lib/features/store/objects/layout/documentLayout.d.ts.map +1 -1
- package/lib/features/store/objects/layout/documentLayout.js +2 -2
- package/lib/features/store/objects/layout/documentLayout.js.map +1 -1
- package/lib/features/store/objects/selection/SelectionActions.js +1 -1
- package/lib/features/store/objects/selection/SelectionActions.js.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.d.ts +10 -1
- package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.js +29 -19
- package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.d.ts +1 -1
- package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.js +5 -3
- package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
- package/lib/features/store/types/SelectContentTypeModal.js +1 -1
- package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
- package/lib/features/store/types/TypeRegistry.d.ts +10 -5
- package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +10 -5
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
- package/lib/features/user/UserAvatar.js +2 -2
- package/lib/features/user/UserAvatar.js.map +1 -1
- package/lib/features/user/UserInfo.d.ts.map +1 -1
- package/lib/features/user/UserInfo.js +7 -7
- package/lib/features/user/UserInfo.js.map +1 -1
- package/lib/features/utils/index.d.ts +1 -0
- package/lib/features/utils/index.d.ts.map +1 -1
- package/lib/features/utils/index.js +1 -0
- package/lib/features/utils/index.js.map +1 -1
- package/lib/features/utils/interaction.d.ts +55 -0
- package/lib/features/utils/interaction.d.ts.map +1 -0
- package/lib/features/utils/interaction.js +77 -0
- package/lib/features/utils/interaction.js.map +1 -0
- package/lib/features/views/ViewResults.js +2 -2
- package/lib/features/views/ViewResults.js.map +1 -1
- package/lib/i18n/locales/ar.json +17 -1
- package/lib/i18n/locales/de.json +13 -1
- package/lib/i18n/locales/en.json +13 -1
- package/lib/i18n/locales/es.json +13 -1
- package/lib/i18n/locales/fr.json +13 -1
- package/lib/i18n/locales/it.json +13 -1
- package/lib/i18n/locales/ja.json +13 -1
- package/lib/i18n/locales/ko.json +13 -1
- package/lib/i18n/locales/pt.json +13 -1
- package/lib/i18n/locales/ru.json +15 -1
- package/lib/i18n/locales/tr.json +13 -1
- package/lib/i18n/locales/zh-TW.json +13 -1
- package/lib/i18n/locales/zh.json +13 -1
- package/lib/layout/FullHeightLayout.js +2 -2
- package/lib/layout/FullHeightLayout.js.map +1 -1
- package/lib/layout/Navbar.js +4 -4
- package/lib/layout/Navbar.js.map +1 -1
- package/lib/layout/Sidebar.js +1 -1
- package/lib/layout/Sidebar.js.map +1 -1
- package/lib/router/NestedNavigationContext.d.ts +3 -1
- package/lib/router/NestedNavigationContext.d.ts.map +1 -1
- package/lib/router/NestedNavigationContext.js +2 -2
- package/lib/router/NestedNavigationContext.js.map +1 -1
- package/lib/session/UserSessionProvider.d.ts.map +1 -1
- package/lib/session/UserSessionProvider.js +2 -13
- package/lib/session/UserSessionProvider.js.map +1 -1
- package/lib/session/auth/authState.d.ts +13 -0
- package/lib/session/auth/authState.d.ts.map +1 -0
- package/lib/session/auth/authState.js +37 -0
- package/lib/session/auth/authState.js.map +1 -0
- package/lib/session/auth/domainRouting.d.ts +39 -0
- package/lib/session/auth/domainRouting.d.ts.map +1 -1
- package/lib/session/auth/domainRouting.js +85 -0
- package/lib/session/auth/domainRouting.js.map +1 -1
- package/lib/session/auth/useAuthState.d.ts +4 -7
- package/lib/session/auth/useAuthState.d.ts.map +1 -1
- package/lib/session/auth/useAuthState.js +5 -41
- package/lib/session/auth/useAuthState.js.map +1 -1
- package/lib/session/index.d.ts +1 -0
- package/lib/session/index.d.ts.map +1 -1
- package/lib/session/index.js +2 -0
- package/lib/session/index.js.map +1 -1
- package/lib/shell/SplashScreen.d.ts +1 -1
- package/lib/shell/SplashScreen.d.ts.map +1 -1
- package/lib/shell/SplashScreen.js +6 -2
- package/lib/shell/SplashScreen.js.map +1 -1
- package/lib/shell/VertesiaShell.js +1 -1
- package/lib/shell/VertesiaShell.js.map +1 -1
- package/lib/shell/apps/AppProjectSelector.js +1 -1
- package/lib/shell/apps/AppProjectSelector.js.map +1 -1
- package/lib/shell/apps/StandaloneApp.js +2 -2
- package/lib/shell/apps/StandaloneApp.js.map +1 -1
- package/lib/shell/login/SignInPrimitives.js +2 -2
- package/lib/shell/login/SignInPrimitives.js.map +1 -1
- package/lib/shell/login/SigninScreen.js +1 -1
- package/lib/shell/login/SigninScreen.js.map +1 -1
- package/lib/shell/login/SignupForm.js +1 -1
- package/lib/shell/login/SignupForm.js.map +1 -1
- package/lib/shell/login/TerminalLogin.js +2 -2
- package/lib/shell/login/TerminalLogin.js.map +1 -1
- package/lib/shell/login/UserInfo.d.ts.map +1 -1
- package/lib/shell/login/UserInfo.js +1 -1
- package/lib/shell/login/UserInfo.js.map +1 -1
- package/lib/shell/login/UserSessionMenu.js +1 -1
- package/lib/shell/login/UserSessionMenu.js.map +1 -1
- package/lib/vertesia-ui-core.js +7 -7
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-features.js +179 -182
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.BfN7iOHb.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.BjH2zEZw.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.BjSwAZXl.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.C7PUm5Au.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.CF_1mUS5.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.ChfUl3_-.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.D-Sk-5d1.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.D4rnu1_S.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.DDf0-laK.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.DN79y06J.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.DN79y06J.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.DWLIciYQ.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.DvF_YaAJ.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.js +2 -2
- package/lib/vertesia-ui-layout.js +1 -1
- package/lib/vertesia-ui-layout.js.map +1 -1
- package/lib/vertesia-ui-rich-text.js +24 -24
- package/lib/vertesia-ui-rich-text.js.map +1 -1
- package/lib/vertesia-ui-router.js +1 -1
- package/lib/vertesia-ui-router.js.map +1 -1
- package/lib/vertesia-ui-session.js +1 -1
- package/lib/vertesia-ui-session.js.map +1 -1
- package/lib/vertesia-ui-shell.js +3 -3
- package/lib/vertesia-ui-shell.js.map +1 -1
- package/lib/vertesia-ui-widgets.js +54 -54
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/lib/widgets/Progress.js +1 -1
- package/lib/widgets/Progress.js.map +1 -1
- package/lib/widgets/form/Form.js +2 -2
- package/lib/widgets/form/Form.js.map +1 -1
- package/lib/widgets/form/fields.js +2 -2
- package/lib/widgets/form/fields.js.map +1 -1
- package/lib/widgets/json-view/JSONView.js +1 -1
- package/lib/widgets/json-view/JSONView.js.map +1 -1
- package/lib/widgets/markdown/MermaidDiagram.js +1 -1
- package/lib/widgets/markdown/MermaidDiagram.js.map +1 -1
- package/lib/widgets/markdown/remarkDirectiveHandler.d.ts +7 -2
- package/lib/widgets/markdown/remarkDirectiveHandler.d.ts.map +1 -1
- package/lib/widgets/markdown/remarkDirectiveHandler.js +19 -4
- package/lib/widgets/markdown/remarkDirectiveHandler.js.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.js +4 -2
- package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
- package/lib/widgets/monacoEditor/index.d.ts +1 -0
- package/lib/widgets/monacoEditor/index.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/index.js +1 -0
- package/lib/widgets/monacoEditor/index.js.map +1 -1
- package/lib/widgets/monacoEditor/loadMonaco.d.ts +45 -0
- package/lib/widgets/monacoEditor/loadMonaco.d.ts.map +1 -0
- package/lib/widgets/monacoEditor/loadMonaco.js +62 -0
- package/lib/widgets/monacoEditor/loadMonaco.js.map +1 -0
- package/lib/widgets/properties/PropertiesView.js +1 -1
- package/lib/widgets/properties/PropertiesView.js.map +1 -1
- package/lib/widgets/schema-editor/editor/Editable.js +2 -2
- package/lib/widgets/schema-editor/editor/Editable.js.map +1 -1
- package/lib/widgets/schema-editor/editor/PropertyEditor.js +1 -1
- package/lib/widgets/schema-editor/editor/PropertyEditor.js.map +1 -1
- package/lib/widgets/schema-editor/editor/SchemaEditor.js +2 -2
- package/lib/widgets/schema-editor/editor/SchemaEditor.js.map +1 -1
- package/lib/widgets/upload/DropZone.js +1 -1
- package/lib/widgets/upload/DropZone.js.map +1 -1
- package/lib/widgets/upload/UploadResultCategory.d.ts +1 -1
- package/lib/widgets/upload/UploadResultCategory.d.ts.map +1 -1
- package/lib/widgets/upload/UploadResultCategory.js +3 -3
- package/lib/widgets/upload/UploadResultCategory.js.map +1 -1
- package/lib/widgets/upload/UploadSummary.js +1 -1
- package/lib/widgets/upload/UploadSummary.js.map +1 -1
- package/lib/widgets/xml-viewer/components/XMLViewer.d.ts.map +1 -1
- package/lib/widgets/xml-viewer/components/XMLViewer.js +7 -3
- package/lib/widgets/xml-viewer/components/XMLViewer.js.map +1 -1
- package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts +1 -1
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts +11 -13
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.d.ts.map +1 -1
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.js +41 -14
- package/lib/widgets/xml-viewer/hooks/useXMLViewer.js.map +1 -1
- package/package.json +7 -7
- package/src/__tests__/contrast.test.ts +1 -0
- package/src/core/components/Avatar.tsx +3 -3
- package/src/core/components/ComboBox.tsx +1 -1
- package/src/core/components/FileUpload.tsx +4 -4
- package/src/core/components/Link.tsx +1 -1
- package/src/core/components/SelectList.tsx +1 -1
- package/src/core/components/SidePanel.tsx +1 -1
- package/src/core/components/Spinner.tsx +1 -1
- package/src/core/components/TagsInput.tsx +8 -8
- package/src/core/components/shadcn/MessageBox.tsx +1 -1
- package/src/core/components/shadcn/button.tsx +1 -1
- package/src/core/components/shadcn/card.tsx +1 -3
- package/src/core/components/shadcn/command.tsx +5 -5
- package/src/core/components/shadcn/filters/DynamicLabel.tsx +1 -1
- package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +3 -3
- package/src/core/components/shadcn/input.tsx +3 -3
- package/src/core/components/shadcn/modal/ConfirmModal.tsx +3 -3
- package/src/core/components/shadcn/modal/dialog.tsx +2 -4
- package/src/core/components/shadcn/overflowTabs.tsx +2 -2
- package/src/core/components/shadcn/popover.tsx +1 -1
- package/src/core/components/shadcn/radioGroup.tsx +5 -7
- package/src/core/components/shadcn/selectBox.tsx +1 -1
- package/src/core/components/shadcn/tabs.tsx +4 -2
- package/src/core/components/styles.ts +1 -1
- package/src/core/components/table/index.tsx +1 -1
- package/src/core/hooks/useFetch.test.ts +20 -0
- package/src/core/hooks/useFetch.ts +2 -0
- package/src/css/base.css +1 -1
- package/src/css/color.css +4 -0
- package/src/css/theme.css +1 -0
- package/src/css/typography.css +2 -2
- package/src/features/activity-doc/ActivityDoc.tsx +11 -11
- package/src/features/agent/chat/AgentChart.tsx +1 -1
- package/src/features/agent/chat/AgentRightPanel.tsx +4 -8
- package/src/features/agent/chat/AskUserWidget.tsx +19 -23
- package/src/features/agent/chat/DocumentPanel.tsx +39 -48
- package/src/features/agent/chat/DocumentsTab.test.tsx +87 -0
- package/src/features/agent/chat/DocumentsTab.tsx +124 -0
- package/src/features/agent/chat/JumpingDots.tsx +3 -3
- package/src/features/agent/chat/ModernAgentConversation.test.tsx +0 -1
- package/src/features/agent/chat/ModernAgentConversation.tsx +3 -5
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +60 -1
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +44 -24
- package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +12 -12
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +28 -15
- package/src/features/agent/chat/ModernAgentOutput/InlineSlideInPanel.tsx +4 -4
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +2 -2
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +7 -12
- package/src/features/agent/chat/ModernAgentOutput/MessagesContainer.tsx +1 -1
- package/src/features/agent/chat/ModernAgentOutput/PlanPanel.tsx +16 -22
- package/src/features/agent/chat/ModernAgentOutput/SlideInPanel.tsx +4 -4
- package/src/features/agent/chat/ModernAgentOutput/SlidingMessages.tsx +2 -4
- package/src/features/agent/chat/ModernAgentOutput/SlidingPlanPanel.tsx +21 -21
- package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +4 -4
- package/src/features/agent/chat/ModernAgentOutput/SummaryConversation.ts +16 -1
- package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +19 -40
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +41 -0
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +19 -0
- package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +93 -0
- package/src/features/agent/chat/SlidingThinkingIndicator.tsx +5 -2
- package/src/features/agent/chat/VegaLiteChart.tsx +6 -2
- package/src/features/agent/chat/hooks/useDocumentPanel.test.tsx +33 -0
- package/src/features/agent/chat/hooks/useDocumentPanel.ts +3 -20
- package/src/features/errors/RowErrorBoundary.tsx +1 -1
- package/src/features/facets/AgentRunnerFacetsNav.tsx +1 -1
- package/src/features/facets/utils/VInteractionFacet.tsx +22 -34
- package/src/features/facets/utils/VUserFacet.tsx +1 -1
- package/src/features/layout/GenericPageNavHeader.tsx +9 -1
- package/src/features/layout/NotFoundView.tsx +1 -1
- package/src/features/magic-pdf/AnnotatedImageSlider.tsx +8 -16
- package/src/features/magic-pdf/ExtractedContentView.tsx +4 -4
- package/src/features/magic-pdf/MagicPdfView.tsx +1 -1
- package/src/features/oauth/McpConnectionsButton.test.tsx +79 -8
- package/src/features/oauth/McpConnectionsButton.tsx +6 -3
- package/src/features/oauth/McpConnectionsDialog.tsx +9 -3
- package/src/features/oauth/useMcpConnections.ts +33 -27
- package/src/features/pdf-viewer/PdfPageRenderer.tsx +2 -2
- package/src/features/pdf-viewer/PdfPageSlider.tsx +4 -4
- package/src/features/pdf-viewer/SimplePdfViewer.tsx +1 -1
- package/src/features/permissions/UserPermissionsProvider.test.tsx +172 -0
- package/src/features/permissions/UserPermissionsProvider.tsx +68 -21
- package/src/features/permissions/useRoleMappings.ts +105 -0
- package/src/features/store/collections/SelectCollection.tsx +1 -1
- package/src/features/store/objects/DocumentPreviewPanel.tsx +43 -53
- package/src/features/store/objects/DocumentTable.tsx +2 -2
- package/src/features/store/objects/components/DocumentIcon.tsx +4 -4
- package/src/features/store/objects/components/DocumentInput.tsx +3 -3
- package/src/features/store/objects/components/PropertiesEditorModal.tsx +2 -2
- package/src/features/store/objects/components/SaveVersionConfirmModal.tsx +2 -2
- package/src/features/store/objects/layout/documentLayout.tsx +2 -4
- package/src/features/store/objects/selection/SelectionActions.tsx +1 -1
- package/src/features/store/types/IntakePolicyEditor.tsx +70 -36
- package/src/features/store/types/IntakePolicyForm.tsx +11 -3
- package/src/features/store/types/SelectContentTypeModal.tsx +1 -1
- package/src/features/user/UserAvatar.tsx +3 -3
- package/src/features/user/UserInfo.tsx +11 -16
- package/src/features/utils/index.ts +1 -0
- package/src/features/utils/interaction.test.tsx +93 -0
- package/src/features/utils/interaction.tsx +125 -0
- package/src/features/views/ViewResults.tsx +3 -3
- package/src/i18n/locales/ar.json +17 -1
- package/src/i18n/locales/de.json +13 -1
- package/src/i18n/locales/en.json +13 -1
- package/src/i18n/locales/es.json +13 -1
- package/src/i18n/locales/fr.json +13 -1
- package/src/i18n/locales/it.json +13 -1
- package/src/i18n/locales/ja.json +13 -1
- package/src/i18n/locales/ko.json +13 -1
- package/src/i18n/locales/pt.json +13 -1
- package/src/i18n/locales/ru.json +15 -1
- package/src/i18n/locales/tr.json +13 -1
- package/src/i18n/locales/zh-TW.json +13 -1
- package/src/i18n/locales/zh.json +13 -1
- package/src/layout/FullHeightLayout.tsx +2 -2
- package/src/layout/Navbar.tsx +5 -5
- package/src/layout/Sidebar.tsx +1 -1
- package/src/router/NestedNavigationContext.test.tsx +54 -0
- package/src/router/NestedNavigationContext.tsx +9 -2
- package/src/session/UserSessionProvider.tsx +2 -15
- package/src/session/auth/authState.test.ts +35 -0
- package/src/session/auth/authState.ts +42 -0
- package/src/session/auth/domainRouting.test.ts +169 -1
- package/src/session/auth/domainRouting.ts +89 -0
- package/src/session/auth/useAuthState.ts +5 -49
- package/src/session/index.ts +6 -0
- package/src/shell/SplashScreen.test.tsx +22 -0
- package/src/shell/SplashScreen.tsx +6 -2
- package/src/shell/VertesiaShell.tsx +1 -1
- package/src/shell/apps/AppProjectSelector.tsx +1 -1
- package/src/shell/apps/StandaloneApp.tsx +9 -9
- package/src/shell/login/SignInPrimitives.tsx +2 -2
- package/src/shell/login/SigninScreen.tsx +1 -1
- package/src/shell/login/SignupForm.tsx +2 -2
- package/src/shell/login/TerminalLogin.tsx +5 -5
- package/src/shell/login/UserInfo.tsx +2 -5
- package/src/shell/login/UserSessionMenu.tsx +2 -2
- package/src/widgets/Progress.tsx +2 -2
- package/src/widgets/form/Form.tsx +4 -4
- package/src/widgets/form/fields.tsx +2 -2
- package/src/widgets/json-view/JSONView.tsx +1 -6
- package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +33 -29
- package/src/widgets/markdown/MarkdownRenderer.test.tsx +52 -0
- package/src/widgets/markdown/MermaidDiagram.tsx +2 -2
- package/src/widgets/markdown/remarkDirectiveHandler.ts +21 -5
- package/src/widgets/monacoEditor/MonacoEditor.tsx +4 -2
- package/src/widgets/monacoEditor/index.ts +1 -0
- package/src/widgets/monacoEditor/loadMonaco.test.ts +63 -0
- package/src/widgets/monacoEditor/loadMonaco.ts +70 -0
- package/src/widgets/properties/PropertiesView.tsx +1 -1
- package/src/widgets/schema-editor/editor/Editable.tsx +2 -2
- package/src/widgets/schema-editor/editor/PropertyEditor.tsx +1 -1
- package/src/widgets/schema-editor/editor/SchemaEditor.tsx +2 -2
- package/src/widgets/upload/DropZone.tsx +1 -1
- package/src/widgets/upload/UploadResultCategory.tsx +7 -7
- package/src/widgets/upload/UploadSummary.tsx +4 -4
- package/src/widgets/xml-viewer/components/XMLViewer.tsx +7 -3
- package/src/widgets/xml-viewer/hooks/useXMLViewer.test.ts +60 -7
- package/src/widgets/xml-viewer/hooks/useXMLViewer.ts +70 -16
- package/lib/features/agent/chat/DocumentTabBar.d.ts +0 -9
- package/lib/features/agent/chat/DocumentTabBar.d.ts.map +0 -1
- package/lib/features/agent/chat/DocumentTabBar.js +0 -9
- package/lib/features/agent/chat/DocumentTabBar.js.map +0 -1
- package/lib/vertesia-ui-i18n.BJBGsq-8.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.BJBGsq-8.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.BY5YG5cX.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.BY5YG5cX.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.Bd5_1BXO.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.Bd5_1BXO.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.Bvwej2HH.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.Bvwej2HH.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.CMT3f4gf.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.CMT3f4gf.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.D56DNPJW.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.D56DNPJW.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.DDzKLNx6.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.DDzKLNx6.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.D_Am1LpF.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.D_Am1LpF.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.DrZizgGV.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.DrZizgGV.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.DwHsq86z.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.DwHsq86z.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.PLpo0Bbz.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.PLpo0Bbz.chunk.js.map +0 -1
- package/lib/vertesia-ui-i18n.xVbXALqz.chunk.js +0 -5
- package/lib/vertesia-ui-i18n.xVbXALqz.chunk.js.map +0 -1
- package/src/features/agent/chat/DocumentTabBar.tsx +0 -41
|
@@ -117,13 +117,13 @@ function areMessagesRenderEqual(prevMessage: AgentMessage, nextMessage: AgentMes
|
|
|
117
117
|
function statusBadgeClass(status?: ToolExecutionStatus): string {
|
|
118
118
|
switch (status) {
|
|
119
119
|
case 'completed':
|
|
120
|
-
return 'bg-
|
|
120
|
+
return 'bg-success text-success border-success';
|
|
121
121
|
case 'running':
|
|
122
|
-
return 'bg-
|
|
122
|
+
return 'bg-info text-info border-info';
|
|
123
123
|
case 'error':
|
|
124
|
-
return 'bg-
|
|
124
|
+
return 'bg-destructive text-destructive border-destructive';
|
|
125
125
|
case 'warning':
|
|
126
|
-
return 'bg-
|
|
126
|
+
return 'bg-attention text-attention border-attention';
|
|
127
127
|
default:
|
|
128
128
|
return '';
|
|
129
129
|
}
|
|
@@ -320,10 +320,9 @@ const getFilesFromDetails = (
|
|
|
320
320
|
return Array.isArray(files) ? files : undefined;
|
|
321
321
|
};
|
|
322
322
|
|
|
323
|
-
const TOOL_BADGE_CLASS =
|
|
324
|
-
'text-[10px] px-1.5 py-0.5 rounded-md bg-purple-50 dark:bg-purple-900/30 text-purple-700 dark:text-purple-300 border border-purple-200 dark:border-purple-800 font-medium';
|
|
323
|
+
const TOOL_BADGE_CLASS = 'text-[10px] px-1.5 py-0.5 rounded-md bg-done text-done border border-done font-medium';
|
|
325
324
|
const ASSISTANT_BADGE_CLASS =
|
|
326
|
-
'text-[10px] px-1.5 py-0.5 rounded-md bg-
|
|
325
|
+
'text-[10px] px-1.5 py-0.5 rounded-md bg-muted text-foreground border border-border font-medium';
|
|
327
326
|
|
|
328
327
|
const isToolPreambleMessage = (message: AgentMessage): boolean => {
|
|
329
328
|
const details = message.details as { display_role?: string } | undefined;
|
|
@@ -452,14 +451,14 @@ function ToolCallItem({ message, isExpanded, onToggle, artifactRunId, classNames
|
|
|
452
451
|
};
|
|
453
452
|
|
|
454
453
|
return (
|
|
455
|
-
<div className={cn('border-b border-
|
|
454
|
+
<div className={cn('border-b border-border last:border-b-0', classNames.itemClassName)}>
|
|
456
455
|
{/* Collapsed header - always visible */}
|
|
457
456
|
{/* biome-ignore lint/a11y/useSemanticElements: header contains nested Buttons (copy); button-in-button is invalid HTML so role="button" on a div is the pragmatic choice. */}
|
|
458
457
|
<div
|
|
459
458
|
role="button"
|
|
460
459
|
tabIndex={0}
|
|
461
460
|
className={cn(
|
|
462
|
-
'flex items-start justify-between px-3 py-2 cursor-pointer hover:bg-
|
|
461
|
+
'flex items-start justify-between px-3 py-2 cursor-pointer hover:bg-muted transition-colors',
|
|
463
462
|
classNames.itemHeaderClassName,
|
|
464
463
|
)}
|
|
465
464
|
onClick={onToggle}
|
|
@@ -518,12 +517,7 @@ function ToolCallItem({ message, isExpanded, onToggle, artifactRunId, classNames
|
|
|
518
517
|
);
|
|
519
518
|
const progressDetails = getProgressDetails(details as Record<string, unknown> | undefined);
|
|
520
519
|
return (
|
|
521
|
-
<div
|
|
522
|
-
className={cn(
|
|
523
|
-
'px-4 py-2 bg-gray-50/50 dark:bg-gray-800/30',
|
|
524
|
-
classNames.itemContentClassName,
|
|
525
|
-
)}
|
|
526
|
-
>
|
|
520
|
+
<div className={cn('px-4 py-2 bg-muted/50 dark:bg-muted/30', classNames.itemContentClassName)}>
|
|
527
521
|
{/* Badges row: tool name + status + timestamp */}
|
|
528
522
|
<div className="flex items-center gap-2 mb-2 flex-wrap">
|
|
529
523
|
<span className={cn(badgeClass, classNames.toolBadgeClassName)}>{toolName}</span>
|
|
@@ -769,7 +763,7 @@ function GroupImageDisplay({ messages, artifactRunId }: { messages: AgentMessage
|
|
|
769
763
|
if (resolvedImages.length === 0) return null;
|
|
770
764
|
|
|
771
765
|
return (
|
|
772
|
-
<div className="px-3 py-1.5 border-b border-
|
|
766
|
+
<div className="px-3 py-1.5 border-b border-border">
|
|
773
767
|
<FileDisplay files={resolvedImages} />
|
|
774
768
|
</div>
|
|
775
769
|
);
|
|
@@ -829,7 +823,7 @@ function ToolCallGroupComponent({
|
|
|
829
823
|
return <PulsatingCircle size="sm" color="blue" />;
|
|
830
824
|
}
|
|
831
825
|
if (toolStatus === 'running') {
|
|
832
|
-
return <span className="size-2 rounded-full bg-
|
|
826
|
+
return <span className="size-2 rounded-full bg-primary inline-block" />;
|
|
833
827
|
}
|
|
834
828
|
if (toolStatus === 'completed') {
|
|
835
829
|
return <CheckCircle className="size-4 text-success" />;
|
|
@@ -840,7 +834,7 @@ function ToolCallGroupComponent({
|
|
|
840
834
|
if (toolStatus === 'warning') {
|
|
841
835
|
return <AlertTriangle className="size-4 text-attention" />;
|
|
842
836
|
}
|
|
843
|
-
return <Bot className="size-4 text-
|
|
837
|
+
return <Bot className="size-4 text-done" />;
|
|
844
838
|
};
|
|
845
839
|
|
|
846
840
|
// Get border color based on status
|
|
@@ -848,7 +842,7 @@ function ToolCallGroupComponent({
|
|
|
848
842
|
if (toolStatus === 'completed') return 'border-s-success';
|
|
849
843
|
if (toolStatus === 'error') return 'border-s-destructive';
|
|
850
844
|
if (toolStatus === 'warning') return 'border-s-attention';
|
|
851
|
-
return 'border-s-
|
|
845
|
+
return 'border-s-done';
|
|
852
846
|
};
|
|
853
847
|
|
|
854
848
|
// Animate new messages when they're added
|
|
@@ -914,9 +908,7 @@ function ToolCallGroupComponent({
|
|
|
914
908
|
};
|
|
915
909
|
|
|
916
910
|
return (
|
|
917
|
-
<div
|
|
918
|
-
className={cn('border-s-4 overflow-hidden bg-white dark:bg-gray-900 mb-4', getBorderColor(), rootClassName)}
|
|
919
|
-
>
|
|
911
|
+
<div className={cn('border-s-4 overflow-hidden bg-white dark:bg-muted mb-4', getBorderColor(), rootClassName)}>
|
|
920
912
|
{/* Compact header */}
|
|
921
913
|
{/* biome-ignore lint/a11y/useSemanticElements: header contains nested Buttons; button-in-button is invalid HTML so role="button" on a div is the pragmatic choice. */}
|
|
922
914
|
<div
|
|
@@ -924,7 +916,7 @@ function ToolCallGroupComponent({
|
|
|
924
916
|
tabIndex={0}
|
|
925
917
|
aria-expanded={!isCollapsed}
|
|
926
918
|
className={cn(
|
|
927
|
-
'flex items-center justify-between px-4 py-1.5 cursor-pointer hover:bg-
|
|
919
|
+
'flex items-center justify-between px-4 py-1.5 cursor-pointer hover:bg-muted transition-colors',
|
|
928
920
|
headerClassName,
|
|
929
921
|
)}
|
|
930
922
|
onClick={() => setIsCollapsed(!isCollapsed)}
|
|
@@ -941,12 +933,7 @@ function ToolCallGroupComponent({
|
|
|
941
933
|
) : (
|
|
942
934
|
<>
|
|
943
935
|
<span className={cn('text-xs font-medium text-muted', senderClassName)}>Agent</span>
|
|
944
|
-
<span
|
|
945
|
-
className={cn(
|
|
946
|
-
'text-xs text-purple-600 dark:text-purple-400 font-medium',
|
|
947
|
-
toolSummaryClassName,
|
|
948
|
-
)}
|
|
949
|
-
>
|
|
936
|
+
<span className={cn('text-xs text-done font-medium', toolSummaryClassName)}>
|
|
950
937
|
{toolSummary}
|
|
951
938
|
</span>
|
|
952
939
|
</>
|
|
@@ -960,12 +947,7 @@ function ToolCallGroupComponent({
|
|
|
960
947
|
|
|
961
948
|
<div className="flex items-center gap-1 flex-shrink-0">
|
|
962
949
|
{preambleText && (
|
|
963
|
-
<span
|
|
964
|
-
className={cn(
|
|
965
|
-
'text-[10px] text-purple-600 dark:text-purple-400 font-medium',
|
|
966
|
-
toolSummaryClassName,
|
|
967
|
-
)}
|
|
968
|
-
>
|
|
950
|
+
<span className={cn('text-[10px] text-done font-medium', toolSummaryClassName)}>
|
|
969
951
|
{toolSummary}
|
|
970
952
|
</span>
|
|
971
953
|
)}
|
|
@@ -1016,10 +998,7 @@ function ToolCallGroupComponent({
|
|
|
1016
998
|
return (
|
|
1017
999
|
<div
|
|
1018
1000
|
key={itemKey}
|
|
1019
|
-
className={cn(
|
|
1020
|
-
'border-b border-gray-100 dark:border-gray-800 last:border-b-0',
|
|
1021
|
-
itemClassName,
|
|
1022
|
-
)}
|
|
1001
|
+
className={cn('border-b border-border last:border-b-0', itemClassName)}
|
|
1023
1002
|
style={{
|
|
1024
1003
|
opacity: isAnimating ? 0 : 1,
|
|
1025
1004
|
transform: isAnimating ? 'translateX(-10px)' : 'translateX(0)',
|
|
@@ -1036,7 +1015,7 @@ function ToolCallGroupComponent({
|
|
|
1036
1015
|
tabIndex={0}
|
|
1037
1016
|
aria-expanded={isItemExpanded}
|
|
1038
1017
|
className={cn(
|
|
1039
|
-
'flex items-start gap-2 py-1.5 text-xs cursor-pointer hover:bg-
|
|
1018
|
+
'flex items-start gap-2 py-1.5 text-xs cursor-pointer hover:bg-muted',
|
|
1040
1019
|
itemHeaderClassName,
|
|
1041
1020
|
)}
|
|
1042
1021
|
onClick={() => toggleItem(itemKey)}
|
|
@@ -28,6 +28,29 @@ function makeApprovalRequest(): AgentMessage {
|
|
|
28
28
|
} as unknown as AgentMessage;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
function makeApprovalRequestForToolUse(toolUseId: string): AgentMessage {
|
|
32
|
+
const request = makeApprovalRequest();
|
|
33
|
+
return {
|
|
34
|
+
...request,
|
|
35
|
+
details: { ...(request.details as Record<string, unknown>), request_id: toolUseId },
|
|
36
|
+
} as unknown as AgentMessage;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function makeApprovalReleasedMessage(toolUseId: string, timestamp: number): AgentMessage {
|
|
40
|
+
return {
|
|
41
|
+
timestamp,
|
|
42
|
+
type: AgentMessageType.UPDATE,
|
|
43
|
+
message: 'Approval reviewer allowed Create a new draft interaction.',
|
|
44
|
+
workstream_id: 'main',
|
|
45
|
+
details: {
|
|
46
|
+
request_id: toolUseId,
|
|
47
|
+
approval_decision: 'auto_approved',
|
|
48
|
+
approval_release_reason: 'reviewer_allowed',
|
|
49
|
+
approval_request: { tool_name: 'create_interaction', approval_key: APPROVAL_KEY },
|
|
50
|
+
},
|
|
51
|
+
} as unknown as AgentMessage;
|
|
52
|
+
}
|
|
53
|
+
|
|
31
54
|
function makeUserAnswer(message: string, metadata?: Record<string, unknown>): AgentMessage {
|
|
32
55
|
return {
|
|
33
56
|
timestamp: 2,
|
|
@@ -164,6 +187,24 @@ describe('request input correlation', () => {
|
|
|
164
187
|
expect(getPendingRequestInputMessage([firstRequest, firstAnswer, secondRequest])).toBe(secondRequest);
|
|
165
188
|
});
|
|
166
189
|
|
|
190
|
+
it('stops asking once the workflow releases the approval without a user answer', () => {
|
|
191
|
+
const request = makeApprovalRequestForToolUse('write-1');
|
|
192
|
+
const released = makeApprovalReleasedMessage('write-1', 3);
|
|
193
|
+
|
|
194
|
+
expect(getPendingRequestInputMessage([request])).toBe(request);
|
|
195
|
+
expect(getPendingRequestInputMessage([request, released])).toBeUndefined();
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
it('keeps asking for a later request that reuses a released approval key', () => {
|
|
199
|
+
// Approval keys are `tool_name:target`, so the same action repeats across turns: a release
|
|
200
|
+
// must resolve the request it answered, not every prompt that shares its key.
|
|
201
|
+
const firstRequest = makeApprovalRequestForToolUse('write-1');
|
|
202
|
+
const released = makeApprovalReleasedMessage('write-1', 3);
|
|
203
|
+
const laterRequest = { ...makeApprovalRequestForToolUse('write-2'), timestamp: 4 };
|
|
204
|
+
|
|
205
|
+
expect(getPendingRequestInputMessage([firstRequest, released, laterRequest])).toBe(laterRequest);
|
|
206
|
+
});
|
|
207
|
+
|
|
167
208
|
it('reads a request id from response metadata', () => {
|
|
168
209
|
expect(
|
|
169
210
|
getRequestInputResponseIdFromMetadata({
|
|
@@ -242,6 +242,12 @@ export function getRequestInputResponseIdFromMetadata(metadata?: Record<string,
|
|
|
242
242
|
return typeof requestId === 'string' && requestId ? requestId : undefined;
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Prefix marking a resolution that belongs to ONE request rather than to every prompt sharing an
|
|
247
|
+
* approval key. Approval keys are `tool_name:target`, so the same action repeats across turns.
|
|
248
|
+
*/
|
|
249
|
+
const RESOLVED_REQUEST_ID_PREFIX = 'request:';
|
|
250
|
+
|
|
245
251
|
export function getResolvedToolApprovalKeys(messages: AgentMessage[]): Set<string> {
|
|
246
252
|
const resolved = new Set<string>();
|
|
247
253
|
|
|
@@ -251,6 +257,17 @@ export function getResolvedToolApprovalKeys(messages: AgentMessage[]): Set<strin
|
|
|
251
257
|
const approvalKey = approvalRequest?.approval_key;
|
|
252
258
|
const decision = details?.approval_decision;
|
|
253
259
|
|
|
260
|
+
// Released without a user answer (approval mode change, or the reviewer allowed it after the
|
|
261
|
+
// run switched to auto_review). Scoped to the released request: a later prompt for the same
|
|
262
|
+
// action still has to be answered, or the run would wait with nothing on screen.
|
|
263
|
+
if (decision === 'auto_approved') {
|
|
264
|
+
const requestId = details?.request_id;
|
|
265
|
+
if (typeof requestId === 'string' && requestId) {
|
|
266
|
+
resolved.add(`${RESOLVED_REQUEST_ID_PREFIX}${requestId}`);
|
|
267
|
+
}
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
|
|
254
271
|
if (
|
|
255
272
|
typeof approvalKey === 'string' &&
|
|
256
273
|
(decision === 'denied' ||
|
|
@@ -321,6 +338,8 @@ export function isRequestInputResolvedByToolApprovalEvent(
|
|
|
321
338
|
resolvedToolApprovalKeys: Set<string>,
|
|
322
339
|
): boolean {
|
|
323
340
|
if (message.type !== AgentMessageType.REQUEST_INPUT) return false;
|
|
341
|
+
const requestId = getRequestInputId(message);
|
|
342
|
+
if (requestId && resolvedToolApprovalKeys.has(`${RESOLVED_REQUEST_ID_PREFIX}${requestId}`)) return true;
|
|
324
343
|
const approvalKey = getToolApprovalKey(message);
|
|
325
344
|
return approvalKey ? resolvedToolApprovalKeys.has(approvalKey) : false;
|
|
326
345
|
}
|
|
@@ -140,6 +140,99 @@ describe('ModernAgentOutput utils - tool preamble behavior', () => {
|
|
|
140
140
|
});
|
|
141
141
|
});
|
|
142
142
|
|
|
143
|
+
describe('ModernAgentOutput summary - ask_user review content', () => {
|
|
144
|
+
const draft = '## Draft agenda\n9:00 Welcome\n9:15 Platform foundations';
|
|
145
|
+
const tool = makeMessage({
|
|
146
|
+
timestamp: 3000,
|
|
147
|
+
message: 'Waiting for your review...',
|
|
148
|
+
details: {
|
|
149
|
+
tool: 'ask_user',
|
|
150
|
+
tool_status: 'running',
|
|
151
|
+
tool_run_id: 'ask-1',
|
|
152
|
+
activity_group_id: 'review-1',
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
const question = makeMessage({
|
|
156
|
+
timestamp: 4000,
|
|
157
|
+
type: AgentMessageType.REQUEST_INPUT,
|
|
158
|
+
message: 'Does this agenda work?',
|
|
159
|
+
details: { tool: 'ask_user' },
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it.each([false, true])('keeps persisted review prose visible with streamed=%s', (streamed) => {
|
|
163
|
+
const preamble = makeMessage({
|
|
164
|
+
timestamp: 2000,
|
|
165
|
+
message: draft,
|
|
166
|
+
details: {
|
|
167
|
+
event_class: 'activity',
|
|
168
|
+
display_role: 'tool_preamble',
|
|
169
|
+
tools: ['update_plan', 'ask_user'],
|
|
170
|
+
activity_group_id: 'review-1',
|
|
171
|
+
streamed,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
const items = buildSummaryConversationItems([preamble, tool, question], false);
|
|
175
|
+
|
|
176
|
+
expect(items.map((item) => item.type)).toEqual(['message', 'work', 'message']);
|
|
177
|
+
expect(items[0]).toEqual({ type: 'message', message: preamble });
|
|
178
|
+
expect(items[2]).toEqual({ type: 'message', message: question });
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
it.each([
|
|
182
|
+
{ tools: [{ name: 'ask_user' }] },
|
|
183
|
+
{ tools: [{ tool: 'ask_user' }] },
|
|
184
|
+
{ tool: 'ask_user' },
|
|
185
|
+
{ tools: [null, 42, {}, 'search_documents', { name: 'ask_user' }] },
|
|
186
|
+
])('keeps review prose visible for supported tool metadata: %j', (details) => {
|
|
187
|
+
const preamble = makeMessage({
|
|
188
|
+
timestamp: 2000,
|
|
189
|
+
message: draft,
|
|
190
|
+
// Exercise legacy wire shapes outside the current string[] contract.
|
|
191
|
+
details: { display_role: 'tool_preamble', ...details } as unknown as AgentMessage['details'],
|
|
192
|
+
});
|
|
193
|
+
expect(buildSummaryConversationItems([preamble, tool, question], false)[0]).toEqual({
|
|
194
|
+
type: 'message',
|
|
195
|
+
message: preamble,
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it.each([
|
|
200
|
+
{ display_role: 'tool_preamble', tools: [null, {}, { name: 'search_documents' }] },
|
|
201
|
+
{ tool: 'ask_user', tool_status: 'running' },
|
|
202
|
+
{ tool: 'think' },
|
|
203
|
+
])('keeps non-review activity collapsed: %j', (details) => {
|
|
204
|
+
const activity = makeMessage({
|
|
205
|
+
message: 'Working on the draft',
|
|
206
|
+
details: details as unknown as AgentMessage['details'],
|
|
207
|
+
});
|
|
208
|
+
expect(buildSummaryConversationItems([activity, question], false)[0]).toMatchObject({
|
|
209
|
+
type: 'work',
|
|
210
|
+
messages: [activity],
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
it.each([false, true])('keeps reconstructed review streams visible with isComplete=%s', (isComplete) => {
|
|
215
|
+
const messages = buildSummaryDisplayMessages(
|
|
216
|
+
[tool, question],
|
|
217
|
+
new Map([
|
|
218
|
+
[
|
|
219
|
+
'review-stream',
|
|
220
|
+
{
|
|
221
|
+
text: draft,
|
|
222
|
+
startTimestamp: 2000,
|
|
223
|
+
activityId: 'review-1',
|
|
224
|
+
isComplete,
|
|
225
|
+
},
|
|
226
|
+
],
|
|
227
|
+
]),
|
|
228
|
+
);
|
|
229
|
+
const items = buildSummaryConversationItems(messages, false);
|
|
230
|
+
|
|
231
|
+
expect(items.map((item) => item.type)).toEqual(['message', 'work', 'message']);
|
|
232
|
+
expect(items[0]).toMatchObject({ type: 'message', message: { message: draft } });
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
|
|
143
236
|
describe('ModernAgentOutput utils - progress state', () => {
|
|
144
237
|
it('treats a new user turn after an older idle message as in progress', () => {
|
|
145
238
|
const idle = makeMessage({
|
|
@@ -284,7 +284,7 @@ export function SlidingThinkingIndicator({
|
|
|
284
284
|
size="xs"
|
|
285
285
|
variant="ghost"
|
|
286
286
|
onClick={() => setShowDetails(!showDetails)}
|
|
287
|
-
className="text-
|
|
287
|
+
className="text-muted hover:text-foreground flex items-center gap-1 text-xs"
|
|
288
288
|
title={showDetails ? t('agent.hideThinkingDetails') : t('agent.showAllMessages')}
|
|
289
289
|
>
|
|
290
290
|
{showDetails ? (
|
|
@@ -356,10 +356,13 @@ export function SlidingThinkingIndicator({
|
|
|
356
356
|
) : (
|
|
357
357
|
<div
|
|
358
358
|
className={cn(
|
|
359
|
-
'py-2 px-3 border-s-2 bg-white dark:bg-
|
|
359
|
+
'py-2 px-3 border-s-2 bg-white dark:bg-muted flex items-center w-full',
|
|
360
360
|
'transition-all duration-200 ease-in-out rounded-e-md',
|
|
361
361
|
// Set border color based on message type
|
|
362
362
|
{
|
|
363
|
+
// Categorical message-type palette, not semantic state:
|
|
364
|
+
// these must stay in step with <PulsingMessageLoader color>
|
|
365
|
+
// in AnimatedThinkingDots, which uses the same hue names.
|
|
363
366
|
'border-blue-400 dark:border-blue-500':
|
|
364
367
|
getThinkingColor(message) === 'blue',
|
|
365
368
|
'border-purple-400 dark:border-purple-500':
|
|
@@ -3,7 +3,6 @@ import { Button } from '@vertesia/ui/core';
|
|
|
3
3
|
import { useUITranslation } from '@vertesia/ui/i18n';
|
|
4
4
|
import { useUserSession } from '@vertesia/ui/session';
|
|
5
5
|
import { Check, Copy, Download, Loader2, Maximize2, Minimize2, X } from 'lucide-react';
|
|
6
|
-
import Papa from 'papaparse';
|
|
7
6
|
import { lazy, memo, Suspense, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
8
7
|
import type { View } from 'vega';
|
|
9
8
|
import type { TopLevelSpec as VisualizationSpec } from 'vega-lite';
|
|
@@ -717,7 +716,12 @@ export const VegaLiteChart = memo(
|
|
|
717
716
|
let data: unknown[];
|
|
718
717
|
|
|
719
718
|
if (isCsv) {
|
|
720
|
-
// Parse CSV to JSON array
|
|
719
|
+
// Parse CSV to JSON array. papaparse is imported here rather than at
|
|
720
|
+
// module scope: it is only ever needed for a chart whose data comes from
|
|
721
|
+
// a .csv artifact, and a static import put it in the widgets bundle's
|
|
722
|
+
// graph (this module is reachable from widgets/markdown), so every
|
|
723
|
+
// application paid for it on first render.
|
|
724
|
+
const { default: Papa } = await import('papaparse');
|
|
721
725
|
const csvText = await response.text();
|
|
722
726
|
const parseResult = Papa.parse(csvText, {
|
|
723
727
|
header: true,
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { act, renderHook } from '@testing-library/react';
|
|
2
|
+
import { type AgentMessage, AgentMessageType } from '@vertesia/common';
|
|
3
|
+
import { describe, expect, it } from 'vitest';
|
|
4
|
+
import { useDocumentPanel } from './useDocumentPanel';
|
|
5
|
+
|
|
6
|
+
function documentCreated(documentId: string, title: string): AgentMessage {
|
|
7
|
+
return {
|
|
8
|
+
type: AgentMessageType.UPDATE,
|
|
9
|
+
message: '',
|
|
10
|
+
timestamp: Date.now(),
|
|
11
|
+
details: { event_class: 'document_created', document_id: documentId, title },
|
|
12
|
+
} as unknown as AgentMessage;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
describe('useDocumentPanel', () => {
|
|
16
|
+
it('opens the newest document reported by the agent', () => {
|
|
17
|
+
const messages = [documentCreated('doc-1', 'Brief'), documentCreated('doc-2', 'Summary')];
|
|
18
|
+
const { result } = renderHook(() => useDocumentPanel(messages));
|
|
19
|
+
|
|
20
|
+
expect(result.current.openDocuments.map((doc) => doc.id)).toEqual(['doc-1', 'doc-2']);
|
|
21
|
+
expect(result.current.activeDocumentId).toBe('doc-2');
|
|
22
|
+
expect(result.current.isDocPanelOpen).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('selects null to go back to the list while keeping the documents open', () => {
|
|
26
|
+
const { result } = renderHook(() => useDocumentPanel([documentCreated('doc-1', 'Brief')]));
|
|
27
|
+
|
|
28
|
+
act(() => result.current.selectDocument(null));
|
|
29
|
+
|
|
30
|
+
expect(result.current.activeDocumentId).toBeNull();
|
|
31
|
+
expect(result.current.openDocuments).toHaveLength(1);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
@@ -8,8 +8,8 @@ export interface UseDocumentPanelResult {
|
|
|
8
8
|
isDocPanelOpen: boolean;
|
|
9
9
|
docRefreshKey: number;
|
|
10
10
|
closeDocPanel: () => void;
|
|
11
|
-
|
|
12
|
-
selectDocument: (docId: string) => void;
|
|
11
|
+
/** Select a document to display, or `null` to go back to the document list. */
|
|
12
|
+
selectDocument: (docId: string | null) => void;
|
|
13
13
|
openDocInPanel: (docId: string) => void;
|
|
14
14
|
updateDocumentTitle: (docId: string, title: string) => void;
|
|
15
15
|
}
|
|
@@ -137,23 +137,7 @@ export function useDocumentPanel(messages: AgentMessage[]): UseDocumentPanelResu
|
|
|
137
137
|
setIsDocPanelOpen(false);
|
|
138
138
|
}, []);
|
|
139
139
|
|
|
140
|
-
const
|
|
141
|
-
setOpenDocuments((prev) => {
|
|
142
|
-
const next = prev.filter((d) => d.id !== docId);
|
|
143
|
-
if (next.length === 0) {
|
|
144
|
-
setIsDocPanelOpen(false);
|
|
145
|
-
setActiveDocumentId(null);
|
|
146
|
-
} else {
|
|
147
|
-
setActiveDocumentId((current) => {
|
|
148
|
-
if (current === docId) return next[0].id;
|
|
149
|
-
return current;
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
return next;
|
|
153
|
-
});
|
|
154
|
-
}, []);
|
|
155
|
-
|
|
156
|
-
const selectDocument = useCallback((docId: string) => {
|
|
140
|
+
const selectDocument = useCallback((docId: string | null) => {
|
|
157
141
|
setActiveDocumentId(docId);
|
|
158
142
|
}, []);
|
|
159
143
|
|
|
@@ -176,7 +160,6 @@ export function useDocumentPanel(messages: AgentMessage[]): UseDocumentPanelResu
|
|
|
176
160
|
isDocPanelOpen,
|
|
177
161
|
docRefreshKey,
|
|
178
162
|
closeDocPanel,
|
|
179
|
-
closeDocument,
|
|
180
163
|
selectDocument,
|
|
181
164
|
openDocInPanel,
|
|
182
165
|
updateDocumentTitle,
|
|
@@ -17,7 +17,7 @@ function RowErrorFallback({ error }: ErrorFallbackComponentProps) {
|
|
|
17
17
|
<td colSpan={100}>
|
|
18
18
|
<span className="text-xs"> Cannot display row</span>
|
|
19
19
|
<br />
|
|
20
|
-
<span className="bg-
|
|
20
|
+
<span className="bg-muted">{message}</span>
|
|
21
21
|
</td>
|
|
22
22
|
</tr>
|
|
23
23
|
);
|
|
@@ -193,7 +193,7 @@ export function AgentRunnerFacetsNav({
|
|
|
193
193
|
<div className="flex justify-end">
|
|
194
194
|
{!selectionCount && (
|
|
195
195
|
<div className="flex items-center justify-between px-2 py-1">
|
|
196
|
-
<div className="text-sm text-muted
|
|
196
|
+
<div className="text-sm text-muted">
|
|
197
197
|
{search.initialized ? `${search.totalCount} runs` : 'Loading runs...'}
|
|
198
198
|
</div>
|
|
199
199
|
</div>
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { FacetBucket } from '@vertesia/common';
|
|
2
2
|
import { Badge, type FilterGroup } from '@vertesia/ui/core';
|
|
3
|
+
import {
|
|
4
|
+
type InteractionDisplayRef,
|
|
5
|
+
InteractionStatusBadge,
|
|
6
|
+
resolveInteractionName,
|
|
7
|
+
splitInteractionType,
|
|
8
|
+
} from '../../utils/interaction.js';
|
|
3
9
|
|
|
4
|
-
export interface EnrichedFacetBucket extends FacetBucket {
|
|
5
|
-
name?: string;
|
|
6
|
-
status?: string;
|
|
7
|
-
version?: number;
|
|
8
|
-
}
|
|
10
|
+
export interface EnrichedFacetBucket extends FacetBucket, InteractionDisplayRef {}
|
|
9
11
|
|
|
10
12
|
interface InteractionFacetProps {
|
|
11
13
|
buckets: EnrichedFacetBucket[];
|
|
@@ -13,6 +15,11 @@ interface InteractionFacetProps {
|
|
|
13
15
|
placeholder?: string;
|
|
14
16
|
}
|
|
15
17
|
|
|
18
|
+
/** The name this facet displays for a bucket — the same one the runs table shows for the run. */
|
|
19
|
+
function bucketName(bucket: EnrichedFacetBucket | undefined, interactionId: string): string {
|
|
20
|
+
return resolveInteractionName(bucket, interactionId) ?? interactionId;
|
|
21
|
+
}
|
|
22
|
+
|
|
16
23
|
export function VInteractionFacet({ buckets, name, placeholder }: InteractionFacetProps): FilterGroup {
|
|
17
24
|
const options = buckets.map((bucket) => ({
|
|
18
25
|
label: `(${bucket.count})`,
|
|
@@ -26,38 +33,20 @@ export function VInteractionFacet({ buckets, name, placeholder }: InteractionFac
|
|
|
26
33
|
type: 'select',
|
|
27
34
|
labelRenderer: (interactionId: string) => {
|
|
28
35
|
const bucket = buckets.find((b) => b._id === interactionId);
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
let badgeVariant: 'success' | 'info' | 'destructive' | 'default' = 'success';
|
|
33
|
-
if (bucket?.status) {
|
|
34
|
-
switch (bucket.status) {
|
|
35
|
-
case InteractionStatus.published:
|
|
36
|
-
badgeVariant = 'success';
|
|
37
|
-
break;
|
|
38
|
-
case InteractionStatus.archived:
|
|
39
|
-
badgeVariant = 'destructive';
|
|
40
|
-
break;
|
|
41
|
-
case InteractionStatus.code:
|
|
42
|
-
badgeVariant = 'info';
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const badgeText =
|
|
48
|
-
bucket?.version && bucket?.status
|
|
49
|
-
? `v${bucket.version} ${bucket.status !== InteractionStatus.unknown ? bucket.status : ''}`
|
|
50
|
-
: bucket?.status || (bucket?.version ? `v${bucket.version}` : '');
|
|
36
|
+
// Same split as the runs table: the `sys`/`app`/`tmp` namespace becomes its own badge
|
|
37
|
+
// instead of staying glued to the name.
|
|
38
|
+
const { type, label } = splitInteractionType(bucketName(bucket, interactionId));
|
|
51
39
|
|
|
52
40
|
return (
|
|
53
41
|
<div className="w-full flex items-center justify-between">
|
|
54
42
|
<div className="flex flex-row flex-wrap items-center gap-2 min-w-0 flex-1">
|
|
55
|
-
<span className="text-sm truncate">{
|
|
56
|
-
{
|
|
57
|
-
<Badge variant=
|
|
58
|
-
{
|
|
43
|
+
<span className="text-sm truncate">{label}</span>
|
|
44
|
+
{type && (
|
|
45
|
+
<Badge variant="secondary" className="text-xs w-fit">
|
|
46
|
+
{type}
|
|
59
47
|
</Badge>
|
|
60
48
|
)}
|
|
49
|
+
{bucket && <InteractionStatusBadge interaction={bucket} className="text-xs w-fit" />}
|
|
61
50
|
</div>
|
|
62
51
|
{(bucket?.count ?? 0) > 0 && <span className="ms-2 text-xs shrink-0">({bucket?.count})</span>}
|
|
63
52
|
</div>
|
|
@@ -65,8 +54,7 @@ export function VInteractionFacet({ buckets, name, placeholder }: InteractionFac
|
|
|
65
54
|
},
|
|
66
55
|
filterBy: (optionValue: string, searchText: string) => {
|
|
67
56
|
const bucket = buckets.find((b) => b._id === optionValue);
|
|
68
|
-
|
|
69
|
-
return searchName.toLowerCase().includes(searchText.toLowerCase());
|
|
57
|
+
return bucketName(bucket, optionValue).toLowerCase().includes(searchText.toLowerCase());
|
|
70
58
|
},
|
|
71
59
|
};
|
|
72
60
|
|
|
@@ -36,7 +36,7 @@ export function createUserFilterGroup({ buckets, name, placeholder }: UserFacetP
|
|
|
36
36
|
<div className="flex-1 min-w-0 flex items-center truncate">
|
|
37
37
|
<UserInfo userRef={userRef} showTitle={true} size="sm" />
|
|
38
38
|
</div>
|
|
39
|
-
<span className="text-muted
|
|
39
|
+
<span className="text-muted flex-shrink-0">({bucket?.count || 0})</span>
|
|
40
40
|
</div>
|
|
41
41
|
);
|
|
42
42
|
},
|
|
@@ -148,6 +148,9 @@ export function GenericPageNavHeader({
|
|
|
148
148
|
};
|
|
149
149
|
|
|
150
150
|
const breadcrumbItems = buildBreadcrumbItems();
|
|
151
|
+
// The description tooltip trails the last element of the header: the breadcrumbs when there
|
|
152
|
+
// are any, otherwise the title.
|
|
153
|
+
const showDescriptionWithTitle = !!title && breadcrumbItems.length === 0;
|
|
151
154
|
|
|
152
155
|
return (
|
|
153
156
|
<div className={clsx('pb-0 ps-4 pe-2 py-2 flex flex-col', className)}>
|
|
@@ -161,7 +164,7 @@ export function GenericPageNavHeader({
|
|
|
161
164
|
maxItems={4}
|
|
162
165
|
/>
|
|
163
166
|
)}
|
|
164
|
-
{description && (
|
|
167
|
+
{description && !showDescriptionWithTitle && (
|
|
165
168
|
<VTooltip description={description}>
|
|
166
169
|
<Info className="size-4 text-muted ms-4" />
|
|
167
170
|
</VTooltip>
|
|
@@ -170,6 +173,11 @@ export function GenericPageNavHeader({
|
|
|
170
173
|
{title && (
|
|
171
174
|
<div className="flex gap-2 items-center">
|
|
172
175
|
<h1 className="text-xl font-semibold break-all">{title}</h1>
|
|
176
|
+
{description && showDescriptionWithTitle && (
|
|
177
|
+
<VTooltip description={description}>
|
|
178
|
+
<Info className="size-4 text-muted" />
|
|
179
|
+
</VTooltip>
|
|
180
|
+
)}
|
|
173
181
|
</div>
|
|
174
182
|
)}
|
|
175
183
|
</div>
|
|
@@ -4,7 +4,7 @@ export function NotFoundView() {
|
|
|
4
4
|
const { t } = useUITranslation();
|
|
5
5
|
return (
|
|
6
6
|
<div className="text-center pt-32">
|
|
7
|
-
<h1 className="text-3xl font-bold text-
|
|
7
|
+
<h1 className="text-3xl font-bold text-destructive">404</h1>
|
|
8
8
|
<p className="text-2xl">{t('layout.pageNotFound')}</p>
|
|
9
9
|
</div>
|
|
10
10
|
);
|