@vertesia/ui 1.5.0-dev.20260807.073259Z → 1.5.0-dev.20260901.005903Z
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/README.md +1 -7
- package/lib/core/components/FormItem.d.ts.map +1 -1
- package/lib/core/components/FormItem.js +2 -3
- package/lib/core/components/FormItem.js.map +1 -1
- package/lib/core/components/InfoTip.d.ts +20 -0
- package/lib/core/components/InfoTip.d.ts.map +1 -0
- package/lib/core/components/InfoTip.js +18 -0
- package/lib/core/components/InfoTip.js.map +1 -0
- package/lib/core/components/index.d.ts +1 -0
- package/lib/core/components/index.d.ts.map +1 -1
- package/lib/core/components/index.js +1 -0
- package/lib/core/components/index.js.map +1 -1
- package/lib/core/components/shadcn/Panel.d.ts.map +1 -1
- package/lib/core/components/shadcn/Panel.js +3 -3
- package/lib/core/components/shadcn/Panel.js.map +1 -1
- package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js +1 -1
- package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
- package/lib/core/components/shadcn/filters/filter/dateFilter.d.ts.map +1 -1
- package/lib/core/components/shadcn/filters/filter/dateFilter.js +1 -1
- package/lib/core/components/shadcn/filters/filter/dateFilter.js.map +1 -1
- package/lib/core/components/shadcn/filters/filters.d.ts.map +1 -1
- package/lib/core/components/shadcn/filters/filters.js +1 -1
- package/lib/core/components/shadcn/filters/filters.js.map +1 -1
- package/lib/core/components/shadcn/index.d.ts +1 -0
- package/lib/core/components/shadcn/index.d.ts.map +1 -1
- package/lib/core/components/shadcn/index.js +1 -0
- package/lib/core/components/shadcn/index.js.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.d.ts.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.js +1 -3
- package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
- package/lib/core/components/shadcn/overflowTabs.d.ts +59 -0
- package/lib/core/components/shadcn/overflowTabs.d.ts.map +1 -0
- package/lib/core/components/shadcn/overflowTabs.js +173 -0
- package/lib/core/components/shadcn/overflowTabs.js.map +1 -0
- package/lib/core/components/shadcn/selectBox.js +2 -2
- package/lib/core/components/shadcn/selectBox.js.map +1 -1
- package/lib/core/components/shadcn/theme/ThemeProvider.d.ts +3 -1
- package/lib/core/components/shadcn/theme/ThemeProvider.d.ts.map +1 -1
- package/lib/core/components/shadcn/theme/ThemeProvider.js +8 -9
- package/lib/core/components/shadcn/theme/ThemeProvider.js.map +1 -1
- package/lib/core/utils/dayjs.d.ts +12 -0
- package/lib/core/utils/dayjs.d.ts.map +1 -0
- package/lib/core/utils/dayjs.js +16 -0
- package/lib/core/utils/dayjs.js.map +1 -0
- package/lib/env/index.d.ts +17 -0
- package/lib/env/index.d.ts.map +1 -1
- package/lib/env/index.js +18 -1
- package/lib/env/index.js.map +1 -1
- package/lib/features/agent/PayloadBuilder.d.ts +1 -0
- package/lib/features/agent/PayloadBuilder.d.ts.map +1 -1
- package/lib/features/agent/PayloadBuilder.js +22 -5
- package/lib/features/agent/PayloadBuilder.js.map +1 -1
- package/lib/features/agent/chat/AgentRightPanel.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentRightPanel.js +3 -135
- package/lib/features/agent/chat/AgentRightPanel.js.map +1 -1
- package/lib/features/agent/chat/ArtifactsTab.d.ts.map +1 -1
- package/lib/features/agent/chat/ArtifactsTab.js +1 -1
- package/lib/features/agent/chat/ArtifactsTab.js.map +1 -1
- package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
- package/lib/features/agent/chat/AskUserWidget.js +19 -4
- package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.d.ts +6 -0
- package/lib/features/agent/chat/ModernAgentConversation.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js +99 -29
- package/lib/features/agent/chat/ModernAgentConversation.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js +10 -9
- package/lib/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +5 -8
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js +45 -4
- package/lib/features/agent/chat/ModernAgentOutput/AttachmentPreview.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/BatchProgressPanel.js +1 -1
- 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 +3 -3
- package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/StreamingMessage.d.ts.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/ToolCallGroup.js +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/ToolCallGroup.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js +9 -121
- package/lib/features/agent/chat/ModernAgentOutput/WorkstreamTabs.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts +6 -0
- package/lib/features/agent/chat/ModernAgentOutput/utils.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/utils.js +19 -11
- package/lib/features/agent/chat/ModernAgentOutput/utils.js.map +1 -1
- package/lib/features/agent/chat/VegaLiteChart.d.ts.map +1 -1
- package/lib/features/agent/chat/VegaLiteChart.js +11 -3
- package/lib/features/agent/chat/VegaLiteChart.js.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.d.ts.map +1 -1
- package/lib/features/agent/chat/hooks/useAgentStream.js +3 -0
- package/lib/features/agent/chat/hooks/useAgentStream.js.map +1 -1
- package/lib/features/document-viewer/UniversalDocumentViewer.d.ts.map +1 -1
- package/lib/features/document-viewer/UniversalDocumentViewer.js +1 -1
- package/lib/features/document-viewer/UniversalDocumentViewer.js.map +1 -1
- package/lib/features/facets/AgentRunnerFacetsNav.d.ts +14 -2
- package/lib/features/facets/AgentRunnerFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/AgentRunnerFacetsNav.js +20 -2
- package/lib/features/facets/AgentRunnerFacetsNav.js.map +1 -1
- package/lib/features/facets/CollectionsFacetsNav.d.ts +3 -3
- package/lib/features/facets/CollectionsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/CollectionsFacetsNav.js +6 -1
- package/lib/features/facets/CollectionsFacetsNav.js.map +1 -1
- package/lib/features/facets/DocumentsFacetsNav.d.ts +3 -3
- package/lib/features/facets/DocumentsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/DocumentsFacetsNav.js +20 -8
- package/lib/features/facets/DocumentsFacetsNav.js.map +1 -1
- package/lib/features/facets/InteractionsFacetsNav.d.ts +3 -3
- package/lib/features/facets/InteractionsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/InteractionsFacetsNav.js +11 -1
- package/lib/features/facets/InteractionsFacetsNav.js.map +1 -1
- package/lib/features/facets/PromptsFacetsNav.d.ts +3 -3
- package/lib/features/facets/PromptsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/PromptsFacetsNav.js +6 -1
- package/lib/features/facets/PromptsFacetsNav.js.map +1 -1
- package/lib/features/facets/RunsFacetsNav.d.ts +4 -14
- package/lib/features/facets/RunsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/RunsFacetsNav.js +26 -15
- package/lib/features/facets/RunsFacetsNav.js.map +1 -1
- package/lib/features/facets/WorkflowExecutionsFacetsNav.d.ts +4 -3
- package/lib/features/facets/WorkflowExecutionsFacetsNav.d.ts.map +1 -1
- package/lib/features/facets/WorkflowExecutionsFacetsNav.js +18 -10
- package/lib/features/facets/WorkflowExecutionsFacetsNav.js.map +1 -1
- package/lib/features/facets/index.d.ts +1 -1
- package/lib/features/facets/index.d.ts.map +1 -1
- package/lib/features/facets/index.js.map +1 -1
- package/lib/features/facets/utils/SearchInterface.d.ts +4 -3
- package/lib/features/facets/utils/SearchInterface.d.ts.map +1 -1
- package/lib/features/facets/utils/SearchInterface.js +4 -0
- package/lib/features/facets/utils/SearchInterface.js.map +1 -1
- package/lib/features/layout/GenericPageNavHeader.d.ts +8 -1
- package/lib/features/layout/GenericPageNavHeader.d.ts.map +1 -1
- package/lib/features/layout/GenericPageNavHeader.js +9 -1
- package/lib/features/layout/GenericPageNavHeader.js.map +1 -1
- package/lib/features/magic-pdf/DownloadPopover.d.ts +3 -2
- package/lib/features/magic-pdf/DownloadPopover.d.ts.map +1 -1
- package/lib/features/magic-pdf/DownloadPopover.js.map +1 -1
- package/lib/features/magic-pdf/GroundedExtractionView.d.ts.map +1 -1
- package/lib/features/magic-pdf/GroundedExtractionView.js +51 -64
- package/lib/features/magic-pdf/GroundedExtractionView.js.map +1 -1
- package/lib/features/oauth/McpConnectionsButton.d.ts +1 -1
- package/lib/features/oauth/McpConnectionsButton.d.ts.map +1 -1
- package/lib/features/oauth/McpConnectionsButton.js +2 -2
- package/lib/features/oauth/McpConnectionsButton.js.map +1 -1
- package/lib/features/oauth/McpConnectionsDialog.d.ts +1 -1
- package/lib/features/oauth/McpConnectionsDialog.js +2 -2
- package/lib/features/oauth/McpConnectionsDialog.js.map +1 -1
- package/lib/features/oauth/useMcpConnections.d.ts +4 -5
- package/lib/features/oauth/useMcpConnections.d.ts.map +1 -1
- package/lib/features/oauth/useMcpConnections.js +20 -4
- package/lib/features/oauth/useMcpConnections.js.map +1 -1
- package/lib/features/pdf-viewer/PdfPageRenderer.d.ts.map +1 -1
- package/lib/features/pdf-viewer/PdfPageRenderer.js +9 -11
- package/lib/features/pdf-viewer/PdfPageRenderer.js.map +1 -1
- package/lib/features/pdf-viewer/lazyReactPdf.d.ts +10 -0
- package/lib/features/pdf-viewer/lazyReactPdf.d.ts.map +1 -0
- package/lib/features/pdf-viewer/lazyReactPdf.js +25 -0
- package/lib/features/pdf-viewer/lazyReactPdf.js.map +1 -0
- package/lib/features/store/collections/CollectionsTable.d.ts.map +1 -1
- package/lib/features/store/collections/CollectionsTable.js +1 -3
- package/lib/features/store/collections/CollectionsTable.js.map +1 -1
- package/lib/features/store/collections/EditCollectionView.js +1 -1
- package/lib/features/store/collections/EditCollectionView.js.map +1 -1
- package/lib/features/store/objects/ExportPropertiesModal.d.ts +3 -1
- package/lib/features/store/objects/ExportPropertiesModal.d.ts.map +1 -1
- package/lib/features/store/objects/ExportPropertiesModal.js +5 -5
- package/lib/features/store/objects/ExportPropertiesModal.js.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.d.ts.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.js +4 -10
- package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/features/store/objects/components/TextEditorPanel.d.ts.map +1 -1
- package/lib/features/store/objects/components/TextEditorPanel.js +8 -3
- package/lib/features/store/objects/components/TextEditorPanel.js.map +1 -1
- package/lib/features/store/objects/layout/renderers.d.ts.map +1 -1
- package/lib/features/store/objects/layout/renderers.js +1 -5
- package/lib/features/store/objects/layout/renderers.js.map +1 -1
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts +44 -62
- package/lib/features/store/objects/search/DocumentSearchContext.d.ts.map +1 -1
- package/lib/features/store/objects/search/DocumentSearchContext.js +47 -2
- package/lib/features/store/objects/search/DocumentSearchContext.js.map +1 -1
- package/lib/features/store/objects/selection/actions/DeleteObjectsAction.d.ts.map +1 -1
- package/lib/features/store/objects/selection/actions/DeleteObjectsAction.js +5 -0
- package/lib/features/store/objects/selection/actions/DeleteObjectsAction.js.map +1 -1
- package/lib/features/store/objects/upload/DocumentUploadModal.d.ts +6 -1
- package/lib/features/store/objects/upload/DocumentUploadModal.d.ts.map +1 -1
- package/lib/features/store/objects/upload/DocumentUploadModal.js +4 -3
- package/lib/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
- package/lib/features/store/objects/upload/useSmartFileUploadProcessing.d.ts.map +1 -1
- package/lib/features/store/objects/upload/useSmartFileUploadProcessing.js +2 -2
- package/lib/features/store/objects/upload/useSmartFileUploadProcessing.js.map +1 -1
- package/lib/features/store/types/ContentObjectTypesTable.d.ts.map +1 -1
- package/lib/features/store/types/ContentObjectTypesTable.js +1 -3
- package/lib/features/store/types/ContentObjectTypesTable.js.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.js +12 -2
- package/lib/features/store/types/IntakePolicyEditor.js.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -1
- package/lib/features/store/types/IntakePolicyForm.js +15 -15
- package/lib/features/store/types/IntakePolicyForm.js.map +1 -1
- package/lib/features/store/types/ObjectSchemaEditor.d.ts.map +1 -1
- package/lib/features/store/types/ObjectSchemaEditor.js +6 -2
- package/lib/features/store/types/ObjectSchemaEditor.js.map +1 -1
- package/lib/features/store/types/TableLayoutEditor.d.ts.map +1 -1
- package/lib/features/store/types/TableLayoutEditor.js +2 -0
- package/lib/features/store/types/TableLayoutEditor.js.map +1 -1
- package/lib/features/store/types/TypeRegistry.d.ts +282 -0
- package/lib/features/store/types/TypeRegistry.d.ts.map +1 -1
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts +281 -0
- package/lib/features/store/types/search/ObjectTypeSearchContext.d.ts.map +1 -1
- package/lib/features/user/UserInfo.d.ts.map +1 -1
- package/lib/features/user/UserInfo.js +2 -4
- package/lib/features/user/UserInfo.js.map +1 -1
- package/lib/features/views/ViewActions.d.ts +32 -0
- package/lib/features/views/ViewActions.d.ts.map +1 -0
- package/lib/features/views/ViewActions.js +186 -0
- package/lib/features/views/ViewActions.js.map +1 -0
- package/lib/features/views/ViewDropTarget.d.ts +15 -0
- package/lib/features/views/ViewDropTarget.d.ts.map +1 -0
- package/lib/features/views/ViewDropTarget.js +79 -0
- package/lib/features/views/ViewDropTarget.js.map +1 -0
- package/lib/features/views/ViewExperience.d.ts +3 -2
- package/lib/features/views/ViewExperience.d.ts.map +1 -1
- package/lib/features/views/ViewExperience.js +103 -12
- package/lib/features/views/ViewExperience.js.map +1 -1
- package/lib/features/views/ViewNavigation.d.ts +1 -1
- package/lib/features/views/ViewNavigation.d.ts.map +1 -1
- package/lib/features/views/ViewNavigation.js +14 -5
- package/lib/features/views/ViewNavigation.js.map +1 -1
- package/lib/features/views/ViewResults.d.ts +1 -1
- package/lib/features/views/ViewResults.d.ts.map +1 -1
- package/lib/features/views/ViewResults.js +124 -34
- package/lib/features/views/ViewResults.js.map +1 -1
- package/lib/features/views/index.d.ts +1 -0
- package/lib/features/views/index.d.ts.map +1 -1
- package/lib/features/views/index.js +1 -0
- package/lib/features/views/index.js.map +1 -1
- package/lib/features/views/types.d.ts +46 -1
- package/lib/features/views/types.d.ts.map +1 -1
- package/lib/features/views/viewState.d.ts.map +1 -1
- package/lib/features/views/viewState.js +34 -0
- package/lib/features/views/viewState.js.map +1 -1
- package/lib/i18n/LanguageProvider.d.ts +3 -1
- package/lib/i18n/LanguageProvider.d.ts.map +1 -1
- package/lib/i18n/LanguageProvider.js +9 -7
- package/lib/i18n/LanguageProvider.js.map +1 -1
- package/lib/i18n/instance.d.ts +2 -0
- package/lib/i18n/instance.d.ts.map +1 -1
- package/lib/i18n/instance.js +45 -26
- package/lib/i18n/instance.js.map +1 -1
- package/lib/i18n/locales/ar.json +296 -15
- package/lib/i18n/locales/de.json +294 -13
- package/lib/i18n/locales/en.json +65 -4
- package/lib/i18n/locales/es.json +295 -14
- package/lib/i18n/locales/fr.json +294 -13
- package/lib/i18n/locales/it.json +294 -13
- package/lib/i18n/locales/ja.json +292 -10
- package/lib/i18n/locales/ko.json +292 -10
- package/lib/i18n/locales/pt.json +294 -13
- package/lib/i18n/locales/ru.json +291 -10
- package/lib/i18n/locales/tr.json +291 -10
- package/lib/i18n/locales/zh-TW.json +292 -10
- package/lib/i18n/locales/zh.json +292 -10
- package/lib/router/RouteComponent.d.ts +8 -0
- package/lib/router/RouteComponent.d.ts.map +1 -1
- package/lib/router/RouteComponent.js +41 -9
- package/lib/router/RouteComponent.js.map +1 -1
- package/lib/session/UserSessionProvider.d.ts.map +1 -1
- package/lib/session/UserSessionProvider.js +20 -29
- package/lib/session/UserSessionProvider.js.map +1 -1
- package/lib/session/auth/composable.d.ts.map +1 -1
- package/lib/session/auth/composable.js +25 -19
- package/lib/session/auth/composable.js.map +1 -1
- package/lib/session/auth/domainRouting.d.ts +11 -0
- package/lib/session/auth/domainRouting.d.ts.map +1 -1
- package/lib/session/auth/domainRouting.js +13 -0
- package/lib/session/auth/domainRouting.js.map +1 -1
- package/lib/session/auth/firebase.js +1 -1
- package/lib/session/auth/firebase.js.map +1 -1
- package/lib/session/useUXTracking.d.ts.map +1 -1
- package/lib/session/useUXTracking.js +6 -1
- package/lib/session/useUXTracking.js.map +1 -1
- package/lib/shell/VertesiaShell.d.ts.map +1 -1
- package/lib/shell/VertesiaShell.js +2 -1
- package/lib/shell/VertesiaShell.js.map +1 -1
- package/lib/shell/apps/AppInstallationProvider.d.ts +4 -2
- package/lib/shell/apps/AppInstallationProvider.d.ts.map +1 -1
- package/lib/shell/apps/IframeAppContextSync.d.ts +3 -0
- package/lib/shell/apps/IframeAppContextSync.d.ts.map +1 -0
- package/lib/shell/apps/IframeAppContextSync.js +95 -0
- package/lib/shell/apps/IframeAppContextSync.js.map +1 -0
- package/lib/shell/apps/iframe-auth.d.ts +55 -0
- package/lib/shell/apps/iframe-auth.d.ts.map +1 -0
- package/lib/shell/apps/iframe-auth.js +154 -0
- package/lib/shell/apps/iframe-auth.js.map +1 -0
- package/lib/shell/apps/index.d.ts +2 -0
- package/lib/shell/apps/index.d.ts.map +1 -1
- package/lib/shell/apps/index.js +2 -0
- package/lib/shell/apps/index.js.map +1 -1
- package/lib/vertesia-ui-core.js +199 -4
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-env.js +1 -1
- package/lib/vertesia-ui-env.js.map +1 -1
- package/lib/vertesia-ui-features.js +975 -35
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.BJBGsq-8.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.BJBGsq-8.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.BY5YG5cX.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.BY5YG5cX.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.Bd5_1BXO.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.Bd5_1BXO.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.Bvwej2HH.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.Bvwej2HH.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.CMT3f4gf.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.CMT3f4gf.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.D56DNPJW.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.D56DNPJW.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.DDzKLNx6.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.DDzKLNx6.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.D_Am1LpF.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.D_Am1LpF.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.DrZizgGV.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.DrZizgGV.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.DwHsq86z.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.DwHsq86z.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.PLpo0Bbz.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.PLpo0Bbz.chunk.js.map +1 -0
- package/lib/vertesia-ui-i18n.js +2 -38
- package/lib/vertesia-ui-i18n.js.map +1 -1
- package/lib/vertesia-ui-i18n.xVbXALqz.chunk.js +5 -0
- package/lib/vertesia-ui-i18n.xVbXALqz.chunk.js.map +1 -0
- package/lib/vertesia-ui-layout.js +80 -1
- package/lib/vertesia-ui-layout.js.map +1 -1
- package/lib/vertesia-ui-rich-text.js +278 -4
- 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 +118 -1
- package/lib/vertesia-ui-shell.js.map +1 -1
- package/lib/vertesia-ui-widgets.js +336 -20
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/lib/widgets/markdown/MarkdownRenderer.d.ts.map +1 -1
- package/lib/widgets/markdown/MarkdownRenderer.js +43 -2
- package/lib/widgets/markdown/MarkdownRenderer.js.map +1 -1
- package/lib/widgets/markdown/MermaidDiagram.d.ts.map +1 -1
- package/lib/widgets/markdown/MermaidDiagram.js +35 -22
- package/lib/widgets/markdown/MermaidDiagram.js.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.js +14 -10
- package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
- package/lib/widgets/xml-viewer/hooks/useCollapsible.d.ts +1 -1
- package/package.json +24 -29
- package/src/core/components/FormItem.tsx +2 -5
- package/src/core/components/InfoTip.test.tsx +33 -0
- package/src/core/components/InfoTip.tsx +32 -0
- package/src/core/components/index.ts +1 -0
- package/src/core/components/shadcn/Panel.tsx +3 -7
- package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +1 -1
- package/src/core/components/shadcn/filters/filter/dateFilter.tsx +1 -1
- package/src/core/components/shadcn/filters/filters.tsx +1 -1
- package/src/core/components/shadcn/index.ts +1 -0
- package/src/core/components/shadcn/modal/dialog.test.tsx +35 -0
- package/src/core/components/shadcn/modal/dialog.tsx +0 -4
- package/src/core/components/shadcn/overflowTabs.tsx +320 -0
- package/src/core/components/shadcn/selectBox.tsx +2 -2
- package/src/core/components/shadcn/theme/ThemeProvider.tsx +10 -9
- package/src/core/utils/dayjs.ts +17 -0
- package/src/css/base.css +78 -0
- package/src/env/index.test.ts +94 -0
- package/src/env/index.ts +36 -1
- package/src/features/agent/PayloadBuilder.test.ts +68 -0
- package/src/features/agent/PayloadBuilder.tsx +28 -4
- package/src/features/agent/chat/AgentRightPanel.tsx +2 -252
- package/src/features/agent/chat/ArtifactsTab.tsx +1 -0
- package/src/features/agent/chat/AskUserWidget.test.tsx +20 -1
- package/src/features/agent/chat/AskUserWidget.tsx +22 -6
- package/src/features/agent/chat/ModernAgentConversation.test.tsx +160 -0
- package/src/features/agent/chat/ModernAgentConversation.tsx +111 -31
- package/src/features/agent/chat/ModernAgentOutput/ActiveWorkstreamsSummary.tsx +86 -67
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +90 -7
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +4 -6
- package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.test.ts +103 -1
- package/src/features/agent/chat/ModernAgentOutput/AttachmentPreview.tsx +50 -4
- package/src/features/agent/chat/ModernAgentOutput/BatchProgressPanel.tsx +1 -1
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +18 -1
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +1 -1
- package/src/features/agent/chat/ModernAgentOutput/StreamingMessage.tsx +1 -1
- package/src/features/agent/chat/ModernAgentOutput/ToolCallGroup.tsx +1 -1
- package/src/features/agent/chat/ModernAgentOutput/WorkstreamTabs.tsx +37 -167
- package/src/features/agent/chat/ModernAgentOutput/utils.test.ts +94 -0
- package/src/features/agent/chat/ModernAgentOutput/utils.ts +19 -10
- package/src/features/agent/chat/VegaLiteChart.tsx +32 -14
- package/src/features/agent/chat/hooks/useAgentStream.test.tsx +18 -0
- package/src/features/agent/chat/hooks/useAgentStream.ts +3 -0
- package/src/features/document-viewer/UniversalDocumentViewer.tsx +1 -1
- package/src/features/facets/AgentRunnerFacetsNav.tsx +44 -4
- package/src/features/facets/CollectionsFacetsNav.tsx +15 -4
- package/src/features/facets/DocumentsFacetsNav.tsx +25 -8
- package/src/features/facets/FacetQueryHandlers.test.ts +84 -0
- package/src/features/facets/InteractionsFacetsNav.tsx +20 -4
- package/src/features/facets/PromptsFacetsNav.tsx +15 -4
- package/src/features/facets/RunsFacetsNav.test.ts +59 -0
- package/src/features/facets/RunsFacetsNav.tsx +40 -30
- package/src/features/facets/WorkflowExecutionsFacetsNav.test.ts +57 -0
- package/src/features/facets/WorkflowExecutionsFacetsNav.tsx +36 -16
- package/src/features/facets/index.ts +1 -0
- package/src/features/facets/utils/SearchInterface.tsx +12 -3
- package/src/features/layout/GenericPageNavHeader.tsx +16 -0
- package/src/features/magic-pdf/DownloadPopover.tsx +1 -2
- package/src/features/magic-pdf/GroundedExtractionView.test.tsx +7 -1
- package/src/features/magic-pdf/GroundedExtractionView.tsx +162 -242
- package/src/features/oauth/McpConnectionsButton.test.tsx +18 -1
- package/src/features/oauth/McpConnectionsButton.tsx +6 -2
- package/src/features/oauth/McpConnectionsDialog.tsx +3 -3
- package/src/features/oauth/useMcpConnections.test.ts +1 -0
- package/src/features/oauth/useMcpConnections.ts +24 -7
- package/src/features/pdf-viewer/PdfPageRenderer.tsx +76 -71
- package/src/features/pdf-viewer/lazyReactPdf.ts +33 -0
- package/src/features/store/collections/CollectionsTable.tsx +1 -4
- package/src/features/store/collections/EditCollectionView.tsx +1 -1
- package/src/features/store/objects/ExportPropertiesModal.tsx +25 -16
- package/src/features/store/objects/components/ContentOverview.tsx +2 -28
- package/src/features/store/objects/components/TextEditorPanel.tsx +13 -3
- package/src/features/store/objects/layout/renderers.tsx +1 -6
- package/src/features/store/objects/search/DocumentSearchContext.test.ts +45 -0
- package/src/features/store/objects/search/DocumentSearchContext.ts +54 -4
- package/src/features/store/objects/selection/actions/DeleteObjectsAction.tsx +5 -0
- package/src/features/store/objects/upload/DocumentUploadModal.tsx +10 -3
- package/src/features/store/objects/upload/useSmartFileUploadProcessing.ts +15 -6
- package/src/features/store/types/ContentObjectTypesTable.tsx +1 -4
- package/src/features/store/types/IntakePolicyEditor.tsx +14 -5
- package/src/features/store/types/IntakePolicyForm.tsx +120 -20
- package/src/features/store/types/ObjectSchemaEditor.tsx +6 -2
- package/src/features/store/types/TableLayoutEditor.tsx +2 -0
- package/src/features/user/UserInfo.test.tsx +10 -0
- package/src/features/user/UserInfo.tsx +2 -7
- package/src/features/views/ViewActions.test.tsx +80 -0
- package/src/features/views/ViewActions.tsx +352 -0
- package/src/features/views/ViewDropTarget.test.tsx +150 -0
- package/src/features/views/ViewDropTarget.tsx +140 -0
- package/src/features/views/ViewExperience.test.tsx +72 -0
- package/src/features/views/ViewExperience.tsx +189 -22
- package/src/features/views/ViewMedia.test.tsx +180 -0
- package/src/features/views/ViewNavigation.test.tsx +42 -0
- package/src/features/views/ViewNavigation.tsx +43 -5
- package/src/features/views/ViewResults.tsx +243 -26
- package/src/features/views/index.ts +1 -0
- package/src/features/views/types.ts +50 -0
- package/src/features/views/viewState.test.ts +7 -1
- package/src/features/views/viewState.ts +32 -0
- package/src/i18n/LanguageProvider.tsx +15 -8
- package/src/i18n/instance.test.ts +30 -0
- package/src/i18n/instance.ts +67 -40
- package/src/i18n/locales/ar.json +1192 -911
- package/src/i18n/locales/de.json +1148 -867
- package/src/i18n/locales/en.json +65 -4
- package/src/i18n/locales/es.json +1159 -878
- package/src/i18n/locales/fr.json +1159 -878
- package/src/i18n/locales/it.json +1159 -878
- package/src/i18n/locales/ja.json +1148 -866
- package/src/i18n/locales/ko.json +1148 -866
- package/src/i18n/locales/pt.json +1159 -878
- package/src/i18n/locales/ru.json +1170 -889
- package/src/i18n/locales/tr.json +1148 -867
- package/src/i18n/locales/zh-TW.json +1148 -866
- package/src/i18n/locales/zh.json +1148 -866
- package/src/i18n/rtl.test.ts +16 -7
- package/src/rich-text/VertesiaRichTextEditor.test.tsx +33 -1
- package/src/router/RouteComponent.test.tsx +139 -0
- package/src/router/RouteComponent.tsx +54 -9
- package/src/session/UserSessionProvider.tsx +20 -31
- package/src/session/auth/composable.scope.test.ts +1 -1
- package/src/session/auth/composable.test.ts +61 -1
- package/src/session/auth/composable.ts +29 -23
- package/src/session/auth/domainRouting.test.ts +24 -1
- package/src/session/auth/domainRouting.ts +29 -0
- package/src/session/auth/firebase.ts +1 -1
- package/src/session/useUXTracking.tsx +6 -1
- package/src/shell/VertesiaShell.tsx +2 -0
- package/src/shell/apps/IframeAppContextSync.test.tsx +196 -0
- package/src/shell/apps/IframeAppContextSync.tsx +101 -0
- package/src/shell/apps/iframe-auth.test.ts +118 -0
- package/src/shell/apps/iframe-auth.ts +193 -0
- package/src/shell/apps/index.ts +2 -0
- package/src/widgets/markdown/ArtifactEditingSurface.test.tsx +12 -3
- package/src/widgets/markdown/MarkdownRenderer.tsx +50 -2
- package/src/widgets/markdown/MermaidDiagram.tsx +38 -22
- package/src/widgets/monacoEditor/MonacoEditor.tsx +27 -20
- package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts +0 -25
- package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts.map +0 -1
- package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js +0 -42
- package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js.map +0 -1
- package/src/features/magic-pdf/GroundedExtractionAssistantPanel.tsx +0 -86
|
@@ -6,12 +6,13 @@ describe('View URL state', () => {
|
|
|
6
6
|
it('parses repeated key terms and navigation values', () => {
|
|
7
7
|
expect(
|
|
8
8
|
parseViewState(
|
|
9
|
-
'?q=find+contracts&t.party=Acme&t.party=Globex&n.brand=Vertesia&display=cards&sort=updated&offset=20',
|
|
9
|
+
'?q=find+contracts&t.party=Acme&t.party=Globex&n.brand=Vertesia&nq.collections=legal&display=cards&sort=updated&offset=20',
|
|
10
10
|
),
|
|
11
11
|
).toEqual({
|
|
12
12
|
query: 'find contracts',
|
|
13
13
|
key_terms: { party: ['Acme', 'Globex'] },
|
|
14
14
|
navigation: { brand: ['Vertesia'] },
|
|
15
|
+
navigation_queries: { collections: 'legal' },
|
|
15
16
|
display: 'cards',
|
|
16
17
|
sort: 'updated',
|
|
17
18
|
offset: 20,
|
|
@@ -29,6 +30,7 @@ describe('View URL state', () => {
|
|
|
29
30
|
brand: ['Contoso', 'Vertesia'],
|
|
30
31
|
geography: [hierarchyPath],
|
|
31
32
|
},
|
|
33
|
+
navigation_queries: { collections: ' legal contracts ' },
|
|
32
34
|
display: 'table',
|
|
33
35
|
},
|
|
34
36
|
'?account=account-1&project=project-1&q=stale&n.brand=stale',
|
|
@@ -44,6 +46,7 @@ describe('View URL state', () => {
|
|
|
44
46
|
geography: [hierarchyPath],
|
|
45
47
|
location: ['/Customers/Acme'],
|
|
46
48
|
},
|
|
49
|
+
navigation_queries: { collections: 'legal contracts' },
|
|
47
50
|
display: 'table',
|
|
48
51
|
});
|
|
49
52
|
});
|
|
@@ -59,6 +62,7 @@ describe('View URL state', () => {
|
|
|
59
62
|
query: ' contracts ',
|
|
60
63
|
key_terms: { party: ['Acme'], retired: ['old'] },
|
|
61
64
|
navigation: { brand: ['stale'], retired: ['old'] },
|
|
65
|
+
navigation_queries: { collections: 'legal', retired: 'old' },
|
|
62
66
|
display: 'retired',
|
|
63
67
|
sort: 'retired',
|
|
64
68
|
offset: 20,
|
|
@@ -77,6 +81,7 @@ describe('View URL state', () => {
|
|
|
77
81
|
total: 0,
|
|
78
82
|
navigation: {
|
|
79
83
|
brand: { id: 'brand', selected: ['Acme'], nodes: [] },
|
|
84
|
+
collections: { id: 'collections', selected: [], nodes: [], query: 'legal' },
|
|
80
85
|
},
|
|
81
86
|
took: 5,
|
|
82
87
|
},
|
|
@@ -85,6 +90,7 @@ describe('View URL state', () => {
|
|
|
85
90
|
query: 'contracts',
|
|
86
91
|
key_terms: { party: ['Acme'] },
|
|
87
92
|
navigation: { brand: ['Acme'] },
|
|
93
|
+
navigation_queries: { collections: 'legal' },
|
|
88
94
|
display: 'table',
|
|
89
95
|
sort: 'updated',
|
|
90
96
|
offset: 20,
|
|
@@ -6,6 +6,7 @@ const SORT_PARAM = 'sort';
|
|
|
6
6
|
const OFFSET_PARAM = 'offset';
|
|
7
7
|
const KEY_TERM_PREFIX = 't.';
|
|
8
8
|
const NAVIGATION_PREFIX = 'n.';
|
|
9
|
+
const NAVIGATION_QUERY_PREFIX = 'nq.';
|
|
9
10
|
|
|
10
11
|
function nonNegativeInteger(value: string | null): number | undefined {
|
|
11
12
|
if (value === null || value.trim() === '') return undefined;
|
|
@@ -23,6 +24,16 @@ function collectPrefixedValues(params: URLSearchParams, prefix: string): Record<
|
|
|
23
24
|
return Object.keys(values).length > 0 ? values : undefined;
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
function collectPrefixedStrings(params: URLSearchParams, prefix: string): Record<string, string> | undefined {
|
|
28
|
+
const values: Record<string, string> = {};
|
|
29
|
+
for (const key of new Set(params.keys())) {
|
|
30
|
+
if (!key.startsWith(prefix) || key.length === prefix.length) continue;
|
|
31
|
+
const value = params.get(key)?.trim();
|
|
32
|
+
if (value) values[key.slice(prefix.length)] = value;
|
|
33
|
+
}
|
|
34
|
+
return Object.keys(values).length > 0 ? values : undefined;
|
|
35
|
+
}
|
|
36
|
+
|
|
26
37
|
/** Parse the stable, shareable URL representation of a View execution request. */
|
|
27
38
|
export function parseViewState(search: string): ExecuteViewRequest {
|
|
28
39
|
const params = new URLSearchParams(search.startsWith('?') ? search.slice(1) : search);
|
|
@@ -32,11 +43,13 @@ export function parseViewState(search: string): ExecuteViewRequest {
|
|
|
32
43
|
const offset = nonNegativeInteger(params.get(OFFSET_PARAM));
|
|
33
44
|
const key_terms = collectPrefixedValues(params, KEY_TERM_PREFIX);
|
|
34
45
|
const navigation = collectPrefixedValues(params, NAVIGATION_PREFIX);
|
|
46
|
+
const navigation_queries = collectPrefixedStrings(params, NAVIGATION_QUERY_PREFIX);
|
|
35
47
|
|
|
36
48
|
return {
|
|
37
49
|
...(query ? { query } : {}),
|
|
38
50
|
...(key_terms ? { key_terms } : {}),
|
|
39
51
|
...(navigation ? { navigation } : {}),
|
|
52
|
+
...(navigation_queries ? { navigation_queries } : {}),
|
|
40
53
|
...(display ? { display } : {}),
|
|
41
54
|
...(sort ? { sort } : {}),
|
|
42
55
|
...(offset ? { offset } : {}),
|
|
@@ -51,6 +64,7 @@ function deleteManagedParams(params: URLSearchParams): void {
|
|
|
51
64
|
key === SORT_PARAM ||
|
|
52
65
|
key === OFFSET_PARAM ||
|
|
53
66
|
key.startsWith(KEY_TERM_PREFIX) ||
|
|
67
|
+
key.startsWith(NAVIGATION_QUERY_PREFIX) ||
|
|
54
68
|
key.startsWith(NAVIGATION_PREFIX)
|
|
55
69
|
) {
|
|
56
70
|
params.delete(key);
|
|
@@ -67,6 +81,13 @@ function appendRecord(params: URLSearchParams, prefix: string, values: Record<st
|
|
|
67
81
|
}
|
|
68
82
|
}
|
|
69
83
|
|
|
84
|
+
function appendStringRecord(params: URLSearchParams, prefix: string, values: Record<string, string> | undefined): void {
|
|
85
|
+
if (!values) return;
|
|
86
|
+
for (const [key, value] of Object.entries(values).sort(([left], [right]) => left.localeCompare(right))) {
|
|
87
|
+
if (value.trim()) params.set(`${prefix}${key}`, value.trim());
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
70
91
|
/** Serialize View state while preserving unrelated host parameters such as account/project selection. */
|
|
71
92
|
export function serializeViewState(request: ExecuteViewRequest, currentSearch = ''): string {
|
|
72
93
|
const params = new URLSearchParams(currentSearch.startsWith('?') ? currentSearch.slice(1) : currentSearch);
|
|
@@ -78,6 +99,7 @@ export function serializeViewState(request: ExecuteViewRequest, currentSearch =
|
|
|
78
99
|
if (request.offset && request.offset > 0) params.set(OFFSET_PARAM, String(request.offset));
|
|
79
100
|
appendRecord(params, KEY_TERM_PREFIX, request.key_terms);
|
|
80
101
|
appendRecord(params, NAVIGATION_PREFIX, request.navigation);
|
|
102
|
+
appendStringRecord(params, NAVIGATION_QUERY_PREFIX, request.navigation_queries);
|
|
81
103
|
|
|
82
104
|
const value = params.toString();
|
|
83
105
|
return value ? `?${value}` : '';
|
|
@@ -92,6 +114,14 @@ function selectedRecord(result: ViewExecutionResult): Record<string, string[]> |
|
|
|
92
114
|
return Object.keys(selections).length > 0 ? selections : undefined;
|
|
93
115
|
}
|
|
94
116
|
|
|
117
|
+
function navigationQueryRecord(result: ViewExecutionResult): Record<string, string> | undefined {
|
|
118
|
+
const queries: Record<string, string> = {};
|
|
119
|
+
for (const [id, navigation] of Object.entries(result.navigation)) {
|
|
120
|
+
if (navigation.query) queries[id] = navigation.query;
|
|
121
|
+
}
|
|
122
|
+
return Object.keys(queries).length > 0 ? queries : undefined;
|
|
123
|
+
}
|
|
124
|
+
|
|
95
125
|
/** Remove stale configuration IDs and apply the display/sort selected by the authoritative runtime. */
|
|
96
126
|
export function canonicalizeViewState(request: ExecuteViewRequest, result: ViewExecutionResult): ExecuteViewRequest {
|
|
97
127
|
const keyTermIds = new Set(result.definition.search?.key_terms?.map((term) => term.id) ?? []);
|
|
@@ -101,11 +131,13 @@ export function canonicalizeViewState(request: ExecuteViewRequest, result: ViewE
|
|
|
101
131
|
)
|
|
102
132
|
: undefined;
|
|
103
133
|
const navigation = selectedRecord(result);
|
|
134
|
+
const navigation_queries = navigationQueryRecord(result);
|
|
104
135
|
|
|
105
136
|
return {
|
|
106
137
|
...(request.query?.trim() ? { query: request.query.trim() } : {}),
|
|
107
138
|
...(key_terms && Object.keys(key_terms).length > 0 ? { key_terms } : {}),
|
|
108
139
|
...(navigation ? { navigation } : {}),
|
|
140
|
+
...(navigation_queries ? { navigation_queries } : {}),
|
|
109
141
|
...(result.display ? { display: result.display } : {}),
|
|
110
142
|
...(result.sort ? { sort: result.sort } : {}),
|
|
111
143
|
...(request.offset && request.offset > 0 ? { offset: request.offset } : {}),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DirectionProvider } from '@radix-ui/react-direction';
|
|
2
|
-
import { createContext, useContext, useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';
|
|
3
3
|
import { isRTL, resolveLanguage, type SupportedLanguage } from './rtl.js';
|
|
4
4
|
|
|
5
5
|
type LanguageProviderProps = {
|
|
@@ -10,7 +10,7 @@ type LanguageProviderProps = {
|
|
|
10
10
|
|
|
11
11
|
type LanguageProviderState = {
|
|
12
12
|
language: SupportedLanguage;
|
|
13
|
-
setLanguage: (language: SupportedLanguage) => void;
|
|
13
|
+
setLanguage: (language: SupportedLanguage, options?: { persist?: boolean }) => void;
|
|
14
14
|
isRTL: boolean;
|
|
15
15
|
};
|
|
16
16
|
|
|
@@ -39,7 +39,9 @@ export function LanguageProvider({
|
|
|
39
39
|
storageKey = 'vertesia-ui-language',
|
|
40
40
|
...props
|
|
41
41
|
}: LanguageProviderProps) {
|
|
42
|
-
const [language,
|
|
42
|
+
const [language, setLanguageState] = useState<SupportedLanguage>(() =>
|
|
43
|
+
readInitialLanguage(storageKey, defaultLanguage),
|
|
44
|
+
);
|
|
43
45
|
|
|
44
46
|
const rtl = isRTL(language);
|
|
45
47
|
|
|
@@ -49,16 +51,21 @@ export function LanguageProvider({
|
|
|
49
51
|
root.dir = rtl ? 'rtl' : 'ltr';
|
|
50
52
|
}, [language, rtl]);
|
|
51
53
|
|
|
54
|
+
const setLanguage = useCallback(
|
|
55
|
+
(next: SupportedLanguage, options?: { persist?: boolean }) => {
|
|
56
|
+
if (options?.persist !== false) window.localStorage?.setItem(storageKey, next);
|
|
57
|
+
setLanguageState(next);
|
|
58
|
+
},
|
|
59
|
+
[storageKey],
|
|
60
|
+
);
|
|
61
|
+
|
|
52
62
|
const value = useMemo<LanguageProviderState>(
|
|
53
63
|
() => ({
|
|
54
64
|
language,
|
|
55
65
|
isRTL: rtl,
|
|
56
|
-
setLanguage
|
|
57
|
-
window.localStorage?.setItem(storageKey, next);
|
|
58
|
-
setLanguage(next);
|
|
59
|
-
},
|
|
66
|
+
setLanguage,
|
|
60
67
|
}),
|
|
61
|
-
[language, rtl,
|
|
68
|
+
[language, rtl, setLanguage],
|
|
62
69
|
);
|
|
63
70
|
|
|
64
71
|
return (
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { afterAll, describe, expect, it } from 'vitest';
|
|
2
|
+
import { i18nInstance } from './instance.js';
|
|
3
|
+
|
|
4
|
+
const KEY = 'abac_perms.collection.content_manager';
|
|
5
|
+
|
|
6
|
+
describe('i18n instance', () => {
|
|
7
|
+
afterAll(async () => {
|
|
8
|
+
await i18nInstance.changeLanguage('en');
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('serves the bundled English fallback', async () => {
|
|
12
|
+
await i18nInstance.changeLanguage('en');
|
|
13
|
+
expect(i18nInstance.t(KEY)).toBe('Collection Manager');
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it('loads a locale that is not bundled', async () => {
|
|
17
|
+
await i18nInstance.changeLanguage('fr');
|
|
18
|
+
expect(i18nInstance.t(KEY)).toBe('Gestionnaire de collection');
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('keeps a region-tagged locale distinct from its base language', async () => {
|
|
22
|
+
await i18nInstance.changeLanguage('zh-TW');
|
|
23
|
+
expect(i18nInstance.t(KEY)).not.toBe('Collection Manager');
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('falls back to English for an unsupported language', async () => {
|
|
27
|
+
await i18nInstance.changeLanguage('nl');
|
|
28
|
+
expect(i18nInstance.t(KEY)).toBe('Collection Manager');
|
|
29
|
+
});
|
|
30
|
+
});
|
package/src/i18n/instance.ts
CHANGED
|
@@ -1,50 +1,77 @@
|
|
|
1
|
-
import i18next, { type i18n } from 'i18next';
|
|
1
|
+
import i18next, { type BackendModule, type i18n, type ReadCallback } from 'i18next';
|
|
2
2
|
import { initReactI18next } from 'react-i18next';
|
|
3
|
-
import ar from './locales/ar.json';
|
|
4
|
-
import de from './locales/de.json';
|
|
5
3
|
import en from './locales/en.json';
|
|
6
|
-
import es from './locales/es.json';
|
|
7
|
-
import fr from './locales/fr.json';
|
|
8
|
-
import it from './locales/it.json';
|
|
9
|
-
import ja from './locales/ja.json';
|
|
10
|
-
import ko from './locales/ko.json';
|
|
11
|
-
import pt from './locales/pt.json';
|
|
12
|
-
import ru from './locales/ru.json';
|
|
13
|
-
import tr from './locales/tr.json';
|
|
14
|
-
import zh from './locales/zh.json';
|
|
15
|
-
import zhTW from './locales/zh-TW.json';
|
|
16
4
|
|
|
17
5
|
export const NAMESPACE = 'vertesia.ui';
|
|
18
6
|
|
|
19
|
-
|
|
20
|
-
const i18nInstance: i18n = i18next.createInstance();
|
|
7
|
+
type LocaleLoader = () => Promise<{ default: Record<string, unknown> }>;
|
|
21
8
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Every locale except the `en` fallback is fetched the first time it is selected. Bundling all
|
|
11
|
+
* thirteen costs ~1 MB of JSON, of which a given user reads at most one — and the fallback covers
|
|
12
|
+
* the gap while a translation is in flight.
|
|
13
|
+
*/
|
|
14
|
+
const LOCALE_LOADERS: Record<string, LocaleLoader> = {
|
|
15
|
+
ar: () => import('./locales/ar.json'),
|
|
16
|
+
de: () => import('./locales/de.json'),
|
|
17
|
+
es: () => import('./locales/es.json'),
|
|
18
|
+
fr: () => import('./locales/fr.json'),
|
|
19
|
+
it: () => import('./locales/it.json'),
|
|
20
|
+
ja: () => import('./locales/ja.json'),
|
|
21
|
+
ko: () => import('./locales/ko.json'),
|
|
22
|
+
pt: () => import('./locales/pt.json'),
|
|
23
|
+
ru: () => import('./locales/ru.json'),
|
|
24
|
+
tr: () => import('./locales/tr.json'),
|
|
25
|
+
zh: () => import('./locales/zh.json'),
|
|
26
|
+
'zh-TW': () => import('./locales/zh-TW.json'),
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/** Every locale this instance can serve: the bundled `en` fallback plus the lazily loaded ones. */
|
|
30
|
+
export const AVAILABLE_LOCALES: readonly string[] = ['en', ...Object.keys(LOCALE_LOADERS)];
|
|
31
|
+
|
|
32
|
+
const lazyLocaleBackend: BackendModule = {
|
|
33
|
+
type: 'backend',
|
|
34
|
+
init: () => {
|
|
35
|
+
// no configuration: the locale set is fixed at build time
|
|
44
36
|
},
|
|
45
|
-
|
|
46
|
-
|
|
37
|
+
read(language: string, _namespace: string, callback: ReadCallback) {
|
|
38
|
+
const load = LOCALE_LOADERS[language];
|
|
39
|
+
if (!load) {
|
|
40
|
+
// Unsupported language: report an empty bundle so i18next falls back to `en`
|
|
41
|
+
callback(null, {});
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
load().then(
|
|
45
|
+
(locale) => callback(null, locale.default),
|
|
46
|
+
(err: unknown) => callback(err instanceof Error ? err : new Error(String(err)), false),
|
|
47
|
+
);
|
|
47
48
|
},
|
|
48
|
-
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// Scoped instance — does NOT touch the global i18next singleton
|
|
52
|
+
const i18nInstance: i18n = i18next.createInstance();
|
|
53
|
+
|
|
54
|
+
void i18nInstance
|
|
55
|
+
.use(lazyLocaleBackend)
|
|
56
|
+
.use(initReactI18next)
|
|
57
|
+
.init({
|
|
58
|
+
// `en` stays bundled so the fallback — and the common case — needs no round trip
|
|
59
|
+
resources: {
|
|
60
|
+
en: { [NAMESPACE]: en },
|
|
61
|
+
},
|
|
62
|
+
// Required to consult the backend even though `resources` are supplied
|
|
63
|
+
partialBundledLanguages: true,
|
|
64
|
+
fallbackLng: 'en',
|
|
65
|
+
returnEmptyString: false,
|
|
66
|
+
ns: [NAMESPACE],
|
|
67
|
+
defaultNS: NAMESPACE,
|
|
68
|
+
interpolation: {
|
|
69
|
+
escapeValue: false, // React already escapes
|
|
70
|
+
},
|
|
71
|
+
react: {
|
|
72
|
+
// Render the `en` fallback while a locale loads rather than suspending the tree
|
|
73
|
+
useSuspense: false,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
49
76
|
|
|
50
77
|
export { i18nInstance };
|