@semiont/react-ui 0.5.24 → 0.5.26

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 (179) hide show
  1. package/dist/PdfAnnotationCanvas.client-6ZSF6ZTJ.js +677 -0
  2. package/dist/PdfAnnotationCanvas.client-6ZSF6ZTJ.js.map +1 -0
  3. package/dist/PdfAnnotationCanvas.client-JCJMXWWJ.css +180 -0
  4. package/dist/PdfAnnotationCanvas.client-JCJMXWWJ.css.map +1 -0
  5. package/dist/{ar-JRTKCMTF.js → ar-YTUUGK2O.js} +32 -6
  6. package/dist/ar-YTUUGK2O.js.map +1 -0
  7. package/dist/{bn-LO6EDSCC.js → bn-ASGNGPMD.js} +32 -6
  8. package/dist/bn-ASGNGPMD.js.map +1 -0
  9. package/dist/{chunk-4QMTEPQ3.js → chunk-BTUG3VJJ.js} +18 -298
  10. package/dist/chunk-BTUG3VJJ.js.map +1 -0
  11. package/dist/{chunk-5Y5JDCKC.js → chunk-L3WKRWP3.js} +32 -6
  12. package/dist/chunk-L3WKRWP3.js.map +1 -0
  13. package/dist/chunk-OBQOZCJE.js +287 -0
  14. package/dist/chunk-OBQOZCJE.js.map +1 -0
  15. package/dist/{cs-LCHHOR4O.js → cs-WMYVAOZY.js} +32 -6
  16. package/dist/cs-WMYVAOZY.js.map +1 -0
  17. package/dist/{da-TARGPMJR.js → da-FSHHN4D6.js} +32 -6
  18. package/dist/da-FSHHN4D6.js.map +1 -0
  19. package/dist/{de-SBH4QBPJ.js → de-FJFO3TPT.js} +32 -6
  20. package/dist/de-FJFO3TPT.js.map +1 -0
  21. package/dist/{el-2D2OLGWB.js → el-XOH4QIAG.js} +32 -6
  22. package/dist/el-XOH4QIAG.js.map +1 -0
  23. package/dist/{en-QFIEG3CA.js → en-3FCBW3YD.js} +6 -2
  24. package/dist/{es-U6YK2LX6.js → es-HDX4QI7E.js} +32 -6
  25. package/dist/es-HDX4QI7E.js.map +1 -0
  26. package/dist/{fa-S7SZE37M.js → fa-DJ6WTFTJ.js} +32 -6
  27. package/dist/fa-DJ6WTFTJ.js.map +1 -0
  28. package/dist/{fi-CBL3NIXN.js → fi-4S7H7W7U.js} +32 -6
  29. package/dist/fi-4S7H7W7U.js.map +1 -0
  30. package/dist/{fr-EABUHV6S.js → fr-6UJSYHXC.js} +32 -6
  31. package/dist/fr-6UJSYHXC.js.map +1 -0
  32. package/dist/{he-THWD244Y.js → he-ZZJOHJX2.js} +32 -6
  33. package/dist/he-ZZJOHJX2.js.map +1 -0
  34. package/dist/{hi-GHGFZJ44.js → hi-HZJTAW7U.js} +32 -6
  35. package/dist/hi-HZJTAW7U.js.map +1 -0
  36. package/dist/{id-POZOUMDW.js → id-E3I6ILEM.js} +32 -6
  37. package/dist/id-E3I6ILEM.js.map +1 -0
  38. package/dist/index.css +140 -94
  39. package/dist/index.css.map +1 -1
  40. package/dist/index.d.ts +85 -24
  41. package/dist/index.js +1782 -1697
  42. package/dist/index.js.map +1 -1
  43. package/dist/{it-KDYJADSH.js → it-ULAPAD7U.js} +32 -6
  44. package/dist/it-ULAPAD7U.js.map +1 -0
  45. package/dist/{ja-Z5Z6ZF3P.js → ja-SAHZQ4CZ.js} +32 -6
  46. package/dist/ja-SAHZQ4CZ.js.map +1 -0
  47. package/dist/{ko-7X3XUXRN.js → ko-DFU2ADQ4.js} +32 -6
  48. package/dist/ko-DFU2ADQ4.js.map +1 -0
  49. package/dist/{ms-BTWEIW43.js → ms-NWL76XNT.js} +32 -6
  50. package/dist/ms-NWL76XNT.js.map +1 -0
  51. package/dist/{nl-IS2CGF5I.js → nl-ATCM76WN.js} +32 -6
  52. package/dist/nl-ATCM76WN.js.map +1 -0
  53. package/dist/{no-AAMEVA26.js → no-UIAQ5RJF.js} +32 -6
  54. package/dist/no-UIAQ5RJF.js.map +1 -0
  55. package/dist/{pl-PVXUQYFT.js → pl-NOECQDXD.js} +32 -6
  56. package/dist/pl-NOECQDXD.js.map +1 -0
  57. package/dist/{pt-3ITQ76TL.js → pt-SVWIIUPC.js} +32 -6
  58. package/dist/pt-SVWIIUPC.js.map +1 -0
  59. package/dist/{ro-FRB4IIVS.js → ro-NR2DRTZG.js} +32 -6
  60. package/dist/ro-NR2DRTZG.js.map +1 -0
  61. package/dist/{sv-DS3RO24M.js → sv-STVJ37JP.js} +32 -6
  62. package/dist/sv-STVJ37JP.js.map +1 -0
  63. package/dist/test-utils.js +5 -3
  64. package/dist/test-utils.js.map +1 -1
  65. package/dist/{th-AX66MWWB.js → th-UWQR4K54.js} +32 -6
  66. package/dist/th-UWQR4K54.js.map +1 -0
  67. package/dist/{tr-7KTB67TT.js → tr-WNXZSD27.js} +32 -6
  68. package/dist/tr-WNXZSD27.js.map +1 -0
  69. package/dist/{uk-SMQS2MAQ.js → uk-SJRMB47Y.js} +32 -6
  70. package/dist/uk-SJRMB47Y.js.map +1 -0
  71. package/dist/{vi-D3JXL2EZ.js → vi-TMRQFES2.js} +32 -6
  72. package/dist/vi-TMRQFES2.js.map +1 -0
  73. package/dist/{zh-S754AWFS.js → zh-QOL3LYEM.js} +32 -6
  74. package/dist/zh-QOL3LYEM.js.map +1 -0
  75. package/package.json +8 -8
  76. package/src/components/AssistProgress.tsx +42 -30
  77. package/src/components/EntityFoundLog.tsx +38 -0
  78. package/src/components/StatusDisplay.css +35 -35
  79. package/src/components/__tests__/AssistProgress.test.tsx +86 -28
  80. package/src/components/annotation/annotations.css +1 -1
  81. package/src/components/modals/SearchModal.css +5 -5
  82. package/src/components/pdf-annotation/PdfAnnotationCanvas.css +143 -6
  83. package/src/components/pdf-annotation/PdfAnnotationCanvas.tsx +689 -198
  84. package/src/components/pdf-annotation/__tests__/PdfAnnotationCanvas.test.tsx +1008 -3
  85. package/src/components/pdf-annotation/__tests__/estimate-slot-height.test.ts +53 -0
  86. package/src/components/pdf-annotation/estimate-slot-height.ts +31 -0
  87. package/src/components/resource/AnnotateView.tsx +14 -7
  88. package/src/components/resource/BrowseView.tsx +2 -7
  89. package/src/components/resource/DownloadFileLink.tsx +49 -0
  90. package/src/components/resource/__tests__/AnnotateView.focus.test.tsx +58 -0
  91. package/src/components/resource/__tests__/browse-renderers.dispatch.test.tsx +33 -0
  92. package/src/components/resource/__tests__/download-link.test.tsx +129 -0
  93. package/src/components/resource/annotate-renderers.tsx +10 -1
  94. package/src/components/resource/browse-renderers.tsx +10 -1
  95. package/src/components/resource/panels/AssistSection.css +0 -43
  96. package/src/components/resource/panels/AssistSection.tsx +11 -2
  97. package/src/components/resource/panels/AssistShell.tsx +5 -1
  98. package/src/components/resource/panels/ReferencesPanel.tsx +12 -13
  99. package/src/components/resource/panels/TaggingPanel.tsx +21 -1
  100. package/src/components/resource/panels/__tests__/AssistSection.test.tsx +2 -2
  101. package/src/components/resource/panels/__tests__/AssistShell.test.tsx +9 -4
  102. package/src/components/resource/panels/__tests__/HighlightPanel.annotationProgress.test.tsx +1 -1
  103. package/src/components/resource/panels/__tests__/ReferencesPanel.test.tsx +26 -0
  104. package/src/features/auth/auth.css +10 -10
  105. package/src/features/resource-viewer/__tests__/ResourceViewerPage.test.tsx +58 -3
  106. package/src/features/resource-viewer/components/ResourceViewerPage.tsx +18 -7
  107. package/src/styles/core/inputs.css +1 -1
  108. package/src/styles/features/compose.css +1 -1
  109. package/src/styles/features/resource-viewer.css +1 -1
  110. package/src/styles/features/static-pages.css +11 -11
  111. package/src/styles/motivations/motivation-comment.css +2 -2
  112. package/src/styles/motivations/motivation-reference.css +2 -2
  113. package/src/styles/patterns/panels-base.css +4 -4
  114. package/src/styles/utilities/motion.css +15 -15
  115. package/src/styles/variables.css +29 -1
  116. package/translations/ar.json +27 -5
  117. package/translations/bn.json +27 -5
  118. package/translations/cs.json +27 -5
  119. package/translations/da.json +27 -5
  120. package/translations/de.json +27 -5
  121. package/translations/el.json +27 -5
  122. package/translations/en.json +27 -5
  123. package/translations/es.json +27 -5
  124. package/translations/fa.json +27 -5
  125. package/translations/fi.json +27 -5
  126. package/translations/fr.json +27 -5
  127. package/translations/he.json +27 -5
  128. package/translations/hi.json +27 -5
  129. package/translations/id.json +27 -5
  130. package/translations/it.json +27 -5
  131. package/translations/ja.json +27 -5
  132. package/translations/ko.json +27 -5
  133. package/translations/ms.json +27 -5
  134. package/translations/nl.json +27 -5
  135. package/translations/no.json +27 -5
  136. package/translations/pl.json +27 -5
  137. package/translations/pt.json +27 -5
  138. package/translations/ro.json +27 -5
  139. package/translations/sv.json +27 -5
  140. package/translations/th.json +27 -5
  141. package/translations/tr.json +27 -5
  142. package/translations/uk.json +27 -5
  143. package/translations/vi.json +27 -5
  144. package/translations/zh.json +27 -5
  145. package/dist/PdfAnnotationCanvas.client-SU5KNT7G.css +0 -98
  146. package/dist/PdfAnnotationCanvas.client-SU5KNT7G.css.map +0 -1
  147. package/dist/PdfAnnotationCanvas.client-V7Q3BEEQ.js +0 -427
  148. package/dist/PdfAnnotationCanvas.client-V7Q3BEEQ.js.map +0 -1
  149. package/dist/ar-JRTKCMTF.js.map +0 -1
  150. package/dist/bn-LO6EDSCC.js.map +0 -1
  151. package/dist/chunk-4QMTEPQ3.js.map +0 -1
  152. package/dist/chunk-5Y5JDCKC.js.map +0 -1
  153. package/dist/cs-LCHHOR4O.js.map +0 -1
  154. package/dist/da-TARGPMJR.js.map +0 -1
  155. package/dist/de-SBH4QBPJ.js.map +0 -1
  156. package/dist/el-2D2OLGWB.js.map +0 -1
  157. package/dist/es-U6YK2LX6.js.map +0 -1
  158. package/dist/fa-S7SZE37M.js.map +0 -1
  159. package/dist/fi-CBL3NIXN.js.map +0 -1
  160. package/dist/fr-EABUHV6S.js.map +0 -1
  161. package/dist/he-THWD244Y.js.map +0 -1
  162. package/dist/hi-GHGFZJ44.js.map +0 -1
  163. package/dist/id-POZOUMDW.js.map +0 -1
  164. package/dist/it-KDYJADSH.js.map +0 -1
  165. package/dist/ja-Z5Z6ZF3P.js.map +0 -1
  166. package/dist/ko-7X3XUXRN.js.map +0 -1
  167. package/dist/ms-BTWEIW43.js.map +0 -1
  168. package/dist/nl-IS2CGF5I.js.map +0 -1
  169. package/dist/no-AAMEVA26.js.map +0 -1
  170. package/dist/pl-PVXUQYFT.js.map +0 -1
  171. package/dist/pt-3ITQ76TL.js.map +0 -1
  172. package/dist/ro-FRB4IIVS.js.map +0 -1
  173. package/dist/sv-DS3RO24M.js.map +0 -1
  174. package/dist/th-AX66MWWB.js.map +0 -1
  175. package/dist/tr-7KTB67TT.js.map +0 -1
  176. package/dist/uk-SMQS2MAQ.js.map +0 -1
  177. package/dist/vi-D3JXL2EZ.js.map +0 -1
  178. package/dist/zh-S754AWFS.js.map +0 -1
  179. /package/dist/{en-QFIEG3CA.js.map → en-3FCBW3YD.js.map} +0 -0
