@vertesia/ui 1.5.0-dev.20260714.072725Z → 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/env/index.d.ts +19 -0
- package/lib/env/index.d.ts.map +1 -1
- package/lib/env/index.js +6 -0
- package/lib/env/index.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 +68 -11
- 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 +52 -49
- 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/agent/chat/hooks/useArtifacts.d.ts +8 -1
- package/lib/features/agent/chat/hooks/useArtifacts.d.ts.map +1 -1
- package/lib/features/agent/chat/hooks/useArtifacts.js +28 -10
- package/lib/features/agent/chat/hooks/useArtifacts.js.map +1 -1
- package/lib/features/document-viewer/UniversalDocumentViewer.d.ts +73 -0
- package/lib/features/document-viewer/UniversalDocumentViewer.d.ts.map +1 -0
- package/lib/features/document-viewer/UniversalDocumentViewer.js +415 -0
- package/lib/features/document-viewer/UniversalDocumentViewer.js.map +1 -0
- package/lib/features/document-viewer/index.d.ts +2 -0
- package/lib/features/document-viewer/index.d.ts.map +1 -0
- package/lib/features/document-viewer/index.js +2 -0
- package/lib/features/document-viewer/index.js.map +1 -0
- 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 +3 -0
- package/lib/features/index.d.ts.map +1 -1
- package/lib/features/index.js +3 -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.d.ts +2 -3
- package/lib/features/permissions/UserPermissionsProvider.d.ts.map +1 -1
- package/lib/features/permissions/UserPermissionsProvider.js +31 -38
- 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 +148 -31
- 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 +18 -0
- package/lib/i18n/locales/de.json +14 -0
- package/lib/i18n/locales/en.json +246 -32
- package/lib/i18n/locales/es.json +15 -0
- package/lib/i18n/locales/fr.json +15 -0
- package/lib/i18n/locales/it.json +15 -0
- package/lib/i18n/locales/ja.json +13 -0
- package/lib/i18n/locales/ko.json +13 -0
- package/lib/i18n/locales/pt.json +15 -0
- package/lib/i18n/locales/ru.json +16 -0
- package/lib/i18n/locales/tr.json +14 -0
- package/lib/i18n/locales/zh-TW.json +13 -0
- package/lib/i18n/locales/zh.json +13 -0
- package/lib/router/HistoryNavigator.d.ts.map +1 -1
- package/lib/router/HistoryNavigator.js +27 -14
- package/lib/router/HistoryNavigator.js.map +1 -1
- package/lib/router/Nav.d.ts.map +1 -1
- package/lib/router/Nav.js +21 -6
- package/lib/router/Nav.js.map +1 -1
- package/lib/router/Router.d.ts.map +1 -1
- package/lib/router/Router.js +19 -4
- package/lib/router/Router.js.map +1 -1
- package/lib/router/path.d.ts +15 -0
- package/lib/router/path.d.ts.map +1 -1
- package/lib/router/path.js +43 -0
- package/lib/router/path.js.map +1 -1
- package/lib/session/UserSession.d.ts +6 -0
- package/lib/session/UserSession.d.ts.map +1 -1
- package/lib/session/UserSession.js +36 -12
- package/lib/session/UserSession.js.map +1 -1
- package/lib/session/UserSessionProvider.d.ts.map +1 -1
- package/lib/session/UserSessionProvider.js +111 -49
- package/lib/session/UserSessionProvider.js.map +1 -1
- package/lib/session/auth/composable.d.ts.map +1 -1
- package/lib/session/auth/composable.js +52 -3
- package/lib/session/auth/composable.js.map +1 -1
- package/lib/session/auth/domainRouting.d.ts +25 -0
- package/lib/session/auth/domainRouting.d.ts.map +1 -1
- package/lib/session/auth/domainRouting.js +36 -0
- package/lib/session/auth/domainRouting.js.map +1 -1
- package/lib/shell/login/SignInRestrictedEnvStep.d.ts +1 -1
- package/lib/shell/login/SignInRestrictedEnvStep.js +1 -1
- package/lib/shell/login/SigninScreen.js +9 -1
- package/lib/shell/login/SigninScreen.js.map +1 -1
- package/lib/shell/login/productionUrl.d.ts +0 -14
- package/lib/shell/login/productionUrl.d.ts.map +1 -1
- package/lib/shell/login/productionUrl.js +14 -5
- package/lib/shell/login/productionUrl.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-env.js +1 -1
- package/lib/vertesia-ui-env.js.map +1 -1
- package/lib/vertesia-ui-features.js +35 -28
- 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/llms.txt +70 -70
- package/package.json +33 -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/env/index.ts +24 -0
- 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 +165 -21
- 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 +53 -51
- 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/agent/chat/hooks/useArtifacts.ts +44 -11
- package/src/features/document-viewer/UniversalDocumentViewer.test.tsx +123 -0
- package/src/features/document-viewer/UniversalDocumentViewer.tsx +746 -0
- package/src/features/document-viewer/index.ts +1 -0
- package/src/features/environment/SelectEnvironment.tsx +186 -0
- package/src/features/environment/index.ts +1 -0
- package/src/features/index.ts +3 -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 +36 -39
- 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 +240 -67
- 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 +18 -0
- package/src/i18n/locales/de.json +14 -0
- package/src/i18n/locales/en.json +965 -751
- package/src/i18n/locales/es.json +15 -0
- package/src/i18n/locales/fr.json +15 -0
- package/src/i18n/locales/it.json +15 -0
- package/src/i18n/locales/ja.json +13 -0
- package/src/i18n/locales/ko.json +13 -0
- package/src/i18n/locales/pt.json +15 -0
- package/src/i18n/locales/ru.json +16 -0
- package/src/i18n/locales/tr.json +14 -0
- package/src/i18n/locales/zh-TW.json +13 -0
- package/src/i18n/locales/zh.json +13 -0
- package/src/router/HistoryNavigator.test.ts +48 -0
- package/src/router/HistoryNavigator.ts +28 -14
- package/src/router/Nav.tsx +24 -8
- package/src/router/Router.tsx +18 -4
- package/src/router/path.test.ts +87 -0
- package/src/router/path.ts +38 -0
- package/src/session/UserSession.test.ts +39 -0
- package/src/session/UserSession.ts +37 -12
- package/src/session/UserSessionProvider.tsx +138 -62
- package/src/session/auth/composable.test.ts +111 -0
- package/src/session/auth/composable.ts +58 -3
- package/src/session/auth/domainRouting.test.ts +28 -1
- package/src/session/auth/domainRouting.ts +38 -0
- package/src/shell/login/SignInRestrictedEnvStep.tsx +1 -1
- package/src/shell/login/SigninScreen.tsx +9 -1
- package/src/shell/login/productionUrl.test.ts +8 -5
- package/src/shell/login/productionUrl.ts +15 -5
- 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
package/llms.txt
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
## Reference URLs
|
|
7
7
|
|
|
8
|
-
- Visual style guide: https://
|
|
9
|
-
- Markdown component guide: https://
|
|
10
|
-
- LLM reference: https://
|
|
8
|
+
- Visual style guide: https://design.vertesiahq.com
|
|
9
|
+
- Markdown component guide: https://design.vertesiahq.com/components.md
|
|
10
|
+
- LLM reference: https://design.vertesiahq.com/llms.txt
|
|
11
11
|
|
|
12
12
|
# @vertesia/ui Component Reference
|
|
13
13
|
|
|
14
14
|
> Markdown rendition of the Vertesia UI style guide for LLMs and text-first clients.
|
|
15
|
-
> Visual style guide: https://
|
|
15
|
+
> Visual style guide: https://design.vertesiahq.com
|
|
16
16
|
|
|
17
17
|
Use this file when generating React UI for Vertesia apps or plugins. Prefer `@vertesia/ui`
|
|
18
18
|
components over local duplicates, and use semantic color classes instead of hardcoded colors.
|
|
@@ -31,65 +31,65 @@ import { useUserSession } from '@vertesia/ui/session';
|
|
|
31
31
|
|
|
32
32
|
## Classes
|
|
33
33
|
|
|
34
|
-
- [Semantic](https://
|
|
35
|
-
- [Background](https://
|
|
36
|
-
- [Text](https://
|
|
37
|
-
- [Border & Ring](https://
|
|
38
|
-
- [Icons](https://
|
|
34
|
+
- [Semantic](https://design.vertesiahq.com/semantic)
|
|
35
|
+
- [Background](https://design.vertesiahq.com/classes/background)
|
|
36
|
+
- [Text](https://design.vertesiahq.com/classes/text)
|
|
37
|
+
- [Border & Ring](https://design.vertesiahq.com/classes/border)
|
|
38
|
+
- [Icons](https://design.vertesiahq.com/classes/icons)
|
|
39
39
|
|
|
40
40
|
## Components
|
|
41
41
|
|
|
42
|
-
- [Heading](https://
|
|
43
|
-
- [Buttons](https://
|
|
44
|
-
- [Badges](https://
|
|
45
|
-
- [Dot Badges](https://
|
|
46
|
-
- [Message Box](https://
|
|
47
|
-
- [Modal](https://
|
|
48
|
-
- [Confirm Modal](https://
|
|
49
|
-
- [Delete Modal](https://
|
|
50
|
-
- [Filter](https://
|
|
51
|
-
- [Tabs](https://
|
|
52
|
-
- [Tooltips](https://
|
|
53
|
-
- [Switch](https://
|
|
54
|
-
- [Side Panel](https://
|
|
55
|
-
- [SelectBox](https://
|
|
56
|
-
- [Overlay](https://
|
|
57
|
-
- [Breadcrumbs](https://
|
|
58
|
-
- [Monaco](https://
|
|
59
|
-
- [Card](https://
|
|
60
|
-
- [Checkbox](https://
|
|
61
|
-
- [Collapsible](https://
|
|
62
|
-
- [Command](https://
|
|
63
|
-
- [Dropdown](https://
|
|
64
|
-
- [Label](https://
|
|
65
|
-
- [Panel](https://
|
|
66
|
-
- [Popover](https://
|
|
67
|
-
- [Radio Group](https://
|
|
68
|
-
- [Resizeable](https://
|
|
69
|
-
- [Separator](https://
|
|
70
|
-
- [Text](https://
|
|
71
|
-
- [Theme](https://
|
|
42
|
+
- [Heading](https://design.vertesiahq.com/components/heading)
|
|
43
|
+
- [Buttons](https://design.vertesiahq.com/components/buttons)
|
|
44
|
+
- [Badges](https://design.vertesiahq.com/components/badges)
|
|
45
|
+
- [Dot Badges](https://design.vertesiahq.com/components/dotBadges)
|
|
46
|
+
- [Message Box](https://design.vertesiahq.com/components/messageBox)
|
|
47
|
+
- [Modal](https://design.vertesiahq.com/components/modal)
|
|
48
|
+
- [Confirm Modal](https://design.vertesiahq.com/components/confirmModal)
|
|
49
|
+
- [Delete Modal](https://design.vertesiahq.com/components/deleteModal)
|
|
50
|
+
- [Filter](https://design.vertesiahq.com/components/filter)
|
|
51
|
+
- [Tabs](https://design.vertesiahq.com/components/tabs)
|
|
52
|
+
- [Tooltips](https://design.vertesiahq.com/components/tooltips)
|
|
53
|
+
- [Switch](https://design.vertesiahq.com/components/switch)
|
|
54
|
+
- [Side Panel](https://design.vertesiahq.com/components/sidePanel)
|
|
55
|
+
- [SelectBox](https://design.vertesiahq.com/components/selectBox)
|
|
56
|
+
- [Overlay](https://design.vertesiahq.com/components/overlay)
|
|
57
|
+
- [Breadcrumbs](https://design.vertesiahq.com/components/breadcrumb)
|
|
58
|
+
- [Monaco](https://design.vertesiahq.com/components/monaco)
|
|
59
|
+
- [Card](https://design.vertesiahq.com/components/card)
|
|
60
|
+
- [Checkbox](https://design.vertesiahq.com/components/checkbox)
|
|
61
|
+
- [Collapsible](https://design.vertesiahq.com/components/collapsible)
|
|
62
|
+
- [Command](https://design.vertesiahq.com/components/command)
|
|
63
|
+
- [Dropdown](https://design.vertesiahq.com/components/dropdown)
|
|
64
|
+
- [Label](https://design.vertesiahq.com/components/label)
|
|
65
|
+
- [Panel](https://design.vertesiahq.com/components/panel)
|
|
66
|
+
- [Popover](https://design.vertesiahq.com/components/popover)
|
|
67
|
+
- [Radio Group](https://design.vertesiahq.com/components/radioGroup)
|
|
68
|
+
- [Resizeable](https://design.vertesiahq.com/components/resizeable)
|
|
69
|
+
- [Separator](https://design.vertesiahq.com/components/separator)
|
|
70
|
+
- [Text](https://design.vertesiahq.com/components/text)
|
|
71
|
+
- [Theme](https://design.vertesiahq.com/components/theme)
|
|
72
72
|
|
|
73
73
|
## Layout & Structure
|
|
74
74
|
|
|
75
|
-
- [Avatar](https://
|
|
76
|
-
- [Center](https://
|
|
77
|
-
- [Divider](https://
|
|
78
|
-
- [Link](https://
|
|
79
|
-
- [Portal](https://
|
|
80
|
-
- [Spinner](https://
|
|
75
|
+
- [Avatar](https://design.vertesiahq.com/components/avatar)
|
|
76
|
+
- [Center](https://design.vertesiahq.com/components/center)
|
|
77
|
+
- [Divider](https://design.vertesiahq.com/components/divider)
|
|
78
|
+
- [Link](https://design.vertesiahq.com/components/link)
|
|
79
|
+
- [Portal](https://design.vertesiahq.com/components/portal)
|
|
80
|
+
- [Spinner](https://design.vertesiahq.com/components/spinner)
|
|
81
81
|
|
|
82
82
|
## Forms
|
|
83
83
|
|
|
84
|
-
- [FormItem](https://
|
|
85
|
-
- [Inputs](https://
|
|
86
|
-
- [Textarea](https://
|
|
87
|
-
- [ComboBox](https://
|
|
88
|
-
- [InputList](https://
|
|
89
|
-
- [MenuList](https://
|
|
90
|
-
- [NumberInput](https://
|
|
91
|
-
- [SelectList](https://
|
|
92
|
-
- [TagsInput](https://
|
|
84
|
+
- [FormItem](https://design.vertesiahq.com/components/formItem)
|
|
85
|
+
- [Inputs](https://design.vertesiahq.com/components/inputs)
|
|
86
|
+
- [Textarea](https://design.vertesiahq.com/components/textarea)
|
|
87
|
+
- [ComboBox](https://design.vertesiahq.com/components/comboBox)
|
|
88
|
+
- [InputList](https://design.vertesiahq.com/components/inputList)
|
|
89
|
+
- [MenuList](https://design.vertesiahq.com/components/menuList)
|
|
90
|
+
- [NumberInput](https://design.vertesiahq.com/components/numberInput)
|
|
91
|
+
- [SelectList](https://design.vertesiahq.com/components/selectList)
|
|
92
|
+
- [TagsInput](https://design.vertesiahq.com/components/tagsInput)
|
|
93
93
|
|
|
94
94
|
# Component Guidance
|
|
95
95
|
|
|
@@ -97,7 +97,7 @@ import { useUserSession } from '@vertesia/ui/session';
|
|
|
97
97
|
|
|
98
98
|
Primary action primitive with Vertesia variants, loading state, disabled state, and tooltip support.
|
|
99
99
|
|
|
100
|
-
- Route: https://
|
|
100
|
+
- Route: https://design.vertesiahq.com/components/buttons
|
|
101
101
|
- Import path: `@vertesia/ui/core`
|
|
102
102
|
- Exports: `Button`, `CopyButton`, `buttonVariants`
|
|
103
103
|
|
|
@@ -147,7 +147,7 @@ import { Button } from '@vertesia/ui/core';
|
|
|
147
147
|
|
|
148
148
|
Single-line text input with a simplified value-based `onChange` callback.
|
|
149
149
|
|
|
150
|
-
- Route: https://
|
|
150
|
+
- Route: https://design.vertesiahq.com/components/inputs
|
|
151
151
|
- Import path: `@vertesia/ui/core`
|
|
152
152
|
- Exports: `Input`
|
|
153
153
|
|
|
@@ -184,7 +184,7 @@ const [name, setName] = useState('');
|
|
|
184
184
|
|
|
185
185
|
Multi-line text control using standard React textarea event handling.
|
|
186
186
|
|
|
187
|
-
- Route: https://
|
|
187
|
+
- Route: https://design.vertesiahq.com/components/textarea
|
|
188
188
|
- Import path: `@vertesia/ui/core`
|
|
189
189
|
- Exports: `Textarea`
|
|
190
190
|
|
|
@@ -215,7 +215,7 @@ Multi-line text control using standard React textarea event handling.
|
|
|
215
215
|
|
|
216
216
|
Field wrapper for labels, required indicators, and help tooltips.
|
|
217
217
|
|
|
218
|
-
- Route: https://
|
|
218
|
+
- Route: https://design.vertesiahq.com/components/formItem
|
|
219
219
|
- Import path: `@vertesia/ui/core`
|
|
220
220
|
- Exports: `FormItem`
|
|
221
221
|
|
|
@@ -248,7 +248,7 @@ Field wrapper for labels, required indicators, and help tooltips.
|
|
|
248
248
|
|
|
249
249
|
Accessible overlay dialog for focused tasks and forms.
|
|
250
250
|
|
|
251
|
-
- Route: https://
|
|
251
|
+
- Route: https://design.vertesiahq.com/components/modal
|
|
252
252
|
- Import path: `@vertesia/ui/core`
|
|
253
253
|
- Exports: `Modal`, `ModalTitle`, `ModalBody`, `ModalFooter`
|
|
254
254
|
|
|
@@ -293,7 +293,7 @@ Accessible overlay dialog for focused tasks and forms.
|
|
|
293
293
|
|
|
294
294
|
Confirmation dialog for actions that need explicit user consent.
|
|
295
295
|
|
|
296
|
-
- Route: https://
|
|
296
|
+
- Route: https://design.vertesiahq.com/components/confirmModal
|
|
297
297
|
- Import path: `@vertesia/ui/core`
|
|
298
298
|
- Exports: `ConfirmModal`
|
|
299
299
|
|
|
@@ -316,7 +316,7 @@ Confirmation dialog for actions that need explicit user consent.
|
|
|
316
316
|
|
|
317
317
|
Delete-specific confirmation wrapper with async delete handling and toast feedback.
|
|
318
318
|
|
|
319
|
-
- Route: https://
|
|
319
|
+
- Route: https://design.vertesiahq.com/components/deleteModal
|
|
320
320
|
- Import path: `@vertesia/ui/core`
|
|
321
321
|
- Exports: `DeleteModal`
|
|
322
322
|
|
|
@@ -342,7 +342,7 @@ Delete-specific confirmation wrapper with async delete handling and toast feedba
|
|
|
342
342
|
|
|
343
343
|
Dropdown select for string or object options, with optional search, clear, and multi-select modes.
|
|
344
344
|
|
|
345
|
-
- Route: https://
|
|
345
|
+
- Route: https://design.vertesiahq.com/components/selectBox
|
|
346
346
|
- Import path: `@vertesia/ui/core`
|
|
347
347
|
- Exports: `SelectBox`
|
|
348
348
|
|
|
@@ -383,7 +383,7 @@ Dropdown select for string or object options, with optional search, clear, and m
|
|
|
383
383
|
|
|
384
384
|
Tab container driven by an array of tab objects and companion bar/panel components.
|
|
385
385
|
|
|
386
|
-
- Route: https://
|
|
386
|
+
- Route: https://design.vertesiahq.com/components/tabs
|
|
387
387
|
- Import path: `@vertesia/ui/core`
|
|
388
388
|
- Exports: `Tabs`, `TabsBar`, `TabsPanel`, `VTabs`, `VTabsBar`, `VTabsPanel`
|
|
389
389
|
|
|
@@ -408,7 +408,7 @@ Tab container driven by an array of tab objects and companion bar/panel componen
|
|
|
408
408
|
|
|
409
409
|
Compact status and category labels.
|
|
410
410
|
|
|
411
|
-
- Route: https://
|
|
411
|
+
- Route: https://design.vertesiahq.com/components/badges
|
|
412
412
|
- Import path: `@vertesia/ui/core`
|
|
413
413
|
- Exports: `Badge`, `DotBadge`
|
|
414
414
|
|
|
@@ -425,7 +425,7 @@ Compact status and category labels.
|
|
|
425
425
|
|
|
426
426
|
Semantic feedback box for success, attention, destructive, done, info, and muted messages.
|
|
427
427
|
|
|
428
|
-
- Route: https://
|
|
428
|
+
- Route: https://design.vertesiahq.com/components/messageBox
|
|
429
429
|
- Import path: `@vertesia/ui/core`
|
|
430
430
|
- Exports: `MessageBox`
|
|
431
431
|
|
|
@@ -437,7 +437,7 @@ Semantic feedback box for success, attention, destructive, done, info, and muted
|
|
|
437
437
|
|
|
438
438
|
Choice controls for boolean values and mutually exclusive option sets.
|
|
439
439
|
|
|
440
|
-
- Route: https://
|
|
440
|
+
- Route: https://design.vertesiahq.com/components/checkbox
|
|
441
441
|
- Import path: `@vertesia/ui/core`
|
|
442
442
|
- Exports: `Checkbox`, `Switch`, `RadioGroup`, `RadioGroupItem`, `RadioGroupOption`
|
|
443
443
|
|
|
@@ -451,7 +451,7 @@ Choice controls for boolean values and mutually exclusive option sets.
|
|
|
451
451
|
|
|
452
452
|
Overlay primitives for action menus, floating content, command palettes, and contextual help.
|
|
453
453
|
|
|
454
|
-
- Route: https://
|
|
454
|
+
- Route: https://design.vertesiahq.com/components/dropdown
|
|
455
455
|
- Import path: `@vertesia/ui/core`
|
|
456
456
|
- Exports: `Dropdown`, `MenuGroup`, `MenuItem`, `Popover`, `Command`, `VTooltip`, `Tooltip`
|
|
457
457
|
|
|
@@ -466,7 +466,7 @@ Overlay primitives for action menus, floating content, command palettes, and con
|
|
|
466
466
|
|
|
467
467
|
Content containers for repeated items and framed tool surfaces.
|
|
468
468
|
|
|
469
|
-
- Route: https://
|
|
469
|
+
- Route: https://design.vertesiahq.com/components/card
|
|
470
470
|
- Import path: `@vertesia/ui/core`
|
|
471
471
|
- Exports: `Card`, `CardHeader`, `CardTitle`, `CardDescription`, `CardContent`, `CardFooter`, `Panel`
|
|
472
472
|
|
|
@@ -479,7 +479,7 @@ Content containers for repeated items and framed tool surfaces.
|
|
|
479
479
|
|
|
480
480
|
Small primitives for display, separation, links, loading states, portals, and overlays.
|
|
481
481
|
|
|
482
|
-
- Route: https://
|
|
482
|
+
- Route: https://design.vertesiahq.com/components/center
|
|
483
483
|
- Import path: `@vertesia/ui/core`
|
|
484
484
|
- Exports: `Avatar`, `SvgAvatar`, `Center`, `Divider`, `Link`, `Portal`, `Spinner`, `Separator`, `Overlay`
|
|
485
485
|
|
|
@@ -493,7 +493,7 @@ Small primitives for display, separation, links, loading states, portals, and ov
|
|
|
493
493
|
|
|
494
494
|
Semantic Tailwind classes and approved lucide-react icon guidance for Vertesia apps.
|
|
495
495
|
|
|
496
|
-
- Route: https://
|
|
496
|
+
- Route: https://design.vertesiahq.com/semantic
|
|
497
497
|
- Import path: `@vertesia/ui/core`
|
|
498
498
|
- Exports: `ModeToggle`
|
|
499
499
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vertesia/ui",
|
|
3
|
-
"version": "1.5.0-dev.
|
|
3
|
+
"version": "1.5.0-dev.20260722.120446Z",
|
|
4
4
|
"description": "Vertesia UI components and and hooks",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -21,27 +21,27 @@
|
|
|
21
21
|
"hooks"
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@floating-ui/dom": "^1.
|
|
25
|
-
"@floating-ui/react": "^0.27.
|
|
24
|
+
"@floating-ui/dom": "^1.8.0",
|
|
25
|
+
"@floating-ui/react": "^0.27.20",
|
|
26
26
|
"@monaco-editor/react": "^4.7.0",
|
|
27
|
-
"@radix-ui/react-checkbox": "^1.3.
|
|
28
|
-
"@radix-ui/react-collapsible": "^1.1.
|
|
29
|
-
"@radix-ui/react-dialog": "^1.1.
|
|
27
|
+
"@radix-ui/react-checkbox": "^1.3.7",
|
|
28
|
+
"@radix-ui/react-collapsible": "^1.1.16",
|
|
29
|
+
"@radix-ui/react-dialog": "^1.1.19",
|
|
30
30
|
"@radix-ui/react-direction": "^1.1.2",
|
|
31
|
-
"@radix-ui/react-dismissable-layer": "^1.1.
|
|
32
|
-
"@radix-ui/react-dropdown-menu": "^2.1.
|
|
31
|
+
"@radix-ui/react-dismissable-layer": "^1.1.15",
|
|
32
|
+
"@radix-ui/react-dropdown-menu": "^2.1.20",
|
|
33
33
|
"@radix-ui/react-focus-guards": "^1.1.4",
|
|
34
|
-
"@radix-ui/react-focus-scope": "^1.1.
|
|
34
|
+
"@radix-ui/react-focus-scope": "^1.1.12",
|
|
35
35
|
"@radix-ui/react-label": "^2.1.11",
|
|
36
|
-
"@radix-ui/react-popover": "^1.1.
|
|
36
|
+
"@radix-ui/react-popover": "^1.1.19",
|
|
37
37
|
"@radix-ui/react-portal": "^1.1.13",
|
|
38
|
-
"@radix-ui/react-radio-group": "^1.4.
|
|
38
|
+
"@radix-ui/react-radio-group": "^1.4.3",
|
|
39
39
|
"@radix-ui/react-separator": "^1.1.11",
|
|
40
|
-
"@radix-ui/react-slider": "^1.4.
|
|
40
|
+
"@radix-ui/react-slider": "^1.4.3",
|
|
41
41
|
"@radix-ui/react-slot": "^1.3.0",
|
|
42
|
-
"@radix-ui/react-switch": "^1.3.
|
|
43
|
-
"@radix-ui/react-tabs": "^1.1.
|
|
44
|
-
"@radix-ui/react-tooltip": "^1.2.
|
|
42
|
+
"@radix-ui/react-switch": "^1.3.3",
|
|
43
|
+
"@radix-ui/react-tabs": "^1.1.17",
|
|
44
|
+
"@radix-ui/react-tooltip": "^1.2.12",
|
|
45
45
|
"ajv": "^8.20.0",
|
|
46
46
|
"ajv-formats": "^3.0.1",
|
|
47
47
|
"aria-hidden": "^1.2.6",
|
|
@@ -50,16 +50,16 @@
|
|
|
50
50
|
"cmdk": "^1.1.1",
|
|
51
51
|
"dayjs": "^1.11.21",
|
|
52
52
|
"debounce": "^3.0.0",
|
|
53
|
-
"dompurify": "^3.4.
|
|
54
|
-
"fast-xml-parser": "^5.
|
|
55
|
-
"fast-xml-validator": "^1.
|
|
56
|
-
"firebase": "^12.
|
|
53
|
+
"dompurify": "^3.4.12",
|
|
54
|
+
"fast-xml-parser": "^5.10.1",
|
|
55
|
+
"fast-xml-validator": "^1.2.0",
|
|
56
|
+
"firebase": "^12.16.0",
|
|
57
57
|
"framer-motion": "^12.42.2",
|
|
58
|
-
"i18next": "^26.3.
|
|
58
|
+
"i18next": "^26.3.6",
|
|
59
59
|
"jwt-decode": "^4.0.0",
|
|
60
60
|
"katex": "^0.17.0",
|
|
61
61
|
"lodash-es": "^4.18.1",
|
|
62
|
-
"lucide-react": "^1.
|
|
62
|
+
"lucide-react": "^1.24.0",
|
|
63
63
|
"mermaid": "^11.16.0",
|
|
64
64
|
"monaco-editor": "^0.55.1",
|
|
65
65
|
"motion": "^12.42.2",
|
|
@@ -69,12 +69,12 @@
|
|
|
69
69
|
"react-date-picker": "^12.0.2",
|
|
70
70
|
"react-dom": "19.2.7",
|
|
71
71
|
"react-error-boundary": "^6.1.2",
|
|
72
|
-
"react-i18next": "^17.0.
|
|
72
|
+
"react-i18next": "^17.0.9",
|
|
73
73
|
"react-markdown": "^10.1.0",
|
|
74
74
|
"react-pdf": "^10.4.1",
|
|
75
75
|
"react-remove-scroll": "^2.7.2",
|
|
76
76
|
"react-remove-scroll-bar": "^2.3.8",
|
|
77
|
-
"react-resizable-panels": "^4.12.
|
|
77
|
+
"react-resizable-panels": "^4.12.2",
|
|
78
78
|
"react-style-singleton": "^2.2.3",
|
|
79
79
|
"react-vega": "^8.0.0",
|
|
80
80
|
"rehype-katex": "^7.0.1",
|
|
@@ -90,27 +90,27 @@
|
|
|
90
90
|
"vega": "^6.2.0",
|
|
91
91
|
"vega-embed": "^7.1.0",
|
|
92
92
|
"vega-lite": "^6.4.3",
|
|
93
|
-
"@vertesia/
|
|
94
|
-
"@vertesia/
|
|
95
|
-
"@vertesia/
|
|
96
|
-
"@vertesia/
|
|
93
|
+
"@vertesia/client": "1.5.0-dev.20260722.120446Z",
|
|
94
|
+
"@vertesia/json": "1.5.0-dev.20260722.120446Z",
|
|
95
|
+
"@vertesia/fusion-ux": "1.5.0-dev.20260722.120446Z",
|
|
96
|
+
"@vertesia/common": "1.5.0-dev.20260722.120446Z"
|
|
97
97
|
},
|
|
98
98
|
"devDependencies": {
|
|
99
99
|
"@testing-library/react": "^16.3.2",
|
|
100
100
|
"@testing-library/user-event": "^14.6.1",
|
|
101
|
-
"@types/hast": "^3.0.
|
|
101
|
+
"@types/hast": "^3.0.5",
|
|
102
102
|
"@types/lodash-es": "^4.17.12",
|
|
103
|
-
"@types/node": "^24.13.
|
|
103
|
+
"@types/node": "^24.13.3",
|
|
104
104
|
"@types/papaparse": "^5.5.2",
|
|
105
105
|
"@types/react": "19.2.17",
|
|
106
106
|
"@types/react-dom": "19.2.3",
|
|
107
107
|
"axe-core": "^4.12.1",
|
|
108
108
|
"culori": "^4.0.2",
|
|
109
|
-
"i18next-cli": "^1.
|
|
109
|
+
"i18next-cli": "^1.65.0",
|
|
110
110
|
"jsdom": "^29.1.1",
|
|
111
|
-
"rolldown": "1.1.
|
|
111
|
+
"rolldown": "1.1.5",
|
|
112
112
|
"typescript": "^6.0.3",
|
|
113
|
-
"vitest": "^4.1.
|
|
113
|
+
"vitest": "^4.1.10",
|
|
114
114
|
"vitest-axe": "^0.1.0",
|
|
115
115
|
"wcag-contrast": "^3.0.0",
|
|
116
116
|
"@vertesia/tsconfig": "0.1.0"
|
|
@@ -180,6 +180,7 @@
|
|
|
180
180
|
"url": "https://github.com/vertesia/composableai.git",
|
|
181
181
|
"directory": "packages/ui"
|
|
182
182
|
},
|
|
183
|
+
"gitHead": "203c30e5a8ddc583ac9f1acce0f5445eb38a9551",
|
|
183
184
|
"scripts": {
|
|
184
185
|
"clean:lib": "rimraf ./lib ./tsconfig.tsbuildinfo",
|
|
185
186
|
"clean": "rimraf ./node_modules ./lib ./tsconfig.tsbuildinfo",
|
|
@@ -53,6 +53,79 @@ describe('@vertesia/ui accessibility (axe)', () => {
|
|
|
53
53
|
expect(await axe(container)).toHaveNoViolations();
|
|
54
54
|
});
|
|
55
55
|
|
|
56
|
+
it('Button.title is forwarded to aria-label so icon-only buttons are labelled', async () => {
|
|
57
|
+
const { container } = renderWithProviders(
|
|
58
|
+
<Button onClick={() => undefined} title="Refresh">
|
|
59
|
+
<span aria-hidden="true">↻</span>
|
|
60
|
+
</Button>,
|
|
61
|
+
);
|
|
62
|
+
const button = container.querySelector('button');
|
|
63
|
+
expect(button?.getAttribute('aria-label')).toBe('Refresh');
|
|
64
|
+
// The native title attribute is intentionally not forwarded — it would stack a second
|
|
65
|
+
// browser tooltip on top of the VTooltip that `title` already renders.
|
|
66
|
+
expect(button?.hasAttribute('title')).toBe(false);
|
|
67
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('Button.title does NOT override the name of a button that shows text', async () => {
|
|
71
|
+
// WCAG 2.5.3 Label in Name: the accessible name must contain the visible label, so a
|
|
72
|
+
// tooltip must never replace it. Regression test for the Playwright failure where
|
|
73
|
+
// getByRole('button', { name: 'Installed' }) stopped matching.
|
|
74
|
+
const { container } = renderWithProviders(
|
|
75
|
+
<Button onClick={() => undefined} title="Show only installed apps">
|
|
76
|
+
Installed
|
|
77
|
+
</Button>,
|
|
78
|
+
);
|
|
79
|
+
const button = container.querySelector('button');
|
|
80
|
+
expect(button?.hasAttribute('aria-label')).toBe(false);
|
|
81
|
+
expect(button?.textContent).toBe('Installed');
|
|
82
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('Button.title does not override a nested text label either', async () => {
|
|
86
|
+
const { container } = renderWithProviders(
|
|
87
|
+
<Button onClick={() => undefined} title="Open the definition editor">
|
|
88
|
+
<span aria-hidden="true">📄</span>
|
|
89
|
+
<span>Definition</span>
|
|
90
|
+
</Button>,
|
|
91
|
+
);
|
|
92
|
+
expect(container.querySelector('button')?.hasAttribute('aria-label')).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('Button.alt keeps overriding the name of a text button (legacy behavior)', async () => {
|
|
96
|
+
// Unlike `title`, the deprecated `alt` overrides the accessible name even when text is
|
|
97
|
+
// present. Call sites such as <Button alt="Launch a new agent."><Rocket/> Run</Button>
|
|
98
|
+
// depend on this, so the WCAG 2.5.3 guard must NOT apply to `alt`.
|
|
99
|
+
const { container } = renderWithProviders(
|
|
100
|
+
<Button onClick={() => undefined} alt="Launch a new agent.">
|
|
101
|
+
Run
|
|
102
|
+
</Button>,
|
|
103
|
+
);
|
|
104
|
+
expect(container.querySelector('button')?.getAttribute('aria-label')).toBe('Launch a new agent.');
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('Button.tooltipPlacement does not leak onto the DOM element', async () => {
|
|
108
|
+
const { container } = renderWithProviders(
|
|
109
|
+
<Button onClick={() => undefined} title="Zoom in" tooltipPlacement="bottom">
|
|
110
|
+
<span aria-hidden="true">+</span>
|
|
111
|
+
</Button>,
|
|
112
|
+
);
|
|
113
|
+
const button = container.querySelector('button');
|
|
114
|
+
expect(button?.getAttribute('aria-label')).toBe('Zoom in');
|
|
115
|
+
expect(button?.hasAttribute('tooltipPlacement')).toBe(false);
|
|
116
|
+
expect(button?.hasAttribute('tooltipplacement')).toBe(false);
|
|
117
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
it('an explicit aria-label wins over Button.title', async () => {
|
|
121
|
+
const { container } = renderWithProviders(
|
|
122
|
+
<Button onClick={() => undefined} title="Refresh" aria-label="Reload the results">
|
|
123
|
+
<span aria-hidden="true">↻</span>
|
|
124
|
+
</Button>,
|
|
125
|
+
);
|
|
126
|
+
expect(container.querySelector('button')?.getAttribute('aria-label')).toBe('Reload the results');
|
|
127
|
+
});
|
|
128
|
+
|
|
56
129
|
it('CopyButton has an accessible name via internal aria-label', async () => {
|
|
57
130
|
const { container } = renderWithProviders(<CopyButton content="example value" />);
|
|
58
131
|
const button = container.querySelector('button');
|
|
@@ -149,7 +149,7 @@ export function SidePanel({
|
|
|
149
149
|
|
|
150
150
|
function CloseButton({ onClose }: { onClose: () => void }) {
|
|
151
151
|
return (
|
|
152
|
-
<Button
|
|
152
|
+
<Button title="Close panel" variant="ghost" onClick={onClose}>
|
|
153
153
|
<X className="size-6" aria-hidden="true" />
|
|
154
154
|
</Button>
|
|
155
155
|
);
|
|
@@ -23,6 +23,22 @@ function useDeprecationWarning(propName: string, isUsed: boolean, message: strin
|
|
|
23
23
|
}, [isUsed, message, propName]);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
// Does this subtree contribute any text to the accessible name? Used to decide whether `title`
|
|
27
|
+
// may supply that name. Icons (lucide elements) have no string children and return false, and
|
|
28
|
+
// `aria-hidden` subtrees are skipped because they are excluded from the name computation.
|
|
29
|
+
function hasVisibleText(node: React.ReactNode): boolean {
|
|
30
|
+
return React.Children.toArray(node).some((child) => {
|
|
31
|
+
if (typeof child === 'string') return child.trim().length > 0;
|
|
32
|
+
if (typeof child === 'number') return true;
|
|
33
|
+
if (React.isValidElement(child)) {
|
|
34
|
+
const props = child.props as { children?: React.ReactNode; 'aria-hidden'?: boolean | string };
|
|
35
|
+
if (props['aria-hidden'] === true || props['aria-hidden'] === 'true') return false;
|
|
36
|
+
return hasVisibleText(props.children);
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
26
42
|
const buttonVariants = cva(
|
|
27
43
|
'hover:cursor-pointer inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
|
|
28
44
|
{
|
|
@@ -60,35 +76,66 @@ export interface ButtonProps
|
|
|
60
76
|
VariantProps<typeof buttonVariants> {
|
|
61
77
|
asChild?: boolean;
|
|
62
78
|
/**
|
|
63
|
-
* @deprecated Use `
|
|
64
|
-
*
|
|
65
|
-
*
|
|
79
|
+
* @deprecated Use `title` instead. `alt` drives the same tooltip but, unlike `title`, it
|
|
80
|
+
* overrides the accessible name even when the button shows a text label — which usually
|
|
81
|
+
* violates WCAG 2.5.3 (Label in Name). That legacy behavior is preserved so existing call
|
|
82
|
+
* sites keep announcing what they always did. Slated for removal in the next major.
|
|
66
83
|
*/
|
|
67
84
|
alt?: string;
|
|
85
|
+
/**
|
|
86
|
+
* Tooltip text. Renders a `<VTooltip>` around the button and doubles as the accessible name,
|
|
87
|
+
* so icon-only buttons need nothing else. Pass `aria-label` to override the name independently.
|
|
88
|
+
*/
|
|
68
89
|
title?: string;
|
|
90
|
+
/** Which side the `title` tooltip opens on. Defaults to `top`. */
|
|
91
|
+
tooltipPlacement?: 'top' | 'right' | 'bottom' | 'left';
|
|
69
92
|
isDisabled?: boolean;
|
|
70
93
|
isLoading?: boolean;
|
|
71
94
|
}
|
|
72
95
|
|
|
73
96
|
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
74
97
|
(
|
|
75
|
-
{
|
|
98
|
+
{
|
|
99
|
+
className,
|
|
100
|
+
variant,
|
|
101
|
+
size,
|
|
102
|
+
asChild = false,
|
|
103
|
+
alt,
|
|
104
|
+
isDisabled,
|
|
105
|
+
isLoading,
|
|
106
|
+
title,
|
|
107
|
+
tooltipPlacement = 'top',
|
|
108
|
+
onClick,
|
|
109
|
+
type,
|
|
110
|
+
...props
|
|
111
|
+
},
|
|
76
112
|
ref,
|
|
77
113
|
) => {
|
|
78
114
|
useDeprecationWarning(
|
|
79
115
|
'Button.alt',
|
|
80
116
|
alt !== undefined,
|
|
81
|
-
'use
|
|
82
|
-
'`alt`
|
|
117
|
+
'use `title` instead — it drives the same tooltip and the accessible name. ' +
|
|
118
|
+
'`alt` remains an alias for one release.',
|
|
83
119
|
);
|
|
84
120
|
|
|
85
121
|
const Comp = asChild ? Slot : 'button';
|
|
86
122
|
// Default type="button" only when rendering an actual <button>. With asChild,
|
|
87
123
|
// the rendered element may be an <a> or other tag where injecting `type` is wrong.
|
|
88
124
|
const resolvedType = asChild ? type : (type ?? 'button');
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
|
|
125
|
+
// `title` (or its deprecated alias `alt`) drives the VTooltip below. `title` also back-fills
|
|
126
|
+
// the accessible name, so an icon-only <Button title="Refresh"> is labelled without any
|
|
127
|
+
// extra props or a manual <VTooltip> wrap at the call site.
|
|
128
|
+
//
|
|
129
|
+
// That back-fill is skipped when the button already shows text: turning
|
|
130
|
+
// <Button title="Show only installed apps">Installed</Button> into aria-label="Show only
|
|
131
|
+
// installed apps" would replace the visible name with the tooltip, which breaks WCAG 2.5.3
|
|
132
|
+
// (Label in Name) and makes the control unreachable by the label users actually see.
|
|
133
|
+
//
|
|
134
|
+
// `alt` deliberately does NOT get that treatment: it has always overridden the name
|
|
135
|
+
// unconditionally, and callers rely on that. Preserving it keeps every existing call site
|
|
136
|
+
// announcing exactly what it announced before, and confines the new rule to `title`.
|
|
137
|
+
const tooltip = title ?? alt;
|
|
138
|
+
const ariaLabel = props['aria-label'] ?? alt ?? (hasVisibleText(props.children) ? undefined : title);
|
|
92
139
|
|
|
93
140
|
// asChild renders via Radix Slot, which requires exactly one React child.
|
|
94
141
|
// Skip the loader wrap in that case — Slot would reject the multi-child array.
|
|
@@ -116,9 +163,18 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
|
116
163
|
</Comp>
|
|
117
164
|
);
|
|
118
165
|
|
|
119
|
-
|
|
166
|
+
// Note: the native `title` attribute is deliberately NOT forwarded to the DOM — it would
|
|
167
|
+
// stack a second, delayed browser tooltip on top of the VTooltip. `aria-label` above is
|
|
168
|
+
// what exposes the text to screen readers and to getByRole('button', { name }).
|
|
169
|
+
if (tooltip) {
|
|
120
170
|
return (
|
|
121
|
-
<VTooltip
|
|
171
|
+
<VTooltip
|
|
172
|
+
description={tooltip}
|
|
173
|
+
asChild
|
|
174
|
+
className="cursor-pointer"
|
|
175
|
+
size="xs"
|
|
176
|
+
placement={tooltipPlacement}
|
|
177
|
+
>
|
|
122
178
|
{buttonElement}
|
|
123
179
|
</VTooltip>
|
|
124
180
|
);
|
|
@@ -190,7 +246,6 @@ const CopyButton = React.forwardRef<HTMLButtonElement, CopyButtonProps>(
|
|
|
190
246
|
size={size || 'sm'}
|
|
191
247
|
onClick={handleCopy}
|
|
192
248
|
{...props}
|
|
193
|
-
aria-label={label}
|
|
194
249
|
title={label}
|
|
195
250
|
>
|
|
196
251
|
{isCopied ? <Check className="text-success" /> : <CopyIcon className="size-4" />}
|
|
@@ -88,7 +88,7 @@ export function Modal({
|
|
|
88
88
|
<DialogClose onClick={() => handleOpenChange(false)} asChild autoFocus={false}>
|
|
89
89
|
<Button
|
|
90
90
|
variant="outline"
|
|
91
|
-
|
|
91
|
+
title="Close"
|
|
92
92
|
className="data-[state=open]:bg-accent opacity-70 hover:opacity-100 rounded-sm focus:outline-none focus:ring-2 focus:ring-ring ring-offset-background focus:ring-offset-2 data-[state=open]:text-muted-foreground transition-opacity disabled:pointer-events-none"
|
|
93
93
|
>
|
|
94
94
|
<X className="size-4" />
|