@semiont/react-ui 0.5.25 → 0.5.27

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 (267) hide show
  1. package/README.md +28 -4
  2. package/dist/PdfAnnotationCanvas.client-EVUPTUWZ.js +677 -0
  3. package/dist/PdfAnnotationCanvas.client-EVUPTUWZ.js.map +1 -0
  4. package/dist/PdfAnnotationCanvas.client-TGDPPGXJ.css +185 -0
  5. package/dist/PdfAnnotationCanvas.client-TGDPPGXJ.css.map +1 -0
  6. package/dist/{ar-CULRHLNG.js → ar-OU3DQGC6.js} +65 -7
  7. package/dist/ar-OU3DQGC6.js.map +1 -0
  8. package/dist/{bn-HYR7CEL2.js → bn-PHWCR6AZ.js} +65 -7
  9. package/dist/bn-PHWCR6AZ.js.map +1 -0
  10. package/dist/chunk-5VDTWRXJ.js +287 -0
  11. package/dist/chunk-5VDTWRXJ.js.map +1 -0
  12. package/dist/{chunk-TG2XQEC4.js → chunk-BTUG3VJJ.js} +18 -298
  13. package/dist/chunk-BTUG3VJJ.js.map +1 -0
  14. package/dist/{chunk-NH6L2GIL.js → chunk-PCRRBU7H.js} +65 -7
  15. package/dist/chunk-PCRRBU7H.js.map +1 -0
  16. package/dist/{cs-YBRWY7NH.js → cs-NEXYZ62I.js} +65 -7
  17. package/dist/cs-NEXYZ62I.js.map +1 -0
  18. package/dist/{da-PHDEOBV3.js → da-FAT43YCU.js} +65 -7
  19. package/dist/da-FAT43YCU.js.map +1 -0
  20. package/dist/{de-O4UCCVLJ.js → de-KRQ3WBCU.js} +65 -7
  21. package/dist/de-KRQ3WBCU.js.map +1 -0
  22. package/dist/{el-MVGO6WZV.js → el-Q4IU3EKC.js} +65 -7
  23. package/dist/el-Q4IU3EKC.js.map +1 -0
  24. package/dist/{en-2KQILFKQ.js → en-2KADE7N4.js} +6 -2
  25. package/dist/{es-USSLXQY7.js → es-2IO3R2MK.js} +65 -7
  26. package/dist/es-2IO3R2MK.js.map +1 -0
  27. package/dist/{fa-WMAREFWY.js → fa-Q5GOQFXX.js} +65 -7
  28. package/dist/fa-Q5GOQFXX.js.map +1 -0
  29. package/dist/{fi-B3NBNOTS.js → fi-R6NMRWBE.js} +65 -7
  30. package/dist/fi-R6NMRWBE.js.map +1 -0
  31. package/dist/{fr-TXYK5T5W.js → fr-QY4D5E6J.js} +65 -7
  32. package/dist/fr-QY4D5E6J.js.map +1 -0
  33. package/dist/{he-JCJACW5D.js → he-X6Y77XHY.js} +65 -7
  34. package/dist/he-X6Y77XHY.js.map +1 -0
  35. package/dist/{hi-VOQLZNJU.js → hi-XL7IOEQM.js} +65 -7
  36. package/dist/hi-XL7IOEQM.js.map +1 -0
  37. package/dist/{id-BFN5RZNZ.js → id-QZ4ZZS67.js} +65 -7
  38. package/dist/id-QZ4ZZS67.js.map +1 -0
  39. package/dist/index.css +241 -508
  40. package/dist/index.css.map +1 -1
  41. package/dist/index.d.ts +155 -54
  42. package/dist/index.js +1815 -1642
  43. package/dist/index.js.map +1 -1
  44. package/dist/integrations/css-modules-helper.js +1 -3
  45. package/dist/integrations/css-modules-helper.js.map +1 -1
  46. package/dist/{it-TWWDHKKM.js → it-ME2Q7OB6.js} +65 -7
  47. package/dist/it-ME2Q7OB6.js.map +1 -0
  48. package/dist/{ja-YRQLEBFM.js → ja-HX7QASRI.js} +65 -7
  49. package/dist/ja-HX7QASRI.js.map +1 -0
  50. package/dist/{ko-PG6B3CRB.js → ko-EQO5AHAV.js} +65 -7
  51. package/dist/ko-EQO5AHAV.js.map +1 -0
  52. package/dist/{ms-7EZECVKM.js → ms-UILFSF3I.js} +65 -7
  53. package/dist/ms-UILFSF3I.js.map +1 -0
  54. package/dist/{nl-HP753YAP.js → nl-NNI45PMK.js} +65 -7
  55. package/dist/nl-NNI45PMK.js.map +1 -0
  56. package/dist/{no-JUD5WX3N.js → no-MAL5F6P6.js} +65 -7
  57. package/dist/no-MAL5F6P6.js.map +1 -0
  58. package/dist/{pl-RVUL4CBM.js → pl-4RMY6JAJ.js} +65 -7
  59. package/dist/pl-4RMY6JAJ.js.map +1 -0
  60. package/dist/{pt-RPOVD4QM.js → pt-VQH2X3QQ.js} +65 -7
  61. package/dist/pt-VQH2X3QQ.js.map +1 -0
  62. package/dist/{ro-DMYWQTRD.js → ro-XXCQO2OG.js} +65 -7
  63. package/dist/ro-XXCQO2OG.js.map +1 -0
  64. package/dist/{sv-DMZ4FGXD.js → sv-7Z6EJ6U4.js} +65 -7
  65. package/dist/sv-7Z6EJ6U4.js.map +1 -0
  66. package/dist/test-utils.css +1 -1
  67. package/dist/test-utils.css.map +1 -1
  68. package/dist/test-utils.d.ts +1 -1
  69. package/dist/test-utils.js +5 -3
  70. package/dist/test-utils.js.map +1 -1
  71. package/dist/{th-4HVBJBQ2.js → th-L3DXXYVQ.js} +65 -7
  72. package/dist/th-L3DXXYVQ.js.map +1 -0
  73. package/dist/{tr-6BDPU5ML.js → tr-P3DFVLFJ.js} +65 -7
  74. package/dist/tr-P3DFVLFJ.js.map +1 -0
  75. package/dist/{uk-TBZBT2TL.js → uk-7C5D3PXS.js} +65 -7
  76. package/dist/uk-7C5D3PXS.js.map +1 -0
  77. package/dist/{vi-UMKZKZL3.js → vi-ZLTLEO7P.js} +65 -7
  78. package/dist/vi-ZLTLEO7P.js.map +1 -0
  79. package/dist/{zh-YBJWJJYB.js → zh-5FHVWDIN.js} +65 -7
  80. package/dist/zh-5FHVWDIN.js.map +1 -0
  81. package/package.json +7 -7
  82. package/src/components/AssistProgress.tsx +144 -134
  83. package/src/components/{EntityFoundLog.tsx → ItemFoundLog.tsx} +12 -7
  84. package/src/components/ProtectedErrorBoundary.css +3 -1
  85. package/src/components/StatusDisplay.css +35 -35
  86. package/src/components/Toast.css +3 -1
  87. package/src/components/__tests__/AssistProgress.test.tsx +216 -148
  88. package/src/components/annotation/annotation-entries.css +0 -4
  89. package/src/components/annotation/annotations.css +1 -1
  90. package/src/components/annotation/references.css +0 -4
  91. package/src/components/image-annotation/AnnotationOverlay.tsx +6 -6
  92. package/src/components/image-annotation/SvgDrawingCanvas.tsx +1 -1
  93. package/src/components/image-annotation/__tests__/AnnotationOverlay.click.test.tsx +7 -9
  94. package/src/components/image-annotation/__tests__/SvgDrawingCanvas.click.test.tsx +1 -2
  95. package/src/components/layout/Header.css +0 -4
  96. package/src/components/layout/LeftSidebar.css +0 -4
  97. package/src/components/modals/ConfigureGenerationStep.tsx +109 -48
  98. package/src/components/modals/ConfigureSearchStep.tsx +23 -40
  99. package/src/components/modals/ReferenceWizardModal.tsx +55 -16
  100. package/src/components/modals/ResourceGenerateModal.tsx +24 -8
  101. package/src/components/modals/ResourceSearchModal.tsx +1 -1
  102. package/src/components/modals/SearchModal.css +5 -17
  103. package/src/components/modals/SearchModal.tsx +1 -1
  104. package/src/components/modals/SearchResultsStep.tsx +2 -20
  105. package/src/components/modals/WizardFooter.tsx +63 -0
  106. package/src/components/modals/__tests__/ConfigureGenerationStep.test.tsx +255 -0
  107. package/src/components/modals/__tests__/ConfigureSearchStep.test.tsx +72 -0
  108. package/src/components/modals/__tests__/ReferenceWizardModal.test.tsx +256 -0
  109. package/src/components/modals/__tests__/ResourceGenerateModal.test.tsx +1 -0
  110. package/src/components/modals/__tests__/ResourceSearchModal.test.tsx +6 -2
  111. package/src/components/modals/__tests__/SearchModal.search-wiring.test.tsx +6 -2
  112. package/src/components/modals/__tests__/WizardFooter.test.tsx +235 -0
  113. package/src/components/modals/modals.css +16 -42
  114. package/src/components/navigation/NavigationTabs.css +0 -20
  115. package/src/components/pdf-annotation/PdfAnnotationCanvas.css +162 -6
  116. package/src/components/pdf-annotation/PdfAnnotationCanvas.tsx +623 -232
  117. package/src/components/pdf-annotation/__tests__/PdfAnnotationCanvas.test.tsx +764 -7
  118. package/src/components/pdf-annotation/__tests__/estimate-slot-height.test.ts +53 -0
  119. package/src/components/pdf-annotation/estimate-slot-height.ts +31 -0
  120. package/src/components/resource/AnnotateView.tsx +16 -5
  121. package/src/components/resource/AnnotationHistory.tsx +2 -0
  122. package/src/components/resource/BrowseView.tsx +15 -4
  123. package/src/components/resource/ResourceViewer.tsx +23 -24
  124. package/src/components/resource/__tests__/AnnotateView.focus.test.tsx +50 -0
  125. package/src/components/resource/__tests__/AnnotationHistory.test.tsx +2 -0
  126. package/src/components/resource/__tests__/BrowseView.test.tsx +29 -3
  127. package/src/components/resource/__tests__/ResourceViewer.embeddable.test.tsx +47 -3
  128. package/src/components/resource/__tests__/browse-renderers.dispatch.test.tsx +33 -0
  129. package/src/components/resource/annotate-renderers.tsx +10 -1
  130. package/src/components/resource/browse-renderers.tsx +10 -1
  131. package/src/components/resource/event-formatting.ts +0 -3
  132. package/src/components/resource/panels/AssessmentEntry.tsx +1 -1
  133. package/src/components/resource/panels/AssessmentPanel.css +5 -6
  134. package/src/components/resource/panels/AssistSection.css +68 -271
  135. package/src/components/resource/panels/AssistSection.tsx +4 -4
  136. package/src/components/resource/panels/AssistShell.tsx +12 -4
  137. package/src/components/resource/panels/CollaborationPanel.css +47 -22
  138. package/src/components/resource/panels/CollaborationPanel.tsx +93 -2
  139. package/src/components/resource/panels/CommentEntry.tsx +1 -1
  140. package/src/components/resource/panels/CommentsPanel.css +0 -16
  141. package/src/components/resource/panels/HighlightEntry.tsx +1 -1
  142. package/src/components/resource/panels/HighlightPanel.css +0 -7
  143. package/src/components/resource/panels/JsonLdPanel.css +0 -4
  144. package/src/components/resource/panels/ReferenceEntry.tsx +1 -1
  145. package/src/components/resource/panels/ReferencesPanel.css +0 -12
  146. package/src/components/resource/panels/ReferencesPanel.tsx +12 -20
  147. package/src/components/resource/panels/ResourceInfoPanel.css +0 -32
  148. package/src/components/resource/panels/ResourceInfoPanel.tsx +1 -1
  149. package/src/components/resource/panels/StatisticsPanel.css +0 -20
  150. package/src/components/resource/panels/TagEntry.tsx +1 -1
  151. package/src/components/resource/panels/TaggingPanel.css +0 -4
  152. package/src/components/resource/panels/TaggingPanel.tsx +2 -10
  153. package/src/components/resource/panels/UnifiedAnnotationsPanel.css +0 -4
  154. package/src/components/resource/panels/__tests__/AssessmentEntry.test.tsx +0 -1
  155. package/src/components/resource/panels/__tests__/AssistSection.test.tsx +48 -50
  156. package/src/components/resource/panels/__tests__/AssistShell.test.tsx +11 -6
  157. package/src/components/resource/panels/__tests__/CollaborationPanel.test.tsx +89 -0
  158. package/src/components/resource/panels/__tests__/CommentEntry.test.tsx +1 -2
  159. package/src/components/resource/panels/__tests__/HighlightEntry.test.tsx +0 -1
  160. package/src/components/resource/panels/__tests__/HighlightPanel.annotationProgress.test.tsx +44 -36
  161. package/src/components/resource/panels/__tests__/ReferenceEntry.test.tsx +0 -1
  162. package/src/components/resource/panels/__tests__/ReferencesPanel.headless.test.tsx +1 -1
  163. package/src/components/resource/panels/__tests__/ReferencesPanel.test.tsx +34 -53
  164. package/src/components/resource/panels/__tests__/ResourceInfoPanel.test.tsx +37 -1
  165. package/src/components/resource/panels/__tests__/TagEntry.test.tsx +0 -1
  166. package/src/components/settings/SettingsPanel.css +0 -4
  167. package/src/features/auth/auth.css +9 -33
  168. package/src/features/resource-compose/state/__tests__/compose-page-state-unit.test.ts +25 -1
  169. package/src/features/resource-compose/state/compose-page-state-unit.ts +11 -2
  170. package/src/features/resource-discovery/__tests__/ResourceDiscoveryPage.test.tsx +55 -0
  171. package/src/features/resource-discovery/components/ResourceDiscoveryPage.tsx +29 -0
  172. package/src/features/resource-discovery/state/__tests__/discover-state-unit.test.ts +53 -3
  173. package/src/features/resource-discovery/state/discover-state-unit.ts +29 -8
  174. package/src/features/resource-viewer/__tests__/ResourceViewerPage.test.tsx +26 -0
  175. package/src/features/resource-viewer/components/ResourceViewerPage.tsx +42 -21
  176. package/src/features/resource-viewer/hooks/__tests__/useResourceViewedReport.test.tsx +63 -0
  177. package/src/features/resource-viewer/hooks/useResourceViewedReport.ts +33 -0
  178. package/src/features/resource-viewer/state/__tests__/resource-viewer-page-state-unit.test.ts +2 -2
  179. package/src/features/resource-viewer/state/resource-viewer-page-state-unit.ts +1 -1
  180. package/src/styles/core/buttons.css +3 -1
  181. package/src/styles/core/forms.css +0 -21
  182. package/src/styles/core/indicators.css +0 -4
  183. package/src/styles/core/inputs.css +1 -5
  184. package/src/styles/core/progress.css +2 -34
  185. package/src/styles/core/sliders.css +0 -4
  186. package/src/styles/core/toggles.css +0 -4
  187. package/src/styles/features/compose.css +1 -1
  188. package/src/styles/features/resource-discovery.css +13 -0
  189. package/src/styles/features/resource-viewer.css +1 -21
  190. package/src/styles/features/static-pages.css +11 -11
  191. package/src/styles/motivations/motivation-assessment.css +2 -2
  192. package/src/styles/motivations/motivation-comment.css +2 -2
  193. package/src/styles/motivations/motivation-reference.css +2 -2
  194. package/src/styles/panels/history-panel.css +0 -40
  195. package/src/styles/panels/user-panel.css +0 -3
  196. package/src/styles/patterns/panel-helpers.css +0 -27
  197. package/src/styles/patterns/panel-sections.css +0 -59
  198. package/src/styles/patterns/panels-base.css +4 -36
  199. package/src/styles/utilities/motion.css +15 -15
  200. package/src/styles/variables.css +29 -1
  201. package/translations/ar.json +59 -5
  202. package/translations/bn.json +59 -5
  203. package/translations/cs.json +59 -5
  204. package/translations/da.json +59 -5
  205. package/translations/de.json +59 -5
  206. package/translations/el.json +59 -5
  207. package/translations/en.json +59 -5
  208. package/translations/es.json +59 -5
  209. package/translations/fa.json +59 -5
  210. package/translations/fi.json +59 -5
  211. package/translations/fr.json +59 -5
  212. package/translations/he.json +59 -5
  213. package/translations/hi.json +59 -5
  214. package/translations/id.json +59 -5
  215. package/translations/it.json +59 -5
  216. package/translations/ja.json +59 -5
  217. package/translations/ko.json +59 -5
  218. package/translations/ms.json +59 -5
  219. package/translations/nl.json +59 -5
  220. package/translations/no.json +59 -5
  221. package/translations/pl.json +59 -5
  222. package/translations/pt.json +59 -5
  223. package/translations/ro.json +59 -5
  224. package/translations/sv.json +59 -5
  225. package/translations/th.json +59 -5
  226. package/translations/tr.json +59 -5
  227. package/translations/uk.json +59 -5
  228. package/translations/vi.json +59 -5
  229. package/translations/zh.json +59 -5
  230. package/dist/PdfAnnotationCanvas.client-EHQWF6BR.js +0 -462
  231. package/dist/PdfAnnotationCanvas.client-EHQWF6BR.js.map +0 -1
  232. package/dist/PdfAnnotationCanvas.client-SU5KNT7G.css +0 -98
  233. package/dist/PdfAnnotationCanvas.client-SU5KNT7G.css.map +0 -1
  234. package/dist/ar-CULRHLNG.js.map +0 -1
  235. package/dist/bn-HYR7CEL2.js.map +0 -1
  236. package/dist/chunk-NH6L2GIL.js.map +0 -1
  237. package/dist/chunk-TG2XQEC4.js.map +0 -1
  238. package/dist/chunk-XUDKYAVC.js +0 -21
  239. package/dist/chunk-XUDKYAVC.js.map +0 -1
  240. package/dist/cs-YBRWY7NH.js.map +0 -1
  241. package/dist/da-PHDEOBV3.js.map +0 -1
  242. package/dist/de-O4UCCVLJ.js.map +0 -1
  243. package/dist/el-MVGO6WZV.js.map +0 -1
  244. package/dist/es-USSLXQY7.js.map +0 -1
  245. package/dist/fa-WMAREFWY.js.map +0 -1
  246. package/dist/fi-B3NBNOTS.js.map +0 -1
  247. package/dist/fr-TXYK5T5W.js.map +0 -1
  248. package/dist/he-JCJACW5D.js.map +0 -1
  249. package/dist/hi-VOQLZNJU.js.map +0 -1
  250. package/dist/id-BFN5RZNZ.js.map +0 -1
  251. package/dist/it-TWWDHKKM.js.map +0 -1
  252. package/dist/ja-YRQLEBFM.js.map +0 -1
  253. package/dist/ko-PG6B3CRB.js.map +0 -1
  254. package/dist/ms-7EZECVKM.js.map +0 -1
  255. package/dist/nl-HP753YAP.js.map +0 -1
  256. package/dist/no-JUD5WX3N.js.map +0 -1
  257. package/dist/pl-RVUL4CBM.js.map +0 -1
  258. package/dist/pt-RPOVD4QM.js.map +0 -1
  259. package/dist/ro-DMYWQTRD.js.map +0 -1
  260. package/dist/sv-DMZ4FGXD.js.map +0 -1
  261. package/dist/th-4HVBJBQ2.js.map +0 -1
  262. package/dist/tr-6BDPU5ML.js.map +0 -1
  263. package/dist/uk-TBZBT2TL.js.map +0 -1
  264. package/dist/vi-UMKZKZL3.js.map +0 -1
  265. package/dist/zh-YBJWJJYB.js.map +0 -1
  266. package/src/integrations/tailwind-plugin.cjs +0 -224
  267. /package/dist/{en-2KQILFKQ.js.map → en-2KADE7N4.js.map} +0 -0
