@semiont/react-ui 0.5.4 → 0.5.6

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.
Files changed (410) hide show
  1. package/README.md +59 -55
  2. package/dist/{PdfAnnotationCanvas.client-CN3C3S55.js → PdfAnnotationCanvas.client-NIMALXNZ.js} +7 -27
  3. package/dist/PdfAnnotationCanvas.client-NIMALXNZ.js.map +1 -0
  4. package/dist/index.css +6 -0
  5. package/dist/index.css.map +1 -1
  6. package/dist/index.d.ts +3704 -149
  7. package/dist/index.js +539 -405
  8. package/dist/index.js.map +1 -1
  9. package/dist/test-utils.d.ts +34 -16
  10. package/package.json +19 -13
  11. package/src/components/Button/__tests__/Button.test.tsx +0 -2
  12. package/src/components/CodeMirrorRenderer.tsx +2 -0
  13. package/src/components/ErrorBoundary.tsx +0 -9
  14. package/src/components/ProtectedErrorBoundary.tsx +6 -2
  15. package/src/components/__tests__/AnnotateReferencesProgressWidget.test.tsx +0 -1
  16. package/src/components/__tests__/ErrorBoundary.test.tsx +20 -13
  17. package/src/components/__tests__/LiveRegion.hooks.test.tsx +1 -1
  18. package/src/components/__tests__/ProtectedErrorBoundary.test.tsx +2 -1
  19. package/src/components/__tests__/ResizeHandle.test.tsx +0 -1
  20. package/src/components/__tests__/SessionExpiryBanner.test.tsx +0 -1
  21. package/src/components/__tests__/StatusDisplay.test.tsx +0 -1
  22. package/src/components/__tests__/Toast.test.tsx +2 -3
  23. package/src/components/__tests__/Toolbar.test.tsx +0 -1
  24. package/src/components/annotation/annotations.css +14 -0
  25. package/src/components/annotation-popups/__tests__/JsonLdView.test.tsx +3 -5
  26. package/src/components/annotation-popups/__tests__/SharedPopupElements.test.tsx +0 -1
  27. package/src/components/branding/__tests__/SemiontBranding.test.tsx +1 -2
  28. package/src/components/layout/__tests__/LeftSidebar.test.tsx +5 -6
  29. package/src/components/layout/__tests__/PageLayout.test.tsx +1 -3
  30. package/src/components/layout/__tests__/SkipLinks.a11y.test.tsx +8 -8
  31. package/src/components/layout/__tests__/UnifiedHeader.test.tsx +12 -1
  32. package/src/components/modals/__tests__/KeyboardShortcutsHelpModal.test.tsx +0 -1
  33. package/src/components/modals/__tests__/PermissionDeniedModal.test.tsx +3 -4
  34. package/src/components/modals/__tests__/ResourceSearchModal.test.tsx +0 -1
  35. package/src/components/modals/__tests__/SearchModal.basic.test.tsx +1 -1
  36. package/src/components/modals/__tests__/SearchModal.keyboard.test.tsx +0 -5
  37. package/src/components/modals/__tests__/SearchModal.search-wiring.test.tsx +0 -1
  38. package/src/components/modals/__tests__/SearchModal.visual.test.tsx +2 -2
  39. package/src/components/modals/__tests__/SessionExpiredModal.test.tsx +0 -1
  40. package/src/components/navigation/NavigationMenu.tsx +1 -1
  41. package/src/components/navigation/__tests__/Footer.a11y.test.tsx +4 -0
  42. package/src/components/navigation/__tests__/Footer.test.tsx +3 -6
  43. package/src/components/navigation/__tests__/NavigationMenu.a11y.test.tsx +1 -1
  44. package/src/components/navigation/__tests__/NavigationMenu.test.tsx +7 -9
  45. package/src/components/navigation/__tests__/ObservableLink.test.tsx +0 -1
  46. package/src/components/navigation/__tests__/SimpleNavigation.test.tsx +1 -2
  47. package/src/components/navigation/__tests__/SortableResourceTab.test.tsx +0 -1
  48. package/src/components/pdf-annotation/PdfAnnotationCanvas.tsx +6 -4
  49. package/src/components/pdf-annotation/__tests__/PdfAnnotationCanvas.test.tsx +10 -19
  50. package/src/components/resource/__tests__/BrowseView.test.tsx +8 -6
  51. package/src/components/resource/__tests__/HistoryEvent.test.tsx +0 -4
  52. package/src/components/resource/__tests__/ResourceViewer.mode-switch.test.tsx +4 -6
  53. package/src/components/resource/panels/ReferencesPanel.tsx +1 -1
  54. package/src/components/resource/panels/__tests__/AssessmentEntry.test.tsx +3 -4
  55. package/src/components/resource/panels/__tests__/AssessmentPanel.test.tsx +7 -6
  56. package/src/components/resource/panels/__tests__/AssistSection.test.tsx +14 -10
  57. package/src/components/resource/panels/__tests__/CollaborationPanel.test.tsx +0 -1
  58. package/src/components/resource/panels/__tests__/CommentEntry.test.tsx +30 -17
  59. package/src/components/resource/panels/__tests__/CommentsPanel.test.tsx +6 -5
  60. package/src/components/resource/panels/__tests__/HighlightEntry.test.tsx +4 -5
  61. package/src/components/resource/panels/__tests__/HighlightPanel.annotationProgress.test.tsx +19 -13
  62. package/src/components/resource/panels/__tests__/JsonLdPanel.test.tsx +1 -3
  63. package/src/components/resource/panels/__tests__/PanelHeader.test.tsx +0 -1
  64. package/src/components/resource/panels/__tests__/ReferenceEntry.test.tsx +5 -5
  65. package/src/components/resource/panels/__tests__/ReferencesPanel.test.tsx +40 -7
  66. package/src/components/resource/panels/__tests__/ResourceInfoPanel.test.tsx +3 -3
  67. package/src/components/resource/panels/__tests__/StatisticsPanel.test.tsx +30 -32
  68. package/src/components/resource/panels/__tests__/TagEntry.test.tsx +5 -5
  69. package/src/components/resource/panels/__tests__/TaggingPanel.test.tsx +6 -5
  70. package/src/components/settings/__tests__/SettingsPanel.test.tsx +0 -1
  71. package/src/components/viewers/__tests__/ImageViewer.test.tsx +0 -1
  72. package/src/features/auth/__tests__/SignInForm.a11y.test.tsx +2 -0
  73. package/src/features/auth/__tests__/SignUpForm.a11y.test.tsx +11 -12
  74. package/src/features/auth/__tests__/SignUpForm.test.tsx +3 -3
  75. package/src/features/moderate-tag-schemas/components/TagSchemasPage.tsx +1 -0
  76. package/src/features/resource-compose/__tests__/ResourceComposePage.test.tsx +2 -1
  77. package/src/features/resource-discovery/__tests__/ResourceCard.test.tsx +0 -1
  78. package/src/features/resource-discovery/__tests__/ResourceDiscoveryPage.test.tsx +33 -35
  79. package/src/features/resource-discovery/components/ResourceDiscoveryPage.tsx +12 -11
  80. package/src/features/resource-discovery/state/__tests__/discover-state-unit.test.ts +204 -11
  81. package/src/features/resource-discovery/state/discover-state-unit.ts +70 -11
  82. package/src/features/resource-viewer/__tests__/ResourceViewerPage.test.tsx +2 -2
  83. package/src/features/resource-viewer/components/ResourceViewerPage.tsx +3 -2
  84. package/src/features/resource-viewer/state/__tests__/resource-viewer-page-state-unit.test.ts +0 -1
  85. package/src/features/resource-viewer/state/resource-viewer-page-state-unit.ts +5 -2
  86. package/src/integrations/__tests__/css-modules-helper.test.tsx +2 -3
  87. package/src/integrations/__tests__/styled-components-theme.test.ts +1 -3
  88. package/dist/PdfAnnotationCanvas.client-CN3C3S55.js.map +0 -1
  89. package/dist/assets/favicons/SemiontFavicon.d.ts +0 -9
  90. package/dist/assets/favicons/SemiontFavicon.d.ts.map +0 -1
  91. package/dist/assets/favicons/index.d.ts +0 -12
  92. package/dist/assets/favicons/index.d.ts.map +0 -1
  93. package/dist/components/AnnotateReferencesProgressWidget.d.ts +0 -15
  94. package/dist/components/AnnotateReferencesProgressWidget.d.ts.map +0 -1
  95. package/dist/components/Button/Button.d.ts +0 -69
  96. package/dist/components/Button/Button.d.ts.map +0 -1
  97. package/dist/components/CodeMirrorRenderer.d.ts +0 -25
  98. package/dist/components/CodeMirrorRenderer.d.ts.map +0 -1
  99. package/dist/components/ErrorBoundary.d.ts +0 -30
  100. package/dist/components/ErrorBoundary.d.ts.map +0 -1
  101. package/dist/components/LiveRegion.d.ts +0 -41
  102. package/dist/components/LiveRegion.d.ts.map +0 -1
  103. package/dist/components/ProtectedErrorBoundary.d.ts +0 -27
  104. package/dist/components/ProtectedErrorBoundary.d.ts.map +0 -1
  105. package/dist/components/ResizeHandle.d.ts +0 -39
  106. package/dist/components/ResizeHandle.d.ts.map +0 -1
  107. package/dist/components/ResourceTagsInline.d.ts +0 -10
  108. package/dist/components/ResourceTagsInline.d.ts.map +0 -1
  109. package/dist/components/SessionExpiryBanner.d.ts +0 -2
  110. package/dist/components/SessionExpiryBanner.d.ts.map +0 -1
  111. package/dist/components/SessionTimer.d.ts +0 -2
  112. package/dist/components/SessionTimer.d.ts.map +0 -1
  113. package/dist/components/StatusDisplay.d.ts +0 -9
  114. package/dist/components/StatusDisplay.d.ts.map +0 -1
  115. package/dist/components/Toast.d.ts +0 -27
  116. package/dist/components/Toast.d.ts.map +0 -1
  117. package/dist/components/Toolbar.d.ts +0 -15
  118. package/dist/components/Toolbar.d.ts.map +0 -1
  119. package/dist/components/UserMenuSkeleton.d.ts +0 -2
  120. package/dist/components/UserMenuSkeleton.d.ts.map +0 -1
  121. package/dist/components/annotation/AnnotateToolbar.d.ts +0 -29
  122. package/dist/components/annotation/AnnotateToolbar.d.ts.map +0 -1
  123. package/dist/components/annotation-popups/JsonLdView.d.ts +0 -8
  124. package/dist/components/annotation-popups/JsonLdView.d.ts.map +0 -1
  125. package/dist/components/annotation-popups/SharedPopupElements.d.ts +0 -28
  126. package/dist/components/annotation-popups/SharedPopupElements.d.ts.map +0 -1
  127. package/dist/components/branding/SemiontBranding.d.ts +0 -13
  128. package/dist/components/branding/SemiontBranding.d.ts.map +0 -1
  129. package/dist/components/error-states/ResourceErrorState.d.ts +0 -11
  130. package/dist/components/error-states/ResourceErrorState.d.ts.map +0 -1
  131. package/dist/components/image-annotation/AnnotationOverlay.d.ts +0 -22
  132. package/dist/components/image-annotation/AnnotationOverlay.d.ts.map +0 -1
  133. package/dist/components/image-annotation/SvgDrawingCanvas.d.ts +0 -23
  134. package/dist/components/image-annotation/SvgDrawingCanvas.d.ts.map +0 -1
  135. package/dist/components/layout/LeftSidebar.d.ts +0 -24
  136. package/dist/components/layout/LeftSidebar.d.ts.map +0 -1
  137. package/dist/components/layout/PageLayout.d.ts +0 -21
  138. package/dist/components/layout/PageLayout.d.ts.map +0 -1
  139. package/dist/components/layout/SkipLinks.d.ts +0 -8
  140. package/dist/components/layout/SkipLinks.d.ts.map +0 -1
  141. package/dist/components/layout/UnifiedHeader.d.ts +0 -21
  142. package/dist/components/layout/UnifiedHeader.d.ts.map +0 -1
  143. package/dist/components/loading-states/ComposeLoadingState.d.ts +0 -10
  144. package/dist/components/loading-states/ComposeLoadingState.d.ts.map +0 -1
  145. package/dist/components/loading-states/ResourceLoadingState.d.ts +0 -7
  146. package/dist/components/loading-states/ResourceLoadingState.d.ts.map +0 -1
  147. package/dist/components/modals/ConfigureGenerationStep.d.ts +0 -36
  148. package/dist/components/modals/ConfigureGenerationStep.d.ts.map +0 -1
  149. package/dist/components/modals/ConfigureSearchStep.d.ts +0 -21
  150. package/dist/components/modals/ConfigureSearchStep.d.ts.map +0 -1
  151. package/dist/components/modals/ContextSummary.d.ts +0 -14
  152. package/dist/components/modals/ContextSummary.d.ts.map +0 -1
  153. package/dist/components/modals/GatherContextStep.d.ts +0 -23
  154. package/dist/components/modals/GatherContextStep.d.ts.map +0 -1
  155. package/dist/components/modals/KeyboardShortcutsHelpModal.d.ts +0 -8
  156. package/dist/components/modals/KeyboardShortcutsHelpModal.d.ts.map +0 -1
  157. package/dist/components/modals/PermissionDeniedModal.d.ts +0 -12
  158. package/dist/components/modals/PermissionDeniedModal.d.ts.map +0 -1
  159. package/dist/components/modals/ReferenceWizardModal.d.ts +0 -64
  160. package/dist/components/modals/ReferenceWizardModal.d.ts.map +0 -1
  161. package/dist/components/modals/ResourceSearchModal.d.ts +0 -16
  162. package/dist/components/modals/ResourceSearchModal.d.ts.map +0 -1
  163. package/dist/components/modals/SearchModal.d.ts +0 -20
  164. package/dist/components/modals/SearchModal.d.ts.map +0 -1
  165. package/dist/components/modals/SearchResultsStep.d.ts +0 -22
  166. package/dist/components/modals/SearchResultsStep.d.ts.map +0 -1
  167. package/dist/components/modals/SessionExpiredModal.d.ts +0 -12
  168. package/dist/components/modals/SessionExpiredModal.d.ts.map +0 -1
  169. package/dist/components/navigation/CollapsibleResourceNavigation.d.ts +0 -13
  170. package/dist/components/navigation/CollapsibleResourceNavigation.d.ts.map +0 -1
  171. package/dist/components/navigation/Footer.d.ts +0 -20
  172. package/dist/components/navigation/Footer.d.ts.map +0 -1
  173. package/dist/components/navigation/NavigationMenu.d.ts +0 -18
  174. package/dist/components/navigation/NavigationMenu.d.ts.map +0 -1
  175. package/dist/components/navigation/ObservableLink.d.ts +0 -52
  176. package/dist/components/navigation/ObservableLink.d.ts.map +0 -1
  177. package/dist/components/navigation/SimpleNavigation.d.ts +0 -35
  178. package/dist/components/navigation/SimpleNavigation.d.ts.map +0 -1
  179. package/dist/components/navigation/SortableResourceTab.d.ts +0 -7
  180. package/dist/components/navigation/SortableResourceTab.d.ts.map +0 -1
  181. package/dist/components/pdf-annotation/PdfAnnotationCanvas.client.d.ts +0 -8
  182. package/dist/components/pdf-annotation/PdfAnnotationCanvas.client.d.ts.map +0 -1
  183. package/dist/components/pdf-annotation/PdfAnnotationCanvas.d.ts +0 -25
  184. package/dist/components/pdf-annotation/PdfAnnotationCanvas.d.ts.map +0 -1
  185. package/dist/components/resource/AnnotateView.d.ts +0 -29
  186. package/dist/components/resource/AnnotateView.d.ts.map +0 -1
  187. package/dist/components/resource/AnnotationHistory.d.ts +0 -14
  188. package/dist/components/resource/AnnotationHistory.d.ts.map +0 -1
  189. package/dist/components/resource/BrowseView.d.ts +0 -28
  190. package/dist/components/resource/BrowseView.d.ts.map +0 -1
  191. package/dist/components/resource/HistoryEvent.d.ts +0 -19
  192. package/dist/components/resource/HistoryEvent.d.ts.map +0 -1
  193. package/dist/components/resource/ResourceViewer.d.ts +0 -46
  194. package/dist/components/resource/ResourceViewer.d.ts.map +0 -1
  195. package/dist/components/resource/event-formatting.d.ts +0 -61
  196. package/dist/components/resource/event-formatting.d.ts.map +0 -1
  197. package/dist/components/resource/panels/AssessmentEntry.d.ts +0 -11
  198. package/dist/components/resource/panels/AssessmentEntry.d.ts.map +0 -1
  199. package/dist/components/resource/panels/AssessmentPanel.d.ts +0 -32
  200. package/dist/components/resource/panels/AssessmentPanel.d.ts.map +0 -1
  201. package/dist/components/resource/panels/AssistSection.d.ts +0 -27
  202. package/dist/components/resource/panels/AssistSection.d.ts.map +0 -1
  203. package/dist/components/resource/panels/CollaborationPanel.d.ts +0 -28
  204. package/dist/components/resource/panels/CollaborationPanel.d.ts.map +0 -1
  205. package/dist/components/resource/panels/CommentEntry.d.ts +0 -12
  206. package/dist/components/resource/panels/CommentEntry.d.ts.map +0 -1
  207. package/dist/components/resource/panels/CommentsPanel.d.ts +0 -32
  208. package/dist/components/resource/panels/CommentsPanel.d.ts.map +0 -1
  209. package/dist/components/resource/panels/HighlightEntry.d.ts +0 -11
  210. package/dist/components/resource/panels/HighlightEntry.d.ts.map +0 -1
  211. package/dist/components/resource/panels/HighlightPanel.d.ts +0 -30
  212. package/dist/components/resource/panels/HighlightPanel.d.ts.map +0 -1
  213. package/dist/components/resource/panels/JsonLdPanel.d.ts +0 -9
  214. package/dist/components/resource/panels/JsonLdPanel.d.ts.map +0 -1
  215. package/dist/components/resource/panels/PanelHeader.d.ts +0 -13
  216. package/dist/components/resource/panels/PanelHeader.d.ts.map +0 -1
  217. package/dist/components/resource/panels/ReferenceEntry.d.ts +0 -15
  218. package/dist/components/resource/panels/ReferenceEntry.d.ts.map +0 -1
  219. package/dist/components/resource/panels/ReferencesPanel.d.ts +0 -43
  220. package/dist/components/resource/panels/ReferencesPanel.d.ts.map +0 -1
  221. package/dist/components/resource/panels/ResourceInfoPanel.d.ts +0 -27
  222. package/dist/components/resource/panels/ResourceInfoPanel.d.ts.map +0 -1
  223. package/dist/components/resource/panels/StatisticsPanel.d.ts +0 -12
  224. package/dist/components/resource/panels/StatisticsPanel.d.ts.map +0 -1
  225. package/dist/components/resource/panels/TagEntry.d.ts +0 -11
  226. package/dist/components/resource/panels/TagEntry.d.ts.map +0 -1
  227. package/dist/components/resource/panels/TaggingPanel.d.ts +0 -34
  228. package/dist/components/resource/panels/TaggingPanel.d.ts.map +0 -1
  229. package/dist/components/resource/panels/UnifiedAnnotationsPanel.d.ts +0 -52
  230. package/dist/components/resource/panels/UnifiedAnnotationsPanel.d.ts.map +0 -1
  231. package/dist/components/resource/panels/agent-label.d.ts +0 -11
  232. package/dist/components/resource/panels/agent-label.d.ts.map +0 -1
  233. package/dist/components/settings/SettingsPanel.d.ts +0 -19
  234. package/dist/components/settings/SettingsPanel.d.ts.map +0 -1
  235. package/dist/components/viewers/ImageViewer.d.ts +0 -8
  236. package/dist/components/viewers/ImageViewer.d.ts.map +0 -1
  237. package/dist/components/viewers/index.d.ts +0 -2
  238. package/dist/components/viewers/index.d.ts.map +0 -1
  239. package/dist/contexts/AnnotationContext.d.ts +0 -46
  240. package/dist/contexts/AnnotationContext.d.ts.map +0 -1
  241. package/dist/contexts/ResourceAnnotationsContext.d.ts +0 -14
  242. package/dist/contexts/ResourceAnnotationsContext.d.ts.map +0 -1
  243. package/dist/contexts/RoutingContext.d.ts +0 -59
  244. package/dist/contexts/RoutingContext.d.ts.map +0 -1
  245. package/dist/contexts/ThemeContext.d.ts +0 -15
  246. package/dist/contexts/ThemeContext.d.ts.map +0 -1
  247. package/dist/contexts/TranslationContext.d.ts +0 -51
  248. package/dist/contexts/TranslationContext.d.ts.map +0 -1
  249. package/dist/contexts/useEventSubscription.d.ts +0 -41
  250. package/dist/contexts/useEventSubscription.d.ts.map +0 -1
  251. package/dist/design-tokens/index.d.ts +0 -178
  252. package/dist/design-tokens/index.d.ts.map +0 -1
  253. package/dist/features/admin-devops/components/AdminDevOpsPage.d.ts +0 -33
  254. package/dist/features/admin-devops/components/AdminDevOpsPage.d.ts.map +0 -1
  255. package/dist/features/admin-exchange/components/AdminExchangePage.d.ts +0 -37
  256. package/dist/features/admin-exchange/components/AdminExchangePage.d.ts.map +0 -1
  257. package/dist/features/admin-exchange/components/ExportCard.d.ts +0 -18
  258. package/dist/features/admin-exchange/components/ExportCard.d.ts.map +0 -1
  259. package/dist/features/admin-exchange/components/ImportCard.d.ts +0 -32
  260. package/dist/features/admin-exchange/components/ImportCard.d.ts.map +0 -1
  261. package/dist/features/admin-exchange/components/ImportProgress.d.ts +0 -26
  262. package/dist/features/admin-exchange/components/ImportProgress.d.ts.map +0 -1
  263. package/dist/features/admin-exchange/state/exchange-state-unit.d.ts +0 -31
  264. package/dist/features/admin-exchange/state/exchange-state-unit.d.ts.map +0 -1
  265. package/dist/features/admin-security/components/AdminSecurityPage.d.ts +0 -42
  266. package/dist/features/admin-security/components/AdminSecurityPage.d.ts.map +0 -1
  267. package/dist/features/admin-security/state/admin-security-state-unit.d.ts +0 -12
  268. package/dist/features/admin-security/state/admin-security-state-unit.d.ts.map +0 -1
  269. package/dist/features/admin-users/components/AdminUsersPage.d.ts +0 -88
  270. package/dist/features/admin-users/components/AdminUsersPage.d.ts.map +0 -1
  271. package/dist/features/admin-users/state/admin-users-state-unit.d.ts +0 -17
  272. package/dist/features/admin-users/state/admin-users-state-unit.d.ts.map +0 -1
  273. package/dist/features/auth/components/AuthErrorDisplay.d.ts +0 -34
  274. package/dist/features/auth/components/AuthErrorDisplay.d.ts.map +0 -1
  275. package/dist/features/auth/components/SignInForm.d.ts +0 -80
  276. package/dist/features/auth/components/SignInForm.d.ts.map +0 -1
  277. package/dist/features/auth/components/SignUpForm.d.ts +0 -39
  278. package/dist/features/auth/components/SignUpForm.d.ts.map +0 -1
  279. package/dist/features/auth-welcome/components/WelcomePage.d.ts +0 -62
  280. package/dist/features/auth-welcome/components/WelcomePage.d.ts.map +0 -1
  281. package/dist/features/auth-welcome/state/welcome-state-unit.d.ts +0 -12
  282. package/dist/features/auth-welcome/state/welcome-state-unit.d.ts.map +0 -1
  283. package/dist/features/moderate-entity-tags/components/EntityTagsPage.d.ts +0 -32
  284. package/dist/features/moderate-entity-tags/components/EntityTagsPage.d.ts.map +0 -1
  285. package/dist/features/moderate-entity-tags/state/entity-tags-state-unit.d.ts +0 -16
  286. package/dist/features/moderate-entity-tags/state/entity-tags-state-unit.d.ts.map +0 -1
  287. package/dist/features/moderate-recent/components/RecentDocumentsPage.d.ts +0 -27
  288. package/dist/features/moderate-recent/components/RecentDocumentsPage.d.ts.map +0 -1
  289. package/dist/features/moderate-tag-schemas/components/TagSchemasPage.d.ts +0 -25
  290. package/dist/features/moderate-tag-schemas/components/TagSchemasPage.d.ts.map +0 -1
  291. package/dist/features/moderation-linked-data/components/LinkedDataPage.d.ts +0 -38
  292. package/dist/features/moderation-linked-data/components/LinkedDataPage.d.ts.map +0 -1
  293. package/dist/features/resource-compose/components/ResourceComposePage.d.ts +0 -83
  294. package/dist/features/resource-compose/components/ResourceComposePage.d.ts.map +0 -1
  295. package/dist/features/resource-compose/components/UploadProgressBar.d.ts +0 -23
  296. package/dist/features/resource-compose/components/UploadProgressBar.d.ts.map +0 -1
  297. package/dist/features/resource-compose/state/compose-page-state-unit.d.ts +0 -59
  298. package/dist/features/resource-compose/state/compose-page-state-unit.d.ts.map +0 -1
  299. package/dist/features/resource-discovery/components/ResourceCard.d.ts +0 -17
  300. package/dist/features/resource-discovery/components/ResourceCard.d.ts.map +0 -1
  301. package/dist/features/resource-discovery/components/ResourceDiscoveryPage.d.ts +0 -43
  302. package/dist/features/resource-discovery/components/ResourceDiscoveryPage.d.ts.map +0 -1
  303. package/dist/features/resource-discovery/state/discover-state-unit.d.ts +0 -15
  304. package/dist/features/resource-discovery/state/discover-state-unit.d.ts.map +0 -1
  305. package/dist/features/resource-viewer/components/ResourceViewerPage.d.ts +0 -80
  306. package/dist/features/resource-viewer/components/ResourceViewerPage.d.ts.map +0 -1
  307. package/dist/features/resource-viewer/state/resource-loader-state-unit.d.ts +0 -11
  308. package/dist/features/resource-viewer/state/resource-loader-state-unit.d.ts.map +0 -1
  309. package/dist/features/resource-viewer/state/resource-viewer-page-state-unit.d.ts +0 -48
  310. package/dist/features/resource-viewer/state/resource-viewer-page-state-unit.d.ts.map +0 -1
  311. package/dist/hooks/useDebounce.d.ts +0 -29
  312. package/dist/hooks/useDebounce.d.ts.map +0 -1
  313. package/dist/hooks/useDragAnnouncements.d.ts +0 -12
  314. package/dist/hooks/useDragAnnouncements.d.ts.map +0 -1
  315. package/dist/hooks/useHoverDelay.d.ts +0 -8
  316. package/dist/hooks/useHoverDelay.d.ts.map +0 -1
  317. package/dist/hooks/useHoverEmitter.d.ts +0 -8
  318. package/dist/hooks/useHoverEmitter.d.ts.map +0 -1
  319. package/dist/hooks/useKeyboardShortcuts.d.ts +0 -29
  320. package/dist/hooks/useKeyboardShortcuts.d.ts.map +0 -1
  321. package/dist/hooks/useLineNumbers.d.ts +0 -8
  322. package/dist/hooks/useLineNumbers.d.ts.map +0 -1
  323. package/dist/hooks/useMediaToken.d.ts +0 -7
  324. package/dist/hooks/useMediaToken.d.ts.map +0 -1
  325. package/dist/hooks/useObservable.d.ts +0 -23
  326. package/dist/hooks/useObservable.d.ts.map +0 -1
  327. package/dist/hooks/useObservableBrowse.d.ts +0 -70
  328. package/dist/hooks/useObservableBrowse.d.ts.map +0 -1
  329. package/dist/hooks/usePanelWidth.d.ts +0 -37
  330. package/dist/hooks/usePanelWidth.d.ts.map +0 -1
  331. package/dist/hooks/useResourceContent.d.ts +0 -7
  332. package/dist/hooks/useResourceContent.d.ts.map +0 -1
  333. package/dist/hooks/useRovingTabIndex.d.ts +0 -13
  334. package/dist/hooks/useRovingTabIndex.d.ts.map +0 -1
  335. package/dist/hooks/useSearchAnnouncements.d.ts +0 -10
  336. package/dist/hooks/useSearchAnnouncements.d.ts.map +0 -1
  337. package/dist/hooks/useSessionExpiry.d.ts +0 -10
  338. package/dist/hooks/useSessionExpiry.d.ts.map +0 -1
  339. package/dist/hooks/useShellStateUnit.d.ts +0 -9
  340. package/dist/hooks/useShellStateUnit.d.ts.map +0 -1
  341. package/dist/hooks/useStateUnit.d.ts +0 -3
  342. package/dist/hooks/useStateUnit.d.ts.map +0 -1
  343. package/dist/hooks/useUI.d.ts +0 -24
  344. package/dist/hooks/useUI.d.ts.map +0 -1
  345. package/dist/index.d.ts.map +0 -1
  346. package/dist/integrations/css-modules-helper.d.ts +0 -114
  347. package/dist/integrations/css-modules-helper.d.ts.map +0 -1
  348. package/dist/integrations/styled-components-theme.d.ts +0 -95
  349. package/dist/integrations/styled-components-theme.d.ts.map +0 -1
  350. package/dist/integrations/tailwind-plugin.d.cts +0 -3
  351. package/dist/integrations/tailwind-plugin.d.cts.map +0 -1
  352. package/dist/lib/annotation-overlay.d.ts +0 -71
  353. package/dist/lib/annotation-overlay.d.ts.map +0 -1
  354. package/dist/lib/annotation-registry.d.ts +0 -62
  355. package/dist/lib/annotation-registry.d.ts.map +0 -1
  356. package/dist/lib/browser-pdfjs.d.ts +0 -93
  357. package/dist/lib/browser-pdfjs.d.ts.map +0 -1
  358. package/dist/lib/button-styles.d.ts +0 -27
  359. package/dist/lib/button-styles.d.ts.map +0 -1
  360. package/dist/lib/codemirror-handlers.d.ts +0 -52
  361. package/dist/lib/codemirror-handlers.d.ts.map +0 -1
  362. package/dist/lib/codemirror-json-theme.d.ts +0 -8
  363. package/dist/lib/codemirror-json-theme.d.ts.map +0 -1
  364. package/dist/lib/codemirror-logic.d.ts +0 -66
  365. package/dist/lib/codemirror-logic.d.ts.map +0 -1
  366. package/dist/lib/codemirror-widgets.d.ts +0 -39
  367. package/dist/lib/codemirror-widgets.d.ts.map +0 -1
  368. package/dist/lib/formatTime.d.ts +0 -2
  369. package/dist/lib/formatTime.d.ts.map +0 -1
  370. package/dist/lib/media-shapes.d.ts +0 -51
  371. package/dist/lib/media-shapes.d.ts.map +0 -1
  372. package/dist/lib/pdf-coordinates.d.ts +0 -69
  373. package/dist/lib/pdf-coordinates.d.ts.map +0 -1
  374. package/dist/lib/resource-utils.d.ts +0 -22
  375. package/dist/lib/resource-utils.d.ts.map +0 -1
  376. package/dist/lib/scroll-utils.d.ts +0 -20
  377. package/dist/lib/scroll-utils.d.ts.map +0 -1
  378. package/dist/lib/text-segmentation.d.ts +0 -25
  379. package/dist/lib/text-segmentation.d.ts.map +0 -1
  380. package/dist/lib/text-selection-handler.d.ts +0 -46
  381. package/dist/lib/text-selection-handler.d.ts.map +0 -1
  382. package/dist/lib/validation.d.ts +0 -47
  383. package/dist/lib/validation.d.ts.map +0 -1
  384. package/dist/session/SemiontProvider.d.ts +0 -28
  385. package/dist/session/SemiontProvider.d.ts.map +0 -1
  386. package/dist/session/web-browser-storage.d.ts +0 -19
  387. package/dist/session/web-browser-storage.d.ts.map +0 -1
  388. package/dist/state/session-state-unit.d.ts +0 -9
  389. package/dist/state/session-state-unit.d.ts.map +0 -1
  390. package/dist/state/shell-state-unit.d.ts +0 -33
  391. package/dist/state/shell-state-unit.d.ts.map +0 -1
  392. package/dist/test-utils.d.ts.map +0 -1
  393. package/dist/types/AnnotationManager.d.ts +0 -53
  394. package/dist/types/AnnotationManager.d.ts.map +0 -1
  395. package/dist/types/TranslationManager.d.ts +0 -15
  396. package/dist/types/TranslationManager.d.ts.map +0 -1
  397. package/dist/types/annotation-props.d.ts +0 -108
  398. package/dist/types/annotation-props.d.ts.map +0 -1
  399. package/dist/types/collapsible-navigation.d.ts +0 -69
  400. package/dist/types/collapsible-navigation.d.ts.map +0 -1
  401. package/dist/types/modals.d.ts +0 -77
  402. package/dist/types/modals.d.ts.map +0 -1
  403. package/dist/types/navigation.d.ts +0 -35
  404. package/dist/types/navigation.d.ts.map +0 -1
  405. package/dist/types/resource-viewer.d.ts +0 -19
  406. package/dist/types/resource-viewer.d.ts.map +0 -1
  407. package/dist/types/simple-navigation.d.ts +0 -15
  408. package/dist/types/simple-navigation.d.ts.map +0 -1
  409. package/dist/types/translation.d.ts +0 -5
  410. package/dist/types/translation.d.ts.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,150 +1,3705 @@
