@semiont/react-ui 0.4.7 → 0.4.9

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 (190) hide show
  1. package/dist/{PdfAnnotationCanvas.client-LF6DDTCV.mjs → PdfAnnotationCanvas.client-CW6SKH2U.mjs} +7 -25
  2. package/dist/PdfAnnotationCanvas.client-CW6SKH2U.mjs.map +1 -0
  3. package/dist/{EventBusContext-DUIMowqQ.d.mts → TranslationManager-CudgH3gw.d.mts} +1 -74
  4. package/dist/{ar-3URRW77J.mjs → ar-R4CRNXEF.mjs} +3 -2
  5. package/dist/ar-R4CRNXEF.mjs.map +1 -0
  6. package/dist/{bn-DCQD3XZ5.mjs → bn-CZKGRHTA.mjs} +3 -2
  7. package/dist/bn-CZKGRHTA.mjs.map +1 -0
  8. package/dist/{chunk-XMCUHQ2Y.mjs → chunk-BQJWOK4C.mjs} +15 -34
  9. package/dist/chunk-BQJWOK4C.mjs.map +1 -0
  10. package/dist/{chunk-5JZFKRLW.mjs → chunk-HNZOXH4L.mjs} +33 -35
  11. package/dist/chunk-HNZOXH4L.mjs.map +1 -0
  12. package/dist/{chunk-PWIVZQ4X.mjs → chunk-HVMAGUFA.mjs} +3 -2
  13. package/dist/chunk-HVMAGUFA.mjs.map +1 -0
  14. package/dist/{chunk-4RMWYJUJ.mjs → chunk-OL5UST25.mjs} +31 -31
  15. package/dist/{cs-23KOZUFE.mjs → cs-4WIB2IHH.mjs} +3 -2
  16. package/dist/cs-4WIB2IHH.mjs.map +1 -0
  17. package/dist/{da-OIQ66A42.mjs → da-JWYEUYPX.mjs} +3 -2
  18. package/dist/da-JWYEUYPX.mjs.map +1 -0
  19. package/dist/{de-FCCLKE2X.mjs → de-GWUQZGER.mjs} +3 -2
  20. package/dist/de-GWUQZGER.mjs.map +1 -0
  21. package/dist/{el-3ADITCGI.mjs → el-DM2GT7P5.mjs} +3 -2
  22. package/dist/el-DM2GT7P5.mjs.map +1 -0
  23. package/dist/{en-LNW2A3RA.mjs → en-IUV4ZXKH.mjs} +2 -2
  24. package/dist/{es-POQEEYIW.mjs → es-6LVQIM3D.mjs} +3 -2
  25. package/dist/es-6LVQIM3D.mjs.map +1 -0
  26. package/dist/{fa-RQPXVELG.mjs → fa-IRUJY3QI.mjs} +3 -2
  27. package/dist/fa-IRUJY3QI.mjs.map +1 -0
  28. package/dist/{fi-UXOVOUGT.mjs → fi-53FBOEVT.mjs} +3 -2
  29. package/dist/fi-53FBOEVT.mjs.map +1 -0
  30. package/dist/{fr-6W2T3R7G.mjs → fr-Q5KY7QL6.mjs} +3 -2
  31. package/dist/fr-Q5KY7QL6.mjs.map +1 -0
  32. package/dist/{he-65UHPZIU.mjs → he-HJNKULBY.mjs} +3 -2
  33. package/dist/he-HJNKULBY.mjs.map +1 -0
  34. package/dist/{hi-SGJIVPTN.mjs → hi-UYZ4X6CR.mjs} +3 -2
  35. package/dist/hi-UYZ4X6CR.mjs.map +1 -0
  36. package/dist/{id-EYJJQCS2.mjs → id-UAQMH6U2.mjs} +3 -2
  37. package/dist/id-UAQMH6U2.mjs.map +1 -0
  38. package/dist/index.css +48 -0
  39. package/dist/index.css.map +1 -1
  40. package/dist/index.d.mts +176 -125
  41. package/dist/index.mjs +556 -781
  42. package/dist/index.mjs.map +1 -1
  43. package/dist/{it-IZGQEDO7.mjs → it-C7QEBNFA.mjs} +3 -2
  44. package/dist/it-C7QEBNFA.mjs.map +1 -0
  45. package/dist/{ja-SR272JSY.mjs → ja-THS6AOSJ.mjs} +3 -2
  46. package/dist/ja-THS6AOSJ.mjs.map +1 -0
  47. package/dist/{ko-YWTXVVXE.mjs → ko-XKK3TWQG.mjs} +3 -2
  48. package/dist/ko-XKK3TWQG.mjs.map +1 -0
  49. package/dist/{ms-3K2XSJGM.mjs → ms-GSK7LIF7.mjs} +3 -2
  50. package/dist/ms-GSK7LIF7.mjs.map +1 -0
  51. package/dist/{nl-YIGP4SLE.mjs → nl-KUBWITGY.mjs} +3 -2
  52. package/dist/nl-KUBWITGY.mjs.map +1 -0
  53. package/dist/{no-IFYIL3ND.mjs → no-ECWZUHT6.mjs} +3 -2
  54. package/dist/no-ECWZUHT6.mjs.map +1 -0
  55. package/dist/{pl-6MWSASJR.mjs → pl-PLVWSZWS.mjs} +3 -2
  56. package/dist/pl-PLVWSZWS.mjs.map +1 -0
  57. package/dist/{pt-NZNN6WUN.mjs → pt-AL74ZTKB.mjs} +3 -2
  58. package/dist/pt-AL74ZTKB.mjs.map +1 -0
  59. package/dist/{ro-NF3SMUJS.mjs → ro-WTPHLHGS.mjs} +3 -2
  60. package/dist/ro-WTPHLHGS.mjs.map +1 -0
  61. package/dist/{sv-ZHM7GSTD.mjs → sv-QCLI7SG4.mjs} +3 -2
  62. package/dist/sv-QCLI7SG4.mjs.map +1 -0
  63. package/dist/test-utils.d.mts +1 -4
  64. package/dist/test-utils.mjs +4 -6
  65. package/dist/test-utils.mjs.map +1 -1
  66. package/dist/{th-LX4NO5BJ.mjs → th-WCKVZU6U.mjs} +3 -2
  67. package/dist/th-WCKVZU6U.mjs.map +1 -0
  68. package/dist/{tr-DZ4GDSRR.mjs → tr-2CAFS2XS.mjs} +3 -2
  69. package/dist/tr-2CAFS2XS.mjs.map +1 -0
  70. package/dist/{uk-KC5KVVBY.mjs → uk-TDE4JLCY.mjs} +3 -2
  71. package/dist/uk-TDE4JLCY.mjs.map +1 -0
  72. package/dist/{vi-KNCR3OXZ.mjs → vi-KKXZ4PCX.mjs} +3 -2
  73. package/dist/vi-KKXZ4PCX.mjs.map +1 -0
  74. package/dist/{zh-M2HV2A27.mjs → zh-VH4XN5PV.mjs} +3 -2
  75. package/dist/zh-VH4XN5PV.mjs.map +1 -0
  76. package/package.json +1 -1
  77. package/src/components/Toolbar.tsx +15 -0
  78. package/src/components/__tests__/AnnotateReferencesProgressWidget.test.tsx +2 -6
  79. package/src/components/__tests__/Toolbar.test.tsx +2 -6
  80. package/src/components/annotation/__tests__/AnnotateToolbar.test.tsx +1 -2
  81. package/src/components/image-annotation/SvgDrawingCanvas.tsx +4 -7
  82. package/src/components/modals/ConfigureGenerationStep.tsx +54 -60
  83. package/src/components/modals/ReferenceWizardModal.tsx +3 -3
  84. package/src/components/navigation/__tests__/ObservableLink.test.tsx +2 -6
  85. package/src/components/navigation/__tests__/SimpleNavigation.test.tsx +2 -6
  86. package/src/components/pdf-annotation/PdfAnnotationCanvas.tsx +3 -9
  87. package/src/components/resource/AnnotateView.tsx +4 -5
  88. package/src/components/resource/AnnotationHistory.tsx +2 -5
  89. package/src/components/resource/BrowseView.tsx +2 -3
  90. package/src/components/resource/HistoryEvent.tsx +3 -3
  91. package/src/components/resource/__tests__/BrowseView.test.tsx +1 -2
  92. package/src/components/resource/__tests__/ResourceViewer.mode-switch.test.tsx +8 -8
  93. package/src/components/resource/event-formatting.ts +22 -19
  94. package/src/components/resource/panels/__tests__/AssessmentEntry.test.tsx +1 -2
  95. package/src/components/resource/panels/__tests__/AssessmentPanel.test.tsx +1 -2
  96. package/src/components/resource/panels/__tests__/AssistSection.test.tsx +0 -2
  97. package/src/components/resource/panels/__tests__/CommentEntry.test.tsx +1 -2
  98. package/src/components/resource/panels/__tests__/CommentsPanel.test.tsx +1 -2
  99. package/src/components/resource/panels/__tests__/HighlightEntry.test.tsx +1 -2
  100. package/src/components/resource/panels/__tests__/HighlightPanel.annotationProgress.test.tsx +0 -2
  101. package/src/components/resource/panels/__tests__/ReferenceEntry.test.tsx +1 -2
  102. package/src/components/resource/panels/__tests__/ReferencesPanel.test.tsx +1 -2
  103. package/src/components/resource/panels/__tests__/ResourceInfoPanel.test.tsx +1 -2
  104. package/src/components/resource/panels/__tests__/TagEntry.test.tsx +1 -2
  105. package/src/components/resource/panels/__tests__/TaggingPanel.test.tsx +1 -2
  106. package/src/components/settings/__tests__/SettingsPanel.test.tsx +1 -2
  107. package/src/components/viewers/ImageViewer.tsx +2 -8
  108. package/src/components/viewers/__tests__/ImageViewer.test.tsx +3 -16
  109. package/src/features/auth/__tests__/SignInForm.a11y.test.tsx +8 -0
  110. package/src/features/auth/auth.css +62 -0
  111. package/src/features/auth/components/SignInForm.tsx +139 -29
  112. package/src/features/resource-compose/__tests__/ResourceComposePage.test.tsx +2 -6
  113. package/src/features/resource-discovery/__tests__/ResourceDiscoveryPage.test.tsx +1 -2
  114. package/src/features/resource-viewer/__tests__/AnnotationCreationPending.test.tsx +1 -2
  115. package/src/features/resource-viewer/__tests__/AnnotationDeletionIntegration.test.tsx +1 -2
  116. package/src/features/resource-viewer/__tests__/AnnotationProgressDismissal.test.tsx +1 -2
  117. package/src/features/resource-viewer/__tests__/BindFlowIntegration.test.tsx +1 -2
  118. package/src/features/resource-viewer/__tests__/DetectionFlowBug.test.tsx +1 -2
  119. package/src/features/resource-viewer/__tests__/DetectionFlowIntegration.test.tsx +1 -2
  120. package/src/features/resource-viewer/__tests__/ResourceMutations.test.tsx +9 -10
  121. package/src/features/resource-viewer/__tests__/ResourceViewerPage.test.tsx +9 -6
  122. package/src/features/resource-viewer/__tests__/ToastNotifications.test.tsx +2 -12
  123. package/src/features/resource-viewer/__tests__/YieldFlowIntegration.test.tsx +1 -2
  124. package/src/features/resource-viewer/__tests__/annotation-progress-flow.test.tsx +16 -6
  125. package/src/features/resource-viewer/components/ResourceViewerPage.tsx +45 -75
  126. package/src/styles/core/forms.css +32 -0
  127. package/src/styles/core/sliders.css +5 -0
  128. package/translations/ar.json +3 -2
  129. package/translations/bn.json +3 -2
  130. package/translations/cs.json +3 -2
  131. package/translations/da.json +3 -2
  132. package/translations/de.json +3 -2
  133. package/translations/el.json +3 -2
  134. package/translations/en.json +4 -3
  135. package/translations/es.json +3 -2
  136. package/translations/fa.json +3 -2
  137. package/translations/fi.json +3 -2
  138. package/translations/fr.json +3 -2
  139. package/translations/he.json +3 -2
  140. package/translations/hi.json +3 -2
  141. package/translations/id.json +3 -2
  142. package/translations/it.json +3 -2
  143. package/translations/ja.json +3 -2
  144. package/translations/ko.json +3 -2
  145. package/translations/ms.json +3 -2
  146. package/translations/nl.json +3 -2
  147. package/translations/no.json +3 -2
  148. package/translations/pl.json +3 -2
  149. package/translations/pt.json +3 -2
  150. package/translations/ro.json +3 -2
  151. package/translations/sv.json +3 -2
  152. package/translations/th.json +3 -2
  153. package/translations/tr.json +3 -2
  154. package/translations/uk.json +3 -2
  155. package/translations/vi.json +3 -2
  156. package/translations/zh.json +3 -2
  157. package/dist/PdfAnnotationCanvas.client-LF6DDTCV.mjs.map +0 -1
  158. package/dist/ar-3URRW77J.mjs.map +0 -1
  159. package/dist/bn-DCQD3XZ5.mjs.map +0 -1
  160. package/dist/chunk-5JZFKRLW.mjs.map +0 -1
  161. package/dist/chunk-PWIVZQ4X.mjs.map +0 -1
  162. package/dist/chunk-XMCUHQ2Y.mjs.map +0 -1
  163. package/dist/cs-23KOZUFE.mjs.map +0 -1
  164. package/dist/da-OIQ66A42.mjs.map +0 -1
  165. package/dist/de-FCCLKE2X.mjs.map +0 -1
  166. package/dist/el-3ADITCGI.mjs.map +0 -1
  167. package/dist/es-POQEEYIW.mjs.map +0 -1
  168. package/dist/fa-RQPXVELG.mjs.map +0 -1
  169. package/dist/fi-UXOVOUGT.mjs.map +0 -1
  170. package/dist/fr-6W2T3R7G.mjs.map +0 -1
  171. package/dist/he-65UHPZIU.mjs.map +0 -1
  172. package/dist/hi-SGJIVPTN.mjs.map +0 -1
  173. package/dist/id-EYJJQCS2.mjs.map +0 -1
  174. package/dist/it-IZGQEDO7.mjs.map +0 -1
  175. package/dist/ja-SR272JSY.mjs.map +0 -1
  176. package/dist/ko-YWTXVVXE.mjs.map +0 -1
  177. package/dist/ms-3K2XSJGM.mjs.map +0 -1
  178. package/dist/nl-YIGP4SLE.mjs.map +0 -1
  179. package/dist/no-IFYIL3ND.mjs.map +0 -1
  180. package/dist/pl-6MWSASJR.mjs.map +0 -1
  181. package/dist/pt-NZNN6WUN.mjs.map +0 -1
  182. package/dist/ro-NF3SMUJS.mjs.map +0 -1
  183. package/dist/sv-ZHM7GSTD.mjs.map +0 -1
  184. package/dist/th-LX4NO5BJ.mjs.map +0 -1
  185. package/dist/tr-DZ4GDSRR.mjs.map +0 -1
  186. package/dist/uk-KC5KVVBY.mjs.map +0 -1
  187. package/dist/vi-KNCR3OXZ.mjs.map +0 -1
  188. package/dist/zh-M2HV2A27.mjs.map +0 -1
  189. /package/dist/{chunk-4RMWYJUJ.mjs.map → chunk-OL5UST25.mjs.map} +0 -0
  190. /package/dist/{en-LNW2A3RA.mjs.map → en-IUV4ZXKH.mjs.map} +0 -0
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Ressourcen-Info",
6
6
  "collaboration": "Zusammenarbeit",