@@ -4,8 +4,40 @@ import "./chunk-O23TLLXW.js";
4
4
  // translations/bn.json
5
5
  var AssistProgress = {
6
6
  close: "\u09AC\u09A8\u09CD\u09A7 \u0995\u09B0\u09C1\u09A8",
7
- paramsTitle: "\u0985\u09A8\u09C1\u09B0\u09CB\u09A7\u09C7\u09B0 \u09AA\u09CD\u09AF\u09BE\u09B0\u09BE\u09AE\u09BF\u099F\u09BE\u09B0:",
8
- processing: "\u09AC\u09B0\u09CD\u09A4\u09AE\u09BE\u09A8: {{label}}"
7
+ codeLoading: "\u09B2\u09CB\u09A1 \u09B9\u099A\u09CD\u099B\u09C7\u2026",
8
+ codeAnalyzing: "\u099A\u09BF\u09B9\u09CD\u09A8\u09BF\u09A4 \u0995\u09B0\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026",
9
+ codeAnalyzingTags: "\u099F\u09CD\u09AF\u09BE\u0997 \u099A\u09BF\u09B9\u09CD\u09A8\u09BF\u09A4 \u0995\u09B0\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026",
10
+ codeDetectingEntities: "\u099A\u09BF\u09B9\u09CD\u09A8\u09BF\u09A4 \u0995\u09B0\u09BE \u09B9\u099A\u09CD\u099B\u09C7\u2026",
11
+ codeCreatingAnnotations: "{{count}}\u099F\u09BF \u099F\u09C0\u0995\u09BE \u09A4\u09C8\u09B0\u09BF \u09B9\u099A\u09CD\u099B\u09C7\u2026",
12
+ codeCreatingTagAnnotations: "{{count}}\u099F\u09BF \u099F\u09CD\u09AF\u09BE\u0997 \u09A4\u09C8\u09B0\u09BF \u09B9\u099A\u09CD\u099B\u09C7\u2026",
13
+ codeCompleteCreated: "{{count}}\u099F\u09BF {{kind}} \u09A4\u09C8\u09B0\u09BF \u09B9\u09AF\u09BC\u09C7\u099B\u09C7",
14
+ codeGeneratingResource: "\u09A4\u09C8\u09B0\u09BF \u09B9\u099A\u09CD\u099B\u09C7\u2026",
15
+ codeCreatingResource: "\u09B0\u09BF\u09B8\u09CB\u09B0\u09CD\u09B8 \u09A4\u09C8\u09B0\u09BF \u09B9\u099A\u09CD\u099B\u09C7\u2026",
16
+ kindHighlight: "\u09B9\u09BE\u0987\u09B2\u09BE\u0987\u099F",
17
+ kindComment: "\u09AE\u09A8\u09CD\u09A4\u09AC\u09CD\u09AF",
18
+ kindAssessment: "\u09AE\u09C2\u09B2\u09CD\u09AF\u09BE\u09AF\u09BC\u09A8",
19
+ kindReference: "\u09B0\u09C7\u09AB\u09BE\u09B0\u09C7\u09A8\u09CD\u09B8",
20
+ kindTag: "\u099F\u09CD\u09AF\u09BE\u0997",
21
+ subject: "{{kind}}: {{label}}",
22
+ subjectWithPosition: "{{kind}}: {{label}} ({{total}}\u099F\u09BF\u09B0 {{done}})",
23
+ paramEntityTypes: "\u09B8\u09A4\u09CD\u09A4\u09BE\u09B0 \u09A7\u09B0\u09A8",
24
+ paramInstructions: "\u09A8\u09BF\u09B0\u09CD\u09A6\u09C7\u09B6\u09A8\u09BE",
25
+ paramTone: "\u09B8\u09C1\u09B0",
26
+ paramDensity: "\u0998\u09A8\u09A4\u09CD\u09AC",
27
+ subjectKindEntityType: "\u09B8\u09A4\u09CD\u09A4\u09BE\u09B0 \u09A7\u09B0\u09A8",
28
+ subjectKindCategory: "\u09AC\u09BF\u09AD\u09BE\u0997",
29
+ cancel: "\u09AC\u09BE\u09A4\u09BF\u09B2 \u0995\u09B0\u09C1\u09A8",
30
+ inProgress: "\u099F\u09C0\u0995\u09BE\u0995\u09B0\u09A3 \u09B9\u099A\u09CD\u099B\u09C7..."
31
+ };
32
+ var PdfViewer = {
33
+ loadFailed: "PDF \u09B2\u09CB\u09A1 \u0995\u09B0\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF",
34
+ loading: "PDF \u09B2\u09CB\u09A1 \u09B9\u099A\u09CD\u099B\u09C7...",
35
+ next: "\u09AA\u09B0\u09AC\u09B0\u09CD\u09A4\u09C0",
36
+ pageLoadFailed: "\u09AA\u09C3\u09B7\u09CD\u09A0\u09BE \u09B2\u09CB\u09A1 \u0995\u09B0\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF",
37
+ pageOf: "\u09AA\u09C3\u09B7\u09CD\u09A0\u09BE {{page}} / {{total}}",
38
+ pagination: "\u09AA\u09C3\u09B7\u09CD\u09A0\u09BE \u09A8\u09C7\u09AD\u09BF\u0997\u09C7\u09B6\u09A8",
39
+ previous: "\u09AA\u09C2\u09B0\u09CD\u09AC\u09AC\u09B0\u09CD\u09A4\u09C0",
40
+ viewerLoading: "PDF \u09AD\u09BF\u0989\u09AF\u09BC\u09BE\u09B0 \u09B2\u09CB\u09A1 \u09B9\u099A\u09CD\u099B\u09C7..."
9
41
  };
