@semiont/react-ui 0.5.2 → 0.5.4
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/dist/{PdfAnnotationCanvas.client-5QESNO5H.mjs → PdfAnnotationCanvas.client-CN3C3S55.js} +2 -2
- package/dist/{ar-3W37O3R3.mjs → ar-U2EXWUMQ.js} +3 -21
- package/dist/ar-U2EXWUMQ.js.map +1 -0
- package/dist/assets/favicons/SemiontFavicon.d.ts +9 -0
- package/dist/assets/favicons/SemiontFavicon.d.ts.map +1 -0
- package/dist/assets/favicons/index.d.ts +12 -0
- package/dist/assets/favicons/index.d.ts.map +1 -0
- package/dist/{bn-JZTJLMVE.mjs → bn-DRJGV772.js} +3 -21
- package/dist/bn-DRJGV772.js.map +1 -0
- package/dist/{chunk-7VWNZ5YX.mjs → chunk-3Q3TUKWP.js} +32 -32
- package/dist/{chunk-NOD3NCXE.mjs → chunk-GERSK2DY.js} +3 -21
- package/dist/chunk-GERSK2DY.js.map +1 -0
- package/dist/{chunk-D4GAAQMM.mjs → chunk-K6BJDL2I.js} +1 -1
- package/dist/components/AnnotateReferencesProgressWidget.d.ts +15 -0
- package/dist/components/AnnotateReferencesProgressWidget.d.ts.map +1 -0
- package/dist/components/Button/Button.d.ts +69 -0
- package/dist/components/Button/Button.d.ts.map +1 -0
- package/dist/components/CodeMirrorRenderer.d.ts +25 -0
- package/dist/components/CodeMirrorRenderer.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +30 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/LiveRegion.d.ts +41 -0
- package/dist/components/LiveRegion.d.ts.map +1 -0
- package/dist/components/ProtectedErrorBoundary.d.ts +27 -0
- package/dist/components/ProtectedErrorBoundary.d.ts.map +1 -0
- package/dist/components/ResizeHandle.d.ts +39 -0
- package/dist/components/ResizeHandle.d.ts.map +1 -0
- package/dist/components/ResourceTagsInline.d.ts +10 -0
- package/dist/components/ResourceTagsInline.d.ts.map +1 -0
- package/dist/components/SessionExpiryBanner.d.ts +2 -0
- package/dist/components/SessionExpiryBanner.d.ts.map +1 -0
- package/dist/components/SessionTimer.d.ts +2 -0
- package/dist/components/SessionTimer.d.ts.map +1 -0
- package/dist/components/StatusDisplay.d.ts +9 -0
- package/dist/components/StatusDisplay.d.ts.map +1 -0
- package/dist/components/Toast.d.ts +27 -0
- package/dist/components/Toast.d.ts.map +1 -0
- package/dist/components/Toolbar.d.ts +15 -0
- package/dist/components/Toolbar.d.ts.map +1 -0
- package/dist/components/UserMenuSkeleton.d.ts +2 -0
- package/dist/components/UserMenuSkeleton.d.ts.map +1 -0
- package/dist/components/annotation/AnnotateToolbar.d.ts +29 -0
- package/dist/components/annotation/AnnotateToolbar.d.ts.map +1 -0
- package/dist/components/annotation-popups/JsonLdView.d.ts +8 -0
- package/dist/components/annotation-popups/JsonLdView.d.ts.map +1 -0
- package/dist/components/annotation-popups/SharedPopupElements.d.ts +28 -0
- package/dist/components/annotation-popups/SharedPopupElements.d.ts.map +1 -0
- package/dist/components/branding/SemiontBranding.d.ts +13 -0
- package/dist/components/branding/SemiontBranding.d.ts.map +1 -0
- package/dist/components/error-states/ResourceErrorState.d.ts +11 -0
- package/dist/components/error-states/ResourceErrorState.d.ts.map +1 -0
- package/dist/components/image-annotation/AnnotationOverlay.d.ts +22 -0
- package/dist/components/image-annotation/AnnotationOverlay.d.ts.map +1 -0
- package/dist/components/image-annotation/SvgDrawingCanvas.d.ts +23 -0
- package/dist/components/image-annotation/SvgDrawingCanvas.d.ts.map +1 -0
- package/dist/components/layout/LeftSidebar.d.ts +24 -0
- package/dist/components/layout/LeftSidebar.d.ts.map +1 -0
- package/dist/components/layout/PageLayout.d.ts +21 -0
- package/dist/components/layout/PageLayout.d.ts.map +1 -0
- package/dist/components/layout/SkipLinks.d.ts +8 -0
- package/dist/components/layout/SkipLinks.d.ts.map +1 -0
- package/dist/components/layout/UnifiedHeader.d.ts +21 -0
- package/dist/components/layout/UnifiedHeader.d.ts.map +1 -0
- package/dist/components/loading-states/ComposeLoadingState.d.ts +10 -0
- package/dist/components/loading-states/ComposeLoadingState.d.ts.map +1 -0
- package/dist/components/loading-states/ResourceLoadingState.d.ts +7 -0
- package/dist/components/loading-states/ResourceLoadingState.d.ts.map +1 -0
- package/dist/components/modals/ConfigureGenerationStep.d.ts +36 -0
- package/dist/components/modals/ConfigureGenerationStep.d.ts.map +1 -0
- package/dist/components/modals/ConfigureSearchStep.d.ts +21 -0
- package/dist/components/modals/ConfigureSearchStep.d.ts.map +1 -0
- package/dist/components/modals/ContextSummary.d.ts +14 -0
- package/dist/components/modals/ContextSummary.d.ts.map +1 -0
- package/dist/components/modals/GatherContextStep.d.ts +23 -0
- package/dist/components/modals/GatherContextStep.d.ts.map +1 -0
- package/dist/components/modals/KeyboardShortcutsHelpModal.d.ts +8 -0
- package/dist/components/modals/KeyboardShortcutsHelpModal.d.ts.map +1 -0
- package/dist/components/modals/PermissionDeniedModal.d.ts +12 -0
- package/dist/components/modals/PermissionDeniedModal.d.ts.map +1 -0
- package/dist/components/modals/ReferenceWizardModal.d.ts +64 -0
- package/dist/components/modals/ReferenceWizardModal.d.ts.map +1 -0
- package/dist/components/modals/ResourceSearchModal.d.ts +16 -0
- package/dist/components/modals/ResourceSearchModal.d.ts.map +1 -0
- package/dist/components/modals/SearchModal.d.ts +20 -0
- package/dist/components/modals/SearchModal.d.ts.map +1 -0
- package/dist/components/modals/SearchResultsStep.d.ts +22 -0
- package/dist/components/modals/SearchResultsStep.d.ts.map +1 -0
- package/dist/components/modals/SessionExpiredModal.d.ts +12 -0
- package/dist/components/modals/SessionExpiredModal.d.ts.map +1 -0
- package/dist/components/navigation/CollapsibleResourceNavigation.d.ts +13 -0
- package/dist/components/navigation/CollapsibleResourceNavigation.d.ts.map +1 -0
- package/dist/components/navigation/Footer.d.ts +20 -0
- package/dist/components/navigation/Footer.d.ts.map +1 -0
- package/dist/components/navigation/NavigationMenu.d.ts +18 -0
- package/dist/components/navigation/NavigationMenu.d.ts.map +1 -0
- package/dist/components/navigation/ObservableLink.d.ts +52 -0
- package/dist/components/navigation/ObservableLink.d.ts.map +1 -0
- package/dist/components/navigation/SimpleNavigation.d.ts +35 -0
- package/dist/components/navigation/SimpleNavigation.d.ts.map +1 -0
- package/dist/components/navigation/SortableResourceTab.d.ts +7 -0
- package/dist/components/navigation/SortableResourceTab.d.ts.map +1 -0
- package/dist/components/pdf-annotation/PdfAnnotationCanvas.client.d.ts +8 -0
- package/dist/components/pdf-annotation/PdfAnnotationCanvas.client.d.ts.map +1 -0
- package/dist/components/pdf-annotation/PdfAnnotationCanvas.d.ts +25 -0
- package/dist/components/pdf-annotation/PdfAnnotationCanvas.d.ts.map +1 -0
- package/dist/components/resource/AnnotateView.d.ts +29 -0
- package/dist/components/resource/AnnotateView.d.ts.map +1 -0
- package/dist/components/resource/AnnotationHistory.d.ts +14 -0
- package/dist/components/resource/AnnotationHistory.d.ts.map +1 -0
- package/dist/components/resource/BrowseView.d.ts +28 -0
- package/dist/components/resource/BrowseView.d.ts.map +1 -0
- package/dist/components/resource/HistoryEvent.d.ts +19 -0
- package/dist/components/resource/HistoryEvent.d.ts.map +1 -0
- package/dist/components/resource/ResourceViewer.d.ts +46 -0
- package/dist/components/resource/ResourceViewer.d.ts.map +1 -0
- package/dist/components/resource/event-formatting.d.ts +61 -0
- package/dist/components/resource/event-formatting.d.ts.map +1 -0
- package/dist/components/resource/panels/AssessmentEntry.d.ts +11 -0
- package/dist/components/resource/panels/AssessmentEntry.d.ts.map +1 -0
- package/dist/components/resource/panels/AssessmentPanel.d.ts +32 -0
- package/dist/components/resource/panels/AssessmentPanel.d.ts.map +1 -0
- package/dist/components/resource/panels/AssistSection.d.ts +27 -0
- package/dist/components/resource/panels/AssistSection.d.ts.map +1 -0
- package/dist/components/resource/panels/CollaborationPanel.d.ts +28 -0
- package/dist/components/resource/panels/CollaborationPanel.d.ts.map +1 -0
- package/dist/components/resource/panels/CommentEntry.d.ts +12 -0
- package/dist/components/resource/panels/CommentEntry.d.ts.map +1 -0
- package/dist/components/resource/panels/CommentsPanel.d.ts +32 -0
- package/dist/components/resource/panels/CommentsPanel.d.ts.map +1 -0
- package/dist/components/resource/panels/HighlightEntry.d.ts +11 -0
- package/dist/components/resource/panels/HighlightEntry.d.ts.map +1 -0
- package/dist/components/resource/panels/HighlightPanel.d.ts +30 -0
- package/dist/components/resource/panels/HighlightPanel.d.ts.map +1 -0
- package/dist/components/resource/panels/JsonLdPanel.d.ts +9 -0
- package/dist/components/resource/panels/JsonLdPanel.d.ts.map +1 -0
- package/dist/components/resource/panels/PanelHeader.d.ts +13 -0
- package/dist/components/resource/panels/PanelHeader.d.ts.map +1 -0
- package/dist/components/resource/panels/ReferenceEntry.d.ts +15 -0
- package/dist/components/resource/panels/ReferenceEntry.d.ts.map +1 -0
- package/dist/components/resource/panels/ReferencesPanel.d.ts +43 -0
- package/dist/components/resource/panels/ReferencesPanel.d.ts.map +1 -0
- package/dist/components/resource/panels/ResourceInfoPanel.d.ts +27 -0
- package/dist/components/resource/panels/ResourceInfoPanel.d.ts.map +1 -0
- package/dist/components/resource/panels/StatisticsPanel.d.ts +12 -0
- package/dist/components/resource/panels/StatisticsPanel.d.ts.map +1 -0
- package/dist/components/resource/panels/TagEntry.d.ts +11 -0
- package/dist/components/resource/panels/TagEntry.d.ts.map +1 -0
- package/dist/components/resource/panels/TaggingPanel.d.ts +34 -0
- package/dist/components/resource/panels/TaggingPanel.d.ts.map +1 -0
- package/dist/components/resource/panels/UnifiedAnnotationsPanel.d.ts +52 -0
- package/dist/components/resource/panels/UnifiedAnnotationsPanel.d.ts.map +1 -0
- package/dist/components/resource/panels/agent-label.d.ts +11 -0
- package/dist/components/resource/panels/agent-label.d.ts.map +1 -0
- package/dist/components/settings/SettingsPanel.d.ts +19 -0
- package/dist/components/settings/SettingsPanel.d.ts.map +1 -0
- package/dist/components/viewers/ImageViewer.d.ts +8 -0
- package/dist/components/viewers/ImageViewer.d.ts.map +1 -0
- package/dist/components/viewers/index.d.ts +2 -0
- package/dist/components/viewers/index.d.ts.map +1 -0
- package/dist/contexts/AnnotationContext.d.ts +46 -0
- package/dist/contexts/AnnotationContext.d.ts.map +1 -0
- package/dist/contexts/ResourceAnnotationsContext.d.ts +14 -0
- package/dist/contexts/ResourceAnnotationsContext.d.ts.map +1 -0
- package/dist/contexts/RoutingContext.d.ts +59 -0
- package/dist/contexts/RoutingContext.d.ts.map +1 -0
- package/dist/contexts/ThemeContext.d.ts +15 -0
- package/dist/contexts/ThemeContext.d.ts.map +1 -0
- package/dist/contexts/TranslationContext.d.ts +51 -0
- package/dist/contexts/TranslationContext.d.ts.map +1 -0
- package/dist/contexts/useEventSubscription.d.ts +41 -0
- package/dist/contexts/useEventSubscription.d.ts.map +1 -0
- package/dist/{cs-XYHH7HNE.mjs → cs-PTWDM23V.js} +3 -21
- package/dist/cs-PTWDM23V.js.map +1 -0
- package/dist/{da-MZKIECVT.mjs → da-KSNIKYSS.js} +3 -21
- package/dist/da-KSNIKYSS.js.map +1 -0
- package/dist/{de-AYXTMRQW.mjs → de-F2XBEWFY.js} +3 -21
- package/dist/de-F2XBEWFY.js.map +1 -0
- package/dist/design-tokens/index.d.ts +178 -0
- package/dist/design-tokens/index.d.ts.map +1 -0
- package/dist/{el-A6CVQWAW.mjs → el-DLD2GWAP.js} +3 -21
- package/dist/el-DLD2GWAP.js.map +1 -0
- package/dist/{en-YPQQBI4T.mjs → en-L45VK7BS.js} +3 -3
- package/dist/{es-M2HXLJGT.mjs → es-WLPYWGB5.js} +3 -21
- package/dist/es-WLPYWGB5.js.map +1 -0
- package/dist/{fa-V6JZJDYP.mjs → fa-BAXHSDZG.js} +3 -21
- package/dist/fa-BAXHSDZG.js.map +1 -0
- package/dist/features/admin-devops/components/AdminDevOpsPage.d.ts +33 -0
- package/dist/features/admin-devops/components/AdminDevOpsPage.d.ts.map +1 -0
- package/dist/features/admin-exchange/components/AdminExchangePage.d.ts +37 -0
- package/dist/features/admin-exchange/components/AdminExchangePage.d.ts.map +1 -0
- package/dist/features/admin-exchange/components/ExportCard.d.ts +18 -0
- package/dist/features/admin-exchange/components/ExportCard.d.ts.map +1 -0
- package/dist/features/admin-exchange/components/ImportCard.d.ts +32 -0
- package/dist/features/admin-exchange/components/ImportCard.d.ts.map +1 -0
- package/dist/features/admin-exchange/components/ImportProgress.d.ts +26 -0
- package/dist/features/admin-exchange/components/ImportProgress.d.ts.map +1 -0
- package/dist/features/admin-exchange/state/exchange-state-unit.d.ts +31 -0
- package/dist/features/admin-exchange/state/exchange-state-unit.d.ts.map +1 -0
- package/dist/features/admin-security/components/AdminSecurityPage.d.ts +42 -0
- package/dist/features/admin-security/components/AdminSecurityPage.d.ts.map +1 -0
- package/dist/features/admin-security/state/admin-security-state-unit.d.ts +12 -0
- package/dist/features/admin-security/state/admin-security-state-unit.d.ts.map +1 -0
- package/dist/features/admin-users/components/AdminUsersPage.d.ts +88 -0
- package/dist/features/admin-users/components/AdminUsersPage.d.ts.map +1 -0
- package/dist/features/admin-users/state/admin-users-state-unit.d.ts +17 -0
- package/dist/features/admin-users/state/admin-users-state-unit.d.ts.map +1 -0
- package/dist/features/auth/components/AuthErrorDisplay.d.ts +34 -0
- package/dist/features/auth/components/AuthErrorDisplay.d.ts.map +1 -0
- package/dist/features/auth/components/SignInForm.d.ts +80 -0
- package/dist/features/auth/components/SignInForm.d.ts.map +1 -0
- package/dist/features/auth/components/SignUpForm.d.ts +39 -0
- package/dist/features/auth/components/SignUpForm.d.ts.map +1 -0
- package/dist/features/auth-welcome/components/WelcomePage.d.ts +62 -0
- package/dist/features/auth-welcome/components/WelcomePage.d.ts.map +1 -0
- package/dist/features/auth-welcome/state/welcome-state-unit.d.ts +12 -0
- package/dist/features/auth-welcome/state/welcome-state-unit.d.ts.map +1 -0
- package/dist/features/moderate-entity-tags/components/EntityTagsPage.d.ts +32 -0
- package/dist/features/moderate-entity-tags/components/EntityTagsPage.d.ts.map +1 -0
- package/dist/features/moderate-entity-tags/state/entity-tags-state-unit.d.ts +16 -0
- package/dist/features/moderate-entity-tags/state/entity-tags-state-unit.d.ts.map +1 -0
- package/dist/features/moderate-recent/components/RecentDocumentsPage.d.ts +27 -0
- package/dist/features/moderate-recent/components/RecentDocumentsPage.d.ts.map +1 -0
- package/dist/features/moderate-tag-schemas/components/TagSchemasPage.d.ts +25 -0
- package/dist/features/moderate-tag-schemas/components/TagSchemasPage.d.ts.map +1 -0
- package/dist/features/moderation-linked-data/components/LinkedDataPage.d.ts +38 -0
- package/dist/features/moderation-linked-data/components/LinkedDataPage.d.ts.map +1 -0
- package/dist/features/resource-compose/components/ResourceComposePage.d.ts +83 -0
- package/dist/features/resource-compose/components/ResourceComposePage.d.ts.map +1 -0
- package/dist/features/resource-compose/components/UploadProgressBar.d.ts +23 -0
- package/dist/features/resource-compose/components/UploadProgressBar.d.ts.map +1 -0
- package/dist/features/resource-compose/state/compose-page-state-unit.d.ts +59 -0
- package/dist/features/resource-compose/state/compose-page-state-unit.d.ts.map +1 -0
- package/dist/features/resource-discovery/components/ResourceCard.d.ts +17 -0
- package/dist/features/resource-discovery/components/ResourceCard.d.ts.map +1 -0
- package/dist/features/resource-discovery/components/ResourceDiscoveryPage.d.ts +43 -0
- package/dist/features/resource-discovery/components/ResourceDiscoveryPage.d.ts.map +1 -0
- package/dist/features/resource-discovery/state/discover-state-unit.d.ts +15 -0
- package/dist/features/resource-discovery/state/discover-state-unit.d.ts.map +1 -0
- package/dist/features/resource-viewer/components/ResourceViewerPage.d.ts +80 -0
- package/dist/features/resource-viewer/components/ResourceViewerPage.d.ts.map +1 -0
- package/dist/features/resource-viewer/state/resource-loader-state-unit.d.ts +11 -0
- package/dist/features/resource-viewer/state/resource-loader-state-unit.d.ts.map +1 -0
- package/dist/features/resource-viewer/state/resource-viewer-page-state-unit.d.ts +48 -0
- package/dist/features/resource-viewer/state/resource-viewer-page-state-unit.d.ts.map +1 -0
- package/dist/{fi-ONDTZ5H7.mjs → fi-FCHSYVOT.js} +3 -21
- package/dist/fi-FCHSYVOT.js.map +1 -0
- package/dist/{fr-PAPV4H4G.mjs → fr-3UERBSL6.js} +3 -21
- package/dist/fr-3UERBSL6.js.map +1 -0
- package/dist/{he-F6VTLJLW.mjs → he-F6F3FV2K.js} +3 -21
- package/dist/he-F6F3FV2K.js.map +1 -0
- package/dist/{hi-CFUAV4BF.mjs → hi-4BK6IK7Q.js} +3 -21
- package/dist/hi-4BK6IK7Q.js.map +1 -0
- package/dist/hooks/useDebounce.d.ts +29 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/hooks/useDragAnnouncements.d.ts +12 -0
- package/dist/hooks/useDragAnnouncements.d.ts.map +1 -0
- package/dist/hooks/useHoverDelay.d.ts +8 -0
- package/dist/hooks/useHoverDelay.d.ts.map +1 -0
- package/dist/hooks/useHoverEmitter.d.ts +8 -0
- package/dist/hooks/useHoverEmitter.d.ts.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts +29 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/hooks/useLineNumbers.d.ts +8 -0
- package/dist/hooks/useLineNumbers.d.ts.map +1 -0
- package/dist/hooks/useMediaToken.d.ts +7 -0
- package/dist/hooks/useMediaToken.d.ts.map +1 -0
- package/dist/hooks/useObservable.d.ts +23 -0
- package/dist/hooks/useObservable.d.ts.map +1 -0
- package/dist/hooks/useObservableBrowse.d.ts +70 -0
- package/dist/hooks/useObservableBrowse.d.ts.map +1 -0
- package/dist/hooks/usePanelWidth.d.ts +37 -0
- package/dist/hooks/usePanelWidth.d.ts.map +1 -0
- package/dist/hooks/useResourceContent.d.ts +7 -0
- package/dist/hooks/useResourceContent.d.ts.map +1 -0
- package/dist/hooks/useRovingTabIndex.d.ts +13 -0
- package/dist/hooks/useRovingTabIndex.d.ts.map +1 -0
- package/dist/hooks/useSearchAnnouncements.d.ts +10 -0
- package/dist/hooks/useSearchAnnouncements.d.ts.map +1 -0
- package/dist/hooks/useSessionExpiry.d.ts +10 -0
- package/dist/hooks/useSessionExpiry.d.ts.map +1 -0
- package/dist/hooks/useShellStateUnit.d.ts +9 -0
- package/dist/hooks/useShellStateUnit.d.ts.map +1 -0
- package/dist/hooks/useStateUnit.d.ts +3 -0
- package/dist/hooks/useStateUnit.d.ts.map +1 -0
- package/dist/hooks/useUI.d.ts +24 -0
- package/dist/hooks/useUI.d.ts.map +1 -0
- package/dist/{id-NBKLCCI7.mjs → id-7ECCWP3J.js} +3 -21
- package/dist/id-7ECCWP3J.js.map +1 -0
- package/dist/index.d.ts +150 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/{index.mjs → index.js} +155 -305
- package/dist/index.js.map +1 -0
- package/dist/integrations/css-modules-helper.d.ts +114 -0
- package/dist/integrations/css-modules-helper.d.ts.map +1 -0
- package/dist/integrations/styled-components-theme.d.ts +95 -0
- package/dist/integrations/styled-components-theme.d.ts.map +1 -0
- package/dist/integrations/tailwind-plugin.d.cts +3 -0
- package/dist/integrations/tailwind-plugin.d.cts.map +1 -0
- package/dist/{it-SLSOWVVU.mjs → it-234Z6XK6.js} +3 -21
- package/dist/it-234Z6XK6.js.map +1 -0
- package/dist/{ja-L5IG4ECE.mjs → ja-PJWQI4OQ.js} +3 -21
- package/dist/ja-PJWQI4OQ.js.map +1 -0
- package/dist/{ko-QYMTULKK.mjs → ko-APUEW2RS.js} +3 -21
- package/dist/ko-APUEW2RS.js.map +1 -0
- package/dist/lib/annotation-overlay.d.ts +71 -0
- package/dist/lib/annotation-overlay.d.ts.map +1 -0
- package/dist/lib/annotation-registry.d.ts +62 -0
- package/dist/lib/annotation-registry.d.ts.map +1 -0
- package/dist/lib/browser-pdfjs.d.ts +93 -0
- package/dist/lib/browser-pdfjs.d.ts.map +1 -0
- package/dist/lib/button-styles.d.ts +27 -0
- package/dist/lib/button-styles.d.ts.map +1 -0
- package/dist/lib/codemirror-handlers.d.ts +52 -0
- package/dist/lib/codemirror-handlers.d.ts.map +1 -0
- package/dist/lib/codemirror-json-theme.d.ts +8 -0
- package/dist/lib/codemirror-json-theme.d.ts.map +1 -0
- package/dist/lib/codemirror-logic.d.ts +66 -0
- package/dist/lib/codemirror-logic.d.ts.map +1 -0
- package/dist/lib/codemirror-widgets.d.ts +39 -0
- package/dist/lib/codemirror-widgets.d.ts.map +1 -0
- package/dist/lib/formatTime.d.ts +2 -0
- package/dist/lib/formatTime.d.ts.map +1 -0
- package/dist/lib/media-shapes.d.ts +51 -0
- package/dist/lib/media-shapes.d.ts.map +1 -0
- package/dist/lib/pdf-coordinates.d.ts +69 -0
- package/dist/lib/pdf-coordinates.d.ts.map +1 -0
- package/dist/lib/resource-utils.d.ts +22 -0
- package/dist/lib/resource-utils.d.ts.map +1 -0
- package/dist/lib/scroll-utils.d.ts +20 -0
- package/dist/lib/scroll-utils.d.ts.map +1 -0
- package/dist/lib/text-segmentation.d.ts +25 -0
- package/dist/lib/text-segmentation.d.ts.map +1 -0
- package/dist/lib/text-selection-handler.d.ts +46 -0
- package/dist/lib/text-selection-handler.d.ts.map +1 -0
- package/dist/lib/validation.d.ts +47 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/{ms-5DGSFKM2.mjs → ms-PJBZWZWD.js} +3 -21
- package/dist/ms-PJBZWZWD.js.map +1 -0
- package/dist/{nl-VZPCGONO.mjs → nl-L4C3ZBCU.js} +3 -21
- package/dist/nl-L4C3ZBCU.js.map +1 -0
- package/dist/{no-MF6F352I.mjs → no-QE5N5KNG.js} +3 -21
- package/dist/no-QE5N5KNG.js.map +1 -0
- package/dist/{pl-WIK72JUO.mjs → pl-5Q2D23PD.js} +3 -21
- package/dist/pl-5Q2D23PD.js.map +1 -0
- package/dist/{pt-RRP5ZF6A.mjs → pt-AIGUOIOC.js} +3 -21
- package/dist/pt-AIGUOIOC.js.map +1 -0
- package/dist/{ro-XHQLC3T7.mjs → ro-T56CSHTY.js} +3 -21
- package/dist/ro-T56CSHTY.js.map +1 -0
- package/dist/session/SemiontProvider.d.ts +28 -0
- package/dist/session/SemiontProvider.d.ts.map +1 -0
- package/dist/session/web-browser-storage.d.ts +19 -0
- package/dist/session/web-browser-storage.d.ts.map +1 -0
- package/dist/state/session-state-unit.d.ts +9 -0
- package/dist/state/session-state-unit.d.ts.map +1 -0
- package/dist/state/shell-state-unit.d.ts +33 -0
- package/dist/state/shell-state-unit.d.ts.map +1 -0
- package/dist/{sv-EWULDN6E.mjs → sv-L4TJQ2UH.js} +3 -21
- package/dist/sv-L4TJQ2UH.js.map +1 -0
- package/dist/{test-utils.d.mts → test-utils.d.ts} +18 -21
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/{test-utils.mjs → test-utils.js} +5 -5
- package/dist/{th-TGOBHFG4.mjs → th-6O7Y6O2Q.js} +3 -21
- package/dist/th-6O7Y6O2Q.js.map +1 -0
- package/dist/{tr-LMMPBMV7.mjs → tr-D4CQCSNO.js} +3 -21
- package/dist/tr-D4CQCSNO.js.map +1 -0
- package/dist/types/AnnotationManager.d.ts +53 -0
- package/dist/types/AnnotationManager.d.ts.map +1 -0
- package/dist/{TranslationManager-9Xj3MIWQ.d.mts → types/TranslationManager.d.ts} +2 -3
- package/dist/types/TranslationManager.d.ts.map +1 -0
- package/dist/types/annotation-props.d.ts +108 -0
- package/dist/types/annotation-props.d.ts.map +1 -0
- package/dist/types/collapsible-navigation.d.ts +69 -0
- package/dist/types/collapsible-navigation.d.ts.map +1 -0
- package/dist/types/modals.d.ts +77 -0
- package/dist/types/modals.d.ts.map +1 -0
- package/dist/types/navigation.d.ts +35 -0
- package/dist/types/navigation.d.ts.map +1 -0
- package/dist/types/resource-viewer.d.ts +19 -0
- package/dist/types/resource-viewer.d.ts.map +1 -0
- package/dist/types/simple-navigation.d.ts +15 -0
- package/dist/types/simple-navigation.d.ts.map +1 -0
- package/dist/types/translation.d.ts +5 -0
- package/dist/types/translation.d.ts.map +1 -0
- package/dist/{uk-IPGRRJY6.mjs → uk-2HMQG6ND.js} +3 -21
- package/dist/uk-2HMQG6ND.js.map +1 -0
- package/dist/{vi-Q676OJQS.mjs → vi-XVJ4RUEJ.js} +3 -21
- package/dist/vi-XVJ4RUEJ.js.map +1 -0
- package/dist/{zh-F3MTWQDX.mjs → zh-K2KDPGHK.js} +3 -21
- package/dist/zh-K2KDPGHK.js.map +1 -0
- package/package.json +19 -18
- package/src/components/resource/HistoryEvent.tsx +0 -3
- package/src/components/resource/__tests__/HistoryEvent.test.tsx +1 -4
- package/src/components/resource/__tests__/event-formatting.test.ts +2 -14
- package/src/components/resource/event-formatting.ts +3 -4
- package/src/components/resource/panels/AssessmentEntry.tsx +4 -1
- package/src/components/resource/panels/CommentEntry.tsx +4 -1
- package/src/components/resource/panels/HighlightEntry.tsx +4 -1
- package/src/components/resource/panels/ReferenceEntry.tsx +4 -1
- package/src/components/resource/panels/ResourceInfoPanel.tsx +11 -23
- package/src/components/resource/panels/TagEntry.tsx +17 -3
- package/src/components/resource/panels/TaggingPanel.tsx +83 -41
- package/src/components/resource/panels/__tests__/CommentEntry.test.tsx +2 -2
- package/src/components/resource/panels/__tests__/ResourceInfoPanel.test.tsx +12 -16
- package/src/components/resource/panels/__tests__/TagEntry.test.tsx +26 -19
- package/src/components/resource/panels/__tests__/TaggingPanel.test.tsx +128 -38
- package/src/components/resource/panels/__tests__/agent-label.test.ts +93 -0
- package/src/components/resource/panels/agent-label.ts +20 -0
- package/src/features/moderate-tag-schemas/components/TagSchemasPage.tsx +3 -3
- package/src/features/resource-compose/state/compose-page-state-unit.ts +0 -1
- package/src/features/resource-viewer/components/ResourceViewerPage.tsx +0 -1
- package/translations/ar.json +1 -19
- package/translations/bn.json +1 -19
- package/translations/cs.json +1 -19
- package/translations/da.json +1 -19
- package/translations/de.json +1 -19
- package/translations/el.json +1 -19
- package/translations/en.json +3 -21
- package/translations/es.json +1 -19
- package/translations/fa.json +1 -19
- package/translations/fi.json +1 -19
- package/translations/fr.json +1 -19
- package/translations/he.json +1 -19
- package/translations/hi.json +1 -19
- package/translations/id.json +1 -19
- package/translations/it.json +1 -19
- package/translations/ja.json +1 -19
- package/translations/ko.json +1 -19
- package/translations/ms.json +1 -19
- package/translations/nl.json +1 -19
- package/translations/no.json +1 -19
- package/translations/pl.json +1 -19
- package/translations/pt.json +1 -19
- package/translations/ro.json +1 -19
- package/translations/sv.json +1 -19
- package/translations/th.json +1 -19
- package/translations/tr.json +1 -19
- package/translations/uk.json +1 -19
- package/translations/vi.json +1 -19
- package/translations/zh.json +1 -19
- package/dist/ar-3W37O3R3.mjs.map +0 -1
- package/dist/bn-JZTJLMVE.mjs.map +0 -1
- package/dist/chunk-NOD3NCXE.mjs.map +0 -1
- package/dist/cs-XYHH7HNE.mjs.map +0 -1
- package/dist/da-MZKIECVT.mjs.map +0 -1
- package/dist/de-AYXTMRQW.mjs.map +0 -1
- package/dist/el-A6CVQWAW.mjs.map +0 -1
- package/dist/es-M2HXLJGT.mjs.map +0 -1
- package/dist/fa-V6JZJDYP.mjs.map +0 -1
- package/dist/fi-ONDTZ5H7.mjs.map +0 -1
- package/dist/fr-PAPV4H4G.mjs.map +0 -1
- package/dist/he-F6VTLJLW.mjs.map +0 -1
- package/dist/hi-CFUAV4BF.mjs.map +0 -1
- package/dist/id-NBKLCCI7.mjs.map +0 -1
- package/dist/index.d.mts +0 -3548
- package/dist/index.mjs.map +0 -1
- package/dist/it-SLSOWVVU.mjs.map +0 -1
- package/dist/ja-L5IG4ECE.mjs.map +0 -1
- package/dist/ko-QYMTULKK.mjs.map +0 -1
- package/dist/ms-5DGSFKM2.mjs.map +0 -1
- package/dist/nl-VZPCGONO.mjs.map +0 -1
- package/dist/no-MF6F352I.mjs.map +0 -1
- package/dist/pl-WIK72JUO.mjs.map +0 -1
- package/dist/pt-RRP5ZF6A.mjs.map +0 -1
- package/dist/ro-XHQLC3T7.mjs.map +0 -1
- package/dist/sv-EWULDN6E.mjs.map +0 -1
- package/dist/th-TGOBHFG4.mjs.map +0 -1
- package/dist/tr-LMMPBMV7.mjs.map +0 -1
- package/dist/uk-IPGRRJY6.mjs.map +0 -1
- package/dist/vi-Q676OJQS.mjs.map +0 -1
- package/dist/zh-F3MTWQDX.mjs.map +0 -1
- /package/dist/{PdfAnnotationCanvas.client-5QESNO5H.mjs.map → PdfAnnotationCanvas.client-CN3C3S55.js.map} +0 -0
- /package/dist/{chunk-7VWNZ5YX.mjs.map → chunk-3Q3TUKWP.js.map} +0 -0
- /package/dist/{chunk-D4GAAQMM.mjs.map → chunk-K6BJDL2I.js.map} +0 -0
- /package/dist/{en-YPQQBI4T.mjs.map → en-L45VK7BS.js.map} +0 -0
- /package/dist/{test-utils.mjs.map → test-utils.js.map} +0 -0
- /package/src/integrations/{tailwind-plugin.js → tailwind-plugin.cjs} +0 -0
|
@@ -27,10 +27,8 @@ vi.mock('../../../../contexts/TranslationContext', () => ({
|
|
|
27
27
|
provenance: 'Provenance',
|
|
28
28
|
createdAt: 'Created',
|
|
29
29
|
modifiedAt: 'Modified',
|
|
30
|
-
creationMethod: 'How created',
|
|
31
30
|
attributedTo: 'Attributed to',
|
|
32
31
|
derivedFrom: 'Derived from',
|
|
33
|
-
generatedBy: 'Generated by',
|
|
34
32
|
};
|
|
35
33
|
return translations[key] || key;
|
|
36
34
|
}),
|
|
@@ -293,14 +291,6 @@ describe('ResourceInfoPanel Component', () => {
|
|
|
293
291
|
expect(screen.getByText('Modified')).toBeInTheDocument();
|
|
294
292
|
});
|
|
295
293
|
|
|
296
|
-
it('should render creationMethod when provided', () => {
|
|
297
|
-
renderWithEventBus(
|
|
298
|
-
<ResourceInfoPanel {...defaultProps} creationMethod="generated" />
|
|
299
|
-
);
|
|
300
|
-
expect(screen.getByText('How created')).toBeInTheDocument();
|
|
301
|
-
expect(screen.getByText('generated')).toBeInTheDocument();
|
|
302
|
-
});
|
|
303
|
-
|
|
304
294
|
it('should render a single agent attribution', () => {
|
|
305
295
|
renderWithEventBus(
|
|
306
296
|
<ResourceInfoPanel
|
|
@@ -336,25 +326,31 @@ describe('ResourceInfoPanel Component', () => {
|
|
|
336
326
|
expect(screen.getByText('urn:semiont:resource:abc123')).toBeInTheDocument();
|
|
337
327
|
});
|
|
338
328
|
|
|
339
|
-
it('
|
|
329
|
+
it('falls back to generator for attribution when wasAttributedTo is absent', () => {
|
|
340
330
|
renderWithEventBus(
|
|
341
331
|
<ResourceInfoPanel
|
|
342
332
|
{...defaultProps}
|
|
343
|
-
generator={{ name: 'Semiont AI' }}
|
|
333
|
+
generator={{ '@type': 'Software', name: 'Semiont AI' } as never}
|
|
344
334
|
/>
|
|
345
335
|
);
|
|
346
|
-
expect(screen.getByText('
|
|
336
|
+
expect(screen.getByText('Attributed to')).toBeInTheDocument();
|
|
347
337
|
expect(screen.getByText('Semiont AI')).toBeInTheDocument();
|
|
348
338
|
});
|
|
349
339
|
|
|
350
|
-
it('
|
|
340
|
+
it('renders Software peers as `${provider} ${model}` from structured fields', () => {
|
|
351
341
|
renderWithEventBus(
|
|
352
342
|
<ResourceInfoPanel
|
|
353
343
|
{...defaultProps}
|
|
354
|
-
generator={
|
|
344
|
+
generator={{
|
|
345
|
+
'@type': 'Software',
|
|
346
|
+
'@id': 'did:web:example.com:agents:ollama:gemma2%3A27b',
|
|
347
|
+
name: 'ignored',
|
|
348
|
+
provider: 'ollama',
|
|
349
|
+
model: 'gemma2:27b',
|
|
350
|
+
} as never}
|
|
355
351
|
/>
|
|
356
352
|
);
|
|
357
|
-
expect(screen.getByText('
|
|
353
|
+
expect(screen.getByText('ollama gemma2:27b')).toBeInTheDocument();
|
|
358
354
|
});
|
|
359
355
|
});
|
|
360
356
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import { screen } from '@testing-library/react';
|
|
3
|
+
import { render, screen } from '@testing-library/react';
|
|
4
4
|
import '@testing-library/jest-dom';
|
|
5
|
-
import {
|
|
5
|
+
import { of } from 'rxjs';
|
|
6
|
+
import { CacheObservable } from '@semiont/sdk';
|
|
7
|
+
import { renderWithProviders, createTestSemiontWrapper } from '../../../../test-utils';
|
|
6
8
|
import userEvent from '@testing-library/user-event';
|
|
7
|
-
import type { components } from '@semiont/core';
|
|
9
|
+
import type { components, TagSchema } from '@semiont/core';
|
|
8
10
|
|
|
9
11
|
import type { Annotation } from '@semiont/core';
|
|
10
12
|
|
|
@@ -23,21 +25,15 @@ vi.mock('@semiont/ontology', () => ({
|
|
|
23
25
|
getTagSchemaId: vi.fn(),
|
|
24
26
|
}));
|
|
25
27
|
|
|
26
|
-
// Mock tag-schemas
|
|
27
|
-
vi.mock('../../../../lib/tag-schemas', () => ({
|
|
28
|
-
getTagSchema: vi.fn(),
|
|
29
|
-
}));
|
|
30
|
-
|
|
31
28
|
import { getAnnotationExactText } from '@semiont/core';
|
|
32
29
|
import { getTagCategory, getTagSchemaId } from '@semiont/ontology';
|
|
33
|
-
import { getTagSchema } from '../../../../lib/tag-schemas';
|
|
34
30
|
import type { MockedFunction } from 'vitest';
|
|
35
31
|
import { TagEntry } from '../TagEntry';
|
|
36
32
|
|
|
37
33
|
const mockGetAnnotationExactText = getAnnotationExactText as MockedFunction<typeof getAnnotationExactText>;
|
|
38
34
|
const mockGetTagCategory = getTagCategory as MockedFunction<typeof getTagCategory>;
|
|
39
35
|
const mockGetTagSchemaId = getTagSchemaId as MockedFunction<typeof getTagSchemaId>;
|
|
40
|
-
|
|
36
|
+
|
|
41
37
|
|
|
42
38
|
const createMockTag = (overrides?: Partial<Annotation>): Annotation => ({
|
|
43
39
|
'@context': 'http://www.w3.org/ns/anno.jsonld',
|
|
@@ -76,7 +72,6 @@ describe('TagEntry', () => {
|
|
|
76
72
|
mockGetAnnotationExactText.mockReturnValue('Tagged text content');
|
|
77
73
|
mockGetTagCategory.mockReturnValue('Entity');
|
|
78
74
|
mockGetTagSchemaId.mockReturnValue(null);
|
|
79
|
-
mockGetTagSchema.mockReturnValue(null);
|
|
80
75
|
});
|
|
81
76
|
|
|
82
77
|
describe('Rendering', () => {
|
|
@@ -115,24 +110,36 @@ describe('TagEntry', () => {
|
|
|
115
110
|
|
|
116
111
|
it('should render schema name when available', () => {
|
|
117
112
|
mockGetTagSchemaId.mockReturnValue('schema-ner-v1');
|
|
118
|
-
|
|
113
|
+
const NER_SCHEMA: TagSchema = {
|
|
119
114
|
id: 'schema-ner-v1',
|
|
120
115
|
name: 'Named Entity Recognition',
|
|
116
|
+
description: 'NER',
|
|
121
117
|
domain: 'nlp',
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
118
|
+
tags: [],
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
// Stub the cache to resolve immediately with the test schema —
|
|
122
|
+
// exercises the rendering path without round-tripping through the
|
|
123
|
+
// transport's HTTP plumbing.
|
|
124
|
+
const { SemiontWrapper, client } = createTestSemiontWrapper();
|
|
125
|
+
vi.spyOn(client.browse, 'tagSchemas').mockReturnValue(
|
|
126
|
+
CacheObservable.from(of([NER_SCHEMA]))
|
|
127
|
+
);
|
|
128
|
+
render(<TagEntry {...defaultProps} />, { wrapper: SemiontWrapper });
|
|
127
129
|
|
|
128
130
|
expect(screen.getByText('Named Entity Recognition')).toBeInTheDocument();
|
|
129
131
|
});
|
|
130
132
|
|
|
131
133
|
it('should not render schema name when schema is not found', () => {
|
|
132
134
|
mockGetTagSchemaId.mockReturnValue('unknown-schema');
|
|
133
|
-
mockGetTagSchema.mockReturnValue(null);
|
|
134
135
|
|
|
135
|
-
|
|
136
|
+
// Stub the cache to resolve to an empty list — the schema lookup
|
|
137
|
+
// misses, the schema-name `<span>` is not rendered.
|
|
138
|
+
const { SemiontWrapper, client } = createTestSemiontWrapper();
|
|
139
|
+
vi.spyOn(client.browse, 'tagSchemas').mockReturnValue(
|
|
140
|
+
CacheObservable.from(of([]))
|
|
141
|
+
);
|
|
142
|
+
const { container } = render(<TagEntry {...defaultProps} />, { wrapper: SemiontWrapper });
|
|
136
143
|
|
|
137
144
|
expect(container.querySelector('.semiont-annotation-entry__meta')).not.toBeInTheDocument();
|
|
138
145
|
});
|
|
@@ -4,8 +4,10 @@ import React from 'react';
|
|
|
4
4
|
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
|
|
5
5
|
import userEvent from '@testing-library/user-event';
|
|
6
6
|
import '@testing-library/jest-dom';
|
|
7
|
+
import { of } from 'rxjs';
|
|
8
|
+
import { CacheObservable } from '@semiont/sdk';
|
|
7
9
|
import { TaggingPanel } from '../TaggingPanel';
|
|
8
|
-
import type { components, EventBus } from '@semiont/core';
|
|
10
|
+
import type { components, EventBus, TagSchema } from '@semiont/core';
|
|
9
11
|
import { createTestSemiontWrapper } from '../../../../test-utils';
|
|
10
12
|
|
|
11
13
|
import type { Annotation } from '@semiont/core';
|
|
@@ -32,8 +34,30 @@ function createEventTracker() {
|
|
|
32
34
|
};
|
|
33
35
|
}
|
|
34
36
|
|
|
37
|
+
// Test tag schemas — the panel subscribes to `client.browse.tagSchemas()`.
|
|
38
|
+
// We stub that method directly to return a `CacheObservable` that emits
|
|
39
|
+
// these schemas synchronously, mirroring the post-resolve cache state
|
|
40
|
+
// without the round-trip through bus/transport plumbing.
|
|
41
|
+
const TEST_TAG_SCHEMAS: TagSchema[] = [
|
|
42
|
+
{
|
|
43
|
+
id: 'legal-irac',
|
|
44
|
+
name: 'Legal (IRAC)',
|
|
45
|
+
description: 'Issue, Rule, Application, Conclusion framework for legal analysis',
|
|
46
|
+
domain: 'legal',
|
|
47
|
+
tags: [
|
|
48
|
+
{ name: 'Issue', description: 'Legal question to be resolved', examples: [] },
|
|
49
|
+
{ name: 'Rule', description: 'Legal principle or statute', examples: [] },
|
|
50
|
+
{ name: 'Application', description: 'Application of rule to facts', examples: [] },
|
|
51
|
+
{ name: 'Conclusion', description: 'Resolution of the issue', examples: [] },
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
|
|
35
56
|
const renderWithEventBus = (component: React.ReactElement, tracker?: ReturnType<typeof createEventTracker>) => {
|
|
36
|
-
const { SemiontWrapper, eventBus } = createTestSemiontWrapper();
|
|
57
|
+
const { SemiontWrapper, eventBus, client } = createTestSemiontWrapper();
|
|
58
|
+
vi.spyOn(client.browse, 'tagSchemas').mockReturnValue(
|
|
59
|
+
CacheObservable.from(of(TEST_TAG_SCHEMAS))
|
|
60
|
+
);
|
|
37
61
|
if (tracker) tracker._attach(eventBus);
|
|
38
62
|
const Wrapper = ({ children }: { children: React.ReactNode }) => (
|
|
39
63
|
<SemiontWrapper>{children}</SemiontWrapper>
|
|
@@ -41,20 +65,36 @@ const renderWithEventBus = (component: React.ReactElement, tracker?: ReturnType<
|
|
|
41
65
|
return render(component, { wrapper: Wrapper });
|
|
42
66
|
};
|
|
43
67
|
|
|
44
|
-
//
|
|
68
|
+
// Variant for the empty-registry case: the cache resolves to `[]`
|
|
69
|
+
// (post-bootstrap, no schemas registered). Distinct from the still-
|
|
70
|
+
// loading case where the observable yields `undefined`.
|
|
71
|
+
const renderWithEmptyRegistry = (component: React.ReactElement) => {
|
|
72
|
+
const { SemiontWrapper, client } = createTestSemiontWrapper();
|
|
73
|
+
vi.spyOn(client.browse, 'tagSchemas').mockReturnValue(
|
|
74
|
+
CacheObservable.from(of([]))
|
|
75
|
+
);
|
|
76
|
+
const Wrapper = ({ children }: { children: React.ReactNode }) => (
|
|
77
|
+
<SemiontWrapper>{children}</SemiontWrapper>
|
|
78
|
+
);
|
|
79
|
+
return render(component, { wrapper: Wrapper });
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
// Mock TranslationContext. The component now uses `schema.name` /
|
|
83
|
+
// `category.name` directly off the registered TagSchema objects (Stage 2.B
|
|
84
|
+
// of TAG-SCHEMAS-GAP), so the per-schema/per-category translation keys
|
|
85
|
+
// the older mock carried (`schemaLegal`, `categoryIssue`, etc.) are no
|
|
86
|
+
// longer referenced — kept the mock minimal.
|
|
45
87
|
vi.mock('../../../../contexts/TranslationContext', () => ({
|
|
46
88
|
useTranslations: vi.fn(() => (key: string, params?: Record<string, any>) => {
|
|
47
89
|
const translations: Record<string, string> = {
|
|
48
90
|
title: 'Tags',
|
|
49
91
|
noTags: 'No tags yet. Select text to add a tag.',
|
|
92
|
+
noSchemas: 'No tag schemas registered for this knowledge base.',
|
|
50
93
|
createTagForSelection: 'Create tag for selection',
|
|
51
94
|
selectSchema: 'Select schema',
|
|
52
95
|
selectCategory: 'Select category',
|
|
53
96
|
selectCategories: 'Select categories',
|
|
54
97
|
chooseCategory: 'Choose a category',
|
|
55
|
-
schemaLegal: 'Legal (IRAC)',
|
|
56
|
-
schemaScientific: 'Scientific (IMRAD)',
|
|
57
|
-
schemaArgument: 'Argument',
|
|
58
98
|
annotateTags: 'Annotate Tags',
|
|
59
99
|
annotate: 'Annotate',
|
|
60
100
|
cancel: 'Cancel',
|
|
@@ -62,10 +102,6 @@ vi.mock('../../../../contexts/TranslationContext', () => ({
|
|
|
62
102
|
selectAll: 'Select All',
|
|
63
103
|
deselectAll: 'Deselect All',
|
|
64
104
|
categoriesSelected: '{count} categories selected',
|
|
65
|
-
categoryIssue: 'Issue',
|
|
66
|
-
categoryRule: 'Rule',
|
|
67
|
-
categoryApplication: 'Application',
|
|
68
|
-
categoryConclusion: 'Conclusion',
|
|
69
105
|
};
|
|
70
106
|
let result = translations[key] || key;
|
|
71
107
|
if (params?.count !== undefined) {
|
|
@@ -95,23 +131,6 @@ vi.mock('../TagEntry', () => ({
|
|
|
95
131
|
),
|
|
96
132
|
}));
|
|
97
133
|
|
|
98
|
-
// Mock tag schemas
|
|
99
|
-
vi.mock('../../../../lib/tag-schemas', () => ({
|
|
100
|
-
getAllTagSchemas: vi.fn(() => [
|
|
101
|
-
{
|
|
102
|
-
id: 'legal-irac',
|
|
103
|
-
name: 'Legal (IRAC)',
|
|
104
|
-
description: 'Issue, Rule, Application, Conclusion framework for legal analysis',
|
|
105
|
-
tags: [
|
|
106
|
-
{ name: 'Issue', description: 'Legal question to be resolved', color: '#3b82f6' },
|
|
107
|
-
{ name: 'Rule', description: 'Legal principle or statute', color: '#10b981' },
|
|
108
|
-
{ name: 'Application', description: 'Application of rule to facts', color: '#f59e0b' },
|
|
109
|
-
{ name: 'Conclusion', description: 'Resolution of the issue', color: '#ef4444' },
|
|
110
|
-
],
|
|
111
|
-
},
|
|
112
|
-
]),
|
|
113
|
-
}));
|
|
114
|
-
|
|
115
134
|
import { getTextPositionSelector, getTargetSelector } from '@semiont/core';
|
|
116
135
|
const mockGetTextPositionSelector = getTextPositionSelector as MockedFunction<typeof getTextPositionSelector>;
|
|
117
136
|
const mockGetTargetSelector = getTargetSelector as MockedFunction<typeof getTargetSelector>;
|
|
@@ -307,7 +326,7 @@ describe('TaggingPanel Component', () => {
|
|
|
307
326
|
expect(selects.length).toBeGreaterThan(0);
|
|
308
327
|
});
|
|
309
328
|
|
|
310
|
-
it('should show category selector in tag creation form', () => {
|
|
329
|
+
it('should show category selector in tag creation form', async () => {
|
|
311
330
|
const pendingAnnotation = createPendingAnnotation('Selected text');
|
|
312
331
|
|
|
313
332
|
renderWithEventBus(
|
|
@@ -317,7 +336,10 @@ describe('TaggingPanel Component', () => {
|
|
|
317
336
|
/>
|
|
318
337
|
);
|
|
319
338
|
|
|
320
|
-
|
|
339
|
+
// The category selector only renders once the schema list has
|
|
340
|
+
// resolved and the default schema (first registered) has been
|
|
341
|
+
// picked — async because the schemas come from `browse.tagSchemas()`.
|
|
342
|
+
expect(await screen.findByText(/Select category/)).toBeInTheDocument();
|
|
321
343
|
});
|
|
322
344
|
|
|
323
345
|
it('should emit mark:submitevent when category is selected', async () => {
|
|
@@ -332,7 +354,10 @@ describe('TaggingPanel Component', () => {
|
|
|
332
354
|
tracker
|
|
333
355
|
);
|
|
334
356
|
|
|
335
|
-
//
|
|
357
|
+
// Wait for the schema list to load — `browse.tagSchemas()` is
|
|
358
|
+
// async, so the category dropdown only renders after the bus
|
|
359
|
+
// response lands.
|
|
360
|
+
await screen.findByText(/Select category/);
|
|
336
361
|
const categorySelects = screen.getAllByRole('combobox');
|
|
337
362
|
const categorySelect = categorySelects.find(select =>
|
|
338
363
|
select.querySelector('option[value=""]')?.textContent === 'Choose a category'
|
|
@@ -366,6 +391,7 @@ describe('TaggingPanel Component', () => {
|
|
|
366
391
|
tracker
|
|
367
392
|
);
|
|
368
393
|
|
|
394
|
+
await screen.findByText(/Select category/);
|
|
369
395
|
const categorySelects = screen.getAllByRole('combobox');
|
|
370
396
|
const categorySelect = categorySelects.find(select =>
|
|
371
397
|
select.querySelector('option[value=""]')?.textContent === 'Choose a category'
|
|
@@ -474,7 +500,7 @@ describe('TaggingPanel Component', () => {
|
|
|
474
500
|
expect(selects.length).toBeGreaterThan(0);
|
|
475
501
|
});
|
|
476
502
|
|
|
477
|
-
it('should show Select All and Deselect All buttons', () => {
|
|
503
|
+
it('should show Select All and Deselect All buttons', async () => {
|
|
478
504
|
renderWithEventBus(
|
|
479
505
|
<TaggingPanel
|
|
480
506
|
{...defaultProps}
|
|
@@ -482,11 +508,11 @@ describe('TaggingPanel Component', () => {
|
|
|
482
508
|
/>
|
|
483
509
|
);
|
|
484
510
|
|
|
485
|
-
expect(screen.
|
|
511
|
+
expect(await screen.findByText('Select All')).toBeInTheDocument();
|
|
486
512
|
expect(screen.getByText('Deselect All')).toBeInTheDocument();
|
|
487
513
|
});
|
|
488
514
|
|
|
489
|
-
it('should show category checkboxes', () => {
|
|
515
|
+
it('should show category checkboxes', async () => {
|
|
490
516
|
renderWithEventBus(
|
|
491
517
|
<TaggingPanel
|
|
492
518
|
{...defaultProps}
|
|
@@ -494,7 +520,9 @@ describe('TaggingPanel Component', () => {
|
|
|
494
520
|
/>
|
|
495
521
|
);
|
|
496
522
|
|
|
497
|
-
|
|
523
|
+
// Categories appear once `browse.tagSchemas()` resolves and the
|
|
524
|
+
// default schema is selected.
|
|
525
|
+
expect(await screen.findByText('Issue')).toBeInTheDocument();
|
|
498
526
|
expect(screen.getByText('Rule')).toBeInTheDocument();
|
|
499
527
|
expect(screen.getByText('Application')).toBeInTheDocument();
|
|
500
528
|
expect(screen.getByText('Conclusion')).toBeInTheDocument();
|
|
@@ -520,7 +548,7 @@ describe('TaggingPanel Component', () => {
|
|
|
520
548
|
/>
|
|
521
549
|
);
|
|
522
550
|
|
|
523
|
-
const issueCheckbox = screen.
|
|
551
|
+
const issueCheckbox = await screen.findByLabelText(/Issue/);
|
|
524
552
|
await userEvent.click(issueCheckbox);
|
|
525
553
|
|
|
526
554
|
const annotateButton = screen.getByRole('button', { name: /✨\s*Annotate/i });
|
|
@@ -537,7 +565,7 @@ describe('TaggingPanel Component', () => {
|
|
|
537
565
|
tracker
|
|
538
566
|
);
|
|
539
567
|
|
|
540
|
-
const issueCheckbox = screen.
|
|
568
|
+
const issueCheckbox = await screen.findByLabelText(/Issue/);
|
|
541
569
|
const ruleCheckbox = screen.getByLabelText(/Rule/);
|
|
542
570
|
|
|
543
571
|
await userEvent.click(issueCheckbox);
|
|
@@ -581,7 +609,7 @@ describe('TaggingPanel Component', () => {
|
|
|
581
609
|
expect(headings[0]).toHaveClass('semiont-panel-header__text');
|
|
582
610
|
});
|
|
583
611
|
|
|
584
|
-
it('should have proper checkbox labels', () => {
|
|
612
|
+
it('should have proper checkbox labels', async () => {
|
|
585
613
|
renderWithEventBus(
|
|
586
614
|
<TaggingPanel
|
|
587
615
|
{...defaultProps}
|
|
@@ -589,8 +617,70 @@ describe('TaggingPanel Component', () => {
|
|
|
589
617
|
/>
|
|
590
618
|
);
|
|
591
619
|
|
|
592
|
-
expect(screen.
|
|
620
|
+
expect(await screen.findByLabelText(/Issue/)).toBeInTheDocument();
|
|
593
621
|
expect(screen.getByLabelText(/Rule/)).toBeInTheDocument();
|
|
594
622
|
});
|
|
595
623
|
});
|
|
624
|
+
|
|
625
|
+
describe('Empty registry (no tag schemas registered)', () => {
|
|
626
|
+
// The empty path: `browse.tagSchemas()` resolves to `[]` (KB has
|
|
627
|
+
// not run `register-tag-schemas` yet, no skill has registered a
|
|
628
|
+
// schema either). The panel should surface a clear message in
|
|
629
|
+
// both contexts where the schema picker would otherwise render —
|
|
630
|
+
// not just leave the dropdown empty.
|
|
631
|
+
|
|
632
|
+
it('shows the noSchemas message in the assist section instead of the picker', async () => {
|
|
633
|
+
renderWithEmptyRegistry(
|
|
634
|
+
<TaggingPanel {...defaultProps} annotateMode={true} />
|
|
635
|
+
);
|
|
636
|
+
|
|
637
|
+
// The empty-state message renders…
|
|
638
|
+
expect(
|
|
639
|
+
await screen.findByText(/No tag schemas registered for this knowledge base/i),
|
|
640
|
+
).toBeInTheDocument();
|
|
641
|
+
|
|
642
|
+
// …and the picker UI does NOT (the form-field label `Select schema`
|
|
643
|
+
// is gated on `!noSchemasRegistered`).
|
|
644
|
+
expect(screen.queryByLabelText(/Select schema/i)).not.toBeInTheDocument();
|
|
645
|
+
});
|
|
646
|
+
|
|
647
|
+
it('shows the noSchemas message in the pending tag-creation form instead of the picker', async () => {
|
|
648
|
+
const pendingAnnotation = createPendingAnnotation('Selected text');
|
|
649
|
+
|
|
650
|
+
renderWithEmptyRegistry(
|
|
651
|
+
<TaggingPanel
|
|
652
|
+
{...defaultProps}
|
|
653
|
+
pendingAnnotation={pendingAnnotation}
|
|
654
|
+
annotateMode={false}
|
|
655
|
+
/>
|
|
656
|
+
);
|
|
657
|
+
|
|
658
|
+
// The pending form opens. With annotateMode={false} the assist
|
|
659
|
+
// section is skipped so we get exactly one empty-state message —
|
|
660
|
+
// the one inside the pending form. (Default annotateMode=true
|
|
661
|
+
// renders the message in both places, which is the right product
|
|
662
|
+
// behavior; a separate test covers the assist-section path.)
|
|
663
|
+
expect(screen.getByText(/Create tag for selection/)).toBeInTheDocument();
|
|
664
|
+
expect(
|
|
665
|
+
await screen.findByText(/No tag schemas registered for this knowledge base/i),
|
|
666
|
+
).toBeInTheDocument();
|
|
667
|
+
// No "Select category" label — the second dropdown renders only
|
|
668
|
+
// when `selectedSchema` exists, which requires a schema to be
|
|
669
|
+
// registered first.
|
|
670
|
+
expect(screen.queryByText(/Select category/i)).not.toBeInTheDocument();
|
|
671
|
+
});
|
|
672
|
+
|
|
673
|
+
it('keeps the panel rendering tags in the list section even with an empty registry', () => {
|
|
674
|
+
// The existing tag annotations on the resource still render —
|
|
675
|
+
// schema-registration is a write-side concern; reading existing
|
|
676
|
+
// tags doesn't depend on the registry being populated.
|
|
677
|
+
renderWithEmptyRegistry(
|
|
678
|
+
<TaggingPanel {...defaultProps} annotations={mockTags.multiple} />
|
|
679
|
+
);
|
|
680
|
+
|
|
681
|
+
expect(screen.getByTestId('tag-1')).toBeInTheDocument();
|
|
682
|
+
expect(screen.getByTestId('tag-2')).toBeInTheDocument();
|
|
683
|
+
expect(screen.getByTestId('tag-3')).toBeInTheDocument();
|
|
684
|
+
});
|
|
685
|
+
});
|
|
596
686
|
});
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { renderAgentLabel } from '../agent-label';
|
|
3
|
+
import type { components } from '@semiont/core';
|
|
4
|
+
|
|
5
|
+
type Agent = components['schemas']['Agent'];
|
|
6
|
+
|
|
7
|
+
describe('renderAgentLabel', () => {
|
|
8
|
+
describe('Software peers', () => {
|
|
9
|
+
it('composes `${provider} ${model}` from structured fields', () => {
|
|
10
|
+
const agent: Agent = {
|
|
11
|
+
'@type': 'Software',
|
|
12
|
+
'@id': 'did:web:example.com:agents:ollama:gemma2%3A27b',
|
|
13
|
+
name: 'unused-display-name',
|
|
14
|
+
provider: 'ollama',
|
|
15
|
+
model: 'gemma2:27b',
|
|
16
|
+
};
|
|
17
|
+
expect(renderAgentLabel(agent)).toBe('ollama gemma2:27b');
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('falls back to model alone when provider is absent', () => {
|
|
21
|
+
const agent: Agent = {
|
|
22
|
+
'@type': 'Software',
|
|
23
|
+
name: 'unused',
|
|
24
|
+
model: 'gpt-4',
|
|
25
|
+
};
|
|
26
|
+
expect(renderAgentLabel(agent)).toBe('gpt-4');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('falls back to provider alone when model is absent', () => {
|
|
30
|
+
const agent: Agent = {
|
|
31
|
+
'@type': 'Software',
|
|
32
|
+
name: 'unused',
|
|
33
|
+
provider: 'anthropic',
|
|
34
|
+
};
|
|
35
|
+
expect(renderAgentLabel(agent)).toBe('anthropic');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('falls back to name when both provider and model are absent', () => {
|
|
39
|
+
const agent: Agent = {
|
|
40
|
+
'@type': 'Software',
|
|
41
|
+
name: 'Some Software',
|
|
42
|
+
};
|
|
43
|
+
expect(renderAgentLabel(agent)).toBe('Some Software');
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe('Person and Organization peers', () => {
|
|
48
|
+
it('renders Person name', () => {
|
|
49
|
+
const agent: Agent = {
|
|
50
|
+
'@type': 'Person',
|
|
51
|
+
'@id': 'did:web:example.com:users:alice%40example.com',
|
|
52
|
+
name: 'Alice',
|
|
53
|
+
};
|
|
54
|
+
expect(renderAgentLabel(agent)).toBe('Alice');
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('renders Organization name', () => {
|
|
58
|
+
const agent: Agent = {
|
|
59
|
+
'@type': 'Organization',
|
|
60
|
+
name: 'Acme Corp',
|
|
61
|
+
};
|
|
62
|
+
expect(renderAgentLabel(agent)).toBe('Acme Corp');
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
describe('Legacy and degraded shapes', () => {
|
|
67
|
+
it('renders the stored `name` for legacy SoftwareAgent shape (graceful fallback)', () => {
|
|
68
|
+
// Pre-migration generator with @type='SoftwareAgent' and concatenated name
|
|
69
|
+
const legacy = {
|
|
70
|
+
'@type': 'SoftwareAgent',
|
|
71
|
+
name: 'worker-pool / ollama gemma4:26b',
|
|
72
|
+
worker: 'worker-pool',
|
|
73
|
+
inferenceProvider: 'ollama',
|
|
74
|
+
model: 'gemma4:26b',
|
|
75
|
+
} as unknown as Agent;
|
|
76
|
+
expect(renderAgentLabel(legacy)).toBe('worker-pool / ollama gemma4:26b');
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('falls back to @id when name is empty', () => {
|
|
80
|
+
const agent = {
|
|
81
|
+
'@type': 'Person',
|
|
82
|
+
'@id': 'did:web:example.com:users:bob%40example.com',
|
|
83
|
+
name: '',
|
|
84
|
+
} as unknown as Agent;
|
|
85
|
+
expect(renderAgentLabel(agent)).toBe('did:web:example.com:users:bob%40example.com');
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('falls back to "unknown" when nothing identifies the agent', () => {
|
|
89
|
+
const agent = { '@type': 'Person', name: '' } as unknown as Agent;
|
|
90
|
+
expect(renderAgentLabel(agent)).toBe('unknown');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { components } from '@semiont/core';
|
|
2
|
+
|
|
3
|
+
type Agent = components['schemas']['Agent'];
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Compose a display label for an Agent at render time. Software peers
|
|
7
|
+
* read `${provider} ${model}` from their structured fields rather than
|
|
8
|
+
* a producer-side concatenated `name`. Person/Organization fall back
|
|
9
|
+
* to `name`. Unknown shapes fall back to `name` then to `@id`.
|
|
10
|
+
*/
|
|
11
|
+
export function renderAgentLabel(agent: Agent): string {
|
|
12
|
+
if (agent['@type'] === 'Software') {
|
|
13
|
+
const provider = (agent as { provider?: string }).provider;
|
|
14
|
+
const model = (agent as { model?: string }).model;
|
|
15
|
+
if (provider && model) return `${provider} ${model}`;
|
|
16
|
+
if (model) return model;
|
|
17
|
+
if (provider) return provider;
|
|
18
|
+
}
|
|
19
|
+
return agent.name || agent['@id'] || 'unknown';
|
|
20
|
+
}
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
LightBulbIcon
|
|
13
13
|
} from '@heroicons/react/24/outline';
|
|
14
14
|
import { COMMON_PANELS, type ToolbarPanelType } from '../../../state/shell-state-unit';
|
|
15
|
-
import type { TagSchema } from '@semiont/
|
|
15
|
+
import type { TagSchema } from '@semiont/sdk';
|
|
16
16
|
|
|
17
17
|
export interface TagSchemasPageProps {
|
|
18
18
|
// Data props
|
|
@@ -43,7 +43,7 @@ const domainIcons: Record<string, React.ComponentType<any>> = {
|
|
|
43
43
|
general: LightBulbIcon
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
-
const domainClasses = {
|
|
46
|
+
const domainClasses: Record<string, string> = {
|
|
47
47
|
legal: 'semiont-schema-domain--legal',
|
|
48
48
|
scientific: 'semiont-schema-domain--scientific',
|
|
49
49
|
general: 'semiont-schema-domain--general'
|
|
@@ -84,7 +84,7 @@ export function TagSchemasPage({
|
|
|
84
84
|
<div className="semiont-card-grid semiont-card-grid--two-columns">
|
|
85
85
|
{schemas.map((schema) => {
|
|
86
86
|
const Icon = domainIcons[schema.domain] || LightBulbIcon;
|
|
87
|
-
const domainClass = domainClasses[schema.domain] || domainClasses.general
|
|
87
|
+
const domainClass = domainClasses[schema.domain] || domainClasses.general!;
|
|
88
88
|
|
|
89
89
|
return (
|
|
90
90
|
<div
|
|
@@ -559,7 +559,6 @@ export function ResourceViewerPage({
|
|
|
559
559
|
isArchived={resource.archived ?? false}
|
|
560
560
|
dateCreated={resource.dateCreated}
|
|
561
561
|
dateModified={resource.dateModified}
|
|
562
|
-
creationMethod={resource.creationMethod}
|
|
563
562
|
wasAttributedTo={resource.wasAttributedTo}
|
|
564
563
|
wasDerivedFrom={resource.wasDerivedFrom}
|
|
565
564
|
generator={resource.generator as components['schemas']['Agent'] | components['schemas']['Agent'][] | undefined}
|
package/translations/ar.json
CHANGED
|
@@ -25,10 +25,8 @@
|
|
|
25
25
|
"provenance": "المصدر والسلسلة",
|
|
26
26
|
"createdAt": "تاريخ الإنشاء",
|
|
27
27
|
"modifiedAt": "تاريخ التعديل",
|
|
28
|
-
"creationMethod": "طريقة الإنشاء",
|
|
29
28
|
"attributedTo": "منسوب إلى",
|
|
30
29
|
"derivedFrom": "مشتق من",
|
|
31
|
-
"generatedBy": "أُنشئ بواسطة",
|
|
32
30
|
"storageUri": "التخزين"
|
|
33
31
|
},
|
|
34
32
|
"CollaborationPanel": {
|
|
@@ -54,7 +52,6 @@
|
|
|
54
52
|
"history": "السجل",
|
|
55
53
|
"loading": "جارٍ التحميل...",
|
|
56
54
|
"user": "المستخدم",
|
|
57
|
-
"method": "الطريقة",
|
|
58
55
|
"viewOriginal": "عرض الأصل",
|
|
59
56
|
"viewAnnotation": "عرض التعليق التوضيحي: {{content}}",
|
|
60
57
|
"resourceCreated": "تم إنشاء المورد",
|
|
@@ -148,25 +145,10 @@
|
|
|
148
145
|
"TaggingPanel": {
|
|
149
146
|
"title": "العلامات",
|
|
150
147
|
"noTags": "لا توجد علامات بعد. استخدم التوضيح بالذكاء الاصطناعي لتحديد الأدوار الهيكلية.",
|
|
148
|
+
"noSchemas": "لا توجد مخططات وسوم مسجلة لقاعدة المعارف هذه. يجب على مسؤول قاعدة المعارف تسجيل مخطط تحليل هيكلي واحد على الأقل (مثلاً عبر مهارة `register-tag-schemas`) قبل استخدام الوسم.",
|
|
151
149
|
"annotateTags": "توضيح العلامات",
|
|
152
150
|
"selectSchema": "اختيار الإطار",
|
|
153
|
-
"schemaLegal": "التحليل القانوني (IRAC)",
|
|
154
|
-
"schemaScientific": "الورقة العلمية (IMRAD)",
|
|
155
|
-
"schemaArgument": "بنية الحجة (Toulmin)",
|
|
156
151
|
"selectCategories": "اختيار الفئات",
|
|
157
|
-
"categoryIssue": "القضية",
|
|
158
|
-
"categoryRule": "القاعدة",
|
|
159
|
-
"categoryApplication": "التطبيق",
|
|
160
|
-
"categoryConclusion": "الخاتمة",
|
|
161
|
-
"categoryIntroduction": "المقدمة",
|
|
162
|
-
"categoryMethods": "المناهج",
|
|
163
|
-
"categoryResults": "النتائج",
|
|
164
|
-
"categoryDiscussion": "المناقشة",
|
|
165
|
-
"categoryClaim": "الادعاء",
|
|
166
|
-
"categoryEvidence": "الدليل",
|
|
167
|
-
"categoryWarrant": "المبرر",
|
|
168
|
-
"categoryCounterargument": "الحجة المضادة",
|
|
169
|
-
"categoryRebuttal": "الدحض",
|
|
170
152
|
"annotate": "توضيح",
|
|
171
153
|
"annotating": "جارٍ التوضيح...",
|
|
172
154
|
"cancel": "إلغاء",
|