7
7
  "userAccount": "Benutzerkonto",
8
- "settings": "Einstellungen"
8
+ "settings": "Einstellungen",
9
+ "knowledgeBase": "Wissensbasis"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Ressourcen-Info",
@@ -373,4 +374,4 @@
373
374
  "searching": "Suche läuft...",
374
375
  "search": "Suchen"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Πληροφορίες Πόρου",
6
6
  "collaboration": "Συνεργασία",
7
7
  "userAccount": "Λογαριασμός Χρήστη",
8
- "settings": "Ρυθμίσεις"
8
+ "settings": "Ρυθμίσεις",
9
+ "knowledgeBase": "Βάση Γνώσεων"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Πληροφορίες Πόρου",
@@ -373,4 +374,4 @@
373
374
  "searching": "Αναζήτηση...",
374
375
  "search": "Αναζήτηση"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Resource Info",
6
6
  "collaboration": "Collaboration",
7
7
  "userAccount": "User Account",
8
- "settings": "Settings"
8
+ "settings": "Settings",
9
+ "knowledgeBase": "Knowledge Base"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Resource Info",
@@ -275,7 +276,7 @@
275
276
  "accessibilityTitle": "Accessibility",
276
277
  "a11ySkipLinks": "Navigate to skip links (when at page start)",
277
278
  "a11yFollowLink": "Follow skip link",
278
- "macNote": "Using Mac keyboard shortcuts. \u2318 is the Command key.",
279
+ "macNote": "Using Mac keyboard shortcuts. is the Command key.",
279
280
  "windowsNote": "Using Windows/Linux keyboard shortcuts. Ctrl is the Control key.",
280
281
  "footerHint": "Press {{key}} anytime to show this help",
281
282
  "close": "Close"
@@ -373,4 +374,4 @@
373
374
  "searching": "Searching...",
374
375
  "search": "Search"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Información del Recurso",
6
6
  "collaboration": "Colaboración",
7
7
  "userAccount": "Cuenta de Usuario",
8
- "settings": "Configuración"
8
+ "settings": "Configuración",
9
+ "knowledgeBase": "Base de conocimiento"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Información del Recurso",
@@ -373,4 +374,4 @@
373
374
  "searching": "Buscando...",
374
375
  "search": "Buscar"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "اطلاعات منبع",
6
6
  "collaboration": "همکاری",
7
7
  "userAccount": "حساب کاربری",
8
- "settings": "تنظیمات"
8
+ "settings": "تنظیمات",
9
+ "knowledgeBase": "پایگاه دانش"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "اطلاعات منبع",
@@ -373,4 +374,4 @@
373
374
  "searching": "در حال جستجو...",
374
375
  "search": "جستجو"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Resurssin tiedot",
6
6
  "collaboration": "Yhteistyö",
7
7
  "userAccount": "Käyttäjätili",
8
- "settings": "Asetukset"
8
+ "settings": "Asetukset",
9
+ "knowledgeBase": "Tietokanta"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Resurssin tiedot",
@@ -373,4 +374,4 @@
373
374
  "searching": "Haetaan...",
374
375
  "search": "Hae"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Informations sur la ressource",
6
6
  "collaboration": "Collaboration",
7
7
  "userAccount": "Compte utilisateur",
8
- "settings": "Paramètres"
8
+ "settings": "Paramètres",
9
+ "knowledgeBase": "Base de connaissances"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Informations sur la ressource",
@@ -373,4 +374,4 @@
373
374
  "searching": "Recherche en cours...",
