@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
package/src/i18n/locales/pt.json
CHANGED
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"agent.approvalMode.fullControlDescription": "Executar ações de modificação sem aprovação",
|
|
32
32
|
"agent.approvalMode.selectorLabel": "Modo de aprovação do agente",
|
|
33
33
|
"agent.artifacts": "Artefatos",
|
|
34
|
+
"agent.backToDocuments": "Voltar aos documentos",
|
|
34
35
|
"agent.backToMainAgent": "Voltar ao agente principal",
|
|
35
36
|
"agent.batch": "Lote",
|
|
36
37
|
"agent.browserPreview": "Prévia do navegador",
|
|
@@ -66,7 +67,10 @@
|
|
|
66
67
|
"agent.dashboard": "Painel",
|
|
67
68
|
"agent.details": "Detalhes",
|
|
68
69
|
"agent.document": "Documento",
|
|
70
|
+
"agent.documentCount_one": "{{count}} documento",
|
|
71
|
+
"agent.documentCount_other": "{{count}} documentos",
|
|
69
72
|
"agent.documents": "Documentos",
|
|
73
|
+
"agent.documentsFiltered": "{{visible}} de {{total}} documentos",
|
|
70
74
|
"agent.download": "Baixar",
|
|
71
75
|
"agent.downloadConversation": "Baixar conversa",
|
|
72
76
|
"agent.dropFilesToUpload": "Solte arquivos para enviar",
|
|
@@ -122,6 +126,7 @@
|
|
|
122
126
|
"agent.noConversationContent": "Nenhum conteúdo de conversa disponível para exportar",
|
|
123
127
|
"agent.noDocumentsOpen": "Sem documentos abertos",
|
|
124
128
|
"agent.noFilesUploadedYet": "Sem arquivos enviados",
|
|
129
|
+
"agent.noMatchingDocuments": "Nenhum documento correspondente",
|
|
125
130
|
"agent.noMessagesInWorkstream": "Nenhuma mensagem neste fluxo de trabalho ainda...",
|
|
126
131
|
"agent.noPlanAvailable": "Sem plano disponível",
|
|
127
132
|
"agent.noPlanDetected": "Nenhum plano detectado ainda",
|
|
@@ -361,6 +366,7 @@
|
|
|
361
366
|
"mcpConnections.enabled": "Ativado",
|
|
362
367
|
"mcpConnections.label": "MCP",
|
|
363
368
|
"mcpConnections.manage": "Gerenciar conexões MCP",
|
|
369
|
+
"mcpConnections.managedByApp": "Gerenciado pelo aplicativo",
|
|
364
370
|
"mcpConnections.settings": "Configurações",
|
|
365
371
|
"mcpConnections.subtitle": "Gerencie os servidores MCP disponíveis para esta conversa.",
|
|
366
372
|
"mcpConnections.title": "MCP",
|
|
@@ -416,6 +422,12 @@
|
|
|
416
422
|
"pdf.previousPage": "Página anterior",
|
|
417
423
|
"pdf.zoomIn": "Ampliar",
|
|
418
424
|
"pdf.zoomOut": "Reduzir",
|
|
425
|
+
"permissions.accessDenied": "Você não tem permissão para acessar este espaço de trabalho.",
|
|
426
|
+
"permissions.connecting": "Conectando ao seu espaço de trabalho…",
|
|
427
|
+
"permissions.connectionFailed": "Não foi possível conectar ao seu espaço de trabalho",
|
|
428
|
+
"permissions.loadingPermissions": "Carregando suas permissões.",
|
|
429
|
+
"permissions.retrying": "Isso está demorando mais que o normal. Continuaremos tentando automaticamente.",
|
|
430
|
+
"permissions.tryAgainLater": "Tente novamente em instantes.",
|
|
419
431
|
"shell.accessDenied": "Acesso negado",
|
|
420
432
|
"shell.applicationNotRegistered": "Aplicativo não registrado",
|
|
421
433
|
"shell.organization": "Organização",
|
|
@@ -1132,12 +1144,12 @@
|
|
|
1132
1144
|
"intakePolicy.summary.source": "Origem",
|
|
1133
1145
|
"intakePolicy.summary.template": "Modelo",
|
|
1134
1146
|
"intakePolicy.summary.toc": "Sumário",
|
|
1147
|
+
"intakePolicy.tab.classification": "Classificação",
|
|
1135
1148
|
"intakePolicy.tab.conversion": "Conversão",
|
|
1136
1149
|
"intakePolicy.tab.extraction": "Extração",
|
|
1137
1150
|
"intakePolicy.tab.grounding": "Fundamentação",
|
|
1138
1151
|
"intakePolicy.tab.json": "JSON",
|
|
1139
1152
|
"intakePolicy.tab.output": "Saída",
|
|
1140
|
-
"intakePolicy.tab.overview": "Visão geral",
|
|
1141
1153
|
"intakePolicy.title": "Política de ingestão",
|
|
1142
1154
|
"intakePolicy.toast.invalid": "Política de ingestão inválida",
|
|
1143
1155
|
"intakePolicy.toast.saved": "A política de ingestão foi salva.",
|
package/src/i18n/locales/ru.json
CHANGED
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"agent.approvalMode.fullControlDescription": "Выполнять изменяющие действия без одобрения",
|
|
33
33
|
"agent.approvalMode.selectorLabel": "Режим одобрения агента",
|
|
34
34
|
"agent.artifacts": "Артефакты",
|
|
35
|
+
"agent.backToDocuments": "Назад к документам",
|
|
35
36
|
"agent.backToMainAgent": "Вернуться к основному агенту",
|
|
36
37
|
"agent.batch": "Пакет",
|
|
37
38
|
"agent.browserPreview": "Предпросмотр браузера",
|
|
@@ -67,7 +68,12 @@
|
|
|
67
68
|
"agent.dashboard": "Панель управления",
|
|
68
69
|
"agent.details": "Детали",
|
|
69
70
|
"agent.document": "Документ",
|
|
71
|
+
"agent.documentCount_one": "{{count}} документ",
|
|
72
|
+
"agent.documentCount_few": "{{count}} документа",
|
|
73
|
+
"agent.documentCount_many": "{{count}} документов",
|
|
74
|
+
"agent.documentCount_other": "{{count}} документа",
|
|
70
75
|
"agent.documents": "Документы",
|
|
76
|
+
"agent.documentsFiltered": "{{visible}} из {{total}} документов",
|
|
71
77
|
"agent.download": "Скачать",
|
|
72
78
|
"agent.downloadConversation": "Скачать разговор",
|
|
73
79
|
"agent.dropFilesToUpload": "Перетащите файлы для загрузки",
|
|
@@ -123,6 +129,7 @@
|
|
|
123
129
|
"agent.noConversationContent": "Нет содержимого разговора для экспорта",
|
|
124
130
|
"agent.noDocumentsOpen": "Нет открытых документов",
|
|
125
131
|
"agent.noFilesUploadedYet": "Файлы не загружены",
|
|
132
|
+
"agent.noMatchingDocuments": "Подходящих документов нет",
|
|
126
133
|
"agent.noMessagesInWorkstream": "Пока нет сообщений в этом рабочем потоке...",
|
|
127
134
|
"agent.noPlanAvailable": "План недоступен",
|
|
128
135
|
"agent.noPlanDetected": "План пока не обнаружен",
|
|
@@ -363,6 +370,7 @@
|
|
|
363
370
|
"mcpConnections.enabled": "Включено",
|
|
364
371
|
"mcpConnections.label": "MCP",
|
|
365
372
|
"mcpConnections.manage": "Управление подключениями MCP",
|
|
373
|
+
"mcpConnections.managedByApp": "Управляется приложением",
|
|
366
374
|
"mcpConnections.settings": "Настройки",
|
|
367
375
|
"mcpConnections.subtitle": "Управляйте серверами MCP, доступными для этого разговора.",
|
|
368
376
|
"mcpConnections.title": "MCP",
|
|
@@ -418,6 +426,12 @@
|
|
|
418
426
|
"pdf.previousPage": "Предыдущая страница",
|
|
419
427
|
"pdf.zoomIn": "Увеличить",
|
|
420
428
|
"pdf.zoomOut": "Уменьшить",
|
|
429
|
+
"permissions.accessDenied": "У вас нет разрешения на доступ к этому рабочему пространству.",
|
|
430
|
+
"permissions.connecting": "Подключение к рабочему пространству…",
|
|
431
|
+
"permissions.connectionFailed": "Не удалось подключиться к рабочему пространству",
|
|
432
|
+
"permissions.loadingPermissions": "Загрузка ваших разрешений.",
|
|
433
|
+
"permissions.retrying": "Это занимает больше времени, чем обычно. Мы продолжим попытки автоматически.",
|
|
434
|
+
"permissions.tryAgainLater": "Повторите попытку через некоторое время.",
|
|
421
435
|
"shell.accessDenied": "Доступ запрещён",
|
|
422
436
|
"shell.applicationNotRegistered": "Приложение не зарегистрировано",
|
|
423
437
|
"shell.organization": "Организация",
|
|
@@ -1143,12 +1157,12 @@
|
|
|
1143
1157
|
"intakePolicy.summary.source": "Источник",
|
|
1144
1158
|
"intakePolicy.summary.template": "Модель",
|
|
1145
1159
|
"intakePolicy.summary.toc": "Индекс",
|
|
1160
|
+
"intakePolicy.tab.classification": "Классификация",
|
|
1146
1161
|
"intakePolicy.tab.conversion": "Преобразование",
|
|
1147
1162
|
"intakePolicy.tab.extraction": "Извлечение",
|
|
1148
1163
|
"intakePolicy.tab.grounding": "Обоснование",
|
|
1149
1164
|
"intakePolicy.tab.json": "JSON",
|
|
1150
1165
|
"intakePolicy.tab.output": "Вывод",
|
|
1151
|
-
"intakePolicy.tab.overview": "Обзор",
|
|
1152
1166
|
"intakePolicy.title": "Политика приёма",
|
|
1153
1167
|
"intakePolicy.toast.invalid": "Недопустимая политика приёма",
|
|
1154
1168
|
"intakePolicy.toast.saved": "Политика приёма сохранена.",
|
package/src/i18n/locales/tr.json
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"agent.approvalMode.fullControlDescription": "Değiştiren işlemleri onaysız çalıştır",
|
|
31
31
|
"agent.approvalMode.selectorLabel": "Ajan onay modu",
|
|
32
32
|
"agent.artifacts": "Yapılar",
|
|
33
|
+
"agent.backToDocuments": "Belgelere geri dön",
|
|
33
34
|
"agent.backToMainAgent": "Ana ajana dön",
|
|
34
35
|
"agent.batch": "Toplu",
|
|
35
36
|
"agent.browserPreview": "Tarayıcı önizlemesi",
|
|
@@ -65,7 +66,10 @@
|
|
|
65
66
|
"agent.dashboard": "Gösterge paneli",
|
|
66
67
|
"agent.details": "Ayrıntılar",
|
|
67
68
|
"agent.document": "Belge",
|
|
69
|
+
"agent.documentCount_one": "{{count}} belge",
|
|
70
|
+
"agent.documentCount_other": "{{count}} belge",
|
|
68
71
|
"agent.documents": "Belgeler",
|
|
72
|
+
"agent.documentsFiltered": "{{total}} belgeden {{visible}} tanesi",
|
|
69
73
|
"agent.download": "İndir",
|
|
70
74
|
"agent.downloadConversation": "Konuşmayı indir",
|
|
71
75
|
"agent.dropFilesToUpload": "Yüklemek için dosyaları bırakın",
|
|
@@ -121,6 +125,7 @@
|
|
|
121
125
|
"agent.noConversationContent": "Dışa aktarılacak konuşma içeriği yok",
|
|
122
126
|
"agent.noDocumentsOpen": "Açık belge yok",
|
|
123
127
|
"agent.noFilesUploadedYet": "Yüklenen dosya yok",
|
|
128
|
+
"agent.noMatchingDocuments": "Eşleşen belge yok",
|
|
124
129
|
"agent.noMessagesInWorkstream": "Bu iş akışında henüz mesaj yok...",
|
|
125
130
|
"agent.noPlanAvailable": "Plan mevcut değil",
|
|
126
131
|
"agent.noPlanDetected": "Henüz bir plan algılanmadı",
|
|
@@ -359,6 +364,7 @@
|
|
|
359
364
|
"mcpConnections.enabled": "Etkin",
|
|
360
365
|
"mcpConnections.label": "MCP",
|
|
361
366
|
"mcpConnections.manage": "MCP bağlantılarını yönet",
|
|
367
|
+
"mcpConnections.managedByApp": "Uygulama tarafından yönetiliyor",
|
|
362
368
|
"mcpConnections.settings": "Ayarlar",
|
|
363
369
|
"mcpConnections.subtitle": "Bu konuşma için kullanılabilen MCP sunucularını yönetin.",
|
|
364
370
|
"mcpConnections.title": "MCP",
|
|
@@ -414,6 +420,12 @@
|
|
|
414
420
|
"pdf.previousPage": "Önceki sayfa",
|
|
415
421
|
"pdf.zoomIn": "Yakınlaştır",
|
|
416
422
|
"pdf.zoomOut": "Uzaklaştır",
|
|
423
|
+
"permissions.accessDenied": "Bu çalışma alanına erişim izniniz yok.",
|
|
424
|
+
"permissions.connecting": "Çalışma alanınıza bağlanılıyor…",
|
|
425
|
+
"permissions.connectionFailed": "Çalışma alanınıza bağlanılamadı",
|
|
426
|
+
"permissions.loadingPermissions": "İzinleriniz yükleniyor.",
|
|
427
|
+
"permissions.retrying": "Bu işlem normalden uzun sürüyor. Otomatik olarak yeniden deneyeceğiz.",
|
|
428
|
+
"permissions.tryAgainLater": "Lütfen biraz sonra tekrar deneyin.",
|
|
417
429
|
"shell.accessDenied": "Erişim Reddedildi",
|
|
418
430
|
"shell.applicationNotRegistered": "Uygulama kayıtlı değil",
|
|
419
431
|
"shell.organization": "Kuruluş",
|
|
@@ -1121,12 +1133,12 @@
|
|
|
1121
1133
|
"intakePolicy.summary.source": "Kaynak",
|
|
1122
1134
|
"intakePolicy.summary.template": "Model",
|
|
1123
1135
|
"intakePolicy.summary.toc": "Dizin",
|
|
1136
|
+
"intakePolicy.tab.classification": "Sınıflandırma",
|
|
1124
1137
|
"intakePolicy.tab.conversion": "Dönüştürme",
|
|
1125
1138
|
"intakePolicy.tab.extraction": "Çıkarma",
|
|
1126
1139
|
"intakePolicy.tab.grounding": "Temellendirme",
|
|
1127
1140
|
"intakePolicy.tab.json": "JSON",
|
|
1128
1141
|
"intakePolicy.tab.output": "Çıktı",
|
|
1129
|
-
"intakePolicy.tab.overview": "Genel bakış",
|
|
1130
1142
|
"intakePolicy.title": "Alım ilkesi",
|
|
1131
1143
|
"intakePolicy.toast.invalid": "Geçersiz alım ilkesi",
|
|
1132
1144
|
"intakePolicy.toast.saved": "Alım ilkesi kaydedildi.",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"agent.approvalMode.fullControlDescription": "不需核准即可執行修改動作",
|
|
31
31
|
"agent.approvalMode.selectorLabel": "代理程式核准模式",
|
|
32
32
|
"agent.artifacts": "產物",
|
|
33
|
+
"agent.backToDocuments": "返回文件列表",
|
|
33
34
|
"agent.backToMainAgent": "返回主代理",
|
|
34
35
|
"agent.batch": "批次",
|
|
35
36
|
"agent.browserPreview": "瀏覽器預覽",
|
|
@@ -65,7 +66,10 @@
|
|
|
65
66
|
"agent.dashboard": "儀表板",
|
|
66
67
|
"agent.details": "詳情",
|
|
67
68
|
"agent.document": "文件",
|
|
69
|
+
"agent.documentCount_one": "{{count}} 個文件",
|
|
70
|
+
"agent.documentCount_other": "{{count}} 個文件",
|
|
68
71
|
"agent.documents": "文件",
|
|
72
|
+
"agent.documentsFiltered": "{{total}} 個文件中的 {{visible}} 個",
|
|
69
73
|
"agent.download": "下載",
|
|
70
74
|
"agent.downloadConversation": "下載對話",
|
|
71
75
|
"agent.dropFilesToUpload": "拖放檔案上傳",
|
|
@@ -121,6 +125,7 @@
|
|
|
121
125
|
"agent.noConversationContent": "沒有可匯出的對話內容",
|
|
122
126
|
"agent.noDocumentsOpen": "沒有開啟的文件",
|
|
123
127
|
"agent.noFilesUploadedYet": "暫無上傳檔案",
|
|
128
|
+
"agent.noMatchingDocuments": "沒有符合的文件",
|
|
124
129
|
"agent.noMessagesInWorkstream": "此工作流程中暫無訊息...",
|
|
125
130
|
"agent.noPlanAvailable": "暫無計劃",
|
|
126
131
|
"agent.noPlanDetected": "尚未偵測到計劃",
|
|
@@ -359,6 +364,7 @@
|
|
|
359
364
|
"mcpConnections.enabled": "已啟用",
|
|
360
365
|
"mcpConnections.label": "MCP",
|
|
361
366
|
"mcpConnections.manage": "管理 MCP 連線",
|
|
367
|
+
"mcpConnections.managedByApp": "由應用程式管理",
|
|
362
368
|
"mcpConnections.settings": "設定",
|
|
363
369
|
"mcpConnections.subtitle": "管理可用於此對話的 MCP 伺服器。",
|
|
364
370
|
"mcpConnections.title": "MCP",
|
|
@@ -414,6 +420,12 @@
|
|
|
414
420
|
"pdf.previousPage": "上一頁",
|
|
415
421
|
"pdf.zoomIn": "放大",
|
|
416
422
|
"pdf.zoomOut": "縮小",
|
|
423
|
+
"permissions.accessDenied": "您沒有存取此工作區的權限。",
|
|
424
|
+
"permissions.connecting": "正在連線至您的工作區…",
|
|
425
|
+
"permissions.connectionFailed": "無法連線至您的工作區",
|
|
426
|
+
"permissions.loadingPermissions": "正在載入您的權限。",
|
|
427
|
+
"permissions.retrying": "這比平時需要更長時間。我們會繼續自動重試。",
|
|
428
|
+
"permissions.tryAgainLater": "請稍後再試。",
|
|
417
429
|
"shell.accessDenied": "存取被拒絕",
|
|
418
430
|
"shell.applicationNotRegistered": "應用程式未註冊",
|
|
419
431
|
"shell.organization": "組織",
|
|
@@ -1120,12 +1132,12 @@
|
|
|
1120
1132
|
"intakePolicy.summary.source": "來源",
|
|
1121
1133
|
"intakePolicy.summary.template": "模板",
|
|
1122
1134
|
"intakePolicy.summary.toc": "目录",
|
|
1135
|
+
"intakePolicy.tab.classification": "分類",
|
|
1123
1136
|
"intakePolicy.tab.conversion": "轉換",
|
|
1124
1137
|
"intakePolicy.tab.extraction": "提取",
|
|
1125
1138
|
"intakePolicy.tab.grounding": "依據",
|
|
1126
1139
|
"intakePolicy.tab.json": "JSON",
|
|
1127
1140
|
"intakePolicy.tab.output": "輸出",
|
|
1128
|
-
"intakePolicy.tab.overview": "概覽",
|
|
1129
1141
|
"intakePolicy.title": "采集策略",
|
|
1130
1142
|
"intakePolicy.toast.invalid": "采集策略無效",
|
|
1131
1143
|
"intakePolicy.toast.saved": "采集策略已保存。",
|
package/src/i18n/locales/zh.json
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"agent.approvalMode.fullControlDescription": "无需批准即可执行修改操作",
|
|
31
31
|
"agent.approvalMode.selectorLabel": "代理批准模式",
|
|
32
32
|
"agent.artifacts": "产物",
|
|
33
|
+
"agent.backToDocuments": "返回文档列表",
|
|
33
34
|
"agent.backToMainAgent": "返回主代理",
|
|
34
35
|
"agent.batch": "批次",
|
|
35
36
|
"agent.browserPreview": "浏览器预览",
|
|
@@ -65,7 +66,10 @@
|
|
|
65
66
|
"agent.dashboard": "仪表板",
|
|
66
67
|
"agent.details": "详情",
|
|
67
68
|
"agent.document": "文档",
|
|
69
|
+
"agent.documentCount_one": "{{count}} 个文档",
|
|
70
|
+
"agent.documentCount_other": "{{count}} 个文档",
|
|
68
71
|
"agent.documents": "文档",
|
|
72
|
+
"agent.documentsFiltered": "{{total}} 个文档中的 {{visible}} 个",
|
|
69
73
|
"agent.download": "下载",
|
|
70
74
|
"agent.downloadConversation": "下载对话",
|
|
71
75
|
"agent.dropFilesToUpload": "拖放文件上传",
|
|
@@ -121,6 +125,7 @@
|
|
|
121
125
|
"agent.noConversationContent": "没有可导出的对话内容",
|
|
122
126
|
"agent.noDocumentsOpen": "没有打开的文档",
|
|
123
127
|
"agent.noFilesUploadedYet": "暂无上传文件",
|
|
128
|
+
"agent.noMatchingDocuments": "没有匹配的文档",
|
|
124
129
|
"agent.noMessagesInWorkstream": "此工作流中暂无消息...",
|
|
125
130
|
"agent.noPlanAvailable": "暂无计划",
|
|
126
131
|
"agent.noPlanDetected": "尚未检测到计划",
|
|
@@ -359,6 +364,7 @@
|
|
|
359
364
|
"mcpConnections.enabled": "已启用",
|
|
360
365
|
"mcpConnections.label": "MCP",
|
|
361
366
|
"mcpConnections.manage": "管理 MCP 连接",
|
|
367
|
+
"mcpConnections.managedByApp": "由应用管理",
|
|
362
368
|
"mcpConnections.settings": "设置",
|
|
363
369
|
"mcpConnections.subtitle": "管理可用于此对话的 MCP 服务器。",
|
|
364
370
|
"mcpConnections.title": "MCP",
|
|
@@ -414,6 +420,12 @@
|
|
|
414
420
|
"pdf.previousPage": "上一页",
|
|
415
421
|
"pdf.zoomIn": "放大",
|
|
416
422
|
"pdf.zoomOut": "缩小",
|
|
423
|
+
"permissions.accessDenied": "您没有访问此工作区的权限。",
|
|
424
|
+
"permissions.connecting": "正在连接到您的工作区…",
|
|
425
|
+
"permissions.connectionFailed": "无法连接到您的工作区",
|
|
426
|
+
"permissions.loadingPermissions": "正在加载您的权限。",
|
|
427
|
+
"permissions.retrying": "这比平时需要更长时间。我们会继续自动重试。",
|
|
428
|
+
"permissions.tryAgainLater": "请稍后重试。",
|
|
417
429
|
"shell.accessDenied": "访问被拒绝",
|
|
418
430
|
"shell.applicationNotRegistered": "应用未注册",
|
|
419
431
|
"shell.organization": "组织",
|
|
@@ -1120,12 +1132,12 @@
|
|
|
1120
1132
|
"intakePolicy.summary.source": "来源",
|
|
1121
1133
|
"intakePolicy.summary.template": "模板",
|
|
1122
1134
|
"intakePolicy.summary.toc": "目录",
|
|
1135
|
+
"intakePolicy.tab.classification": "分类",
|
|
1123
1136
|
"intakePolicy.tab.conversion": "转换",
|
|
1124
1137
|
"intakePolicy.tab.extraction": "提取",
|
|
1125
1138
|
"intakePolicy.tab.grounding": "依据",
|
|
1126
1139
|
"intakePolicy.tab.json": "JSON",
|
|
1127
1140
|
"intakePolicy.tab.output": "输出",
|
|
1128
|
-
"intakePolicy.tab.overview": "概览",
|
|
1129
1141
|
"intakePolicy.title": "采集策略",
|
|
1130
1142
|
"intakePolicy.toast.invalid": "采集策略无效",
|
|
1131
1143
|
"intakePolicy.toast.saved": "采集策略已保存。",
|
|
@@ -27,11 +27,11 @@ FullHeightLayout.Body = function Body({ className, children }: BodyProps) {
|
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
FullHeightLayout.VR = function VDivider() {
|
|
30
|
-
return <div className="w-[1px] border border-
|
|
30
|
+
return <div className="w-[1px] border border-destructive"></div>;
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
FullHeightLayout.HR = function HDivider() {
|
|
34
|
-
return <div className="w-full h-1 border-b border-
|
|
34
|
+
return <div className="w-full h-1 border-b border-destructive"></div>;
|
|
35
35
|
};
|
|
36
36
|
|
|
37
37
|
FullHeightLayout.Flex = function Flex({ className, children }: BodyProps) {
|
package/src/layout/Navbar.tsx
CHANGED
|
@@ -42,12 +42,12 @@ function SearchBox(_props: SearchBoxProps) {
|
|
|
42
42
|
{t('layout.search')}
|
|
43
43
|
</label>
|
|
44
44
|
<Search
|
|
45
|
-
className="pointer-events-none absolute inset-y-0 start-0 h-full w-5 text-
|
|
45
|
+
className="pointer-events-none absolute inset-y-0 start-0 h-full w-5 text-muted"
|
|
46
46
|
aria-hidden="true"
|
|
47
47
|
/>
|
|
48
48
|
<input
|
|
49
49
|
id="search-field"
|
|
50
|
-
className="block h-full w-full border-0 py-0 ps-8 pe-0 text-
|
|
50
|
+
className="block h-full w-full border-0 py-0 ps-8 pe-0 text-foreground placeholder:text-muted focus:ring-0 sm:text-sm"
|
|
51
51
|
placeholder={t('layout.searchPlaceholder')}
|
|
52
52
|
type="search"
|
|
53
53
|
name="search"
|
|
@@ -85,7 +85,7 @@ export function NavbarSeparator({ visible }: NavbarSeparatorProps) {
|
|
|
85
85
|
if (visible) {
|
|
86
86
|
visibility = visible === 'mobile' ? 'lg:hidden' : 'hidden lg:block';
|
|
87
87
|
}
|
|
88
|
-
return <div className={`h-6 w-px bg-
|
|
88
|
+
return <div className={`h-6 w-px bg-muted/10 dark:bg-muted/0.1 ${visibility}`} aria-hidden="true" />;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
interface NavbarIconButtonProps {
|
|
@@ -97,7 +97,7 @@ export function NavbarIconButton({ title, icon: Icon, onClick }: NavbarIconButto
|
|
|
97
97
|
return (
|
|
98
98
|
<button
|
|
99
99
|
type="button"
|
|
100
|
-
className="-m-2.5 p-2.5 text-
|
|
100
|
+
className="-m-2.5 p-2.5 text-muted dark:text-foreground hover:text-muted"
|
|
101
101
|
onClick={onClick}
|
|
102
102
|
>
|
|
103
103
|
<span className="sr-only">{title}</span>
|
|
@@ -120,7 +120,7 @@ interface NavbarLinkProps {
|
|
|
120
120
|
}
|
|
121
121
|
export function NavbarLink({ href, onClick, children }: NavbarLinkProps) {
|
|
122
122
|
return (
|
|
123
|
-
<a className="dark:text-
|
|
123
|
+
<a className="dark:text-foreground" href={href} onClick={onClick}>
|
|
124
124
|
{children}
|
|
125
125
|
</a>
|
|
126
126
|
);
|
package/src/layout/Sidebar.tsx
CHANGED
|
@@ -12,7 +12,7 @@ interface SidebarProps {
|
|
|
12
12
|
|
|
13
13
|
export function Sidebar({ children, logo, className }: SidebarProps) {
|
|
14
14
|
return (
|
|
15
|
-
<div className={clsx(className || 'bg-
|
|
15
|
+
<div className={clsx(className || 'bg-primary', 'flex flex-col h-full')}>
|
|
16
16
|
{logo && <div className="-mx-2 flex h-auto my-4 shrink-0 self-start">{logo}</div>}
|
|
17
17
|
<div className="flex-1 min-h-0 overflow-hidden px-0 lg:px-2">
|
|
18
18
|
<nav className="h-full flex flex-col">
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// @vitest-environment jsdom
|
|
2
|
+
|
|
3
|
+
import { act, cleanup, fireEvent, render, screen } from '@testing-library/react';
|
|
4
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
5
|
+
import { NestedNavigationContext } from './NestedNavigationContext';
|
|
6
|
+
import { NestedRouterProvider } from './NestedRouterProvider';
|
|
7
|
+
import { RouteComponent } from './RouteComponent';
|
|
8
|
+
import { useNavigate } from './Router';
|
|
9
|
+
import { RouterProvider } from './RouterProvider';
|
|
10
|
+
|
|
11
|
+
function NavigationButton() {
|
|
12
|
+
const navigate = useNavigate();
|
|
13
|
+
return (
|
|
14
|
+
<button type="button" onClick={() => navigate('/objects/object-1')}>
|
|
15
|
+
Open object
|
|
16
|
+
</button>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
describe('NestedNavigationContext', () => {
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
window.history.pushState({}, '', '/store/objects');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
afterEach(() => {
|
|
26
|
+
cleanup();
|
|
27
|
+
window.history.pushState({}, '', '/');
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('can apply a top-level base path from inside a nested route', () => {
|
|
31
|
+
const routes = [
|
|
32
|
+
{
|
|
33
|
+
path: '/store/objects/*',
|
|
34
|
+
Component: () => (
|
|
35
|
+
<NestedRouterProvider routes={[{ path: '/', Component: () => null }]}>
|
|
36
|
+
<NestedNavigationContext basePath="/store" isBasePathNested={false}>
|
|
37
|
+
<NavigationButton />
|
|
38
|
+
</NestedNavigationContext>
|
|
39
|
+
</NestedRouterProvider>
|
|
40
|
+
),
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
render(
|
|
45
|
+
<RouterProvider routes={routes}>
|
|
46
|
+
<RouteComponent />
|
|
47
|
+
</RouterProvider>,
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
act(() => fireEvent.click(screen.getByRole('button', { name: 'Open object' })));
|
|
51
|
+
|
|
52
|
+
expect(window.location.pathname).toBe('/store/objects/object-1');
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -7,10 +7,17 @@ import { ReactRouterContext, useRouterContext } from './Router';
|
|
|
7
7
|
|
|
8
8
|
interface NestedNavigationContextProps {
|
|
9
9
|
basePath: string;
|
|
10
|
+
/** Whether this base path is relative to the current nested router. Defaults to true. */
|
|
11
|
+
isBasePathNested?: boolean;
|
|
10
12
|
fixLinks?: boolean;
|
|
11
13
|
children: React.ReactNode | React.ReactNode[];
|
|
12
14
|
}
|
|
13
|
-
export function NestedNavigationContext({
|
|
15
|
+
export function NestedNavigationContext({
|
|
16
|
+
basePath,
|
|
17
|
+
isBasePathNested = true,
|
|
18
|
+
fixLinks = false,
|
|
19
|
+
children,
|
|
20
|
+
}: NestedNavigationContextProps) {
|
|
14
21
|
const ctx = useRouterContext();
|
|
15
22
|
|
|
16
23
|
const wrapWithFixLinks = fixLinks
|
|
@@ -27,7 +34,7 @@ export function NestedNavigationContext({ basePath, fixLinks = false, children }
|
|
|
27
34
|
return ctx.navigate(to, options);
|
|
28
35
|
}
|
|
29
36
|
const actualBasePath = options?.basePath ? joinPath(basePath, options.basePath) : basePath;
|
|
30
|
-
return ctx.navigate(to, { ...options, basePath: actualBasePath });
|
|
37
|
+
return ctx.navigate(to, { ...options, basePath: actualBasePath, isBasePathNested });
|
|
31
38
|
},
|
|
32
39
|
}}
|
|
33
40
|
>
|
|
@@ -12,13 +12,11 @@ import {
|
|
|
12
12
|
resolveAuthSelection,
|
|
13
13
|
UserNotFoundError,
|
|
14
14
|
} from './auth/composable';
|
|
15
|
-
import {
|
|
15
|
+
import { redirectToCentralAuth, shouldRedirectToCentralAuth } from './auth/domainRouting';
|
|
16
16
|
import { getFirebaseAuth } from './auth/firebase';
|
|
17
17
|
import { useAuthState } from './auth/useAuthState';
|
|
18
18
|
import { UserSession, UserSessionContext } from './UserSession';
|
|
19
19
|
|
|
20
|
-
const CENTRAL_AUTH_REDIRECT = 'https://internal-auth.vertesia.app/';
|
|
21
|
-
|
|
22
20
|
function clearAuthHash() {
|
|
23
21
|
const url = new URL(window.location.href);
|
|
24
22
|
url.hash = '';
|
|
@@ -66,7 +64,7 @@ export function UserSessionProvider({ children, loadOnboardingStatus = true }: U
|
|
|
66
64
|
const token = hashParams.get('token');
|
|
67
65
|
const state = hashParams.get('state');
|
|
68
66
|
const [session, setSession] = useState<UserSession>(new UserSession());
|
|
69
|
-
const {
|
|
67
|
+
const { verifyState, clearState } = useAuthState();
|
|
70
68
|
const hasInitiatedAuthRef = useRef(false);
|
|
71
69
|
const authFlowRef = useRef<(() => undefined | (() => void)) | undefined>(undefined);
|
|
72
70
|
|
|
@@ -110,17 +108,6 @@ export function UserSessionProvider({ children, loadOnboardingStatus = true }: U
|
|
|
110
108
|
return true;
|
|
111
109
|
};
|
|
112
110
|
|
|
113
|
-
const redirectToCentralAuth = (selection: { accountId?: string; projectId?: string }) => {
|
|
114
|
-
const url = centralAuthRedirectUrl({
|
|
115
|
-
centralAuthUrl: CENTRAL_AUTH_REDIRECT,
|
|
116
|
-
stsEndpoint: Env.endpoints.sts ?? 'https://sts.vertesia.io',
|
|
117
|
-
returnUrl: authReturnUrl(),
|
|
118
|
-
state: generateState(),
|
|
119
|
-
...selection,
|
|
120
|
-
});
|
|
121
|
-
location.replace(url.toString());
|
|
122
|
-
};
|
|
123
|
-
|
|
124
111
|
authFlowRef.current = () => {
|
|
125
112
|
// Make this effect idempotent - only run auth flow once
|
|
126
113
|
if (hasInitiatedAuthRef.current) {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { renderHook } from '@testing-library/react';
|
|
2
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import { generateAuthState, verifyAuthState } from './authState';
|
|
4
|
+
import { useAuthState } from './useAuthState';
|
|
5
|
+
|
|
6
|
+
afterEach(() => {
|
|
7
|
+
sessionStorage.clear();
|
|
8
|
+
vi.useRealTimers();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
describe('shared auth state', () => {
|
|
12
|
+
it('lets the provider hook verify and clear state generated before React mounts', () => {
|
|
13
|
+
const state = generateAuthState();
|
|
14
|
+
const { result } = renderHook(() => useAuthState());
|
|
15
|
+
expect(result.current.verifyState(state)).toBeUndefined();
|
|
16
|
+
result.current.clearState();
|
|
17
|
+
expect(verifyAuthState(state)).toContain('State mismatched');
|
|
18
|
+
expect(sessionStorage.getItem('auth_state_expiry')).toBeNull();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('keeps hook-generated state compatible with the shared verifier', () => {
|
|
22
|
+
const { result } = renderHook(() => useAuthState());
|
|
23
|
+
const state = result.current.generateState();
|
|
24
|
+
expect(verifyAuthState(state)).toBeUndefined();
|
|
25
|
+
expect(verifyAuthState(null)).toBe('Missing state');
|
|
26
|
+
expect(verifyAuthState('wrong')).toContain('State mismatched');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('rejects the recorded state after the existing five-minute lifetime', () => {
|
|
30
|
+
vi.useFakeTimers();
|
|
31
|
+
const state = generateAuthState();
|
|
32
|
+
vi.advanceTimersByTime(5 * 60 * 1000 + 1);
|
|
33
|
+
expect(verifyAuthState(state)).toBe('State expired');
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `state` parameter binding a Central Auth round-trip to the tab that started it.
|
|
3
|
+
*
|
|
4
|
+
* Plain functions rather than a hook, because the round-trip is not always started from a
|
|
5
|
+
* component: an expired session is renewed from the token layer, which has no React context to
|
|
6
|
+
* call {@link useAuthState} from. The hook wraps these so both paths write the same record.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const AUTH_STATE_KEY = 'auth_state';
|
|
10
|
+
const STATE_EXPIRY_KEY = 'auth_state_expiry';
|
|
11
|
+
const STATE_TTL = 5 * 60 * 1000; // 5 min
|
|
12
|
+
|
|
13
|
+
/** Mint a state value and record it for {@link verifyAuthState}. */
|
|
14
|
+
export function generateAuthState(): string {
|
|
15
|
+
const state = crypto.randomUUID();
|
|
16
|
+
sessionStorage.setItem(AUTH_STATE_KEY, state);
|
|
17
|
+
sessionStorage.setItem(STATE_EXPIRY_KEY, String(Date.now() + STATE_TTL));
|
|
18
|
+
return state;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** The reason `returnedState` is unacceptable, or undefined when it is good. */
|
|
22
|
+
export function verifyAuthState(returnedState: string | null): string | undefined {
|
|
23
|
+
if (!returnedState) {
|
|
24
|
+
return 'Missing state';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const savedState = sessionStorage.getItem(AUTH_STATE_KEY);
|
|
28
|
+
const expiryTime = parseInt(sessionStorage.getItem(STATE_EXPIRY_KEY) || '0', 10);
|
|
29
|
+
|
|
30
|
+
if (savedState !== returnedState) {
|
|
31
|
+
return `State mismatched (${savedState} !== ${returnedState})`;
|
|
32
|
+
}
|
|
33
|
+
if (Date.now() > expiryTime) {
|
|
34
|
+
return 'State expired';
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function clearAuthState(): void {
|
|
40
|
+
sessionStorage.removeItem(AUTH_STATE_KEY);
|
|
41
|
+
sessionStorage.removeItem(STATE_EXPIRY_KEY);
|
|
42
|
+
}
|