@semiont/react-ui 0.4.14 → 0.4.16

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 (169) hide show
  1. package/README.md +18 -12
  2. package/dist/KnowledgeBaseSessionContext-BNNunwzO.d.mts +175 -0
  3. package/dist/{PdfAnnotationCanvas.client-CW6SKH2U.mjs → PdfAnnotationCanvas.client-CHDCGQBR.mjs} +3 -3
  4. package/dist/{ar-R4CRNXEF.mjs → ar-3W37O3R3.mjs} +9 -3
  5. package/dist/ar-3W37O3R3.mjs.map +1 -0
  6. package/dist/{bn-CZKGRHTA.mjs → bn-JZTJLMVE.mjs} +9 -3
  7. package/dist/bn-JZTJLMVE.mjs.map +1 -0
  8. package/dist/chunk-FAI3S4BM.mjs +865 -0
  9. package/dist/chunk-FAI3S4BM.mjs.map +1 -0
  10. package/dist/{chunk-HVMAGUFA.mjs → chunk-NOD3NCXE.mjs} +3 -1
  11. package/dist/chunk-NOD3NCXE.mjs.map +1 -0
  12. package/dist/{chunk-HNZOXH4L.mjs → chunk-OZICDVH7.mjs} +5 -3
  13. package/dist/chunk-OZICDVH7.mjs.map +1 -0
  14. package/dist/{chunk-BQJWOK4C.mjs → chunk-VN5NY4SN.mjs} +9 -8
  15. package/dist/chunk-VN5NY4SN.mjs.map +1 -0
  16. package/dist/{cs-4WIB2IHH.mjs → cs-XYHH7HNE.mjs} +9 -3
  17. package/dist/cs-XYHH7HNE.mjs.map +1 -0
  18. package/dist/{da-JWYEUYPX.mjs → da-MZKIECVT.mjs} +9 -3
  19. package/dist/da-MZKIECVT.mjs.map +1 -0
  20. package/dist/{de-GWUQZGER.mjs → de-AYXTMRQW.mjs} +9 -3
  21. package/dist/de-AYXTMRQW.mjs.map +1 -0
  22. package/dist/{el-DM2GT7P5.mjs → el-A6CVQWAW.mjs} +9 -3
  23. package/dist/el-A6CVQWAW.mjs.map +1 -0
  24. package/dist/{en-IUV4ZXKH.mjs → en-YPQQBI4T.mjs} +2 -2
  25. package/dist/{es-6LVQIM3D.mjs → es-M2HXLJGT.mjs} +9 -3
  26. package/dist/es-M2HXLJGT.mjs.map +1 -0
  27. package/dist/{fa-IRUJY3QI.mjs → fa-V6JZJDYP.mjs} +9 -3
  28. package/dist/fa-V6JZJDYP.mjs.map +1 -0
  29. package/dist/{fi-53FBOEVT.mjs → fi-ONDTZ5H7.mjs} +9 -3
  30. package/dist/fi-ONDTZ5H7.mjs.map +1 -0
  31. package/dist/{fr-Q5KY7QL6.mjs → fr-PAPV4H4G.mjs} +9 -3
  32. package/dist/fr-PAPV4H4G.mjs.map +1 -0
  33. package/dist/{he-HJNKULBY.mjs → he-F6VTLJLW.mjs} +9 -3
  34. package/dist/he-F6VTLJLW.mjs.map +1 -0
  35. package/dist/{hi-UYZ4X6CR.mjs → hi-CFUAV4BF.mjs} +9 -3
  36. package/dist/hi-CFUAV4BF.mjs.map +1 -0
  37. package/dist/{id-UAQMH6U2.mjs → id-NBKLCCI7.mjs} +9 -3
  38. package/dist/id-NBKLCCI7.mjs.map +1 -0
  39. package/dist/index.d.mts +141 -169
  40. package/dist/index.mjs +2394 -2116
  41. package/dist/index.mjs.map +1 -1
  42. package/dist/{it-C7QEBNFA.mjs → it-SLSOWVVU.mjs} +9 -3
  43. package/dist/it-SLSOWVVU.mjs.map +1 -0
  44. package/dist/{ja-THS6AOSJ.mjs → ja-L5IG4ECE.mjs} +9 -3
  45. package/dist/ja-L5IG4ECE.mjs.map +1 -0
  46. package/dist/{ko-XKK3TWQG.mjs → ko-QYMTULKK.mjs} +9 -3
  47. package/dist/ko-QYMTULKK.mjs.map +1 -0
  48. package/dist/{ms-GSK7LIF7.mjs → ms-5DGSFKM2.mjs} +9 -3
  49. package/dist/ms-5DGSFKM2.mjs.map +1 -0
  50. package/dist/{nl-KUBWITGY.mjs → nl-VZPCGONO.mjs} +9 -3
  51. package/dist/nl-VZPCGONO.mjs.map +1 -0
  52. package/dist/{no-ECWZUHT6.mjs → no-MF6F352I.mjs} +9 -3
  53. package/dist/no-MF6F352I.mjs.map +1 -0
  54. package/dist/{pl-PLVWSZWS.mjs → pl-WIK72JUO.mjs} +9 -3
  55. package/dist/pl-WIK72JUO.mjs.map +1 -0
  56. package/dist/{pt-AL74ZTKB.mjs → pt-RRP5ZF6A.mjs} +9 -3
  57. package/dist/pt-RRP5ZF6A.mjs.map +1 -0
  58. package/dist/{ro-WTPHLHGS.mjs → ro-XHQLC3T7.mjs} +9 -3
  59. package/dist/ro-XHQLC3T7.mjs.map +1 -0
  60. package/dist/{sv-QCLI7SG4.mjs → sv-EWULDN6E.mjs} +9 -3
  61. package/dist/sv-EWULDN6E.mjs.map +1 -0
  62. package/dist/test-utils.d.mts +13 -62
  63. package/dist/test-utils.mjs +41 -22
  64. package/dist/test-utils.mjs.map +1 -1
  65. package/dist/{th-WCKVZU6U.mjs → th-TGOBHFG4.mjs} +9 -3
  66. package/dist/th-TGOBHFG4.mjs.map +1 -0
  67. package/dist/{tr-2CAFS2XS.mjs → tr-LMMPBMV7.mjs} +9 -3
  68. package/dist/tr-LMMPBMV7.mjs.map +1 -0
  69. package/dist/{uk-TDE4JLCY.mjs → uk-IPGRRJY6.mjs} +9 -3
  70. package/dist/uk-IPGRRJY6.mjs.map +1 -0
  71. package/dist/{vi-KKXZ4PCX.mjs → vi-Q676OJQS.mjs} +9 -3
  72. package/dist/vi-Q676OJQS.mjs.map +1 -0
  73. package/dist/{zh-VH4XN5PV.mjs → zh-F3MTWQDX.mjs} +9 -3
  74. package/dist/zh-F3MTWQDX.mjs.map +1 -0
  75. package/package.json +5 -3
  76. package/src/components/ProtectedErrorBoundary.tsx +95 -0
  77. package/src/components/__tests__/ProtectedErrorBoundary.test.tsx +197 -0
  78. package/src/components/modals/PermissionDeniedModal.tsx +140 -0
  79. package/src/components/modals/ReferenceWizardModal.tsx +3 -2
  80. package/src/components/modals/SessionExpiredModal.tsx +101 -0
  81. package/src/components/modals/__tests__/PermissionDeniedModal.test.tsx +150 -0
  82. package/src/components/modals/__tests__/SessionExpiredModal.test.tsx +115 -0
  83. package/src/components/resource/AnnotationHistory.tsx +5 -6
  84. package/src/components/resource/HistoryEvent.tsx +9 -8
  85. package/src/components/resource/__tests__/AnnotationHistory.test.tsx +33 -34
  86. package/src/components/resource/__tests__/HistoryEvent.test.tsx +18 -19
  87. package/src/components/resource/__tests__/event-formatting.test.ts +70 -94
  88. package/src/components/resource/event-formatting.ts +92 -56
  89. package/src/components/resource/panels/ReferenceEntry.tsx +7 -5
  90. package/src/components/resource/panels/ResourceInfoPanel.tsx +18 -6
  91. package/src/components/resource/panels/__tests__/ReferenceEntry.test.tsx +12 -12
  92. package/src/components/resource/panels/__tests__/ResourceInfoPanel.test.tsx +24 -0
  93. package/src/features/resource-compose/components/ResourceComposePage.tsx +10 -1
  94. package/src/features/resource-viewer/__tests__/AnnotationCreationPending.test.tsx +1 -1
  95. package/src/features/resource-viewer/__tests__/AnnotationDeletionIntegration.test.tsx +4 -4
  96. package/src/features/resource-viewer/__tests__/AnnotationProgressDismissal.test.tsx +5 -10
  97. package/src/features/resource-viewer/__tests__/BindFlowIntegration.test.tsx +23 -54
  98. package/src/features/resource-viewer/__tests__/DetectionFlowBug.test.tsx +6 -6
  99. package/src/features/resource-viewer/__tests__/DetectionFlowIntegration.test.tsx +7 -19
  100. package/src/features/resource-viewer/__tests__/ToastNotifications.test.tsx +1 -1
  101. package/src/features/resource-viewer/__tests__/YieldFlowIntegration.test.tsx +18 -44
  102. package/src/features/resource-viewer/__tests__/annotation-progress-flow.test.tsx +6 -6
  103. package/src/features/resource-viewer/components/ResourceViewerPage.tsx +26 -26
  104. package/src/styles/features/compose.css +63 -0
  105. package/translations/ar.json +6 -2
  106. package/translations/bn.json +6 -2
  107. package/translations/cs.json +6 -2
  108. package/translations/da.json +6 -2
  109. package/translations/de.json +6 -2
  110. package/translations/el.json +6 -2
  111. package/translations/en.json +2 -0
  112. package/translations/es.json +6 -2
  113. package/translations/fa.json +6 -2
  114. package/translations/fi.json +6 -2
  115. package/translations/fr.json +6 -2
  116. package/translations/he.json +6 -2
  117. package/translations/hi.json +6 -2
  118. package/translations/id.json +6 -2
  119. package/translations/it.json +6 -2
  120. package/translations/ja.json +6 -2
  121. package/translations/ko.json +6 -2
  122. package/translations/ms.json +6 -2
  123. package/translations/nl.json +6 -2
  124. package/translations/no.json +6 -2
  125. package/translations/pl.json +6 -2
  126. package/translations/pt.json +6 -2
  127. package/translations/ro.json +6 -2
  128. package/translations/sv.json +6 -2
  129. package/translations/th.json +6 -2
  130. package/translations/tr.json +6 -2
  131. package/translations/uk.json +6 -2
  132. package/translations/vi.json +6 -2
  133. package/translations/zh.json +6 -2
  134. package/dist/TranslationManager-CudgH3gw.d.mts +0 -107
  135. package/dist/ar-R4CRNXEF.mjs.map +0 -1
  136. package/dist/bn-CZKGRHTA.mjs.map +0 -1
  137. package/dist/chunk-BQJWOK4C.mjs.map +0 -1
  138. package/dist/chunk-HNZOXH4L.mjs.map +0 -1
  139. package/dist/chunk-HVMAGUFA.mjs.map +0 -1
  140. package/dist/chunk-OL5UST25.mjs +0 -413
  141. package/dist/chunk-OL5UST25.mjs.map +0 -1
  142. package/dist/cs-4WIB2IHH.mjs.map +0 -1
  143. package/dist/da-JWYEUYPX.mjs.map +0 -1
  144. package/dist/de-GWUQZGER.mjs.map +0 -1
  145. package/dist/el-DM2GT7P5.mjs.map +0 -1
  146. package/dist/es-6LVQIM3D.mjs.map +0 -1
  147. package/dist/fa-IRUJY3QI.mjs.map +0 -1
  148. package/dist/fi-53FBOEVT.mjs.map +0 -1
  149. package/dist/fr-Q5KY7QL6.mjs.map +0 -1
  150. package/dist/he-HJNKULBY.mjs.map +0 -1
  151. package/dist/hi-UYZ4X6CR.mjs.map +0 -1
  152. package/dist/id-UAQMH6U2.mjs.map +0 -1
  153. package/dist/it-C7QEBNFA.mjs.map +0 -1
  154. package/dist/ja-THS6AOSJ.mjs.map +0 -1
  155. package/dist/ko-XKK3TWQG.mjs.map +0 -1
  156. package/dist/ms-GSK7LIF7.mjs.map +0 -1
  157. package/dist/nl-KUBWITGY.mjs.map +0 -1
  158. package/dist/no-ECWZUHT6.mjs.map +0 -1
  159. package/dist/pl-PLVWSZWS.mjs.map +0 -1
  160. package/dist/pt-AL74ZTKB.mjs.map +0 -1
  161. package/dist/ro-WTPHLHGS.mjs.map +0 -1
  162. package/dist/sv-QCLI7SG4.mjs.map +0 -1
  163. package/dist/th-WCKVZU6U.mjs.map +0 -1
  164. package/dist/tr-2CAFS2XS.mjs.map +0 -1
  165. package/dist/uk-TDE4JLCY.mjs.map +0 -1
  166. package/dist/vi-KKXZ4PCX.mjs.map +0 -1
  167. package/dist/zh-VH4XN5PV.mjs.map +0 -1
  168. /package/dist/{PdfAnnotationCanvas.client-CW6SKH2U.mjs.map → PdfAnnotationCanvas.client-CHDCGQBR.mjs.map} +0 -0
  169. /package/dist/{en-IUV4ZXKH.mjs.map → en-YPQQBI4T.mjs.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/contexts/EventBusContext.tsx","../src/contexts/ApiClientContext.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, useRef, type ReactNode } from 'react';\nimport { EventBus } from '@semiont/core';\n\nconst EventBusContext = createContext<EventBus | null>(null);\n\nexport interface EventBusProviderProps {\n children: ReactNode;\n}\n\n/**\n * Unified event bus provider for all application events.\n *\n * Each provider mount creates a fresh EventBus instance. This means:\n * - Workspace switches (which remount via key prop) get isolated buses\n * - Tests get isolation naturally — no resetEventBusForTesting needed\n *\n * Operation handlers (API calls triggered by events) are set up separately via\n * the useBindFlow hook, which should be called at the resource page level.\n */\nexport function EventBusProvider({ children }: EventBusProviderProps) {\n const eventBusRef = useRef<EventBus | null>(null);\n if (!eventBusRef.current) {\n eventBusRef.current = new EventBus();\n }\n const eventBus = eventBusRef.current;\n\n return (\n <EventBusContext.Provider value={eventBus}>\n {children}\n </EventBusContext.Provider>\n );\n}\n\n/**\n * Hook to access the unified event bus\n *\n * Use this everywhere instead of:\n * - useMakeMeaningEvents()\n * - useNavigationEvents()\n * - useGlobalSettingsEvents()\n *\n * @example\n * ```typescript\n * const eventBus = useEventBus();\n *\n * // Emit any event\n * eventBus.get('beckon:hover').next({ annotationId: '123' });\n * eventBus.get('browse:sidebar-toggle').next(undefined);\n * eventBus.get('settings:theme-changed').next({ theme: 'dark' });\n *\n * // Subscribe to any event\n * useEffect(() => {\n * const unsubscribe = eventBus.on('beckon:hover', ({ annotationId }) => {\n * console.log(annotationId);\n * });\n * return () => unsubscribe();\n * }, []);\n * ```\n */\nexport function useEventBus(): EventBus {\n const eventBus = useContext(EventBusContext);\n if (!eventBus) {\n throw new Error('useEventBus must be used within EventBusProvider');\n }\n return eventBus;\n}\n","'use client';\n\nimport { createContext, useContext, ReactNode, useMemo } from 'react';\nimport { baseUrl } from '@semiont/core';\nimport { SemiontApiClient } from '@semiont/api-client';\nimport { useEventBus } from './EventBusContext';\n\nconst ApiClientContext = createContext<SemiontApiClient | undefined>(undefined);\n\nexport interface ApiClientProviderProps {\n baseUrl: string;\n children: ReactNode;\n}\n\n/**\n * Provider for API client — must be nested inside EventBusProvider.\n * The client is re-created when the baseUrl changes (workspace switch).\n * The EventBus is taken from EventBusContext so client and UI components\n * share the same workspace-scoped bus.\n */\nexport function ApiClientProvider({\n baseUrl: url,\n children,\n}: ApiClientProviderProps) {\n const eventBus = useEventBus();\n\n const client = useMemo(\n () => new SemiontApiClient({\n baseUrl: baseUrl(url),\n eventBus,\n // Use no timeout in test environment to avoid AbortController issues with ky + vitest\n ...(process.env.NODE_ENV !== 'test' && { timeout: 30000 }),\n }),\n [url, eventBus]\n );\n\n return (\n <ApiClientContext.Provider value={client}>\n {children}\n </ApiClientContext.Provider>\n );\n}\n\n/**\n * Hook to access the stateless API client singleton\n * Must be used within an ApiClientProvider\n * @returns Stateless SemiontApiClient instance\n */\nexport function useApiClient(): SemiontApiClient {\n const context = useContext(ApiClientContext);\n\n if (context === undefined) {\n throw new Error('useApiClient must be used within an ApiClientProvider');\n }\n\n return context;\n}\n"],"mappings":";;;AAEA,SAAS,eAAe,YAAY,cAA8B;AAClE,SAAS,gBAAgB;AA0BrB;AAxBJ,IAAM,kBAAkB,cAA+B,IAAI;AAgBpD,SAAS,iBAAiB,EAAE,SAAS,GAA0B;AACpE,QAAM,cAAc,OAAwB,IAAI;AAChD,MAAI,CAAC,YAAY,SAAS;AACxB,gBAAY,UAAU,IAAI,SAAS;AAAA,EACrC;AACA,QAAM,WAAW,YAAY;AAE7B,SACE,oBAAC,gBAAgB,UAAhB,EAAyB,OAAO,UAC9B,UACH;AAEJ;AA4BO,SAAS,cAAwB;AACtC,QAAM,WAAW,WAAW,eAAe;AAC3C,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AACA,SAAO;AACT;;;ACjEA,SAAS,iBAAAA,gBAAe,cAAAC,aAAuB,eAAe;AAC9D,SAAS,eAAe;AACxB,SAAS,wBAAwB;AAiC7B,gBAAAC,YAAA;AA9BJ,IAAM,mBAAmBC,eAA4C,MAAS;AAavE,SAAS,kBAAkB;AAAA,EAChC,SAAS;AAAA,EACT;AACF,GAA2B;AACzB,QAAM,WAAW,YAAY;AAE7B,QAAM,SAAS;AAAA,IACb,MAAM,IAAI,iBAAiB;AAAA,MACzB,SAAS,QAAQ,GAAG;AAAA,MACpB;AAAA;AAAA,MAEA,GAAI,QAAQ,IAAI,aAAa,UAAU,EAAE,SAAS,IAAM;AAAA,IAC1D,CAAC;AAAA,IACD,CAAC,KAAK,QAAQ;AAAA,EAChB;AAEA,SACE,gBAAAD,KAAC,iBAAiB,UAAjB,EAA0B,OAAO,QAC/B,UACH;AAEJ;AAOO,SAAS,eAAiC;AAC/C,QAAM,UAAUE,YAAW,gBAAgB;AAE3C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AAEA,SAAO;AACT;","names":["createContext","useContext","jsx","createContext","useContext"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../translations/en.json"],"sourcesContent":["{\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 \"clone\": \"Clone\",\n \"cloneDescription\": \"Generate a shareable clone link for this resource\",\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 \"creationMethod\": \"How created\",\n \"attributedTo\": \"Attributed to\",\n \"derivedFrom\": \"Derived from\",\n \"generatedBy\": \"Generated by\"\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 \"method\": \"Method\",\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 \"justNow\": \"just now\",\n \"minutesAgo\": \"{{count}}m ago\",\n \"hoursAgo\": \"{{count}}h ago\",\n \"daysAgo\": \"{{count}}d ago\"\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 \"closeProgress\": \"Close\"\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 \"closeProgress\": \"Close\"\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 \"closeProgress\": \"Close\"\n },\n \"TaggingPanel\": {\n \"title\": \"Tags\",\n \"noTags\": \"No tags yet. Use AI annotation to identify structural roles.\",\n \"annotateTags\": \"Annotate Tags\",\n \"selectSchema\": \"Select Framework\",\n \"schemaLegal\": \"Legal Analysis (IRAC)\",\n \"schemaScientific\": \"Scientific Paper (IMRAD)\",\n \"schemaArgument\": \"Argument Structure (Toulmin)\",\n \"selectCategories\": \"Select Categories\",\n \"categoryIssue\": \"Issue\",\n \"categoryRule\": \"Rule\",\n \"categoryApplication\": \"Application\",\n \"categoryConclusion\": \"Conclusion\",\n \"categoryIntroduction\": \"Introduction\",\n \"categoryMethods\": \"Methods\",\n \"categoryResults\": \"Results\",\n \"categoryDiscussion\": \"Discussion\",\n \"categoryClaim\": \"Claim\",\n \"categoryEvidence\": \"Evidence\",\n \"categoryWarrant\": \"Warrant\",\n \"categoryCounterargument\": \"Counterargument\",\n \"categoryRebuttal\": \"Rebuttal\",\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 },\n \"UnifiedAnnotationsPanel\": {\n \"title\": \"Annotations\",\n \"statistics\": \"Statistics\",\n \"highlight\": \"Highlights\",\n \"reference\": \"References\",\n \"assessment\": \"Assessments\",\n \"comment\": \"Comments\",\n \"tag\": \"Tags\"\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 \"closeProgress\": \"Close\",\n \"loading\": \"loading...\",\n \"loadingEllipsis\": \"Loading...\",\n \"untitledResource\": \"Untitled Resource\",\n \"noText\": \"No text\"\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 \"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}"],"mappings":"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","names":[]}
@@ -1,413 +0,0 @@
1
- 'use client';
2
- import {
3
- en_default
4
- } from "./chunk-HVMAGUFA.mjs";
5
- import {
6
- __glob
7
- } from "./chunk-D4GAAQMM.mjs";
8
-
9
- // src/contexts/SessionContext.tsx
10
- import { createContext, useContext } from "react";
11
- import { jsx } from "react/jsx-runtime";
12
- var SessionContext = createContext(null);
13
- function SessionProvider({
14
- sessionManager,
15
- children
16
- }) {
17
- return /* @__PURE__ */ jsx(SessionContext.Provider, { value: sessionManager, children });
18
- }
19
- function useSessionContext() {
20
- const context = useContext(SessionContext);
21
- if (!context) {
22
- throw new Error("useSessionContext must be used within SessionProvider");
23
- }
24
- return context;
25
- }
26
-
27
- // src/components/Toast.tsx
28
- import React, { useEffect, useState } from "react";
29
- import { createPortal } from "react-dom";
30
- import { jsx as jsx2, jsxs } from "react/jsx-runtime";
31
- var icons = {
32
- success: /* @__PURE__ */ jsx2("svg", { className: "semiont-toast-icon", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }),
33
- error: /* @__PURE__ */ jsx2("svg", { className: "semiont-toast-icon", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }),
34
- warning: /* @__PURE__ */ jsx2("svg", { className: "semiont-toast-icon", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }),
35
- info: /* @__PURE__ */ jsx2("svg", { className: "semiont-toast-icon", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) })
36
- };
37
- function Toast({ toast, onClose }) {
38
- useEffect(() => {
39
- const timer = setTimeout(() => {
40
- onClose(toast.id);
41
- }, toast.duration || 3e3);
42
- return () => clearTimeout(timer);
43
- }, [toast, onClose]);
44
- return /* @__PURE__ */ jsxs(
45
- "div",
46
- {
47
- className: "semiont-toast",
48
- "data-variant": toast.type,
49
- role: "alert",
50
- children: [
51
- /* @__PURE__ */ jsx2("div", { className: "semiont-toast-icon-wrapper", children: icons[toast.type] }),
52
- /* @__PURE__ */ jsx2("p", { className: "semiont-toast-message", children: toast.message }),
53
- /* @__PURE__ */ jsx2(
54
- "button",
55
- {
56
- onClick: () => onClose(toast.id),
57
- className: "semiont-toast-close",
58
- "aria-label": "Close",
59
- children: /* @__PURE__ */ jsx2("svg", { className: "semiont-toast-close-icon", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
60
- }
61
- )
62
- ]
63
- }
64
- );
65
- }
66
- function ToastContainer({ toasts, onClose }) {
67
- const [mounted, setMounted] = useState(false);
68
- useEffect(() => {
69
- setMounted(true);
70
- return () => setMounted(false);
71
- }, []);
72
- if (!mounted) return null;
73
- return createPortal(
74
- /* @__PURE__ */ jsx2("div", { className: "semiont-toast-container", children: toasts.map((toast) => /* @__PURE__ */ jsx2(Toast, { toast, onClose }, toast.id)) }),
75
- document.body
76
- );
77
- }
78
- var ToastContext = React.createContext(void 0);
79
- function ToastProvider({ children }) {
80
- const [toasts, setToasts] = useState([]);
81
- const showToast = React.useCallback((message, type = "info", duration) => {
82
- const id = Date.now().toString();
83
- const newToast = duration !== void 0 ? { id, message, type, duration } : { id, message, type };
84
- setToasts((prev) => [...prev, newToast]);
85
- }, []);
86
- const showSuccess = React.useCallback((message, duration) => showToast(message, "success", duration), [showToast]);
87
- const showError = React.useCallback((message, duration) => showToast(message, "error", duration), [showToast]);
88
- const showWarning = React.useCallback((message, duration) => showToast(message, "warning", duration), [showToast]);
89
- const showInfo = React.useCallback((message, duration) => showToast(message, "info", duration), [showToast]);
90
- const handleClose = React.useCallback((id) => {
91
- setToasts((prev) => prev.filter((toast) => toast.id !== id));
92
- }, []);
93
- const contextValue = React.useMemo(
94
- () => ({ showToast, showSuccess, showError, showWarning, showInfo }),
95
- [showToast, showSuccess, showError, showWarning, showInfo]
96
- );
97
- return /* @__PURE__ */ jsxs(ToastContext.Provider, { value: contextValue, children: [
98
- children,
99
- /* @__PURE__ */ jsx2(ToastContainer, { toasts, onClose: handleClose })
100
- ] });
101
- }
102
- function useToast() {
103
- const context = React.useContext(ToastContext);
104
- if (context === void 0) {
105
- throw new Error("useToast must be used within a ToastProvider");
106
- }
107
- return context;
108
- }
109
-
110
- // src/contexts/OpenResourcesContext.tsx
111
- import { createContext as createContext2, useContext as useContext2 } from "react";
112
- import { jsx as jsx3 } from "react/jsx-runtime";
113
- var OpenResourcesContext = createContext2(void 0);
114
- function OpenResourcesProvider({
115
- openResourcesManager,
116
- children
117
- }) {
118
- return /* @__PURE__ */ jsx3(OpenResourcesContext.Provider, { value: openResourcesManager, children });
119
- }
120
- function useOpenResources() {
121
- const context = useContext2(OpenResourcesContext);
122
- if (context === void 0) {
123
- throw new Error("useOpenResources must be used within an OpenResourcesProvider");
124
- }
125
- return context;
126
- }
127
-
128
- // src/contexts/TranslationContext.tsx
129
- import { createContext as createContext3, useContext as useContext3, useState as useState2, useEffect as useEffect2, useMemo } from "react";
130
- import { Fragment, jsx as jsx4 } from "react/jsx-runtime";
131
-
132
- // import("../../translations/**/*.json") in src/contexts/TranslationContext.tsx
133
- var globImport_translations_json = __glob({
134
- "../../translations/ar.json": () => import("./ar-R4CRNXEF.mjs"),
135
- "../../translations/bn.json": () => import("./bn-CZKGRHTA.mjs"),
136
- "../../translations/cs.json": () => import("./cs-4WIB2IHH.mjs"),
137
- "../../translations/da.json": () => import("./da-JWYEUYPX.mjs"),
138
- "../../translations/de.json": () => import("./de-GWUQZGER.mjs"),
139
- "../../translations/el.json": () => import("./el-DM2GT7P5.mjs"),
140
- "../../translations/en.json": () => import("./en-IUV4ZXKH.mjs"),
141
- "../../translations/es.json": () => import("./es-6LVQIM3D.mjs"),
142
- "../../translations/fa.json": () => import("./fa-IRUJY3QI.mjs"),
143
- "../../translations/fi.json": () => import("./fi-53FBOEVT.mjs"),
144
- "../../translations/fr.json": () => import("./fr-Q5KY7QL6.mjs"),
145
- "../../translations/he.json": () => import("./he-HJNKULBY.mjs"),
146
- "../../translations/hi.json": () => import("./hi-UYZ4X6CR.mjs"),
147
- "../../translations/id.json": () => import("./id-UAQMH6U2.mjs"),
148
- "../../translations/it.json": () => import("./it-C7QEBNFA.mjs"),
149
- "../../translations/ja.json": () => import("./ja-THS6AOSJ.mjs"),
150
- "../../translations/ko.json": () => import("./ko-XKK3TWQG.mjs"),
151
- "../../translations/ms.json": () => import("./ms-GSK7LIF7.mjs"),
152
- "../../translations/nl.json": () => import("./nl-KUBWITGY.mjs"),
153
- "../../translations/no.json": () => import("./no-ECWZUHT6.mjs"),
154
- "../../translations/pl.json": () => import("./pl-PLVWSZWS.mjs"),
155
- "../../translations/pt.json": () => import("./pt-AL74ZTKB.mjs"),
156
- "../../translations/ro.json": () => import("./ro-WTPHLHGS.mjs"),
157
- "../../translations/sv.json": () => import("./sv-QCLI7SG4.mjs"),
158
- "../../translations/th.json": () => import("./th-WCKVZU6U.mjs"),
159
- "../../translations/tr.json": () => import("./tr-2CAFS2XS.mjs"),
160
- "../../translations/uk.json": () => import("./uk-TDE4JLCY.mjs"),
161
- "../../translations/vi.json": () => import("./vi-KKXZ4PCX.mjs"),
162
- "../../translations/zh.json": () => import("./zh-VH4XN5PV.mjs")
163
- });
164
-
165
- // src/contexts/TranslationContext.tsx
166
- var TranslationContext = createContext3(null);
167
- var translationCache = /* @__PURE__ */ new Map();
168
- function processPluralFormat(text, params) {
169
- const pluralMatch = text.match(/\{(\w+),\s*plural,\s*/);
170
- if (!pluralMatch) {
171
- return text;
172
- }
173
- const paramName = pluralMatch[1];
174
- const count = params[paramName];
175
- if (count === void 0) {
176
- return text;
177
- }
178
- let startPos = pluralMatch[0].length;
179
- let braceCount = 1;
180
- let endPos = startPos;
181
- for (let i = startPos; i < text.length; i++) {
182
- if (text[i] === "{") braceCount++;
183
- else if (text[i] === "}") {
184
- braceCount--;
185
- if (braceCount === 0) {
186
- endPos = i;
187
- break;
188
- }
189
- }
190
- }
191
- const pluralCases = text.substring(startPos, endPos);
192
- const cases = {};
193
- const caseRegex = /(?:=(\d+)|(\w+))\s*\{([^}]+)\}/g;
194
- let caseMatch;
195
- while ((caseMatch = caseRegex.exec(pluralCases)) !== null) {
196
- const [, exactNumber, keyword, textContent] = caseMatch;
197
- const key = exactNumber !== void 0 ? `=${exactNumber}` : keyword;
198
- cases[key] = textContent;
199
- }
200
- const exactMatch = cases[`=${count}`];
201
- if (exactMatch !== void 0) {
202
- const result = exactMatch.replace(/#/g, String(count));
203
- return text.substring(0, pluralMatch.index) + result + text.substring(endPos + 1);
204
- }
205
- const otherCase = cases["other"];
206
- if (otherCase !== void 0) {
207
- const result = otherCase.replace(/#/g, String(count));
208
- return text.substring(0, pluralMatch.index) + result + text.substring(endPos + 1);
209
- }
210
- return text;
211
- }
212
- var AVAILABLE_LOCALES = [
213
- "ar",
214
- // Arabic
215
- "bn",
216
- // Bengali
217
- "cs",
218
- // Czech
219
- "da",
220
- // Danish
221
- "de",
222
- // German
223
- "el",
224
- // Greek
225
- "en",
226
- // English
227
- "es",
228
- // Spanish
229
- "fa",
230
- // Persian/Farsi
231
- "fi",
232
- // Finnish
233
- "fr",
234
- // French
235
- "he",
236
- // Hebrew
237
- "hi",
238
- // Hindi
239
- "id",
240
- // Indonesian
241
- "it",
242
- // Italian
243
- "ja",
244
- // Japanese
245
- "ko",
246
- // Korean
247
- "ms",
248
- // Malay
249
- "nl",
250
- // Dutch
251
- "no",
252
- // Norwegian
253
- "pl",
254
- // Polish
255
- "pt",
256
- // Portuguese
257
- "ro",
258
- // Romanian
259
- "sv",
260
- // Swedish
261
- "th",
262
- // Thai
263
- "tr",
264
- // Turkish
265
- "uk",
266
- // Ukrainian
267
- "vi",
268
- // Vietnamese
269
- "zh"
270
- // Chinese
271
- ];
272
- async function loadTranslations(locale) {
273
- if (translationCache.has(locale)) {
274
- return translationCache.get(locale);
275
- }
276
- if (locale === "en") {
277
- translationCache.set("en", en_default);
278
- return en_default;
279
- }
280
- try {
281
- const translations = await globImport_translations_json(`../../translations/${locale}.json`);
282
- const translationData = translations.default || translations;
283
- translationCache.set(locale, translationData);
284
- return translationData;
285
- } catch (error) {
286
- console.error(`Failed to load translations for locale: ${locale}`, error);
287
- return en_default;
288
- }
289
- }
290
- var defaultTranslationManager = {
291
- t: (namespace, key, params) => {
292
- const translations = en_default;
293
- const translation = translations[namespace]?.[key];
294
- if (!translation) {
295
- console.warn(`Translation not found for ${namespace}.${key}`);
296
- return `${namespace}.${key}`;
297
- }
298
- if (params && typeof translation === "string") {
299
- let result = translation;
300
- result = processPluralFormat(result, params);
301
- Object.entries(params).forEach(([paramKey, paramValue]) => {
302
- result = result.replace(new RegExp(`\\{${paramKey}\\}`, "g"), String(paramValue));
303
- });
304
- return result;
305
- }
306
- return translation;
307
- }
308
- };
309
- function TranslationProvider({
310
- translationManager,
311
- locale,
312
- loadingComponent = null,
313
- children
314
- }) {
315
- const [loadedTranslations, setLoadedTranslations] = useState2(null);
316
- const [isLoading, setIsLoading] = useState2(false);
317
- useEffect2(() => {
318
- if (locale && !translationManager) {
319
- setIsLoading(true);
320
- loadTranslations(locale).then((translations) => {
321
- setLoadedTranslations(translations);
322
- setIsLoading(false);
323
- }).catch((error) => {
324
- console.error("Failed to load translations:", error);
325
- setLoadedTranslations(en_default);
326
- setIsLoading(false);
327
- });
328
- }
329
- }, [locale, translationManager]);
330
- const localeManager = useMemo(() => {
331
- if (!loadedTranslations) return null;
332
- return {
333
- t: (namespace, key, params) => {
334
- const translation = loadedTranslations[namespace]?.[key];
335
- if (!translation) {
336
- console.warn(`Translation not found for ${namespace}.${key} in locale ${locale}`);
337
- return `${namespace}.${key}`;
338
- }
339
- if (params && typeof translation === "string") {
340
- let result = translation;
341
- result = processPluralFormat(result, params);
342
- Object.entries(params).forEach(([paramKey, paramValue]) => {
343
- result = result.replace(new RegExp(`\\{${paramKey}\\}`, "g"), String(paramValue));
344
- });
345
- return result;
346
- }
347
- return translation;
348
- }
349
- };
350
- }, [loadedTranslations, locale]);
351
- if (translationManager) {
352
- return /* @__PURE__ */ jsx4(TranslationContext.Provider, { value: translationManager, children });
353
- }
354
- if (locale && isLoading) {
355
- return /* @__PURE__ */ jsx4(Fragment, { children: loadingComponent });
356
- }
357
- if (locale && localeManager) {
358
- return /* @__PURE__ */ jsx4(TranslationContext.Provider, { value: localeManager, children });
359
- }
360
- return /* @__PURE__ */ jsx4(TranslationContext.Provider, { value: defaultTranslationManager, children });
361
- }
362
- function useTranslations(namespace) {
363
- const context = useContext3(TranslationContext);
364
- if (!context) {
365
- return (key, params) => {
366
- const translations = en_default;
367
- const translation = translations[namespace]?.[key];
368
- if (!translation) {
369
- console.warn(`Translation not found for ${namespace}.${key}`);
370
- return `${namespace}.${key}`;
371
- }
372
- if (params && typeof translation === "string") {
373
- let result = translation;
374
- result = processPluralFormat(result, params);
375
- Object.entries(params).forEach(([paramKey, paramValue]) => {
376
- result = result.replace(new RegExp(`\\{${paramKey}\\}`, "g"), String(paramValue));
377
- });
378
- return result;
379
- }
380
- return translation;
381
- };
382
- }
383
- return (key, params) => context.t(namespace, key, params);
384
- }
385
- function usePreloadTranslations() {
386
- return {
387
- preload: async (locale) => {
388
- try {
389
- await loadTranslations(locale);
390
- return true;
391
- } catch (error) {
392
- console.error(`Failed to preload translations for ${locale}:`, error);
393
- return false;
394
- }
395
- },
396
- isLoaded: (locale) => translationCache.has(locale)
397
- };
398
- }
399
-
400
- export {
401
- SessionProvider,
402
- useSessionContext,
403
- ToastContainer,
404
- ToastProvider,
405
- useToast,
406
- OpenResourcesProvider,
407
- useOpenResources,
408
- AVAILABLE_LOCALES,
409
- TranslationProvider,
410
- useTranslations,
411
- usePreloadTranslations
412
- };
413
- //# sourceMappingURL=chunk-OL5UST25.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/contexts/SessionContext.tsx","../src/components/Toast.tsx","../src/contexts/OpenResourcesContext.tsx","../src/contexts/TranslationContext.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, ReactNode } from 'react';\nimport type { SessionManager } from '../types/SessionManager';\n\nconst SessionContext = createContext<SessionManager | null>(null);\n\n/**\n * Provider Pattern: Accepts SessionManager implementation as prop\n * and makes it available to child components via Context.\n *\n * Apps provide their own implementation (next-auth, custom auth, etc.)\n * and pass it to this provider at the root level.\n *\n * @example\n * ```tsx\n * // In app root\n * const sessionManager = useSessionManager(); // App's implementation\n *\n * <SessionProvider sessionManager={sessionManager}>\n * <App />\n * </SessionProvider>\n * ```\n */\nexport function SessionProvider({\n sessionManager,\n children\n}: {\n sessionManager: SessionManager;\n children: ReactNode;\n}) {\n return (\n <SessionContext.Provider value={sessionManager}>\n {children}\n </SessionContext.Provider>\n );\n}\n\n/**\n * Hook to access SessionManager from Context\n * Components use this hook to access session state and expiry information\n */\nexport function useSessionContext() {\n const context = useContext(SessionContext);\n if (!context) {\n throw new Error('useSessionContext must be used within SessionProvider');\n }\n return context;\n}","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport './Toast.css';\n\nexport type ToastType = 'success' | 'error' | 'info' | 'warning';\n\nexport interface ToastMessage {\n id: string;\n message: string;\n type: ToastType;\n duration?: number;\n}\n\ninterface ToastProps {\n toast: ToastMessage;\n onClose: (id: string) => void;\n}\n\nconst icons = {\n success: (\n <svg className=\"semiont-toast-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n ),\n error: (\n <svg className=\"semiont-toast-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n ),\n warning: (\n <svg className=\"semiont-toast-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\n </svg>\n ),\n info: (\n <svg className=\"semiont-toast-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n ),\n};\n\nfunction Toast({ toast, onClose }: ToastProps) {\n useEffect(() => {\n const timer = setTimeout(() => {\n onClose(toast.id);\n }, toast.duration || 3000);\n\n return () => clearTimeout(timer);\n }, [toast, onClose]);\n\n return (\n <div\n className=\"semiont-toast\"\n data-variant={toast.type}\n role=\"alert\"\n >\n <div className=\"semiont-toast-icon-wrapper\">{icons[toast.type]}</div>\n <p className=\"semiont-toast-message\">{toast.message}</p>\n <button\n onClick={() => onClose(toast.id)}\n className=\"semiont-toast-close\"\n aria-label=\"Close\"\n >\n <svg className=\"semiont-toast-close-icon\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n );\n}\n\ninterface ToastContainerProps {\n toasts: ToastMessage[];\n onClose: (id: string) => void;\n}\n\nexport function ToastContainer({ toasts, onClose }: ToastContainerProps) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n setMounted(true);\n return () => setMounted(false);\n }, []);\n\n if (!mounted) return null;\n\n return createPortal(\n <div className=\"semiont-toast-container\">\n {toasts.map((toast) => (\n <Toast key={toast.id} toast={toast} onClose={onClose} />\n ))}\n </div>,\n document.body\n );\n}\n\n// Toast context and hook for global toast management\ninterface ToastContextType {\n showToast: (message: string, type?: ToastType, duration?: number) => void;\n showSuccess: (message: string, duration?: number) => void;\n showError: (message: string, duration?: number) => void;\n showWarning: (message: string, duration?: number) => void;\n showInfo: (message: string, duration?: number) => void;\n}\n\nconst ToastContext = React.createContext<ToastContextType | undefined>(undefined);\n\nexport function ToastProvider({ children }: { children: React.ReactNode }) {\n const [toasts, setToasts] = useState<ToastMessage[]>([]);\n\n const showToast = React.useCallback((message: string, type: ToastType = 'info', duration?: number) => {\n const id = Date.now().toString();\n const newToast: ToastMessage = duration !== undefined\n ? { id, message, type, duration }\n : { id, message, type };\n setToasts((prev) => [...prev, newToast]);\n }, []);\n\n const showSuccess = React.useCallback((message: string, duration?: number) => showToast(message, 'success', duration), [showToast]);\n const showError = React.useCallback((message: string, duration?: number) => showToast(message, 'error', duration), [showToast]);\n const showWarning = React.useCallback((message: string, duration?: number) => showToast(message, 'warning', duration), [showToast]);\n const showInfo = React.useCallback((message: string, duration?: number) => showToast(message, 'info', duration), [showToast]);\n\n const handleClose = React.useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const contextValue = React.useMemo(\n () => ({ showToast, showSuccess, showError, showWarning, showInfo }),\n [showToast, showSuccess, showError, showWarning, showInfo]\n );\n\n return (\n <ToastContext.Provider value={contextValue}>\n {children}\n <ToastContainer toasts={toasts} onClose={handleClose} />\n </ToastContext.Provider>\n );\n}\n\nexport function useToast() {\n const context = React.useContext(ToastContext);\n if (context === undefined) {\n throw new Error('useToast must be used within a ToastProvider');\n }\n return context;\n}","'use client';\n\nimport React, { createContext, useContext } from 'react';\nimport type { OpenResourcesManager } from '../types/OpenResourcesManager';\n\nconst OpenResourcesContext = createContext<OpenResourcesManager | undefined>(undefined);\n\n/**\n * Provider Pattern: Accepts OpenResourcesManager implementation as prop\n * and makes it available to child components via Context.\n *\n * Apps provide their own implementation (localStorage, sessionStorage, database, etc.)\n * and pass it to this provider at the root level.\n *\n * @example\n * ```tsx\n * // In app root\n * const openResourcesManager = useOpenResourcesManager(); // App's implementation\n *\n * <OpenResourcesProvider openResourcesManager={openResourcesManager}>\n * <App />\n * </OpenResourcesProvider>\n * ```\n */\nexport function OpenResourcesProvider({\n openResourcesManager,\n children\n}: {\n openResourcesManager: OpenResourcesManager;\n children: React.ReactNode;\n}) {\n return (\n <OpenResourcesContext.Provider value={openResourcesManager}>\n {children}\n </OpenResourcesContext.Provider>\n );\n}\n\n/**\n * Hook to access OpenResourcesManager from Context\n * Components use this hook to access open resources functionality\n */\nexport function useOpenResources(): OpenResourcesManager {\n const context = useContext(OpenResourcesContext);\n if (context === undefined) {\n throw new Error('useOpenResources must be used within an OpenResourcesProvider');\n }\n return context;\n}","'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":["jsx","createContext","useContext","jsx","createContext","useContext","useState","useEffect","jsx","createContext","useState","useEffect","jsx","useContext"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../translations/cs.json"],"sourcesContent":["{\n \"Toolbar\": {\n \"annotations\": \"Anotace\",\n \"history\": \"Historie\",\n \"resourceInfo\": \"Informace o zdroji\",\n \"collaboration\": \"Spolupráce\",\n \"userAccount\": \"Uživatelský účet\",\n \"settings\": \"Nastavení\",\n \"knowledgeBase\": \"Znalostní báze\"\n },\n \"ResourceInfoPanel\": {\n \"title\": \"Informace o zdroji\",\n \"locale\": \"Národní prostředí\",\n \"notSpecified\": \"Neuvedeno\",\n \"entityTypeTags\": \"Štítky typů entit\",\n \"representation\": \"Reprezentace\",\n \"mediaType\": \"Typ média\",\n \"byteSize\": \"Velikost\",\n \"clone\": \"Klonovat\",\n \"cloneDescription\": \"Vytvořit sdílitelný odkaz na klon tohoto zdroje\",\n \"archive\": \"Archivovat\",\n \"archiveDescription\": \"Přesunout tento zdroj do archivovaného stavu\",\n \"unarchive\": \"Obnovit z archivu\",\n \"unarchiveDescription\": \"Obnovit tento zdroj do aktivního stavu\",\n \"provenance\": \"Původ\",\n \"createdAt\": \"Vytvořeno\",\n \"modifiedAt\": \"Upraveno\",\n \"creationMethod\": \"Způsob vytvoření\",\n \"attributedTo\": \"Připsáno\",\n \"derivedFrom\": \"Odvozeno z\",\n \"generatedBy\": \"Vygenerováno pomocí\"\n },\n \"CollaborationPanel\": {\n \"title\": \"Spolupráce\",\n \"connectionStatus\": \"Stav připojení\",\n \"live\": \"Živě\",\n \"disconnected\": \"Odpojeno\",\n \"events\": \"{{count}} událostí\",\n \"lastSync\": \"Poslední synchronizace:\",\n \"noActivity\": \"Zatím žádná aktivita\",\n \"justNow\": \"Právě teď\",\n \"secondsAgo\": \"Před {{count}} sekundami\",\n \"minuteAgo\": \"Před 1 minutou\",\n \"minutesAgo\": \"Před {{count}} minutami\",\n \"hourAgo\": \"Před 1 hodinou\",\n \"hoursAgo\": \"Před {{count}} hodinami\",\n \"realtimeActive\": \"Aktualizace v reálném čase jsou aktivní\",\n \"reconnecting\": \"Opětovné připojování k serveru...\",\n \"sharing\": \"Sdílení\",\n \"collaborationComingSoon\": \"Funkce spolupráce budou brzy k dispozici\"\n },\n \"AnnotationHistory\": {\n \"history\": \"Historie\",\n \"loading\": \"Načítání...\",\n \"user\": \"Uživatel\",\n \"method\": \"Metoda\",\n \"viewOriginal\": \"Zobrazit originál\",\n \"viewAnnotation\": \"Zobrazit anotaci: {{content}}\",\n \"resourceCreated\": \"Zdroj vytvořen\",\n \"resourceCloned\": \"Klonováno\",\n \"resourceArchived\": \"Archivováno\",\n \"resourceUnarchived\": \"Obnoveno z archivu\",\n \"highlightAdded\": \"Zvýraznění přidáno\",\n \"highlightRemoved\": \"Zvýraznění odebráno\",\n \"referenceCreated\": \"Reference vytvořena\",\n \"referenceResolved\": \"Reference vyřešena\",\n \"referenceDeleted\": \"Reference smazána\",\n \"entitytagAdded\": \"Štítek přidán\",\n \"entitytagRemoved\": \"Štítek odebrán\",\n \"assessmentAdded\": \"Hodnocení přidáno\",\n \"assessmentRemoved\": \"Hodnocení odebráno\",\n \"annotationAdded\": \"Anotace přidána\",\n \"annotationRemoved\": \"Anotace odebrána\",\n \"annotationBodyUpdated\": \"Anotace aktualizována\",\n \"jobEvent\": \"Událost úlohy\",\n \"justNow\": \"právě teď\",\n \"minutesAgo\": \"před {{count}} min\",\n \"hoursAgo\": \"před {{count}} hod\",\n \"daysAgo\": \"před {{count}} dny\"\n },\n \"CommentsPanel\": {\n \"title\": \"Komentáře\",\n \"noComments\": \"Zatím žádné komentáře. Vyberte text a kliknutím na Komentář přidejte nový.\",\n \"commentPlaceholder\": \"Sem napište svůj komentář...\",\n \"save\": \"Uložit\",\n \"cancel\": \"Zrušit\",\n \"edit\": \"Upravit\",\n \"annotateComments\": \"Anotovat komentáře\",\n \"instructions\": \"Pokyny\",\n \"optional\": \"(volitelné)\",\n \"instructionsPlaceholder\": \"např. Zaměřte se na odbornou terminologii...\",\n \"annotate\": \"Anotovat\",\n \"annotating\": \"Anotování...\",\n \"toneLabel\": \"Tón\",\n \"toneOptional\": \"(volitelné)\",\n \"toneScholarly\": \"Akademický\",\n \"toneExplanatory\": \"Vysvětlující\",\n \"toneConversational\": \"Konverzační\",\n \"toneTechnical\": \"Technický\",\n \"densityLabel\": \"Hustota\",\n \"densitySparse\": \"Řídká\",\n \"densityDense\": \"Hustá\",\n \"fragmentSelected\": \"Fragment vybrán\",\n \"imageRegionSelected\": \"Oblast obrázku vybrána\",\n \"closeProgress\": \"Zavřít\"\n },\n \"HighlightPanel\": {\n \"title\": \"Zvýraznění\",\n \"noHighlights\": \"Zatím žádná zvýraznění. Použijte AI anotaci pro nalezení důležitých pasáží.\",\n \"annotateHighlights\": \"Anotovat zvýraznění\",\n \"instructions\": \"Pokyny\",\n \"optional\": \"(volitelné)\",\n \"instructionsPlaceholder\": \"např. Zaměřte se na klíčové technické koncepty...\",\n \"annotate\": \"Anotovat\",\n \"annotating\": \"Anotování...\",\n \"cancel\": \"Zrušit\",\n \"densityLabel\": \"Hustota\",\n \"densitySparse\": \"Řídká\",\n \"densityDense\": \"Hustá\",\n \"closeProgress\": \"Zavřít\"\n },\n \"AssessmentPanel\": {\n \"title\": \"Hodnocení\",\n \"noAssessments\": \"Zatím žádná hodnocení. Použijte AI anotaci pro vyhodnocení pasáží.\",\n \"assessmentPlaceholder\": \"Sem napište své hodnocení...\",\n \"save\": \"Uložit\",\n \"cancel\": \"Zrušit\",\n \"annotateAssessments\": \"Anotovat hodnocení\",\n \"instructions\": \"Pokyny\",\n \"optional\": \"(volitelné)\",\n \"instructionsPlaceholder\": \"např. Vyhodnoťte tvrzení z hlediska přesnosti a důkazů...\",\n \"annotate\": \"Anotovat\",\n \"annotating\": \"Anotování...\",\n \"toneLabel\": \"Tón\",\n \"toneOptional\": \"(volitelné)\",\n \"toneAnalytical\": \"Analytický\",\n \"toneCritical\": \"Kritický\",\n \"toneBalanced\": \"Vyvážený\",\n \"toneConstructive\": \"Konstruktivní\",\n \"densityLabel\": \"Hustota\",\n \"densitySparse\": \"Řídká\",\n \"densityDense\": \"Hustá\",\n \"fragmentSelected\": \"Fragment vybrán\",\n \"imageRegionSelected\": \"Oblast obrázku vybrána\",\n \"closeProgress\": \"Zavřít\"\n },\n \"TaggingPanel\": {\n \"title\": \"Štítky\",\n \"noTags\": \"Zatím žádné štítky. Použijte AI anotaci pro identifikaci strukturálních rolí.\",\n \"annotateTags\": \"Anotovat štítky\",\n \"selectSchema\": \"Vybrat rámec\",\n \"schemaLegal\": \"Právní analýza (IRAC)\",\n \"schemaScientific\": \"Vědecký článek (IMRAD)\",\n \"schemaArgument\": \"Struktura argumentace (Toulmin)\",\n \"selectCategories\": \"Vybrat kategorie\",\n \"categoryIssue\": \"Otázka\",\n \"categoryRule\": \"Pravidlo\",\n \"categoryApplication\": \"Aplikace\",\n \"categoryConclusion\": \"Závěr\",\n \"categoryIntroduction\": \"Úvod\",\n \"categoryMethods\": \"Metody\",\n \"categoryResults\": \"Výsledky\",\n \"categoryDiscussion\": \"Diskuze\",\n \"categoryClaim\": \"Tvrzení\",\n \"categoryEvidence\": \"Důkaz\",\n \"categoryWarrant\": \"Odůvodnění\",\n \"categoryCounterargument\": \"Protiargument\",\n \"categoryRebuttal\": \"Vyvrácení\",\n \"annotate\": \"Anotovat\",\n \"annotating\": \"Anotování...\",\n \"cancel\": \"Zrušit\",\n \"selectAll\": \"Vybrat vše\",\n \"deselectAll\": \"Zrušit výběr\",\n \"categoriesSelected\": \"{count, plural, =0 {Žádné kategorie nevybrány} =1 {1 kategorie vybrána} other {# kategorií vybráno}}\",\n \"createTagForSelection\": \"Vytvořit štítek pro výběr\",\n \"selectCategory\": \"Vybrat kategorii\",\n \"chooseCategory\": \"Zvolte kategorii...\",\n \"fragmentSelected\": \"Fragment vybrán\",\n \"imageRegionSelected\": \"Oblast obrázku vybrána\"\n },\n \"UnifiedAnnotationsPanel\": {\n \"title\": \"Anotace\",\n \"statistics\": \"Statistiky\",\n \"highlight\": \"Zvýraznění\",\n \"reference\": \"Reference\",\n \"assessment\": \"Hodnocení\",\n \"comment\": \"Komentáře\",\n \"tag\": \"Štítky\"\n },\n \"StatisticsPanel\": {\n \"title\": \"Statistiky\",\n \"highlights\": \"Zvýraznění\",\n \"comments\": \"Komentáře\",\n \"assessments\": \"Hodnocení\",\n \"tags\": \"Štítky\",\n \"references\": \"Reference\",\n \"stub\": \"Neúplné\",\n \"resolved\": \"Vyřešené\",\n \"entityTypes\": \"Typy entit\"\n },\n \"ReferencesPanel\": {\n \"title\": \"Reference\",\n \"noReferences\": \"Zatím žádné reference. Vyberte text pro vytvoření referencí na jiné zdroje.\",\n \"outgoingReferences\": \"Odchozí reference\",\n \"incomingReferences\": \"Příchozí reference\",\n \"noIncomingReferences\": \"Žádné příchozí reference\",\n \"stub\": \"Neúplná reference (nepropojená)\",\n \"resolved\": \"Vyřešená reference (propojená)\",\n \"open\": \"Otevřít\",\n \"unlink\": \"Odpojit\",\n \"resolve\": \"Vyřešit referenci\",\n \"cancel\": \"Zrušit\",\n \"createReference\": \"Vytvořit referenci\",\n \"entityTypesOptional\": \"Typy entit (volitelné)\",\n \"fragmentSelected\": \"Fragment vybrán\",\n \"imageRegionSelected\": \"Oblast obrázku vybrána\",\n \"annotateReferences\": \"Anotovat reference\",\n \"selectEntityTypes\": \"Typy entit:\",\n \"select\": \"Vybrat\",\n \"deselect\": \"Zrušit výběr\",\n \"noEntityTypes\": \"Žádné typy entit nejsou k dispozici\",\n \"typesSelected\": \"{count, plural, =1 {1 typ vybrán} other {# typů vybráno}}\",\n \"annotate\": \"Anotovat\",\n \"annotating\": \"Anotování...\",\n \"includeDescriptiveReferences\": \"Zahrnout popisné reference\",\n \"descriptiveReferencesTooltip\": \"Najít také fráze jako 'generální ředitel', 'technologický gigant', 'fyzik' (kromě jmen)\",\n \"annotationProgressTitle\": \"Anotování referencí entit\",\n \"cancelAnnotation\": \"Zrušit anotaci\",\n \"found\": \"{{count}} nalezeno\",\n \"complete\": \"Anotace dokončena!\",\n \"failed\": \"Anotace selhala\",\n \"current\": \"Aktuální: {{entityType}}\",\n \"closeProgress\": \"Zavřít\",\n \"loading\": \"načítání...\",\n \"loadingEllipsis\": \"Načítání...\",\n \"untitledResource\": \"Zdroj bez názvu\",\n \"noText\": \"Žádný text\"\n },\n \"KeyboardShortcuts\": {\n \"title\": \"Klávesové zkratky\",\n \"closeDialog\": \"Zavřít dialog\",\n \"or\": \"nebo\",\n \"navigationTitle\": \"Navigace\",\n \"navOpenSearch\": \"Otevřít globální vyhledávání\",\n \"navOpenSearchAlt\": \"Otevřít globální vyhledávání (alternativní)\",\n \"navCreateResource\": \"Vytvořit nový zdroj\",\n \"navCloseOverlays\": \"Zavřít všechny překryvné panely (dvojité stisknutí)\",\n \"navShowHelp\": \"Zobrazit nápovědu klávesových zkratek\",\n \"sidebarTitle\": \"Postranní panel znalostí\",\n \"sidebarCollapse\": \"Sbalit postranní panel\",\n \"sidebarExpand\": \"Rozbalit postranní panel\",\n \"sidebarPickup\": \"Uchopit kartu zdroje (při zaměření)\",\n \"sidebarMove\": \"Přesunout kartu zdroje (při přetahování)\",\n \"sidebarDrop\": \"Upustit kartu zdroje (při přetahování)\",\n \"sidebarCancel\": \"Zrušit operaci přetahování\",\n \"annotationsTitle\": \"Anotace zdroje\",\n \"annotHighlight\": \"Vytvořit zvýraznění z anotace (přímo)\",\n \"annotReference\": \"Otevřít vyskakovací okno reference pro anotaci\",\n \"annotDelete\": \"Smazat zaměřenou anotaci\",\n \"annotNavigate\": \"Procházet anotace\",\n \"annotNavigateBack\": \"Procházet anotace zpětně\",\n \"listsTitle\": \"Seznamy a mřížky\",\n \"listsFilterNav\": \"Navigace ve filtrech typů entit\",\n \"listsGridNav\": \"Navigace v mřížce zdrojů\",\n \"listsJumpFirst\": \"Přeskočit na první položku\",\n \"listsJumpLast\": \"Přeskočit na poslední položku\",\n \"searchModalTitle\": \"V okně vyhledávání\",\n \"searchNav\": \"Procházet výsledky vyhledávání\",\n \"searchSelect\": \"Vybrat výsledek\",\n \"searchClose\": \"Zavřít vyhledávání\",\n \"modalTitle\": \"Ovládání modálních oken\",\n \"modalClose\": \"Zavřít aktivní modální okno\",\n \"modalNavForward\": \"Navigace vpřed přes tlačítka\",\n \"modalNavBackward\": \"Navigace zpět přes tlačítka\",\n \"modalActivate\": \"Aktivovat zaměřené tlačítko\",\n \"accessibilityTitle\": \"Přístupnost\",\n \"a11ySkipLinks\": \"Přejít na přeskočovací odkazy (na začátku stránky)\",\n \"a11yFollowLink\": \"Následovat přeskočovací odkaz\",\n \"macNote\": \"Používáte klávesové zkratky pro Mac. ⌘ je klávesa Command.\",\n \"windowsNote\": \"Používáte klávesové zkratky pro Windows/Linux. Ctrl je klávesa Control.\",\n \"footerHint\": \"Stiskněte {{key}} kdykoli pro zobrazení této nápovědy\",\n \"close\": \"Zavřít\"\n },\n \"AnnotateToolbar\": {\n \"modeGroup\": \"Režim\",\n \"browse\": \"Procházet\",\n \"annotate\": \"Anotovat\",\n \"selectionGroup\": \"Motivace\",\n \"clickGroup\": \"Kliknutí\",\n \"shapeGroup\": \"Tvar\",\n \"none\": \"Žádný\",\n \"linking\": \"Reference\",\n \"highlighting\": \"Zvýraznění\",\n \"assessing\": \"Hodnocení\",\n \"commenting\": \"Komentář\",\n \"tagging\": \"Štítek\",\n \"detail\": \"Detail\",\n \"follow\": \"Sledovat\",\n \"deleting\": \"Smazat\",\n \"jsonld\": \"JSON-LD\",\n \"rectangle\": \"Obdélník\",\n \"circle\": \"Kruh\",\n \"polygon\": \"Polygon\"\n },\n \"CollapsibleResourceNavigation\": {\n \"title\": \"Navigace\",\n \"collapseSidebar\": \"Sbalit postranní panel\",\n \"expandSidebar\": \"Rozbalit postranní panel\",\n \"dragToReorder\": \"Přetažením změnit pořadí\",\n \"dragToReorderDoc\": \"Přetažením změnit pořadí {{name}}\",\n \"closeResource\": \"Zavřít zdroj\",\n \"dragInstructions\": \"Pro změnu pořadí zdrojů: Použijte Tab pro přechod na zdroj. Stiskněte Alt+šipka nahoru pro posun nahoru nebo Alt+šipka dolů pro posun dolů. Pro přetažení: Stiskněte mezerník pro uchopení položky. Použijte šipky k jejímu přesunutí. Stiskněte mezerník znovu pro upuštění.\"\n },\n \"ResourceViewer\": {\n \"deleteConfirmationTitle\": \"Smazat anotaci\",\n \"deleteConfirmationMessage\": \"Opravdu chcete smazat tuto anotaci? Tuto akci nelze vrátit zpět.\",\n \"deleteConfirmationCancel\": \"Zrušit\",\n \"deleteConfirmationDelete\": \"Smazat\"\n },\n \"Settings\": {\n \"title\": \"Nastavení\",\n \"lineNumbers\": \"Čísla řádků\",\n \"lineNumbersVisible\": \"Viditelná\",\n \"lineNumbersHidden\": \"Skrytá\",\n \"theme\": \"Motiv\",\n \"themeLight\": \"Světlý\",\n \"themeDark\": \"Tmavý\",\n \"themeSystem\": \"Systémový\",\n \"themeSystemActive\": \"Systémový ({{mode}})\",\n \"themeModeActive\": \"Používá se režim {{mode}}\",\n \"language\": \"Jazyk\",\n \"languageHint\": \"Změňte jazyk v hlavní navigaci\",\n \"languageChanging\": \"Změna jazyka...\",\n \"hoverDelay\": \"Zpoždění při najetí\",\n \"hoverDelayFast\": \"Rychlé\",\n \"hoverDelaySlow\": \"Pomalé\",\n \"hoverDelayDescription\": \"{{delay}}ms zpoždění před zobrazením efektů při najetí\"\n },\n \"AnnotateView\": {},\n \"ReferenceWizard\": {\n \"gatherTitle\": \"Shromážděný kontext\",\n \"configureGenerationTitle\": \"Konfigurovat generování\",\n \"configureSearchTitle\": \"Konfigurovat hledání\",\n \"searchResultsTitle\": \"Výsledky hledání\",\n \"sourceContextLabel\": \"Kontext anotace v prostředku\",\n \"connectionsLabel\": \"Partnerské anotace\",\n \"citedByLabel\": \"Prostředek citován\",\n \"userHintLabel\": \"Nápověda\",\n \"userHintPlaceholder\": \"Popište, na co se tato anotace vztahuje...\",\n \"loadingContext\": \"Shromažďování kontextu...\",\n \"failedContext\": \"Nepodařilo se shromáždit kontext\",\n \"cancel\": \"Zrušit\",\n \"generate\": \"Generovat\",\n \"compose\": \"Sestavit\",\n \"resolutionStrategyLabel\": \"Strategie řešení\",\n \"back\": \"Zpět\",\n \"link\": \"Odkaz\",\n \"score\": \"Skóre\",\n \"noResults\": \"Žádné výsledky nenalezeny\",\n \"resourceTitle\": \"Název zdroje\",\n \"resourceTitlePlaceholder\": \"Zadejte název zdroje...\",\n \"additionalInstructions\": \"Další pokyny\",\n \"additionalInstructionsPlaceholder\": \"Zadejte další pokyny...\",\n \"language\": \"Jazyk\",\n \"languageHelp\": \"Jazyk generovaného obsahu\",\n \"creativity\": \"Kreativita\",\n \"creativityFocused\": \"Zaměřená\",\n \"creativityCreative\": \"Kreativní\",\n \"maxLength\": \"Maximální délka\",\n \"maxLengthHelp\": \"Maximální počet tokenů\",\n \"maxResults\": \"Maximální počet výsledků\",\n \"semanticScoring\": \"Sémantické hodnocení\",\n \"semanticScoringHelp\": \"Použít AI k hodnocení výsledků podle sémantické relevance\",\n \"searching\": \"Vyhledávání...\",\n \"search\": \"Hledat\"\n }\n}"],"mappings":"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","names":[]}