374
375
  "search": "Rechercher"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "מידע על המשאב",
6
6
  "collaboration": "שיתוף פעולה",
7
7
  "userAccount": "חשבון משתמש",
8
- "settings": "הגדרות"
8
+ "settings": "הגדרות",
9
+ "knowledgeBase": "בסיס ידע"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "מידע על המשאב",
@@ -373,4 +374,4 @@
373
374
  "searching": "מחפש...",
374
375
  "search": "חיפוש"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "संसाधन जानकारी",
6
6
  "collaboration": "सहयोग",
7
7
  "userAccount": "उपयोगकर्ता खाता",
8
- "settings": "सेटिंग्स"
8
+ "settings": "सेटिंग्स",
9
+ "knowledgeBase": "ज्ञान आधार"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "संसाधन जानकारी",
@@ -373,4 +374,4 @@
373
374
  "searching": "खोज रहे हैं...",
374
375
  "search": "खोजें"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Info Sumber Daya",
6
6
  "collaboration": "Kolaborasi",
7
7
  "userAccount": "Akun Pengguna",
8
- "settings": "Pengaturan"
8
+ "settings": "Pengaturan",
9
+ "knowledgeBase": "Basis Pengetahuan"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Info Sumber Daya",
@@ -373,4 +374,4 @@
373
374
  "searching": "Mencari...",
374
375
  "search": "Cari"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Info Risorsa",
6
6
  "collaboration": "Collaborazione",
7
7
  "userAccount": "Account Utente",
8
- "settings": "Impostazioni"
8
+ "settings": "Impostazioni",
9
+ "knowledgeBase": "Base di conoscenza"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Info Risorsa",
@@ -373,4 +374,4 @@
373
374
  "searching": "Ricerca in corso...",
374
375
  "search": "Cerca"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "リソース情報",
6
6
  "collaboration": "コラボレーション",
7
7
  "userAccount": "ユーザーアカウント",
8
- "settings": "設定"
8
+ "settings": "設定",
9
+ "knowledgeBase": "ナレッジベース"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "リソース情報",
@@ -373,4 +374,4 @@
373
374
  "searching": "検索中...",
374
375
  "search": "検索"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "리소스 정보",
6
6
  "collaboration": "협업",
7
7
  "userAccount": "사용자 계정",
8
- "settings": "설정"
8
+ "settings": "설정",
9
+ "knowledgeBase": "지식 베이스"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "리소스 정보",
@@ -373,4 +374,4 @@
373
374
  "searching": "검색 중...",
374
375
  "search": "검색"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Maklumat Sumber",
6
6
  "collaboration": "Kolaborasi",
7
7
  "userAccount": "Akaun Pengguna",
8
- "settings": "Tetapan"
8
+ "settings": "Tetapan",
9
+ "knowledgeBase": "Pangkalan Pengetahuan"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Maklumat Sumber",
@@ -373,4 +374,4 @@
373
374
  "searching": "Mencari...",
374
375
  "search": "Cari"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Broninformatie",
6
6
  "collaboration": "Samenwerking",
7
7
  "userAccount": "Gebruikersaccount",
8
- "settings": "Instellingen"
8
+ "settings": "Instellingen",
9
+ "knowledgeBase": "Kennisbank"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Broninformatie",
@@ -376,4 +377,4 @@
376
377
  "searching": "Zoeken...",
377
378
  "search": "Zoeken"
378
379
  }
379
- }
380
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Ressursinfo",
6
6
  "collaboration": "Samarbeid",
7
7
  "userAccount": "Brukerkonto",
8
- "settings": "Innstillinger"
8
+ "settings": "Innstillinger",
9
+ "knowledgeBase": "Kunnskapsbase"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Ressursinfo",
@@ -373,4 +374,4 @@
373
374
  "searching": "Søker...",
374
375
  "search": "Søk"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Informacje o zasobie",
6
6
  "collaboration": "Współpraca",
7
7
  "userAccount": "Konto użytkownika",
8
- "settings": "Ustawienia"
8
+ "settings": "Ustawienia",
9
+ "knowledgeBase": "Baza wiedzy"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Informacje o zasobie",
@@ -373,4 +374,4 @@
373
374
  "searching": "Wyszukiwanie...",
374
375
  "search": "Szukaj"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Info do Recurso",
6
6
  "collaboration": "Colaboracao",
7
7
  "userAccount": "Conta do Usuario",
8
- "settings": "Configuracoes"
8
+ "settings": "Configuracoes",
9
+ "knowledgeBase": "Base de conhecimento"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Info do Recurso",
@@ -373,4 +374,4 @@
373
374
  "searching": "Pesquisando...",
374
375
  "search": "Pesquisar"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Info resursă",
6
6
  "collaboration": "Colaborare",
7
7
  "userAccount": "Cont utilizator",
8
- "settings": "Setări"
8
+ "settings": "Setări",
9
+ "knowledgeBase": "Bază de cunoștințe"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Info resursă",
@@ -373,4 +374,4 @@
373
374
  "searching": "Se caută...",
374
375
  "search": "Caută"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Resursinformation",
6
6
  "collaboration": "Samarbete",
7
7
  "userAccount": "Användarkonto",
8
- "settings": "Inställningar"
8
+ "settings": "Inställningar",
9
+ "knowledgeBase": "Kunskapsbas"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Resursinformation",
@@ -373,4 +374,4 @@
373
374
  "searching": "Söker...",
374
375
  "search": "Sök"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "ข้อมูลทรัพยากร",
6
6
  "collaboration": "การทำงานร่วมกัน",
7
7
  "userAccount": "บัญชีผู้ใช้",
8
- "settings": "การตั้งค่า"
8
+ "settings": "การตั้งค่า",
9
+ "knowledgeBase": "ฐานความรู้"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "ข้อมูลทรัพยากร",
@@ -373,4 +374,4 @@
373
374
  "searching": "กำลังค้นหา...",
374
375
  "search": "ค้นหา"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Kaynak Bilgisi",
6
6
  "collaboration": "İşbirliği",
7
7
  "userAccount": "Kullanıcı Hesabı",
8
- "settings": "Ayarlar"
8
+ "settings": "Ayarlar",
9
+ "knowledgeBase": "Bilgi Tabanı"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Kaynak Bilgisi",
@@ -373,4 +374,4 @@
373
374
  "searching": "Aranıyor...",
374
375
  "search": "Ara"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Інформація про ресурс",
6
6
  "collaboration": "Співпраця",
7
7
  "userAccount": "Обліковий запис",
8
- "settings": "Налаштування"
8
+ "settings": "Налаштування",
9
+ "knowledgeBase": "База знань"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Інформація про ресурс",
@@ -373,4 +374,4 @@
373
374
  "searching": "Пошук...",
374
375
  "search": "Пошук"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "Thông tin tài nguyên",
6
6
  "collaboration": "Cộng tác",
7
7
  "userAccount": "Tài khoản người dùng",
8
- "settings": "Cài đặt"
8
+ "settings": "Cài đặt",
9
+ "knowledgeBase": "Cơ sở kiến thức"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "Thông tin tài nguyên",
@@ -373,4 +374,4 @@
373
374
  "searching": "Đang tìm kiếm...",
374
375
  "search": "Tìm kiếm"
375
376
  }
376
- }
377
+ }
@@ -5,7 +5,8 @@
5
5
  "resourceInfo": "资源信息",
6
6
  "collaboration": "协作",
7
7
  "userAccount": "用户帐户",
8
- "settings": "设置"
8
+ "settings": "设置",
9
+ "knowledgeBase": "知识库"
9
10
  },
10
11
  "ResourceInfoPanel": {
11
12
  "title": "资源信息",
@@ -373,4 +374,4 @@
373
374
  "searching": "搜索中...",
374
375
  "search": "搜索"
375
376
  }