10
42
  var Toolbar = {
11
43
  annotations: "\u099F\u09C0\u0995\u09BE\u09B8\u09AE\u09C2\u09B9",
@@ -56,7 +88,10 @@ var CollaborationPanel = {
56
88
  realtimeActive: "\u09B0\u09BF\u09AF\u09BC\u09C7\u09B2-\u099F\u09BE\u0987\u09AE \u0986\u09AA\u09A1\u09C7\u099F \u09B8\u0995\u09CD\u09B0\u09BF\u09AF\u09BC \u0986\u099B\u09C7",
57
89
  reconnecting: "\u09B8\u09BE\u09B0\u09CD\u09AD\u09BE\u09B0\u09C7 \u09AA\u09C1\u09A8\u09B0\u09BE\u09AF\u09BC \u09B8\u0982\u09AF\u09CB\u0997 \u09B9\u099A\u09CD\u099B\u09C7...",
58
90
  sharing: "\u09B6\u09C7\u09AF\u09BC\u09BE\u09B0\u09BF\u0982",
59
- collaborationComingSoon: "\u09B8\u09B9\u09AF\u09CB\u0997\u09BF\u09A4\u09BE \u09AC\u09C8\u09B6\u09BF\u09B7\u09CD\u099F\u09CD\u09AF \u09B6\u09C0\u0998\u09CD\u09B0\u0987 \u0986\u09B8\u099B\u09C7"
91
+ collaborationComingSoon: "\u09B8\u09B9\u09AF\u09CB\u0997\u09BF\u09A4\u09BE \u09AC\u09C8\u09B6\u09BF\u09B7\u09CD\u099F\u09CD\u09AF \u09B6\u09C0\u0998\u09CD\u09B0\u0987 \u0986\u09B8\u099B\u09C7",
92
+ collaborators: "\u09B8\u09B9\u09AF\u09CB\u0997\u09C0\u09B0\u09BE",
93
+ ceilings: "{{contextTokens}} \u0987\u09A8\u09AA\u09C1\u099F / {{maxOutputTokens}} \u0986\u0989\u099F\u09AA\u09C1\u099F",
94
+ sharedWindow: "{{contextTokens}} \u0989\u0987\u09A8\u09CD\u09A1\u09CB"
60
95
  };
61
96
  var AnnotationHistory = {
62
97
  history: "\u0987\u09A4\u09BF\u09B9\u09BE\u09B8",
@@ -380,7 +415,8 @@ var ResourceGenerate = {
380
415
  progressCancel: "\u09A4\u09C8\u09B0\u09BF \u09AC\u09BE\u09A4\u09BF\u09B2 \u0995\u09B0\u09C1\u09A8",
381
416
  progressInProgress: "\u09A4\u09C8\u09B0\u09BF \u09B9\u099A\u09CD\u099B\u09C7\u2026",
382
417
  progressComplete: "\u09A4\u09C8\u09B0\u09BF \u09B8\u09AE\u09CD\u09AA\u09C2\u09B0\u09CD\u09A3!",
383
- progressFailed: "\u09A4\u09C8\u09B0\u09BF \u09AC\u09CD\u09AF\u09B0\u09CD\u09A5"
418
+ progressFailed: "\u09A4\u09C8\u09B0\u09BF \u09AC\u09CD\u09AF\u09B0\u09CD\u09A5",
419
+ maxLengthCeiling: "{{model}} \u09A6\u09CD\u09AC\u09BE\u09B0\u09BE {{maxOutputTokens}} \u099F\u09CB\u0995\u09C7\u09A8\u09C7 \u09B8\u09C0\u09AE\u09BF\u09A4\u0964"
384
420
  };
385
421
  var ReferenceWizard = {
386
422
  gatherTitle: "\u09B8\u0982\u0997\u09C3\u09B9\u09C0\u09A4 \u09AA\u09CD\u09B0\u09B8\u0999\u09CD\u0997",
@@ -417,10 +453,29 @@ var ReferenceWizard = {
417
453
  semanticScoring: "\u0985\u09B0\u09CD\u09A5\u0997\u09A4 \u09B8\u09CD\u0995\u09CB\u09B0\u09BF\u0982",
418
454
  semanticScoringHelp: "\u0985\u09B0\u09CD\u09A5\u0997\u09A4 \u09AA\u09CD\u09B0\u09BE\u09B8\u0999\u09CD\u0997\u09BF\u0995\u09A4\u09BE \u0985\u09A8\u09C1\u09AF\u09BE\u09AF\u09BC\u09C0 \u09AB\u09B2\u09BE\u09AB\u09B2 \u09B8\u09CD\u0995\u09CB\u09B0 \u0995\u09B0\u09A4\u09C7 AI \u09AC\u09CD\u09AF\u09AC\u09B9\u09BE\u09B0 \u0995\u09B0\u09C1\u09A8",
419
455
  searching: "\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8 \u0995\u09B0\u09BE \u09B9\u099A\u09CD\u099B\u09C7...",
420
- search: "\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8"
456
+ search: "\u0985\u09A8\u09C1\u09B8\u09A8\u09CD\u09A7\u09BE\u09A8",
457
+ maxLengthCeiling: "{{model}} \u09A6\u09CD\u09AC\u09BE\u09B0\u09BE {{maxOutputTokens}} \u099F\u09CB\u0995\u09C7\u09A8\u09C7 \u09B8\u09C0\u09AE\u09BF\u09A4\u0964"
458
+ };
459
+ var OutcomeToasts = {
460
+ createFailed: "\u099F\u09C0\u0995\u09BE \u09A4\u09C8\u09B0\u09BF \u0995\u09B0\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF: {{detail}}",
461
+ deleteFailed: "\u099F\u09C0\u0995\u09BE \u09AE\u09C1\u099B\u09C7 \u09AB\u09C7\u09B2\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF: {{detail}}",
462
+ referenceUpdateFailed: "\u09B0\u09C7\u09AB\u09BE\u09B0\u09C7\u09A8\u09CD\u09B8 \u0986\u09AA\u09A1\u09C7\u099F \u0995\u09B0\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF: {{detail}}",
463
+ unknownError: "\u0985\u099C\u09BE\u09A8\u09BE \u09A4\u09CD\u09B0\u09C1\u099F\u09BF",
464
+ assistQuiet: "\u098F\u0996\u09A8\u0993 \u099A\u09B2\u099B\u09C7 \u2014 \u0995\u09AF\u09BC\u09C7\u0995 \u09AE\u09BF\u09A8\u09BF\u099F \u09A7\u09B0\u09C7 \u0995\u09CB\u09A8\u09CB \u0986\u09AA\u09A1\u09C7\u099F \u09A8\u09C7\u0987",
465
+ resourceCreatedNamed: "\u201C{{name}}\u201D \u09A4\u09C8\u09B0\u09BF \u09B9\u09AF\u09BC\u09C7\u099B\u09C7",
466
+ resourceCreated: "\u09B0\u09BF\u09B8\u09CB\u09B0\u09CD\u09B8 \u09A4\u09C8\u09B0\u09BF \u09B9\u09AF\u09BC\u09C7\u099B\u09C7",
467
+ annotationComplete: "\u099F\u09C0\u0995\u09BE \u09B8\u09AE\u09CD\u09AA\u09C2\u09B0\u09CD\u09A3",
468
+ annotationFailed: "\u099F\u09C0\u0995\u09BE \u09AC\u09CD\u09AF\u09B0\u09CD\u09A5 \u09B9\u09AF\u09BC\u09C7\u099B\u09C7",
469
+ generationFailed: "\u099C\u09C7\u09A8\u09BE\u09B0\u09C7\u09B6\u09A8 \u09AC\u09CD\u09AF\u09B0\u09CD\u09A5: {{detail}}",
470
+ "decline_no-text-layer": "\u098F\u0987 PDF \u098F\u0995\u099F\u09BF \u09B8\u09CD\u0995\u09CD\u09AF\u09BE\u09A8, \u098F\u09B0 \u09B2\u09C7\u0996\u09BE \u09B6\u09A8\u09BE\u0995\u09CD\u09A4 \u0995\u09B0\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF\u0964",
471
+ decline_encrypted: "\u098F\u0987 PDF \u09AA\u09BE\u09B8\u0993\u09AF\u09BC\u09BE\u09B0\u09CD\u09A1-\u09B8\u09C1\u09B0\u0995\u09CD\u09B7\u09BF\u09A4, \u09B2\u09C7\u0996\u09BE \u09AA\u09A1\u09BC\u09BE \u09AF\u09BE\u099A\u09CD\u099B\u09C7 \u09A8\u09BE\u0964",
472
+ decline_corrupt: "\u098F\u0987 PDF \u09AA\u09A1\u09BC\u09BE \u09AF\u09BE\u09AF\u09BC\u09A8\u09BF \u2014 \u09AB\u09BE\u0987\u09B2\u099F\u09BF \u0995\u09CD\u09B7\u09A4\u09BF\u0997\u09CD\u09B0\u09B8\u09CD\u09A4 \u09B9\u09A4\u09C7 \u09AA\u09BE\u09B0\u09C7\u0964",
473
+ "decline_too-large": "\u098F\u0987 \u09A8\u09A5\u09BF\u099F\u09BF \u098F\u09A4 \u09AC\u09A1\u09BC \u09AF\u09C7 \u09B2\u09C7\u0996\u09BE \u09AC\u09C7\u09B0 \u0995\u09B0\u09BE \u09AF\u09BE\u099A\u09CD\u099B\u09C7 \u09A8\u09BE\u0964",
474
+ decline_empty: "\u098F\u0987 \u09A8\u09A5\u09BF\u09A4\u09C7 \u099F\u09C0\u0995\u09BE \u09A6\u09C7\u0993\u09AF\u09BC\u09BE\u09B0 \u09AE\u09A4\u09CB \u0995\u09CB\u09A8\u09CB \u09B2\u09C7\u0996\u09BE \u09A8\u09C7\u0987\u0964"
421
475
  };
422
476
  var bn_default = {
423
477
  AssistProgress,
478
+ PdfViewer,
424
479
  Toolbar,
425
480
  ResourceInfoPanel,
426
481
  CollaborationPanel,
@@ -439,7 +494,8 @@ var bn_default = {
439
494
  Settings,
440
495
  AnnotateView,
441
496
  ResourceGenerate,
442
- ReferenceWizard
497
+ ReferenceWizard,
498
+ OutcomeToasts
443
499
  };
444
500
  export {
445
501
  AnnotateToolbar,
@@ -452,6 +508,8 @@ export {
452
508
  CommentsPanel,
453
509
  HighlightPanel,
454
510
  KeyboardShortcuts,
511
+ OutcomeToasts,
512
+ PdfViewer,
455
513
  ReferenceWizard,
456
514
  ReferencesPanel,
457
515
  ResourceGenerate,
@@ -464,4 +522,4 @@ export {
464
522
  UnifiedAnnotationsPanel,
465
523
  bn_default as default
466
524
  };
467
- //# sourceMappingURL=bn-HYR7CEL2.js.map
525
+ //# sourceMappingURL=bn-PHWCR6AZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../translations/bn.json"],"sourcesContent":["{\n \"AssistProgress\": {\n \"close\": \"বন্ধ করুন\",\n \"codeLoading\": \"লোড হচ্ছে…\",\n \"codeAnalyzing\": \"চিহ্নিত করা হচ্ছে…\",\n \"codeAnalyzingTags\": \"ট্যাগ চিহ্নিত করা হচ্ছে…\",\n \"codeDetectingEntities\": \"চিহ্নিত করা হচ্ছে…\",\n \"codeCreatingAnnotations\": \"{{count}}টি টীকা তৈরি হচ্ছে…\",\n \"codeCreatingTagAnnotations\": \"{{count}}টি ট্যাগ তৈরি হচ্ছে…\",\n \"codeCompleteCreated\": \"{{count}}টি {{kind}} তৈরি হয়েছে\",\n \"codeGeneratingResource\": \"তৈরি হচ্ছে…\",\n \"codeCreatingResource\": \"রিসোর্স তৈরি হচ্ছে…\",\n \"kindHighlight\": \"হাইলাইট\",\n \"kindComment\": \"মন্তব্য\",\n \"kindAssessment\": \"মূল্যায়ন\",\n \"kindReference\": \"রেফারেন্স\",\n \"kindTag\": \"ট্যাগ\",\n \"subject\": \"{{kind}}: {{label}}\",\n \"subjectWithPosition\": \"{{kind}}: {{label}} ({{total}}টির {{done}})\",\n \"paramEntityTypes\": \"সত্তার ধরন\",\n \"paramInstructions\": \"নির্দেশনা\",\n \"paramTone\": \"সুর\",\n \"paramDensity\": \"ঘনত্ব\",\n \"subjectKindEntityType\": \"সত্তার ধরন\",\n \"subjectKindCategory\": \"বিভাগ\",\n \"cancel\": \"বাতিল করুন\",\n \"inProgress\": \"টীকাকরণ হচ্ছে...\"\n },\n \"PdfViewer\": {\n \"loadFailed\": \"PDF লোড করা যায়নি\",\n \"loading\": \"PDF লোড হচ্ছে...\",\n \"next\": \"পরবর্তী\",\n \"pageLoadFailed\": \"পৃষ্ঠা লোড করা যায়নি\",\n \"pageOf\": \"পৃষ্ঠা {{page}} / {{total}}\",\n \"pagination\": \"পৃষ্ঠা নেভিগেশন\",\n \"previous\": \"পূর্ববর্তী\",\n \"viewerLoading\": \"PDF ভিউয়ার লোড হচ্ছে...\"\n },\n \"Toolbar\": {\n \"annotations\": \"টীকাসমূহ\",\n \"history\": \"ইতিহাস\",\n \"resourceInfo\": \"সম্পদের তথ্য\",\n \"collaboration\": \"সহযোগিতা\",\n \"userAccount\": \"ব্যবহারকারীর অ্যাকাউন্ট\",\n \"settings\": \"সেটিংস\",\n \"knowledgeBase\": \"জ্ঞান ভান্ডার\"\n },\n \"ResourceInfoPanel\": {\n \"title\": \"সম্পদের তথ্য\",\n \"locale\": \"লোকেল\",\n \"notSpecified\": \"নির্দিষ্ট করা হয়নি\",\n \"entityTypeTags\": \"সত্তার ধরনের ট্যাগ\",\n \"representation\": \"উপস্থাপনা\",\n \"mediaType\": \"মিডিয়ার ধরন\",\n \"byteSize\": \"আকার\",\n \"storageUri\": \"সঞ্চয়স্থান\",\n \"clone\": \"ক্লোন\",\n \"cloneDescription\": \"এই সম্পদের জন্য একটি শেয়ারযোগ্য ক্লোন লিঙ্ক তৈরি করুন\",\n \"generate\": \"তৈরি করুন\",\n \"generateDescription\": \"এই সম্পদের প্রসঙ্গ থেকে একটি নতুন সম্পদ তৈরি করুন\",\n \"archive\": \"সংরক্ষণাগারভুক্ত করুন\",\n \"archiveDescription\": \"এই সম্পদটিকে সংরক্ষণাগারভুক্ত অবস্থায় স্থানান্তর করুন\",\n \"unarchive\": \"সংরক্ষণাগার থেকে পুনরুদ্ধার করুন\",\n \"unarchiveDescription\": \"এই সম্পদটিকে সক্রিয় অবস্থায় পুনরুদ্ধার করুন\",\n \"provenance\": \"উৎস ও উদ্ভব\",\n \"createdAt\": \"তৈরির তারিখ\",\n \"modifiedAt\": \"পরিবর্তনের তারিখ\",\n \"attributedTo\": \"সম্পাদককৃত\",\n \"derivedFrom\": \"থেকে উৎপন্ন\"\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 \"collaborators\": \"সহযোগীরা\",\n \"ceilings\": \"{{contextTokens}} ইনপুট / {{maxOutputTokens}} আউটপুট\",\n \"sharedWindow\": \"{{contextTokens}} উইন্ডো\"\n },\n \"AnnotationHistory\": {\n \"history\": \"ইতিহাস\",\n \"loading\": \"লোড হচ্ছে...\",\n \"user\": \"ব্যবহারকারী\",\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 \"embeddingComputed\": \"এমবেডিং গণনা করা হয়েছে\",\n \"justNow\": \"এইমাত্র\",\n \"minutesAgo\": \"{{count}} মি. আগে\",\n \"hoursAgo\": \"{{count}} ঘ. আগে\",\n \"daysAgo\": \"{{count}} দি. আগে\",\n \"failed\": \"ইতিহাস লোড করা যায়নি।\",\n \"retry\": \"আবার চেষ্টা করুন\"\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 \"complete\": \"টীকাকরণ সম্পূর্ণ!\",\n \"failed\": \"টীকাকরণ ব্যর্থ\",\n \"densityPerWords\": \"প্রতি ২০০০ শব্দে {{density}}\"\n },\n \"HighlightPanel\": {\n \"title\": \"হাইলাইটসমূহ\",\n \"noHighlights\": \"এখনো কোনো হাইলাইট নেই। গুরুত্বপূর্ণ অনুচ্ছেদ খুঁজতে AI টীকাকরণ ব্যবহার করুন।\",\n \"annotateHighlights\": \"হাইলাইট টীকাকরণ\",\n \"instructions\": \"নির্দেশনা\",\n \"optional\": \"(ঐচ্ছিক)\",\n \"instructionsPlaceholder\": \"যেমন, মূল প্রযুক্তিগত ধারণাগুলিতে মনোযোগ দিন...\",\n \"annotate\": \"টীকাকরণ\",\n \"annotating\": \"টীকাকরণ হচ্ছে...\",\n \"cancel\": \"বাতিল করুন\",\n \"densityLabel\": \"ঘনত্ব\",\n \"densitySparse\": \"বিরল\",\n \"densityDense\": \"ঘন\",\n \"complete\": \"টীকাকরণ সম্পূর্ণ!\",\n \"failed\": \"টীকাকরণ ব্যর্থ\",\n \"densityPerWords\": \"প্রতি ২০০০ শব্দে {{density}}\"\n },\n \"AssessmentPanel\": {\n \"title\": \"মূল্যায়নসমূহ\",\n \"noAssessments\": \"এখনো কোনো মূল্যায়ন নেই। অনুচ্ছেদ মূল্যায়ন করতে AI টীকাকরণ ব্যবহার করুন।\",\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 \"complete\": \"টীকাকরণ সম্পূর্ণ!\",\n \"failed\": \"টীকাকরণ ব্যর্থ\",\n \"densityPerWords\": \"প্রতি ২০০০ শব্দে {{density}}\"\n },\n \"TaggingPanel\": {\n \"title\": \"ট্যাগসমূহ\",\n \"noTags\": \"এখনো কোনো ট্যাগ নেই। কাঠামোগত ভূমিকা শনাক্ত করতে AI টীকাকরণ ব্যবহার করুন।\",\n \"noSchemas\": \"এই জ্ঞান ভাণ্ডারের জন্য কোনো ট্যাগ স্কিমা নিবন্ধিত নেই। ট্যাগিং ব্যবহার করার আগে একজন KB প্রশাসককে কমপক্ষে একটি কাঠামোগত-বিশ্লেষণ স্কিমা নিবন্ধন করতে হবে (যেমন `register-tag-schemas` দক্ষতার মাধ্যমে)।\",\n \"annotateTags\": \"ট্যাগ টীকাকরণ\",\n \"selectSchema\": \"ফ্রেমওয়ার্ক নির্বাচন করুন\",\n \"selectCategories\": \"বিভাগ নির্বাচন করুন\",\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 \"complete\": \"টীকাকরণ সম্পূর্ণ!\",\n \"failed\": \"টীকাকরণ ব্যর্থ\"\n },\n \"UnifiedAnnotationsPanel\": {\n \"title\": \"টীকাসমূহ\",\n \"statistics\": \"পরিসংখ্যান\",\n \"highlight\": \"হাইলাইটসমূহ\",\n \"reference\": \"রেফারেন্সসমূহ\",\n \"assessment\": \"মূল্যায়নসমূহ\",\n \"comment\": \"মন্তব্যসমূহ\",\n \"tag\": \"ট্যাগসমূহ\",\n \"annotationsFailed\": \"টীকা লোড করা যায়নি।\",\n \"retry\": \"আবার চেষ্টা করুন\"\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 \"loading\": \"লোড হচ্ছে...\",\n \"loadingEllipsis\": \"লোড হচ্ছে...\",\n \"untitledResource\": \"শিরোনামবিহীন সম্পদ\",\n \"noText\": \"কোনো পাঠ্য নেই\",\n \"incomingReferencesFailed\": \"ইনকামিং রেফারেন্স লোড করা যায়নি।\",\n \"retry\": \"আবার চেষ্টা করুন\",\n \"entityTypesFailed\": \"সত্তার ধরন লোড করা যায়নি।\"\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 হলো Control কী।\",\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 \"ResourceGenerate\": {\n \"gatherTitle\": \"সংগ্রহ কনফিগার করুন\",\n \"reviewTitle\": \"প্রসঙ্গ পর্যালোচনা করুন\",\n \"configureTitle\": \"জেনারেশন কনফিগার করুন\",\n \"next\": \"পরবর্তী\",\n \"back\": \"পিছনে\",\n \"cancel\": \"বাতিল করুন\",\n \"gatherIntro\": \"সংগৃহীত প্রসঙ্গে কী অন্তর্ভুক্ত করবেন তা বেছে নিন।\",\n \"includeContent\": \"সম্পদের বিষয়বস্তু অন্তর্ভুক্ত করুন\",\n \"includeSummary\": \"সারসংক্ষেপ অন্তর্ভুক্ত করুন\",\n \"gatherDepth\": \"গভীরতা\",\n \"gatherMaxResources\": \"সর্বোচ্চ সম্পদ\",\n \"gatherButton\": \"সংগ্রহ করুন\",\n \"excludeLabel\": \"পুনরুদ্ধার থেকে বাদ দিন\",\n \"loadingContext\": \"প্রসঙ্গ সংগ্রহ হচ্ছে...\",\n \"failedContext\": \"প্রসঙ্গ সংগ্রহ ব্যর্থ\",\n \"sourceContextLabel\": \"সম্পদ\",\n \"connectionsLabel\": \"সংযোগসমূহ\",\n \"citedByLabel\": \"উদ্ধৃতকারী\",\n \"resourceTitle\": \"নতুন সম্পদের শিরোনাম\",\n \"resourceTitlePlaceholder\": \"তৈরি করা সম্পদের শিরোনাম...\",\n \"additionalInstructions\": \"অতিরিক্ত নির্দেশনা\",\n \"additionalInstructionsPlaceholder\": \"তৈরির জন্য ঐচ্ছিক নির্দেশনা...\",\n \"language\": \"ভাষা\",\n \"languageHelp\": \"তৈরি করা সম্পদের ভাষা\",\n \"creativity\": \"সৃজনশীলতা\",\n \"creativityFocused\": \"কেন্দ্রীভূত\",\n \"creativityCreative\": \"সৃজনশীল\",\n \"maxLength\": \"সর্বোচ্চ দৈর্ঘ্য\",\n \"maxLengthHelp\": \"সর্বোচ্চ টোকেন সংখ্যা\",\n \"generate\": \"তৈরি করুন\",\n \"progressTitle\": \"সম্পদ তৈরি হচ্ছে\",\n \"progressCancel\": \"তৈরি বাতিল করুন\",\n \"progressInProgress\": \"তৈরি হচ্ছে…\",\n \"progressComplete\": \"তৈরি সম্পূর্ণ!\",\n \"progressFailed\": \"তৈরি ব্যর্থ\",\n \"maxLengthCeiling\": \"{{model}} দ্বারা {{maxOutputTokens}} টোকেনে সীমিত।\"\n },\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\": \"অর্থগত প্রাসঙ্গিকতা অনুযায়ী ফলাফল স্কোর করতে AI ব্যবহার করুন\",\n \"searching\": \"অনুসন্ধান করা হচ্ছে...\",\n \"search\": \"অনুসন্ধান\",\n \"maxLengthCeiling\": \"{{model}} দ্বারা {{maxOutputTokens}} টোকেনে সীমিত।\"\n },\n \"OutcomeToasts\": {\n \"createFailed\": \"টীকা তৈরি করা যায়নি: {{detail}}\",\n \"deleteFailed\": \"টীকা মুছে ফেলা যায়নি: {{detail}}\",\n \"referenceUpdateFailed\": \"রেফারেন্স আপডেট করা যায়নি: {{detail}}\",\n \"unknownError\": \"অজানা ত্রুটি\",\n \"assistQuiet\": \"এখনও চলছে — কয়েক মিনিট ধরে কোনো আপডেট নেই\",\n \"resourceCreatedNamed\": \"“{{name}}” তৈরি হয়েছে\",\n \"resourceCreated\": \"রিসোর্স তৈরি হয়েছে\",\n \"annotationComplete\": \"টীকা সম্পূর্ণ\",\n \"annotationFailed\": \"টীকা ব্যর্থ হয়েছে\",\n \"generationFailed\": \"জেনারেশন ব্যর্থ: {{detail}}\",\n \"decline_no-text-layer\": \"এই PDF একটি স্ক্যান, এর লেখা শনাক্ত করা যায়নি।\",\n \"decline_encrypted\": \"এই PDF পাসওয়ার্ড-সুরক্ষিত, লেখা পড়া যাচ্ছে না।\",\n \"decline_corrupt\": \"এই PDF পড়া যায়নি — ফাইলটি ক্ষতিগ্রস্ত হতে পারে।\",\n \"decline_too-large\": \"এই নথিটি এত বড় যে লেখা বের করা যাচ্ছে না।\",\n \"decline_empty\": \"এই নথিতে টীকা দেওয়ার মতো কোনো লেখা নেই।\"\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,287 @@
1
+ 'use client';
2
+ import {
3
+ en_default
4
+ } from "./chunk-PCRRBU7H.js";
5
+ import {
6
+ __glob
7
+ } from "./chunk-O23TLLXW.js";
8
+
9
+ // src/contexts/TranslationContext.tsx
10
+ import { createContext, useContext, useState, useEffect, useMemo } from "react";
11
+ import { Fragment, jsx } from "react/jsx-runtime";
12
+
13
+ // import("../../translations/**/*.json") in src/contexts/TranslationContext.tsx
14
+ var globImport_translations_json = __glob({
15
+ "../../translations/ar.json": () => import("./ar-OU3DQGC6.js"),
16
+ "../../translations/bn.json": () => import("./bn-PHWCR6AZ.js"),
17
+ "../../translations/cs.json": () => import("./cs-NEXYZ62I.js"),
18
+ "../../translations/da.json": () => import("./da-FAT43YCU.js"),
19
+ "../../translations/de.json": () => import("./de-KRQ3WBCU.js"),
20
+ "../../translations/el.json": () => import("./el-Q4IU3EKC.js"),
21
+ "../../translations/en.json": () => import("./en-2KADE7N4.js"),
22
+ "../../translations/es.json": () => import("./es-2IO3R2MK.js"),
23
+ "../../translations/fa.json": () => import("./fa-Q5GOQFXX.js"),
24
+ "../../translations/fi.json": () => import("./fi-R6NMRWBE.js"),
25
+ "../../translations/fr.json": () => import("./fr-QY4D5E6J.js"),
26
+ "../../translations/he.json": () => import("./he-X6Y77XHY.js"),
27
+ "../../translations/hi.json": () => import("./hi-XL7IOEQM.js"),
28
+ "../../translations/id.json": () => import("./id-QZ4ZZS67.js"),
29
+ "../../translations/it.json": () => import("./it-ME2Q7OB6.js"),
30
+ "../../translations/ja.json": () => import("./ja-HX7QASRI.js"),
31
+ "../../translations/ko.json": () => import("./ko-EQO5AHAV.js"),
32
+ "../../translations/ms.json": () => import("./ms-UILFSF3I.js"),
33
+ "../../translations/nl.json": () => import("./nl-NNI45PMK.js"),
34
+ "../../translations/no.json": () => import("./no-MAL5F6P6.js"),
35
+ "../../translations/pl.json": () => import("./pl-4RMY6JAJ.js"),
36
+ "../../translations/pt.json": () => import("./pt-VQH2X3QQ.js"),
37
+ "../../translations/ro.json": () => import("./ro-XXCQO2OG.js"),
38
+ "../../translations/sv.json": () => import("./sv-7Z6EJ6U4.js"),
39
+ "../../translations/th.json": () => import("./th-L3DXXYVQ.js"),
40
+ "../../translations/tr.json": () => import("./tr-P3DFVLFJ.js"),
41
+ "../../translations/uk.json": () => import("./uk-7C5D3PXS.js"),
42
+ "../../translations/vi.json": () => import("./vi-ZLTLEO7P.js"),
43
+ "../../translations/zh.json": () => import("./zh-5FHVWDIN.js")
44
+ });
45
+
46
+ // src/contexts/TranslationContext.tsx
47
+ var TranslationContext = createContext(null);
48
+ var translationCache = /* @__PURE__ */ new Map();
49
+ function processPluralFormat(text, params) {
50
+ const pluralMatch = text.match(/\{(\w+),\s*plural,\s*/);
51
+ if (!pluralMatch) {
52
+ return text;
53
+ }
54
+ const paramName = pluralMatch[1];
55
+ const count = params[paramName];
56
+ if (count === void 0) {
57
+ return text;
58
+ }
59
+ let startPos = pluralMatch[0].length;
60
+ let braceCount = 1;
61
+ let endPos = startPos;
62
+ for (let i = startPos; i < text.length; i++) {
63
+ if (text[i] === "{") braceCount++;
64
+ else if (text[i] === "}") {
65
+ braceCount--;
66
+ if (braceCount === 0) {
67
+ endPos = i;
68
+ break;
69
+ }
70
+ }
71
+ }
72
+ const pluralCases = text.substring(startPos, endPos);
73
+ const cases = {};
74
+ const caseRegex = /(?:=(\d+)|(\w+))\s*\{([^}]+)\}/g;
75
+ let caseMatch;
76
+ while ((caseMatch = caseRegex.exec(pluralCases)) !== null) {
77
+ const [, exactNumber, keyword, textContent] = caseMatch;
78
+ const key = exactNumber !== void 0 ? `=${exactNumber}` : keyword;
79
+ cases[key] = textContent;
80
+ }
81
+ const exactMatch = cases[`=${count}`];
82
+ if (exactMatch !== void 0) {
83
+ const result = exactMatch.replace(/#/g, String(count));
84
+ return text.substring(0, pluralMatch.index) + result + text.substring(endPos + 1);
85
+ }
86
+ const otherCase = cases["other"];
87
+ if (otherCase !== void 0) {
88
+ const result = otherCase.replace(/#/g, String(count));
89
+ return text.substring(0, pluralMatch.index) + result + text.substring(endPos + 1);
90
+ }
91
+ return text;
92
+ }
93
+ var AVAILABLE_LOCALES = [
94
+ "ar",
95
+ // Arabic
96
+ "bn",
97
+ // Bengali
98
+ "cs",
99
+ // Czech
100
+ "da",
101
+ // Danish
102
+ "de",
103
+ // German
104
+ "el",
105
+ // Greek
106
+ "en",
107
+ // English
108
+ "es",
109
+ // Spanish
110
+ "fa",
111
+ // Persian/Farsi
112
+ "fi",
113
+ // Finnish
114
+ "fr",
115
+ // French
116
+ "he",
117
+ // Hebrew
118
+ "hi",
119
+ // Hindi
120
+ "id",
121
+ // Indonesian
122
+ "it",
123
+ // Italian
124
+ "ja",
125
+ // Japanese
126
+ "ko",
127
+ // Korean
128
+ "ms",
129
+ // Malay
130
+ "nl",
131
+ // Dutch
132
+ "no",
133
+ // Norwegian
134
+ "pl",
135
+ // Polish
136
+ "pt",
137
+ // Portuguese
138
+ "ro",
139
+ // Romanian
140
+ "sv",
141
+ // Swedish
142
+ "th",
143
+ // Thai
144
+ "tr",
145
+ // Turkish
146
+ "uk",
147
+ // Ukrainian
148
+ "vi",
149
+ // Vietnamese
150
+ "zh"
151
+ // Chinese
152
+ ];
153
+ async function loadTranslations(locale) {
154
+ if (translationCache.has(locale)) {
155
+ return translationCache.get(locale);
156
+ }
157
+ if (locale === "en") {
158
+ translationCache.set("en", en_default);
159
+ return en_default;
160
+ }
161
+ try {
162
+ const translations = await globImport_translations_json(`../../translations/${locale}.json`);
163
+ const translationData = translations.default || translations;
164
+ translationCache.set(locale, translationData);
165
+ return translationData;
166
+ } catch (error) {
167
+ console.error(`Failed to load translations for locale: ${locale}`, error);
168
+ return en_default;
169
+ }
170
+ }
171
+ var defaultTranslationManager = {
172
+ t: (namespace, key, params) => {
173
+ const translations = en_default;
174
+ const translation = translations[namespace]?.[key];
175
+ if (!translation) {
176
+ console.warn(`Translation not found for ${namespace}.${key}`);
177
+ return `${namespace}.${key}`;
178
+ }
179
+ if (params && typeof translation === "string") {
180
+ let result = translation;
181
+ result = processPluralFormat(result, params);
182
+ Object.entries(params).forEach(([paramKey, paramValue]) => {
183
+ result = result.replace(new RegExp(`\\{\\{${paramKey}\\}\\}`, "g"), String(paramValue));
184
+ });
185
+ return result;
186
+ }
187
+ return translation;
188
+ }
189
+ };
190
+ function TranslationProvider({
191
+ translationManager,
192
+ locale,
193
+ loadingComponent = null,
194
+ children
195
+ }) {
196
+ const [loadedTranslations, setLoadedTranslations] = useState(null);
197
+ const [isLoading, setIsLoading] = useState(false);
198
+ useEffect(() => {
199
+ if (locale && !translationManager) {
200
+ setIsLoading(true);
201
+ loadTranslations(locale).then((translations) => {
202
+ setLoadedTranslations(translations);
203
+ setIsLoading(false);
204
+ }).catch((error) => {
205
+ console.error("Failed to load translations:", error);
206
+ setLoadedTranslations(en_default);
207
+ setIsLoading(false);
208
+ });
209
+ }
210
+ }, [locale, translationManager]);
211
+ const localeManager = useMemo(() => {
212
+ if (!loadedTranslations) return null;
213
+ return {
214
+ t: (namespace, key, params) => {
215
+ const translation = loadedTranslations[namespace]?.[key];
216
+ if (!translation) {
217
+ console.warn(`Translation not found for ${namespace}.${key} in locale ${locale}`);
218
+ return `${namespace}.${key}`;
219
+ }
220
+ if (params && typeof translation === "string") {
221
+ let result = translation;
222
+ result = processPluralFormat(result, params);
223
+ Object.entries(params).forEach(([paramKey, paramValue]) => {
224
+ result = result.replace(new RegExp(`\\{\\{${paramKey}\\}\\}`, "g"), String(paramValue));
225
+ });
226
+ return result;
227
+ }
228
+ return translation;
229
+ }
230
+ };
231
+ }, [loadedTranslations, locale]);
232
+ if (translationManager) {
233
+ return /* @__PURE__ */ jsx(TranslationContext.Provider, { value: translationManager, children });
234
+ }
235
+ if (locale && isLoading) {
236
+ return /* @__PURE__ */ jsx(Fragment, { children: loadingComponent });
237
+ }
238
+ if (locale && localeManager) {
239
+ return /* @__PURE__ */ jsx(TranslationContext.Provider, { value: localeManager, children });
240
+ }
241
+ return /* @__PURE__ */ jsx(TranslationContext.Provider, { value: defaultTranslationManager, children });
242
+ }
243
+ function useTranslations(namespace) {
244
+ const context = useContext(TranslationContext);
245
+ if (!context) {
246
+ return (key, params) => {
247
+ const translations = en_default;
248
+ const translation = translations[namespace]?.[key];
249
+ if (!translation) {
250
+ console.warn(`Translation not found for ${namespace}.${key}`);
251
+ return `${namespace}.${key}`;
252
+ }
253
+ if (params && typeof translation === "string") {
254
+ let result = translation;
255
+ result = processPluralFormat(result, params);
256
+ Object.entries(params).forEach(([paramKey, paramValue]) => {
257
+ result = result.replace(new RegExp(`\\{\\{${paramKey}\\}\\}`, "g"), String(paramValue));
258
+ });
259
+ return result;
260
+ }
261
+ return translation;
262
+ };
263
+ }
264
+ return (key, params) => context.t(namespace, key, params);
265
+ }
266
+ function usePreloadTranslations() {
267
+ return {
268
+ preload: async (locale) => {
269
+ try {
270
+ await loadTranslations(locale);
271
+ return true;
272
+ } catch (error) {
273
+ console.error(`Failed to preload translations for ${locale}:`, error);
274
+ return false;
275
+ }
276
+ },
277
+ isLoaded: (locale) => translationCache.has(locale)
278
+ };
279
+ }
280
+
281
+ export {
282
+ AVAILABLE_LOCALES,
283
+ TranslationProvider,
284
+ useTranslations,
285
+ usePreloadTranslations
286
+ };
287
+ //# sourceMappingURL=chunk-5VDTWRXJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/contexts/TranslationContext.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, ReactNode, useState, useEffect, useMemo } from 'react';\nimport type { TranslationManager } from '../types/TranslationManager';\n\n// Static import for default English only - always needed as fallback\nimport enTranslations from '../../translations/en.json';\n\nconst TranslationContext = createContext<TranslationManager | null>(null);\n\n// Cache for dynamically loaded translations\nconst translationCache = new Map<string, any>();\n\n/**\n * Process ICU MessageFormat plural syntax\n * Supports: {count, plural, =0 {text} =1 {text} other {text}}\n */\nfunction processPluralFormat(text: string, params: Record<string, any>): string {\n // Match {paramName, plural, ...} with proper brace counting\n const pluralMatch = text.match(/\\{(\\w+),\\s*plural,\\s*/);\n if (!pluralMatch) {\n return text;\n }\n\n const paramName = pluralMatch[1];\n const count = params[paramName];\n if (count === undefined) {\n return text;\n }\n\n // Find the matching closing brace by counting\n let startPos = pluralMatch[0].length;\n let braceCount = 1; // We're inside the first {\n let endPos = startPos;\n\n for (let i = startPos; i < text.length; i++) {\n if (text[i] === '{') braceCount++;\n else if (text[i] === '}') {\n braceCount--;\n if (braceCount === 0) {\n endPos = i;\n break;\n }\n }\n }\n\n const pluralCases = text.substring(startPos, endPos);\n\n // Parse plural cases: =0 {text} =1 {text} other {text}\n const cases: Record<string, string> = {};\n const caseRegex = /(?:=(\\d+)|(\\w+))\\s*\\{([^}]+)\\}/g;\n let caseMatch;\n\n while ((caseMatch = caseRegex.exec(pluralCases)) !== null) {\n const [, exactNumber, keyword, textContent] = caseMatch;\n const key = exactNumber !== undefined ? `=${exactNumber}` : keyword;\n cases[key] = textContent;\n }\n\n // Select appropriate case\n const exactMatch = cases[`=${count}`];\n if (exactMatch !== undefined) {\n const result = exactMatch.replace(/#/g, String(count));\n return text.substring(0, pluralMatch.index!) + result + text.substring(endPos + 1);\n }\n\n const otherCase = cases['other'];\n if (otherCase !== undefined) {\n const result = otherCase.replace(/#/g, String(count));\n return text.substring(0, pluralMatch.index!) + result + text.substring(endPos + 1);\n }\n\n return text;\n}\n\n// List of available locales (can be extended without importing all files)\nexport const AVAILABLE_LOCALES = [\n 'ar', // Arabic\n 'bn', // Bengali\n 'cs', // Czech\n 'da', // Danish\n 'de', // German\n 'el', // Greek\n 'en', // English\n 'es', // Spanish\n 'fa', // Persian/Farsi\n 'fi', // Finnish\n 'fr', // French\n 'he', // Hebrew\n 'hi', // Hindi\n 'id', // Indonesian\n 'it', // Italian\n 'ja', // Japanese\n 'ko', // Korean\n 'ms', // Malay\n 'nl', // Dutch\n 'no', // Norwegian\n 'pl', // Polish\n 'pt', // Portuguese\n 'ro', // Romanian\n 'sv', // Swedish\n 'th', // Thai\n 'tr', // Turkish\n 'uk', // Ukrainian\n 'vi', // Vietnamese\n 'zh', // Chinese\n] as const;\nexport type AvailableLocale = typeof AVAILABLE_LOCALES[number];\n\n// Lazy load translations for a specific locale\nasync function loadTranslations(locale: string): Promise<any> {\n // Check cache first\n if (translationCache.has(locale)) {\n return translationCache.get(locale);\n }\n\n // English is already loaded statically\n if (locale === 'en') {\n translationCache.set('en', enTranslations);\n return enTranslations;\n }\n\n try {\n // Dynamic import for all other locales\n const translations = await import(`../../translations/${locale}.json`);\n const translationData = translations.default || translations;\n translationCache.set(locale, translationData);\n return translationData;\n } catch (error) {\n console.error(`Failed to load translations for locale: ${locale}`, error);\n // Fall back to English\n return enTranslations;\n }\n}\n\n// Default English translation manager (using static import)\nconst defaultTranslationManager: TranslationManager = {\n t: (namespace: string, key: string, params?: Record<string, any>) => {\n const translations = enTranslations as Record<string, Record<string, string>>;\n const translation = translations[namespace]?.[key];\n\n if (!translation) {\n console.warn(`Translation not found for ${namespace}.${key}`);\n return `${namespace}.${key}`;\n }\n\n // Handle parameter interpolation and plural format\n if (params && typeof translation === 'string') {\n let result = translation;\n // First process plural format\n result = processPluralFormat(result, params);\n // Then handle simple parameter interpolation\n Object.entries(params).forEach(([paramKey, paramValue]) => {\n result = result.replace(new RegExp(`\\\\{\\\\{${paramKey}\\\\}\\\\}`, 'g'), String(paramValue));\n });\n return result;\n }\n\n return translation;\n },\n};\n\nexport interface TranslationProviderProps {\n /**\n * Option 1: Provide a complete TranslationManager implementation\n */\n translationManager?: TranslationManager;\n\n /**\n * Option 2: Use built-in translations by specifying a locale\n * When adding new locales, just add the JSON file and update AVAILABLE_LOCALES\n */\n locale?: string;\n\n /**\n * Loading component to show while translations are being loaded\n * Only relevant when using dynamic locale loading\n */\n loadingComponent?: ReactNode;\n\n children: ReactNode;\n}\n\n/**\n * Provider for translation management with dynamic loading\n *\n * Three modes of operation:\n * 1. No provider: Components use default English strings\n * 2. With locale prop: Dynamically loads translations for that locale\n * 3. With translationManager: Use custom translation implementation\n */\nexport function TranslationProvider({\n translationManager,\n locale,\n loadingComponent = null,\n children,\n}: TranslationProviderProps) {\n const [loadedTranslations, setLoadedTranslations] = useState<any>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n // Load translations when locale changes\n useEffect(() => {\n if (locale && !translationManager) {\n setIsLoading(true);\n loadTranslations(locale)\n .then(translations => {\n setLoadedTranslations(translations);\n setIsLoading(false);\n })\n .catch(error => {\n console.error('Failed to load translations:', error);\n setLoadedTranslations(enTranslations); // Fall back to English\n setIsLoading(false);\n });\n }\n }, [locale, translationManager]);\n\n // Create translation manager from loaded translations\n const localeManager = useMemo<TranslationManager | null>(() => {\n if (!loadedTranslations) return null;\n\n return {\n t: (namespace: string, key: string, params?: Record<string, any>) => {\n const translation = loadedTranslations[namespace]?.[key];\n\n if (!translation) {\n console.warn(`Translation not found for ${namespace}.${key} in locale ${locale}`);\n return `${namespace}.${key}`;\n }\n\n // Handle parameter interpolation and plural format\n if (params && typeof translation === 'string') {\n let result = translation;\n // First process plural format\n result = processPluralFormat(result, params);\n // Then handle simple parameter interpolation\n Object.entries(params).forEach(([paramKey, paramValue]) => {\n result = result.replace(new RegExp(`\\\\{\\\\{${paramKey}\\\\}\\\\}`, 'g'), String(paramValue));\n });\n return result;\n }\n\n return translation;\n },\n };\n }, [loadedTranslations, locale]);\n\n // If custom translation manager provided, use it\n if (translationManager) {\n return (\n <TranslationContext.Provider value={translationManager}>\n {children}\n </TranslationContext.Provider>\n );\n }\n\n // If locale provided and still loading, show loading component\n if (locale && isLoading) {\n return <>{loadingComponent}</>;\n }\n\n // If locale provided and translations loaded, use them\n if (locale && localeManager) {\n return (\n <TranslationContext.Provider value={localeManager}>\n {children}\n </TranslationContext.Provider>\n );\n }\n\n // Default: use English translations\n return (\n <TranslationContext.Provider value={defaultTranslationManager}>\n {children}\n </TranslationContext.Provider>\n );\n}\n\n/**\n * Hook to access translations within a namespace\n *\n * Works in three modes:\n * 1. Without provider: Returns default English translations\n * 2. With provider using locale: Returns dynamically loaded translations for that locale\n * 3. With custom provider: Uses the custom translation manager\n *\n * @param namespace - Translation namespace (e.g., 'Toolbar', 'ResourceViewer')\n * @returns Function to translate keys within the namespace\n */\nexport function useTranslations(namespace: string) {\n const context = useContext(TranslationContext);\n\n // If no context (no provider), use default English translations\n if (!context) {\n return (key: string, params?: Record<string, any>) => {\n const translations = enTranslations as Record<string, Record<string, string>>;\n const translation = translations[namespace]?.[key];\n\n if (!translation) {\n console.warn(`Translation not found for ${namespace}.${key}`);\n return `${namespace}.${key}`;\n }\n\n // Handle parameter interpolation and plural format\n if (params && typeof translation === 'string') {\n let result = translation;\n // First process plural format\n result = processPluralFormat(result, params);\n // Then handle simple parameter interpolation\n Object.entries(params).forEach(([paramKey, paramValue]) => {\n result = result.replace(new RegExp(`\\\\{\\\\{${paramKey}\\\\}\\\\}`, 'g'), String(paramValue));\n });\n return result;\n }\n\n return translation;\n };\n }\n\n // Return a function that translates keys within this namespace\n return (key: string, params?: Record<string, any>) => context.t(namespace, key, params);\n}\n\n/**\n * Hook to preload translations for a locale\n * Useful for preloading translations before navigation\n */\nexport function usePreloadTranslations() {\n return {\n preload: async (locale: string) => {\n try {\n await loadTranslations(locale);\n return true;\n } catch (error) {\n console.error(`Failed to preload translations for ${locale}:`, error);\n return false;\n }\n },\n isLoaded: (locale: string) => translationCache.has(locale),\n };\n}"],"mappings":"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","names":[]}