1
+ import * as _semiont_react_ui from '@semiont/react-ui';
2
+ import { Annotation, ResourceId, Selector, components, ResourceDescriptor, ValidationResult, EventMap, AnnotationId, AnchorStrategy, AnchorConfidence, StoredEventLike, ConnectionState, GatheredContext, BackendDownload, ProgressEvent, AccessToken } from '@semiont/core';
3
+ export { Annotation } from '@semiont/core';
4
+ import * as React$1 from 'react';
5
+ import React__default, { ComponentType, ReactNode, KeyboardEvent as KeyboardEvent$1, Component, ErrorInfo, Ref } from 'react';
6
+ import * as _codemirror_state from '@codemirror/state';
7
+ import { HighlightStyle } from '@codemirror/language';
8
+ import { WidgetType } from '@codemirror/view';
9
+ import { StateUnit, SemiontBrowser, SessionStorage, SessionFactory, SemiontSession, OpenResource, TagSchema, UploadProgress, SemiontClient, BeckonStateUnit, MarkStateUnit, GatherStateUnit, YieldStateUnit, ReferencedByEntry } from '@semiont/sdk';
10
+ export { BeckonStateUnit, GatherStateUnit, GenerateDocumentOptions, HOVER_DELAY_MS, HoverHandlers, MarkStateUnit, MatchStateUnit, PendingAnnotation, SearchPipeline, SearchPipelineOptions, SearchState, TagSchema, YieldStateUnit, createBeckonStateUnit, createGatherStateUnit, createHoverHandlers, createMarkStateUnit, createMatchStateUnit, createSearchPipeline, createYieldStateUnit } from '@semiont/sdk';
11
+ import { Observable } from 'rxjs';
12
+
1
13
  /**
2
- * @semiont/react-ui
3
- *
4
- * React components and hooks for Semiont applications
5
- */
6
- export * from './types/annotation-props';
7
- export * from './types/AnnotationManager';
8
- export * from './types/navigation';
9
- export * from './types/TranslationManager';
10
- export * from './types/resource-viewer';
11
- export * from './lib/annotation-registry';
12
- export * from './lib/button-styles';
13
- export * from './lib/codemirror-json-theme';
14
- export * from './lib/codemirror-widgets';
15
- export * from './lib/media-shapes';
16
- export { createSearchPipeline, type SearchPipeline, type SearchPipelineOptions, type SearchState } from '@semiont/sdk';
17
- export * from './lib/annotation-overlay';
18
- export * from './lib/resource-utils';
19
- export * from './lib/validation';
20
- export * from './hooks/useStateUnit';
21
- export * from './hooks/useDebounce';
22
- export * from './lib/formatTime';
23
- export * from './hooks/useKeyboardShortcuts';
24
- export * from './hooks/useLineNumbers';
25
- export * from './hooks/useHoverDelay';
26
- export * from './hooks/useObservableBrowse';
27
- export * from './hooks/usePanelWidth';
28
- export * from './hooks/useRovingTabIndex';
29
- export * from './hooks/useSessionExpiry';
30
- export * from './contexts/ThemeContext';
31
- export { useDropdown, useLoadingState, useLocalStorage } from './hooks/useUI';
32
- export * from './hooks/useResourceContent';
33
- export { SemiontProvider, useSemiont, type SemiontProviderProps } from './session/SemiontProvider';
34
- export { WebBrowserStorage } from './session/web-browser-storage';
35
- export * from './contexts/AnnotationContext';
36
- export * from './contexts/useEventSubscription';
37
- export * from './contexts/ResourceAnnotationsContext';
38
- export * from './contexts/RoutingContext';
39
- export * from './contexts/TranslationContext';
40
- export * from './components/CodeMirrorRenderer';
41
- export * from './components/AnnotateReferencesProgressWidget';
42
- export * from './components/ErrorBoundary';
43
- export * from './components/ProtectedErrorBoundary';
44
- export * from './components/LiveRegion';
45
- export * from './components/ResizeHandle';
46
- export * from './components/ResourceTagsInline';
47
- export * from './components/Toast';
48
- export * from './components/Toolbar';
49
- export * from './components/settings/SettingsPanel';
50
- export * from './components/annotation/AnnotateToolbar';
51
- export * from './components/annotation-popups/JsonLdView';
52
- export * from './components/annotation-popups/SharedPopupElements';
53
- export * from './components/image-annotation/AnnotationOverlay';
54
- export * from './components/image-annotation/SvgDrawingCanvas';
55
- export * from './components/modals/KeyboardShortcutsHelpModal';
56
- export * from './components/modals/PermissionDeniedModal';
57
- export * from './components/modals/SessionExpiredModal';
58
- export * from './components/resource/AnnotateView';
59
- export * from './components/resource/AnnotationHistory';
60
- export * from './components/resource/BrowseView';
61
- export * from './components/resource/HistoryEvent';
62
- export * from './components/resource/ResourceViewer';
63
- export * from './components/resource/panels/AssessmentEntry';
64
- export * from './components/resource/panels/AssessmentPanel';
65
- export * from './components/resource/panels/CollaborationPanel';
66
- export * from './components/resource/panels/CommentEntry';
67
- export * from './components/resource/panels/CommentsPanel';
68
- export * from './components/resource/panels/AssistSection';
69
- export * from './components/resource/panels/HighlightEntry';
70
- export * from './components/resource/panels/HighlightPanel';
71
- export * from './components/resource/panels/JsonLdPanel';
72
- export * from './components/resource/panels/PanelHeader';
73
- export * from './components/resource/panels/ReferenceEntry';
74
- export * from './components/resource/panels/ReferencesPanel';
75
- export * from './components/resource/panels/ResourceInfoPanel';
76
- export * from './components/resource/panels/StatisticsPanel';
77
- export * from './components/resource/panels/TagEntry';
78
- export * from './components/resource/panels/TaggingPanel';
79
- export * from './components/resource/panels/UnifiedAnnotationsPanel';
80
- export * from './components/viewers';
81
- export * from './components/navigation/Footer';
82
- export * from './components/navigation/NavigationMenu';
83
- export * from './components/navigation/ObservableLink';
84
- export * from './components/navigation/SimpleNavigation';
85
- export * from './components/navigation/CollapsibleResourceNavigation';
86
- export * from './components/navigation/SortableResourceTab';
87
- export type { CollapsibleResourceNavigationProps, SortableResourceTabProps } from './types/collapsible-navigation';
88
- export type { SimpleNavigationItem, SimpleNavigationProps } from './types/simple-navigation';
89
- export * from './components/modals/ReferenceWizardModal';
90
- export * from './components/modals/SearchModal';
91
- export * from './components/modals/ResourceSearchModal';
92
- export type { SearchModalProps, ResourceSearchModalProps, } from './types/modals';
93
- export * from './components/layout/SkipLinks';
94
- export * from './components/StatusDisplay';
95
- export * from './components/SessionTimer';
96
- export * from './components/SessionExpiryBanner';
97
- export * from './components/UserMenuSkeleton';
98
- export * from './components/branding/SemiontBranding';
99
- export * from './components/layout/UnifiedHeader';
100
- export * from './components/layout/LeftSidebar';
101
- export * from './components/layout/PageLayout';
102
- export { SemiontFavicon } from './assets/favicons/SemiontFavicon';
103
- export { faviconPaths } from './assets/favicons';
104
- export { Button, ButtonGroup } from './components/Button/Button';
105
- export type { ButtonProps, ButtonGroupProps } from './components/Button/Button';
106
- export { tokens, generateCSSVariables, cssVariables } from './design-tokens';
107
- export type { ColorToken, SpacingToken, TypographyToken, BorderRadiusToken, ShadowToken, TransitionToken } from './design-tokens';
108
- export * from './components/loading-states/ComposeLoadingState';
109
- export * from './components/loading-states/ResourceLoadingState';
110
- export * from './components/error-states/ResourceErrorState';
111
- export * from './features/admin-devops/components/AdminDevOpsPage';
112
- export * from './features/admin-exchange/components/AdminExchangePage';
113
- export * from './features/admin-exchange/components/ExportCard';
114
- export * from './features/admin-exchange/components/ImportCard';
115
- export * from './features/admin-exchange/components/ImportProgress';
116
- export * from './features/admin-security/components/AdminSecurityPage';
117
- export * from './features/moderation-linked-data/components/LinkedDataPage';
118
- export * from './features/admin-users/components/AdminUsersPage';
119
- export * from './features/auth/components/SignInForm';
120
- export * from './features/auth/components/SignUpForm';
121
- export * from './features/auth/components/AuthErrorDisplay';
122
- export * from './features/auth-welcome/components/WelcomePage';
123
- export * from './features/moderate-entity-tags/components/EntityTagsPage';
124
- export * from './features/moderate-recent/components/RecentDocumentsPage';
125
- export * from './features/moderate-tag-schemas/components/TagSchemasPage';
126
- export * from './features/resource-compose/components/ResourceComposePage';
127
- export * from './features/resource-compose/components/UploadProgressBar';
128
- export * from './features/resource-discovery/components/ResourceDiscoveryPage';
129
- export * from './features/resource-discovery/components/ResourceCard';
130
- export * from './features/resource-viewer/components/ResourceViewerPage';
131
- export * from './hooks/useHoverEmitter';
132
- export { createBeckonStateUnit, type BeckonStateUnit, createHoverHandlers, type HoverHandlers, HOVER_DELAY_MS } from '@semiont/sdk';
133
- export { createMarkStateUnit, type MarkStateUnit, type PendingAnnotation } from '@semiont/sdk';
134
- export { createYieldStateUnit, type YieldStateUnit, type GenerateDocumentOptions } from '@semiont/sdk';
135
- export { createGatherStateUnit, type GatherStateUnit } from '@semiont/sdk';
136
- export { createMatchStateUnit, type MatchStateUnit } from '@semiont/sdk';
137
- export { createShellStateUnit, type ShellStateUnit, type ShellStateUnitOptions, type ToolbarPanelType, COMMON_PANELS, RESOURCE_PANELS } from './state/shell-state-unit';
138
- export { createSessionStateUnit, type SessionStateUnit } from './state/session-state-unit';
139
- export { createComposePageStateUnit, type ComposePageStateUnit, type ComposeParams, type ComposeMode, type CloneData, type ReferenceData, type SaveResourceParams } from './features/resource-compose/state/compose-page-state-unit';
140
- export { createResourceViewerPageStateUnit, type ResourceViewerPageStateUnit, type WizardState, type AnnotationGroups } from './features/resource-viewer/state/resource-viewer-page-state-unit';
141
- export { createResourceLoaderStateUnit, type ResourceLoaderStateUnit } from './features/resource-viewer/state/resource-loader-state-unit';
142
- export { createAdminUsersStateUnit, type AdminUsersStateUnit } from './features/admin-users/state/admin-users-state-unit';
143
- export { createAdminSecurityStateUnit, type AdminSecurityStateUnit } from './features/admin-security/state/admin-security-state-unit';
144
- export { createExchangeStateUnit, type ExchangeStateUnit, type ImportPreview } from './features/admin-exchange/state/exchange-state-unit';
145
- export { createWelcomeStateUnit, type WelcomeStateUnit } from './features/auth-welcome/state/welcome-state-unit';
146
- export { createDiscoverStateUnit, type DiscoverStateUnit } from './features/resource-discovery/state/discover-state-unit';
147
- export { createEntityTagsStateUnit, type EntityTagsStateUnit } from './features/moderate-entity-tags/state/entity-tags-state-unit';
148
- export * from './hooks/useShellStateUnit';
149
- export * from './hooks/useObservable';
150
- //# sourceMappingURL=index.d.ts.map
14
+ * Collection of all annotation types for a resource.
15
+ * Replaces separate highlights, references, assessments, comments, tags props.
16
+ */
17
+ interface AnnotationsCollection {
18
+ highlights: Annotation[];
19
+ references: Annotation[];
20
+ assessments: Annotation[];
21
+ comments: Annotation[];
22
+ tags: Annotation[];
23
+ }
24
+ /**
25
+ * Event handlers for annotation interactions.
26
+ * Groups multiple click and hover handlers into a single interface.
27
+ */
28
+ interface AnnotationHandlers {
29
+ /** Unified click handler - routes based on annotation type and current mode */
30
+ onClick?: (annotation: Annotation, event?: React.MouseEvent) => void;
31
+ /** Unified hover handler for all annotation types */
32
+ onHover?: (annotationId: string | null) => void;
33
+ /** Hover handler specifically for comment panel highlighting */
34
+ onCommentHover?: (commentId: string | null) => void;
35
+ }
36
+ /**
37
+ * UI-level parameters for annotation creation.
38
+ * Works for both text selections and image shapes.
39
+ * Used by annotation UI components before converting to AnnotationManager params.
40
+ */
41
+ interface UICreateAnnotationParams {
42
+ /** The motivation for creating this annotation */
43
+ motivation: _semiont_react_ui.SelectionMotivation;
44
+ /** Selector information - text, SVG, or fragment */
45
+ selector: {
46
+ /** Selector type */
47
+ type: 'TextQuoteSelector' | 'SvgSelector' | 'FragmentSelector';
48
+ /** For TextQuoteSelector: the exact text selected */
49
+ exact?: string;
50
+ /** For TextQuoteSelector: context before selection */
51
+ prefix?: string;
52
+ /** For TextQuoteSelector: context after selection */
53
+ suffix?: string;
54
+ /** For TextPositionSelector: start position in document */
55
+ start?: number;
56
+ /** For TextPositionSelector: end position in document */
57
+ end?: number;
58
+ /** For SvgSelector: the SVG shape string */
59
+ value?: string;
60
+ /** For FragmentSelector: conformsTo URI (RFC 3778 for PDF) */
61
+ conformsTo?: string;
62
+ };
63
+ /** Optional position for popup placement (text: near selection, image: shape center) */
64
+ position?: {
65
+ x: number;
66
+ y: number;
67
+ };
68
+ }
69
+ /**
70
+ * Unified creation handler for new annotations.
71
+ * Works for both text and image annotations.
72
+ *
73
+ * Behavior by motivation:
74
+ * - highlighting/assessing: Creates annotation immediately
75
+ * - commenting: Creates annotation, then opens Comment Panel
76
+ * - linking: Shows Quick Reference popup FIRST, creates when user confirms
77
+ */
78
+ interface AnnotationCreationHandler {
79
+ onCreate?: (params: UICreateAnnotationParams) => void | Promise<void> | Promise<Annotation | undefined>;
80
+ }
81
+ /**
82
+ * UI state for annotation toolbar and interactions.
83
+ * Groups multiple UI state props into a single object.
84
+ */
85
+ interface AnnotationUIState {
86
+ /** Currently selected annotation motivation (linking, highlighting, etc.) */
87
+ selectedMotivation: _semiont_react_ui.SelectionMotivation | null;
88
+ /** Currently selected click mode (detail, follow, delete, jsonld) */
89
+ selectedClick: _semiont_react_ui.ClickAction;
90
+ /** Currently selected shape for image annotations */
91
+ selectedShape: _semiont_react_ui.ShapeType;
92
+ /** ID of currently hovered annotation (optional - only set when hovering) */
93
+ hoveredAnnotationId?: string | null;
94
+ /** ID of annotation to scroll to (optional - only set when scrolling needed) */
95
+ scrollToAnnotationId?: string | null;
96
+ }
97
+ /**
98
+ * Configuration options for annotation views.
99
+ * Groups feature flags and settings.
100
+ */
101
+ interface AnnotationConfig {
102
+ /** Whether content is editable */
103
+ editable?: boolean;
104
+ /** Whether to show annotation widgets (entity types, reference buttons) */
105
+ enableWidgets?: boolean;
106
+ /** Whether to show line numbers in code view */
107
+ showLineNumbers?: boolean;
108
+ /** Whether view is in annotate mode or browse mode */
109
+ annotateMode?: boolean;
110
+ }
111
+
112
+ /**
113
+ * Parameters for creating an annotation
114
+ */
115
+ interface CreateAnnotationParams {
116
+ rUri: ResourceId;
117
+ motivation: 'highlighting' | 'linking' | 'assessing' | 'commenting' | 'tagging';
118
+ selector: Selector | Selector[];
119
+ body?: any[];
120
+ }
121
+ /**
122
+ * Parameters for deleting an annotation
123
+ */
124
+ interface DeleteAnnotationParams {
125
+ annotationId: string;
126
+ rUri: ResourceId;
127
+ }
128
+ /**
129
+ * Annotation Manager Interface
130
+ *
131
+ * Framework-agnostic interface for annotation mutations.
132
+ * Apps provide implementations via AnnotationProvider.
133
+ *
134
+ * Example implementation:
135
+ * ```typescript
136
+ * function useAnnotationManager(client: SemiontClient): AnnotationManager {
137
+ * return {
138
+ * markAnnotation: async (params) => {
139
+ * const result = await client.mark.annotation({ target: { source: params.rUri, ... }, ... });
140
+ * return result.annotation;
141
+ * },
142
+ * deleteAnnotation: async (params) => {
143
+ * await client.mark.delete(params.rUri, params.annotationId);
144
+ * }
145
+ * };
146
+ * }
147
+ * ```
148
+ */
149
+ interface AnnotationManager {
150
+ /**
151
+ * Create a new annotation
152
+ * @param params - Creation parameters (rUri, motivation, selector, body)
153
+ * @returns Promise resolving to the created annotation, or undefined if creation fails
154
+ */
155
+ markAnnotation: (params: CreateAnnotationParams) => Promise<Annotation | undefined>;
156
+ /**
157
+ * Delete an annotation
158
+ * @param params - Deletion parameters (annotationId, rUri)
159
+ * @returns Promise resolving when deletion completes
160
+ */
161
+ deleteAnnotation: (params: DeleteAnnotationParams) => Promise<void>;
162
+ }
163
+
164
+ /**
165
+ * Represents a single navigation item
166
+ */
167
+ interface NavigationItem {
168
+ /** Display name for the navigation item */
169
+ name: string;
170
+ /** Target URL/path for the navigation item */
171
+ href: string;
172
+ /** Icon component to display */
173
+ icon: ComponentType<any>;
174
+ /** Optional description/tooltip text */
175
+ description?: string;
176
+ }
177
+ /**
178
+ * Props for navigation components that need framework-specific routing
179
+ */
180
+ interface NavigationProps {
181
+ /** List of navigation items to display */
182
+ items: NavigationItem[];
183
+ /** Current active path for highlighting */
184
+ currentPath: string;
185
+ /** Framework-specific Link component (e.g., Next.js Link) */
186
+ LinkComponent: ComponentType<{
187
+ href: string;
188
+ className?: string;
189
+ children: ReactNode;
190
+ title?: string;
191
+ }>;
192
+ /** Optional CSS class name */
193
+ className?: string;
194
+ /** Optional section title */
195
+ title?: string;
196
+ }
197
+
198
+ /**
199
+ * Translation management interface
200
+ * Apps implement this to provide translations using their preferred i18n library
201
+ */
202
+ interface TranslationManager {
203
+ /**
204
+ * Translate a key within a namespace
205
+ * @param namespace - Translation namespace (e.g., 'Toolbar', 'ResourceViewer')
206
+ * @param key - Translation key within the namespace
207
+ * @param params - Optional parameters for interpolation
208
+ * @returns Translated string
209
+ */
210
+ t: (namespace: string, key: string, params?: Record<string, any>) => string;
211
+ }
212
+
213
+ /**
214
+ * Type definitions for resource viewer feature
215
+ */
216
+
217
+ type SemiontResource$2 = ResourceDescriptor;
218
+ type Motivation$8 = components['schemas']['Motivation'];
219
+ /**
220
+ * Selection for creating annotations
221
+ */
222
+ interface TextSelection {
223
+ exact: string;
224
+ start: number;
225
+ end: number;
226
+ prefix?: string;
227
+ suffix?: string;
228
+ svgSelector?: string;
229
+ }
230
+
231
+ /**
232
+ * Centralized annotation type registry
233
+ *
234
+ * Single source of truth for W3C annotation motivation metadata including:
235
+ * - Visual styling (CSS classes)
236
+ * - Behavior flags (clickable, hover, side panel)
237
+ * - Type guards (motivation matching)
238
+ * - Accessibility (screen reader announcements)
239
+ * - Runtime handlers (click, hover, detect, update, create)
240
+ *
241
+ * Per CLAUDE.md: This is the ONLY place to define annotation type metadata.
242
+ * No aliasing, wrappers, or compatibility layers elsewhere.
243
+ */
244
+
245
+ type Motivation$7 = components['schemas']['Motivation'];
246
+ /**
247
+ * Detection configuration for SSE-based annotation detection
248
+ */
249
+ interface DetectionConfig {
250
+ sseMethod: 'detectReferences' | 'detectHighlights' | 'detectAssessments' | 'detectComments' | 'detectTags';
251
+ countField: 'foundCount' | 'createdCount' | 'tagsCreated';
252
+ displayNamePlural: string;
253
+ displayNameSingular: string;
254
+ formatRequestParams?: (args: unknown[]) => Array<{
255
+ label: string;
256
+ value: string;
257
+ }>;
258
+ }
259
+ /**
260
+ * Creation configuration - describes how to create annotations of this type
261
+ */
262
+ interface CreateConfig {
263
+ bodyBuilder: 'empty' | 'text' | 'entityTag' | 'dualTag';
264
+ refetchAfter: boolean;
265
+ successMessage?: string;
266
+ }
267
+ /**
268
+ * Annotator: Encapsulates all motivation-specific behavior
269
+ * Handles clicks, hovers, detection, and other operations for one annotation type
270
+ */
271
+ interface Annotator {
272
+ motivation: Motivation$7;
273
+ internalType: string;
274
+ displayName: string;
275
+ description: string;
276
+ className: string;
277
+ iconEmoji?: string;
278
+ isClickable: boolean;
279
+ hasHoverInteraction: boolean;
280
+ hasSidePanel: boolean;
281
+ matchesAnnotation: (annotation: Annotation) => boolean;
282
+ announceOnCreate: string;
283
+ detection?: DetectionConfig;
284
+ create: CreateConfig;
285
+ }
286
+ /**
287
+ * Static annotator definitions - single source of truth
288
+ */
289
+ declare const ANNOTATORS: Record<string, Annotator>;
290
+
291
+ /**
292
+ * Centralized button styles matching Figma design
293
+ * Two primary styles from authenticated home page:
294
+ * 1. Primary (cyan/blue gradient) - for main CTAs
295
+ * 2. Secondary (gray with black outline) - for secondary actions
296
+ */
297
+ declare const buttonStyles: {
298
+ readonly primary: {
299
+ readonly base: "semiont-button semiont-button--primary";
300
+ readonly large: "semiont-button semiont-button--primary semiont-button--large";
301
+ };
302
+ readonly secondary: {
303
+ readonly base: "semiont-button semiont-button--secondary";
304
+ readonly withScale: "semiont-button semiont-button--secondary semiont-button--scale";
305
+ };
306
+ readonly tertiary: {
307
+ readonly base: "semiont-button semiont-button--tertiary";
308
+ };
309
+ readonly danger: {
310
+ readonly base: "semiont-button semiont-button--danger";
311
+ };
312
+ readonly warning: {
313
+ readonly base: "semiont-button semiont-button--warning";
314
+ };
315
+ readonly combine: (...classes: string[]) => string;
316
+ };
317
+
318
+ declare const jsonLightTheme: _codemirror_state.Extension;
319
+ declare const jsonLightHighlightStyle: HighlightStyle;
320
+
321
+ /**
322
+ * CodeMirror Inline Widgets
323
+ *
324
+ * Custom widgets for enhancing the document editing experience:
325
+ * - Reference resolution indicators (resolved 🔗, generating ✨, stub ❓)
326
+ *
327
+ * Event handling uses delegation — no per-widget listeners.
328
+ * Data attributes on the container enable CodeMirrorRenderer to handle
329
+ * clicks and hovers via a single set of delegated handlers.
330
+ */
331
+
332
+ /**
333
+ * Reference Resolution Widget
334
+ * Shows a small indicator next to references with hover preview.
335
+ *
336
+ * All event handling is delegated — the widget sets data attributes
337
+ * and CodeMirrorRenderer handles events via container-level listeners.
338
+ */
339
+ declare class ReferenceResolutionWidget extends WidgetType {
340
+ readonly annotation: Annotation;
341
+ readonly targetDocumentName?: string | undefined;
342
+ readonly isGenerating?: boolean | undefined;
343
+ constructor(annotation: Annotation, targetDocumentName?: string | undefined, isGenerating?: boolean | undefined);
344
+ eq(other: ReferenceResolutionWidget): boolean;
345
+ toDOM(): HTMLSpanElement;
346
+ ignoreEvent(event: Event): boolean;
347
+ }
348
+ /**
349
+ * Show a tooltip preview on a widget container.
350
+ * Called from delegated mouseenter handler in CodeMirrorRenderer.
351
+ */
352
+ declare function showWidgetPreview(container: HTMLElement, documentName: string): void;
353
+ /**
354
+ * Hide the tooltip preview from a widget container.
355
+ * Called from delegated mouseleave handler in CodeMirrorRenderer.
356
+ */
357
+ declare function hideWidgetPreview(container: HTMLElement): void;
358
+
359
+ type SelectionMotivation = 'linking' | 'highlighting' | 'assessing' | 'commenting' | 'tagging';
360
+ type ClickAction = 'detail' | 'follow' | 'jsonld' | 'deleting';
361
+ type ShapeType = 'rectangle' | 'circle' | 'polygon';
362
+ interface AnnotateToolbarProps {
363
+ selectedMotivation: SelectionMotivation | null;
364
+ selectedClick: ClickAction;
365
+ showSelectionGroup?: boolean;
366
+ showDeleteButton?: boolean;
367
+ showShapeGroup?: boolean;
368
+ selectedShape?: ShapeType;
369
+ mediaType?: string | null;
370
+ annotateMode: boolean;
371
+ annotators: Record<string, Annotator>;
372
+ }
373
+ /**
374
+ * Toolbar for annotation controls with mode, selection, click, and shape options
375
+ *
376
+ * @emits mark:selection-changed - Selection motivation changed. Payload: { motivation: SelectionMotivation | null }
377
+ * @emits mark:click-changed - Click action mode changed. Payload: { action: ClickAction }
378
+ * @emits mark:shape-changed - Drawing shape changed. Payload: { shape: ShapeType }
379
+ * @emits mark:mode-toggled - View mode toggled between browse and annotate. Payload: undefined
380
+ */
381
+ declare function AnnotateToolbar({ selectedMotivation, selectedClick, showSelectionGroup, showDeleteButton, showShapeGroup, selectedShape, mediaType, annotateMode, annotators }: AnnotateToolbarProps): React__default.JSX.Element;
382
+
383
+ /**
384
+ * Media Type Shape Support
385
+ *
386
+ * Defines which annotation shapes are supported for each media type.
387
+ * Shapes are tracked per selector type (FragmentSelector, SvgSelector).
388
+ */
389
+
390
+ /**
391
+ * Selector types that support shape selection
392
+ */
393
+ type SelectorType = 'fragment' | 'svg' | 'text';
394
+ /**
395
+ * Get supported annotation shapes for a given media type
396
+ *
397
+ * PDF: Only rectangles (FragmentSelector with RFC 3778 viewrect)
398
+ * Images: All shapes (SvgSelector supports rect, circle, polygon)
399
+ *
400
+ * @param mediaType - MIME type of the resource (e.g., 'application/pdf', 'image/png')
401
+ * @returns Array of supported shape types for annotation
402
+ */
403
+ declare function getSupportedShapes(mediaType: string | undefined | null): ShapeType[];
404
+ /**
405
+ * Check if a shape type is supported for a given media type
406
+ *
407
+ * @param mediaType - MIME type of the resource
408
+ * @param shape - Shape type to check
409
+ * @returns true if the shape is supported for this media type
410
+ */
411
+ declare function isShapeSupported(mediaType: string | undefined | null, shape: ShapeType): boolean;
412
+ /**
413
+ * Get the selector type used for a given media type
414
+ *
415
+ * @param mediaType - MIME type of the resource
416
+ * @returns Selector type (fragment, svg, or text)
417
+ */
418
+ declare function getSelectorType(mediaType: string | undefined | null): SelectorType;
419
+ /**
420
+ * Get the selected shape for a given selector type from localStorage
421
+ *
422
+ * @param selectorType - The selector type
423
+ * @returns The selected shape, or default for that selector type
424
+ */
425
+ declare function getSelectedShapeForSelectorType(selectorType: SelectorType): ShapeType;
426
+ /**
427
+ * Save the selected shape for a given selector type to localStorage
428
+ *
429
+ * @param selectorType - The selector type
430
+ * @param shape - The shape to save
431
+ */
432
+ declare function saveSelectedShapeForSelectorType(selectorType: SelectorType, shape: ShapeType): void;
433
+
434
+ /**
435
+ * Annotation overlay: decouples annotation highlighting from markdown rendering.
436
+ *
437
+ * Instead of weaving annotations into the markdown AST via remark/rehype plugins
438
+ * (which forces O(ASTnodes × annotations) work on every render), this module:
439
+ *
440
+ * 1. Builds a source→rendered offset map once after the markdown DOM paints
441
+ * 2. Resolves W3C TextPositionSelector offsets to DOM Ranges via binary search
442
+ * 3. Wraps matched ranges with <span> elements carrying data-annotation-* attributes
443
+ *
444
+ * Markdown renders once (cached by React.memo). Annotation changes only touch
445
+ * the overlay spans — no markdown re-parse, no AST walk.
446
+ */
447
+
448
+ interface OverlayAnnotation {
449
+ id: string;
450
+ exact: string;
451
+ offset: number;
452
+ length: number;
453
+ type: string;
454
+ source: string | null;
455
+ }
456
+ interface TextNodeEntry {
457
+ node: Text;
458
+ start: number;
459
+ end: number;
460
+ }
461
+ /**
462
+ * Build a map from markdown source offsets to rendered text offsets.
463
+ * Character-by-character alignment: walks source and rendered text in parallel,
464
+ * matching characters and skipping markdown syntax in the source.
465
+ *
466
+ * Complexity: O(sourceLength) — runs once per content change.
467
+ */
468
+ declare function buildSourceToRenderedMap(markdownSource: string, container: HTMLElement): Map<number, number>;
469
+ /**
470
+ * Build a sorted array of text nodes with cumulative rendered offsets
471
+ * for efficient offset→node lookups via binary search.
472
+ *
473
+ * Complexity: O(textNodes) — runs once per overlay application.
474
+ */
475
+ declare function buildTextNodeIndex(container: HTMLElement): TextNodeEntry[];
476
+ /**
477
+ * Resolve annotations to DOM Ranges using the cached offset map.
478
+ *
479
+ * Complexity: O(annotations × log(textNodes)).
480
+ */
481
+ declare function resolveAnnotationRanges(annotations: OverlayAnnotation[], offsetMap: Map<number, number>, textNodeIndex: TextNodeEntry[]): Map<string, {
482
+ range: Range;
483
+ annotation: OverlayAnnotation;
484
+ }>;
485
+ /**
486
+ * Wrap annotation Ranges with styled <span> elements.
487
+ * Handles cross-element ranges by splitting into per-text-node segments.
488
+ */
489
+ declare function applyHighlights(ranges: Map<string, {
490
+ range: Range;
491
+ annotation: OverlayAnnotation;
492
+ }>): void;
493
+ /**
494
+ * Remove all annotation highlight spans, restoring the original DOM.
495
+ * Unwraps spans and merges adjacent text nodes.
496
+ */
497
+ declare function clearHighlights(container: HTMLElement): void;
498
+ /**
499
+ * Convert W3C Annotations to the simplified overlay format.
500
+ * Extracts TextPositionSelector offsets and annotation type.
501
+ */
502
+ declare function toOverlayAnnotations(annotations: Annotation[]): OverlayAnnotation[];
503
+
504
+ /**
505
+ * Resource utilities
506
+ * Shared helper functions for resource display and metadata
507
+ */
508
+ /**
509
+ * Get icon emoji based on media type
510
+ */
511
+ declare function getResourceIcon(mediaType: string | undefined): string;
512
+ /**
513
+ * Check if a resource supports text-based AI detection features
514
+ *
515
+ * Currently returns true for any text/* media type.
516
+ * Future enhancements may include:
517
+ * - Checking resource language/locale compatibility
518
+ * - Validating content size limits
519
+ * - Checking for specific text format requirements
520
+ *
521
+ * @param mediaType - The media type string (e.g., 'text/plain', 'text/markdown')
522
+ * @returns true if the resource supports AI detection features
523
+ */
524
+ declare function supportsDetection(mediaType: string | undefined): boolean;
525
+
526
+ /**
527
+ * Frontend-specific validation utilities
528
+ *
529
+ * Browser and Next.js specific validation with security checks.
530
+ * For generic validation utilities, see @semiont/api-client/utils/validation
531
+ */
532
+
533
+ /**
534
+ * Image URL validation with security checks (browser-specific)
535
+ *
536
+ * Validates image URLs for use in browser environments with XSS prevention.
537
+ * Only allows HTTPS for external images, blocks suspicious patterns.
538
+ */
539
+ declare const ImageURLSchema: {
540
+ parse(url: unknown): string;
541
+ safeParse(url: unknown): ValidationResult<string>;
542
+ };
543
+ /**
544
+ * OAuth user validation (Next.js NextAuth specific)
545
+ *
546
+ * Validates user objects returned from OAuth providers.
547
+ * Includes domain validation for access control.
548
+ */
549
+ interface OAuthUser {
550
+ id: string;
551
+ email: string;
552
+ name?: string | null;
553
+ image?: string | null;
554
+ domain: string;
555
+ isAdmin: boolean;
556
+ isModerator: boolean;
557
+ }
558
+ declare const OAuthUserSchema: {
559
+ parse(data: unknown): OAuthUser;
560
+ safeParse(data: unknown): ValidationResult<OAuthUser>;
561
+ };
562
+ /**
563
+ * URL sanitization for images (browser-specific security)
564
+ *
565
+ * Sanitizes image URLs by validating and reconstructing with only safe parts.
566
+ * Returns null if validation fails.
567
+ *
568
+ * @param url - Image URL to sanitize
569
+ * @returns Sanitized URL or null if invalid
570
+ */
571
+ declare function sanitizeImageURL(url: string): string | null;
572
+
573
+ declare function useStateUnit<T extends StateUnit>(factory: () => T): T;
574
+
575
+ /**
576
+ * Creates a debounced version of a callback function
577
+ *
578
+ * @param callback - The function to debounce
579
+ * @param delay - Debounce delay in milliseconds
580
+ * @returns Debounced function
581
+ *
582
+ * @example
583
+ * const debouncedSearch = useDebouncedCallback(
584
+ * (query) => performSearch(query),
585
+ * 500
586
+ * );
587
+ */
588
+ declare function useDebouncedCallback<T extends (...args: any[]) => any>(callback: T, delay: number): (...args: Parameters<T>) => void;
589
+ /**
590
+ * useDebounce Hook
591
+ *
592
+ * Custom hook for debouncing values (e.g., search input).
593
+ * Returns a debounced value that updates after the specified delay.
594
+ *
595
+ * @param value - The value to debounce
596
+ * @param delay - Debounce delay in milliseconds
597
+ * @returns Debounced value
598
+ *
599
+ * @example
600
+ * const debouncedQuery = useDebounce(searchQuery, 500);
601
+ */
602
+ declare function useDebounce<T>(value: T, delay: number): T;
603
+
604
+ declare function formatTime(milliseconds: number | null): string | null;
605
+
606
+ interface KeyboardShortcut {
607
+ key: string;
608
+ ctrlOrCmd?: boolean;
609
+ shift?: boolean;
610
+ alt?: boolean;
611
+ handler: (event: KeyboardEvent) => void;
612
+ description?: string;
613
+ enabled?: boolean;
614
+ }
615
+ /**
616
+ * Hook for managing keyboard shortcuts
617
+ * Handles platform differences (Cmd on Mac, Ctrl on Windows/Linux)
618
+ * Prevents conflicts with browser shortcuts
619
+ */
620
+ declare function useKeyboardShortcuts(shortcuts: KeyboardShortcut[]): void;
621
+ /**
622
+ * Hook for double key press detection (e.g., double Escape)
623
+ */
624
+ declare function useDoubleKeyPress(key: string, handler: () => void, timeout?: number): void;
625
+ /**
626
+ * Get keyboard shortcut display text based on platform
627
+ */
628
+ declare function getShortcutDisplay(shortcut: KeyboardShortcut): string;
629
+ /**
630
+ * Hook to check if user is currently typing in an input field
631
+ * Keyboard shortcuts should generally be disabled when typing
632
+ */
633
+ declare function useIsTyping(): boolean;
634
+
635
+ /**
636
+ * Hook to manage line numbers display setting with localStorage persistence
637
+ */
638
+ declare function useLineNumbers(): {
639
+ showLineNumbers: boolean;
640
+ toggleLineNumbers: () => void;
641
+ };
642
+
643
+ /**
644
+ * Hook to manage hover delay setting with localStorage persistence
645
+ */
646
+ declare function useHoverDelay(): {
647
+ hoverDelayMs: number;
648
+ setHoverDelayMs: (delayMs: number) => void;
649
+ };
650
+
651
+ /**
652
+ * Generic router interface - works with any router that has push/replace methods
653
+ * (Next.js App Router, Next.js Pages Router, React Router, etc.)
654
+ */
655
+ interface Router {
656
+ push: (path: string) => void;
657
+ replace?: (path: string) => void;
658
+ [key: string]: any;
659
+ }
660
+ /**
661
+ * Hook that wraps any router with event emission for observability
662
+ *
663
+ * Use this to wrap your router (Next.js, React Router, etc.) when you want
664
+ * navigation actions to be observable through the NavigationEventBus.
665
+ *
666
+ * @emits nav:push - Router navigation requested. Payload: { path: string, reason?: string }
667
+ *
668
+ * @example
669
+ * ```typescript
670
+ * // Next.js App Router
671
+ * import { useRouter } from 'next/navigation';
672
+ * const nextRouter = useRouter();
673
+ * const router = useObservableRouter(nextRouter);
674
+ * router.push('/know/discover', { reason: 'resource-closed' });
675
+ *
676
+ * // React Router
677
+ * import { useNavigate } from 'react-router-dom';
678
+ * const navigate = useNavigate();
679
+ * const router = useObservableRouter({ push: navigate });
680
+ * router.push('/know/discover', { reason: 'resource-closed' });
681
+ * ```
682
+ */
683
+ declare function useObservableRouter<T extends Router>(baseRouter: T): T;
684
+ /**
685
+ * Request navigation with event emission
686
+ *
687
+ * This hook emits a navigation request event. The app must subscribe to
688
+ * 'nav:external' and perform the actual navigation using
689
+ * its router (Next.js, React Router, etc.) to enable client-side routing.
690
+ *
691
+ * If no subscriber handles the event, falls back to window.location.href
692
+ * after a brief delay to allow for event handling.
693
+ *
694
+ * @emits nav:external - External navigation requested. Payload: { url: string, resourceId?: string, cancelFallback: () => void }
695
+ *
696
+ * The payload includes a `cancelFallback` function that subscribers must call to
697
+ * prevent the window.location fallback from firing. Subscribers that handle the
698
+ * navigation (e.g. via client-side routing) should always call cancelFallback().
699
+ *
700
+ * @example
701
+ * ```typescript
702
+ * // In component (react-ui package)
703
+ * const navigate = useObservableExternalNavigation();
704
+ * navigate('/know/resource/123', { resourceId: '123' });
705
+ *
706
+ * // In app (frontend package) - subscribe, cancel fallback, and handle with Next.js router
707
+ * const router = useRouter();
708
+ * useEventSubscriptions({
709
+ * 'nav:external': ({ url, cancelFallback }) => {
710
+ * cancelFallback(); // Prevent window.location fallback
711
+ * router.push(url); // Client-side navigation
712
+ * },
713
+ * });
714
+ * ```
715
+ */
716
+ declare function useObservableExternalNavigation(): (url: string, metadata?: {
717
+ resourceId?: string;
718
+ }) => void;
719
+
720
+ interface UsePanelWidthOptions {
721
+ defaultWidth?: number;
722
+ minWidth?: number;
723
+ maxWidth?: number;
724
+ storageKey?: string;
725
+ }
726
+ /**
727
+ * Custom hook for managing resizable panel width with localStorage persistence
728
+ *
729
+ * @param options Configuration options for panel width behavior
730
+ * @param options.defaultWidth Default width in pixels (default: 384px / 24rem)
731
+ * @param options.minWidth Minimum allowed width in pixels (default: 256px / 16rem)
732
+ * @param options.maxWidth Maximum allowed width in pixels (default: 800px / 50rem)
733
+ * @param options.storageKey localStorage key for persistence (default: 'semiont-panel-width')
734
+ *
735
+ * @returns Object containing current width, setter function, and constraints
736
+ *
737
+ * @example
738
+ * ```tsx
739
+ * const { width, setWidth, minWidth, maxWidth } = usePanelWidth();
740
+ *
741
+ * <div style={{ width: `${width}px` }}>
742
+ * <ResizeHandle onResize={setWidth} minWidth={minWidth} maxWidth={maxWidth} />
743
+ * </div>
744
+ * ```
745
+ */
746
+ declare function usePanelWidth({ defaultWidth, // 24rem
747
+ minWidth, // 16rem
748
+ maxWidth, // 50rem
749
+ storageKey }?: UsePanelWidthOptions): {
750
+ width: number;
751
+ setWidth: (newWidth: number) => void;
752
+ minWidth: number;
753
+ maxWidth: number;
754
+ };
755
+
756
+ interface UseRovingTabIndexOptions {
757
+ orientation?: 'horizontal' | 'vertical' | 'grid';
758
+ loop?: boolean;
759
+ cols?: number;
760
+ }
761
+ declare function useRovingTabIndex<T extends HTMLElement>(itemCount: number, options?: UseRovingTabIndexOptions): {
762
+ containerRef: React$1.RefObject<T | null>;
763
+ handleKeyDown: (event: KeyboardEvent$1) => void;
764
+ focusItem: (index: number) => void;
765
+ };
766
+
767
+ /**
768
+ * Tracks the time remaining on the active KB session's JWT and whether it's
769
+ * expiring soon (< 5 minutes). Reads the session's `expiresAt` getter (which
770
+ * derives from the current `token$` value) and re-derives once per second.
771
+ */
772
+ declare function useSessionExpiry(): {
773
+ timeRemaining: number | null;
774
+ isExpiringSoon: boolean;
775
+ };
776
+
777
+ type Theme = 'light' | 'dark' | 'system';
778
+ type ResolvedTheme = 'light' | 'dark';
779
+ interface ThemeContextValue {
780
+ theme: Theme;
781
+ setTheme: (theme: Theme) => void;
782
+ resolvedTheme: ResolvedTheme;
783
+ systemTheme: ResolvedTheme;
784
+ }
785
+ declare function ThemeProvider({ children }: {
786
+ children: ReactNode;
787
+ }): React$1.JSX.Element;
788
+ declare function useTheme(): ThemeContextValue;
789
+
790
+ /**
791
+ * Hook for managing dropdown/menu visibility with click outside handling
792
+ */
793
+ declare function useDropdown(): {
794
+ isOpen: boolean;
795
+ toggle: () => void;
796
+ open: () => void;
797
+ close: () => void;
798
+ dropdownRef: React$1.RefObject<HTMLDivElement | null>;
799
+ };
800
+ /**
801
+ * Hook for managing loading states with minimum display time
802
+ */
803
+ declare function useLoadingState(minLoadingTime?: number): {
804
+ isLoading: boolean;
805
+ showLoading: boolean;
806
+ startLoading: () => void;
807
+ stopLoading: () => void;
808
+ };
809
+ /**
810
+ * Hook for local storage with SSR safety
811
+ */
812
+ declare function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T | ((val: T) => T)) => void];
813
+
814
+ interface UseResourceContentResult {
815
+ content: string;
816
+ loading: boolean;
817
+ }
818
+ declare function useResourceContent(rUri: ResourceId, resource: ResourceDescriptor, enabled?: boolean): UseResourceContentResult;
819
+
820
+ interface SemiontProviderProps {
821
+ /** Inject a fully-constructed browser (tests, embedded hosts that build their own). Omit to use the default. */
822
+ browser?: SemiontBrowser;
823
+ /** Override the default `WebBrowserStorage`. Useful for non-browser hosts (Electron/Tauri filesystem-backed adapters). */
824
+ storage?: SessionStorage;
825
+ /** Override the default HTTP session factory. Useful for in-process or future non-HTTP transports. */
826
+ sessionFactory?: SessionFactory;
827
+ children: ReactNode;
828
+ }
829
+ declare function SemiontProvider({ browser, storage, sessionFactory, children }: SemiontProviderProps): React$1.JSX.Element;
830
+ declare function useSemiont(): SemiontBrowser;
831
+
832
+ /**
833
+ * WebBrowserStorage — browser-backed `SessionStorage` implementation.
834
+ * Wraps `localStorage` for reads/writes and `window`'s `storage` event
835
+ * for cross-tab change notifications.
836
+ *
837
+ * Construction requires a browser context. The guard matches the
838
+ * existing registry behavior: server rendering that accidentally
839
+ * instantiates this gets a loud error rather than a silent no-op
840
+ * that would mask token leaks.
841
+ */
842
+
843
+ declare class WebBrowserStorage implements SessionStorage {
844
+ constructor();
845
+ get(key: string): string | null;
846
+ set(key: string, value: string): void;
847
+ delete(key: string): void;
848
+ subscribe(handler: (key: string, newValue: string | null) => void): () => void;
849
+ }
850
+
851
+ interface AnnotationProviderProps {
852
+ annotationManager: AnnotationManager;
853
+ children: React__default.ReactNode;
854
+ }
855
+ /**
856
+ * Annotation Provider
857
+ *
858
+ * Provides annotation mutation capabilities (create, delete) via the Provider Pattern.
859
+ * Apps inject their own AnnotationManager implementation.
860
+ *
861
+ * Example usage:
862
+ * ```typescript
863
+ * function useAnnotationManager(client: SemiontClient): AnnotationManager {
864
+ * return {
865
+ * markAnnotation: async (params) => {
866
+ * const result = await client.mark.annotation({
867
+ * motivation: params.motivation,
868
+ * target: { source: params.rUri, selector: params.selector },
869
+ * body: params.body,
870
+ * });
871
+ * return result.annotation;
872
+ * },
873
+ * deleteAnnotation: async (params) => {
874
+ * await client.mark.delete(params.rUri, params.annotationId);
875
+ * }
876
+ * };
877
+ * }
878
+ *
879
+ * // In app layout
880
+ * const annotationManager = useAnnotationManager();
881
+ * <AnnotationProvider annotationManager={annotationManager}>
882
+ * <YourComponents />
883
+ * </AnnotationProvider>
884
+ * ```
885
+ */
886
+ declare function AnnotationProvider({ annotationManager, children }: AnnotationProviderProps): React__default.JSX.Element;
887
+ /**
888
+ * Hook to access the AnnotationManager
889
+ *
890
+ * @throws Error if used outside AnnotationProvider
891
+ * @returns AnnotationManager instance
892
+ */
893
+ declare function useAnnotationManager(): AnnotationManager;
894
+
895
+ /**
896
+ * Subscribe to a bus event with automatic cleanup.
897
+ *
898
+ * Two buses exist: the app-scoped bus on `SemiontBrowser` (panel, shell,
899
+ * tabs, nav, settings — events that must work without a KB session) and
900
+ * the per-session bus on `SemiontClient` (mark, beckon, gather,
901
+ * match, bind, yield, browse — events tied to a live KB). This hook
902
+ * subscribes to BOTH so components don't need to know which scope a
903
+ * channel is on. Each channel only fires on one bus, so there's no
904
+ * double-delivery.
905
+ *
906
+ * Stable-handler pattern: the ref-wrapped handler means `handler` itself
907
+ * can change on every render without causing a re-subscription.
908
+ *
909
+ * @example
910
+ * ```tsx
911
+ * useEventSubscription('mark:create-ok', ({ annotationId }) => {
912
+ * triggerSparkleAnimation(annotationId);
913
+ * });
914
+ * ```
915
+ */
916
+ declare function useEventSubscription<K extends keyof EventMap>(eventName: K, handler: (payload: EventMap[K]) => void): void;
917
+ /**
918
+ * Subscribe to multiple bus events at once. Same semantics as
919
+ * `useEventSubscription`, batched — each channel is subscribed on both
920
+ * the app bus (`SemiontBrowser`) and the session bus
921
+ * (`SemiontClient`, when a session is active).
922
+ *
923
+ * @example
924
+ * ```tsx
925
+ * useEventSubscriptions({
926
+ * 'mark:create-ok': ({ annotationId }) => handleCreated(annotationId),
927
+ * 'panel:toggle': ({ panel }) => console.log('toggled', panel),
928
+ * });
929
+ * ```
930
+ */
931
+ declare function useEventSubscriptions(subscriptions: {
932
+ [K in keyof EventMap]?: (payload: EventMap[K]) => void;
933
+ }): void;
934
+
935
+ interface ResourceAnnotationsContextType {
936
+ newAnnotationIds: Set<string>;
937
+ markAnnotation: (rUri: ResourceId, motivation: 'highlighting' | 'linking' | 'assessing' | 'commenting' | 'tagging', selector: Selector | Selector[], body?: any[]) => Promise<string | undefined>;
938
+ clearNewAnnotationId: (id: AnnotationId) => void;
939
+ triggerSparkleAnimation: (annotationId: string) => void;
940
+ }
941
+ declare function ResourceAnnotationsProvider({ children }: {
942
+ children: React__default.ReactNode;
943
+ }): React__default.JSX.Element;
944
+ declare function useResourceAnnotations(): ResourceAnnotationsContextType;
945
+
946
+ /**
947
+ * Standard Link component interface
948
+ * Compatible with Next.js Link, React Router Link, etc.
949
+ *
950
+ * Components accept Link as a prop to remain framework-agnostic.
951
+ * Apps provide their framework-specific Link component (Next.js, React Router, etc.)
952
+ */
953
+ interface LinkComponentProps {
954
+ href: string;
955
+ children: React__default.ReactNode;
956
+ className?: string;
957
+ title?: string;
958
+ onClick?: (e: React__default.MouseEvent) => void;
959
+ [key: string]: any;
960
+ }
961
+ /**
962
+ * Route builder interface
963
+ * Apps provide concrete implementations for their routing scheme
964
+ *
965
+ * Components accept routes as a prop to build URLs without framework dependencies.
966
+ *
967
+ * @example
968
+ * ```tsx
969
+ * // In app (e.g., frontend/src/lib/routing.ts)
970
+ * export const routes: RouteBuilder = {
971
+ * resourceDetail: (id) => `/know/resource/${id}`,
972
+ * userProfile: (id) => `/users/${id}`,
973
+ * search: (query) => `/search?q=${query}`,
974
+ * home: () => '/',
975
+ * };
976
+ *
977
+ * // Pass to components as props
978
+ * <MyComponent Link={Link} routes={routes} />
979
+ * ```
980
+ */
981
+ interface RouteBuilder {
982
+ /** Resource detail page */
983
+ resourceDetail: (id: string) => string;
984
+ /** User profile page */
985
+ userProfile: (id: string) => string;
986
+ /** Search page with query */
987
+ search: (query: string) => string;
988
+ /** Home/root page */
989
+ home: () => string;
990
+ /** About page */
991
+ about?: () => string;
992
+ /** Privacy policy page */
993
+ privacy?: () => string;
994
+ /** Terms of service page */
995
+ terms?: () => string;
996
+ /** Knowledge base page */
997
+ knowledge?: () => string;
998
+ /** Moderation dashboard */
999
+ moderate?: () => string;
1000
+ /** Admin dashboard */
1001
+ admin?: () => string;
1002
+ }
1003
+
1004
+ declare const AVAILABLE_LOCALES: readonly ["ar", "bn", "cs", "da", "de", "el", "en", "es", "fa", "fi", "fr", "he", "hi", "id", "it", "ja", "ko", "ms", "nl", "no", "pl", "pt", "ro", "sv", "th", "tr", "uk", "vi", "zh"];
1005
+ type AvailableLocale = typeof AVAILABLE_LOCALES[number];
1006
+ interface TranslationProviderProps {
1007
+ /**
1008
+ * Option 1: Provide a complete TranslationManager implementation
1009
+ */
1010
+ translationManager?: TranslationManager;
1011
+ /**
1012
+ * Option 2: Use built-in translations by specifying a locale
1013
+ * When adding new locales, just add the JSON file and update AVAILABLE_LOCALES
1014
+ */
1015
+ locale?: string;
1016
+ /**
1017
+ * Loading component to show while translations are being loaded
1018
+ * Only relevant when using dynamic locale loading
1019
+ */
1020
+ loadingComponent?: ReactNode;
1021
+ children: ReactNode;
1022
+ }
1023
+ /**
1024
+ * Provider for translation management with dynamic loading
1025
+ *
1026
+ * Three modes of operation:
1027
+ * 1. No provider: Components use default English strings
1028
+ * 2. With locale prop: Dynamically loads translations for that locale
1029
+ * 3. With translationManager: Use custom translation implementation
1030
+ */
1031
+ declare function TranslationProvider({ translationManager, locale, loadingComponent, children, }: TranslationProviderProps): React$1.JSX.Element;
1032
+ /**
1033
+ * Hook to access translations within a namespace
1034
+ *
1035
+ * Works in three modes:
1036
+ * 1. Without provider: Returns default English translations
1037
+ * 2. With provider using locale: Returns dynamically loaded translations for that locale
1038
+ * 3. With custom provider: Uses the custom translation manager
1039
+ *
1040
+ * @param namespace - Translation namespace (e.g., 'Toolbar', 'ResourceViewer')
1041
+ * @returns Function to translate keys within the namespace
1042
+ */
1043
+ declare function useTranslations(namespace: string): (key: string, params?: Record<string, any>) => string;
1044
+ /**
1045
+ * Hook to preload translations for a locale
1046
+ * Useful for preloading translations before navigation
1047
+ */
1048
+ declare function usePreloadTranslations(): {
1049
+ preload: (locale: string) => Promise<boolean>;
1050
+ isLoaded: (locale: string) => boolean;
1051
+ };
1052
+
1053
+ /**
1054
+ * Pure logic extracted from CodeMirrorRenderer
1055
+ *
1056
+ * These functions have zero dependency on CodeMirror's DOM or React.
1057
+ * They handle position conversion, tooltip generation, and decoration metadata.
1058
+ */
1059
+
1060
+ interface TextSegment {
1061
+ exact: string;
1062
+ annotation?: Annotation;
1063
+ start: number;
1064
+ end: number;
1065
+ /** How `segmentTextWithAnnotations` resolved the anchor. Present only on
1066
+ * annotated segments — background text has no strategy. */
1067
+ strategy?: AnchorStrategy;
1068
+ /** Confidence of the anchor classification. `'high'` is the no-ambiguity
1069
+ * path; `'medium'` / `'low'` warrant the visual affordance and a one-
1070
+ * shot warning log. */
1071
+ confidence?: AnchorConfidence;
1072
+ }
1073
+
1074
+ interface Props$b {
1075
+ content: string;
1076
+ segments?: TextSegment[];
1077
+ onTextSelect?: (exact: string, position: {
1078
+ start: number;
1079
+ end: number;
1080
+ }) => void;
1081
+ onChange?: (content: string) => void;
1082
+ editable?: boolean;
1083
+ newAnnotationIds?: Set<string>;
1084
+ hoveredAnnotationId?: string | null;
1085
+ scrollToAnnotationId?: string | null;
1086
+ sourceView?: boolean;
1087
+ showLineNumbers?: boolean;
1088
+ enableWidgets?: boolean;
1089
+ session?: SemiontSession | null | undefined;
1090
+ getTargetResourceName?: (resourceId: string) => string | undefined;
1091
+ generatingReferenceId?: string | null;
1092
+ hoverDelayMs: number;
1093
+ }
1094
+ declare function CodeMirrorRenderer({ content, segments, onChange, editable, newAnnotationIds, hoveredAnnotationId, scrollToAnnotationId, sourceView, showLineNumbers, enableWidgets, session, getTargetResourceName, generatingReferenceId, hoverDelayMs }: Props$b): React$1.JSX.Element;
1095
+
1096
+ type Motivation$6 = components['schemas']['Motivation'];
1097
+ type JobProgress$7 = components['schemas']['JobProgress'];
1098
+ interface AnnotateReferencesProgressWidgetProps {
1099
+ progress: JobProgress$7 | null;
1100
+ annotationType?: Motivation$6 | 'reference';
1101
+ }
1102
+ /**
1103
+ * Widget for displaying reference annotation progress with cancel functionality
1104
+ *
1105
+ * @emits job:cancel-requested - User requested to cancel annotation job. Payload: { jobType: string }
1106
+ */
1107
+ declare function AnnotateReferencesProgressWidget({ progress, annotationType }: AnnotateReferencesProgressWidgetProps): React$1.JSX.Element | null;
1108
+
1109
+ interface Props$a {
1110
+ children: ReactNode;
1111
+ fallback?: (error: Error, reset: () => void) => ReactNode;
1112
+ onError?: (error: Error, errorInfo: ErrorInfo) => void;
1113
+ }
1114
+ interface State {
1115
+ hasError: boolean;
1116
+ error: Error | null;
1117
+ }
1118
+ /**
1119
+ * Generic Error Boundary component that catches JavaScript errors
1120
+ * in child components and displays a fallback UI.
1121
+ */
1122
+ declare class ErrorBoundary extends Component<Props$a, State> {
1123
+ constructor(props: Props$a);
1124
+ static getDerivedStateFromError(error: Error): State;
1125
+ componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
1126
+ handleReset: () => void;
1127
+ render(): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | React$1.ReactPortal | React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | React$1.JSX.Element | null | undefined;
1128
+ }
1129
+ /**
1130
+ * Specialized error boundary for async components
1131
+ */
1132
+ declare function AsyncErrorBoundary({ children }: {
1133
+ children: ReactNode;
1134
+ }): React$1.JSX.Element;
1135
+
1136
+ interface ProtectedErrorBoundaryProps {
1137
+ children: React__default.ReactNode;
1138
+ /**
1139
+ * Values that, when any change, reset the boundary back to its non-error
1140
+ * state. Apps typically pass `[location.pathname]` so navigating away from
1141
+ * a crashed page automatically recovers.
1142
+ */
1143
+ resetKeys?: unknown[];
1144
+ }
1145
+ /**
1146
+ * Error boundary for protected (authenticated) routes.
1147
+ *
1148
+ * Catches unexpected render-time crashes inside the protected tree and
1149
+ * shows a generic "something went wrong" fallback with a refresh option.
1150
+ *
1151
+ * NOT auth-specific. Auth state changes (sign-in, sign-out, expiry) flow
1152
+ * through the KnowledgeBaseSession context, not exceptions — so this
1153
+ * boundary will never catch an "auth error" in normal operation. Its job
1154
+ * is purely to keep a render bug from blanking the screen.
1155
+ *
1156
+ * The optional `resetKeys` prop lets callers wire automatic recovery on
1157
+ * navigation (e.g. `resetKeys={[location.pathname]}`).
1158
+ */
1159
+ declare function ProtectedErrorBoundary({ children, resetKeys, }: ProtectedErrorBoundaryProps): React__default.JSX.Element;
1160
+
1161
+ interface LiveRegionContextType {
1162
+ announce: (message: string, priority?: 'polite' | 'assertive') => void;
1163
+ }
1164
+ declare function useLiveRegion(): LiveRegionContextType;
1165
+ interface LiveRegionProviderProps {
1166
+ children: React__default.ReactNode;
1167
+ }
1168
+ declare function LiveRegionProvider({ children }: LiveRegionProviderProps): React__default.JSX.Element;
1169
+ declare function useSearchAnnouncements(): {
1170
+ announceSearchResults: (count: number, query: string) => void;
1171
+ announceSearching: () => void;
1172
+ };
1173
+ declare function useDocumentAnnouncements(annotators?: Record<string, Annotator>): {
1174
+ announceDocumentSaved: () => void;
1175
+ announceDocumentDeleted: () => void;
1176
+ announceAnnotationCreated: (annotation: Annotation) => void;
1177
+ announceAnnotationDeleted: () => void;
1178
+ announceAnnotationUpdated: (annotation: Annotation) => void;
1179
+ announceError: (message: string) => void;
1180
+ };
1181
+ declare function useResourceLoadingAnnouncements(): {
1182
+ announceResourceLoading: (resourceName?: string) => void;
1183
+ announceResourceLoaded: (resourceName: string) => void;
1184
+ announceResourceLoadError: (resourceName?: string) => void;
1185
+ announceResourceUpdating: (resourceName: string) => void;
1186
+ };
1187
+ declare function useFormAnnouncements(): {
1188
+ announceFormSubmitting: () => void;
1189
+ announceFormSuccess: (message?: string) => void;
1190
+ announceFormError: (message?: string) => void;
1191
+ announceFormValidationError: (fieldCount: number) => void;
1192
+ };
1193
+ declare function useLanguageChangeAnnouncements(): {
1194
+ announceLanguageChanging: (newLanguage: string) => void;
1195
+ announceLanguageChanged: (newLanguage: string) => void;
1196
+ };
1197
+
1198
+ interface ResizeHandleProps {
1199
+ /** Callback fired when resize occurs */
1200
+ onResize: (newWidth: number) => void;
1201
+ /** Minimum allowed width in pixels */
1202
+ minWidth: number;
1203
+ /** Maximum allowed width in pixels */
1204
+ maxWidth: number;
1205
+ /** Position of handle - left or right edge */
1206
+ position?: 'left' | 'right';
1207
+ /** Aria label for accessibility */
1208
+ ariaLabel?: string;
1209
+ }
1210
+ /**
1211
+ * Draggable resize handle for panels and sidebars
1212
+ *
1213
+ * Features:
1214
+ * - Mouse drag to resize
1215
+ * - Keyboard navigation (Arrow keys: ±10px, Shift+Arrow: ±50px)
1216
+ * - Enforces min/max constraints
1217
+ * - Visual feedback on hover and drag
1218
+ * - Accessible (WCAG compliant)
1219
+ *
1220
+ * @example
1221
+ * ```tsx
1222
+ * <div className="panel" style={{ width: `${width}px` }}>
1223
+ * <ResizeHandle
1224
+ * onResize={setWidth}
1225
+ * minWidth={256}
1226
+ * maxWidth={800}
1227
+ * position="left"
1228
+ * />
1229
+ * <div>Panel content</div>
1230
+ * </div>
1231
+ * ```
1232
+ */
1233
+ declare function ResizeHandle({ onResize, minWidth, maxWidth, position, ariaLabel }: ResizeHandleProps): React__default.JSX.Element;
1234
+
1235
+ interface ResourceTagsInlineProps {
1236
+ resourceId: string;
1237
+ tags: string[];
1238
+ isEditing: boolean;
1239
+ onUpdate: (tags: string[]) => Promise<void>;
1240
+ disabled?: boolean;
1241
+ }
1242
+ declare function ResourceTagsInline({ tags }: ResourceTagsInlineProps): React$1.JSX.Element | null;
1243
+
1244
+ type ToastType = 'success' | 'error' | 'info' | 'warning';
1245
+ interface ToastMessage {
1246
+ id: string;
1247
+ message: string;
1248
+ type: ToastType;
1249
+ duration?: number;
1250
+ }
1251
+ interface ToastContainerProps {
1252
+ toasts: ToastMessage[];
1253
+ onClose: (id: string) => void;
1254
+ }
1255
+ declare function ToastContainer({ toasts, onClose }: ToastContainerProps): React__default.ReactPortal | null;
1256
+ interface ToastContextType {
1257
+ showToast: (message: string, type?: ToastType, duration?: number) => void;
1258
+ showSuccess: (message: string, duration?: number) => void;
1259
+ showError: (message: string, duration?: number) => void;
1260
+ showWarning: (message: string, duration?: number) => void;
1261
+ showInfo: (message: string, duration?: number) => void;
1262
+ }
1263
+ declare function ToastProvider({ children }: {
1264
+ children: React__default.ReactNode;
1265
+ }): React__default.JSX.Element;
1266
+ declare function useToast(): ToastContextType;
1267
+
1268
+ type ToolbarContext = 'document' | 'simple';
1269
+ interface Props$9<T extends string = string> {
1270
+ context: ToolbarContext;
1271
+ activePanel: T | null;
1272
+ isArchived?: boolean;
1273
+ }
1274
+ /**
1275
+ * Toolbar component for panel navigation
1276
+ *
1277
+ * @emits panel:toggle - Toggle panel visibility. Payload: { panel: string }
1278
+ */
1279
+ declare function Toolbar<T extends string = string>({ context, activePanel, isArchived }: Props$9<T>): React$1.JSX.Element;
1280
+
1281
+ interface SettingsPanelProps {
1282
+ showLineNumbers: boolean;
1283
+ theme: 'light' | 'dark' | 'system';
1284
+ locale: string;
1285
+ isPendingLocaleChange?: boolean;
1286
+ hoverDelayMs: number;
1287
+ }
1288
+ /**
1289
+ * Settings panel for application preferences
1290
+ *
1291
+ * @emits settings:locale-changed - Locale changed by user. Payload: { locale: string }
1292
+ * @emits settings:line-numbers-toggled - Line numbers toggled on/off. Payload: undefined
1293
+ * @emits settings:theme-changed - Theme changed by user. Payload: { theme: 'light' | 'dark' | 'system' }
1294
+ * @emits settings:hover-delay-changed - Hover delay changed by user. Payload: { hoverDelayMs: number }
1295
+ */
1296
+ declare function SettingsPanel({ showLineNumbers, theme, locale, isPendingLocaleChange, hoverDelayMs }: SettingsPanelProps): React__default.JSX.Element;
1297
+
1298
+ interface JsonLdViewProps {
1299
+ annotation: Annotation;
1300
+ onBack: () => void;
1301
+ }
1302
+ declare function JsonLdView({ annotation, onBack }: JsonLdViewProps): React$1.JSX.Element;
1303
+
1304
+ interface SelectedTextDisplayProps {
1305
+ exact: string;
1306
+ }
1307
+ declare function SelectedTextDisplay({ exact }: SelectedTextDisplayProps): React__default.JSX.Element;
1308
+ interface EntityTypeBadgesProps {
1309
+ entityTypes: string;
1310
+ }
1311
+ declare function EntityTypeBadges({ entityTypes }: EntityTypeBadgesProps): React__default.JSX.Element | null;
1312
+ interface PopupHeaderProps {
1313
+ title: string;
1314
+ selectedText?: string;
1315
+ onClose: () => void;
1316
+ }
1317
+ declare function PopupHeader({ title, selectedText, onClose }: PopupHeaderProps): React__default.JSX.Element;
1318
+ interface PopupContainerProps {
1319
+ children: React__default.ReactNode;
1320
+ position: {
1321
+ x: number;
1322
+ y: number;
1323
+ };
1324
+ onClose: () => void;
1325
+ isOpen: boolean;
1326
+ wide?: boolean;
1327
+ }
1328
+ declare function PopupContainer({ children, position, onClose, isOpen, wide }: PopupContainerProps): React__default.JSX.Element;
1329
+
1330
+ interface AnnotationOverlayProps {
1331
+ annotations: Annotation[];
1332
+ imageWidth: number;
1333
+ imageHeight: number;
1334
+ displayWidth: number;
1335
+ displayHeight: number;
1336
+ session?: SemiontSession | null | undefined;
1337
+ hoveredAnnotationId?: string | null;
1338
+ selectedAnnotationId?: string | null;
1339
+ hoverDelayMs: number;
1340
+ }
1341
+ /**
1342
+ * Render annotation overlay - displays existing annotations as SVG shapes
1343
+ *
1344
+ * @emits beckon:hover - Annotation hovered or unhovered. Payload: { annotationId: string | null }
1345
+ * @emits browse:click - Annotation clicked. Payload: { annotationId: string, motivation: Motivation }
1346
+ */
1347
+ declare function AnnotationOverlay({ annotations, imageWidth, imageHeight, displayWidth, displayHeight, session, hoveredAnnotationId, selectedAnnotationId, hoverDelayMs }: AnnotationOverlayProps): React$1.JSX.Element;
1348
+
1349
+ type DrawingMode = 'rectangle' | 'polygon' | 'circle' | 'freeform' | null;
1350
+ interface SvgDrawingCanvasProps {
1351
+ imageUrl: string;
1352
+ existingAnnotations?: Annotation[];
1353
+ drawingMode: DrawingMode;
1354
+ selectedMotivation?: SelectionMotivation | null;
1355
+ session?: SemiontSession | null | undefined;
1356
+ hoveredAnnotationId?: string | null;
1357
+ selectedAnnotationId?: string | null;
1358
+ hoverDelayMs?: number;
1359
+ }
1360
+ /**
1361
+ * SVG-based drawing canvas for creating image annotations with shapes
1362
+ *
1363
+ * @emits browse:click - Annotation clicked on canvas. Payload: { annotationId: string, motivation: Motivation }
1364
+ * @emits mark:requested - New annotation drawn on canvas. Payload: { selector: SvgSelector, motivation: SelectionMotivation }
1365
+ */
1366
+ declare function SvgDrawingCanvas({ imageUrl, existingAnnotations, drawingMode, selectedMotivation, session, hoveredAnnotationId, selectedAnnotationId }: SvgDrawingCanvasProps): React__default.JSX.Element;
1367
+
1368
+ interface KeyboardShortcutsHelpModalProps {
1369
+ isOpen: boolean;
1370
+ onClose: () => void;
1371
+ }
1372
+ declare function KeyboardShortcutsHelpModal({ isOpen, onClose }: KeyboardShortcutsHelpModalProps): React__default.JSX.Element;
1373
+
1374
+ /**
1375
+ * Modal that surfaces when a 403 forbidden error is reported via
1376
+ * the active session's `signals.notifyPermissionDenied(...)`.
1377
+ *
1378
+ * Reads `permissionDeniedAt$` and `permissionDeniedMessage$` from the
1379
+ * active `SessionSignals`. The signals instance clears the
1380
+ * flag when the user dismisses the modal. Modal state lives on
1381
+ * signals (not the session itself) so headless sessions
1382
+ * (workers/CLIs) don't carry dead observables.
1383
+ */
1384
+ declare function PermissionDeniedModal(): React$1.JSX.Element;
1385
+
1386
+ /**
1387
+ * Modal that surfaces when the active KB's session expires (a 401
1388
+ * surfaced by the session's own JWT validation or by the host's
1389
+ * error-routing path).
1390
+ *
1391
+ * Reads `sessionExpiredAt$` from the active `SessionSignals`.
1392
+ * When the user dismisses the modal, the signals instance clears the
1393
+ * flag. Modal state lives on signals (not the session itself) so
1394
+ * headless sessions (workers/CLIs) don't carry dead observables.
1395
+ */
1396
+ declare function SessionExpiredModal(): React$1.JSX.Element;
1397
+
1398
+ interface Props$8 {
1399
+ content: string;
1400
+ mimeType?: string;
1401
+ resourceUri?: string;
1402
+ annotations: AnnotationsCollection;
1403
+ uiState: AnnotationUIState;
1404
+ onUIStateChange?: (state: Partial<AnnotationUIState>) => void;
1405
+ editable?: boolean;
1406
+ enableWidgets?: boolean;
1407
+ getTargetResourceName?: (resourceId: string) => string | undefined;
1408
+ generatingReferenceId?: string | null;
1409
+ showLineNumbers?: boolean;
1410
+ hoverDelayMs?: number;
1411
+ annotateMode: boolean;
1412
+ }
1413
+ /**
1414
+ * View component for annotating resources with text selection and drawing
1415
+ *
1416
+ * @emits mark:requested - User requested to create annotation. Payload: { selector: Selector | Selector[], motivation: SelectionMotivation }
1417
+ * @subscribes mark:selection-changed - Toolbar selection changed. Payload: { motivation: string | null }
1418
+ * @subscribes mark:click-changed - Toolbar click action changed. Payload: { action: string }
1419
+ * @subscribes mark:shape-changed - Toolbar shape changed. Payload: { shape: string }
1420
+ * @subscribes beckon:hover - Annotation hovered. Payload: { annotationId: string | null }
1421
+ */
1422
+ declare function AnnotateView({ content, mimeType, resourceUri, annotations, uiState, onUIStateChange, enableWidgets, getTargetResourceName, generatingReferenceId, showLineNumbers, hoverDelayMs, annotateMode }: Props$8): React$1.JSX.Element;
1423
+
1424
+ interface Props$7 {
1425
+ rUri: ResourceId;
1426
+ hoveredAnnotationId?: string | null;
1427
+ onEventHover?: (annotationId: string | null) => void;
1428
+ onEventClick?: (annotationId: string | null) => void;
1429
+ Link: React__default.ComponentType<LinkComponentProps>;
1430
+ routes: RouteBuilder;
1431
+ }
1432
+ declare function AnnotationHistory({ rUri, hoveredAnnotationId, onEventHover, onEventClick, Link, routes }: Props$7): React__default.JSX.Element | null;
1433
+
1434
+ interface Props$6 {
1435
+ content: string;
1436
+ mimeType: string;
1437
+ resourceUri: string;
1438
+ annotations: AnnotationsCollection;
1439
+ hoveredAnnotationId?: string | null;
1440
+ selectedClick?: ClickAction;
1441
+ annotateMode: boolean;
1442
+ hoverDelayMs?: number;
1443
+ }
1444
+ /**
1445
+ * View component for browsing annotated resources in read-only mode.
1446
+ *
1447
+ * Two-layer rendering:
1448
+ * - Layer 1: Markdown renders once (MemoizedMarkdown, cached by content)
1449
+ * - Layer 2: Annotation overlay applied via DOM Range API after paint
1450
+ *
1451
+ * @emits browse:click - User clicked on annotation. Payload: { annotationId: string, motivation: Motivation }
1452
+ * @emits beckon:hover - User hovered over annotation. Payload: { annotationId: string | null }
1453
+ *
1454
+ * @subscribes beckon:hover - Highlight annotation on hover. Payload: { annotationId: string | null }
1455
+ * @subscribes beckon:focus - Scroll to and highlight annotation. Payload: { annotationId: string }
1456
+ */
1457
+ declare const BrowseView: React$1.MemoExoticComponent<({ content, mimeType, resourceUri, annotations, selectedClick, annotateMode, hoverDelayMs }: Props$6) => React$1.JSX.Element>;
1458
+
1459
+ type TranslateFn$4 = (key: string, params?: Record<string, string | number>) => string;
1460
+ interface Props$5 {
1461
+ event: StoredEventLike;
1462
+ annotations: any[];
1463
+ allEvents: StoredEventLike[];
1464
+ isRelated: boolean;
1465
+ t: TranslateFn$4;
1466
+ Link: React__default.ComponentType<LinkComponentProps>;
1467
+ routes: RouteBuilder;
1468
+ onEventRef?: (annotationId: string | null, element: HTMLElement | null) => void;
1469
+ onEventClick?: (annotationId: string | null) => void;
1470
+ onEventHover?: (annotationId: string | null) => void;
1471
+ }
1472
+ declare function HistoryEvent({ event, annotations, allEvents, isRelated, t, Link, routes, onEventRef, onEventClick, onEventHover }: Props$5): React__default.JSX.Element;
1473
+
1474
+ /**
1475
+ * ResourceViewer - Display and interact with resource content and annotations
1476
+ *
1477
+ * This component uses event-driven architecture for real-time updates:
1478
+ * - Subscribes to make-meaning events (mark:added, mark:removed, mark:body-updated)
1479
+ * - Automatically invalidates cache when annotations change
1480
+ * - No manual refetch needed - events handle cache invalidation
1481
+ *
1482
+ * Requirements:
1483
+ * - Must be wrapped in SemiontProvider (which owns the session's event bus)
1484
+ * - Must be wrapped in CacheContext (provides cache manager)
1485
+ *
1486
+ * Event flow:
1487
+ * make-meaning → EventLog → SSE → EventBus → ResourceViewer → Cache invalidation
1488
+ *
1489
+ * Phase 2 complete: Event-based cache invalidation replaces manual refetch
1490
+ * Phase 3 complete: Fully event-driven - all user interactions use unified event bus
1491
+ */
1492
+ interface Props$4 {
1493
+ resource: ResourceDescriptor & {
1494
+ content: string;
1495
+ };
1496
+ annotations: AnnotationsCollection;
1497
+ generatingReferenceId?: string | null;
1498
+ showLineNumbers?: boolean;
1499
+ hoverDelayMs?: number;
1500
+ hoveredAnnotationId?: string | null;
1501
+ }
1502
+ /**
1503
+ * @emits mark:delete - User requested to delete annotation. Payload: { annotationId: string }
1504
+ * @emits panel:open - Request to open panel with annotation. Payload: { panel: string, scrollToAnnotationId?: string, motivation?: Motivation }
1505
+ *
1506
+ * @subscribes mark:mode-toggled - Toggles between browse and annotate mode. Payload: { mode: 'browse' | 'annotate' }
1507
+ * @subscribes mark:added - New annotation was added. Payload: { annotation: Annotation }
1508
+ * @subscribes mark:removed - Annotation was removed. Payload: { annotationId: string }
1509
+ * @subscribes mark:body-updated - Annotation was updated. Payload: { annotation: Annotation }
1510
+ * @subscribes mark:selection-changed - Text selection tool changed. Payload: { selection: boolean }
1511
+ * @subscribes mark:click-changed - Click annotation tool changed. Payload: { click: 'detail' | 'scroll' | null }
1512
+ * @subscribes mark:shape-changed - Drawing shape changed. Payload: { shape: string }
1513
+ * @subscribes browse:click - User clicked on annotation. Payload: { annotationId: string }
1514
+ */
1515
+ declare function ResourceViewer({ resource, annotations, generatingReferenceId, showLineNumbers, hoverDelayMs, hoveredAnnotationId: hoveredAnnotationIdProp }: Props$4): React__default.JSX.Element;
1516
+
1517
+ interface AssessmentEntryProps {
1518
+ assessment: Annotation;
1519
+ isFocused: boolean;
1520
+ isHovered?: boolean;
1521
+ ref?: Ref<HTMLDivElement>;
1522
+ }
1523
+ declare function AssessmentEntry({ assessment, isFocused, isHovered, ref, }: AssessmentEntryProps): React$1.JSX.Element;
1524
+
1525
+ type Motivation$5 = components['schemas']['Motivation'];
1526
+ type JobProgress$6 = components['schemas']['JobProgress'];
1527
+ interface PendingAnnotation$5 {
1528
+ selector: Selector | Selector[];
1529
+ motivation: Motivation$5;
1530
+ }
1531
+ interface AssessmentPanelProps {
1532
+ annotations: Annotation[];
1533
+ pendingAnnotation: PendingAnnotation$5 | null;
1534
+ isAssisting?: boolean;
1535
+ progress?: JobProgress$6 | null;
1536
+ locale?: string;
1537
+ /** BCP-47 tag of the resource being analyzed — forwarded to the assist call. */
1538
+ sourceLanguage?: string;
1539
+ annotateMode?: boolean;
1540
+ scrollToAnnotationId?: string | null;
1541
+ onScrollCompleted?: () => void;
1542
+ hoveredAnnotationId?: string | null;
1543
+ }
1544
+ /**
1545
+ * Panel for managing assessment annotations with text input
1546
+ *
1547
+ * @emits mark:create - Create new assessment annotation. Payload: { motivation: 'assessing', selector: Selector | Selector[], body: Body[] }
1548
+ * @emits mark:cancel-pending - Cancel pending assessment annotation. Payload: undefined
1549
+ * @subscribes browse:click - Annotation clicked. Payload: { annotationId: string }
1550
+ */
1551
+ declare function AssessmentPanel({ annotations, pendingAnnotation, isAssisting, progress, locale, sourceLanguage, annotateMode, scrollToAnnotationId, onScrollCompleted, hoveredAnnotationId, }: AssessmentPanelProps): React$1.JSX.Element;
1552
+
1553
+ interface Props$3 {
1554
+ /**
1555
+ * Connection state from `client.actor.state$`. See
1556
+ * `packages/api-client/src/state/domain/actor-state-unit.ts`.
1557
+ *
1558
+ * UI mapping:
1559
+ * `open` | `reconnecting` | `initial` | `connecting`
1560
+ * → treated as "healthy" (green dot, "Live" label, event count visible).
1561
+ * `reconnecting` is specifically INCLUDED in healthy because a
1562
+ * brief reconnect (mount churn, channel-set change, quick blip)
1563
+ * shouldn't alarm the user. The 100 ms reconnect debounce and
1564
+ * sub-second fetch retry make `reconnecting` a transient state.
1565
+ * `degraded` | `closed`
1566
+ * → treated as "disconnected" (red dot, "Disconnected" label).
1567
+ * `degraded` is the 3 s threshold at which the state machine
1568
+ * decides the disconnect is sustained; this is the UI-banner
1569
+ * trigger the plan was designed around.
1570
+ */
1571
+ state: ConnectionState;
1572
+ eventCount: number;
1573
+ lastEventTimestamp?: string;
1574
+ knowledgeBaseName?: string;
1575
+ }
1576
+ declare function CollaborationPanel({ state, eventCount, lastEventTimestamp, knowledgeBaseName }: Props$3): React$1.JSX.Element;
1577
+
1578
+ interface CommentEntryProps {
1579
+ comment: Annotation;
1580
+ isFocused: boolean;
1581
+ isHovered?: boolean;
1582
+ annotateMode?: boolean;
1583
+ ref?: Ref<HTMLDivElement>;
1584
+ }
1585
+ declare function CommentEntry({ comment, isFocused, isHovered, annotateMode, ref, }: CommentEntryProps): React$1.JSX.Element;
1586
+
1587
+ type Motivation$4 = components['schemas']['Motivation'];
1588
+ type JobProgress$5 = components['schemas']['JobProgress'];
1589
+ interface PendingAnnotation$4 {
1590
+ selector: Selector | Selector[];
1591
+ motivation: Motivation$4;
1592
+ }
1593
+ interface CommentsPanelProps {
1594
+ annotations: Annotation[];
1595
+ pendingAnnotation: PendingAnnotation$4 | null;
1596
+ annotateMode?: boolean;
1597
+ isAssisting?: boolean;
1598
+ progress?: JobProgress$5 | null;
1599
+ locale?: string;
1600
+ /** BCP-47 tag of the resource being analyzed — forwarded to the assist call. */
1601
+ sourceLanguage?: string;
1602
+ scrollToAnnotationId?: string | null;
1603
+ onScrollCompleted?: () => void;
1604
+ hoveredAnnotationId?: string | null;
1605
+ }
1606
+ /**
1607
+ * Panel for managing comment annotations with text input
1608
+ *
1609
+ * @emits mark:create - Create new comment annotation. Payload: { motivation: 'commenting', selector: Selector | Selector[], body: Body[] }
1610
+ * @emits mark:cancel-pending - Cancel pending comment annotation. Payload: undefined
1611
+ * @subscribes browse:click - Annotation clicked. Payload: { annotationId: string }
1612
+ */
1613
+ declare function CommentsPanel({ annotations, pendingAnnotation, annotateMode, isAssisting, progress, locale, sourceLanguage, scrollToAnnotationId, onScrollCompleted, hoveredAnnotationId, }: CommentsPanelProps): React$1.JSX.Element;
1614
+
1615
+ type JobProgress$4 = components['schemas']['JobProgress'];
1616
+ interface AssistSectionProps {
1617
+ annotationType: 'highlight' | 'assessment' | 'comment';
1618
+ isAssisting: boolean;
1619
+ /** User UI locale — written into the annotation body's `language` field for comment/assessment. */
1620
+ locale?: string;
1621
+ /** BCP-47 tag of the resource being analyzed. Forwarded to the prompt so the LLM analyzes non-English source correctly. */
1622
+ sourceLanguage?: string;
1623
+ progress?: JobProgress$4 | null | undefined;
1624
+ }
1625
+ /**
1626
+ * Shared assist section for Highlight, Assessment, and Comment panels
1627
+ *
1628
+ * Provides:
1629
+ * - Optional instructions textarea
1630
+ * - Optional tone selector (for comments)
1631
+ * - Assist button with sparkle animation
1632
+ * - Progress display during annotation assist
1633
+ *
1634
+ * @emits mark:assist-request - Start assist for annotation type. Payload: { motivation: Motivation, options: { instructions?: string, tone?: string, density?: number } }
1635
+ * @emits mark:progress-dismiss - Dismiss the annotation progress display
1636
+ */
1637
+ declare function AssistSection({ annotationType, isAssisting, locale, sourceLanguage, progress, }: AssistSectionProps): React$1.JSX.Element;
1638
+
1639
+ interface HighlightEntryProps {
1640
+ highlight: Annotation;
1641
+ isFocused: boolean;
1642
+ isHovered?: boolean;
1643
+ ref?: Ref<HTMLDivElement>;
1644
+ }
1645
+ declare function HighlightEntry({ highlight, isFocused, isHovered, ref, }: HighlightEntryProps): React$1.JSX.Element;
1646
+
1647
+ type Motivation$3 = components['schemas']['Motivation'];
1648
+ type JobProgress$3 = components['schemas']['JobProgress'];
1649
+ interface PendingAnnotation$3 {
1650
+ selector: Selector | Selector[];
1651
+ motivation: Motivation$3;
1652
+ }
1653
+ interface HighlightPanelProps {
1654
+ annotations: Annotation[];
1655
+ pendingAnnotation: PendingAnnotation$3 | null;
1656
+ isAssisting?: boolean;
1657
+ progress?: JobProgress$3 | null;
1658
+ annotateMode?: boolean;
1659
+ scrollToAnnotationId?: string | null;
1660
+ onScrollCompleted?: () => void;
1661
+ hoveredAnnotationId?: string | null;
1662
+ /** BCP-47 tag of the resource being analyzed — forwarded to the assist call so the LLM analyzes non-English source correctly. */
1663
+ sourceLanguage?: string;
1664
+ }
1665
+ /**
1666
+ * Panel for managing highlight annotations with auto-creation
1667
+ *
1668
+ * @emits mark:create - Create new highlight annotation (auto-triggered). Payload: { motivation: 'highlighting', selector: Selector | Selector[], body: Body[] }
1669
+ * @subscribes browse:click - Annotation clicked. Payload: { annotationId: string }
1670
+ */
1671
+ declare function HighlightPanel({ annotations, pendingAnnotation, isAssisting, progress, annotateMode, scrollToAnnotationId, onScrollCompleted, hoveredAnnotationId, sourceLanguage, }: HighlightPanelProps): React$1.JSX.Element;
1672
+
1673
+ type SemiontResource$1 = components['schemas']['ResourceDescriptor'];
1674
+ interface Props$2 {
1675
+ resource: SemiontResource$1;
1676
+ }
1677
+ declare function JsonLdPanel({ resource: semiontResource }: Props$2): React$1.JSX.Element;
1678
+
1679
+ interface PanelHeaderProps {
1680
+ annotationType: 'highlight' | 'reference' | 'assessment' | 'comment' | 'tag';
1681
+ count: number;
1682
+ title: string;
1683
+ }
1684
+ /**
1685
+ * Shared header for annotation panels
1686
+ *
1687
+ * Displays the annotation icon, translated title, and count in a consistent format
1688
+ */
1689
+ declare function PanelHeader({ count, title }: PanelHeaderProps): React$1.JSX.Element;
1690
+
1691
+ interface ReferenceEntryProps {
1692
+ reference: Annotation;
1693
+ isFocused: boolean;
1694
+ isHovered?: boolean;
1695
+ routes: RouteBuilder;
1696
+ annotateMode?: boolean;
1697
+ isGenerating?: boolean;
1698
+ ref?: Ref<HTMLDivElement>;
1699
+ }
1700
+ declare function ReferenceEntry({ reference, isFocused, isHovered, routes, annotateMode, isGenerating, ref, }: ReferenceEntryProps): React$1.JSX.Element;
1701
+
1702
+ type JobProgress$2 = components['schemas']['JobProgress'];
1703
+
1704
+ type Motivation$2 = components['schemas']['Motivation'];
1705
+ type ReferencedBy = components['schemas']['GetReferencedByResponse']['referencedBy'][number];
1706
+ interface PendingAnnotation$2 {
1707
+ selector: Selector | Selector[];
1708
+ motivation: Motivation$2;
1709
+ }
1710
+ interface Props$1 {
1711
+ annotations?: Annotation[];
1712
+ isAssisting: boolean;
1713
+ progress: JobProgress$2 | null;
1714
+ annotateMode?: boolean;
1715
+ Link: React__default.ComponentType<LinkComponentProps>;
1716
+ routes: RouteBuilder;
1717
+ allEntityTypes: string[];
1718
+ generatingReferenceId?: string | null;
1719
+ referencedBy?: ReferencedBy[];
1720
+ referencedByLoading?: boolean;
1721
+ pendingAnnotation: PendingAnnotation$2 | null;
1722
+ scrollToAnnotationId?: string | null;
1723
+ onScrollCompleted?: () => void;
1724
+ hoveredAnnotationId?: string | null;
1725
+ /** User UI locale — stamped on the unresolved-reference body's `language` field. */
1726
+ locale?: string;
1727
+ /** BCP-47 tag of the resource being analyzed — fed into the prompt for source-aware analysis. */
1728
+ sourceLanguage?: string;
1729
+ }
1730
+ /**
1731
+ * Panel for managing reference annotations with entity type annotation
1732
+ *
1733
+ * @emits annotate:detect-request - Start reference annotation. Payload: { motivation: 'linking', options: { entityTypes: string[], includeDescriptiveReferences: boolean } }
1734
+ * @emits mark:create - Create new reference annotation. Payload: { motivation: 'linking', selector: Selector | Selector[], body: Body[] }
1735
+ * @emits mark:cancel-pending - Cancel pending reference annotation. Payload: undefined
1736
+ * @subscribes browse:click - Annotation clicked. Payload: { annotationId: string }
1737
+ */
1738
+ declare function ReferencesPanel({ annotations, isAssisting, progress, annotateMode, Link, routes, allEntityTypes, generatingReferenceId, referencedBy, referencedByLoading, pendingAnnotation, scrollToAnnotationId, onScrollCompleted, hoveredAnnotationId, locale, sourceLanguage, }: Props$1): React__default.JSX.Element;
1739
+
1740
+ type Agent = components['schemas']['Agent'];
1741
+ interface Props {
1742
+ resourceId: string;
1743
+ documentEntityTypes: string[];
1744
+ documentLocale?: string | undefined;
1745
+ primaryMediaType?: string | undefined;
1746
+ primaryByteSize?: number | undefined;
1747
+ storageUri?: string | undefined;
1748
+ isArchived?: boolean;
1749
+ dateCreated?: string | undefined;
1750
+ dateModified?: string | undefined;
1751
+ wasAttributedTo?: Agent | Agent[] | undefined;
1752
+ wasDerivedFrom?: string | string[] | undefined;
1753
+ generator?: Agent | Agent[] | undefined;
1754
+ }
1755
+ /**
1756
+ * Panel for displaying resource metadata and management actions
1757
+ *
1758
+ * @emits yield:clone - Clone this resource
1759
+ * @emits mark:unarchive - Unarchive this resource
1760
+ * @emits mark:archive - Archive this resource
1761
+ */
1762
+ declare function ResourceInfoPanel({ resourceId, documentEntityTypes, documentLocale, primaryMediaType, primaryByteSize, storageUri, isArchived, dateCreated, dateModified, wasAttributedTo, wasDerivedFrom, generator, }: Props): React$1.JSX.Element;
1763
+
1764
+ interface StatisticsPanelProps {
1765
+ highlights: Annotation[];
1766
+ comments: Annotation[];
1767
+ assessments: Annotation[];
1768
+ references: Annotation[];
1769
+ tags: Annotation[];
1770
+ }
1771
+ declare function StatisticsPanel({ highlights, comments, assessments, references, tags }: StatisticsPanelProps): React$1.JSX.Element;
1772
+
1773
+ interface TagEntryProps {
1774
+ tag: Annotation;
1775
+ isFocused: boolean;
1776
+ isHovered?: boolean;
1777
+ ref?: Ref<HTMLDivElement>;
1778
+ }
1779
+ declare function TagEntry({ tag, isFocused, isHovered, ref, }: TagEntryProps): React$1.JSX.Element;
1780
+
1781
+ type Motivation$1 = components['schemas']['Motivation'];
1782
+ type JobProgress$1 = components['schemas']['JobProgress'];
1783
+ interface PendingAnnotation$1 {
1784
+ selector: Selector | Selector[];
1785
+ motivation: Motivation$1;
1786
+ }
1787
+ interface TaggingPanelProps {
1788
+ annotations: Annotation[];
1789
+ annotateMode?: boolean;
1790
+ isAssisting?: boolean;
1791
+ progress?: JobProgress$1 | null;
1792
+ pendingAnnotation: PendingAnnotation$1 | null;
1793
+ scrollToAnnotationId?: string | null;
1794
+ onScrollCompleted?: () => void;
1795
+ hoveredAnnotationId?: string | null;
1796
+ /** User UI locale — stamped on the tagging body's `language` field. */
1797
+ locale?: string;
1798
+ /** BCP-47 tag of the resource being analyzed — fed into the prompt for source-aware analysis. */
1799
+ sourceLanguage?: string;
1800
+ }
1801
+ /**
1802
+ * Panel for managing tag annotations with schema-based annotation
1803
+ *
1804
+ * @emits annotate:detect-request - Start tag annotation. Payload: { motivation: 'tagging', options: { schemaId: string, categories: string[] } }
1805
+ * @emits mark:cancel-pending - Cancel pending tag annotation. Payload: undefined
1806
+ * @emits mark:create - Create new tag annotation. Payload: { motivation: 'tagging', selector: Selector | Selector[], body: Body[] }
1807
+ * @subscribes browse:click - Annotation clicked. Payload: { annotationId: string }
1808
+ */
1809
+ declare function TaggingPanel({ annotations, annotateMode, isAssisting, progress, pendingAnnotation, scrollToAnnotationId, onScrollCompleted, hoveredAnnotationId, locale, sourceLanguage, }: TaggingPanelProps): React$1.JSX.Element;
1810
+
1811
+ type JobProgress = components['schemas']['JobProgress'];
1812
+
1813
+ type Motivation = components['schemas']['Motivation'];
1814
+ type TabKey = 'statistics' | 'reference' | 'highlight' | 'assessment' | 'comment' | 'tag';
1815
+ interface PendingAnnotation {
1816
+ selector: Selector | Selector[];
1817
+ motivation: Motivation;
1818
+ }
1819
+ /**
1820
+ * Simplified UnifiedAnnotationsPanel using event-driven architecture
1821
+ *
1822
+ * Key simplifications:
1823
+ * - Single annotations array (grouped internally by motivation)
1824
+ * - Single focusedAnnotationId (motivation-agnostic)
1825
+ * - Hover state managed via event bus (no props needed)
1826
+ * - All operations managed via event bus (no callback props)
1827
+ */
1828
+ interface UnifiedAnnotationsPanelProps {
1829
+ annotations: Annotation[];
1830
+ annotators: Record<string, Annotator>;
1831
+ annotateMode?: boolean;
1832
+ assistingMotivation?: Motivation | null;
1833
+ progress?: JobProgress | null;
1834
+ pendingAnnotation: PendingAnnotation | null;
1835
+ allEntityTypes?: string[];
1836
+ generatingReferenceId?: string | null;
1837
+ referencedBy?: any[];
1838
+ referencedByLoading?: boolean;
1839
+ resourceId?: string;
1840
+ initialTab?: TabKey;
1841
+ initialTabGeneration?: number;
1842
+ scrollToAnnotationId?: string | null;
1843
+ onScrollCompleted?: () => void;
1844
+ hoveredAnnotationId?: string | null;
1845
+ locale?: string;
1846
+ /**
1847
+ * BCP-47 tag of the resource being analyzed (source-resource locale).
1848
+ * Independent from `locale` — a German user can analyze a French source
1849
+ * and get German bodies back. Fed into detection prompts.
1850
+ */
1851
+ sourceLanguage?: string;
1852
+ Link: React__default.ComponentType<LinkComponentProps>;
1853
+ routes: RouteBuilder;
1854
+ }
1855
+ declare function UnifiedAnnotationsPanel(props: UnifiedAnnotationsPanelProps): React__default.JSX.Element;
1856
+
1857
+ interface ImageViewerProps {
1858
+ imageUrl: string;
1859
+ mimeType: string;
1860
+ alt?: string;
1861
+ }
1862
+ declare function ImageViewer({ imageUrl, alt }: ImageViewerProps): React$1.JSX.Element;
1863
+
1864
+ type TranslateFn$3 = (key: string, params?: Record<string, any>) => string;
1865
+ interface FooterProps {
1866
+ Link: React__default.ComponentType<LinkComponentProps>;
1867
+ routes: RouteBuilder;
1868
+ t: TranslateFn$3;
1869
+ CookiePreferences?: React__default.ComponentType<{
1870
+ isOpen: boolean;
1871
+ onClose: () => void;
1872
+ }>;
1873
+ onOpenKeyboardHelp?: () => void;
1874
+ sourceCodeUrl?: string;
1875
+ /** Show About, Privacy Policy, Terms of Service, Cookie Preferences links. False for desktop apps. */
1876
+ showPolicyLinks?: boolean;
1877
+ }
1878
+ declare function Footer({ Link, routes, t, CookiePreferences, onOpenKeyboardHelp, sourceCodeUrl, showPolicyLinks, }: FooterProps): React__default.JSX.Element;
1879
+
1880
+ type TranslateFn$2 = (key: string, params?: Record<string, any>) => string;
1881
+ interface NavigationMenuProps {
1882
+ Link: React__default.ComponentType<LinkComponentProps>;
1883
+ routes: Partial<RouteBuilder>;
1884
+ t: TranslateFn$2;
1885
+ isAdmin?: boolean;
1886
+ isModerator?: boolean;
1887
+ brandingLink?: string;
1888
+ onItemClick?: () => void;
1889
+ className?: string;
1890
+ currentPath?: string;
1891
+ }
1892
+ declare function NavigationMenu({ Link, routes, t, isAdmin, isModerator, onItemClick, className, currentPath }: NavigationMenuProps): React__default.JSX.Element;
1893
+
1894
+ /**
1895
+ * Props for ObservableLink component
1896
+ *
1897
+ * Accepts any props that a standard anchor element accepts,
1898
+ * plus optional navigation metadata for event emission.
1899
+ */
1900
+ interface ObservableLinkProps extends React__default.AnchorHTMLAttributes<HTMLAnchorElement> {
1901
+ /** The URL to navigate to */
1902
+ href: string;
1903
+ /** Optional label for the link (used in event metadata) */
1904
+ label?: string;
1905
+ /** Children to render inside the link */
1906
+ children: React__default.ReactNode;
1907
+ }
1908
+ /**
1909
+ * Link component that emits navigation events for observability
1910
+ *
1911
+ * Use this instead of Next.js <Link> when you want link clicks to be
1912
+ * observable through the NavigationEventBus. This is useful for:
1913
+ * - Analytics tracking
1914
+ * - State coordination before navigation
1915
+ * - Logging navigation flows
1916
+ *
1917
+ * The component emits 'nav:link-clicked' event before allowing
1918
+ * the browser to follow the link.
1919
+ *
1920
+ * @example
1921
+ * ```typescript
1922
+ * <ObservableLink
1923
+ * href="/know/discover"
1924
+ * label="Discover"
1925
+ * >
1926
+ * Discover Resources
1927
+ * </ObservableLink>
1928
+ * ```
1929
+ *
1930
+ * @example With Next.js Link integration
1931
+ * ```typescript
1932
+ * import Link from 'next/link';
1933
+ *
1934
+ * <Link href="/know/discover" legacyBehavior passHref>
1935
+ * <ObservableLink label="Discover">
1936
+ * Discover Resources
1937
+ * </ObservableLink>
1938
+ * </Link>
1939
+ * ```
1940
+ *
1941
+ * @emits nav:link-clicked - Link clicked by user. Payload: { href: string, label?: string }
1942
+ */
1943
+ declare function ObservableLink({ href, label, onClick, children, ...anchorProps }: ObservableLinkProps): React__default.JSX.Element;
1944
+
1945
+ interface SimpleNavigationItem$1 {
1946
+ name: string;
1947
+ href: string;
1948
+ icon: React__default.ComponentType<{
1949
+ className?: string;
1950
+ }>;
1951
+ description?: string;
1952
+ }
1953
+ interface SimpleNavigationProps$1 {
1954
+ title: string;
1955
+ items: SimpleNavigationItem$1[];
1956
+ currentPath: string;
1957
+ LinkComponent: React__default.ComponentType<any>;
1958
+ dropdownContent?: (onClose: () => void) => React__default.ReactNode;
1959
+ isCollapsed: boolean;
1960
+ icons: {
1961
+ chevronLeft: React__default.ComponentType<{
1962
+ className?: string;
1963
+ }>;
1964
+ bars: React__default.ComponentType<{
1965
+ className?: string;
1966
+ }>;
1967
+ };
1968
+ collapseSidebarLabel: string;
1969
+ expandSidebarLabel: string;
1970
+ }
1971
+ /**
1972
+ * Simple navigation component for Admin and Moderation modes.
1973
+ * Renders a section header with optional dropdown and static navigation tabs.
1974
+ *
1975
+ * @emits shell:sidebar-toggle - Toggle sidebar collapsed/expanded state. Payload: undefined
1976
+ */
1977
+ declare function SimpleNavigation({ title, items, currentPath, LinkComponent, dropdownContent, isCollapsed, icons, collapseSidebarLabel, expandSidebarLabel }: SimpleNavigationProps$1): React__default.JSX.Element;
1978
+
1979
+ /**
1980
+ * Props for the sortable resource tab component
1981
+ */
1982
+ interface SortableResourceTabProps {
1983
+ resource: OpenResource;
1984
+ isCollapsed: boolean;
1985
+ isActive: boolean;
1986
+ href: string;
1987
+ onClose: (id: string, e: React.MouseEvent) => void;
1988
+ onReorder?: (resourceId: string, direction: 'up' | 'down') => void;
1989
+ index?: number;
1990
+ totalCount?: number;
1991
+ LinkComponent: ComponentType<any>;
1992
+ dragHandleProps?: any;
1993
+ isDragging?: boolean;
1994
+ translations: {
1995
+ dragToReorder?: string;
1996
+ dragToReorderDoc?: string;
1997
+ closeResource?: string;
1998
+ moveUp?: string;
1999
+ moveDown?: string;
2000
+ };
2001
+ }
2002
+ /**
2003
+ * Props for the collapsible resource navigation component
2004
+ */
2005
+ interface CollapsibleResourceNavigationProps {
2006
+ fixedItems: Array<{
2007
+ name: string;
2008
+ href: string;
2009
+ icon: ComponentType<any>;
2010
+ description?: string;
2011
+ }>;
2012
+ resources: OpenResource[];
2013
+ isCollapsed: boolean;
2014
+ currentPath: string;
2015
+ LinkComponent: ComponentType<any>;
2016
+ onNavigate?: (path: string) => void;
2017
+ getResourceHref: (resourceId: string) => string;
2018
+ className?: string;
2019
+ translations: {
2020
+ title?: string;
2021
+ collapseSidebar?: string;
2022
+ expandSidebar?: string;
2023
+ dragToReorder?: string;
2024
+ dragToReorderDoc?: string;
2025
+ closeResource?: string;
2026
+ dragInstructions?: string;
2027
+ };
2028
+ icons: {
2029
+ chevronLeft: ComponentType<any>;
2030
+ bars: ComponentType<any>;
2031
+ close: ComponentType<any>;
2032
+ };
2033
+ navigationMenu?: ((onClose: () => void) => ReactNode) | undefined;
2034
+ }
2035
+
2036
+ /**
2037
+ * A comprehensive collapsible navigation component with fixed items and dynamic resource tabs.
2038
+ * Supports drag and drop for resource reordering when expanded.
2039
+ * Platform-agnostic design for use across different React environments.
2040
+ *
2041
+ * @emits tabs:reorder - Resource tab reordered. Payload: { oldIndex: number, newIndex: number }
2042
+ * @emits tabs:close - Resource tab closed. Payload: { resourceId: string }
2043
+ * @emits shell:sidebar-toggle - Toggle sidebar collapsed/expanded state. Payload: undefined
2044
+ */
2045
+ declare function CollapsibleResourceNavigation({ fixedItems, resources, isCollapsed, currentPath, LinkComponent, onNavigate, getResourceHref, className, translations, icons, navigationMenu }: CollapsibleResourceNavigationProps): React__default.JSX.Element;
2046
+
2047
+ /**
2048
+ * A sortable tab for an open resource in the navigation sidebar.
2049
+ * Supports drag and drop when expanded, and compact icon-only view when collapsed.
2050
+ */
2051
+ declare function SortableResourceTab({ resource, isCollapsed, isActive, href, onClose, onReorder, index, totalCount, LinkComponent, translations, isDragging }: SortableResourceTabProps): React__default.JSX.Element;
2052
+
2053
+ interface SimpleNavigationItem {
2054
+ name: string;
2055
+ href: string;
2056
+ icon: React.ComponentType<any>;
2057
+ description?: string;
2058
+ }
2059
+ interface SimpleNavigationProps {
2060
+ title: string;
2061
+ items: SimpleNavigationItem[];
2062
+ currentPath: string;
2063
+ LinkComponent: React.ComponentType<any>;
2064
+ dropdownContent?: ((onClose: () => void) => ReactNode) | undefined;
2065
+ }
2066
+
2067
+ interface GenerationConfig {
2068
+ title: string;
2069
+ storagePath: string;
2070
+ prompt?: string;
2071
+ language: string;
2072
+ temperature: number;
2073
+ maxTokens: number;
2074
+ context: GatheredContext;
2075
+ }
2076
+
2077
+ interface ReferenceWizardModalProps {
2078
+ isOpen: boolean;
2079
+ onClose: () => void;
2080
+ /** The annotation being resolved */
2081
+ annotationId: string | null;
2082
+ /** The resource containing the annotation */
2083
+ resourceId: string | null;
2084
+ /** Default title (selected text) */
2085
+ defaultTitle: string;
2086
+ /** Entity types from the annotation */
2087
+ entityTypes: string[];
2088
+ /** Current locale for generation defaults */
2089
+ locale: string;
2090
+ /** Gathered context state */
2091
+ context: GatheredContext | null;
2092
+ contextLoading: boolean;
2093
+ contextError: Error | null;
2094
+ /** Callbacks */
2095
+ onGenerateSubmit: (referenceId: string, config: GenerationConfig) => void;
2096
+ onLinkResource: (referenceId: string, targetResourceId: string) => void;
2097
+ onComposeNavigate: (context: GatheredContext, annotationId: string, resourceId: string, title: string, entityTypes: string[]) => void;
2098
+ /** Translation strings */
2099
+ translations: {
2100
+ gatherTitle: string;
2101
+ configureGenerationTitle: string;
2102
+ configureSearchTitle: string;
2103
+ searchResultsTitle: string;
2104
+ sourceContextLabel: string;
2105
+ connectionsLabel: string;
2106
+ citedByLabel: string;
2107
+ userHintLabel: string;
2108
+ userHintPlaceholder: string;
2109
+ loadingContext: string;
2110
+ failedContext: string;
2111
+ cancel: string;
2112
+ search: string;
2113
+ searching: string;
2114
+ generate: string;
2115
+ compose: string;
2116
+ resolutionStrategyLabel: string;
2117
+ back: string;
2118
+ link: string;
2119
+ score: string;
2120
+ noResults: string;
2121
+ resourceTitle: string;
2122
+ resourceTitlePlaceholder: string;
2123
+ additionalInstructions: string;
2124
+ additionalInstructionsPlaceholder: string;
2125
+ language: string;
2126
+ languageHelp: string;
2127
+ creativity: string;
2128
+ creativityFocused: string;
2129
+ creativityCreative: string;
2130
+ maxLength: string;
2131
+ maxLengthHelp: string;
2132
+ maxResults: string;
2133
+ semanticScoring: string;
2134
+ semanticScoringHelp: string;
2135
+ };
2136
+ }
2137
+ declare function ReferenceWizardModal({ isOpen, onClose, annotationId, resourceId, defaultTitle, entityTypes, locale, context, contextLoading, contextError, onGenerateSubmit, onLinkResource, onComposeNavigate, translations: t, }: ReferenceWizardModalProps): React$1.JSX.Element;
2138
+
2139
+ interface SearchModalProps$1 {
2140
+ isOpen: boolean;
2141
+ onClose: () => void;
2142
+ onNavigate: (type: 'resource' | 'entity', id: string) => void;
2143
+ translations?: {
2144
+ placeholder?: string;
2145
+ searching?: string;
2146
+ noResults?: string;
2147
+ startTyping?: string;
2148
+ navigate?: string;
2149
+ select?: string;
2150
+ close?: string;
2151
+ enter?: string;
2152
+ esc?: string;
2153
+ };
2154
+ }
2155
+ declare function SearchModal({ isOpen, onClose, onNavigate, translations }: SearchModalProps$1): React__default.JSX.Element;
2156
+
2157
+ interface ResourceSearchModalProps$1 {
2158
+ isOpen: boolean;
2159
+ onClose: () => void;
2160
+ onSelect: (resourceId: string) => void;
2161
+ searchTerm?: string;
2162
+ translations?: {
2163
+ title?: string;
2164
+ placeholder?: string;
2165
+ searching?: string;
2166
+ noResults?: string;
2167
+ close?: string;
2168
+ };
2169
+ }
2170
+ declare function ResourceSearchModal({ isOpen, onClose, onSelect, searchTerm, translations }: ResourceSearchModalProps$1): React$1.JSX.Element;
2171
+
2172
+ /**
2173
+ * Base modal props that all modals share
2174
+ */
2175
+ interface BaseModalProps {
2176
+ /** Whether the modal is open */
2177
+ isOpen: boolean;
2178
+ /** Callback when the modal should close */
2179
+ onClose: () => void;
2180
+ /** Optional CSS class name */
2181
+ className?: string;
2182
+ }
2183
+ /**
2184
+ * Props for modals that navigate
2185
+ */
2186
+ interface NavigableModalProps {
2187
+ /** Navigation function */
2188
+ onNavigate: (path: string) => void;
2189
+ }
2190
+ /**
2191
+ * Search modal specific props
2192
+ */
2193
+ interface SearchModalProps extends BaseModalProps, NavigableModalProps {
2194
+ /** Optional translation support */
2195
+ translations?: {
2196
+ placeholder?: string;
2197
+ searching?: string;
2198
+ noResults?: string;
2199
+ startTyping?: string;
2200
+ navigate?: string;
2201
+ select?: string;
2202
+ close?: string;
2203
+ };
2204
+ }
2205
+ /**
2206
+ * Resource search modal props
2207
+ */
2208
+ interface ResourceSearchModalProps extends BaseModalProps {
2209
+ /** Callback when a resource is selected */
2210
+ onSelect: (resourceId: string) => void;
2211
+ /** Initial search term */
2212
+ searchTerm?: string;
2213
+ /** Optional translation support */
2214
+ translations?: {
2215
+ title?: string;
2216
+ placeholder?: string;
2217
+ searching?: string;
2218
+ noResults?: string;
2219
+ };
2220
+ }
2221
+
2222
+ /**
2223
+ * Skip links for keyboard navigation accessibility
2224
+ * These links are visually hidden but become visible when focused
2225
+ * They allow keyboard users to quickly jump to main content areas
2226
+ */
2227
+ declare function SkipLinks(): React$1.JSX.Element;
2228
+
2229
+ interface StatusDisplayProps {
2230
+ isFullyAuthenticated?: boolean;
2231
+ isAuthenticated?: boolean;
2232
+ hasValidBackendToken?: boolean;
2233
+ }
2234
+ declare function StatusDisplay({ isFullyAuthenticated, isAuthenticated, hasValidBackendToken }: StatusDisplayProps): React$1.JSX.Element;
2235
+
2236
+ declare function SessionTimer(): React$1.JSX.Element | null;
2237
+
2238
+ declare function SessionExpiryBanner(): React$1.JSX.Element | null;
2239
+
2240
+ declare function UserMenuSkeleton(): React$1.JSX.Element;
2241
+
2242
+ type TranslateFn$1 = (key: string) => string;
2243
+ interface SemiontBrandingProps {
2244
+ t: TranslateFn$1;
2245
+ className?: string;
2246
+ size?: 'sm' | 'md' | 'lg' | 'xl';
2247
+ showTagline?: boolean;
2248
+ animated?: boolean;
2249
+ compactTagline?: boolean;
2250
+ }
2251
+ declare function SemiontBranding({ t, className, size, showTagline, animated, compactTagline }: SemiontBrandingProps): React$1.JSX.Element;
2252
+
2253
+ /**
2254
+ * Translation function type for framework-agnostic components
2255
+ */
2256
+ type TranslateFn = (key: string, params?: Record<string, any>) => string;
2257
+
2258
+ interface UnifiedHeaderProps {
2259
+ Link: React__default.ComponentType<LinkComponentProps>;
2260
+ routes: RouteBuilder;
2261
+ t: TranslateFn;
2262
+ tHome: TranslateFn;
2263
+ showBranding?: boolean;
2264
+ showAuthLinks?: boolean;
2265
+ brandingLink?: string;
2266
+ variant?: 'standalone' | 'embedded' | 'floating';
2267
+ isAuthenticated?: boolean;
2268
+ isAdmin?: boolean;
2269
+ isModerator?: boolean;
2270
+ currentPath?: string;
2271
+ }
2272
+ declare function UnifiedHeader({ Link, routes, t, tHome, showBranding, brandingLink, variant, isAuthenticated, isAdmin, isModerator, currentPath }: UnifiedHeaderProps): React__default.JSX.Element;
2273
+
2274
+ interface NavigationMenuHelper {
2275
+ (onClose: () => void): React__default.ReactNode;
2276
+ }
2277
+ interface LeftSidebarProps {
2278
+ Link: React__default.ComponentType<LinkComponentProps>;
2279
+ routes: RouteBuilder;
2280
+ t: TranslateFn;
2281
+ tHome: TranslateFn;
2282
+ children: React__default.ReactNode | ((isCollapsed: boolean, toggleCollapsed: () => void, navigationMenu: NavigationMenuHelper) => React__default.ReactNode);
2283
+ brandingLink?: string;
2284
+ collapsible?: boolean;
2285
+ storageKey?: string;
2286
+ isAuthenticated?: boolean;
2287
+ isAdmin?: boolean;
2288
+ isModerator?: boolean;
2289
+ currentPath?: string;
2290
+ }
2291
+ declare function LeftSidebar({ Link, routes, t, tHome, children, brandingLink, collapsible, storageKey, isAdmin, isModerator, currentPath }: LeftSidebarProps): React__default.JSX.Element;
2292
+
2293
+ interface PageLayoutProps {
2294
+ Link: React__default.ComponentType<LinkComponentProps>;
2295
+ routes: RouteBuilder;
2296
+ t: TranslateFn;
2297
+ tNav: TranslateFn;
2298
+ tHome: TranslateFn;
2299
+ children: React__default.ReactNode;
2300
+ className?: string;
2301
+ showAuthLinks?: boolean;
2302
+ CookiePreferences?: React__default.ComponentType<{
2303
+ isOpen: boolean;
2304
+ onClose: () => void;
2305
+ }>;
2306
+ onOpenKeyboardHelp?: () => void;
2307
+ }
2308
+ declare function PageLayout({ Link, routes, t, tNav, tHome, children, className, showAuthLinks, CookiePreferences, onOpenKeyboardHelp }: PageLayoutProps): React__default.JSX.Element;
2309
+
2310
+ interface SemiontFaviconProps {
2311
+ size?: number;
2312
+ className?: string;
2313
+ variant?: 'gradient' | 'solid' | 'outline';
2314
+ background?: boolean;
2315
+ }
2316
+ declare function SemiontFavicon({ size, className, variant, background }: SemiontFaviconProps): React$1.JSX.Element;
2317
+
2318
+ declare const faviconPaths: {
2319
+ readonly ico: "/favicons/favicon.ico";
2320
+ readonly svg: "/favicons/favicon.svg";
2321
+ readonly appleTouchIcon: "/favicons/apple-touch-icon.png";
2322
+ readonly favicon32: "/favicons/favicon-32x32.png";
2323
+ readonly favicon16: "/favicons/favicon-16x16.png";
2324
+ readonly androidChrome192: "/favicons/android-chrome-192x192.png";
2325
+ readonly androidChrome512: "/favicons/android-chrome-512x512.png";
2326
+ readonly manifest: "/favicons/site.webmanifest";
2327
+ };
2328
+
2329
+ /**
2330
+ * CSS-Agnostic Button Component
2331
+ *
2332
+ * This button uses data attributes instead of hardcoded Tailwind classes,
2333
+ * allowing users to style it with any CSS solution.
2334
+ */
2335
+
2336
+ interface ButtonProps extends React__default.ButtonHTMLAttributes<HTMLButtonElement> {
2337
+ /**
2338
+ * Ref forwarded to the underlying button element
2339
+ */
2340
+ ref?: React__default.Ref<HTMLButtonElement>;
2341
+ /**
2342
+ * The visual variant of the button
2343
+ */
2344
+ variant?: 'primary' | 'secondary' | 'tertiary' | 'danger' | 'warning' | 'ghost';
2345
+ /**
2346
+ * The size of the button
2347
+ */
2348
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
2349
+ /**
2350
+ * Whether the button should take full width of its container
2351
+ */
2352
+ fullWidth?: boolean;
2353
+ /**
2354
+ * Whether the button is in a loading state
2355
+ */
2356
+ loading?: boolean;
2357
+ /**
2358
+ * Icon to display before the button text
2359
+ */
2360
+ leftIcon?: React__default.ReactNode;
2361
+ /**
2362
+ * Icon to display after the button text
2363
+ */
2364
+ rightIcon?: React__default.ReactNode;
2365
+ /**
2366
+ * Whether the button should only show an icon (no text padding)
2367
+ */
2368
+ iconOnly?: boolean;
2369
+ /**
2370
+ * Whether to show the button in an active/pressed state
2371
+ */
2372
+ active?: boolean;
2373
+ }
2374
+ declare function Button({ variant, size, fullWidth, loading, leftIcon, rightIcon, iconOnly, active, className, disabled, children, type, ref, ...props }: ButtonProps): React__default.JSX.Element;
2375
+ /**
2376
+ * Button Group Component
2377
+ *
2378
+ * Groups multiple buttons together
2379
+ */
2380
+ interface ButtonGroupProps {
2381
+ children: React__default.ReactNode;
2382
+ /**
2383
+ * How to arrange the buttons
2384
+ */
2385
+ orientation?: 'horizontal' | 'vertical';
2386
+ /**
2387
+ * Whether buttons should be connected (no gap between them)
2388
+ */
2389
+ attached?: boolean;
2390
+ /**
2391
+ * Size of the gap between buttons (when not attached)
2392
+ */
2393
+ spacing?: 'xs' | 'sm' | 'md' | 'lg';
2394
+ className?: string;
2395
+ }
2396
+ declare const ButtonGroup: React__default.FC<ButtonGroupProps>;
2397
+
2398
+ /**
2399
+ * Semiont Design Tokens
2400
+ *
2401
+ * Core design tokens for the Semiont design system.
2402
+ * These tokens provide the foundation for all component styling
2403
+ * and can be consumed via JavaScript or CSS variables.
2404
+ */
2405
+ declare const tokens: {
2406
+ colors: {
2407
+ primary: {
2408
+ 50: string;
2409
+ 100: string;
2410
+ 200: string;
2411
+ 300: string;
2412
+ 400: string;
2413
+ 500: string;
2414
+ 600: string;
2415
+ 700: string;
2416
+ 800: string;
2417
+ 900: string;
2418
+ };
2419
+ secondary: {
2420
+ 50: string;
2421
+ 100: string;
2422
+ 200: string;
2423
+ 300: string;
2424
+ 400: string;
2425
+ 500: string;
2426
+ 600: string;
2427
+ 700: string;
2428
+ 800: string;
2429
+ 900: string;
2430
+ };
2431
+ semantic: {
2432
+ error: string;
2433
+ errorLight: string;
2434
+ errorDark: string;
2435
+ warning: string;
2436
+ warningLight: string;
2437
+ warningDark: string;
2438
+ success: string;
2439
+ successLight: string;
2440
+ successDark: string;
2441
+ info: string;
2442
+ infoLight: string;
2443
+ infoDark: string;
2444
+ };
2445
+ neutral: {
2446
+ 0: string;
2447
+ 50: string;
2448
+ 100: string;
2449
+ 200: string;
2450
+ 300: string;
2451
+ 400: string;
2452
+ 500: string;
2453
+ 600: string;
2454
+ 700: string;
2455
+ 800: string;
2456
+ 900: string;
2457
+ 950: string;
2458
+ 1000: string;
2459
+ };
2460
+ background: {
2461
+ primary: string;
2462
+ secondary: string;
2463
+ tertiary: string;
2464
+ inverse: string;
2465
+ };
2466
+ text: {
2467
+ primary: string;
2468
+ secondary: string;
2469
+ tertiary: string;
2470
+ disabled: string;
2471
+ inverse: string;
2472
+ };
2473
+ };
2474
+ spacing: {
2475
+ 0: string;
2476
+ xs: string;
2477
+ sm: string;
2478
+ md: string;
2479
+ lg: string;
2480
+ xl: string;
2481
+ '2xl': string;
2482
+ '3xl': string;
2483
+ '4xl': string;
2484
+ '5xl': string;
2485
+ };
2486
+ typography: {
2487
+ fontFamily: {
2488
+ sans: string;
2489
+ mono: string;
2490
+ };
2491
+ fontSize: {
2492
+ xs: string;
2493
+ sm: string;
2494
+ base: string;
2495
+ lg: string;
2496
+ xl: string;
2497
+ '2xl': string;
2498
+ '3xl': string;
2499
+ '4xl': string;
2500
+ '5xl': string;
2501
+ };
2502
+ fontWeight: {
2503
+ thin: number;
2504
+ light: number;
2505
+ normal: number;
2506
+ medium: number;
2507
+ semibold: number;
2508
+ bold: number;
2509
+ black: number;
2510
+ };
2511
+ lineHeight: {
2512
+ none: number;
2513
+ tight: number;
2514
+ snug: number;
2515
+ normal: number;
2516
+ relaxed: number;
2517
+ loose: number;
2518
+ };
2519
+ };
2520
+ borderRadius: {
2521
+ none: string;
2522
+ sm: string;
2523
+ base: string;
2524
+ md: string;
2525
+ lg: string;
2526
+ xl: string;
2527
+ '2xl': string;
2528
+ '3xl': string;
2529
+ full: string;
2530
+ };
2531
+ shadows: {
2532
+ none: string;
2533
+ xs: string;
2534
+ sm: string;
2535
+ base: string;
2536
+ md: string;
2537
+ lg: string;
2538
+ xl: string;
2539
+ inner: string;
2540
+ };
2541
+ transitions: {
2542
+ duration: {
2543
+ fast: string;
2544
+ base: string;
2545
+ slow: string;
2546
+ slower: string;
2547
+ };
2548
+ timing: {
2549
+ linear: string;
2550
+ ease: string;
2551
+ easeIn: string;
2552
+ easeOut: string;
2553
+ easeInOut: string;
2554
+ };
2555
+ };
2556
+ breakpoints: {
2557
+ sm: string;
2558
+ md: string;
2559
+ lg: string;
2560
+ xl: string;
2561
+ '2xl': string;
2562
+ };
2563
+ };
2564
+ /**
2565
+ * Generate CSS custom properties from design tokens
2566
+ */
2567
+ declare function generateCSSVariables(): string;
2568
+ declare const cssVariables: string;
2569
+ type ColorToken = keyof typeof tokens.colors;
2570
+ type SpacingToken = keyof typeof tokens.spacing;
2571
+ type TypographyToken = keyof typeof tokens.typography;
2572
+ type BorderRadiusToken = keyof typeof tokens.borderRadius;
2573
+ type ShadowToken = keyof typeof tokens.shadows;
2574
+ type TransitionToken = keyof typeof tokens.transitions;
2575
+
2576
+ /**
2577
+ * ComposeLoadingState Component
2578
+ *
2579
+ * Simple loading state display for the compose page.
2580
+ */
2581
+ interface ComposeLoadingStateProps {
2582
+ message: string;
2583
+ }
2584
+ declare function ComposeLoadingState({ message }: ComposeLoadingStateProps): React$1.JSX.Element;
2585
+
2586
+ /**
2587
+ * ResourceLoadingState - Loading state component for resource viewer
2588
+ *
2589
+ * Pure React component - no Next.js dependencies.
2590
+ */
2591
+ declare function ResourceLoadingState(): React$1.JSX.Element;
2592
+
2593
+ /**
2594
+ * ResourceErrorState - Error state component for resource viewer
2595
+ *
2596
+ * Pure React component - no Next.js dependencies.
2597
+ */
2598
+ interface ResourceErrorStateProps {
2599
+ error: unknown;
2600
+ onRetry: () => void;
2601
+ }
2602
+ declare function ResourceErrorState({ error, onRetry }: ResourceErrorStateProps): React$1.JSX.Element;
2603
+
2604
+ /**
2605
+ * AdminDevOpsPage Component
2606
+ *
2607
+ * Pure React component for the admin devops page.
2608
+ * All dependencies passed as props - no Next.js hooks!
2609
+ */
2610
+
2611
+ interface DevOpsFeature {
2612
+ title: string;
2613
+ description: string;
2614
+ icon: React__default.ComponentType<any>;
2615
+ available: string;
2616
+ }
2617
+ interface AdminDevOpsPageProps {
2618
+ suggestedFeatures: DevOpsFeature[];
2619
+ theme: 'light' | 'dark' | 'system';
2620
+ showLineNumbers: boolean;
2621
+ activePanel: string | null;
2622
+ translations: {
2623
+ title: string;
2624
+ subtitle: string;
2625
+ systemStatus: string;
2626
+ cliOperations: string;
2627
+ cliOperationsDescription: string;
2628
+ cliTitle: string;
2629
+ cliDescription: string;
2630
+ };
2631
+ StatusDisplay: React__default.ComponentType<any>;
2632
+ ToolbarPanels: React__default.ComponentType<any>;
2633
+ Toolbar: React__default.ComponentType<any>;
2634
+ }
2635
+ declare function AdminDevOpsPage({ suggestedFeatures, theme, showLineNumbers, activePanel, translations: t, StatusDisplay, ToolbarPanels, Toolbar, }: AdminDevOpsPageProps): React__default.JSX.Element;
2636
+
2637
+ /**
2638
+ * ExportCard — Backup trigger
2639
+ *
2640
+ * Pure React component. All state and handlers passed as props.
2641
+ */
2642
+ interface ExportCardTranslations {
2643
+ title: string;
2644
+ description: string;
2645
+ exportButton: string;
2646
+ exporting: string;
2647
+ }
2648
+ interface ExportCardProps {
2649
+ onExport: () => void;
2650
+ isExporting: boolean;
2651
+ translations: ExportCardTranslations;
2652
+ }
2653
+ declare function ExportCard({ onExport, isExporting, translations: t }: ExportCardProps): React$1.JSX.Element;
2654
+
2655
+ /**
2656
+ * ShellStateUnit — app-shell state: which toolbar panel is open, tab-bar
2657
+ * coordination helpers, scroll-to-annotation signals. Lives on
2658
+ * `SemiontBrowser`'s app-scoped bus (not the per-session client bus)
2659
+ * because panel toggles and shell chrome must work regardless of
2660
+ * whether a KB session is active.
2661
+ *
2662
+ * Channels: `panel:toggle`, `panel:open`, `panel:close`.
2663
+ */
2664
+
2665
+ type ToolbarPanelType = 'history' | 'info' | 'annotations' | 'settings' | 'collaboration' | 'user' | 'jsonld' | 'knowledge-base';
2666
+ declare const COMMON_PANELS: readonly ToolbarPanelType[];
2667
+ declare const RESOURCE_PANELS: readonly ToolbarPanelType[];
2668
+ interface ShellStateUnit extends StateUnit {
2669
+ activePanel$: Observable<ToolbarPanelType | null>;
2670
+ scrollToAnnotationId$: Observable<string | null>;
2671
+ panelInitialTab$: Observable<{
2672
+ tab: string;
2673
+ generation: number;
2674
+ } | null>;
2675
+ openPanel(panel: string): void;
2676
+ closePanel(): void;
2677
+ togglePanel(panel: string): void;
2678
+ onScrollCompleted(): void;
2679
+ }
2680
+ interface ShellStateUnitOptions {
2681
+ initialPanel?: ToolbarPanelType | null;
2682
+ onPanelChange?: (panel: ToolbarPanelType | null) => void;
2683
+ }
2684
+ declare function createShellStateUnit(browser: SemiontBrowser, options?: ShellStateUnitOptions): ShellStateUnit;
2685
+
2686
+ interface ImportPreview {
2687
+ format: string;
2688
+ version: number;
2689
+ sourceUrl: string;
2690
+ stats: Record<string, number>;
2691
+ }
2692
+ interface ExchangeStateUnit extends StateUnit {
2693
+ browse: ShellStateUnit;
2694
+ selectedFile$: Observable<File | null>;
2695
+ preview$: Observable<ImportPreview | null>;
2696
+ importPhase$: Observable<string | null>;
2697
+ importMessage$: Observable<string | undefined>;
2698
+ importResult$: Observable<Record<string, unknown> | undefined>;
2699
+ isExporting$: Observable<boolean>;
2700
+ isImporting$: Observable<boolean>;
2701
+ selectFile(file: File): void;
2702
+ cancelImport(): void;
2703
+ doExport(): Promise<{
2704
+ blob: Blob;
2705
+ filename: string;
2706
+ }>;
2707
+ doImport(): Promise<void>;
2708
+ }
2709
+ declare function createExchangeStateUnit(browse: ShellStateUnit, exportFn: (params?: {
2710
+ includeArchived?: boolean;
2711
+ }) => Promise<BackendDownload>, importFn: (file: File) => Observable<ProgressEvent>): ExchangeStateUnit;
2712
+
2713
+ /**
2714
+ * ImportCard — File drop zone, preview, and import trigger
2715
+ *
2716
+ * Pure React component. All state and handlers passed as props.
2717
+ */
2718
+
2719
+ interface ImportCardTranslations {
2720
+ title: string;
2721
+ description: string;
2722
+ dropzoneLabel: string;
2723
+ dropzoneActive: string;
2724
+ detectedFormat: string;
2725
+ statsPreview: string;
2726
+ importButton: string;
2727
+ importing: string;
2728
+ importConfirmTitle: string;
2729
+ importConfirmMessage: string;
2730
+ confirmImport: string;
2731
+ cancelImport: string;
2732
+ }
2733
+ interface ImportCardProps {
2734
+ onFileSelected: (file: File) => void;
2735
+ onImport: () => void;
2736
+ onCancel: () => void;
2737
+ selectedFile: File | null;
2738
+ preview: ImportPreview | null;
2739
+ isImporting: boolean;
2740
+ translations: ImportCardTranslations;
2741
+ }
2742
+ declare function ImportCard({ onFileSelected, onImport, onCancel, selectedFile, preview, isImporting, translations: t, }: ImportCardProps): React__default.JSX.Element;
2743
+
2744
+ /**
2745
+ * ImportProgress — Shows SSE-driven progress during restore
2746
+ *
2747
+ * Pure React component. All state passed as props.
2748
+ */
2749
+ interface ImportProgressTranslations {
2750
+ phaseStarted: string;
2751
+ phaseEntityTypes: string;
2752
+ phaseResources: string;
2753
+ phaseAnnotations: string;
2754
+ phaseComplete: string;
2755
+ phaseError: string;
2756
+ hashChainValid: string;
2757
+ hashChainInvalid: string;
2758
+ streams: string;
2759
+ events: string;
2760
+ blobs: string;
2761
+ }
2762
+ interface ImportProgressProps {
2763
+ phase: string;
2764
+ message?: string;
2765
+ result?: Record<string, unknown>;
2766
+ translations: ImportProgressTranslations;
2767
+ }
2768
+ declare function ImportProgress({ phase, message, result, translations: t }: ImportProgressProps): React$1.JSX.Element;
2769
+
2770
+ /**
2771
+ * AdminExchangePage — Backup/Restore admin page
2772
+ *
2773
+ * Pure React component. All state and handlers passed as props.
2774
+ */
2775
+
2776
+ interface AdminExchangePageTranslations {
2777
+ title: string;
2778
+ subtitle: string;
2779
+ export: ExportCardTranslations;
2780
+ import: ImportCardTranslations;
2781
+ progress: ImportProgressTranslations;
2782
+ }
2783
+ interface AdminExchangePageProps {
2784
+ onExport: () => void;
2785
+ isExporting: boolean;
2786
+ onFileSelected: (file: File) => void;
2787
+ onImport: () => void;
2788
+ onCancelImport: () => void;
2789
+ selectedFile: File | null;
2790
+ preview: ImportCardProps['preview'];
2791
+ isImporting: boolean;
2792
+ importPhase: string | null;
2793
+ importMessage?: string | undefined;
2794
+ importResult?: Record<string, unknown> | undefined;
2795
+ theme: 'light' | 'dark' | 'system';
2796
+ showLineNumbers: boolean;
2797
+ activePanel: string | null;
2798
+ translations: AdminExchangePageTranslations;
2799
+ ToolbarPanels: React__default.ComponentType<any>;
2800
+ Toolbar: React__default.ComponentType<any>;
2801
+ }
2802
+ declare function AdminExchangePage({ onExport, isExporting, onFileSelected, onImport, onCancelImport, selectedFile, preview, isImporting, importPhase, importMessage, importResult, theme, showLineNumbers, activePanel, translations: t, ToolbarPanels, Toolbar, }: AdminExchangePageProps): React__default.JSX.Element;
2803
+
2804
+ /**
2805
+ * AdminSecurityPage Component
2806
+ *
2807
+ * Pure React component for the admin security configuration page.
2808
+ * All dependencies passed as props - no Next.js hooks!
2809
+ */
2810
+
2811
+ interface OAuthProvider {
2812
+ name: string;
2813
+ clientId?: string;
2814
+ }
2815
+ interface AdminSecurityPageProps {
2816
+ providers: OAuthProvider[];
2817
+ allowedDomains: string[];
2818
+ isLoading: boolean;
2819
+ theme: 'light' | 'dark' | 'system';
2820
+ showLineNumbers: boolean;
2821
+ activePanel: string | null;
2822
+ translations: {
2823
+ title: string;
2824
+ subtitle: string;
2825
+ oauthProviders: string;
2826
+ oauthProvidersDescription: string;
2827
+ clientId: string;
2828
+ configured: string;
2829
+ noProvidersConfigured: string;
2830
+ allowedDomains: string;
2831
+ allowedDomainsDescription: string;
2832
+ noDomainsConfigured: string;
2833
+ configManagementTitle: string;
2834
+ configManagementDescription: string;
2835
+ configLocalDev: string;
2836
+ configCloudDeploy: string;
2837
+ configCloudDeployCommand: string;
2838
+ configCloudDeployEnd: string;
2839
+ configAWS: string;
2840
+ };
2841
+ ToolbarPanels: React__default.ComponentType<any>;
2842
+ Toolbar: React__default.ComponentType<any>;
2843
+ }
2844
+ declare function AdminSecurityPage({ providers, allowedDomains, isLoading, theme, showLineNumbers, activePanel, translations: t, ToolbarPanels, Toolbar, }: AdminSecurityPageProps): React__default.JSX.Element;
2845
+
2846
+ /**
2847
+ * LinkedDataPage — JSON-LD Export/Import moderation page
2848
+ *
2849
+ * Pure React component. All state and handlers passed as props.
2850
+ * Reuses ExportCard, ImportCard, and ImportProgress from admin-exchange.
2851
+ */
2852
+
2853
+ interface LinkedDataPageTranslations {
2854
+ title: string;
2855
+ subtitle: string;
2856
+ export: ExportCardTranslations;
2857
+ import: ImportCardTranslations;
2858
+ progress: ImportProgressTranslations;
2859
+ }
2860
+ interface LinkedDataPageProps {
2861
+ onExport: () => void;
2862
+ isExporting: boolean;
2863
+ onFileSelected: (file: File) => void;
2864
+ onImport: () => void;
2865
+ onCancelImport: () => void;
2866
+ selectedFile: File | null;
2867
+ preview: ImportCardProps['preview'];
2868
+ isImporting: boolean;
2869
+ importPhase: string | null;
2870
+ importMessage?: string | undefined;
2871
+ importResult?: Record<string, unknown> | undefined;
2872
+ theme: 'light' | 'dark' | 'system';
2873
+ showLineNumbers: boolean;
2874
+ activePanel: string | null;
2875
+ translations: LinkedDataPageTranslations;
2876
+ ToolbarPanels: React__default.ComponentType<any>;
2877
+ Toolbar: React__default.ComponentType<any>;
2878
+ }
2879
+ declare function LinkedDataPage({ onExport, isExporting, onFileSelected, onImport, onCancelImport, selectedFile, preview, isImporting, importPhase, importMessage, importResult, theme, showLineNumbers, activePanel, translations: t, ToolbarPanels, Toolbar, }: LinkedDataPageProps): React__default.JSX.Element;
2880
+
2881
+ /**
2882
+ * AdminUsersPage Component
2883
+ *
2884
+ * Pure React component for the admin users management page.
2885
+ * All dependencies passed as props - no Next.js hooks!
2886
+ */
2887
+
2888
+ interface AdminUser {
2889
+ id: string;
2890
+ email: string;
2891
+ name?: string | null;
2892
+ domain: string;
2893
+ isAdmin: boolean;
2894
+ isActive: boolean;
2895
+ lastLogin?: string | null;
2896
+ created: string;
2897
+ }
2898
+ interface AdminUserStats {
2899
+ totalUsers: number;
2900
+ activeUsers: number;
2901
+ adminUsers: number;
2902
+ recentSignups: string[];
2903
+ }
2904
+ interface AdminUsersPageProps {
2905
+ users: AdminUser[];
2906
+ userStats: AdminUserStats | null;
2907
+ isLoadingUsers: boolean;
2908
+ isLoadingStats: boolean;
2909
+ onUpdateUser: (id: string, data: {
2910
+ isAdmin?: boolean;
2911
+ isActive?: boolean;
2912
+ }) => void;
2913
+ onDeleteUser: (id: string) => void;
2914
+ onAddUser: () => void;
2915
+ onExportUsers: () => void;
2916
+ theme: 'light' | 'dark' | 'system';
2917
+ showLineNumbers: boolean;
2918
+ activePanel: string | null;
2919
+ translations: {
2920
+ title: string;
2921
+ subtitle: string;
2922
+ addUser: string;
2923
+ totalUsers: string;
2924
+ activeUsers: string;
2925
+ administrators: string;
2926
+ recentUsers: string;
2927
+ searchUsers: string;
2928
+ searchPlaceholder: string;
2929
+ role: string;
2930
+ allRoles: string;
2931
+ admin: string;
2932
+ user: string;
2933
+ status: string;
2934
+ allStatus: string;
2935
+ active: string;
2936
+ inactive: string;
2937
+ exportUsers: string;
2938
+ loadingUsers: string;
2939
+ userColumn: string;
2940
+ domainColumn: string;
2941
+ roleColumn: string;
2942
+ statusColumn: string;
2943
+ lastLoginColumn: string;
2944
+ joinedColumn: string;
2945
+ actionsColumn: string;
2946
+ noUsersFound: string;
2947
+ noUsersFoundDescription: string;
2948
+ noName: string;
2949
+ never: string;
2950
+ removeAdmin: string;
2951
+ makeAdmin: string;
2952
+ deactivateUser: string;
2953
+ activateUser: string;
2954
+ deleteUser: string;
2955
+ };
2956
+ ToolbarPanels: React__default.ComponentType<any>;
2957
+ Toolbar: React__default.ComponentType<any>;
2958
+ buttonStyles: {
2959
+ primary: {
2960
+ base: string;
2961
+ };
2962
+ secondary: {
2963
+ base: string;
2964
+ };
2965
+ };
2966
+ }
2967
+ declare function AdminUsersPage({ users, userStats, isLoadingUsers, isLoadingStats, onUpdateUser, onDeleteUser, onAddUser, onExportUsers, theme, showLineNumbers, activePanel, translations: t, ToolbarPanels, Toolbar, buttonStyles, }: AdminUsersPageProps): React__default.JSX.Element;
2968
+
2969
+ /**
2970
+ * SignInForm - Pure React component for authentication
2971
+ *
2972
+ * Supports both Google OAuth and email/password credentials.
2973
+ * No Next.js dependencies - all data via props.
2974
+ *
2975
+ * When backendUrl is provided it is shown as a locked read-only field.
2976
+ * When backendUrl is omitted the user must enter a backend URL to connect to.
2977
+ */
2978
+
2979
+ interface SignInFormProps {
2980
+ /**
2981
+ * Callback when user clicks Google sign-in.
2982
+ * Receives the backend URL (either the locked one or what the user typed).
2983
+ */
2984
+ onGoogleSignIn: (backendUrl: string) => Promise<void>;
2985
+ /**
2986
+ * Callback when user submits email/password credentials.
2987
+ * Receives the backend URL along with email and password.
2988
+ */
2989
+ onCredentialsSignIn?: ((backendUrl: string, email: string, password: string) => Promise<void>) | undefined;
2990
+ /**
2991
+ * Pre-filled backend URL. When provided the field is read-only (re-auth to known workspace).
2992
+ * When omitted the user enters the URL themselves (new connection).
2993
+ */
2994
+ backendUrl?: string;
2995
+ /**
2996
+ * Error message to display (if any)
2997
+ */
2998
+ error?: string | null;
2999
+ /**
3000
+ * Whether to show email/password auth form
3001
+ */
3002
+ showCredentialsAuth?: boolean;
3003
+ /**
3004
+ * Whether the auth providers are still loading
3005
+ */
3006
+ isLoading?: boolean;
3007
+ /**
3008
+ * Link component for routing - passed from parent
3009
+ */
3010
+ Link: React__default.ComponentType<any>;
3011
+ /**
3012
+ * Translation strings
3013
+ */
3014
+ translations: {
3015
+ pageTitle: string;
3016
+ welcomeBack: string;
3017
+ signInPrompt: string;
3018
+ continueWithGoogle: string;
3019
+ backendUrlLabel: string;
3020
+ backendUrlPlaceholder: string;
3021
+ emailLabel: string;
3022
+ emailPlaceholder: string;
3023
+ passwordLabel: string;
3024
+ passwordPlaceholder: string;
3025
+ signInWithCredentials: string;
3026
+ or: string;
3027
+ credentialsAuthEnabled: string;
3028
+ approvedDomainsOnly: string;
3029
+ backToHome: string;
3030
+ learnMore: string;
3031
+ signUpInstead: string;
3032
+ errorBackendUrlRequired: string;
3033
+ errorBackendUrlInvalid: string;
3034
+ errorBackendUrlUnreachable: string;
3035
+ errorEmailRequired: string;
3036
+ errorPasswordRequired: string;
3037
+ tagline: string;
3038
+ };
3039
+ }
3040
+ /**
3041
+ * SignInForm - Main sign-in / connect component.
3042
+ *
3043
+ * When backendUrl is provided (re-auth to known workspace) the URL field is locked.
3044
+ * When backendUrl is omitted (new connection) the user enters the URL themselves.
3045
+ */
3046
+ declare function SignInForm({ onGoogleSignIn, onCredentialsSignIn, backendUrl, error, showCredentialsAuth, isLoading, translations: t, }: SignInFormProps): React__default.JSX.Element;
3047
+
3048
+ /**
3049
+ * SignUpForm - Pure React component for Google OAuth sign-up
3050
+ *
3051
+ * This component is extracted from the page to enable easy testing.
3052
+ * It has no Next.js dependencies and receives all data via props.
3053
+ */
3054
+
3055
+ interface SignUpFormProps {
3056
+ /**
3057
+ * Link component for routing - passed from parent
3058
+ */
3059
+ Link: React__default.ComponentType<any>;
3060
+ /**
3061
+ * Callback when user clicks the Google sign-up button
3062
+ */
3063
+ onSignUp: () => Promise<void>;
3064
+ /**
3065
+ * Translation strings for the form
3066
+ */
3067
+ translations: {
3068
+ pageTitle: string;
3069
+ signUpPrompt: string;
3070
+ signUpWithGoogle: string;
3071
+ creatingAccount: string;
3072
+ approvedDomainsInfo: string;
3073
+ termsAgreement: string;
3074
+ alreadyHaveAccount: string;
3075
+ tagline: string;
3076
+ backToHome: string;
3077
+ };
3078
+ }
3079
+ /**
3080
+ * SignUpForm component
3081
+ *
3082
+ * Renders the sign-up form with Google OAuth button.
3083
+ * Manages loading state internally.
3084
+ */
3085
+ declare function SignUpForm({ onSignUp, Link, translations: t }: SignUpFormProps): React__default.JSX.Element;
3086
+
3087
+ /**
3088
+ * AuthErrorDisplay - Pure React component for displaying authentication errors
3089
+ *
3090
+ * No Next.js dependencies - receives error type and translations via props.
3091
+ */
3092
+
3093
+ interface AuthErrorDisplayProps {
3094
+ /**
3095
+ * Link component for routing - passed from parent
3096
+ */
3097
+ Link: React__default.ComponentType<any>;
3098
+ /**
3099
+ * Error type from URL parameter
3100
+ */
3101
+ errorType: string | null;
3102
+ /**
3103
+ * Translation strings
3104
+ */
3105
+ translations: {
3106
+ pageTitle: string;
3107
+ tryAgain: string;
3108
+ errorConfiguration: string;
3109
+ errorAccessDenied: string;
3110
+ errorVerification: string;
3111
+ errorGeneric: string;
3112
+ };
3113
+ }
3114
+ /**
3115
+ * AuthErrorDisplay component
3116
+ *
3117
+ * Displays authentication error messages with a link to try again.
3118
+ */
3119
+ declare function AuthErrorDisplay({ errorType, Link, translations: t }: AuthErrorDisplayProps): React__default.JSX.Element;
3120
+
3121
+ /**
3122
+ * WelcomePage Component
3123
+ *
3124
+ * Pure React component for the welcome/terms acceptance page.
3125
+ * All dependencies passed as props - no Next.js hooks!
3126
+ */
3127
+
3128
+ interface WelcomePageProps {
3129
+ userName?: string;
3130
+ termsAcceptedAt?: string | null;
3131
+ isNewUser?: boolean;
3132
+ status: 'loading' | 'accepted' | 'form';
3133
+ isProcessing: boolean;
3134
+ onAccept: () => void;
3135
+ onDecline: () => void;
3136
+ translations: {
3137
+ loading: string;
3138
+ welcomeTitle: string;
3139
+ thanksForAccepting: string;
3140
+ welcomeUser: string;
3141
+ reviewTermsPrompt: string;
3142
+ termsSummaryTitle: string;
3143
+ termsSummaryIntro: string;
3144
+ acceptableUseTitle: string;
3145
+ acceptableUseResponsible: string;
3146
+ acceptableUseRespect: string;
3147
+ acceptableUseConduct: string;
3148
+ prohibitedContentTitle: string;
3149
+ prohibitedContentIntro: string;
3150
+ prohibitedIllegal: string;
3151
+ prohibitedAdult: string;
3152
+ prohibitedHate: string;
3153
+ prohibitedViolence: string;
3154
+ prohibitedMisinformation: string;
3155
+ prohibitedPrivacy: string;
3156
+ prohibitedCopyright: string;
3157
+ prohibitedMalware: string;
3158
+ prohibitedSpam: string;
3159
+ conductTitle: string;
3160
+ conductDescription: string;
3161
+ conductLink: string;
3162
+ conductPromotion: string;
3163
+ responsibilitiesTitle: string;
3164
+ responsibilitiesSecure: string;
3165
+ responsibilitiesReport: string;
3166
+ responsibilitiesAccurate: string;
3167
+ responsibilitiesComply: string;
3168
+ violationsWarning: string;
3169
+ readFullTerms: string;
3170
+ termsOfService: string;
3171
+ and: string;
3172
+ privacyPolicy: string;
3173
+ declineAndSignOut: string;
3174
+ acceptAndContinue: string;
3175
+ processing: string;
3176
+ legallyBound: string;
3177
+ };
3178
+ PageLayout: React__default.ComponentType<any>;
3179
+ Link: React__default.ComponentType<any>;
3180
+ }
3181
+ declare function WelcomePage({ userName, status, isProcessing, onAccept, onDecline, translations: t, PageLayout, Link, }: WelcomePageProps): React__default.JSX.Element;
3182
+
3183
+ /**
3184
+ * EntityTagsPage Component
3185
+ *
3186
+ * Pure React component for managing entity tags.
3187
+ * All dependencies passed as props - no Next.js hooks!
3188
+ */
3189
+
3190
+ interface EntityTagsPageProps {
3191
+ entityTypes: string[];
3192
+ isLoading: boolean;
3193
+ error: string;
3194
+ newTag: string;
3195
+ onNewTagChange: (value: string) => void;
3196
+ onAddTag: () => void;
3197
+ isAddingTag: boolean;
3198
+ theme: 'light' | 'dark' | 'system';
3199
+ showLineNumbers: boolean;
3200
+ activePanel: string | null;
3201
+ translations: {
3202
+ pageTitle: string;
3203
+ pageDescription: string;
3204
+ sectionTitle: string;
3205
+ sectionDescription: string;
3206
+ inputPlaceholder: string;
3207
+ addTag: string;
3208
+ adding: string;
3209
+ };
3210
+ ToolbarPanels: React__default.ComponentType<any>;
3211
+ Toolbar: React__default.ComponentType<any>;
3212
+ }
3213
+ declare function EntityTagsPage({ entityTypes, error, newTag, onNewTagChange, onAddTag, isAddingTag, theme, showLineNumbers, activePanel, translations: t, ToolbarPanels, Toolbar, }: EntityTagsPageProps): React__default.JSX.Element;
3214
+
3215
+ /**
3216
+ * RecentDocumentsPage Component
3217
+ *
3218
+ * Pure React component for viewing recent documents.
3219
+ * All dependencies passed as props - no Next.js hooks!
3220
+ */
3221
+
3222
+ interface RecentDocumentsPageProps {
3223
+ hasDocuments: boolean;
3224
+ isLoading: boolean;
3225
+ theme: 'light' | 'dark' | 'system';
3226
+ showLineNumbers: boolean;
3227
+ activePanel: string | null;
3228
+ translations: {
3229
+ pageTitle: string;
3230
+ pageDescription: string;
3231
+ sectionTitle: string;
3232
+ sectionDescription: string;
3233
+ noDocuments: string;
3234
+ activityWillAppear: string;
3235
+ loading: string;
3236
+ };
3237
+ ToolbarPanels: React__default.ComponentType<any>;
3238
+ Toolbar: React__default.ComponentType<any>;
3239
+ }
3240
+ declare function RecentDocumentsPage({ isLoading, theme, showLineNumbers, activePanel, translations: t, ToolbarPanels, Toolbar, }: RecentDocumentsPageProps): React__default.JSX.Element;
3241
+
3242
+ /**
3243
+ * TagSchemasPage Component
3244
+ *
3245
+ * Pure React component for viewing tag schemas.
3246
+ * All dependencies passed as props - no Next.js hooks!
3247
+ */
3248
+
3249
+ interface TagSchemasPageProps {
3250
+ schemas: TagSchema[];
3251
+ isLoading: boolean;
3252
+ theme: 'light' | 'dark' | 'system';
3253
+ showLineNumbers: boolean;
3254
+ activePanel: string | null;
3255
+ translations: {
3256
+ pageTitle: string;
3257
+ pageDescription: string;
3258
+ categories: string;
3259
+ loading: string;
3260
+ };
3261
+ ToolbarPanels: React__default.ComponentType<any>;
3262
+ Toolbar: React__default.ComponentType<any>;
3263
+ }
3264
+ declare function TagSchemasPage({ schemas, isLoading, theme, showLineNumbers, activePanel, translations: t, ToolbarPanels, Toolbar, }: TagSchemasPageProps): React__default.JSX.Element;
3265
+
3266
+ type ComposeMode = 'new' | 'clone' | 'reference';
3267
+ interface ComposeParams {
3268
+ mode?: string | undefined;
3269
+ token?: string | undefined;
3270
+ annotationUri?: string | undefined;
3271
+ sourceDocumentId?: string | undefined;
3272
+ name?: string | undefined;
3273
+ entityTypes?: string | undefined;
3274
+ storedContext?: string | undefined;
3275
+ }
3276
+ interface CloneData {
3277
+ sourceResource: ResourceDescriptor;
3278
+ sourceContent: string;
3279
+ }
3280
+ interface ReferenceData {
3281
+ annotationUri: string;
3282
+ sourceDocumentId: string;
3283
+ name: string;
3284
+ entityTypes: string[];
3285
+ }
3286
+ interface SaveResourceParams$1 {
3287
+ mode: ComposeMode;
3288
+ name: string;
3289
+ storageUri: string;
3290
+ content?: string;
3291
+ file?: File;
3292
+ format?: string;
3293
+ charset?: string;
3294
+ entityTypes?: string[];
3295
+ language: string;
3296
+ archiveOriginal?: boolean;
3297
+ annotationUri?: string;
3298
+ sourceDocumentId?: string;
3299
+ }
3300
+ interface ComposePageStateUnit extends StateUnit {
3301
+ browse: ShellStateUnit;
3302
+ mode$: Observable<ComposeMode>;
3303
+ loading$: Observable<boolean>;
3304
+ cloneData$: Observable<CloneData | null>;
3305
+ referenceData$: Observable<ReferenceData | null>;
3306
+ gatheredContext$: Observable<GatheredContext | null>;
3307
+ entityTypes$: Observable<string[]>;
3308
+ /**
3309
+ * Live upload-progress for the in-flight `save(...)` call. Emits the
3310
+ * full `UploadProgress` lifecycle (started → finished) while a save is
3311
+ * underway; resets to `null` between saves and after completion. UI
3312
+ * components can subscribe to render an upload-in-progress indicator.
3313
+ */
3314
+ uploadProgress$: Observable<UploadProgress | null>;
3315
+ save(params: SaveResourceParams$1): Promise<string>;
3316
+ }
3317
+ declare function createComposePageStateUnit(client: SemiontClient, browse: ShellStateUnit, params: ComposeParams, auth?: AccessToken): ComposePageStateUnit;
3318
+
3319
+ /**
3320
+ * ResourceComposePage Component
3321
+ *
3322
+ * Pure React component for creating and editing resources.
3323
+ * Supports three modes: new resource, clone, and reference completion.
3324
+ * All dependencies passed as props - no Next.js hooks!
3325
+ */
3326
+
3327
+ interface ResourceComposePageProps {
3328
+ mode: 'new' | 'clone' | 'reference';
3329
+ cloneData?: CloneData | null;
3330
+ referenceData?: ReferenceData | null;
3331
+ gatheredContext?: GatheredContext | null;
3332
+ availableEntityTypes: string[];
3333
+ initialLocale: string;
3334
+ theme: 'light' | 'dark';
3335
+ showLineNumbers: boolean;
3336
+ hoverDelayMs: number;
3337
+ activePanel: string | null;
3338
+ onSaveResource: (params: SaveResourceParams) => Promise<void>;
3339
+ onCancel: () => void;
3340
+ /**
3341
+ * Live upload-progress for the in-flight save. Resolved by the route
3342
+ * shell from `composeVM.uploadProgress$`. `null` between saves and
3343
+ * after completion. When non-null, the form disables Save and the
3344
+ * inline `<UploadProgressBar />` below the action buttons renders.
3345
+ */
3346
+ uploadProgress?: UploadProgress | null;
3347
+ translations: {
3348
+ title: string;
3349
+ titleEditClone: string;
3350
+ titleCompleteReference: string;
3351
+ subtitleClone: string;
3352
+ subtitleReference: string;
3353
+ linkedNoticePrefix: string;
3354
+ resourceName: string;
3355
+ resourceNamePlaceholder: string;
3356
+ entityTypes: string;
3357
+ language: string;
3358
+ contentSource: string;
3359
+ uploadFile: string;
3360
+ uploadFileDescription: string;
3361
+ writeContent: string;
3362
+ writeContentDescription: string;
3363
+ dropFileOrClick: string;
3364
+ supportedFormats: string;
3365
+ mediaType: string;
3366
+ autoDetected: string;
3367
+ format: string;
3368
+ content: string;
3369
+ resourceContent: string;
3370
+ encoding: string;
3371
+ archiveOriginal: string;
3372
+ cancel: string;
3373
+ saving: string;
3374
+ creating: string;
3375
+ creatingAndLinking: string;
3376
+ saveClonedResource: string;
3377
+ createAndLinkResource: string;
3378
+ createResource: string;
3379
+ };
3380
+ ToolbarPanels: React__default.ComponentType<any>;
3381
+ Toolbar: React__default.ComponentType<any>;
3382
+ }
3383
+ interface SaveResourceParams {
3384
+ mode: 'new' | 'clone' | 'reference';
3385
+ name: string;
3386
+ storageUri: string;
3387
+ content?: string;
3388
+ file?: File;
3389
+ format?: string;
3390
+ charset?: string;
3391
+ entityTypes?: string[];
3392
+ language: string;
3393
+ archiveOriginal?: boolean;
3394
+ annotationUri?: string;
3395
+ sourceDocumentId?: string;
3396
+ }
3397
+ declare function ResourceComposePage({ mode, cloneData, referenceData, gatheredContext, availableEntityTypes, initialLocale, theme, showLineNumbers, hoverDelayMs, activePanel, onSaveResource, onCancel, uploadProgress, translations: t, ToolbarPanels, Toolbar, }: ResourceComposePageProps): React__default.JSX.Element;
3398
+
3399
+ /**
3400
+ * Inline upload-progress affordance for the compose page.
3401
+ *
3402
+ * Subscribes (via prop) to a `UploadProgress | null` value derived from
3403
+ * `composeVM.uploadProgress$`. Renders nothing when null; renders an
3404
+ * indeterminate state on `started`; renders a labeled bar with byte
3405
+ * counts on `progress`; renders a brief "Uploaded" success state on
3406
+ * `finished` (cleared by the state unit's `null` push on complete).
3407
+ *
3408
+ * Designed to live below the Save button in the compose form so the
3409
+ * visual association with the action that triggered the upload is
3410
+ * direct. Uses the existing `.semiont-progress` styles in
3411
+ * `packages/react-ui/src/styles/core/progress.css`.
3412
+ */
3413
+
3414
+ interface UploadProgressBarProps {
3415
+ progress: UploadProgress | null;
3416
+ /** Optional label for the "starting" / "uploaded" lines. Defaults to "Upload". */
3417
+ label?: string;
3418
+ }
3419
+ declare function UploadProgressBar({ progress, label }: UploadProgressBarProps): React__default.ReactElement | null;
3420
+
3421
+ /**
3422
+ * ResourceDiscoveryPage Component
3423
+ *
3424
+ * Pure React component for resource discovery and search.
3425
+ * All dependencies passed as props - no Next.js hooks!
3426
+ */
3427
+
3428
+ interface ResourceDiscoveryPageProps {
3429
+ recentDocuments: ResourceDescriptor[];
3430
+ searchDocuments: ResourceDescriptor[];
3431
+ entityTypes: string[];
3432
+ isLoadingRecent: boolean;
3433
+ isSearching: boolean;
3434
+ searchQuery: string;
3435
+ onSearchQueryChange: (query: string) => void;
3436
+ selectedEntityType: string;
3437
+ onSelectedEntityTypeChange: (entityType: string) => void;
3438
+ theme: 'light' | 'dark';
3439
+ showLineNumbers: boolean;
3440
+ activePanel: string | null;
3441
+ onNavigateToResource: (resourceId: string) => void;
3442
+ onNavigateToCompose: () => void;
3443
+ translations: {
3444
+ title: string;
3445
+ subtitle: string;
3446
+ searchPlaceholder: string;
3447
+ searchButton: string;
3448
+ searching: string;
3449
+ filterByEntityType: string;
3450
+ all: string;
3451
+ recentResources: string;
3452
+ searchResults: (count: number) => string;
3453
+ documentsTaggedWith: (entityType: string) => string;
3454
+ noResultsFound: (query: string) => string;
3455
+ noResourcesAvailable: string;
3456
+ composeFirstResource: string;
3457
+ archived: string;
3458
+ created: string;
3459
+ loadingKnowledgeBase: string;
3460
+ };
3461
+ ToolbarPanels: React__default.ComponentType<any>;
3462
+ }
3463
+ declare function ResourceDiscoveryPage({ recentDocuments, searchDocuments, entityTypes, isLoadingRecent, isSearching, searchQuery, onSearchQueryChange, selectedEntityType, onSelectedEntityTypeChange, theme, showLineNumbers, activePanel, onNavigateToResource, onNavigateToCompose, translations: t, ToolbarPanels, }: ResourceDiscoveryPageProps): React__default.JSX.Element;
3464
+
3465
+ /**
3466
+ * ResourceCard Component
3467
+ *
3468
+ * Pure component for displaying a single resource in the discovery grid.
3469
+ * Handles keyboard navigation and accessibility.
3470
+ */
3471
+
3472
+ interface ResourceCardProps {
3473
+ resource: ResourceDescriptor;
3474
+ onOpen: (resource: ResourceDescriptor) => void;
3475
+ tabIndex?: number;
3476
+ archivedLabel: string;
3477
+ createdLabel: string;
3478
+ }
3479
+ declare const ResourceCard: React__default.MemoExoticComponent<({ resource, onOpen, tabIndex, archivedLabel, createdLabel }: ResourceCardProps) => React__default.JSX.Element>;
3480
+
3481
+ /**
3482
+ * ResourceViewerPage - Self-contained resource viewer component
3483
+ *
3484
+ * Handles all data loading, event subscriptions, and side effects internally.
3485
+ * Only requires minimal props from the framework layer (routing, modals).
3486
+ */
3487
+
3488
+ type SemiontResource = ResourceDescriptor;
3489
+ interface ResourceViewerPageProps {
3490
+ /**
3491
+ * The resource to display
3492
+ */
3493
+ resource: SemiontResource;
3494
+ /**
3495
+ * Resource URI
3496
+ */
3497
+ rUri: ResourceId;
3498
+ /**
3499
+ * Current locale
3500
+ */
3501
+ locale: string;
3502
+ /**
3503
+ * Link component for routing
3504
+ */
3505
+ Link: React__default.ComponentType<any>;
3506
+ /**
3507
+ * Routes configuration
3508
+ */
3509
+ routes: any;
3510
+ /**
3511
+ * Component dependencies - passed from framework layer
3512
+ */
3513
+ ToolbarPanels: React__default.ComponentType<any>;
3514
+ /**
3515
+ * Callback to refetch document from parent
3516
+ */
3517
+ refetchDocument: () => Promise<unknown>;
3518
+ /**
3519
+ * Bus connection state for the active workspace. Six-valued state
3520
+ * machine from `actor.state$`; CollaborationPanel maps it to the
3521
+ * "Live" / "Disconnected" visual.
3522
+ */
3523
+ streamStatus: ConnectionState;
3524
+ /**
3525
+ * Name of the active knowledge base (for display in panels)
3526
+ */
3527
+ knowledgeBaseName?: string | undefined;
3528
+ }
3529
+ /**
3530
+ * ResourceViewerPage - Main component
3531
+ *
3532
+ * Uses hooks directly (NO containers, NO render props, NO ResourceViewerPageContent wrapper)
3533
+ *
3534
+ * @emits nav:push - Navigate to a resource or filtered view
3535
+ * @emits beckon:sparkle - Trigger sparkle animation on an annotation
3536
+ * @emits bind:update-body - Update annotation body content
3537
+ * @subscribes mark:archive - Archive the current resource
3538
+ * @subscribes mark:unarchive - Unarchive the current resource
3539
+ * @subscribes yield:clone - Clone the current resource
3540
+ * @subscribes beckon:sparkle - Trigger sparkle animation
3541
+ * @subscribes mark:added - Annotation was created
3542
+ * @subscribes mark:removed - Annotation was deleted
3543
+ * @subscribes mark:create-failed - Annotation creation failed
3544
+ * @subscribes mark:delete-failed - Annotation deletion failed
3545
+ * @subscribes mark:body-updated - Annotation body was updated
3546
+ * @subscribes annotate:body-update-failed - Annotation body update failed
3547
+ * @subscribes settings:theme-changed - UI theme changed
3548
+ * @subscribes settings:line-numbers-toggled - Line numbers display toggled
3549
+ * @subscribes detection:complete - Detection completed
3550
+ * @subscribes detection:failed - Detection failed
3551
+ * @subscribes generation:complete - Generation completed
3552
+ * @subscribes generation:failed - Generation failed
3553
+ * @subscribes browse:reference-navigate - Navigate to a referenced document
3554
+ * @subscribes browse:entity-type-clicked - Navigate filtered by entity type
3555
+ */
3556
+ declare function ResourceViewerPage({ resource, rUri, locale, Link, routes, ToolbarPanels, refetchDocument, streamStatus, knowledgeBaseName, }: ResourceViewerPageProps): React__default.JSX.Element;
3557
+
3558
+ interface HoverEmitterProps {
3559
+ onMouseEnter: () => void;
3560
+ onMouseLeave: () => void;
3561
+ }
3562
+ declare function useHoverEmitter(annotationId: AnnotationId, hoverDelayMs?: number): HoverEmitterProps;
3563
+
3564
+ interface SessionStateUnit extends StateUnit {
3565
+ isLoggingOut$: Observable<boolean>;
3566
+ logout(): Promise<void>;
3567
+ }
3568
+ declare function createSessionStateUnit(client: SemiontClient): SessionStateUnit;
3569
+
3570
+ interface AnnotationGroups {
3571
+ highlights: Annotation[];
3572
+ comments: Annotation[];
3573
+ assessments: Annotation[];
3574
+ references: Annotation[];
3575
+ tags: Annotation[];
3576
+ }
3577
+ type StoredEventResponse = components['schemas']['StoredEventResponse'];
3578
+ interface WizardState {
3579
+ open: boolean;
3580
+ annotationId: string | null;
3581
+ resourceId: string | null;
3582
+ defaultTitle: string;
3583
+ entityTypes: string[];
3584
+ }
3585
+ interface ResourceViewerPageStateUnit extends StateUnit {
3586
+ beckon: BeckonStateUnit;
3587
+ browse: ShellStateUnit;
3588
+ mark: MarkStateUnit;
3589
+ gather: GatherStateUnit;
3590
+ yield: YieldStateUnit;
3591
+ annotations$: Observable<Annotation[]>;
3592
+ annotationGroups$: Observable<AnnotationGroups>;
3593
+ entityTypes$: Observable<string[]>;
3594
+ events$: Observable<StoredEventResponse[]>;
3595
+ referencedBy$: Observable<ReferencedByEntry[]>;
3596
+ content$: Observable<string>;
3597
+ contentLoading$: Observable<boolean>;
3598
+ mediaToken$: Observable<string | null>;
3599
+ wizard$: Observable<WizardState>;
3600
+ closeWizard(): void;
3601
+ }
3602
+ declare function createResourceViewerPageStateUnit(client: SemiontClient, resourceId: ResourceId, locale: string, browse: ShellStateUnit, options?: {
3603
+ mediaType?: string;
3604
+ }): ResourceViewerPageStateUnit;
3605
+
3606
+ interface ResourceLoaderStateUnit extends StateUnit {
3607
+ resource$: Observable<ResourceDescriptor | undefined>;
3608
+ isLoading$: Observable<boolean>;
3609
+ invalidate(): void;
3610
+ }
3611
+ declare function createResourceLoaderStateUnit(client: SemiontClient, resourceId: ResourceId): ResourceLoaderStateUnit;
3612
+
3613
+ interface AdminUsersStateUnit extends StateUnit {
3614
+ browse: ShellStateUnit;
3615
+ users$: Observable<unknown[]>;
3616
+ stats$: Observable<unknown | null>;
3617
+ usersLoading$: Observable<boolean>;
3618
+ statsLoading$: Observable<boolean>;
3619
+ updateUser(id: string, data: {
3620
+ isAdmin?: boolean;
3621
+ isActive?: boolean;
3622
+ }): Promise<void>;
3623
+ }
3624
+ declare function createAdminUsersStateUnit(client: SemiontClient, browse: ShellStateUnit): AdminUsersStateUnit;
3625
+
3626
+ interface AdminSecurityStateUnit extends StateUnit {
3627
+ browse: ShellStateUnit;
3628
+ providers$: Observable<unknown[]>;
3629
+ allowedDomains$: Observable<string[]>;
3630
+ isLoading$: Observable<boolean>;
3631
+ }
3632
+ declare function createAdminSecurityStateUnit(client: SemiontClient, browse: ShellStateUnit): AdminSecurityStateUnit;
3633
+
3634
+ interface WelcomeStateUnit extends StateUnit {
3635
+ userData$: Observable<{
3636
+ termsAcceptedAt?: string;
3637
+ } | null>;
3638
+ isProcessing$: Observable<boolean>;
3639
+ acceptTerms(): Promise<void>;
3640
+ }
3641
+ declare function createWelcomeStateUnit(client: SemiontClient): WelcomeStateUnit;
3642
+
3643
+ interface DiscoverSearchPipeline {
3644
+ query$: Observable<string>;
3645
+ state$: Observable<{
3646
+ results: ResourceDescriptor[];
3647
+ isSearching: boolean;
3648
+ }>;
3649
+ setQuery(value: string): void;
3650
+ }
3651
+ interface DiscoverStateUnit extends StateUnit {
3652
+ browse: ShellStateUnit;
3653
+ search: DiscoverSearchPipeline;
3654
+ recentResources$: Observable<ResourceDescriptor[]>;
3655
+ entityTypes$: Observable<string[]>;
3656
+ isLoadingRecent$: Observable<boolean>;
3657
+ selectedEntityType$: Observable<string>;
3658
+ setSelectedEntityType(value: string): void;
3659
+ }
3660
+ declare function createDiscoverStateUnit(client: SemiontClient, browse: ShellStateUnit): DiscoverStateUnit;
3661
+
3662
+ interface EntityTagsStateUnit extends StateUnit {
3663
+ browse: ShellStateUnit;
3664
+ entityTypes$: Observable<string[]>;
3665
+ isLoading$: Observable<boolean>;
3666
+ newTag$: Observable<string>;
3667
+ error$: Observable<string>;
3668
+ isAdding$: Observable<boolean>;
3669
+ setNewTag(value: string): void;
3670
+ addTag(): Promise<void>;
3671
+ }
3672
+ declare function createEntityTagsStateUnit(client: SemiontClient, browse: ShellStateUnit): EntityTagsStateUnit;
3673
+
3674
+ /**
3675
+ * `ShellStateUnit` is app-scoped — it owns toolbar panel state and lives on
3676
+ * the `SemiontBrowser`'s own bus. Unlike session-scoped VMs, this hook
3677
+ * does not need to wait for an active KB session; `useSemiont()`
3678
+ * always returns the module-scoped `SemiontBrowser` singleton.
3679
+ */
3680
+ declare function useShellStateUnit(): ShellStateUnit;
3681
+
3682
+ /**
3683
+ * Subscribe to an RxJS Observable and return its current value as React state.
3684
+ *
3685
+ * - For a `BehaviorSubject` (or anything with a `getValue()` method), returns
3686
+ * its current value synchronously at the first render. This matters for
3687
+ * callers that build derived objects in a `useState(factory)` initializer
3688
+ * at first render — they need the subject's value present immediately, not
3689
+ * after a second render triggered by the useEffect subscribe.
3690
+ *
3691
+ * We duck-type on `.getValue` rather than using `instanceof BehaviorSubject`
3692
+ * because rxjs can be loaded through multiple module realms in tests (e.g.
3693
+ * a bundled CJS copy inside `@semiont/react-ui/dist` vs a fresh ESM import
3694
+ * in the test file), which makes `instanceof` unreliable.
3695
+ * - For non-BehaviorSubject Observables, starts at `undefined` and emits
3696
+ * asynchronously after the subscribe.
3697
+ * - Accepts `undefined`/`null` for cases where the observable's source isn't
3698
+ * ready yet (e.g. `semiont?.browse.events(rUri)` when the active session is
3699
+ * still loading). In that case the hook is a no-op and returns undefined.
3700
+ * - Unsubscribes automatically on unmount or when `obs$` changes.
3701
+ */
3702
+ declare function useObservable<T>(obs$: Observable<T> | null | undefined): T | undefined;
3703
+
3704
+ export { ANNOTATORS, AVAILABLE_LOCALES, AdminDevOpsPage, AdminExchangePage, AdminSecurityPage, AdminUsersPage, AnnotateReferencesProgressWidget, AnnotateToolbar, AnnotateView, AnnotationHistory, AnnotationOverlay, AnnotationProvider, AssessmentEntry, AssessmentPanel, AssistSection, AsyncErrorBoundary, AuthErrorDisplay, BrowseView, Button, ButtonGroup, COMMON_PANELS, CodeMirrorRenderer, CollaborationPanel, CollapsibleResourceNavigation, CommentEntry, CommentsPanel, ComposeLoadingState, EntityTagsPage, EntityTypeBadges, ErrorBoundary, ExportCard, Footer, HighlightEntry, HighlightPanel, HistoryEvent, ImageURLSchema, ImageViewer, ImportCard, ImportProgress, JsonLdPanel, JsonLdView, KeyboardShortcutsHelpModal, LeftSidebar, LinkedDataPage, LiveRegionProvider, NavigationMenu, OAuthUserSchema, ObservableLink, PageLayout, PanelHeader, PermissionDeniedModal, PopupContainer, PopupHeader, ProtectedErrorBoundary, RESOURCE_PANELS, RecentDocumentsPage, ReferenceEntry, ReferenceResolutionWidget, ReferenceWizardModal, ReferencesPanel, ResizeHandle, ResourceAnnotationsProvider, ResourceCard, ResourceComposePage, ResourceDiscoveryPage, ResourceErrorState, ResourceInfoPanel, ResourceLoadingState, ResourceSearchModal, ResourceTagsInline, ResourceViewer, ResourceViewerPage, SearchModal, SelectedTextDisplay, SemiontBranding, SemiontFavicon, SemiontProvider, SessionExpiredModal, SessionExpiryBanner, SessionTimer, SettingsPanel, SignInForm, SignUpForm, SimpleNavigation, SkipLinks, SortableResourceTab, StatisticsPanel, StatusDisplay, SvgDrawingCanvas, TagEntry, TagSchemasPage, TaggingPanel, ThemeProvider, ToastContainer, ToastProvider, Toolbar, TranslationProvider, UnifiedAnnotationsPanel, UnifiedHeader, UploadProgressBar, UserMenuSkeleton, WebBrowserStorage, WelcomePage, applyHighlights, buildSourceToRenderedMap, buildTextNodeIndex, buttonStyles, clearHighlights, createAdminSecurityStateUnit, createAdminUsersStateUnit, createComposePageStateUnit, createDiscoverStateUnit, createEntityTagsStateUnit, createExchangeStateUnit, createResourceLoaderStateUnit, createResourceViewerPageStateUnit, createSessionStateUnit, createShellStateUnit, createWelcomeStateUnit, cssVariables, faviconPaths, formatTime, generateCSSVariables, getResourceIcon, getSelectedShapeForSelectorType, getSelectorType, getShortcutDisplay, getSupportedShapes, hideWidgetPreview, isShapeSupported, jsonLightHighlightStyle, jsonLightTheme, resolveAnnotationRanges, sanitizeImageURL, saveSelectedShapeForSelectorType, showWidgetPreview, supportsDetection, toOverlayAnnotations, tokens, useAnnotationManager, useDebounce, useDebouncedCallback, useDocumentAnnouncements, useDoubleKeyPress, useDropdown, useEventSubscription, useEventSubscriptions, useFormAnnouncements, useHoverDelay, useHoverEmitter, useIsTyping, useKeyboardShortcuts, useLanguageChangeAnnouncements, useLineNumbers, useLiveRegion, useLoadingState, useLocalStorage, useObservable, useObservableExternalNavigation, useObservableRouter, usePanelWidth, usePreloadTranslations, useResourceAnnotations, useResourceContent, useResourceLoadingAnnouncements, useRovingTabIndex, useSearchAnnouncements, useSemiont, useSessionExpiry, useShellStateUnit, useStateUnit, useTheme, useToast, useTranslations };
3705
+ export type { AdminDevOpsPageProps, AdminExchangePageProps, AdminExchangePageTranslations, AdminSecurityPageProps, AdminSecurityStateUnit, AdminUser, AdminUserStats, AdminUsersPageProps, AdminUsersStateUnit, AnnotationConfig, AnnotationCreationHandler, AnnotationGroups, AnnotationHandlers, AnnotationManager, AnnotationProviderProps, AnnotationUIState, AnnotationsCollection, Annotator, AuthErrorDisplayProps, AvailableLocale, BorderRadiusToken, ButtonGroupProps, ButtonProps, ClickAction, CloneData, CollapsibleResourceNavigationProps, ColorToken, ComposeLoadingStateProps, ComposeMode, ComposePageStateUnit, ComposeParams, CreateAnnotationParams, CreateConfig, DeleteAnnotationParams, DetectionConfig, DevOpsFeature, DiscoverStateUnit, DrawingMode, EntityTagsPageProps, EntityTagsStateUnit, ExchangeStateUnit, ExportCardProps, ExportCardTranslations, HoverEmitterProps, ImportCardProps, ImportCardTranslations, ImportPreview, ImportProgressProps, ImportProgressTranslations, KeyboardShortcut, LinkComponentProps, LinkedDataPageProps, LinkedDataPageTranslations, Motivation$8 as Motivation, NavigationItem, NavigationMenuHelper, NavigationProps, OAuthProvider, OAuthUser, ObservableLinkProps, OverlayAnnotation, RecentDocumentsPageProps, ReferenceData, ReferenceWizardModalProps, ResolvedTheme, ResourceCardProps, ResourceComposePageProps, ResourceDiscoveryPageProps, ResourceErrorStateProps, ResourceLoaderStateUnit, ResourceSearchModalProps, ResourceViewerPageProps, ResourceViewerPageStateUnit, RouteBuilder, SaveResourceParams$1 as SaveResourceParams, SearchModalProps, SelectionMotivation, SelectorType, SemiontProviderProps, SemiontResource$2 as SemiontResource, SessionStateUnit, ShadowToken, ShapeType, ShellStateUnit, ShellStateUnitOptions, SignInFormProps, SignUpFormProps, SimpleNavigationItem, SimpleNavigationProps, SortableResourceTabProps, SpacingToken, TagSchemasPageProps, TextSegment, TextSelection, Theme, ToastMessage, ToastType, ToolbarPanelType, TransitionToken, TranslationManager, TranslationProviderProps, TypographyToken, UICreateAnnotationParams, UploadProgressBarProps, UseResourceContentResult, WelcomePageProps, WelcomeStateUnit, WizardState };