@@ -1,6 +1,21 @@
1
1
  'use client';
2
2
 
3
3
  // translations/en.json
4
+ var AssistProgress = {
5
+ close: "Close",
6
+ paramsTitle: "Request Parameters:",
7
+ processing: "Current: {{label}}"
8
+ };
9
+ var PdfViewer = {
10
+ loadFailed: "Failed to load PDF",
11
+ loading: "Loading PDF...",
12
+ next: "Next",
13
+ pageLoadFailed: "Failed to load page",
14
+ pageOf: "Page {{page}} of {{total}}",
15
+ pagination: "Page navigation",
16
+ previous: "Previous",
17
+ viewerLoading: "Loading PDF viewer..."
18
+ };
4
19
  var Toolbar = {
5
20
  annotations: "Annotations",
6
21
  history: "History",
@@ -107,7 +122,9 @@ var CommentsPanel = {
107
122
  densityDense: "Dense",
108
123
  fragmentSelected: "Fragment selected",
109
124
  imageRegionSelected: "Image region selected",
110
- closeProgress: "Close"
125
+ complete: "Annotation complete!",
126
+ failed: "Annotation failed",
127
+ densityPerWords: "{{density}} per 2000 words"
111
128
  };
112
129
  var HighlightPanel = {
113
130
  title: "Highlights",
@@ -122,7 +139,9 @@ var HighlightPanel = {
122
139
  densityLabel: "Density",
123
140
  densitySparse: "Sparse",
124
141
  densityDense: "Dense",
125
- closeProgress: "Close"
142
+ complete: "Annotation complete!",
143
+ failed: "Annotation failed",
144
+ densityPerWords: "{{density}} per 2000 words"
126
145
  };
127
146
  var AssessmentPanel = {
128
147
  title: "Assessments",
@@ -147,7 +166,9 @@ var AssessmentPanel = {
147
166
  densityDense: "Dense",
148
167
  fragmentSelected: "Fragment selected",
149
168
  imageRegionSelected: "Image region selected",
150
- closeProgress: "Close"
169
+ complete: "Annotation complete!",
170
+ failed: "Annotation failed",
171
+ densityPerWords: "{{density}} per 2000 words"
151
172
  };
152
173
  var TaggingPanel = {
153
174
  title: "Tags",
@@ -166,7 +187,9 @@ var TaggingPanel = {
166
187
  selectCategory: "Select Category",
167
188
  chooseCategory: "Choose a category...",
168
189
  fragmentSelected: "Fragment selected",
169
- imageRegionSelected: "Image region selected"
190
+ imageRegionSelected: "Image region selected",
191
+ complete: "Annotation complete!",
192
+ failed: "Annotation failed"
170
193
  };
171
194
  var UnifiedAnnotationsPanel = {
172
195
  title: "Annotations",
@@ -222,7 +245,6 @@ var ReferencesPanel = {
222
245
  complete: "Annotation complete!",
223
246
  failed: "Annotation failed",
224
247
  current: "Current: {{entityType}}",
225
- closeProgress: "Close",
226
248
  loading: "loading...",
227
249
  loadingEllipsis: "Loading...",
228
250
  untitledResource: "Untitled Resource",
@@ -407,6 +429,8 @@ var ReferenceWizard = {
407
429
  search: "Search"
408
430
  };
409
431
  var en_default = {
432
+ AssistProgress,
433
+ PdfViewer,
410
434
  Toolbar,
411
435
  ResourceInfoPanel,
412
436
  CollaborationPanel,
@@ -429,6 +453,8 @@ var en_default = {
429
453
  };
430
454
 
431
455
  export {
456
+ AssistProgress,
457
+ PdfViewer,
432
458
  Toolbar,
433
459
  ResourceInfoPanel,
434
460
  CollaborationPanel,
@@ -450,4 +476,4 @@ export {
450
476
  ReferenceWizard,
451
477
  en_default
452
478
  };
453
- //# sourceMappingURL=chunk-5Y5JDCKC.js.map
479
+ //# sourceMappingURL=chunk-L3WKRWP3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../translations/en.json"],"sourcesContent":["{\n \"AssistProgress\": {\n \"close\": \"Close\",\n \"paramsTitle\": \"Request Parameters:\",\n \"processing\": \"Current: {{label}}\"\n },\n \"PdfViewer\": {\n \"loadFailed\": \"Failed to load PDF\",\n \"loading\": \"Loading PDF...\",\n \"next\": \"Next\",\n \"pageLoadFailed\": \"Failed to load page\",\n \"pageOf\": \"Page {{page}} of {{total}}\",\n \"pagination\": \"Page navigation\",\n \"previous\": \"Previous\",\n \"viewerLoading\": \"Loading PDF viewer...\"\n },\n \"Toolbar\": {\n \"annotations\": \"Annotations\",\n \"history\": \"History\",\n \"resourceInfo\": \"Resource Info\",\n \"collaboration\": \"Collaboration\",\n \"userAccount\": \"User Account\",\n \"settings\": \"Settings\",\n \"knowledgeBase\": \"Knowledge Base\"\n },\n \"ResourceInfoPanel\": {\n \"title\": \"Resource Info\",\n \"locale\": \"Locale\",\n \"notSpecified\": \"Not specified\",\n \"entityTypeTags\": \"Entity Type Tags\",\n \"representation\": \"Representation\",\n \"mediaType\": \"Media Type\",\n \"byteSize\": \"Size\",\n \"storageUri\": \"Storage\",\n \"clone\": \"Clone\",\n \"cloneDescription\": \"Generate a shareable clone link for this resource\",\n \"generate\": \"Generate\",\n \"generateDescription\": \"Generate a new resource from this one's context\",\n \"archive\": \"Archive\",\n \"archiveDescription\": \"Move this resource to archived status\",\n \"unarchive\": \"Unarchive\",\n \"unarchiveDescription\": \"Restore this resource to active status\",\n \"provenance\": \"Provenance\",\n \"createdAt\": \"Created\",\n \"modifiedAt\": \"Modified\",\n \"attributedTo\": \"Attributed to\",\n \"derivedFrom\": \"Derived from\"\n },\n \"CollaborationPanel\": {\n \"title\": \"Collaboration\",\n \"connectionStatus\": \"Connection Status\",\n \"live\": \"Live\",\n \"disconnected\": \"Disconnected\",\n \"events\": \"{{count}} events\",\n \"lastSync\": \"Last sync:\",\n \"noActivity\": \"No activity yet\",\n \"justNow\": \"Just now\",\n \"secondsAgo\": \"{{count}} seconds ago\",\n \"minuteAgo\": \"1 minute ago\",\n \"minutesAgo\": \"{{count}} minutes ago\",\n \"hourAgo\": \"1 hour ago\",\n \"hoursAgo\": \"{{count}} hours ago\",\n \"realtimeActive\": \"Real-time updates are active\",\n \"reconnecting\": \"Reconnecting to server...\",\n \"sharing\": \"Sharing\",\n \"collaborationComingSoon\": \"Collaboration features coming soon\"\n },\n \"AnnotationHistory\": {\n \"history\": \"History\",\n \"loading\": \"Loading...\",\n \"user\": \"User\",\n \"viewOriginal\": \"View original\",\n \"viewAnnotation\": \"View annotation: {{content}}\",\n \"resourceCreated\": \"Created Resource\",\n \"resourceCloned\": \"Cloned\",\n \"resourceArchived\": \"Archived\",\n \"resourceUnarchived\": \"Unarchived\",\n \"highlightAdded\": \"Highlight Added\",\n \"highlightRemoved\": \"Highlight Removed\",\n \"referenceCreated\": \"Reference Created\",\n \"referenceResolved\": \"Reference Resolved\",\n \"referenceDeleted\": \"Reference Deleted\",\n \"entitytagAdded\": \"Tag Added\",\n \"entitytagRemoved\": \"Tag Removed\",\n \"assessmentAdded\": \"Assessment Added\",\n \"assessmentRemoved\": \"Assessment Removed\",\n \"annotationAdded\": \"Annotation Added\",\n \"annotationRemoved\": \"Annotation Removed\",\n \"annotationBodyUpdated\": \"Annotation Updated\",\n \"jobEvent\": \"Job Event\",\n \"embeddingComputed\": \"Embedding Computed\",\n \"justNow\": \"just now\",\n \"minutesAgo\": \"{{count}}m ago\",\n \"hoursAgo\": \"{{count}}h ago\",\n \"daysAgo\": \"{{count}}d ago\",\n \"failed\": \"Could not load history.\",\n \"retry\": \"Try again\"\n },\n \"CommentsPanel\": {\n \"title\": \"Comments\",\n \"noComments\": \"No comments yet. Select text and click Comment to add one.\",\n \"commentPlaceholder\": \"Type your comment here...\",\n \"save\": \"Save\",\n \"cancel\": \"Cancel\",\n \"edit\": \"Edit\",\n \"annotateComments\": \"Annotate Comments\",\n \"instructions\": \"Instructions\",\n \"optional\": \"(optional)\",\n \"instructionsPlaceholder\": \"e.g., Focus on technical terminology...\",\n \"annotate\": \"Annotate\",\n \"annotating\": \"Annotating...\",\n \"toneLabel\": \"Tone\",\n \"toneOptional\": \"(optional)\",\n \"toneScholarly\": \"Scholarly\",\n \"toneExplanatory\": \"Explanatory\",\n \"toneConversational\": \"Conversational\",\n \"toneTechnical\": \"Technical\",\n \"densityLabel\": \"Density\",\n \"densitySparse\": \"Sparse\",\n \"densityDense\": \"Dense\",\n \"fragmentSelected\": \"Fragment selected\",\n \"imageRegionSelected\": \"Image region selected\",\n \"complete\": \"Annotation complete!\",\n \"failed\": \"Annotation failed\",\n \"densityPerWords\": \"{{density}} per 2000 words\"\n },\n \"HighlightPanel\": {\n \"title\": \"Highlights\",\n \"noHighlights\": \"No highlights yet. Use AI annotation to find important passages.\",\n \"annotateHighlights\": \"Annotate Highlights\",\n \"instructions\": \"Instructions\",\n \"optional\": \"(optional)\",\n \"instructionsPlaceholder\": \"e.g., Focus on key technical concepts...\",\n \"annotate\": \"Annotate\",\n \"annotating\": \"Annotating...\",\n \"cancel\": \"Cancel\",\n \"densityLabel\": \"Density\",\n \"densitySparse\": \"Sparse\",\n \"densityDense\": \"Dense\",\n \"complete\": \"Annotation complete!\",\n \"failed\": \"Annotation failed\",\n \"densityPerWords\": \"{{density}} per 2000 words\"\n },\n \"AssessmentPanel\": {\n \"title\": \"Assessments\",\n \"noAssessments\": \"No assessments yet. Use AI annotation to evaluate passages.\",\n \"assessmentPlaceholder\": \"Type your assessment here...\",\n \"save\": \"Save\",\n \"cancel\": \"Cancel\",\n \"annotateAssessments\": \"Annotate Assessments\",\n \"instructions\": \"Instructions\",\n \"optional\": \"(optional)\",\n \"instructionsPlaceholder\": \"e.g., Evaluate claims for accuracy and evidence...\",\n \"annotate\": \"Annotate\",\n \"annotating\": \"Annotating...\",\n \"toneLabel\": \"Tone\",\n \"toneOptional\": \"(optional)\",\n \"toneAnalytical\": \"Analytical\",\n \"toneCritical\": \"Critical\",\n \"toneBalanced\": \"Balanced\",\n \"toneConstructive\": \"Constructive\",\n \"densityLabel\": \"Density\",\n \"densitySparse\": \"Sparse\",\n \"densityDense\": \"Dense\",\n \"fragmentSelected\": \"Fragment selected\",\n \"imageRegionSelected\": \"Image region selected\",\n \"complete\": \"Annotation complete!\",\n \"failed\": \"Annotation failed\",\n \"densityPerWords\": \"{{density}} per 2000 words\"\n },\n \"TaggingPanel\": {\n \"title\": \"Tags\",\n \"noTags\": \"No tags yet. Use AI annotation to identify structural roles.\",\n \"noSchemas\": \"No tag schemas registered for this knowledge base. A KB administrator must register at least one structural-analysis schema (e.g. via the `register-tag-schemas` skill) before tagging can be used.\",\n \"annotateTags\": \"Annotate Tags\",\n \"selectSchema\": \"Select Framework\",\n \"selectCategories\": \"Select Categories\",\n \"annotate\": \"Annotate\",\n \"annotating\": \"Annotating...\",\n \"cancel\": \"Cancel\",\n \"selectAll\": \"Select All\",\n \"deselectAll\": \"Deselect All\",\n \"categoriesSelected\": \"{count, plural, =0 {No categories selected} =1 {1 category selected} other {# categories selected}}\",\n \"createTagForSelection\": \"Create Tag for Selection\",\n \"selectCategory\": \"Select Category\",\n \"chooseCategory\": \"Choose a category...\",\n \"fragmentSelected\": \"Fragment selected\",\n \"imageRegionSelected\": \"Image region selected\",\n \"complete\": \"Annotation complete!\",\n \"failed\": \"Annotation failed\"\n },\n \"UnifiedAnnotationsPanel\": {\n \"title\": \"Annotations\",\n \"statistics\": \"Statistics\",\n \"highlight\": \"Highlights\",\n \"reference\": \"References\",\n \"assessment\": \"Assessments\",\n \"comment\": \"Comments\",\n \"tag\": \"Tags\",\n \"annotationsFailed\": \"Could not load annotations.\",\n \"retry\": \"Try again\"\n },\n \"StatisticsPanel\": {\n \"title\": \"Statistics\",\n \"highlights\": \"Highlights\",\n \"comments\": \"Comments\",\n \"assessments\": \"Assessments\",\n \"tags\": \"Tags\",\n \"references\": \"References\",\n \"stub\": \"Stub\",\n \"resolved\": \"Resolved\",\n \"entityTypes\": \"Entity Types\"\n },\n \"ReferencesPanel\": {\n \"title\": \"References\",\n \"noReferences\": \"No references yet. Select text to create references to other resources.\",\n \"outgoingReferences\": \"Outgoing References\",\n \"incomingReferences\": \"Incoming References\",\n \"noIncomingReferences\": \"No incoming references\",\n \"stub\": \"Stub reference (not linked)\",\n \"resolved\": \"Resolved reference (linked)\",\n \"open\": \"Open\",\n \"unlink\": \"Unlink\",\n \"resolve\": \"Resolve Reference\",\n \"cancel\": \"Cancel\",\n \"createReference\": \"Create Reference\",\n \"entityTypesOptional\": \"Entity Types (Optional)\",\n \"fragmentSelected\": \"Fragment selected\",\n \"imageRegionSelected\": \"Image region selected\",\n \"annotateReferences\": \"Annotate References\",\n \"selectEntityTypes\": \"Entity types:\",\n \"select\": \"Select\",\n \"deselect\": \"Deselect\",\n \"noEntityTypes\": \"No entity types available\",\n \"typesSelected\": \"{count, plural, =1 {1 type selected} other {# types selected}}\",\n \"annotate\": \"Annotate\",\n \"annotating\": \"Annotating...\",\n \"includeDescriptiveReferences\": \"Include descriptive references\",\n \"descriptiveReferencesTooltip\": \"Also find phrases like 'the CEO', 'the tech giant', 'the physicist' (in addition to names)\",\n \"annotationProgressTitle\": \"Annotating Entity References\",\n \"cancelAnnotation\": \"Cancel annotation\",\n \"found\": \"{{count}} found\",\n \"complete\": \"Annotation complete!\",\n \"failed\": \"Annotation failed\",\n \"current\": \"Current: {{entityType}}\",\n \"loading\": \"loading...\",\n \"loadingEllipsis\": \"Loading...\",\n \"untitledResource\": \"Untitled Resource\",\n \"noText\": \"No text\",\n \"incomingReferencesFailed\": \"Could not load incoming references.\",\n \"retry\": \"Try again\",\n \"entityTypesFailed\": \"Could not load entity types.\"\n },\n \"KeyboardShortcuts\": {\n \"title\": \"Keyboard Shortcuts\",\n \"closeDialog\": \"Close dialog\",\n \"or\": \"or\",\n \"navigationTitle\": \"Navigation\",\n \"navOpenSearch\": \"Open global search\",\n \"navOpenSearchAlt\": \"Open global search (alternative)\",\n \"navCreateResource\": \"Create new resource\",\n \"navCloseOverlays\": \"Close all overlays (double press)\",\n \"navShowHelp\": \"Show keyboard shortcuts help\",\n \"sidebarTitle\": \"Knowledge Sidebar\",\n \"sidebarCollapse\": \"Collapse sidebar\",\n \"sidebarExpand\": \"Expand sidebar\",\n \"sidebarPickup\": \"Pick up resource tab (when focused)\",\n \"sidebarMove\": \"Move resource tab (when dragging)\",\n \"sidebarDrop\": \"Drop resource tab (when dragging)\",\n \"sidebarCancel\": \"Cancel drag operation\",\n \"annotationsTitle\": \"Resource Annotations\",\n \"annotHighlight\": \"Create highlight from annotation (direct)\",\n \"annotReference\": \"Open reference popup for annotation\",\n \"annotDelete\": \"Delete focused annotation\",\n \"annotNavigate\": \"Navigate through annotations\",\n \"annotNavigateBack\": \"Navigate annotations backward\",\n \"listsTitle\": \"Lists & Grids\",\n \"listsFilterNav\": \"Navigate entity type filters\",\n \"listsGridNav\": \"Navigate resource grid\",\n \"listsJumpFirst\": \"Jump to first item\",\n \"listsJumpLast\": \"Jump to last item\",\n \"searchModalTitle\": \"In Search Modal\",\n \"searchNav\": \"Navigate search results\",\n \"searchSelect\": \"Select result\",\n \"searchClose\": \"Close search\",\n \"modalTitle\": \"Modal Controls\",\n \"modalClose\": \"Close active modal\",\n \"modalNavForward\": \"Navigate forward through buttons\",\n \"modalNavBackward\": \"Navigate backward through buttons\",\n \"modalActivate\": \"Activate focused button\",\n \"accessibilityTitle\": \"Accessibility\",\n \"a11ySkipLinks\": \"Navigate to skip links (when at page start)\",\n \"a11yFollowLink\": \"Follow skip link\",\n \"macNote\": \"Using Mac keyboard shortcuts. ⌘ is the Command key.\",\n \"windowsNote\": \"Using Windows/Linux keyboard shortcuts. Ctrl is the Control key.\",\n \"footerHint\": \"Press {{key}} anytime to show this help\",\n \"close\": \"Close\"\n },\n \"AnnotateToolbar\": {\n \"modeGroup\": \"Mode\",\n \"browse\": \"Browse\",\n \"annotate\": \"Annotate\",\n \"selectionGroup\": \"Motivation\",\n \"clickGroup\": \"Click\",\n \"shapeGroup\": \"Shape\",\n \"none\": \"None\",\n \"linking\": \"Reference\",\n \"highlighting\": \"Highlight\",\n \"assessing\": \"Assess\",\n \"commenting\": \"Comment\",\n \"tagging\": \"Tag\",\n \"detail\": \"Detail\",\n \"follow\": \"Follow\",\n \"deleting\": \"Delete\",\n \"jsonld\": \"JSON-LD\",\n \"rectangle\": \"Rectangle\",\n \"circle\": \"Circle\",\n \"polygon\": \"Polygon\"\n },\n \"CollapsibleResourceNavigation\": {\n \"title\": \"Navigation\",\n \"collapseSidebar\": \"Collapse sidebar\",\n \"expandSidebar\": \"Expand sidebar\",\n \"dragToReorder\": \"Drag to reorder\",\n \"dragToReorderDoc\": \"Drag to reorder {{name}}\",\n \"closeResource\": \"Close resource\",\n \"dragInstructions\": \"To reorder resources: Use Tab to navigate to a resource. Press Alt+Up arrow to move up or Alt+Down arrow to move down. For drag and drop: Press space bar to pick up the item. Use arrow keys to move it. Press space bar again to drop.\"\n },\n \"ResourceViewer\": {\n \"deleteConfirmationTitle\": \"Delete Annotation\",\n \"deleteConfirmationMessage\": \"Are you sure you want to delete this annotation? This action cannot be undone.\",\n \"deleteConfirmationCancel\": \"Cancel\",\n \"deleteConfirmationDelete\": \"Delete\"\n },\n \"Settings\": {\n \"title\": \"Settings\",\n \"lineNumbers\": \"Line Numbers\",\n \"lineNumbersVisible\": \"Visible\",\n \"lineNumbersHidden\": \"Hidden\",\n \"theme\": \"Theme\",\n \"themeLight\": \"Light\",\n \"themeDark\": \"Dark\",\n \"themeSystem\": \"System\",\n \"themeSystemActive\": \"System ({{mode}})\",\n \"themeModeActive\": \"Using {{mode}} mode\",\n \"language\": \"Language\",\n \"languageHint\": \"Change language in the main navigation\",\n \"languageChanging\": \"Changing language...\",\n \"hoverDelay\": \"Hover Delay\",\n \"hoverDelayFast\": \"Fast\",\n \"hoverDelaySlow\": \"Slow\",\n \"hoverDelayDescription\": \"{{delay}}ms delay before hover effects appear\"\n },\n \"AnnotateView\": {},\n \"ResourceGenerate\": {\n \"gatherTitle\": \"Configure Gather\",\n \"reviewTitle\": \"Review Context\",\n \"configureTitle\": \"Configure Generation\",\n \"next\": \"Next\",\n \"back\": \"Back\",\n \"cancel\": \"Cancel\",\n \"gatherIntro\": \"Choose what to include in the gathered context.\",\n \"includeContent\": \"Include resource content\",\n \"includeSummary\": \"Include summary\",\n \"gatherDepth\": \"Depth\",\n \"gatherMaxResources\": \"Max resources\",\n \"gatherButton\": \"Gather\",\n \"excludeLabel\": \"Exclude from recall\",\n \"loadingContext\": \"Gathering context...\",\n \"failedContext\": \"Failed to gather context\",\n \"sourceContextLabel\": \"Resource\",\n \"connectionsLabel\": \"Connections\",\n \"citedByLabel\": \"Cited by\",\n \"resourceTitle\": \"New resource title\",\n \"resourceTitlePlaceholder\": \"Title for the generated resource...\",\n \"additionalInstructions\": \"Additional Instructions\",\n \"additionalInstructionsPlaceholder\": \"Optional guidance for the generation...\",\n \"language\": \"Language\",\n \"languageHelp\": \"Language for the generated resource\",\n \"creativity\": \"Creativity\",\n \"creativityFocused\": \"Focused\",\n \"creativityCreative\": \"Creative\",\n \"maxLength\": \"Max Length\",\n \"maxLengthHelp\": \"Maximum number of tokens\",\n \"generate\": \"Generate\",\n \"progressTitle\": \"Generating Resource\",\n \"progressCancel\": \"Cancel generation\",\n \"progressInProgress\": \"Generating…\",\n \"progressComplete\": \"Generation complete!\",\n \"progressFailed\": \"Generation failed\"\n },\n \"ReferenceWizard\": {\n \"gatherTitle\": \"Gathered Context\",\n \"configureGenerationTitle\": \"Configure Generation\",\n \"configureSearchTitle\": \"Configure Search\",\n \"searchResultsTitle\": \"Search Results\",\n \"sourceContextLabel\": \"Annotation context in resource\",\n \"connectionsLabel\": \"Peer Annotations\",\n \"citedByLabel\": \"Resource Cited By\",\n \"userHintLabel\": \"Hint\",\n \"userHintPlaceholder\": \"Describe what this annotation refers to...\",\n \"loadingContext\": \"Gathering context...\",\n \"failedContext\": \"Failed to gather context\",\n \"cancel\": \"Cancel\",\n \"generate\": \"Generate\",\n \"compose\": \"Compose\",\n \"resolutionStrategyLabel\": \"Resolution Strategy\",\n \"back\": \"Back\",\n \"link\": \"Link\",\n \"score\": \"Score\",\n \"noResults\": \"No results found\",\n \"resourceTitle\": \"Resource Title\",\n \"resourceTitlePlaceholder\": \"Enter resource title...\",\n \"additionalInstructions\": \"Additional Instructions\",\n \"additionalInstructionsPlaceholder\": \"Enter additional instructions...\",\n \"language\": \"Language\",\n \"languageHelp\": \"Language for generated content\",\n \"creativity\": \"Creativity\",\n \"creativityFocused\": \"Focused\",\n \"creativityCreative\": \"Creative\",\n \"maxLength\": \"Max Length\",\n \"maxLengthHelp\": \"Maximum number of tokens\",\n \"maxResults\": \"Max Results\",\n \"semanticScoring\": \"Semantic Scoring\",\n \"semanticScoringHelp\": \"Use AI to score results by semantic relevance\",\n \"searching\": \"Searching...\",\n \"search\": \"Search\"\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,287 @@
1
+ 'use client';
2
+ import {
3
+ en_default
4
+ } from "./chunk-L3WKRWP3.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-YTUUGK2O.js"),
16
+ "../../translations/bn.json": () => import("./bn-ASGNGPMD.js"),
17
+ "../../translations/cs.json": () => import("./cs-WMYVAOZY.js"),
18
+ "../../translations/da.json": () => import("./da-FSHHN4D6.js"),
19
+ "../../translations/de.json": () => import("./de-FJFO3TPT.js"),
20
+ "../../translations/el.json": () => import("./el-XOH4QIAG.js"),
21
+ "../../translations/en.json": () => import("./en-3FCBW3YD.js"),
22
+ "../../translations/es.json": () => import("./es-HDX4QI7E.js"),
23
+ "../../translations/fa.json": () => import("./fa-DJ6WTFTJ.js"),
24
+ "../../translations/fi.json": () => import("./fi-4S7H7W7U.js"),
25
+ "../../translations/fr.json": () => import("./fr-6UJSYHXC.js"),
26
+ "../../translations/he.json": () => import("./he-ZZJOHJX2.js"),
27
+ "../../translations/hi.json": () => import("./hi-HZJTAW7U.js"),
28
+ "../../translations/id.json": () => import("./id-E3I6ILEM.js"),
29
+ "../../translations/it.json": () => import("./it-ULAPAD7U.js"),
30
+ "../../translations/ja.json": () => import("./ja-SAHZQ4CZ.js"),
31
+ "../../translations/ko.json": () => import("./ko-DFU2ADQ4.js"),
32
+ "../../translations/ms.json": () => import("./ms-NWL76XNT.js"),
33
+ "../../translations/nl.json": () => import("./nl-ATCM76WN.js"),
34
+ "../../translations/no.json": () => import("./no-UIAQ5RJF.js"),
35
+ "../../translations/pl.json": () => import("./pl-NOECQDXD.js"),
36
+ "../../translations/pt.json": () => import("./pt-SVWIIUPC.js"),
37
+ "../../translations/ro.json": () => import("./ro-NR2DRTZG.js"),
38
+ "../../translations/sv.json": () => import("./sv-STVJ37JP.js"),
39
+ "../../translations/th.json": () => import("./th-UWQR4K54.js"),
40
+ "../../translations/tr.json": () => import("./tr-WNXZSD27.js"),
41
+ "../../translations/uk.json": () => import("./uk-SJRMB47Y.js"),
42
+ "../../translations/vi.json": () => import("./vi-TMRQFES2.js"),
43
+ "../../translations/zh.json": () => import("./zh-QOL3LYEM.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-OBQOZCJE.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":[]}
@@ -2,6 +2,21 @@
2
2
  import "./chunk-O23TLLXW.js";
3
3
 
4
4
  // translations/cs.json
5
+ var AssistProgress = {
6
+ close: "Zav\u0159\xEDt",
7
+ paramsTitle: "Parametry po\u017Eadavku:",
8
+ processing: "Aktu\xE1ln\xED: {{label}}"
9
+ };
10
+ var PdfViewer = {
11
+ loadFailed: "Nepoda\u0159ilo se na\u010D\xEDst PDF",
12
+ loading: "Na\u010D\xEDt\xE1n\xED PDF...",
13
+ next: "Dal\u0161\xED",
14
+ pageLoadFailed: "Nepoda\u0159ilo se na\u010D\xEDst str\xE1nku",
15
+ pageOf: "Strana {{page}} z {{total}}",
16
+ pagination: "Str\xE1nkov\xE1n\xED",
17
+ previous: "P\u0159edchoz\xED",
18
+ viewerLoading: "Na\u010D\xEDt\xE1n\xED prohl\xED\u017Ee\u010De PDF..."
19
+ };
5
20
  var Toolbar = {
6
21
  annotations: "Anotace",
7
22
  history: "Historie",
@@ -108,7 +123,9 @@ var CommentsPanel = {
108
123
  densityDense: "Hust\xE1",
109
124
  fragmentSelected: "Fragment vybr\xE1n",
110
125
  imageRegionSelected: "Oblast obr\xE1zku vybr\xE1na",
111
- closeProgress: "Zav\u0159\xEDt"
126
+ complete: "Anotace dokon\u010Dena!",
127
+ failed: "Anotace selhala",
128
+ densityPerWords: "{{density}} na 2000 slov"
112
129
  };
113
130
  var HighlightPanel = {
114
131
  title: "Zv\xFDrazn\u011Bn\xED",
@@ -123,7 +140,9 @@ var HighlightPanel = {
123
140
  densityLabel: "Hustota",
124
141
  densitySparse: "\u0158\xEDdk\xE1",
125
142
  densityDense: "Hust\xE1",
126
- closeProgress: "Zav\u0159\xEDt"
143
+ complete: "Anotace dokon\u010Dena!",
144
+ failed: "Anotace selhala",
145
+ densityPerWords: "{{density}} na 2000 slov"
127
146
  };
128
147
  var AssessmentPanel = {
129
148
  title: "Hodnocen\xED",
@@ -148,7 +167,9 @@ var AssessmentPanel = {
148
167
  densityDense: "Hust\xE1",
149
168
  fragmentSelected: "Fragment vybr\xE1n",
150
169
  imageRegionSelected: "Oblast obr\xE1zku vybr\xE1na",
151
- closeProgress: "Zav\u0159\xEDt"
170
+ complete: "Anotace dokon\u010Dena!",
171
+ failed: "Anotace selhala",
172
+ densityPerWords: "{{density}} na 2000 slov"
152
173
  };
153
174
  var TaggingPanel = {
154
175
  title: "\u0160t\xEDtky",
@@ -167,7 +188,9 @@ var TaggingPanel = {
167
188
  selectCategory: "Vybrat kategorii",
168
189
  chooseCategory: "Zvolte kategorii...",
169
190
  fragmentSelected: "Fragment vybr\xE1n",
170
- imageRegionSelected: "Oblast obr\xE1zku vybr\xE1na"
191
+ imageRegionSelected: "Oblast obr\xE1zku vybr\xE1na",
192
+ complete: "Anotace dokon\u010Dena!",
193
+ failed: "Anotace selhala"
171
194
  };
172
195
  var UnifiedAnnotationsPanel = {
173
196
  title: "Anotace",
@@ -223,7 +246,6 @@ var ReferencesPanel = {
223
246
  complete: "Anotace dokon\u010Dena!",
224
247
  failed: "Anotace selhala",
225
248
  current: "Aktu\xE1ln\xED: {{entityType}}",
226
- closeProgress: "Zav\u0159\xEDt",
227
249
  loading: "na\u010D\xEDt\xE1n\xED...",
228
250
  loadingEllipsis: "Na\u010D\xEDt\xE1n\xED...",
229
251
  untitledResource: "Zdroj bez n\xE1zvu",
@@ -408,6 +430,8 @@ var ReferenceWizard = {
408
430
  search: "Hledat"
409
431
  };
410
432
  var cs_default = {
433
+ AssistProgress,
434
+ PdfViewer,
411
435
  Toolbar,
412
436
  ResourceInfoPanel,
413
437
  CollaborationPanel,
@@ -433,11 +457,13 @@ export {
433
457
  AnnotateView,
434
458
  AnnotationHistory,
435
459
  AssessmentPanel,
460
+ AssistProgress,
436
461
  CollaborationPanel,
437
462
  CollapsibleResourceNavigation,
438
463
  CommentsPanel,
439
464
  HighlightPanel,
440
465
  KeyboardShortcuts,
466
+ PdfViewer,
441
467
  ReferenceWizard,
442
468
  ReferencesPanel,
443
469
  ResourceGenerate,
@@ -450,4 +476,4 @@ export {
450
476
  UnifiedAnnotationsPanel,
451
477
  cs_default as default
452
478
  };
453
- //# sourceMappingURL=cs-LCHHOR4O.js.map
479
+ //# sourceMappingURL=cs-WMYVAOZY.js.map