@vertesia/ui 1.5.0-dev.20260717.131047Z → 1.5.0-dev.20260722.120446Z
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/SidePanel.js +1 -1
- package/lib/core/components/SidePanel.js.map +1 -1
- package/lib/core/components/shadcn/button.d.ts +10 -3
- package/lib/core/components/shadcn/button.d.ts.map +1 -1
- package/lib/core/components/shadcn/button.js +41 -9
- package/lib/core/components/shadcn/button.js.map +1 -1
- package/lib/core/components/shadcn/modal/dialog.js +1 -1
- package/lib/core/components/shadcn/modal/dialog.js.map +1 -1
- package/lib/core/components/shadcn/theme/ThemeSwitcher.js +1 -1
- package/lib/core/components/shadcn/theme/ThemeSwitcher.js.map +1 -1
- package/lib/features/agent/chat/AgentChatPlaybackControls.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentChatPlaybackControls.js +2 -2
- package/lib/features/agent/chat/AgentChatPlaybackControls.js.map +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.d.ts.map +1 -1
- package/lib/features/agent/chat/AgentRequestInputOverlay.js +2 -2
- package/lib/features/agent/chat/AgentRequestInputOverlay.js.map +1 -1
- package/lib/features/agent/chat/ArtifactsTab.d.ts.map +1 -1
- package/lib/features/agent/chat/ArtifactsTab.js +5 -2
- package/lib/features/agent/chat/ArtifactsTab.js.map +1 -1
- package/lib/features/agent/chat/ImageLightbox.d.ts.map +1 -1
- package/lib/features/agent/chat/ImageLightbox.js +1 -1
- package/lib/features/agent/chat/ImageLightbox.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentConversation.js +1 -1
- 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 +5 -5
- package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/Header.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/Header.js +4 -2
- package/lib/features/agent/chat/ModernAgentOutput/Header.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageInput.js +2 -2
- 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 +2 -1
- package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts +6 -0
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.d.ts.map +1 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js +15 -1
- package/lib/features/agent/chat/ModernAgentOutput/requestInputMessages.js.map +1 -1
- package/lib/features/environment/SelectEnvironment.d.ts +28 -0
- package/lib/features/environment/SelectEnvironment.d.ts.map +1 -0
- package/lib/features/environment/SelectEnvironment.js +97 -0
- package/lib/features/environment/SelectEnvironment.js.map +1 -0
- package/lib/features/environment/index.d.ts +2 -0
- package/lib/features/environment/index.d.ts.map +1 -0
- package/lib/features/environment/index.js +2 -0
- package/lib/features/environment/index.js.map +1 -0
- package/lib/features/index.d.ts +2 -0
- package/lib/features/index.d.ts.map +1 -1
- package/lib/features/index.js +2 -0
- package/lib/features/index.js.map +1 -1
- package/lib/features/magic-pdf/AnnotatedImageSlider.js +12 -12
- package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
- package/lib/features/magic-pdf/DownloadPopover.d.ts.map +1 -1
- package/lib/features/magic-pdf/DownloadPopover.js +3 -17
- package/lib/features/magic-pdf/DownloadPopover.js.map +1 -1
- package/lib/features/magic-pdf/ExtractedContentView.js +2 -6
- package/lib/features/magic-pdf/ExtractedContentView.js.map +1 -1
- package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts +25 -0
- package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.d.ts.map +1 -0
- package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js +42 -0
- package/lib/features/magic-pdf/GroundedExtractionAssistantPanel.js.map +1 -0
- package/lib/features/magic-pdf/GroundedExtractionView.d.ts +27 -0
- package/lib/features/magic-pdf/GroundedExtractionView.d.ts.map +1 -0
- package/lib/features/magic-pdf/GroundedExtractionView.js +377 -0
- package/lib/features/magic-pdf/GroundedExtractionView.js.map +1 -0
- package/lib/features/magic-pdf/MagicPdfProvider.d.ts +0 -2
- package/lib/features/magic-pdf/MagicPdfProvider.d.ts.map +1 -1
- package/lib/features/magic-pdf/MagicPdfProvider.js +15 -42
- package/lib/features/magic-pdf/MagicPdfProvider.js.map +1 -1
- package/lib/features/magic-pdf/MagicPdfView.d.ts.map +1 -1
- package/lib/features/magic-pdf/MagicPdfView.js +2 -19
- package/lib/features/magic-pdf/MagicPdfView.js.map +1 -1
- package/lib/features/magic-pdf/index.d.ts +1 -0
- package/lib/features/magic-pdf/index.d.ts.map +1 -1
- package/lib/features/magic-pdf/index.js +1 -0
- package/lib/features/magic-pdf/index.js.map +1 -1
- package/lib/features/magic-pdf/types.d.ts +1 -1
- package/lib/features/magic-pdf/types.d.ts.map +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.map +1 -1
- package/lib/features/oauth/McpConnectionsDialog.js +1 -1
- package/lib/features/oauth/McpConnectionsDialog.js.map +1 -1
- package/lib/features/oauth/RemoteMcpConnectionButton.d.ts.map +1 -1
- package/lib/features/oauth/RemoteMcpConnectionButton.js +1 -1
- package/lib/features/oauth/RemoteMcpConnectionButton.js.map +1 -1
- package/lib/features/pdf-viewer/PdfPageSlider.js +2 -2
- package/lib/features/pdf-viewer/PdfPageSlider.js.map +1 -1
- package/lib/features/pdf-viewer/SimplePdfViewer.d.ts.map +1 -1
- package/lib/features/pdf-viewer/SimplePdfViewer.js +3 -3
- package/lib/features/pdf-viewer/SimplePdfViewer.js.map +1 -1
- package/lib/features/permissions/UserPermissionsProvider.js +1 -1
- package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
- package/lib/features/store/objects/DocumentQuickFilter.d.ts.map +1 -1
- package/lib/features/store/objects/DocumentQuickFilter.js +5 -5
- package/lib/features/store/objects/DocumentQuickFilter.js.map +1 -1
- package/lib/features/store/objects/DocumentSearchResults.d.ts.map +1 -1
- package/lib/features/store/objects/DocumentSearchResults.js +2 -2
- package/lib/features/store/objects/DocumentSearchResults.js.map +1 -1
- package/lib/features/store/objects/components/ContentDispositionButton.d.ts.map +1 -1
- package/lib/features/store/objects/components/ContentDispositionButton.js +1 -1
- package/lib/features/store/objects/components/ContentDispositionButton.js.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.d.ts.map +1 -1
- package/lib/features/store/objects/components/ContentOverview.js +78 -21
- package/lib/features/store/objects/components/ContentOverview.js.map +1 -1
- package/lib/features/store/objects/components/DocumentIcon.js +1 -1
- package/lib/features/store/objects/components/VectorSearchWidget.js +1 -1
- package/lib/features/store/objects/components/VectorSearchWidget.js.map +1 -1
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts +1 -2
- package/lib/features/store/objects/components/useContentPanelHooks.d.ts.map +1 -1
- package/lib/features/store/objects/components/useContentPanelHooks.js +4 -8
- package/lib/features/store/objects/components/useContentPanelHooks.js.map +1 -1
- package/lib/features/store/objects/layout/renderers.d.ts.map +1 -1
- package/lib/features/store/objects/layout/renderers.js +2 -2
- package/lib/features/store/objects/layout/renderers.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/ContentObjectTypesTable.d.ts.map +1 -1
- package/lib/features/store/types/ContentObjectTypesTable.js +4 -4
- package/lib/features/store/types/ContentObjectTypesTable.js.map +1 -1
- package/lib/features/store/types/IntakePolicyEditor.d.ts +15 -0
- package/lib/features/store/types/IntakePolicyEditor.d.ts.map +1 -0
- package/lib/features/store/types/IntakePolicyEditor.js +455 -0
- package/lib/features/store/types/IntakePolicyEditor.js.map +1 -0
- package/lib/features/store/types/IntakePolicyForm.d.ts +11 -0
- package/lib/features/store/types/IntakePolicyForm.d.ts.map +1 -0
- package/lib/features/store/types/IntakePolicyForm.js +91 -0
- package/lib/features/store/types/IntakePolicyForm.js.map +1 -0
- package/lib/features/store/types/SelectContentTypeModal.js +1 -1
- package/lib/features/store/types/SelectContentTypeModal.js.map +1 -1
- package/lib/features/store/types/index.d.ts +2 -0
- package/lib/features/store/types/index.d.ts.map +1 -1
- package/lib/features/store/types/index.js +2 -0
- package/lib/features/store/types/index.js.map +1 -1
- package/lib/features/store/types/intake-policy-editor.logic.d.ts +7 -0
- package/lib/features/store/types/intake-policy-editor.logic.d.ts.map +1 -0
- package/lib/features/store/types/intake-policy-editor.logic.js +60 -0
- package/lib/features/store/types/intake-policy-editor.logic.js.map +1 -0
- package/lib/features/store/types/typeCatalogCache.d.ts +5 -0
- package/lib/features/store/types/typeCatalogCache.d.ts.map +1 -0
- package/lib/features/store/types/typeCatalogCache.js +40 -0
- package/lib/features/store/types/typeCatalogCache.js.map +1 -0
- package/lib/features/user/UserInfo.js +7 -3
- package/lib/features/user/UserInfo.js.map +1 -1
- package/lib/features/views/ViewExperience.d.ts +20 -0
- package/lib/features/views/ViewExperience.d.ts.map +1 -0
- package/lib/features/views/ViewExperience.js +188 -0
- package/lib/features/views/ViewExperience.js.map +1 -0
- package/lib/features/views/ViewNavigation.d.ts +3 -0
- package/lib/features/views/ViewNavigation.d.ts.map +1 -0
- package/lib/features/views/ViewNavigation.js +36 -0
- package/lib/features/views/ViewNavigation.js.map +1 -0
- package/lib/features/views/ViewResults.d.ts +9 -0
- package/lib/features/views/ViewResults.d.ts.map +1 -0
- package/lib/features/views/ViewResults.js +229 -0
- package/lib/features/views/ViewResults.js.map +1 -0
- package/lib/features/views/ViewSearch.d.ts +3 -0
- package/lib/features/views/ViewSearch.d.ts.map +1 -0
- package/lib/features/views/ViewSearch.js +74 -0
- package/lib/features/views/ViewSearch.js.map +1 -0
- package/lib/features/views/index.d.ts +7 -0
- package/lib/features/views/index.d.ts.map +1 -0
- package/lib/features/views/index.js +7 -0
- package/lib/features/views/index.js.map +1 -0
- package/lib/features/views/types.d.ts +39 -0
- package/lib/features/views/types.d.ts.map +1 -0
- package/lib/features/views/types.js +2 -0
- package/lib/features/views/types.js.map +1 -0
- package/lib/features/views/viewState.d.ts +14 -0
- package/lib/features/views/viewState.d.ts.map +1 -0
- package/lib/features/views/viewState.js +117 -0
- package/lib/features/views/viewState.js.map +1 -0
- package/lib/i18n/locales/ar.json +16 -0
- package/lib/i18n/locales/de.json +12 -0
- package/lib/i18n/locales/en.json +245 -33
- package/lib/i18n/locales/es.json +13 -0
- package/lib/i18n/locales/fr.json +13 -0
- package/lib/i18n/locales/it.json +13 -0
- package/lib/i18n/locales/ja.json +11 -0
- package/lib/i18n/locales/ko.json +11 -0
- package/lib/i18n/locales/pt.json +13 -0
- package/lib/i18n/locales/ru.json +14 -0
- package/lib/i18n/locales/tr.json +12 -0
- package/lib/i18n/locales/zh-TW.json +11 -0
- package/lib/i18n/locales/zh.json +11 -0
- package/lib/router/HistoryNavigator.d.ts.map +1 -1
- package/lib/router/HistoryNavigator.js +23 -13
- package/lib/router/HistoryNavigator.js.map +1 -1
- package/lib/router/Nav.d.ts.map +1 -1
- package/lib/router/Nav.js +15 -6
- package/lib/router/Nav.js.map +1 -1
- package/lib/session/UserSession.d.ts.map +1 -1
- package/lib/session/UserSession.js +5 -3
- package/lib/session/UserSession.js.map +1 -1
- package/lib/vertesia-ui-core.js +4 -4
- package/lib/vertesia-ui-core.js.map +1 -1
- package/lib/vertesia-ui-features.js +34 -27
- package/lib/vertesia-ui-features.js.map +1 -1
- package/lib/vertesia-ui-i18n.js +15 -15
- package/lib/vertesia-ui-i18n.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 +1 -1
- package/lib/vertesia-ui-shell.js.map +1 -1
- package/lib/vertesia-ui-widgets.js +7 -7
- package/lib/vertesia-ui-widgets.js.map +1 -1
- package/lib/widgets/form/Form.js +1 -1
- package/lib/widgets/form/Form.js.map +1 -1
- package/lib/widgets/json-view/JSONSwitcher.js +1 -1
- package/lib/widgets/json-view/JSONSwitcher.js.map +1 -1
- package/lib/widgets/json-view/JSONView.js +6 -6
- package/lib/widgets/json-view/JSONView.js.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.d.ts.map +1 -1
- package/lib/widgets/monacoEditor/MonacoEditor.js +29 -0
- package/lib/widgets/monacoEditor/MonacoEditor.js.map +1 -1
- package/lib/widgets/schema-editor/ManagedSchema.d.ts +8 -0
- package/lib/widgets/schema-editor/ManagedSchema.d.ts.map +1 -1
- package/lib/widgets/schema-editor/ManagedSchema.js +16 -0
- package/lib/widgets/schema-editor/ManagedSchema.js.map +1 -1
- package/lib/widgets/schema-editor/editor/EditableSchemaProperty.d.ts +2 -0
- package/lib/widgets/schema-editor/editor/EditableSchemaProperty.d.ts.map +1 -1
- package/lib/widgets/schema-editor/editor/EditableSchemaProperty.js +1 -0
- package/lib/widgets/schema-editor/editor/EditableSchemaProperty.js.map +1 -1
- package/lib/widgets/schema-editor/editor/PropertyViewer.d.ts.map +1 -1
- package/lib/widgets/schema-editor/editor/PropertyViewer.js +4 -1
- package/lib/widgets/schema-editor/editor/PropertyViewer.js.map +1 -1
- package/lib/widgets/schema-editor/editor/SchemaEditor.d.ts.map +1 -1
- package/lib/widgets/schema-editor/editor/SchemaEditor.js +22 -11
- package/lib/widgets/schema-editor/editor/SchemaEditor.js.map +1 -1
- package/package.json +32 -32
- package/src/__tests__/a11y.test.tsx +73 -0
- package/src/core/components/SidePanel.tsx +1 -1
- package/src/core/components/shadcn/button.tsx +67 -12
- package/src/core/components/shadcn/modal/dialog.tsx +1 -1
- package/src/core/components/shadcn/theme/ThemeSwitcher.tsx +1 -1
- package/src/features/agent/chat/AgentChatPlaybackControls.tsx +0 -5
- package/src/features/agent/chat/AgentRequestInputOverlay.test.tsx +31 -0
- package/src/features/agent/chat/AgentRequestInputOverlay.tsx +6 -2
- package/src/features/agent/chat/ArtifactsTab.tsx +19 -9
- package/src/features/agent/chat/ImageLightbox.tsx +0 -1
- package/src/features/agent/chat/ModernAgentConversation.test.tsx +48 -0
- package/src/features/agent/chat/ModernAgentConversation.tsx +0 -2
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +6 -1
- package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +21 -15
- package/src/features/agent/chat/ModernAgentOutput/Header.tsx +3 -3
- package/src/features/agent/chat/ModernAgentOutput/MessageInput.tsx +0 -2
- package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +4 -1
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.test.ts +80 -0
- package/src/features/agent/chat/ModernAgentOutput/requestInputMessages.ts +21 -1
- package/src/features/environment/SelectEnvironment.tsx +186 -0
- package/src/features/environment/index.ts +1 -0
- package/src/features/index.ts +2 -0
- package/src/features/magic-pdf/AnnotatedImageSlider.tsx +62 -66
- package/src/features/magic-pdf/DownloadPopover.tsx +5 -48
- package/src/features/magic-pdf/ExtractedContentView.tsx +2 -14
- package/src/features/magic-pdf/GroundedExtractionAssistantPanel.tsx +86 -0
- package/src/features/magic-pdf/GroundedExtractionView.test.tsx +65 -0
- package/src/features/magic-pdf/GroundedExtractionView.tsx +1055 -0
- package/src/features/magic-pdf/MagicPdfProvider.tsx +17 -47
- package/src/features/magic-pdf/MagicPdfView.tsx +3 -51
- package/src/features/magic-pdf/index.ts +1 -0
- package/src/features/magic-pdf/types.ts +1 -1
- package/src/features/oauth/McpConnectionsButton.tsx +0 -2
- package/src/features/oauth/McpConnectionsDialog.tsx +0 -1
- package/src/features/oauth/RemoteMcpConnectionButton.tsx +0 -1
- package/src/features/pdf-viewer/PdfPageSlider.tsx +5 -5
- package/src/features/pdf-viewer/SimplePdfViewer.tsx +11 -12
- package/src/features/permissions/UserPermissionsProvider.tsx +1 -1
- package/src/features/store/objects/DocumentQuickFilter.tsx +13 -15
- package/src/features/store/objects/DocumentSearchResults.tsx +3 -6
- package/src/features/store/objects/components/ContentDispositionButton.tsx +5 -1
- package/src/features/store/objects/components/ContentOverview.tsx +144 -44
- package/src/features/store/objects/components/DocumentIcon.tsx +1 -1
- package/src/features/store/objects/components/VectorSearchWidget.tsx +2 -2
- package/src/features/store/objects/components/useContentPanelHooks.ts +3 -15
- package/src/features/store/objects/layout/renderers.tsx +1 -2
- package/src/features/store/objects/selection/SelectionActions.tsx +1 -1
- package/src/features/store/types/ContentObjectTypesTable.tsx +12 -14
- package/src/features/store/types/IntakePolicyEditor.tsx +679 -0
- package/src/features/store/types/IntakePolicyForm.tsx +838 -0
- package/src/features/store/types/SelectContentTypeModal.tsx +2 -2
- package/src/features/store/types/index.ts +2 -0
- package/src/features/store/types/intake-policy-editor.logic.test.ts +109 -0
- package/src/features/store/types/intake-policy-editor.logic.ts +87 -0
- package/src/features/store/types/typeCatalogCache.ts +45 -0
- package/src/features/user/UserInfo.tsx +7 -7
- package/src/features/views/ViewExperience.test.tsx +273 -0
- package/src/features/views/ViewExperience.tsx +408 -0
- package/src/features/views/ViewNavigation.test.tsx +86 -0
- package/src/features/views/ViewNavigation.tsx +187 -0
- package/src/features/views/ViewResults.test.ts +82 -0
- package/src/features/views/ViewResults.tsx +609 -0
- package/src/features/views/ViewSearch.test.tsx +147 -0
- package/src/features/views/ViewSearch.tsx +205 -0
- package/src/features/views/index.ts +6 -0
- package/src/features/views/types.ts +57 -0
- package/src/features/views/viewState.test.ts +111 -0
- package/src/features/views/viewState.ts +132 -0
- package/src/i18n/locales/ar.json +16 -0
- package/src/i18n/locales/de.json +12 -0
- package/src/i18n/locales/en.json +965 -753
- package/src/i18n/locales/es.json +13 -0
- package/src/i18n/locales/fr.json +13 -0
- package/src/i18n/locales/it.json +13 -0
- package/src/i18n/locales/ja.json +11 -0
- package/src/i18n/locales/ko.json +11 -0
- package/src/i18n/locales/pt.json +13 -0
- package/src/i18n/locales/ru.json +14 -0
- package/src/i18n/locales/tr.json +12 -0
- package/src/i18n/locales/zh-TW.json +11 -0
- package/src/i18n/locales/zh.json +11 -0
- package/src/router/HistoryNavigator.test.ts +48 -0
- package/src/router/HistoryNavigator.ts +24 -13
- package/src/router/Nav.tsx +18 -8
- package/src/session/UserSession.test.ts +39 -0
- package/src/session/UserSession.ts +5 -3
- package/src/widgets/form/Form.tsx +1 -1
- package/src/widgets/json-view/JSONSwitcher.tsx +2 -2
- package/src/widgets/json-view/JSONView.tsx +7 -7
- package/src/widgets/monacoEditor/MonacoEditor.tsx +29 -0
- package/src/widgets/schema-editor/ManagedSchema.ts +22 -0
- package/src/widgets/schema-editor/editor/EditableSchemaProperty.tsx +3 -0
- package/src/widgets/schema-editor/editor/PropertyViewer.tsx +14 -3
- package/src/widgets/schema-editor/editor/SchemaEditor.tsx +80 -29
|
@@ -2,8 +2,8 @@ import {
|
|
|
2
2
|
ContentNature,
|
|
3
3
|
type ContentObject,
|
|
4
4
|
ContentObjectStatus,
|
|
5
|
+
type ContentObjectTypeItem,
|
|
5
6
|
type DocAnalyzerProgress,
|
|
6
|
-
type DocProcessorOutputFormat,
|
|
7
7
|
type DocumentMetadata,
|
|
8
8
|
MarkdownRenditionFormat,
|
|
9
9
|
PDF_RENDITION_NAME,
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
WorkflowExecutionStatus,
|
|
12
12
|
} from '@vertesia/common';
|
|
13
13
|
import {
|
|
14
|
+
Badge,
|
|
14
15
|
Button,
|
|
15
16
|
Dropdown,
|
|
16
17
|
MenuItem,
|
|
@@ -26,7 +27,7 @@ import { useUITranslation } from '@vertesia/ui/i18n';
|
|
|
26
27
|
import { NavLink } from '@vertesia/ui/router';
|
|
27
28
|
import { useUserSession } from '@vertesia/ui/session';
|
|
28
29
|
import { JSONDisplay, Progress } from '@vertesia/ui/widgets';
|
|
29
|
-
import { AlertTriangle, Copy, Download, FileSearch, SquarePen } from 'lucide-react';
|
|
30
|
+
import { AlertTriangle, Copy, Download, FileSearch, ScanSearch, SquarePen } from 'lucide-react';
|
|
30
31
|
import { memo, type RefObject, useEffect, useMemo, useRef, useState } from 'react';
|
|
31
32
|
import {
|
|
32
33
|
type UniversalDocumentConverter,
|
|
@@ -34,9 +35,15 @@ import {
|
|
|
34
35
|
UniversalDocumentViewer,
|
|
35
36
|
} from '../../../document-viewer/UniversalDocumentViewer.js';
|
|
36
37
|
import { MagicPdfView } from '../../../magic-pdf';
|
|
38
|
+
import {
|
|
39
|
+
GroundedExtractionView,
|
|
40
|
+
useGroundedExtractionAvailable,
|
|
41
|
+
useGroundedSummary,
|
|
42
|
+
} from '../../../magic-pdf/GroundedExtractionView.js';
|
|
37
43
|
import { AudioPanel, ImagePanel, VideoPanel } from '../../../media-viewer';
|
|
38
44
|
import { SecureButton } from '../../../permissions/SecureButton.js';
|
|
39
45
|
import { getWorkflowStatusColor, getWorkflowStatusName, isPreviewableAsPdf } from '../../../utils/index.js';
|
|
46
|
+
import { resolveTypeCached } from '../../types/typeCatalogCache.js';
|
|
40
47
|
import { PropertiesEditorModal } from './PropertiesEditorModal';
|
|
41
48
|
import { TextEditorPanel } from './TextEditorPanel.js';
|
|
42
49
|
import { useObjectText, useOfficePdfConversion, usePdfProcessingStatus } from './useContentPanelHooks.js';
|
|
@@ -235,6 +242,7 @@ function PropertiesPanel({
|
|
|
235
242
|
const { t } = useUITranslation();
|
|
236
243
|
const [viewCode, setViewCode] = useState(false);
|
|
237
244
|
const [isPropertiesModalOpen, setPropertiesModalOpen] = useState(false);
|
|
245
|
+
const groundedSummary = useGroundedSummary(object.id);
|
|
238
246
|
|
|
239
247
|
const handleOpenPropertiesModal = () => {
|
|
240
248
|
setPropertiesModalOpen(true);
|
|
@@ -252,7 +260,7 @@ function PropertiesPanel({
|
|
|
252
260
|
<Button
|
|
253
261
|
variant={`${viewCode ? 'ghost' : 'primary'}`}
|
|
254
262
|
size="sm"
|
|
255
|
-
|
|
263
|
+
title={t('store.previewProperties')}
|
|
256
264
|
onClick={() => setViewCode(!viewCode)}
|
|
257
265
|
>
|
|
258
266
|
Properties
|
|
@@ -260,7 +268,7 @@ function PropertiesPanel({
|
|
|
260
268
|
<Button
|
|
261
269
|
variant={`${viewCode ? 'primary' : 'ghost'}`}
|
|
262
270
|
size="sm"
|
|
263
|
-
|
|
271
|
+
title={t('store.viewInJsonFormat')}
|
|
264
272
|
onClick={() => setViewCode(!viewCode)}
|
|
265
273
|
>
|
|
266
274
|
JSON
|
|
@@ -294,6 +302,26 @@ function PropertiesPanel({
|
|
|
294
302
|
</div>
|
|
295
303
|
</div>
|
|
296
304
|
|
|
305
|
+
{groundedSummary && object.properties && (
|
|
306
|
+
<div className="flex items-center gap-2 px-2 pb-2">
|
|
307
|
+
{typeof groundedSummary.confidence === 'number' && (
|
|
308
|
+
<Badge
|
|
309
|
+
variant={groundedSummary.confidence >= 0.95 ? 'success' : 'attention'}
|
|
310
|
+
title={t('grounded.confidenceHint')}
|
|
311
|
+
>
|
|
312
|
+
{t('grounded.confidence', {
|
|
313
|
+
percent: Math.floor(groundedSummary.confidence * 100),
|
|
314
|
+
})}
|
|
315
|
+
</Badge>
|
|
316
|
+
)}
|
|
317
|
+
<Badge variant={groundedSummary.verified === groundedSummary.total ? 'success' : 'attention'}>
|
|
318
|
+
{t('grounded.verifiedOf', {
|
|
319
|
+
verified: groundedSummary.verified,
|
|
320
|
+
total: groundedSummary.total,
|
|
321
|
+
})}
|
|
322
|
+
</Badge>
|
|
323
|
+
</div>
|
|
324
|
+
)}
|
|
297
325
|
{object.properties ? (
|
|
298
326
|
<div className="flex-1 min-h-0 px-2">
|
|
299
327
|
<JSONDisplay value={object.properties} viewCode={viewCode} />
|
|
@@ -314,17 +342,51 @@ function PropertiesPanel({
|
|
|
314
342
|
);
|
|
315
343
|
}
|
|
316
344
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
handleCopyContent,
|
|
321
|
-
refetch,
|
|
322
|
-
}: {
|
|
345
|
+
type IntakeDefaultView = NonNullable<NonNullable<ContentObjectTypeItem['intake']>['default_view']>;
|
|
346
|
+
|
|
347
|
+
interface DataPanelProps {
|
|
323
348
|
object: ContentObject;
|
|
324
349
|
loadText: boolean;
|
|
325
350
|
handleCopyContent: (content: string, type: 'text' | 'properties') => Promise<void>;
|
|
326
351
|
refetch?: () => Promise<unknown>;
|
|
327
|
-
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Resolves the object's content-type intake policy BEFORE the initial panel is chosen so
|
|
356
|
+
* `default_view` can drive it. Renders a spinner until the type is resolved — never the
|
|
357
|
+
* MIME-guessed panel first (no guess-then-flip). Objects without a type render immediately.
|
|
358
|
+
*/
|
|
359
|
+
function DataPanel(props: DataPanelProps) {
|
|
360
|
+
const { client } = useUserSession();
|
|
361
|
+
const typeRef = props.object.type;
|
|
362
|
+
const typeId = typeRef?.id;
|
|
363
|
+
// Fast path: single-object reads carry the display hint on the API-enriched type ref.
|
|
364
|
+
const refView = typeRef?.default_view;
|
|
365
|
+
// Fallback (list-fed contexts, older servers): session-cached catalog lookup.
|
|
366
|
+
// null = resolved with no default view; undefined = not resolved yet.
|
|
367
|
+
const { data: fetchedView } = useFetch<IntakeDefaultView | null>(async () => {
|
|
368
|
+
if (!typeId || refView) return null;
|
|
369
|
+
const type = await resolveTypeCached(client, typeId);
|
|
370
|
+
return type?.intake?.default_view ?? null;
|
|
371
|
+
}, [typeId, refView]);
|
|
372
|
+
const defaultView = refView ?? fetchedView;
|
|
373
|
+
if (typeId && !refView && fetchedView === undefined) {
|
|
374
|
+
return (
|
|
375
|
+
<div className="flex h-full items-center justify-center">
|
|
376
|
+
<Spinner size="lg" />
|
|
377
|
+
</div>
|
|
378
|
+
);
|
|
379
|
+
}
|
|
380
|
+
return <DataPanelContent {...props} defaultView={defaultView ?? undefined} />;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
function DataPanelContent({
|
|
384
|
+
object,
|
|
385
|
+
loadText,
|
|
386
|
+
handleCopyContent,
|
|
387
|
+
refetch,
|
|
388
|
+
defaultView,
|
|
389
|
+
}: DataPanelProps & { defaultView?: IntakeDefaultView }) {
|
|
328
390
|
const { client } = useUserSession();
|
|
329
391
|
const { t } = useUITranslation();
|
|
330
392
|
const isImage = object?.metadata?.type === ContentNature.Image;
|
|
@@ -339,14 +401,32 @@ function DataPanel({
|
|
|
339
401
|
const metadata = object.metadata as DocumentMetadata;
|
|
340
402
|
const pdfRendition = metadata?.renditions?.find((r) => r.name === PDF_RENDITION_NAME);
|
|
341
403
|
|
|
342
|
-
// Determine initial panel view
|
|
404
|
+
// Determine initial panel view: the type's default_view wins when it applies to this
|
|
405
|
+
// object; otherwise fall back to the nature/MIME heuristics.
|
|
343
406
|
const getInitialView = (): PanelView => {
|
|
407
|
+
switch (defaultView) {
|
|
408
|
+
case 'text':
|
|
409
|
+
return PanelView.Text;
|
|
410
|
+
case 'pdf':
|
|
411
|
+
if (isPdf || isPreviewableAsPdfDoc || pdfRendition) return PanelView.Pdf;
|
|
412
|
+
break;
|
|
413
|
+
case 'image':
|
|
414
|
+
if (isImage) return PanelView.Image;
|
|
415
|
+
break;
|
|
416
|
+
case 'properties':
|
|
417
|
+
// Properties live in the right-hand panel which is always visible; the text
|
|
418
|
+
// panel shows the rendered property card for extraction-only types.
|
|
419
|
+
return PanelView.Text;
|
|
420
|
+
default:
|
|
421
|
+
break;
|
|
422
|
+
}
|
|
344
423
|
if (isVideo) return PanelView.Video;
|
|
345
424
|
if (isAudio) return PanelView.Audio;
|
|
346
425
|
if (isImage) return PanelView.Image;
|
|
347
426
|
return PanelView.Text;
|
|
348
427
|
};
|
|
349
428
|
|
|
429
|
+
const groundedAvailable = useGroundedExtractionAvailable(object.id);
|
|
350
430
|
const [currentPanel, setCurrentPanel] = useState<PanelView>(getInitialView());
|
|
351
431
|
const [hasVisitedPdfPanel, setHasVisitedPdfPanel] = useState(currentPanel === PanelView.Pdf);
|
|
352
432
|
|
|
@@ -386,7 +466,6 @@ function DataPanel({
|
|
|
386
466
|
const {
|
|
387
467
|
progress: pdfProgress,
|
|
388
468
|
status: pdfStatus,
|
|
389
|
-
outputFormat: pdfOutputFormat,
|
|
390
469
|
isComplete: processingComplete,
|
|
391
470
|
} = usePdfProcessingStatus(object.id, shouldPollProgress);
|
|
392
471
|
|
|
@@ -460,7 +539,7 @@ function DataPanel({
|
|
|
460
539
|
<Button
|
|
461
540
|
variant={currentPanel === PanelView.Image ? 'primary' : 'ghost'}
|
|
462
541
|
size="sm"
|
|
463
|
-
|
|
542
|
+
title={t('store.viewImage')}
|
|
464
543
|
onClick={() => setCurrentPanel(PanelView.Image)}
|
|
465
544
|
>
|
|
466
545
|
Image
|
|
@@ -470,7 +549,7 @@ function DataPanel({
|
|
|
470
549
|
<Button
|
|
471
550
|
variant={currentPanel === PanelView.Video ? 'primary' : 'ghost'}
|
|
472
551
|
size="sm"
|
|
473
|
-
|
|
552
|
+
title={t('store.viewVideo')}
|
|
474
553
|
onClick={() => setCurrentPanel(PanelView.Video)}
|
|
475
554
|
>
|
|
476
555
|
Video
|
|
@@ -480,7 +559,7 @@ function DataPanel({
|
|
|
480
559
|
<Button
|
|
481
560
|
variant={currentPanel === PanelView.Audio ? 'primary' : 'ghost'}
|
|
482
561
|
size="sm"
|
|
483
|
-
|
|
562
|
+
title={t('store.viewAudio')}
|
|
484
563
|
onClick={() => setCurrentPanel(PanelView.Audio)}
|
|
485
564
|
>
|
|
486
565
|
Audio
|
|
@@ -490,7 +569,7 @@ function DataPanel({
|
|
|
490
569
|
<Button
|
|
491
570
|
variant={currentPanel === PanelView.Transcript ? 'primary' : 'ghost'}
|
|
492
571
|
size="sm"
|
|
493
|
-
|
|
572
|
+
title={t('store.viewTranscript')}
|
|
494
573
|
onClick={() => setCurrentPanel(PanelView.Transcript)}
|
|
495
574
|
>
|
|
496
575
|
Transcript
|
|
@@ -499,7 +578,7 @@ function DataPanel({
|
|
|
499
578
|
<Button
|
|
500
579
|
variant={currentPanel === PanelView.Text ? 'primary' : 'ghost'}
|
|
501
580
|
size="sm"
|
|
502
|
-
|
|
581
|
+
title={t('store.viewText')}
|
|
503
582
|
onClick={() => setCurrentPanel(PanelView.Text)}
|
|
504
583
|
>
|
|
505
584
|
Text
|
|
@@ -508,7 +587,7 @@ function DataPanel({
|
|
|
508
587
|
<Button
|
|
509
588
|
variant={currentPanel === PanelView.Pdf ? 'primary' : 'ghost'}
|
|
510
589
|
size="sm"
|
|
511
|
-
|
|
590
|
+
title={t('store.viewPdf')}
|
|
512
591
|
onClick={() => setCurrentPanel(PanelView.Pdf)}
|
|
513
592
|
>
|
|
514
593
|
PDF
|
|
@@ -518,7 +597,7 @@ function DataPanel({
|
|
|
518
597
|
<Button
|
|
519
598
|
variant={currentPanel === PanelView.Pdf ? 'primary' : 'ghost'}
|
|
520
599
|
size="sm"
|
|
521
|
-
|
|
600
|
+
title={t('store.viewAsPdf')}
|
|
522
601
|
onClick={() => {
|
|
523
602
|
setCurrentPanel(PanelView.Pdf);
|
|
524
603
|
if (!pdfRendition && !officePdfUrl && !officePdfConverting) {
|
|
@@ -531,7 +610,10 @@ function DataPanel({
|
|
|
531
610
|
</Button>
|
|
532
611
|
)}
|
|
533
612
|
</div>
|
|
534
|
-
<
|
|
613
|
+
<div className="flex items-center gap-1">
|
|
614
|
+
<PdfActions object={object} />
|
|
615
|
+
<GroundedActions objectId={object.id} available={groundedAvailable} />
|
|
616
|
+
</div>
|
|
535
617
|
</div>
|
|
536
618
|
{currentPanel === PanelView.Text && !showProcessingPanel && !isEditing && (
|
|
537
619
|
<TextActions
|
|
@@ -588,7 +670,7 @@ function DataPanel({
|
|
|
588
670
|
)}
|
|
589
671
|
{showPdfProcessingPanel && (
|
|
590
672
|
<div className={getPanelVisibility(true)}>
|
|
591
|
-
<PdfProcessingPanel progress={pdfProgress} status={pdfStatus}
|
|
673
|
+
<PdfProcessingPanel progress={pdfProgress} status={pdfStatus} />
|
|
592
674
|
</div>
|
|
593
675
|
)}
|
|
594
676
|
{currentPanel === PanelView.Text && !showProcessingPanel && !isEditing && isLoadingText && (
|
|
@@ -638,9 +720,6 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
|
|
|
638
720
|
|
|
639
721
|
const isMarkdown = content?.type && content.type === 'text/markdown';
|
|
640
722
|
|
|
641
|
-
// Get content processor type for file extension detection
|
|
642
|
-
const contentProcessorType = getContentProcessorType(object);
|
|
643
|
-
|
|
644
723
|
const handleExportDocument = async (format: MarkdownRenditionFormat, useDefaultTemplate?: boolean) => {
|
|
645
724
|
// Prevent multiple concurrent exports
|
|
646
725
|
if (isDownloading) return;
|
|
@@ -675,10 +754,10 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
|
|
|
675
754
|
// Determine file extension based on content processor type
|
|
676
755
|
let ext = 'txt';
|
|
677
756
|
let mimeType = 'text/plain';
|
|
678
|
-
if (
|
|
757
|
+
if (content?.type === 'application/xml' || content?.type === 'text/xml') {
|
|
679
758
|
ext = 'xml';
|
|
680
759
|
mimeType = 'text/xml';
|
|
681
|
-
} else if (
|
|
760
|
+
} else if (isMarkdown) {
|
|
682
761
|
ext = 'md';
|
|
683
762
|
mimeType = 'text/markdown';
|
|
684
763
|
}
|
|
@@ -726,7 +805,7 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
|
|
|
726
805
|
</>
|
|
727
806
|
)}
|
|
728
807
|
{isDownloading ? (
|
|
729
|
-
<Button variant="ghost" size="sm" disabled className="flex items-center gap-2"
|
|
808
|
+
<Button variant="ghost" size="sm" disabled className="flex items-center gap-2" title="download">
|
|
730
809
|
<Spinner size="sm" />
|
|
731
810
|
</Button>
|
|
732
811
|
) : (
|
|
@@ -737,7 +816,7 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
|
|
|
737
816
|
size="sm"
|
|
738
817
|
disabled={!text}
|
|
739
818
|
className="flex items-center gap-2"
|
|
740
|
-
|
|
819
|
+
title="download"
|
|
741
820
|
>
|
|
742
821
|
<Download className="size-4" />
|
|
743
822
|
</Button>
|
|
@@ -783,12 +862,12 @@ function TextActions({ object, text, fullText, handleCopyContent, onToggleEdit,
|
|
|
783
862
|
const TextPanel = memo(({ object, text, isTextCropped, textContainerRef }: TextPanelProps) => {
|
|
784
863
|
const { t } = useUITranslation();
|
|
785
864
|
const isCreatedOrProcessing = isCreatedOrProcessingStatus(object?.status);
|
|
865
|
+
const content = object.content;
|
|
786
866
|
const contentProcessorType = getContentProcessorType(object);
|
|
787
|
-
const isXml = contentProcessorType === 'xml';
|
|
867
|
+
const isXml = contentProcessorType === 'xml' || content?.type === 'application/xml' || content?.type === 'text/xml';
|
|
788
868
|
|
|
789
869
|
// Check if content type is markdown or plain text
|
|
790
|
-
const isMarkdownOrText =
|
|
791
|
-
object.content?.type && (object.content.type === 'text/markdown' || object.content.type === 'text/plain');
|
|
870
|
+
const isMarkdownOrText = content?.type && (content.type === 'text/markdown' || content.type === 'text/plain');
|
|
792
871
|
|
|
793
872
|
// Render as markdown if it's markdown/text type OR if text looks like markdown (but not if XML)
|
|
794
873
|
const shouldRenderAsMarkdown = !isXml && (isMarkdownOrText || looksLikeMarkdown(text));
|
|
@@ -893,9 +972,8 @@ function TranscriptPanel({
|
|
|
893
972
|
function PdfActions({ object }: { object: ContentObject }) {
|
|
894
973
|
const [isPdfPreviewOpen, setPdfPreviewOpen] = useState(false);
|
|
895
974
|
|
|
896
|
-
// Check if PDF has been processed (content_processor.type is xml or markdown)
|
|
897
975
|
const contentProcessorType = getContentProcessorType(object);
|
|
898
|
-
const hasPdfAnalysis = contentProcessorType === '
|
|
976
|
+
const hasPdfAnalysis = contentProcessorType === 'markdown';
|
|
899
977
|
|
|
900
978
|
if (!hasPdfAnalysis) return null;
|
|
901
979
|
|
|
@@ -913,6 +991,32 @@ function PdfActions({ object }: { object: ContentObject }) {
|
|
|
913
991
|
);
|
|
914
992
|
}
|
|
915
993
|
|
|
994
|
+
function GroundedActions({ objectId, available }: { objectId: string; available: boolean }) {
|
|
995
|
+
const { t } = useUITranslation();
|
|
996
|
+
const [isGroundedOpen, setGroundedOpen] = useState(false);
|
|
997
|
+
|
|
998
|
+
if (!available) return null;
|
|
999
|
+
|
|
1000
|
+
return (
|
|
1001
|
+
<>
|
|
1002
|
+
<Button
|
|
1003
|
+
variant="ghost"
|
|
1004
|
+
size="sm"
|
|
1005
|
+
onClick={() => setGroundedOpen(true)}
|
|
1006
|
+
title={t('grounded.title')}
|
|
1007
|
+
aria-label={t('grounded.title')}
|
|
1008
|
+
>
|
|
1009
|
+
<ScanSearch className="size-4" />
|
|
1010
|
+
</Button>
|
|
1011
|
+
{isGroundedOpen && (
|
|
1012
|
+
<Portal>
|
|
1013
|
+
<GroundedExtractionView objectId={objectId} onClose={() => setGroundedOpen(false)} />
|
|
1014
|
+
</Portal>
|
|
1015
|
+
)}
|
|
1016
|
+
</>
|
|
1017
|
+
);
|
|
1018
|
+
}
|
|
1019
|
+
|
|
916
1020
|
function OfficePdfActions({ object, pdfRendition, officePdfUrl }: OfficePdfActionsProps) {
|
|
917
1021
|
const { client } = useUserSession();
|
|
918
1022
|
const toast = useToast();
|
|
@@ -1057,18 +1161,14 @@ function OfficePdfPreviewPanel({
|
|
|
1057
1161
|
function PdfProcessingPanel({
|
|
1058
1162
|
progress,
|
|
1059
1163
|
status,
|
|
1060
|
-
outputFormat,
|
|
1061
1164
|
}: {
|
|
1062
1165
|
progress?: DocAnalyzerProgress;
|
|
1063
1166
|
status?: WorkflowExecutionStatus;
|
|
1064
|
-
outputFormat?: DocProcessorOutputFormat;
|
|
1065
1167
|
}) {
|
|
1066
1168
|
const { t } = useUITranslation();
|
|
1067
1169
|
const statusColor = getWorkflowStatusColor(status);
|
|
1068
1170
|
const statusName = getWorkflowStatusName(status);
|
|
1069
|
-
|
|
1070
|
-
// Show detailed progress (tables, images, visuals) for XML processing
|
|
1071
|
-
const isXmlProcessing = outputFormat === 'xml';
|
|
1171
|
+
const isGroundedExtraction = progress?.phase === 'grounded_extraction';
|
|
1072
1172
|
|
|
1073
1173
|
// Ensure percent is a valid number (handle undefined and NaN from division by zero)
|
|
1074
1174
|
const percent = progress?.percent != null && !Number.isNaN(progress.percent) ? progress.percent : 0;
|
|
@@ -1079,14 +1179,14 @@ function PdfProcessingPanel({
|
|
|
1079
1179
|
<div className="space-y-2">
|
|
1080
1180
|
<div className="flex flex-col gap-1">
|
|
1081
1181
|
<ProgressLine
|
|
1082
|
-
name={
|
|
1182
|
+
name={isGroundedExtraction ? 'Prepare Evidence' : 'Analyze Page'}
|
|
1083
1183
|
progress={progress.pages}
|
|
1084
1184
|
/>
|
|
1085
|
-
{
|
|
1185
|
+
{isGroundedExtraction && (
|
|
1086
1186
|
<>
|
|
1087
|
-
<ProgressLine name="
|
|
1088
|
-
<ProgressLine name="
|
|
1089
|
-
<ProgressLine name="
|
|
1187
|
+
<ProgressLine name="Run OCR" progress={progress.images} />
|
|
1188
|
+
<ProgressLine name="Extract Grounded Data" progress={progress.tables} />
|
|
1189
|
+
<ProgressLine name="Review and Annotate" progress={progress.visuals} />
|
|
1090
1190
|
</>
|
|
1091
1191
|
)}
|
|
1092
1192
|
</div>
|
|
@@ -141,7 +141,7 @@ export function VectorSearchWidget({ onChange, isLoading, refresh, searchTypes }
|
|
|
141
141
|
<Button
|
|
142
142
|
variant="ghost"
|
|
143
143
|
onClick={() => setShowSettings(true)}
|
|
144
|
-
|
|
144
|
+
title={t('store.semanticSearchSettings')}
|
|
145
145
|
className="ms-1"
|
|
146
146
|
>
|
|
147
147
|
<Settings size={18} />
|
|
@@ -194,7 +194,7 @@ export function VectorSearchWidget({ onChange, isLoading, refresh, searchTypes }
|
|
|
194
194
|
isLoading={isLoading}
|
|
195
195
|
onClick={fireSearch}
|
|
196
196
|
isDisabled={!isReady}
|
|
197
|
-
|
|
197
|
+
title={t('store.semanticSearch')}
|
|
198
198
|
>
|
|
199
199
|
{t('store.search')}
|
|
200
200
|
</Button>
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type DocAnalyzerProgress,
|
|
3
|
-
type DocProcessorOutputFormat,
|
|
4
|
-
MarkdownRenditionFormat,
|
|
5
|
-
WorkflowExecutionStatus,
|
|
6
|
-
} from '@vertesia/common';
|
|
1
|
+
import { type DocAnalyzerProgress, MarkdownRenditionFormat, WorkflowExecutionStatus } from '@vertesia/common';
|
|
7
2
|
import { i18nInstance, NAMESPACE } from '@vertesia/ui/i18n';
|
|
8
3
|
import { useUserSession } from '@vertesia/ui/session';
|
|
9
4
|
import { useCallback, useEffect, useState } from 'react';
|
|
@@ -89,7 +84,6 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
|
|
|
89
84
|
const [state, setState] = useState<{
|
|
90
85
|
progress?: DocAnalyzerProgress;
|
|
91
86
|
status?: WorkflowExecutionStatus;
|
|
92
|
-
outputFormat?: DocProcessorOutputFormat;
|
|
93
87
|
isComplete: boolean;
|
|
94
88
|
}>({ isComplete: false });
|
|
95
89
|
|
|
@@ -102,7 +96,6 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
|
|
|
102
96
|
const updateStateIfChanged = (
|
|
103
97
|
nextProgress: DocAnalyzerProgress | undefined,
|
|
104
98
|
nextStatus: WorkflowExecutionStatus | undefined,
|
|
105
|
-
nextOutputFormat: DocProcessorOutputFormat | undefined,
|
|
106
99
|
nextIsComplete: boolean,
|
|
107
100
|
) => {
|
|
108
101
|
setState((prev) => {
|
|
@@ -111,7 +104,6 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
|
|
|
111
104
|
|
|
112
105
|
if (
|
|
113
106
|
prev.status === nextStatus &&
|
|
114
|
-
prev.outputFormat === nextOutputFormat &&
|
|
115
107
|
prev.isComplete === nextIsComplete &&
|
|
116
108
|
prevProgress === nextProgressSignature
|
|
117
109
|
) {
|
|
@@ -121,7 +113,6 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
|
|
|
121
113
|
return {
|
|
122
114
|
progress: nextProgress,
|
|
123
115
|
status: nextStatus,
|
|
124
|
-
outputFormat: nextOutputFormat,
|
|
125
116
|
isComplete: nextIsComplete,
|
|
126
117
|
};
|
|
127
118
|
});
|
|
@@ -134,17 +125,15 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
|
|
|
134
125
|
.analyze(objectId)
|
|
135
126
|
.getStatus()
|
|
136
127
|
.then((r) => {
|
|
137
|
-
const nextOutputFormat = r.output_format ?? r.progress?.output_format;
|
|
138
|
-
|
|
139
128
|
if (r.status === WorkflowExecutionStatus.RUNNING) {
|
|
140
|
-
updateStateIfChanged(r.progress, r.status,
|
|
129
|
+
updateStateIfChanged(r.progress, r.status, false);
|
|
141
130
|
// Workflow is running, poll every 2 seconds for progress
|
|
142
131
|
if (!interrupted) {
|
|
143
132
|
timeoutId = setTimeout(poll, 2000);
|
|
144
133
|
}
|
|
145
134
|
} else {
|
|
146
135
|
// Workflow completed or terminal state
|
|
147
|
-
updateStateIfChanged(r.progress, r.status,
|
|
136
|
+
updateStateIfChanged(r.progress, r.status, true);
|
|
148
137
|
}
|
|
149
138
|
})
|
|
150
139
|
.catch(() => {
|
|
@@ -167,7 +156,6 @@ export function usePdfProcessingStatus(objectId: string, shouldPoll: boolean) {
|
|
|
167
156
|
return {
|
|
168
157
|
progress: state.progress,
|
|
169
158
|
status: state.status,
|
|
170
|
-
outputFormat: state.outputFormat,
|
|
171
159
|
isComplete: state.isComplete,
|
|
172
160
|
};
|
|
173
161
|
}
|
|
@@ -156,7 +156,6 @@ const renderers: Record<
|
|
|
156
156
|
<td key={index} className="flex justify-start items-center gap-2 group/field">
|
|
157
157
|
<Button
|
|
158
158
|
variant="ghost"
|
|
159
|
-
aria-label="Preview Object"
|
|
160
159
|
title="Preview Object"
|
|
161
160
|
onClick={(e) => {
|
|
162
161
|
e.stopPropagation();
|
|
@@ -213,7 +212,7 @@ const renderers: Record<
|
|
|
213
212
|
{displayValue}
|
|
214
213
|
<Button
|
|
215
214
|
variant="ghost"
|
|
216
|
-
|
|
215
|
+
title="Preview Object"
|
|
217
216
|
onClick={(e) => {
|
|
218
217
|
e.stopPropagation();
|
|
219
218
|
onClick?.(objectId);
|
|
@@ -81,20 +81,18 @@ export function ContentObjectTypesTable({
|
|
|
81
81
|
<span className="truncate">{obj.name}</span>
|
|
82
82
|
<CopyButton content={obj.id} className={ACTION_BTN_CLASS} />
|
|
83
83
|
{onFilter && (
|
|
84
|
-
<
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
</Button>
|
|
97
|
-
</VTooltip>
|
|
84
|
+
<Button
|
|
85
|
+
variant="ghost"
|
|
86
|
+
size="sm"
|
|
87
|
+
title={`Filter by ${obj.name}`}
|
|
88
|
+
className={ACTION_BTN_CLASS}
|
|
89
|
+
onClick={(e) => {
|
|
90
|
+
e.stopPropagation();
|
|
91
|
+
onFilter('name', obj.name);
|
|
92
|
+
}}
|
|
93
|
+
>
|
|
94
|
+
<Filter className="size-3" />
|
|
95
|
+
</Button>
|
|
98
96
|
)}
|
|
99
97
|
</div>
|
|
100
98
|
</td>
|