376
- }
377
+ }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/pdf-annotation/PdfAnnotationCanvas.tsx","../src/lib/pdf-coordinates.ts","../src/lib/browser-pdfjs.ts"],"sourcesContent":["'use client';\n\nimport React, { useRef, useState, useCallback, useEffect, useMemo } from 'react';\nimport { createHoverHandlers } from '../../hooks/useBeckonFlow';\nimport type { components, ResourceId } from '@semiont/core';\nimport { getTargetSelector } from '@semiont/api-client';\nimport type { SelectionMotivation } from '../annotation/AnnotateToolbar';\nimport type { EventBus } from \"@semiont/core\"\nimport {\n canvasToPdfCoordinates,\n pdfToCanvasCoordinates,\n createFragmentSelector,\n parseFragmentSelector,\n getPageFromFragment,\n type CanvasRectangle\n} from '../../lib/pdf-coordinates';\nimport {\n loadPdfDocument,\n renderPdfPageToDataUrl,\n type PDFDocumentProxy\n} from '../../lib/browser-pdfjs';\nimport './PdfAnnotationCanvas.css';\n\ntype Annotation = components['schemas']['Annotation'];\n\nexport type DrawingMode = 'rectangle' | 'circle' | 'polygon' | null;\n\n/**\n * Get color for annotation based on motivation\n */\nfunction getMotivationColor(motivation: SelectionMotivation | null): { stroke: string; fill: string } {\n if (!motivation) {\n return { stroke: 'rgb(156, 163, 175)', fill: 'rgba(156, 163, 175, 0.2)' };\n }\n\n switch (motivation) {\n case 'highlighting':\n return { stroke: 'rgb(250, 204, 21)', fill: 'rgba(250, 204, 21, 0.3)' };\n case 'linking':\n return { stroke: 'rgb(59, 130, 246)', fill: 'rgba(59, 130, 246, 0.2)' };\n case 'assessing':\n return { stroke: 'rgb(239, 68, 68)', fill: 'rgba(239, 68, 68, 0.2)' };\n case 'commenting':\n return { stroke: 'rgb(255, 255, 255)', fill: 'rgba(255, 255, 255, 0.2)' };\n default:\n return { stroke: 'rgb(156, 163, 175)', fill: 'rgba(156, 163, 175, 0.2)' };\n }\n}\n\ninterface PdfAnnotationCanvasProps {\n resourceUri: ResourceId;\n existingAnnotations?: Annotation[];\n drawingMode: DrawingMode;\n selectedMotivation?: SelectionMotivation | null;\n eventBus?: EventBus;\n hoveredAnnotationId?: string | null;\n selectedAnnotationId?: string | null;\n hoverDelayMs?: number;\n}\n\n/**\n * PDF annotation canvas with page navigation and rectangle drawing\n *\n * @emits browse:click - Annotation clicked on PDF. Payload: { annotationId: string, motivation: Motivation }\n * @emits mark:requested - New annotation drawn on PDF. Payload: { selector: FragmentSelector, motivation: SelectionMotivation }\n * @emits beckon:hover - Annotation hovered or unhovered. Payload: { annotationId: string | null }\n */\nexport function PdfAnnotationCanvas({\n resourceUri,\n existingAnnotations = [],\n drawingMode,\n selectedMotivation,\n eventBus,\n hoveredAnnotationId,\n selectedAnnotationId,\n hoverDelayMs = 150\n}: PdfAnnotationCanvasProps) {\n const pdfUrl = useMemo(() => {\n return `/api/resources/${resourceUri}`;\n }, [resourceUri]);\n\n // Removed excessive logging\n\n // PDF state\n const [pdfDoc, setPdfDoc] = useState<PDFDocumentProxy | null>(null);\n const [numPages, setNumPages] = useState<number>(0);\n const [pageNumber, setPageNumber] = useState(1);\n const [pageImageUrl, setPageImageUrl] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [pageDimensions, setPageDimensions] = useState<{ width: number; height: number } | null>(null);\n const [displayDimensions, setDisplayDimensions] = useState<{ width: number; height: number } | null>(null);\n const [scale] = useState(1.5); // Fixed scale for better quality\n\n // Drawing state\n const [isDrawing, setIsDrawing] = useState(false);\n const [selection, setSelection] = useState<CanvasRectangle | null>(null);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const imageRef = useRef<HTMLImageElement>(null);\n\n // Load PDF document on mount\n useEffect(() => {\n let cancelled = false;\n\n async function loadPdf() {\n try {\n setIsLoading(true);\n setError(null);\n\n const doc = await loadPdfDocument(pdfUrl);\n\n if (cancelled) return;\n\n setPdfDoc(doc);\n setNumPages(doc.numPages);\n setIsLoading(false);\n } catch (err) {\n if (cancelled) return;\n\n console.error('Error loading PDF:', err);\n setError('Failed to load PDF');\n setIsLoading(false);\n }\n }\n\n loadPdf();\n\n return () => {\n cancelled = true;\n };\n }, [pdfUrl]);\n\n // Load current page when page number changes\n useEffect(() => {\n if (!pdfDoc) return;\n\n let cancelled = false;\n const doc = pdfDoc;\n\n async function loadPage() {\n try {\n const page = await doc.getPage(pageNumber);\n\n if (cancelled) return;\n\n // Get page dimensions (at scale 1.0)\n const viewport = page.getViewport({ scale: 1.0 });\n setPageDimensions({\n width: viewport.width,\n height: viewport.height\n });\n\n // Render page to image\n const { dataUrl } = await renderPdfPageToDataUrl(page, scale);\n\n if (cancelled) return;\n\n setPageImageUrl(dataUrl);\n } catch (err) {\n if (cancelled) return;\n\n console.error('Error loading page:', err);\n setError('Failed to load page');\n }\n }\n\n loadPage();\n\n return () => {\n cancelled = true;\n };\n }, [pdfDoc, pageNumber, scale]);\n\n // Update display dimensions on resize\n useEffect(() => {\n const updateDisplayDimensions = () => {\n if (imageRef.current) {\n setDisplayDimensions({\n width: imageRef.current.clientWidth,\n height: imageRef.current.clientHeight\n });\n }\n };\n\n updateDisplayDimensions();\n\n // Use ResizeObserver to detect image element size changes\n // This catches: sidebar open/close, window resize, font size changes, etc.\n let resizeObserver: ResizeObserver | null = null;\n\n try {\n resizeObserver = new ResizeObserver(updateDisplayDimensions);\n if (imageRef.current) {\n resizeObserver.observe(imageRef.current);\n }\n } catch (error) {\n // Fallback for browsers without ResizeObserver support\n console.warn('ResizeObserver not supported, falling back to window resize listener');\n window.addEventListener('resize', updateDisplayDimensions);\n }\n\n return () => {\n if (resizeObserver) {\n resizeObserver.disconnect();\n } else {\n window.removeEventListener('resize', updateDisplayDimensions);\n }\n };\n }, [pageImageUrl]);\n\n // Mouse event handlers for drawing\n const handleMouseDown = useCallback((e: React.MouseEvent) => {\n if (!drawingMode) return;\n if (!imageRef.current) return;\n\n const rect = imageRef.current.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n\n // Clear any previous selection when starting new drawing\n setIsDrawing(true);\n setSelection({\n startX: x,\n startY: y,\n endX: x,\n endY: y\n });\n }, [drawingMode]);\n\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n if (!isDrawing || !selection || !imageRef.current) return;\n\n const rect = imageRef.current.getBoundingClientRect();\n\n setSelection({\n ...selection,\n endX: e.clientX - rect.left,\n endY: e.clientY - rect.top\n });\n }, [isDrawing, selection]);\n\n const handleMouseUp = useCallback(() => {\n if (!isDrawing || !selection || !pageDimensions || !displayDimensions || !eventBus) {\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n\n // Calculate drag distance\n const dragDistance = Math.sqrt(\n Math.pow(selection.endX - selection.startX, 2) +\n Math.pow(selection.endY - selection.startY, 2)\n );\n\n // Minimum drag threshold in pixels (10px)\n const MIN_DRAG_DISTANCE = 10;\n\n if (dragDistance < MIN_DRAG_DISTANCE) {\n // This was a click, not a drag - check if we clicked an existing annotation\n if (existingAnnotations.length > 0) {\n const clickedAnnotation = pageAnnotations.find(ann => {\n const fragmentSel = getFragmentSelector(ann.target);\n if (!fragmentSel) return false;\n\n const pdfCoord = parseFragmentSelector(fragmentSel.value);\n if (!pdfCoord) return false;\n\n const rect = pdfToCanvasCoordinates(pdfCoord, pageDimensions.height, 1.0);\n\n // Scale to display coordinates\n const scaleX = displayDimensions.width / pageDimensions.width;\n const scaleY = displayDimensions.height / pageDimensions.height;\n\n const displayX = rect.x * scaleX;\n const displayY = rect.y * scaleY;\n const displayWidth = rect.width * scaleX;\n const displayHeight = rect.height * scaleY;\n\n return (\n selection.endX >= displayX &&\n selection.endX <= displayX + displayWidth &&\n selection.endY >= displayY &&\n selection.endY <= displayY + displayHeight\n );\n });\n\n if (clickedAnnotation) {\n eventBus?.get('browse:click').next({ annotationId: clickedAnnotation.id, motivation: clickedAnnotation.motivation });\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n }\n\n // Click on empty space - do nothing\n setIsDrawing(false);\n setSelection(null);\n return;\n }\n\n // This was a drag - create new annotation\n // Scale selection from display coordinates to native page coordinates\n const scaleX = pageDimensions.width / displayDimensions.width;\n const scaleY = pageDimensions.height / displayDimensions.height;\n\n const nativeSelection: CanvasRectangle = {\n startX: selection.startX * scaleX,\n startY: selection.startY * scaleY,\n endX: selection.endX * scaleX,\n endY: selection.endY * scaleY\n };\n\n // Convert canvas coordinates to PDF coordinates\n const pdfCoord = canvasToPdfCoordinates(\n nativeSelection,\n pageNumber,\n pageDimensions.width,\n pageDimensions.height,\n 1.0 // Use scale 1.0 since we already scaled to native coords\n );\n\n // Create FragmentSelector\n const fragmentSelector = createFragmentSelector(pdfCoord);\n\n // Emit annotation:requested event with FragmentSelector\n if (selectedMotivation) {\n eventBus.get('mark:requested').next({\n selector: {\n type: 'FragmentSelector',\n conformsTo: 'http://tools.ietf.org/rfc/rfc3778',\n value: fragmentSelector\n },\n motivation: selectedMotivation\n });\n }\n\n // Keep drawing state active to show preview until annotation is persisted\n // The parent component should clear this by changing drawingMode after save\n setIsDrawing(false);\n // Note: We keep selection so the preview remains visible\n // It will be cleared when drawingMode changes or user starts new selection\n }, [isDrawing, selection, pageNumber, pageDimensions, displayDimensions, selectedMotivation, existingAnnotations]);\n\n // Helper to get FragmentSelector from annotation target\n const getFragmentSelector = (target: Annotation['target']) => {\n const selector = getTargetSelector(target);\n if (!selector) return null;\n const selectors = Array.isArray(selector) ? selector : [selector];\n\n const found = selectors.find(s => s.type === 'FragmentSelector');\n if (!found || found.type !== 'FragmentSelector') return null;\n return found as { type: 'FragmentSelector'; value: string; conformsTo?: string };\n };\n\n // Filter annotations for current page\n const pageAnnotations = existingAnnotations.filter(ann => {\n const fragmentSel = getFragmentSelector(ann.target);\n if (!fragmentSel) return false;\n const page = getPageFromFragment(fragmentSel.value);\n return page === pageNumber;\n });\n\n // Hover handlers with currentHover guard and dwell delay\n const { handleMouseEnter, handleMouseLeave } = useMemo(\n () => createHoverHandlers((annotationId) => eventBus?.get('beckon:hover').next({ annotationId }), hoverDelayMs),\n [eventBus, hoverDelayMs]\n );\n\n // Calculate motivation color\n const { stroke, fill } = getMotivationColor(selectedMotivation ?? null);\n\n if (error) {\n return <div className=\"semiont-pdf-annotation-canvas__error\">{error}</div>;\n }\n\n return (\n <div className=\"semiont-pdf-annotation-canvas\">\n {isLoading && <div className=\"semiont-pdf-annotation-canvas__loading\">Loading PDF...</div>}\n\n <div\n ref={containerRef}\n className=\"semiont-pdf-annotation-canvas__container\"\n style={{ display: isLoading ? 'none' : undefined }}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={() => {\n if (isDrawing) {\n setIsDrawing(false);\n setSelection(null);\n }\n }}\n data-drawing-mode={drawingMode || 'none'}\n >\n {/* PDF page rendered as image */}\n {pageImageUrl && (\n <img\n ref={imageRef}\n src={pageImageUrl}\n alt={`PDF page ${pageNumber}`}\n className=\"semiont-pdf-annotation-canvas__image\"\n draggable={false}\n style={{ pointerEvents: 'none' }}\n onLoad={() => {\n // Use double RAF to ensure layout is complete even in onLoad\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (imageRef.current) {\n setDisplayDimensions({\n width: imageRef.current.clientWidth,\n height: imageRef.current.clientHeight\n });\n }\n });\n });\n }}\n />\n )}\n\n {/* SVG overlay for annotations */}\n {displayDimensions && pageDimensions && (\n <div className=\"semiont-pdf-annotation-canvas__overlay-container\">\n <div className=\"semiont-pdf-annotation-canvas__overlay\">\n <svg\n className=\"semiont-pdf-annotation-canvas__svg\"\n width={displayDimensions.width}\n height={displayDimensions.height}\n >\n {/* Render existing annotations for this page */}\n {pageAnnotations.map(ann => {\n const fragmentSel = getFragmentSelector(ann.target);\n if (!fragmentSel) return null;\n\n const pdfCoord = parseFragmentSelector(fragmentSel.value);\n if (!pdfCoord) return null;\n\n const rect = pdfToCanvasCoordinates(pdfCoord, pageDimensions.height, 1.0);\n\n // Scale to display coordinates\n const scaleX = displayDimensions.width / pageDimensions.width;\n const scaleY = displayDimensions.height / pageDimensions.height;\n\n const isHovered = ann.id === hoveredAnnotationId;\n const isSelected = ann.id === selectedAnnotationId;\n\n // Get color for this annotation's motivation (not the selected motivation)\n const annMotivation = ann.motivation as SelectionMotivation | null;\n const { stroke: annStroke, fill: annFill } = getMotivationColor(annMotivation);\n\n return (\n <rect\n key={ann.id}\n x={rect.x * scaleX}\n y={rect.y * scaleY}\n width={rect.width * scaleX}\n height={rect.height * scaleY}\n stroke={annStroke}\n strokeWidth={isSelected ? 4 : isHovered ? 3 : 2}\n fill={annFill}\n style={{\n pointerEvents: 'auto',\n cursor: 'pointer',\n opacity: isSelected ? 1 : isHovered ? 0.9 : 0.7\n }}\n onClick={() => eventBus?.get('browse:click').next({ annotationId: ann.id, motivation: ann.motivation })}\n onMouseEnter={() => handleMouseEnter(ann.id)}\n onMouseLeave={handleMouseLeave}\n />\n );\n })}\n\n {/* Render current selection while drawing or awaiting save */}\n {selection && (() => {\n const rectX = Math.min(selection.startX, selection.endX);\n const rectY = Math.min(selection.startY, selection.endY);\n const rectWidth = Math.abs(selection.endX - selection.startX);\n const rectHeight = Math.abs(selection.endY - selection.startY);\n\n // PDF only supports rectangle shapes (FragmentSelector with viewrect)\n // Circle/polygon are disabled in the UI for PDF media types\n return (\n <rect\n x={rectX}\n y={rectY}\n width={rectWidth}\n height={rectHeight}\n stroke={stroke}\n strokeWidth={2}\n strokeDasharray=\"5,5\"\n fill={fill}\n pointerEvents=\"none\"\n />\n );\n })()}\n </svg>\n </div>\n </div>\n )}\n </div>\n\n {/* Page navigation controls */}\n {numPages > 0 && (\n <div className=\"semiont-pdf-annotation-canvas__controls\">\n <button\n disabled={pageNumber <= 1}\n onClick={() => setPageNumber(pageNumber - 1)}\n className=\"semiont-pdf-annotation-canvas__button\"\n >\n Previous\n </button>\n <span className=\"semiont-pdf-annotation-canvas__page-info\">\n Page {pageNumber} of {numPages}\n </span>\n <button\n disabled={pageNumber >= numPages}\n onClick={() => setPageNumber(pageNumber + 1)}\n className=\"semiont-pdf-annotation-canvas__button\"\n >\n Next\n </button>\n </div>\n )}\n </div>\n );\n}\n","/**\n * PDF Coordinate Utilities\n *\n * Handles coordinate transformations between:\n * - Canvas space (pixels, top-left origin, Y increases downward)\n * - PDF space (points, bottom-left origin, Y increases upward)\n *\n * Based on RFC 3778 PDF Fragment Identifiers:\n * https://tools.ietf.org/html/rfc3778\n */\n\nexport interface Rectangle {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface PdfCoordinate {\n page: number;\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface CanvasRectangle {\n startX: number;\n startY: number;\n endX: number;\n endY: number;\n}\n\n/**\n * Convert canvas coordinates to PDF coordinates\n *\n * Canvas: Origin at top-left, Y increases downward\n * PDF: Origin at bottom-left, Y increases upward\n *\n * @param canvasRect - Rectangle in canvas pixel coordinates\n * @param page - PDF page number (1-indexed)\n * @param pageWidth - PDF page width in points\n * @param pageHeight - PDF page height in points\n * @param scale - Current canvas scale factor\n */\nexport function canvasToPdfCoordinates(\n canvasRect: CanvasRectangle,\n page: number,\n _pageWidth: number,\n pageHeight: number,\n scale: number = 1\n): PdfCoordinate {\n // Normalize rectangle (handle drag in any direction)\n const x1 = Math.min(canvasRect.startX, canvasRect.endX);\n const y1 = Math.min(canvasRect.startY, canvasRect.endY);\n const x2 = Math.max(canvasRect.startX, canvasRect.endX);\n const y2 = Math.max(canvasRect.startY, canvasRect.endY);\n\n // Convert from canvas pixels to PDF points\n const pdfX = x1 / scale;\n const pdfWidth = (x2 - x1) / scale;\n\n // Flip Y coordinate (canvas top-left to PDF bottom-left)\n const pdfY = pageHeight - (y2 / scale);\n const pdfHeight = (y2 - y1) / scale;\n\n return {\n page,\n x: Math.round(pdfX),\n y: Math.round(pdfY),\n width: Math.round(pdfWidth),\n height: Math.round(pdfHeight)\n };\n}\n\n/**\n * Convert PDF coordinates to canvas coordinates\n *\n * @param pdfCoord - Coordinates in PDF space\n * @param pageHeight - PDF page height in points\n * @param scale - Current canvas scale factor\n */\nexport function pdfToCanvasCoordinates(\n pdfCoord: PdfCoordinate,\n pageHeight: number,\n scale: number = 1\n): Rectangle {\n // Convert from PDF points to canvas pixels\n const canvasX = pdfCoord.x * scale;\n const canvasWidth = pdfCoord.width * scale;\n\n // Flip Y coordinate (PDF bottom-left to canvas top-left)\n const canvasY = (pageHeight - pdfCoord.y - pdfCoord.height) * scale;\n const canvasHeight = pdfCoord.height * scale;\n\n return {\n x: canvasX,\n y: canvasY,\n width: canvasWidth,\n height: canvasHeight\n };\n}\n\n/**\n * Generate RFC 3778 FragmentSelector value\n *\n * Format: page=N&viewrect=left,top,width,height\n * All coordinates in PDF points\n */\nexport function createFragmentSelector(coord: PdfCoordinate): string {\n return `page=${coord.page}&viewrect=${coord.x},${coord.y},${coord.width},${coord.height}`;\n}\n\n/**\n * Parse RFC 3778 FragmentSelector value\n *\n * @param fragment - Fragment string like \"page=5&viewrect=100,200,300,400\"\n * @returns Parsed PDF coordinates or null if invalid\n */\nexport function parseFragmentSelector(fragment: string): PdfCoordinate | null {\n try {\n // Parse page number\n const pageMatch = fragment.match(/page=(\\d+)/);\n if (!pageMatch) return null;\n const page = parseInt(pageMatch[1], 10);\n\n // Parse viewrect coordinates\n const viewrectMatch = fragment.match(/viewrect=([\\d.]+),([\\d.]+),([\\d.]+),([\\d.]+)/);\n if (!viewrectMatch) return null;\n\n return {\n page,\n x: parseFloat(viewrectMatch[1]),\n y: parseFloat(viewrectMatch[2]),\n width: parseFloat(viewrectMatch[3]),\n height: parseFloat(viewrectMatch[4])\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Extract page number from FragmentSelector\n */\nexport function getPageFromFragment(fragment: string): number | null {\n const match = fragment.match(/page=(\\d+)/);\n return match ? parseInt(match[1], 10) : null;\n}\n","/**\n * Browser PDF.js utilities\n *\n * Uses native browser PDF.js when available, falls back to CDN.\n * Zero npm dependencies - no webpack bundling issues.\n */\n\n// Type definitions for PDF.js API\nexport interface PDFDocumentProxy {\n numPages: number;\n getPage(pageNumber: number): Promise<PDFPageProxy>;\n}\n\nexport interface PDFPageProxy {\n getViewport(params: { scale: number; rotation?: number }): PDFViewport;\n render(params: PDFRenderParams): PDFRenderTask;\n getTextContent(): Promise<TextContent>;\n}\n\nexport interface PDFViewport {\n width: number;\n height: number;\n scale: number;\n rotation: number;\n}\n\nexport interface PDFRenderParams {\n canvasContext: CanvasRenderingContext2D;\n viewport: PDFViewport;\n}\n\nexport interface PDFRenderTask {\n promise: Promise<void>;\n cancel(): void;\n}\n\nexport interface PDFLib {\n getDocument(params: { data: ArrayBuffer } | { url: string }): PDFLoadingTask;\n GlobalWorkerOptions: {\n workerSrc: string;\n };\n version: string;\n}\n\nexport interface PDFLoadingTask {\n promise: Promise<PDFDocumentProxy>;\n destroy(): void;\n}\n\n/**\n * Text content types (for Phase 2)\n */\nexport interface TextItem {\n str: string;\n dir: string;\n transform: number[]; // [scaleX, skewX, skewY, scaleY, x, y]\n width: number;\n height: number;\n fontName: string;\n hasEOL: boolean;\n}\n\nexport interface TextContent {\n items: TextItem[];\n styles: Record<string, any>;\n}\n\n/**\n * Ensure PDF.js is available, loading from local public folder if needed\n */\nexport async function ensurePdfJs(): Promise<PDFLib> {\n // Check if already available (browser native or already loaded)\n if (typeof window !== 'undefined' && (window as any).pdfjsLib) {\n return (window as any).pdfjsLib as PDFLib;\n }\n\n // Load from local public folder (staged during build)\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = '/pdfjs/pdf.min.mjs';\n script.type = 'module';\n\n script.onload = () => {\n const pdfjsLib = (window as any).pdfjsLib as PDFLib;\n\n if (!pdfjsLib) {\n reject(new Error('PDF.js loaded but pdfjsLib not available'));\n return;\n }\n\n // Configure worker (also served from local public folder)\n pdfjsLib.GlobalWorkerOptions.workerSrc = '/pdfjs/pdf.worker.min.mjs';\n\n resolve(pdfjsLib);\n };\n\n script.onerror = () => {\n reject(new Error('Failed to load PDF.js from /pdfjs/pdf.min.mjs'));\n };\n\n document.head.appendChild(script);\n });\n}\n\n/**\n * Load PDF document from URL or ArrayBuffer\n *\n * When given a URL string, fetches the PDF as ArrayBuffer with credentials\n * to ensure authentication cookies are included in the request.\n */\nexport async function loadPdfDocument(\n source: string | ArrayBuffer\n): Promise<PDFDocumentProxy> {\n const pdfjsLib = await ensurePdfJs();\n\n if (typeof source === 'string') {\n // Fetch as ArrayBuffer first to include authentication cookies\n const response = await fetch(source, {\n credentials: 'include',\n headers: {\n 'Accept': 'application/pdf',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch PDF: ${response.status} ${response.statusText}`);\n }\n\n const arrayBuffer = await response.arrayBuffer();\n const loadingTask = pdfjsLib.getDocument({ data: arrayBuffer });\n return loadingTask.promise;\n } else {\n const loadingTask = pdfjsLib.getDocument({ data: source });\n return loadingTask.promise;\n }\n}\n\n/**\n * Render PDF page to canvas and return as data URL\n */\nexport async function renderPdfPageToDataUrl(\n page: PDFPageProxy,\n scale = 1.0\n): Promise<{ dataUrl: string; width: number; height: number }> {\n const viewport = page.getViewport({ scale });\n\n // Create canvas\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) {\n throw new Error('Failed to get 2D context');\n }\n\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n\n // Render PDF page to canvas\n const renderTask = page.render({\n canvasContext: context,\n viewport: viewport\n });\n\n await renderTask.promise;\n\n // Convert to data URL\n return {\n dataUrl: canvas.toDataURL('image/png'),\n width: viewport.width,\n height: viewport.height\n };\n}\n\n/**\n * Render PDF page with text content extraction (Phase 2)\n *\n * This function extracts text in parallel with rendering for future\n * text layer support. Currently the text content is available but not used.\n */\nexport async function renderPdfPageWithText(\n page: PDFPageProxy,\n scale = 1.0\n): Promise<{\n dataUrl: string;\n width: number;\n height: number;\n textContent: TextContent;\n}> {\n const viewport = page.getViewport({ scale });\n\n // Create canvas for rendering\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) {\n throw new Error('Failed to get 2D context');\n }\n\n canvas.width = viewport.width;\n canvas.height = viewport.height;\n\n // Render PDF page to canvas\n const renderTask = page.render({\n canvasContext: context,\n viewport: viewport\n });\n\n // Extract text content in parallel (for future text layer support)\n const [, textContent] = await Promise.all([\n renderTask.promise,\n page.getTextContent()\n ]);\n\n // Convert to data URL\n return {\n dataUrl: canvas.toDataURL('image/png'),\n width: viewport.width,\n height: viewport.height,\n textContent\n };\n}\n"],"mappings":"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","names":["error","pdfCoord","scaleX","scaleY"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../translations/ar.json"],"sourcesContent":["{\n \"Toolbar\": {\n \"annotations\": \"التعليقات التوضيحية\",\n \"history\": \"السجل\",\n \"resourceInfo\": \"معلومات المورد\",\n \"collaboration\": \"التعاون\",\n \"userAccount\": \"حساب المستخدم\",\n \"settings\": \"الإعدادات\"\n },\n \"ResourceInfoPanel\": {\n \"title\": \"معلومات المورد\",\n \"locale\": \"اللغة المحلية\",\n \"notSpecified\": \"غير محدد\",\n \"entityTypeTags\": \"علامات نوع الكيان\",\n \"representation\": \"التمثيل\",\n \"mediaType\": \"نوع الوسائط\",\n \"byteSize\": \"الحجم\",\n \"clone\": \"استنساخ\",\n \"cloneDescription\": \"إنشاء رابط استنساخ قابل للمشاركة لهذا المورد\",\n \"archive\": \"أرشفة\",\n \"archiveDescription\": \"نقل هذا المورد إلى حالة الأرشيف\",\n \"unarchive\": \"إلغاء الأرشفة\",\n \"unarchiveDescription\": \"استعادة هذا المورد إلى الحالة النشطة\",\n \"provenance\": \"المصدر والسلسلة\",\n \"createdAt\": \"تاريخ الإنشاء\",\n \"modifiedAt\": \"تاريخ التعديل\",\n \"creationMethod\": \"طريقة الإنشاء\",\n \"attributedTo\": \"منسوب إلى\",\n \"derivedFrom\": \"مشتق من\",\n \"generatedBy\": \"أُنشئ بواسطة\"\n },\n \"CollaborationPanel\": {\n \"title\": \"التعاون\",\n \"connectionStatus\": \"حالة الاتصال\",\n \"live\": \"مباشر\",\n \"disconnected\": \"غير متصل\",\n \"events\": \"{{count}} أحداث\",\n \"lastSync\": \"آخر مزامنة:\",\n \"noActivity\": \"لا يوجد نشاط بعد\",\n \"justNow\": \"الآن\",\n \"secondsAgo\": \"منذ {{count}} ثوانٍ\",\n \"minuteAgo\": \"منذ دقيقة واحدة\",\n \"minutesAgo\": \"منذ {{count}} دقائق\",\n \"hourAgo\": \"منذ ساعة واحدة\",\n \"hoursAgo\": \"منذ {{count}} ساعات\",\n \"realtimeActive\": \"التحديثات في الوقت الفعلي نشطة\",\n \"reconnecting\": \"جارٍ إعادة الاتصال بالخادم...\",\n \"sharing\": \"المشاركة\",\n \"collaborationComingSoon\": \"ميزات التعاون قادمة قريبًا\"\n },\n \"AnnotationHistory\": {\n \"history\": \"السجل\",\n \"loading\": \"جارٍ التحميل...\",\n \"user\": \"المستخدم\",\n \"method\": \"الطريقة\",\n \"viewOriginal\": \"عرض الأصل\",\n \"viewAnnotation\": \"عرض التعليق التوضيحي: {{content}}\",\n \"resourceCreated\": \"تم إنشاء المورد\",\n \"resourceCloned\": \"تم الاستنساخ\",\n \"resourceArchived\": \"تمت الأرشفة\",\n \"resourceUnarchived\": \"تم إلغاء الأرشفة\",\n \"highlightAdded\": \"تمت إضافة تمييز\",\n \"highlightRemoved\": \"تمت إزالة التمييز\",\n \"referenceCreated\": \"تم إنشاء مرجع\",\n \"referenceResolved\": \"تم حل المرجع\",\n \"referenceDeleted\": \"تم حذف المرجع\",\n \"entitytagAdded\": \"تمت إضافة علامة\",\n \"entitytagRemoved\": \"تمت إزالة العلامة\",\n \"assessmentAdded\": \"تمت إضافة تقييم\",\n \"assessmentRemoved\": \"تمت إزالة التقييم\",\n \"annotationAdded\": \"تمت إضافة تعليق توضيحي\",\n \"annotationRemoved\": \"تمت إزالة التعليق التوضيحي\",\n \"annotationBodyUpdated\": \"تم تحديث التعليق التوضيحي\",\n \"jobEvent\": \"حدث مهمة\",\n \"justNow\": \"الآن\",\n \"minutesAgo\": \"منذ {{count}}د\",\n \"hoursAgo\": \"منذ {{count}}س\",\n \"daysAgo\": \"منذ {{count}}ي\"\n },\n \"CommentsPanel\": {\n \"title\": \"التعليقات\",\n \"noComments\": \"لا توجد تعليقات بعد. حدد نصًا وانقر على تعليق لإضافة واحد.\",\n \"commentPlaceholder\": \"اكتب تعليقك هنا...\",\n \"save\": \"حفظ\",\n \"cancel\": \"إلغاء\",\n \"edit\": \"تعديل\",\n \"annotateComments\": \"توضيح التعليقات\",\n \"instructions\": \"التعليمات\",\n \"optional\": \"(اختياري)\",\n \"instructionsPlaceholder\": \"مثال: التركيز على المصطلحات التقنية...\",\n \"annotate\": \"توضيح\",\n \"annotating\": \"جارٍ التوضيح...\",\n \"toneLabel\": \"النبرة\",\n \"toneOptional\": \"(اختياري)\",\n \"toneScholarly\": \"أكاديمي\",\n \"toneExplanatory\": \"توضيحي\",\n \"toneConversational\": \"حواري\",\n \"toneTechnical\": \"تقني\",\n \"densityLabel\": \"الكثافة\",\n \"densitySparse\": \"متفرق\",\n \"densityDense\": \"كثيف\",\n \"fragmentSelected\": \"تم تحديد جزء\",\n \"imageRegionSelected\": \"تم تحديد منطقة من الصورة\",\n \"closeProgress\": \"إغلاق\"\n },\n \"HighlightPanel\": {\n \"title\": \"التمييزات\",\n \"noHighlights\": \"لا توجد تمييزات بعد. استخدم التوضيح بالذكاء الاصطناعي للعثور على الفقرات المهمة.\",\n \"annotateHighlights\": \"توضيح التمييزات\",\n \"instructions\": \"التعليمات\",\n \"optional\": \"(اختياري)\",\n \"instructionsPlaceholder\": \"مثال: التركيز على المفاهيم التقنية الرئيسية...\",\n \"annotate\": \"توضيح\",\n \"annotating\": \"جارٍ التوضيح...\",\n \"cancel\": \"إلغاء\",\n \"densityLabel\": \"الكثافة\",\n \"densitySparse\": \"متفرق\",\n \"densityDense\": \"كثيف\",\n \"closeProgress\": \"إغلاق\"\n },\n \"AssessmentPanel\": {\n \"title\": \"التقييمات\",\n \"noAssessments\": \"لا توجد تقييمات بعد. استخدم التوضيح بالذكاء الاصطناعي لتقييم الفقرات.\",\n \"assessmentPlaceholder\": \"اكتب تقييمك هنا...\",\n \"save\": \"حفظ\",\n \"cancel\": \"إلغاء\",\n \"annotateAssessments\": \"توضيح التقييمات\",\n \"instructions\": \"التعليمات\",\n \"optional\": \"(اختياري)\",\n \"instructionsPlaceholder\": \"مثال: تقييم الادعاءات من حيث الدقة والأدلة...\",\n \"annotate\": \"توضيح\",\n \"annotating\": \"جارٍ التوضيح...\",\n \"toneLabel\": \"النبرة\",\n \"toneOptional\": \"(اختياري)\",\n \"toneAnalytical\": \"تحليلي\",\n \"toneCritical\": \"نقدي\",\n \"toneBalanced\": \"متوازن\",\n \"toneConstructive\": \"بنّاء\",\n \"densityLabel\": \"الكثافة\",\n \"densitySparse\": \"متفرق\",\n \"densityDense\": \"كثيف\",\n \"fragmentSelected\": \"تم تحديد جزء\",\n \"imageRegionSelected\": \"تم تحديد منطقة من الصورة\",\n \"closeProgress\": \"إغلاق\"\n },\n \"TaggingPanel\": {\n \"title\": \"العلامات\",\n \"noTags\": \"لا توجد علامات بعد. استخدم التوضيح بالذكاء الاصطناعي لتحديد الأدوار الهيكلية.\",\n \"annotateTags\": \"توضيح العلامات\",\n \"selectSchema\": \"اختيار الإطار\",\n \"schemaLegal\": \"التحليل القانوني (IRAC)\",\n \"schemaScientific\": \"الورقة العلمية (IMRAD)\",\n \"schemaArgument\": \"بنية الحجة (Toulmin)\",\n \"selectCategories\": \"اختيار الفئات\",\n \"categoryIssue\": \"القضية\",\n \"categoryRule\": \"القاعدة\",\n \"categoryApplication\": \"التطبيق\",\n \"categoryConclusion\": \"الخاتمة\",\n \"categoryIntroduction\": \"المقدمة\",\n \"categoryMethods\": \"المناهج\",\n \"categoryResults\": \"النتائج\",\n \"categoryDiscussion\": \"المناقشة\",\n \"categoryClaim\": \"الادعاء\",\n \"categoryEvidence\": \"الدليل\",\n \"categoryWarrant\": \"المبرر\",\n \"categoryCounterargument\": \"الحجة المضادة\",\n \"categoryRebuttal\": \"الدحض\",\n \"annotate\": \"توضيح\",\n \"annotating\": \"جارٍ التوضيح...\",\n \"cancel\": \"إلغاء\",\n \"selectAll\": \"تحديد الكل\",\n \"deselectAll\": \"إلغاء تحديد الكل\",\n \"categoriesSelected\": \"{count, plural, =0 {لم يتم تحديد فئات} =1 {فئة واحدة محددة} other {# فئات محددة}}\",\n \"createTagForSelection\": \"إنشاء علامة للتحديد\",\n \"selectCategory\": \"اختيار الفئة\",\n \"chooseCategory\": \"اختر فئة...\",\n \"fragmentSelected\": \"تم تحديد جزء\",\n \"imageRegionSelected\": \"تم تحديد منطقة من الصورة\"\n },\n \"UnifiedAnnotationsPanel\": {\n \"title\": \"التعليقات التوضيحية\",\n \"statistics\": \"الإحصائيات\",\n \"highlight\": \"التمييزات\",\n \"reference\": \"المراجع\",\n \"assessment\": \"التقييمات\",\n \"comment\": \"التعليقات\",\n \"tag\": \"العلامات\"\n },\n \"StatisticsPanel\": {\n \"title\": \"الإحصائيات\",\n \"highlights\": \"التمييزات\",\n \"comments\": \"التعليقات\",\n \"assessments\": \"التقييمات\",\n \"tags\": \"العلامات\",\n \"references\": \"المراجع\",\n \"stub\": \"مبدئي\",\n \"resolved\": \"محلول\",\n \"entityTypes\": \"أنواع الكيانات\"\n },\n \"ReferencesPanel\": {\n \"title\": \"المراجع\",\n \"noReferences\": \"لا توجد مراجع بعد. حدد نصًا لإنشاء مراجع لموارد أخرى.\",\n \"outgoingReferences\": \"المراجع الصادرة\",\n \"incomingReferences\": \"المراجع الواردة\",\n \"noIncomingReferences\": \"لا توجد مراجع واردة\",\n \"stub\": \"مرجع مبدئي (غير مربوط)\",\n \"resolved\": \"مرجع محلول (مربوط)\",\n \"open\": \"فتح\",\n \"unlink\": \"إلغاء الربط\",\n \"resolve\": \"حل المرجع\",\n \"cancel\": \"إلغاء\",\n \"createReference\": \"إنشاء مرجع\",\n \"entityTypesOptional\": \"أنواع الكيانات (اختياري)\",\n \"fragmentSelected\": \"تم تحديد جزء\",\n \"imageRegionSelected\": \"تم تحديد منطقة من الصورة\",\n \"annotateReferences\": \"توضيح المراجع\",\n \"selectEntityTypes\": \"أنواع الكيانات:\",\n \"select\": \"تحديد\",\n \"deselect\": \"إلغاء التحديد\",\n \"noEntityTypes\": \"لا توجد أنواع كيانات متاحة\",\n \"typesSelected\": \"{count, plural, =1 {نوع واحد محدد} other {# أنواع محددة}}\",\n \"annotate\": \"توضيح\",\n \"annotating\": \"جارٍ التوضيح...\",\n \"includeDescriptiveReferences\": \"تضمين المراجع الوصفية\",\n \"descriptiveReferencesTooltip\": \"البحث أيضًا عن عبارات مثل 'الرئيس التنفيذي'، 'عملاق التكنولوجيا'، 'الفيزيائي' (بالإضافة إلى الأسماء)\",\n \"annotationProgressTitle\": \"توضيح مراجع الكيانات\",\n \"cancelAnnotation\": \"إلغاء التوضيح\",\n \"found\": \"تم العثور على {{count}}\",\n \"complete\": \"اكتمل التوضيح!\",\n \"failed\": \"فشل التوضيح\",\n \"current\": \"الحالي: {{entityType}}\",\n \"closeProgress\": \"إغلاق\",\n \"loading\": \"جارٍ التحميل...\",\n \"loadingEllipsis\": \"جارٍ التحميل...\",\n \"untitledResource\": \"مورد بدون عنوان\",\n \"noText\": \"لا يوجد نص\"\n },\n \"KeyboardShortcuts\": {\n \"title\": \"اختصارات لوحة المفاتيح\",\n \"closeDialog\": \"إغلاق مربع الحوار\",\n \"or\": \"أو\",\n \"navigationTitle\": \"التنقل\",\n \"navOpenSearch\": \"فتح البحث الشامل\",\n \"navOpenSearchAlt\": \"فتح البحث الشامل (بديل)\",\n \"navCreateResource\": \"إنشاء مورد جديد\",\n \"navCloseOverlays\": \"إغلاق جميع الطبقات العلوية (ضغط مزدوج)\",\n \"navShowHelp\": \"عرض مساعدة اختصارات لوحة المفاتيح\",\n \"sidebarTitle\": \"الشريط الجانبي للمعرفة\",\n \"sidebarCollapse\": \"طي الشريط الجانبي\",\n \"sidebarExpand\": \"توسيع الشريط الجانبي\",\n \"sidebarPickup\": \"التقاط علامة تبويب المورد (عند التركيز)\",\n \"sidebarMove\": \"نقل علامة تبويب المورد (أثناء السحب)\",\n \"sidebarDrop\": \"إفلات علامة تبويب المورد (أثناء السحب)\",\n \"sidebarCancel\": \"إلغاء عملية السحب\",\n \"annotationsTitle\": \"تعليقات المورد التوضيحية\",\n \"annotHighlight\": \"إنشاء تمييز من التعليق التوضيحي (مباشر)\",\n \"annotReference\": \"فتح نافذة المرجع المنبثقة للتعليق التوضيحي\",\n \"annotDelete\": \"حذف التعليق التوضيحي المركّز عليه\",\n \"annotNavigate\": \"التنقل عبر التعليقات التوضيحية\",\n \"annotNavigateBack\": \"التنقل عبر التعليقات التوضيحية للخلف\",\n \"listsTitle\": \"القوائم والشبكات\",\n \"listsFilterNav\": \"التنقل بين مرشحات أنواع الكيانات\",\n \"listsGridNav\": \"التنقل في شبكة الموارد\",\n \"listsJumpFirst\": \"الانتقال إلى العنصر الأول\",\n \"listsJumpLast\": \"الانتقال إلى العنصر الأخير\",\n \"searchModalTitle\": \"في نافذة البحث\",\n \"searchNav\": \"التنقل في نتائج البحث\",\n \"searchSelect\": \"اختيار النتيجة\",\n \"searchClose\": \"إغلاق البحث\",\n \"modalTitle\": \"عناصر التحكم في النوافذ المنبثقة\",\n \"modalClose\": \"إغلاق النافذة المنبثقة النشطة\",\n \"modalNavForward\": \"التنقل للأمام عبر الأزرار\",\n \"modalNavBackward\": \"التنقل للخلف عبر الأزرار\",\n \"modalActivate\": \"تفعيل الزر المركّز عليه\",\n \"accessibilityTitle\": \"إمكانية الوصول\",\n \"a11ySkipLinks\": \"الانتقال إلى روابط التخطي (عند بداية الصفحة)\",\n \"a11yFollowLink\": \"اتباع رابط التخطي\",\n \"macNote\": \"استخدام اختصارات لوحة مفاتيح Mac. ⌘ هو مفتاح Command.\",\n \"windowsNote\": \"استخدام اختصارات لوحة مفاتيح Windows/Linux. Ctrl هو مفتاح التحكم.\",\n \"footerHint\": \"اضغط {{key}} في أي وقت لعرض هذه المساعدة\",\n \"close\": \"إغلاق\"\n },\n \"AnnotateToolbar\": {\n \"modeGroup\": \"الوضع\",\n \"browse\": \"تصفح\",\n \"annotate\": \"توضيح\",\n \"selectionGroup\": \"الدافع\",\n \"clickGroup\": \"النقر\",\n \"shapeGroup\": \"الشكل\",\n \"none\": \"لا شيء\",\n \"linking\": \"مرجع\",\n \"highlighting\": \"تمييز\",\n \"assessing\": \"تقييم\",\n \"commenting\": \"تعليق\",\n \"tagging\": \"علامة\",\n \"detail\": \"تفصيل\",\n \"follow\": \"متابعة\",\n \"deleting\": \"حذف\",\n \"jsonld\": \"JSON-LD\",\n \"rectangle\": \"مستطيل\",\n \"circle\": \"دائرة\",\n \"polygon\": \"مضلع\"\n },\n \"CollapsibleResourceNavigation\": {\n \"title\": \"التنقل\",\n \"collapseSidebar\": \"طي الشريط الجانبي\",\n \"expandSidebar\": \"توسيع الشريط الجانبي\",\n \"dragToReorder\": \"اسحب لإعادة الترتيب\",\n \"dragToReorderDoc\": \"اسحب لإعادة ترتيب {{name}}\",\n \"closeResource\": \"إغلاق المورد\",\n \"dragInstructions\": \"لإعادة ترتيب الموارد: استخدم Tab للانتقال إلى مورد. اضغط Alt+سهم لأعلى للتحريك لأعلى أو Alt+سهم لأسفل للتحريك لأسفل. للسحب والإفلات: اضغط على شريط المسافة لالتقاط العنصر. استخدم مفاتيح الأسهم لتحريكه. اضغط على شريط المسافة مرة أخرى للإفلات.\"\n },\n \"ResourceViewer\": {\n \"deleteConfirmationTitle\": \"حذف التعليق التوضيحي\",\n \"deleteConfirmationMessage\": \"هل أنت متأكد أنك تريد حذف هذا التعليق التوضيحي؟ لا يمكن التراجع عن هذا الإجراء.\",\n \"deleteConfirmationCancel\": \"إلغاء\",\n \"deleteConfirmationDelete\": \"حذف\"\n },\n \"Settings\": {\n \"title\": \"الإعدادات\",\n \"lineNumbers\": \"أرقام الأسطر\",\n \"lineNumbersVisible\": \"مرئية\",\n \"lineNumbersHidden\": \"مخفية\",\n \"theme\": \"السمة\",\n \"themeLight\": \"فاتح\",\n \"themeDark\": \"داكن\",\n \"themeSystem\": \"النظام\",\n \"themeSystemActive\": \"النظام ({{mode}})\",\n \"themeModeActive\": \"استخدام وضع {{mode}}\",\n \"language\": \"اللغة\",\n \"languageHint\": \"تغيير اللغة في شريط التنقل الرئيسي\",\n \"languageChanging\": \"جارٍ تغيير اللغة...\",\n \"hoverDelay\": \"تأخير التمرير\",\n \"hoverDelayFast\": \"سريع\",\n \"hoverDelaySlow\": \"بطيء\",\n \"hoverDelayDescription\": \"تأخير {{delay}} ميلي ثانية قبل ظهور تأثيرات التمرير\"\n },\n \"AnnotateView\": {},\n \"ReferenceWizard\": {\n \"gatherTitle\": \"السياق المُجمَّع\",\n \"configureGenerationTitle\": \"تكوين التوليد\",\n \"configureSearchTitle\": \"إعدادات البحث\",\n \"searchResultsTitle\": \"نتائج البحث\",\n \"sourceContextLabel\": \"سياق التعليق التوضيحي في المورد\",\n \"connectionsLabel\": \"التعليقات التوضيحية للأقران\",\n \"citedByLabel\": \"المورد مُستشهد به من قِبل\",\n \"userHintLabel\": \"تلميح\",\n \"userHintPlaceholder\": \"صف ما يشير إليه هذا التعليق التوضيحي...\",\n \"loadingContext\": \"جارٍ جمع السياق...\",\n \"failedContext\": \"فشل في جمع السياق\",\n \"cancel\": \"إلغاء\",\n \"generate\": \"توليد\",\n \"compose\": \"تأليف\",\n \"resolutionStrategyLabel\": \"استراتيجية الحل\",\n \"back\": \"رجوع\",\n \"link\": \"رابط\",\n \"score\": \"درجة\",\n \"noResults\": \"لم يتم العثور على نتائج\",\n \"resourceTitle\": \"عنوان المورد\",\n \"resourceTitlePlaceholder\": \"أدخل عنوان المورد...\",\n \"additionalInstructions\": \"تعليمات إضافية\",\n \"additionalInstructionsPlaceholder\": \"أدخل تعليمات إضافية...\",\n \"language\": \"اللغة\",\n \"languageHelp\": \"لغة المحتوى المُولَّد\",\n \"creativity\": \"الإبداع\",\n \"creativityFocused\": \"مركّز\",\n \"creativityCreative\": \"إبداعي\",\n \"maxLength\": \"الحد الأقصى للطول\",\n \"maxLengthHelp\": \"العدد الأقصى من الرموز\",\n \"maxResults\": \"الحد الأقصى للنتائج\",\n \"semanticScoring\": \"التقييم الدلالي\",\n \"semanticScoringHelp\": \"استخدام الذكاء الاصطناعي لتقييم النتائج حسب الصلة الدلالية\",\n \"searching\": \"جاري البحث...\",\n \"search\": \"بحث\"\n }\n}\n"],"mappings":"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","names":[]}