@nulib/clover 4.0.0 → 4.2.0

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 (386) hide show
  1. package/dist/components/Body/Body.mjs +16 -1
  2. package/dist/components/Body/glyphs.mjs +15 -0
  3. package/dist/components/Body/useControlsVisibility.mjs +35 -13
  4. package/dist/components/Canvas/CanvasView.mjs +116 -12
  5. package/dist/components/Canvas/ChaptersMenu.mjs +105 -0
  6. package/dist/components/Canvas/ControlMenu.mjs +23 -4
  7. package/dist/components/Canvas/Controls.mjs +223 -60
  8. package/dist/components/Canvas/ControlsFade.mjs +16 -0
  9. package/dist/components/Canvas/ImageControls.mjs +209 -0
  10. package/dist/components/Canvas/Placeholder.mjs +44 -12
  11. package/dist/components/Canvas/RowFits.mjs +85 -0
  12. package/dist/components/Canvas/layout.mjs +11 -0
  13. package/dist/components/Canvas/media/MediaBody.mjs +105 -46
  14. package/dist/components/Canvas/media/Player.mjs +0 -55
  15. package/dist/components/Canvas/media/Transport.mjs +14 -23
  16. package/dist/components/Canvas/panClearOfControls.mjs +1 -1
  17. package/dist/components/Collection/Collection.mjs +1 -1
  18. package/dist/components/Items/CountMenu.mjs +1 -0
  19. package/dist/components/Items/Item.mjs +4 -3
  20. package/dist/components/Items/Items.mjs +30 -10
  21. package/dist/components/Items/PagerLayout.mjs +2 -0
  22. package/dist/components/Items/TargetItems.mjs +1 -1
  23. package/dist/components/Items/masonry.mjs +35 -0
  24. package/dist/components/Panel/About.mjs +25 -8
  25. package/dist/components/Panel/Panel.mjs +47 -59
  26. package/dist/components/Panel/sections.mjs +62 -0
  27. package/dist/components/Root/useRootState.mjs +2 -49
  28. package/dist/components/Scene/SceneView.mjs +13 -2
  29. package/dist/components/Scene/cloverEngine.mjs +2 -1
  30. package/dist/components/Timeline/playerSurface.mjs +2 -0
  31. package/dist/core/clover.mjs +7 -4
  32. package/dist/core/content-state.mjs +5 -3
  33. package/dist/i18n/locales/en.json.mjs +1 -1
  34. package/dist/i18n/locales/es.json.mjs +1 -1
  35. package/dist/i18n/locales/fi.json.mjs +1 -1
  36. package/dist/i18n/locales/fr.json.mjs +1 -1
  37. package/dist/i18n/locales/nb.json.mjs +1 -1
  38. package/dist/i18n/locales/nn.json.mjs +1 -1
  39. package/dist/i18n/locales/no.json.mjs +1 -1
  40. package/dist/i18n/locales/pt.json.mjs +1 -1
  41. package/dist/index.d.mts +178 -56
  42. package/dist/index.mjs +2 -0
  43. package/dist/lib/gltf/load.mjs +26 -6
  44. package/dist/lib/pointer.mjs +1 -1
  45. package/dist/lib/renderer/CanvasRenderer.mjs +44 -32
  46. package/dist/lib/renderer/camera/Camera.mjs +1 -1
  47. package/dist/react/useContentStateOutput.mjs +71 -0
  48. package/dist/styles.css +1 -1
  49. package/dist/templates/default/Default.mjs +42 -128
  50. package/dist/templates/document/Document.mjs +51 -65
  51. package/dist/templates/document/Sheets.mjs +13 -5
  52. package/dist/templates/gallery/Gallery.mjs +94 -18
  53. package/dist/templates/index.d.mts +364 -17
  54. package/dist/templates/shared/Lightbox.mjs +161 -69
  55. package/dist/templates/shared/LightboxView.mjs +123 -0
  56. package/dist/templates/shared/PanelPane.mjs +116 -0
  57. package/dist/templates/{document/DocumentPanel.mjs → shared/PanelPart.mjs} +2 -2
  58. package/dist/templates/shared/dragToClose.mjs +51 -8
  59. package/dist/templates/shared/givenAnnotations.mjs +13 -0
  60. package/dist/templates/shared/useDragToClose.mjs +6 -3
  61. package/dist/templates/shared/useLazyPanelPane.mjs +16 -0
  62. package/dist/templates/shared/useSlide.mjs +6 -0
  63. package/dist/templates.css +1 -1
  64. package/dist/ui/ControlCluster.mjs +15 -17
  65. package/dist/ui/Sections.mjs +3 -3
  66. package/dist/ui/mediaIcons.mjs +35 -8
  67. package/dist/ui/useScrollTrack.mjs +2 -1
  68. package/dist/web-components/About-D1TBGGPL.mjs +1 -0
  69. package/dist/web-components/AnnotationItems-DTacmRA9.mjs +1 -0
  70. package/dist/web-components/{AnnotationMenu-BCwwwfbb.mjs → AnnotationMenu-DYc9ekWS.mjs} +1 -1
  71. package/dist/web-components/{AnnotationState-CavxnAAq.mjs → AnnotationState--5ghW0C2.mjs} +1 -1
  72. package/dist/web-components/{Annotations-rBmeI5sR.mjs → Annotations-BG8lPjk1.mjs} +1 -1
  73. package/dist/web-components/{Annotations-DDjSrBL5.mjs → Annotations-Bvc_FmJ5.mjs} +1 -1
  74. package/dist/web-components/Body-QQ1DmnbP.mjs +1 -0
  75. package/dist/web-components/{BodyAlert-COKp19lq.mjs → BodyAlert-A4xRjOKr.mjs} +1 -1
  76. package/dist/web-components/{Button-DLFYqtz9.mjs → Button-Cx6VE_UW.mjs} +1 -1
  77. package/dist/web-components/{Camera-Cp5ma-6C.mjs → Camera-DqT_1MgD.mjs} +1 -1
  78. package/dist/web-components/{Canvas2DBackend-3PToh87Z.mjs → Canvas2DBackend-TZtR3zHf.mjs} +1 -1
  79. package/dist/web-components/CanvasView-DxZASM9E.mjs +2 -0
  80. package/dist/web-components/CaptionDetails-DMRWmtaY.mjs +1 -0
  81. package/dist/web-components/ChaptersMenu-BAZVVDrK.mjs +1 -0
  82. package/dist/web-components/{Chevron-r-_hUPn8.mjs → Chevron-DFGbSGPI.mjs} +1 -1
  83. package/dist/web-components/ChoiceMenu-C80kdxvq.mjs +1 -0
  84. package/dist/web-components/Collection-B4CxBsFL.mjs +1 -0
  85. package/dist/web-components/{CollectionSelect-CBWUbqQi.mjs → CollectionSelect-DO8YO2p7.mjs} +1 -1
  86. package/dist/web-components/{Connected-BnpxYeJN.mjs → Connected-CcbVqzmj.mjs} +1 -1
  87. package/dist/web-components/{Connected-B2d6EoFl.mjs → Connected-DthCPaHl.mjs} +1 -1
  88. package/dist/web-components/{Connected-BSRM9FJY.mjs → Connected-sYBn_9MK.mjs} +1 -1
  89. package/dist/web-components/{Contents-D7FPxSH-.mjs → Contents-AVPYYXht.mjs} +1 -1
  90. package/dist/web-components/ControlMenu-BjJsWnuZ.mjs +1 -0
  91. package/dist/web-components/ControlsFade-C-6WhSxB.mjs +1 -0
  92. package/dist/web-components/{CountMenu-DyTp_J4k.mjs → CountMenu-Dx8D_RJZ.mjs} +1 -1
  93. package/dist/web-components/Cue-xuo5dgKE.mjs +1 -0
  94. package/dist/web-components/Document-BWdafeEi.mjs +1 -0
  95. package/dist/web-components/{DomLayers-CTGub6wo.mjs → DomLayers-DlRapZ1u.mjs} +1 -1
  96. package/dist/web-components/{Download-BOYNIb7C.mjs → Download-Ci_JUTVd.mjs} +1 -1
  97. package/dist/web-components/{EntryBodies-Bfd2Z42z.mjs → EntryBodies-C0ICfS2R.mjs} +1 -1
  98. package/dist/web-components/{EntryThumbnail-DQE8ajI9.mjs → EntryThumbnail-DxHhfRo_.mjs} +1 -1
  99. package/dist/web-components/{FieldPill-D5DNJWLy.mjs → FieldPill-CVfeeafm.mjs} +1 -1
  100. package/dist/web-components/FrameAnimation-AZpVvu0R.mjs +1 -0
  101. package/dist/web-components/Gallery-C2PTJmvN.mjs +1 -0
  102. package/dist/web-components/{HideToggle-DL911R1Z.mjs → HideToggle-0nlIo-f8.mjs} +1 -1
  103. package/dist/web-components/ImageControls-tKVAMpaj.mjs +1 -0
  104. package/dist/web-components/Items-Drd82_Jj.mjs +1 -0
  105. package/dist/web-components/Label-BIjqJ-_T.mjs +1 -0
  106. package/dist/web-components/{LanguageChoice-DT1UPiDn.mjs → LanguageChoice-DkSc-n6g.mjs} +1 -1
  107. package/dist/web-components/LightboxView-Cuqx2H1m.mjs +1 -0
  108. package/dist/web-components/ListEnd-pq-BgaDI.mjs +1 -0
  109. package/dist/web-components/{Loaded-BWfEBJyg.mjs → Loaded-CSO5NFhm.mjs} +1 -1
  110. package/dist/web-components/LoadedCanvas-DK6xMmM1.mjs +1 -0
  111. package/dist/web-components/LoadedMap-DmPH-LKY.mjs +1 -0
  112. package/dist/web-components/{Loading-zw74TdAz.mjs → Loading-CoJLSRkv.mjs} +1 -1
  113. package/dist/web-components/{Map--dJhk0_0.mjs → Map-BEVtD52O.mjs} +1 -1
  114. package/dist/web-components/MapView-DHJcn9gW.mjs +3 -0
  115. package/dist/web-components/Markup-Hm6bWOjm.mjs +2 -0
  116. package/dist/web-components/MediaBody-BpgNtpKZ.mjs +1 -0
  117. package/dist/web-components/MediaBody-Co23JjUJ.mjs +1 -0
  118. package/dist/web-components/{NavDate-BQHuyLOC.mjs → NavDate-CYNK0Qmp.mjs} +1 -1
  119. package/dist/web-components/{Navigator-B3U21_ti.mjs → Navigator-DrYPepzN.mjs} +1 -1
  120. package/dist/web-components/{Pager-DnJknq92.mjs → Pager-CN4lHURv.mjs} +1 -1
  121. package/dist/web-components/PagerLayout-DeqnSQcF.mjs +1 -0
  122. package/dist/web-components/Panel-CFYUlXup.mjs +1 -0
  123. package/dist/web-components/PanelPart-CpUIRbxr.mjs +1 -0
  124. package/dist/web-components/{PanelToggle-CFtWIeWv.mjs → PanelToggle-9ud55NNI.mjs} +1 -1
  125. package/dist/web-components/{PartOfManifest-F87jIrf9.mjs → PartOfManifest-KUHUq-6q.mjs} +1 -1
  126. package/dist/web-components/{Pending-CYAQajKu.mjs → Pending-mcmdyZPA.mjs} +1 -1
  127. package/dist/web-components/PlaceBox-DX4ZLDat.mjs +1 -0
  128. package/dist/web-components/Placeholder-0hE8q-SY.mjs +1 -0
  129. package/dist/web-components/{Position-BkWBRBfW.mjs → Position-DO5qg5Sp.mjs} +1 -1
  130. package/dist/web-components/{Primitives-BmODPlnK.mjs → Primitives-c9sIz0oQ.mjs} +1 -1
  131. package/dist/web-components/Provider-a3xY016W.mjs +1 -0
  132. package/dist/web-components/{ReadMore-BwGFsLS2.mjs → ReadMore-D_WmmKEP.mjs} +1 -1
  133. package/dist/web-components/Root-CU1o0wje.mjs +1 -0
  134. package/dist/web-components/Scene-CboEeptc.mjs +1 -0
  135. package/dist/web-components/SceneView-hcc78jQT.mjs +1 -0
  136. package/dist/web-components/{Search-CbmK9vLp.mjs → Search-BgxEW1UT.mjs} +1 -1
  137. package/dist/web-components/{Sections-Dy5_pkyQ.mjs → Sections-DZVrhoAC.mjs} +2 -2
  138. package/dist/web-components/{StandaloneItems-BmUnBp0H.mjs → StandaloneItems-6cSw7nbF.mjs} +1 -1
  139. package/dist/web-components/{Status-Dww3Pyf4.mjs → Status-DHTzuTkh.mjs} +1 -1
  140. package/dist/web-components/{Steps-o_UprQfZ.mjs → Steps-Dkpy9KiJ.mjs} +1 -1
  141. package/dist/web-components/{TargetItems-BBOGDubv.mjs → TargetItems-CyOI9_Z4.mjs} +1 -1
  142. package/dist/web-components/Timeline-B9tD3Rar.mjs +1 -0
  143. package/dist/web-components/{Tip-BbexILXs.mjs → Tip-nJSTYquc.mjs} +1 -1
  144. package/dist/web-components/{Transcript-ZVXM3ZDA.mjs → Transcript-WvFFAJQM.mjs} +1 -1
  145. package/dist/web-components/Transport-FxLp_bdW.mjs +1 -0
  146. package/dist/web-components/Transport-VUxSEIQO.mjs +1 -0
  147. package/dist/web-components/{annotation-collection-7SS1ELcO.mjs → annotation-collection-BkC3nBPA.mjs} +1 -1
  148. package/dist/web-components/{annotation-name-CYkZopdd.mjs → annotation-name-Du2KAWoD.mjs} +1 -1
  149. package/dist/web-components/{annotations-content-Bdtn50sf.mjs → annotations-content-CEzAS-P2.mjs} +1 -1
  150. package/dist/web-components/{body-CkOBHlJ0.mjs → body-DPlfbLt3.mjs} +1 -1
  151. package/dist/web-components/canvas-BUwBftJW.mjs +1 -0
  152. package/dist/web-components/cloverEngine-UNw5K4Xg.mjs +164 -0
  153. package/dist/web-components/{content-state-reader-Ahh6artg.mjs → content-state-reader-GgQF2MvJ.mjs} +1 -1
  154. package/dist/web-components/{controls-BJrZVQkS.mjs → controls-CC9G5LxK.mjs} +1 -1
  155. package/dist/web-components/custom-elements.json +191 -45
  156. package/dist/web-components/{downloads-CqVWo-yn.mjs → downloads-CmAYeEIz.mjs} +1 -1
  157. package/dist/web-components/dragToClose-DK-eM097.mjs +1 -0
  158. package/dist/web-components/{engine-B-sscpLa.mjs → engine-Dok0z8WP.mjs} +1 -1
  159. package/dist/web-components/{engines-DfCHjbt3.mjs → engines-BD2IfwQF.mjs} +1 -1
  160. package/dist/web-components/es-B1NvdYp-.mjs +1 -0
  161. package/dist/web-components/{fetchManifest-BIzne1Pj.mjs → fetchManifest-tQXcfFiz.mjs} +1 -1
  162. package/dist/web-components/fi-BjtYZNLo.mjs +1 -0
  163. package/dist/web-components/fr-Cd22Lziw.mjs +1 -0
  164. package/dist/web-components/fromManifest-BwQdeAuL.mjs +1 -0
  165. package/dist/web-components/glyphs-dp_HK3Ja.mjs +1 -0
  166. package/dist/web-components/hooks-C4dJ5K_D.mjs +1 -0
  167. package/dist/web-components/image-layers-xcBsiad9.mjs +1 -0
  168. package/dist/web-components/{imageService-0eTvQ-3h.mjs → imageService-4sFnmAFX.mjs} +1 -1
  169. package/dist/web-components/index-DspT4wUm.mjs +1 -0
  170. package/dist/web-components/index.d.mts +5 -5
  171. package/dist/web-components/index.mjs +1 -1
  172. package/dist/web-components/items-BUmOy2QY.mjs +1 -0
  173. package/dist/web-components/items-CWMI53aN.mjs +1 -0
  174. package/dist/web-components/label-BGjL7I4b.mjs +1 -0
  175. package/dist/web-components/layout-B29v2RKK.mjs +1 -0
  176. package/dist/web-components/{link-GEdiEwlR.mjs → link-Ct5PpHEY.mjs} +1 -1
  177. package/dist/web-components/logo-BFstM-0a.mjs +1 -0
  178. package/dist/web-components/masonry-0QfzOgbB.mjs +1 -0
  179. package/dist/web-components/{models-59cEeiAA.mjs → models-BXcT4ijX.mjs} +1 -1
  180. package/dist/web-components/nb-CEwZDBiR.mjs +1 -0
  181. package/dist/web-components/nn-jYQhr9RI.mjs +1 -0
  182. package/dist/web-components/no-CEwZDBiR.mjs +1 -0
  183. package/dist/web-components/{nodes-CTw9OqlA.mjs → nodes-BleXuYE6.mjs} +1 -1
  184. package/dist/web-components/{overlayImage-BMt4UTlR.mjs → overlayImage-BJtfot4Y.mjs} +1 -1
  185. package/dist/web-components/panClearOfControls-Cn2ZXsZi.mjs +1 -0
  186. package/dist/web-components/{panel-C17Rl9Ya.mjs → panel-BxxV_JkD.mjs} +1 -1
  187. package/dist/web-components/part-D4gjnYmT.mjs +1 -0
  188. package/dist/web-components/playerSurface-BXNLaFk0.mjs +1 -0
  189. package/dist/web-components/pointer-CJELU3gI.mjs +1 -0
  190. package/dist/web-components/{provider-BpxorEiq.mjs → provider-CPp0Sgr_.mjs} +1 -1
  191. package/dist/web-components/pt-CWR30SzS.mjs +1 -0
  192. package/dist/web-components/{range-regions-BGQy4E9U.mjs → range-regions-DAaOu0IS.mjs} +1 -1
  193. package/dist/web-components/{read-more-BDM_6CVc.mjs → read-more-lcqGslUd.mjs} +1 -1
  194. package/dist/web-components/readingLanguages-FyVsSWJ8.mjs +1 -0
  195. package/dist/web-components/rendererSurface-nh6-EfuZ.mjs +22 -0
  196. package/dist/web-components/{renderers-CiB74bQh.mjs → renderers-BFS7hFVU.mjs} +1 -1
  197. package/dist/web-components/{resource-CRbpf9pX.mjs → resource-Bufu7lAr.mjs} +1 -1
  198. package/dist/web-components/{save-file-CCuZEuQr.mjs → save-file-CoknKOPz.mjs} +1 -1
  199. package/dist/web-components/search-5ocrsYmT.mjs +1 -0
  200. package/dist/web-components/shared-DFAX0n3B.mjs +1 -0
  201. package/dist/web-components/{show-link-BXm7SNIC.mjs → show-link-DBaJj4s_.mjs} +1 -1
  202. package/dist/web-components/{sizedImage-k4Q-eyOB.mjs → sizedImage-jnOGcIIZ.mjs} +1 -1
  203. package/dist/web-components/{split-Hp6z-v4h.mjs → split-P6J0qqf5.mjs} +1 -1
  204. package/dist/web-components/{status-BmtuKfAG.mjs → status-honoOMNx.mjs} +1 -1
  205. package/dist/web-components/styles-BwkYiCLC.mjs +1 -0
  206. package/dist/web-components/three.mjs +1 -1
  207. package/dist/web-components/{thumbnail-Dp7a8oom.mjs → thumbnail-EbURh-UM.mjs} +1 -1
  208. package/dist/web-components/{tip-C-oovDZK.mjs → tip-BhNI83aT.mjs} +1 -1
  209. package/dist/web-components/{toggle-C7ODWDEZ.mjs → toggle-CJKdi5KH.mjs} +1 -1
  210. package/dist/web-components/{useContainerName-CrOmY-km.mjs → useContainerName-_48Cdi0m.mjs} +1 -1
  211. package/dist/web-components/useControlsVisibility-CieBxGnK.mjs +1 -0
  212. package/dist/web-components/useLazyPanelPane-Da3kJiOt.mjs +1 -0
  213. package/dist/web-components/{useNearViewport-BqXi9Gn4.mjs → useNearViewport-B34ebmIW.mjs} +1 -1
  214. package/dist/web-components/useScrollTrack-DgRGFeP5.mjs +1 -0
  215. package/dist/web-components/viewer/AnnotationItems-BNA_92Dv.mjs +1 -0
  216. package/dist/web-components/viewer/{AnnotationMenu-DPOSehBo.mjs → AnnotationMenu-BIQYVR4N.mjs} +1 -1
  217. package/dist/web-components/viewer/AnnotationState-BbwQqA1U.mjs +1 -0
  218. package/dist/web-components/viewer/Annotations-CZzOZAFP.mjs +2 -0
  219. package/dist/web-components/viewer/Annotations-P4XzAlNc.mjs +1 -0
  220. package/dist/web-components/viewer/{Canvas2DBackend-BTK6ZJh0.mjs → Canvas2DBackend-DFfCzyjL.mjs} +1 -1
  221. package/dist/web-components/viewer/CaptionDetails-DPtE-RQQ.mjs +1 -0
  222. package/dist/web-components/viewer/ChaptersMenu-D6Jmujag.mjs +1 -0
  223. package/dist/web-components/viewer/{ChoiceMenu-DQ1x572Y.mjs → ChoiceMenu-GkqyTQRQ.mjs} +1 -1
  224. package/dist/web-components/viewer/Collection-DjY_6qa6.mjs +1 -0
  225. package/dist/web-components/viewer/Connected-D5T-mtiy.mjs +1 -0
  226. package/dist/web-components/viewer/Connected-DIOuI3Mv.mjs +1 -0
  227. package/dist/web-components/viewer/Contents-DV-VxXuf.mjs +1 -0
  228. package/dist/web-components/viewer/ControlMenu-BsEpff6N.mjs +1 -0
  229. package/dist/web-components/viewer/ControlsFade-BowtN96W.mjs +1 -0
  230. package/dist/web-components/viewer/{CountMenu-4u6U6yqb.mjs → CountMenu-DCmA6HdK.mjs} +1 -1
  231. package/dist/web-components/viewer/Cue-BjbVzrpl.mjs +1 -0
  232. package/dist/web-components/viewer/Document-4ZQd3W3o.mjs +1 -0
  233. package/dist/web-components/viewer/{DomLayers-CGkDtemL.mjs → DomLayers-BCwCxPDU.mjs} +1 -1
  234. package/dist/web-components/viewer/Download-CL4IClAD.mjs +1 -0
  235. package/dist/web-components/viewer/EntryBodies-e40y47bl.mjs +1 -0
  236. package/dist/web-components/viewer/EntryThumbnail-B_dP3w4o.mjs +1 -0
  237. package/dist/web-components/viewer/{FieldPill-DFXGWrvB.mjs → FieldPill-Hse1cDBE.mjs} +1 -1
  238. package/dist/web-components/viewer/FrameAnimation-CE218DCr.mjs +1 -0
  239. package/dist/web-components/viewer/Gallery-F2sVj4ph.mjs +1 -0
  240. package/dist/web-components/viewer/{HideToggle-DP5kHzWM.mjs → HideToggle-CYoqe_ez.mjs} +1 -1
  241. package/dist/web-components/viewer/ImageControls-C2G4x2Es.mjs +1 -0
  242. package/dist/web-components/viewer/LanguageChoice-BmO-322r.mjs +1 -0
  243. package/dist/web-components/viewer/LightboxView-DKR8dXcg.mjs +1 -0
  244. package/dist/web-components/viewer/ListEnd-DX1jsvJk.mjs +1 -0
  245. package/dist/web-components/viewer/{MapView-BN9wXQKV.mjs → MapView-Df0wZjCh.mjs} +2 -2
  246. package/dist/web-components/viewer/MediaBody-CataNonO.mjs +1 -0
  247. package/dist/web-components/viewer/MediaBody-SkIgrEMj.mjs +1 -0
  248. package/dist/web-components/viewer/{NavDate-C2-wwLuB.mjs → NavDate-BZgeaMG9.mjs} +1 -1
  249. package/dist/web-components/viewer/{Navigator-C3jghOd3.mjs → Navigator-Co76p-1n.mjs} +1 -1
  250. package/dist/web-components/viewer/PagerLayout-tUkN1-FV.mjs +1 -0
  251. package/dist/web-components/viewer/PanelPart-Cl4Sst60.mjs +1 -0
  252. package/dist/web-components/viewer/{PartOfManifest-D22yMgCf.mjs → PartOfManifest-DXnbEPzS.mjs} +1 -1
  253. package/dist/web-components/viewer/PlaceBox-xrJ4CGdN.mjs +1 -0
  254. package/dist/web-components/viewer/Placeholder-B1AcizHL.mjs +1 -0
  255. package/dist/web-components/viewer/Search-DTg1cHZ3.mjs +1 -0
  256. package/dist/web-components/viewer/StandaloneItems-BpBEQG8i.mjs +1 -0
  257. package/dist/web-components/viewer/{Steps-Bw32X5xO.mjs → Steps-SpwMQdCL.mjs} +1 -1
  258. package/dist/web-components/viewer/{TargetItems-DLhUH1Gq.mjs → TargetItems-B6Icep5k.mjs} +1 -1
  259. package/dist/web-components/viewer/Transcript-rTAhuXCF.mjs +1 -0
  260. package/dist/web-components/viewer/Transport-vKIDALE-.mjs +1 -0
  261. package/dist/web-components/viewer/Transport-z_kdVisw.mjs +1 -0
  262. package/dist/web-components/viewer/annotation-collection-B7pZiLVk.mjs +1 -0
  263. package/dist/web-components/viewer/annotation-name-BKj1O9lA.mjs +1 -0
  264. package/dist/web-components/viewer/{annotations-content-CbA3eOIC.mjs → annotations-content-9AtLlPNn.mjs} +1 -1
  265. package/dist/web-components/viewer/cloverEngine-jRrYLrWa.mjs +164 -0
  266. package/dist/web-components/viewer/{content-state-reader-C7UBMOq3.mjs → content-state-reader-CPvkju6Q.mjs} +1 -1
  267. package/dist/web-components/viewer/dragToClose-Co9kGk9q.mjs +1 -0
  268. package/dist/web-components/viewer/{fetchManifest-C2Yxg3x9.mjs → fetchManifest-D7N9WhhF.mjs} +1 -1
  269. package/dist/web-components/viewer/{host-CZeyjCKR.mjs → host-DMD9LE4H.mjs} +1 -1
  270. package/dist/web-components/viewer/image-layers-x_shzPvu.mjs +1 -0
  271. package/dist/web-components/viewer/index.mjs +1 -1
  272. package/dist/web-components/viewer/{link-DssZ0Z2N.mjs → link-DikPGzNO.mjs} +1 -1
  273. package/dist/web-components/viewer/overlayImage-33kKKB0T.mjs +1 -0
  274. package/dist/web-components/viewer/range-regions-TH6WWGTT.mjs +1 -0
  275. package/dist/web-components/viewer/{renderers-DLoqv3QO.mjs → renderers-BxePmixF.mjs} +1 -1
  276. package/dist/web-components/viewer/{save-file-CJT5p5Hg.mjs → save-file-QXKiPlST.mjs} +1 -1
  277. package/dist/web-components/viewer/{search-PhOwMKHi.mjs → search-B_NePyas.mjs} +1 -1
  278. package/dist/web-components/viewer/styles-Bedyz7_l.mjs +1 -0
  279. package/dist/web-components/viewer/useControlsVisibility-Cu-jTDzs.mjs +1 -0
  280. package/dist/web-components/viewer/useLazyPanelPane-BhLtRixT.mjs +1 -0
  281. package/dist/web-components/viewer/viewer-nfPJPwwt.mjs +29 -0
  282. package/dist/web-components/viewer/{vtt-1Pk7Dhsj.mjs → vtt-CUn4h5JB.mjs} +1 -1
  283. package/dist/web-components/viewer-DN2Mo3vc.mjs +1 -0
  284. package/dist/web-components/{vtt-CacHieeN.mjs → vtt-C5M5WPSG.mjs} +1 -1
  285. package/package.json +1 -1
  286. package/dist/templates/shared/LightboxBody.mjs +0 -9
  287. package/dist/web-components/About-DhOGPFaI.mjs +0 -1
  288. package/dist/web-components/AnnotationItems-CNP4CJiT.mjs +0 -1
  289. package/dist/web-components/Body-DaY1UJIy.mjs +0 -1
  290. package/dist/web-components/BodyUnloadable-DcTM7hHF.mjs +0 -1
  291. package/dist/web-components/CanvasView-BWQ4SK2b.mjs +0 -2
  292. package/dist/web-components/CaptionDetails-DSziiuQV.mjs +0 -1
  293. package/dist/web-components/ChoiceMenu-DTuEEUeM.mjs +0 -1
  294. package/dist/web-components/Collection-B9swJtPW.mjs +0 -1
  295. package/dist/web-components/ControlMenu-Crtho2cs.mjs +0 -1
  296. package/dist/web-components/Cue-CbZaGwZh.mjs +0 -1
  297. package/dist/web-components/Document-BfltLWZZ.mjs +0 -1
  298. package/dist/web-components/DocumentPanel-ZSe40cV4.mjs +0 -1
  299. package/dist/web-components/FrameAnimation-IfR1czfc.mjs +0 -1
  300. package/dist/web-components/Gallery-DD06BDQo.mjs +0 -1
  301. package/dist/web-components/Items-BHzT9A73.mjs +0 -1
  302. package/dist/web-components/Label-KabnxuMN.mjs +0 -1
  303. package/dist/web-components/LightboxBody-BhRhdXo6.mjs +0 -1
  304. package/dist/web-components/ListEnd-CbwNlty-.mjs +0 -1
  305. package/dist/web-components/LoadedCanvas-CdZ5WOWz.mjs +0 -1
  306. package/dist/web-components/LoadedMap-DQyQVRVQ.mjs +0 -1
  307. package/dist/web-components/MapView-duA5WGsu.mjs +0 -3
  308. package/dist/web-components/Markup-D-kioDf9.mjs +0 -2
  309. package/dist/web-components/MediaBody-CoOiVXcv.mjs +0 -1
  310. package/dist/web-components/MediaBody-d8ErTuwT.mjs +0 -1
  311. package/dist/web-components/PagerLayout-CvOmKtSW.mjs +0 -1
  312. package/dist/web-components/Panel-CIdjOznL.mjs +0 -1
  313. package/dist/web-components/PlaceBox-BtIbIotm.mjs +0 -1
  314. package/dist/web-components/Placeholder-TIyj4ZjR.mjs +0 -1
  315. package/dist/web-components/Provider-C8se8i4I.mjs +0 -1
  316. package/dist/web-components/Root-CAJB0-Mh.mjs +0 -1
  317. package/dist/web-components/Scene-Ctcdt7CD.mjs +0 -1
  318. package/dist/web-components/SceneView-B6bEx_7x.mjs +0 -1
  319. package/dist/web-components/Timeline-CfIF4APc.mjs +0 -1
  320. package/dist/web-components/canvas-CWf_Fag8.mjs +0 -1
  321. package/dist/web-components/cloverEngine-6djEHNCD.mjs +0 -164
  322. package/dist/web-components/dragToClose-C-Pf1IeO.mjs +0 -1
  323. package/dist/web-components/es-BYfHUZ7P.mjs +0 -1
  324. package/dist/web-components/fi-B5y2qr8T.mjs +0 -1
  325. package/dist/web-components/fr-ChezCx6V.mjs +0 -1
  326. package/dist/web-components/fromManifest-gg5Wx14y.mjs +0 -1
  327. package/dist/web-components/glyphs-JYl2STEr.mjs +0 -1
  328. package/dist/web-components/hooks-x7rO95CS.mjs +0 -1
  329. package/dist/web-components/image-layers-BjbeyHBS.mjs +0 -1
  330. package/dist/web-components/index-BZ7b9k0N.mjs +0 -1
  331. package/dist/web-components/items-CnAIl9fS.mjs +0 -1
  332. package/dist/web-components/items-F6hJgdAS.mjs +0 -1
  333. package/dist/web-components/label-CI88KH2_.mjs +0 -1
  334. package/dist/web-components/layout-De1MOSYe.mjs +0 -1
  335. package/dist/web-components/logo-Ckwj7FlP.mjs +0 -1
  336. package/dist/web-components/nb-8J22f9Td.mjs +0 -1
  337. package/dist/web-components/nn-Dv1EvzI1.mjs +0 -1
  338. package/dist/web-components/no-8J22f9Td.mjs +0 -1
  339. package/dist/web-components/panClearOfControls-ac9uf-Qs.mjs +0 -1
  340. package/dist/web-components/part-CXts97_M.mjs +0 -1
  341. package/dist/web-components/playerSurface-HYwEwPK6.mjs +0 -1
  342. package/dist/web-components/pt-DWYQkATt.mjs +0 -1
  343. package/dist/web-components/readingLanguages-fs_HqvqQ.mjs +0 -1
  344. package/dist/web-components/rendererSurface-C0aKlE0v.mjs +0 -22
  345. package/dist/web-components/search-CkM0O0Z1.mjs +0 -1
  346. package/dist/web-components/shared-MTsMddHx.mjs +0 -1
  347. package/dist/web-components/styles-CZV1nbBQ.mjs +0 -1
  348. package/dist/web-components/useScrollTrack-CEsOU2yT.mjs +0 -1
  349. package/dist/web-components/viewer/AnnotationItems-CyhVcRFc.mjs +0 -1
  350. package/dist/web-components/viewer/AnnotationState-Bjztkobn.mjs +0 -1
  351. package/dist/web-components/viewer/Annotations-Dh_8Tzi0.mjs +0 -2
  352. package/dist/web-components/viewer/Annotations-wwuOCxzI.mjs +0 -1
  353. package/dist/web-components/viewer/CaptionDetails-BwCTovy_.mjs +0 -1
  354. package/dist/web-components/viewer/Collection-DSBxCmXw.mjs +0 -1
  355. package/dist/web-components/viewer/Connected-CL3N8F2J.mjs +0 -1
  356. package/dist/web-components/viewer/Connected-DTk1jlyI.mjs +0 -1
  357. package/dist/web-components/viewer/Contents-DrXckx7d.mjs +0 -1
  358. package/dist/web-components/viewer/ControlMenu-Bp91s-g_.mjs +0 -1
  359. package/dist/web-components/viewer/Cue-C-aF8peC.mjs +0 -1
  360. package/dist/web-components/viewer/Document-BN1rICu3.mjs +0 -1
  361. package/dist/web-components/viewer/DocumentPanel-CEesxdeY.mjs +0 -1
  362. package/dist/web-components/viewer/Download-CawEl9MN.mjs +0 -1
  363. package/dist/web-components/viewer/EntryBodies-nYHMwSSM.mjs +0 -1
  364. package/dist/web-components/viewer/EntryThumbnail-DrO_0SzR.mjs +0 -1
  365. package/dist/web-components/viewer/FrameAnimation-CZfzpxaD.mjs +0 -1
  366. package/dist/web-components/viewer/Gallery-MWHtvjti.mjs +0 -1
  367. package/dist/web-components/viewer/LanguageChoice-C50T7dPI.mjs +0 -1
  368. package/dist/web-components/viewer/LightboxBody-C2T7IC29.mjs +0 -1
  369. package/dist/web-components/viewer/ListEnd-BDuOx__m.mjs +0 -1
  370. package/dist/web-components/viewer/MediaBody-CEyswliX.mjs +0 -1
  371. package/dist/web-components/viewer/MediaBody-Dw3DWDjc.mjs +0 -1
  372. package/dist/web-components/viewer/PagerLayout-Cg2NpqoD.mjs +0 -1
  373. package/dist/web-components/viewer/PlaceBox-Dckw4Sfk.mjs +0 -1
  374. package/dist/web-components/viewer/Placeholder-NYVWYg5Q.mjs +0 -1
  375. package/dist/web-components/viewer/Search-DC259m4f.mjs +0 -1
  376. package/dist/web-components/viewer/StandaloneItems-E4kpMne9.mjs +0 -1
  377. package/dist/web-components/viewer/Transcript-D_VGJQxn.mjs +0 -1
  378. package/dist/web-components/viewer/annotation-collection-DZHa18ir.mjs +0 -1
  379. package/dist/web-components/viewer/annotation-name-BaNdW2Xk.mjs +0 -1
  380. package/dist/web-components/viewer/cloverEngine-C04bCSFR.mjs +0 -164
  381. package/dist/web-components/viewer/image-layers-B09fporZ.mjs +0 -1
  382. package/dist/web-components/viewer/overlayImage-BR3eJCKq.mjs +0 -1
  383. package/dist/web-components/viewer/range-regions-By6L5JOK.mjs +0 -1
  384. package/dist/web-components/viewer/styles-NZLnZPAC.mjs +0 -1
  385. package/dist/web-components/viewer/viewer-D30YHqyF.mjs +0 -29
  386. package/dist/web-components/viewer-CH7re5OO.mjs +0 -1
@@ -54,26 +54,37 @@ function AboutContent({
54
54
  const root = useRef(null);
55
55
  useEffect(() => {
56
56
  const about = root.current;
57
- const image = about == null ? void 0 : about.querySelector(".clover-about-thumbnail");
58
- if (!about || !image || typeof ResizeObserver === "undefined") return;
59
- const heading = about.querySelector(".clover-about-label");
57
+ const head = about == null ? void 0 : about.querySelector(".clover-about-head");
58
+ if (!about || !head || typeof ResizeObserver === "undefined") return;
59
+ const watched = /* @__PURE__ */ new Set();
60
60
  const write = () => {
61
+ const image = head.querySelector(".clover-about-thumbnail");
62
+ const heading = head.querySelector(".clover-about-label");
63
+ for (const element of [image, heading])
64
+ if (element && !watched.has(element)) {
65
+ watched.add(element);
66
+ observer.observe(element);
67
+ }
68
+ const style = about.style;
69
+ if (!image) {
70
+ style.removeProperty("--clover-about-label-height");
71
+ style.removeProperty("--clover-about-thumbnail-width");
72
+ return;
73
+ }
61
74
  const height = `${(heading == null ? void 0 : heading.offsetHeight) ?? 0}px`;
62
75
  const width = `${image.offsetWidth}px`;
63
- const style = about.style;
64
76
  if (style.getPropertyValue("--clover-about-label-height") !== height)
65
77
  style.setProperty("--clover-about-label-height", height);
66
78
  if (style.getPropertyValue("--clover-about-thumbnail-width") !== width)
67
79
  style.setProperty("--clover-about-thumbnail-width", width);
68
80
  };
69
- write();
70
81
  let frame = 0;
71
82
  const observer = new ResizeObserver(() => {
72
83
  cancelAnimationFrame(frame);
73
84
  frame = requestAnimationFrame(write);
74
85
  });
75
- observer.observe(image);
76
- if (heading) observer.observe(heading);
86
+ observer.observe(head);
87
+ write();
77
88
  return () => {
78
89
  cancelAnimationFrame(frame);
79
90
  observer.disconnect();
@@ -128,7 +139,13 @@ function AboutContent({
128
139
  alt: label ? "" : void 0
129
140
  }
130
141
  ),
131
- label && /* @__PURE__ */ jsx(Label, { as: titleTag(headingLevel), className: "clover-about-label" })
142
+ label && /* @__PURE__ */ jsx(
143
+ Label,
144
+ {
145
+ as: titleTag(headingLevel),
146
+ className: "clover-about-label clover-title"
147
+ }
148
+ )
132
149
  ] }),
133
150
  canvasSummary && /* @__PURE__ */ jsx(Summary, { of: "canvas", className: "clover-about-summary" }),
134
151
  isLoneCanvas(manifest) && manifest.partOf && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
@@ -6,12 +6,10 @@ import { AboutActions } from "./AboutActions.mjs";
6
6
  import { InPanelContext } from "./ReadingLanguages.mjs";
7
7
  import { Tip } from "../../ui/Tip.mjs";
8
8
  import { Close } from "../Body/glyphs.mjs";
9
- import { canvasTimedText, canvasTextTranscripts } from "../Canvas/layout.mjs";
10
- import { SEARCH_SET_ID, searchServiceOf } from "../../core/search-service.mjs";
11
- import { hasMapData } from "../../core/geo-detect.mjs";
12
- import { tableOfContents } from "../../core/ranges.mjs";
13
- import { partOfCollection, selectVisibleCanvases } from "../../core/selectors.mjs";
14
- import { selectListedSets } from "../../core/annotation-sets.mjs";
9
+ import { SEARCH_SET_ID } from "../../core/search-service.mjs";
10
+ import { usePanelSections } from "./sections.mjs";
11
+ import { langWithin } from "../../i18n/config.mjs";
12
+ import { languageToRead } from "../../i18n/languages.mjs";
15
13
  import { useCloverTranslation } from "../../i18n/useCloverTranslation.mjs";
16
14
  import { join } from "../../lib/classnames.mjs";
17
15
  import { useClover, useCloverSelector } from "../../react/context.mjs";
@@ -54,6 +52,8 @@ const Panel = forwardRef(function Panel2({
54
52
  as: Tag = "aside",
55
53
  download = true,
56
54
  languages = true,
55
+ sections,
56
+ labels,
57
57
  className,
58
58
  children,
59
59
  onKeyDown,
@@ -62,7 +62,7 @@ const Panel = forwardRef(function Panel2({
62
62
  var _a;
63
63
  const { clover } = useClover("Panel");
64
64
  const element = useRef(null);
65
- const { t, langOf } = useCloverTranslation();
65
+ const { t, langOf, hostLanguage, i18n } = useCloverTranslation();
66
66
  const name = useContainerName(
67
67
  t("informationPanelTabs"),
68
68
  langOf("informationPanelTabs"),
@@ -72,38 +72,18 @@ const Panel = forwardRef(function Panel2({
72
72
  const lang = langOf(key);
73
73
  return lang ? /* @__PURE__ */ jsx("span", { ...languageProps(lang), children: t(key) }) : t(key);
74
74
  };
75
- const hasAnnotations = useCloverSelector(
76
- (state) => selectListedSets(state.manifest, state.addedSets).length > 0
77
- );
78
- const hasTranscript = useCloverSelector(
79
- (state) => selectVisibleCanvases(
80
- state.manifest,
81
- state.canvasId
82
- ).some(
83
- (canvas) => canvasTimedText(canvas).length > 0 || canvasTextTranscripts(canvas).length > 0
84
- )
85
- );
86
- const hasContents = useCloverSelector(
87
- (state) => tableOfContents(state.manifest).length > 0
88
- );
89
- const hasSearch = useCloverSelector(
90
- (state) => Boolean(searchServiceOf(state.manifest))
91
- );
92
- const hasMap = useCloverSelector(
93
- (state) => hasMapData(state.manifest, state.collection)
94
- );
95
- const hasTargets = useCloverSelector(
96
- (state) => {
97
- var _a2;
98
- return (((_a2 = state.targets) == null ? void 0 : _a2.items.length) ?? 0) > 1;
99
- }
100
- );
101
- const hasCollection = useCloverSelector(
102
- (state) => {
103
- var _a2, _b;
104
- return (((_b = (_a2 = state.collection) == null ? void 0 : _a2.items) == null ? void 0 : _b.length) ?? 0) > 0 || Boolean(partOfCollection(state.manifest));
105
- }
106
- );
75
+ const sectionLabel = (section, key) => {
76
+ const given2 = labels == null ? void 0 : labels[section];
77
+ if (given2 === void 0) return tabLabel(key);
78
+ if (typeof given2 === "string") return given2;
79
+ const tags = Object.keys(given2);
80
+ const tag = languageToRead(tags, i18n.language);
81
+ if (!tag) return tabLabel(key);
82
+ const lang = langWithin(tag, hostLanguage);
83
+ return lang ? /* @__PURE__ */ jsx("span", { ...languageProps(lang), children: given2[tag] }) : given2[tag];
84
+ };
85
+ const offered = usePanelSections(sections);
86
+ const has = (section) => offered.includes(section);
107
87
  const given = React.Children.toArray(children).filter(
108
88
  (child) => React.isValidElement(child) && child.type === Tab
109
89
  );
@@ -115,62 +95,70 @@ const Panel = forwardRef(function Panel2({
115
95
  content: props.children,
116
96
  ...props.value === "about" && { actions: aboutActions }
117
97
  })) : [
118
- {
119
- value: "about",
120
- label: tabLabel("informationPanelTabsAbout"),
121
- content: /* @__PURE__ */ jsx(About, { headingLevel: inner, download }),
122
- actions: aboutActions
123
- },
124
- ...hasTargets ? [
98
+ ...has("about") ? [
99
+ {
100
+ value: "about",
101
+ label: sectionLabel("about", "informationPanelTabsAbout"),
102
+ content: /* @__PURE__ */ jsx(About, { headingLevel: inner, download }),
103
+ actions: aboutActions
104
+ }
105
+ ] : [],
106
+ ...has("targets") ? [
125
107
  {
126
108
  value: "targets",
127
- label: tabLabel("informationPanelTabsTargets"),
109
+ label: sectionLabel("targets", "informationPanelTabsTargets"),
128
110
  content: later(/* @__PURE__ */ jsx(Targets, { headingLevel: inner }))
129
111
  }
130
112
  ] : [],
131
- ...hasCollection ? [
113
+ ...has("collection") ? [
132
114
  {
133
115
  value: "collection",
134
- label: tabLabel("informationPanelTabsCollection"),
116
+ label: sectionLabel(
117
+ "collection",
118
+ "informationPanelTabsCollection"
119
+ ),
135
120
  content: later(/* @__PURE__ */ jsx(Collection, { headingLevel: inner }))
136
121
  }
137
122
  ] : [],
138
- ...hasContents ? [
123
+ ...has("contents") ? [
139
124
  {
140
125
  value: "contents",
141
- label: tabLabel("informationPanelTabsContents"),
126
+ label: sectionLabel("contents", "informationPanelTabsContents"),
142
127
  content: later(/* @__PURE__ */ jsx(Contents, {}))
143
128
  }
144
129
  ] : [],
145
- ...hasSearch ? [
130
+ ...has("search") ? [
146
131
  {
147
132
  value: "search",
148
- label: tabLabel("informationPanelTabsSearch"),
133
+ label: sectionLabel("search", "informationPanelTabsSearch"),
149
134
  // Its field small and held as the hits scroll (Mat, 2026-10-26).
150
135
  content: later(
151
136
  /* @__PURE__ */ jsx(Search, { headingLevel: inner, sticky: true, size: "small" })
152
137
  )
153
138
  }
154
139
  ] : [],
155
- ...hasMap ? [
140
+ ...has("map") ? [
156
141
  {
157
142
  value: "map",
158
- label: tabLabel("informationPanelTabsMap"),
143
+ label: sectionLabel("map", "informationPanelTabsMap"),
159
144
  content: later(/* @__PURE__ */ jsx(RootMap, {}))
160
145
  }
161
146
  ] : [],
162
- ...hasTranscript ? [
147
+ ...has("transcript") ? [
163
148
  {
164
149
  value: "transcript",
165
- label: tabLabel("transcriptLabel"),
150
+ label: sectionLabel("transcript", "transcriptLabel"),
166
151
  // Its find field small and held as the cues scroll, as Search's.
167
152
  content: later(/* @__PURE__ */ jsx(Transcript, { sticky: true, size: "small" }))
168
153
  }
169
154
  ] : [],
170
- ...hasAnnotations ? [
155
+ ...has("annotations") ? [
171
156
  {
172
157
  value: "annotations",
173
- label: tabLabel("informationPanelTabsAnnotations"),
158
+ label: sectionLabel(
159
+ "annotations",
160
+ "informationPanelTabsAnnotations"
161
+ ),
174
162
  // Every Canvas's, by Canvas, those in view kept in sight.
175
163
  content: later(/* @__PURE__ */ jsx(Annotations, { headingLevel: inner }))
176
164
  }
@@ -0,0 +1,62 @@
1
+ "use client";
2
+ import { canvasTimedText, canvasTextTranscripts } from "../Canvas/layout.mjs";
3
+ import { hasMapData } from "../../core/geo-detect.mjs";
4
+ import { searchServiceOf } from "../../core/search-service.mjs";
5
+ import { tableOfContents } from "../../core/ranges.mjs";
6
+ import { selectVisibleCanvases, partOfCollection } from "../../core/selectors.mjs";
7
+ import { selectListedSets } from "../../core/annotation-sets.mjs";
8
+ import { useCloverSelector } from "../../react/context.mjs";
9
+ const PANEL_SECTIONS = [
10
+ "about",
11
+ "targets",
12
+ "collection",
13
+ "contents",
14
+ "search",
15
+ "map",
16
+ "transcript",
17
+ "annotations"
18
+ ];
19
+ const HAS = {
20
+ // A content state's several targets (Cookbook 0540), listed as a Collection's members are.
21
+ targets: (state) => {
22
+ var _a;
23
+ return (((_a = state.targets) == null ? void 0 : _a.items.length) ?? 0) > 1;
24
+ },
25
+ // Reached through a Collection, or part of one: offered either way, fetched when opened.
26
+ collection: (state) => {
27
+ var _a, _b;
28
+ return (((_b = (_a = state.collection) == null ? void 0 : _a.items) == null ? void 0 : _b.length) ?? 0) > 0 || Boolean(partOfCollection(state.manifest));
29
+ },
30
+ contents: (state) => tableOfContents(state.manifest).length > 0,
31
+ search: (state) => Boolean(searchServiceOf(state.manifest)),
32
+ map: (state) => hasMapData(state.manifest, state.collection),
33
+ transcript: (state) => selectVisibleCanvases(
34
+ state.manifest,
35
+ state.canvasId
36
+ ).some(
37
+ (canvas) => canvasTimedText(canvas).length > 0 || canvasTextTranscripts(canvas).length > 0
38
+ ),
39
+ annotations: (state) => selectListedSets(state.manifest, state.addedSets).length > 0
40
+ };
41
+ const narrow = (data, sections) => {
42
+ const chosen = Array.isArray(sections) ? new Set(sections) : void 0;
43
+ return PANEL_SECTIONS.filter(
44
+ (section) => data[section] && (!chosen || chosen.has(section))
45
+ );
46
+ };
47
+ function usePanelSections(sections) {
48
+ const data = {
49
+ about: true,
50
+ targets: useCloverSelector(HAS.targets),
51
+ collection: useCloverSelector(HAS.collection),
52
+ contents: useCloverSelector(HAS.contents),
53
+ search: useCloverSelector(HAS.search),
54
+ map: useCloverSelector(HAS.map),
55
+ transcript: useCloverSelector(HAS.transcript),
56
+ annotations: useCloverSelector(HAS.annotations)
57
+ };
58
+ return narrow(data, sections);
59
+ }
60
+ export {
61
+ usePanelSections
62
+ };
@@ -2,6 +2,7 @@
2
2
  import { useRef, useState, useEffect, useMemo, useSyncExternalStore } from "react";
3
3
  import { createClover } from "../../core/clover.mjs";
4
4
  import { requestKey } from "../../core/request.mjs";
5
+ import { useRootContentState } from "../../react/useContentStateOutput.mjs";
5
6
  import { sameRenderers } from "../Body/renderers.mjs";
6
7
  function useRootState({
7
8
  iiifContent,
@@ -91,7 +92,7 @@ function useRootState({
91
92
  useEffect(() => {
92
93
  clover.setAnnotationPages(annotationPages);
93
94
  }, [clover, annotationPages]);
94
- useContentStateOutput(clover, onContentStateChange);
95
+ useRootContentState(clover, onContentStateChange);
95
96
  useEffect(() => {
96
97
  if (manifestControlled && status === "ready") {
97
98
  void clover.syncManifest(manifestId ?? null);
@@ -143,54 +144,6 @@ function annotationsInputKey(input) {
143
144
  )
144
145
  );
145
146
  }
146
- const SETTLE_MS = 300;
147
- function useContentStateOutput(clover, onChange) {
148
- const latest = useRef(onChange);
149
- latest.current = onChange;
150
- const enabled = Boolean(onChange);
151
- useEffect(() => {
152
- if (!enabled) return;
153
- let timer;
154
- let last = "";
155
- const settle = () => {
156
- clearTimeout(timer);
157
- timer = setTimeout(() => {
158
- var _a;
159
- const state = clover.getContentState();
160
- if (!state || state.encoded === last) return;
161
- last = state.encoded;
162
- (_a = latest.current) == null ? void 0 : _a.call(latest, state);
163
- }, SETTLE_MS);
164
- };
165
- let canvasId = clover.store.get().canvasId;
166
- const offStore = clover.store.subscribe(() => {
167
- const next = clover.store.get().canvasId;
168
- if (next !== canvasId) {
169
- canvasId = next;
170
- settle();
171
- }
172
- });
173
- const offViewport = clover.viewport.subscribe(settle);
174
- let element = null;
175
- const watch = (next) => {
176
- element == null ? void 0 : element.removeEventListener("pause", settle);
177
- element == null ? void 0 : element.removeEventListener("seeked", settle);
178
- element = next;
179
- element == null ? void 0 : element.addEventListener("pause", settle);
180
- element == null ? void 0 : element.addEventListener("seeked", settle);
181
- };
182
- watch(clover.media.get());
183
- const offMedia = clover.media.subscribe(watch);
184
- settle();
185
- return () => {
186
- clearTimeout(timer);
187
- offStore();
188
- offViewport();
189
- offMedia();
190
- watch(null);
191
- };
192
- }, [clover, enabled]);
193
- }
194
147
  function contentKey(content) {
195
148
  if (typeof content === "string") return content;
196
149
  return content.id ?? content["@id"] ?? content;
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import React, { useState, useRef, useCallback, useEffect, useMemo } from "react";
3
+ import React, { useEffect, useState, useRef, useCallback, useMemo } from "react";
4
4
  import { attachOrbitGestures } from "./gestures.mjs";
5
5
  import { homeOrbit, turned, zoomed, sameOrbit } from "./orbit.mjs";
6
6
  import { sceneModels, sceneBackground } from "./models.mjs";
@@ -11,6 +11,7 @@ import { BodyUnloadable } from "../../ui/BodyUnloadable.mjs";
11
11
  import { Information } from "../Body/glyphs.mjs";
12
12
  import { useControlsVisibility } from "../Body/useControlsVisibility.mjs";
13
13
  import { useNearViewport } from "../Body/useNearViewport.mjs";
14
+ import { buildContentState } from "../../core/content-state.mjs";
14
15
  import { requestKey } from "../../core/request.mjs";
15
16
  import { localize } from "../../core/value.mjs";
16
17
  import useFullscreen from "../../hooks/useFullscreen.mjs";
@@ -36,6 +37,7 @@ import { useUniqueId } from "../../ui/useUniqueId.mjs";
36
37
  import { visuallyHidden } from "../../ui/visuallyHidden.mjs";
37
38
  import { engineFor } from "./engines.mjs";
38
39
  import { languageProps } from "../../i18n/direction.mjs";
40
+ import { useContentStateOutput } from "../../react/useContentStateOutput.mjs";
39
41
  const ALL_CONTROLS = {
40
42
  zoom: true,
41
43
  fullPage: true,
@@ -70,9 +72,18 @@ function SceneBody({
70
72
  options,
71
73
  manifestId,
72
74
  engine: drawWith = "clover",
75
+ onContentStateChange,
73
76
  children
74
77
  }) {
75
78
  const { t } = useCloverTranslation();
79
+ const contentStateChanged = useContentStateOutput(
80
+ () => manifestId === "loading" ? null : buildContentState({ manifestId, canvasId: scene.id, type: "Scene" }),
81
+ onContentStateChange
82
+ );
83
+ useEffect(
84
+ () => contentStateChanged(),
85
+ [scene.id, manifestId, contentStateChanged]
86
+ );
76
87
  const [wrapper, setWrapper] = useState(null);
77
88
  const root = useRootLanguage(setWrapper);
78
89
  const contrast = useHighContrast(highContrast);
@@ -464,7 +475,7 @@ function SceneBody({
464
475
  },
465
476
  children: [
466
477
  /* @__PURE__ */ jsx(ExitFullscreen, { hidden: !exitShown }),
467
- (captioned.length > 0 || React.Children.count(children) > 0) && /* @__PURE__ */ jsxs(ControlCluster, { controls: () => [], controlButtons, children: [
478
+ (captioned.length > 0 || React.Children.count(children) > 0) && /* @__PURE__ */ jsxs(ControlCluster, { children: [
468
479
  captioned.length > 0 && /* @__PURE__ */ jsx(
469
480
  Button,
470
481
  {
@@ -49,8 +49,9 @@ function createEngine(host, { onLost }) {
49
49
  models.length ? `Clover draws glTF models (${MODEL_FORMATS.join(", ")}), not ${formats.join(", ")}.` : "The Scene paints no model."
50
50
  );
51
51
  }
52
+ const most = gl.getParameter(gl.MAX_TEXTURE_SIZE);
52
53
  const assets = await Promise.all(
53
- drawable.map((model) => loadGltf(model.src, request))
54
+ drawable.map((model) => loadGltf(model.src, request, most))
54
55
  );
55
56
  if (disposed) return bounds;
56
57
  assets.forEach(
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { isHovering, isDirect, TAP_MS, TAP_SLOP } from "../../lib/pointer.mjs";
3
+ import { useControlsVisibility } from "../Body/useControlsVisibility.mjs";
3
4
  const playerSurface = (host) => {
4
5
  const listeners = /* @__PURE__ */ new Map();
5
6
  const emit = (event) => {
@@ -80,6 +81,7 @@ const playerSurface = (host) => {
80
81
  }
81
82
  };
82
83
  };
84
+ playerSurface.controlsVisibility = useControlsVisibility;
83
85
  export {
84
86
  playerSurface
85
87
  };
@@ -426,18 +426,21 @@ function createClover(options = {}) {
426
426
  }
427
427
  },
428
428
  getContentState() {
429
+ var _a;
429
430
  const { manifest, canvasId } = store.get();
430
431
  if (!manifest || !canvasId) return null;
431
432
  const view = viewport.get();
432
433
  const element = media.get();
433
434
  const time = element && element.currentTime > 0 ? element.currentTime : null;
434
- const current = view && selectVisibleCanvases(manifest, canvasId).some(
435
- (canvas) => canvas.id === view.canvasId
436
- );
435
+ const visible = selectVisibleCanvases(manifest, canvasId);
436
+ const current = view && visible.some((canvas) => canvas.id === view.canvasId);
437
437
  const onView = current && !time ? view : null;
438
+ const shown = (onView == null ? void 0 : onView.canvasId) ?? canvasId;
438
439
  return buildContentState({
439
440
  manifestId: manifest.id,
440
- canvasId: (onView == null ? void 0 : onView.canvasId) ?? canvasId,
441
+ canvasId: shown,
442
+ // A Timeline or a Scene by its own type: a Canvas's is the default.
443
+ type: (_a = visible.find((canvas) => canvas.id === shown)) == null ? void 0 : _a.type,
441
444
  region: onView == null ? void 0 : onView.region,
442
445
  time
443
446
  });
@@ -14,17 +14,19 @@ function encodeContentState(json) {
14
14
  function buildContentState({
15
15
  manifestId,
16
16
  canvasId,
17
+ type = "Canvas",
17
18
  region,
18
19
  time
19
20
  }) {
20
21
  const source = {
21
22
  id: canvasId,
22
- type: "Canvas",
23
- partOf: [{ id: manifestId, type: "Manifest" }]
23
+ type,
24
+ ...manifestId && manifestId !== canvasId ? { partOf: [{ id: manifestId, type: "Manifest" }] } : {}
24
25
  };
25
26
  const fragment = time != null && time > 0 ? `t=${Math.round(time * 100) / 100}` : region ? `xywh=${[region.x, region.y, region.w, region.h].map(Math.round).join(",")}` : null;
26
27
  const json = {
27
- "@context": "http://iiif.io/api/presentation/3/context.json",
28
+ // A Timeline and a Scene are Presentation 4's: Presentation 3 knows only the Canvas.
29
+ "@context": `http://iiif.io/api/presentation/${type === "Canvas" ? 3 : 4}/context.json`,
28
30
  id: `${canvasId}#content-state`,
29
31
  type: "Annotation",
30
32
  motivation: ["contentState"],
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- const en = JSON.parse('{"commonClose":"Close","commonNext":"Next","commonPrevious":"Previous","commonSearch":"Search","commonViewAll":"View all","controlShortcut":"{{label}} ({{shortcut}})","contentSearchLoading":"Loading...","contentSearchPlaceholder":"Search","contentSearchResultsNone":"No results","contentSearchResult":"1 result","contentSearchResults":"{{count}} results","contentSearchError":"The search could not be completed.","contentSearchPosition":"Result {{index}} of {{total}}","contentSearchClear":"Clear search","canvasPosition":"Item {{index}} of {{total}}","canvasImage":"Image","bodyUnloadableImage":"This image could not be loaded.","bodyUnloadableVideo":"This video could not be loaded.","bodyUnloadableAudio":"This audio could not be loaded.","bodyUnloadableModel":"This model could not be loaded.","canvasRoleDescription":"zoomable image","canvasKeysImage":"Use the arrow keys to pan, with Shift for larger steps, plus and minus to zoom, 0 to reset the view, and R or Shift+R to rotate.","canvasKeysMedia":"Press Space or K to play or pause, J or L to skip ten seconds back or forward, and M to mute or unmute.","canvasKeysAnnotations":"Press Escape to clear the selected annotation.","sceneModel":"3D model","sceneRoleDescription":"rotatable 3D model","sceneKeys":"Use the arrow keys to rotate the model, with Shift for larger steps, plus and minus to zoom, 0 to reset the view, and R or Shift+R to rotate it right or left.","sceneRotateUp":"Rotate up","sceneRotateDown":"Rotate down","sceneRotate":"Rotate","sceneResetView":"Reset view","statusLoading":"Loading…","statusError":"This could not be loaded.","itemsLabel":"Items","download":"Download","downloadPage":"This page","downloadAll":"All pages","templateSidebar":"Items","templateSidebarToggle":"Show items","collectionLabel":"Collection","itemsScrollBack":"Show previous items","itemsScrollForward":"Show more items","aboutRights":"Rights","aboutDate":"Date","aboutHomepage":"Homepage","aboutSeeAlso":"See also","aboutProvider":"Provider","logo":"Logo","aboutManifest":"IIIF Manifest","aboutCanvas":"IIIF Canvas","aboutPartOf":"Part of","aboutOpenManifest":"Open the full Manifest","aboutCollection":"IIIF Collection","readingLanguage":"Language","annotationsHide":"Hide annotations","annotationsHideTip":"Hide","readMore":"Read more","readLess":"Read less","annotationsShow":"Find on the image","annotationsShowTime":"Find in the recording","annotationsImage":"Image","annotationsLanguage":"Language","annotationsOpenLink":"Open the link","transcriptLabel":"Transcript","imageViewerOpen":"Open image viewer","imageViewerClose":"Close image viewer","canvasChoice":"Choice","imageFullScreen":"Full screen","imageExitFullScreen":"Exit full screen","imageResetZoom":"Reset zoom","imageRotateLeft":"Rotate left","imageRotateRight":"Rotate right","imageZoomIn":"Zoom in","imageZoomOut":"Zoom out","informationPanelTabs":"Information panel","sectionsScrollBack":"Show previous tabs","sectionsScrollForward":"Show more tabs","informationPanelClose":"Close information panel","informationPanelTabsAbout":"About","informationPanelTabsAnnotations":"Annotations","informationPanelTabsSearch":"Search","informationPanelTabsContents":"Contents","contentsSectionsIn":"Sections in","informationPanelTabsMap":"Map","informationPanelTabsCollection":"Collection","informationPanelTabsTargets":"Views","mapUnavailable":"The map could not be shown.","mapLabel":"Map","mapAttribution":"Map credits","mapPlaceUntitled":"Place {{number}}","mapOverlay":"Georeferenced image","mapPlacesListed":"Places listed after the map: {{count}}","informationPanelToggle":"More information","playerPlay":"Play","playerPause":"Pause","playerClose":"Close player","playerMute":"Mute","playerUnmute":"Unmute","playerVolume":"Volume","playerSeek":"Seek","playerCaptions":"Captions","playerCaptionsOff":"Off","playerChapters":"Chapters","frameRepeat":"Repeat","playerCurrentTime":"Current time","playerDuration":"Duration","splitHandle":"Resize panels"}');
2
+ const en = JSON.parse('{"commonClose":"Close","commonNext":"Next","commonPrevious":"Previous","commonSearch":"Search","commonViewAll":"View all","controlShortcut":"{{label}} ({{shortcut}})","contentSearchLoading":"Loading...","contentSearchPlaceholder":"Search","contentSearchResultsNone":"No results","contentSearchResult":"1 result","contentSearchResults":"{{count}} results","contentSearchError":"The search could not be completed.","contentSearchPosition":"Result {{index}} of {{total}}","contentSearchClear":"Clear search","canvasPosition":"Item {{index}} of {{total}}","canvasImage":"Image","bodyUnloadableImage":"This image could not be loaded.","bodyUnloadableVideo":"This video could not be loaded.","bodyUnloadableAudio":"This audio could not be loaded.","bodyUnloadableModel":"This model could not be loaded.","canvasRoleDescription":"zoomable image","canvasKeysImage":"Use the arrow keys to pan, with Shift for larger steps, plus and minus to zoom, 0 to reset the view, and R or Shift+R to rotate.","canvasKeysMedia":"Press Space or K to play or pause, J or L to skip ten seconds back or forward, and M to mute or unmute.","canvasKeysAnnotations":"Press Escape to clear the selected annotation.","sceneModel":"3D model","sceneRoleDescription":"rotatable 3D model","sceneKeys":"Use the arrow keys to rotate the model, with Shift for larger steps, plus and minus to zoom, 0 to reset the view, and R or Shift+R to rotate it right or left.","sceneRotateUp":"Rotate up","sceneRotateDown":"Rotate down","sceneRotate":"Rotate","sceneResetView":"Reset view","statusLoading":"Loading…","statusError":"This could not be loaded.","itemsLabel":"Items","download":"Download","downloadPage":"This page","downloadAll":"All pages","templateSidebar":"Items","templateSidebarToggle":"Show items","templateBack":"Back","templateBackTo":"Back to {{label}}","collectionLabel":"Collection","itemsScrollBack":"Show previous items","itemsScrollForward":"Show more items","aboutRights":"Rights","aboutDate":"Date","aboutHomepage":"Homepage","aboutSeeAlso":"See also","aboutProvider":"Provider","logo":"Logo","aboutManifest":"IIIF Manifest","aboutCanvas":"IIIF Canvas","aboutPartOf":"Part of","aboutOpenManifest":"Open the full Manifest","aboutCollection":"IIIF Collection","readingLanguage":"Language","annotationsHide":"Hide annotations","annotationsHideTip":"Hide","readMore":"Read more","readLess":"Read less","annotationsShow":"Find on the image","annotationsShowTime":"Find in the recording","annotationsImage":"Image","annotationsLanguage":"Language","annotationsOpenLink":"Open the link","transcriptLabel":"Transcript","imageViewerOpen":"Open image viewer","imageViewerClose":"Close image viewer","canvasChoice":"Choice","canvasViewerControls":"Viewer controls","canvasExpandControls":"Expand viewer controls","canvasCollapseControls":"Collapse viewer controls","canvasScrollBack":"Show previous controls","canvasScrollForward":"Show more controls","imageFullScreen":"Full screen","imageExitFullScreen":"Exit full screen","imageResetZoom":"Reset zoom","imageRotateLeft":"Rotate left","imageRotateRight":"Rotate right","imageZoomIn":"Zoom in","imageZoomOut":"Zoom out","informationPanelTabs":"Information panel","sectionsScrollBack":"Show previous tabs","sectionsScrollForward":"Show more tabs","informationPanelClose":"Close information panel","informationPanelTabsAbout":"About","informationPanelTabsAnnotations":"Annotations","informationPanelTabsSearch":"Search","informationPanelTabsContents":"Contents","contentsSectionsIn":"Sections in","informationPanelTabsMap":"Map","informationPanelTabsCollection":"Collection","informationPanelTabsTargets":"Views","mapUnavailable":"The map could not be shown.","mapLabel":"Map","mapAttribution":"Map credits","mapPlaceUntitled":"Place {{number}}","mapOverlay":"Georeferenced image","mapPlacesListed":"Places listed after the map: {{count}}","informationPanelToggle":"More information","playerPlay":"Play","playerPause":"Pause","playerMute":"Mute","playerUnmute":"Unmute","playerVolume":"Volume","playerSeek":"Seek","playerCaptions":"Captions","playerCaptionsOff":"Off","playerChapters":"Chapters","playerFill":"Fill frame","playerFit":"Fit to frame","frameRepeat":"Repeat","playerCurrentTime":"Current time","playerDuration":"Duration","splitHandle":"Resize panels"}');
3
3
  export {
4
4
  en as default
5
5
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- const es = JSON.parse('{"commonClose":"Cerrar","commonNext":"Siguiente","commonPrevious":"Anterior","commonSearch":"Buscar","commonViewAll":"Ver todo","controlShortcut":"{{label}} ({{shortcut}})","contentSearchLoading":"Cargando...","contentSearchPlaceholder":"Buscar","contentSearchResultsNone":"Sin resultados","contentSearchResult":"1 resultado","contentSearchResults":"{{count}} resultados","contentSearchError":"No se pudo completar la búsqueda.","contentSearchPosition":"Resultado {{index}} de {{total}}","contentSearchClear":"Borrar la búsqueda","canvasPosition":"Elemento {{index}} de {{total}}","canvasImage":"Imagen","bodyUnloadableImage":"No se pudo cargar esta imagen.","bodyUnloadableVideo":"No se pudo cargar este vídeo.","bodyUnloadableAudio":"No se pudo cargar este audio.","bodyUnloadableModel":"No se pudo cargar este modelo.","canvasRoleDescription":"imagen ampliable","canvasKeysImage":"Use las teclas de flecha para desplazar la imagen, con Mayús para avanzar más, las teclas más y menos para acercar y alejar, 0 para restablecer la vista, y R o Mayús+R para girar.","canvasKeysMedia":"Pulse Espacio o K para reproducir o pausar, J o L para retroceder o avanzar diez segundos, y M para silenciar o activar el sonido.","canvasKeysAnnotations":"Pulse Esc para quitar la selección de la anotación.","sceneModel":"Modelo 3D","sceneRoleDescription":"modelo 3D giratorio","sceneKeys":"Use las teclas de flecha para girar el modelo, con Mayús para avanzar más, las teclas más y menos para acercar y alejar, 0 para restablecer la vista, y R o Mayús+R para girarlo a la derecha o a la izquierda.","sceneRotateUp":"Girar hacia arriba","sceneRotateDown":"Girar hacia abajo","sceneRotate":"Girar","sceneResetView":"Restablecer la vista","statusLoading":"Cargando…","statusError":"No se pudo cargar este contenido.","itemsLabel":"Elementos","download":"Descargar","downloadPage":"Esta página","downloadAll":"Todas las páginas","templateSidebar":"Elementos","templateSidebarToggle":"Mostrar elementos","collectionLabel":"Colección","itemsScrollBack":"Mostrar elementos anteriores","itemsScrollForward":"Mostrar más elementos","aboutRights":"Derechos","aboutDate":"Fecha","aboutHomepage":"Página de inicio","aboutSeeAlso":"Véase también","aboutProvider":"Proveedor","logo":"Logotipo","aboutManifest":"Manifiesto IIIF","aboutCanvas":"Lienzo IIIF","aboutPartOf":"Parte de","aboutOpenManifest":"Abrir el manifiesto completo","aboutCollection":"Colección IIIF","readingLanguage":"Idioma","annotationsHide":"Ocultar anotaciones","annotationsHideTip":"Ocultar","readMore":"Leer más","readLess":"Leer menos","annotationsShow":"Ver en la imagen","annotationsShowTime":"Ver en la grabación","annotationsImage":"Imagen","annotationsLanguage":"Idioma","annotationsOpenLink":"Abrir el enlace","transcriptLabel":"Transcripción","imageViewerOpen":"Abrir el visor de imágenes","imageViewerClose":"Cerrar el visor de imágenes","canvasChoice":"Alternativas","imageFullScreen":"Pantalla completa","imageExitFullScreen":"Salir de pantalla completa","imageResetZoom":"Restablecer zoom","imageRotateLeft":"Girar a la izquierda","imageRotateRight":"Girar a la derecha","imageZoomIn":"Acercar","imageZoomOut":"Alejar","informationPanelTabs":"Panel de información","sectionsScrollBack":"Mostrar pestañas anteriores","sectionsScrollForward":"Mostrar más pestañas","informationPanelClose":"Cerrar el panel de información","informationPanelTabsAbout":"Acerca de","informationPanelTabsAnnotations":"Anotaciones","informationPanelTabsSearch":"Buscar","informationPanelTabsContents":"Índice","contentsSectionsIn":"Secciones de","informationPanelTabsMap":"Mapa","informationPanelTabsCollection":"Colección","informationPanelTabsTargets":"Vistas","mapUnavailable":"No se pudo mostrar el mapa.","mapLabel":"Mapa","mapAttribution":"Créditos del mapa","mapPlaceUntitled":"Lugar {{number}}","mapOverlay":"Imagen georreferenciada","mapPlacesListed":"Lugares enumerados después del mapa: {{count}}","informationPanelToggle":"Más información","playerPlay":"Reproducir","playerPause":"Pausar","playerClose":"Cerrar el reproductor","playerMute":"Silenciar","playerUnmute":"Activar el sonido","playerVolume":"Volumen","playerSeek":"Posición de reproducción","playerCaptions":"Subtítulos","playerCaptionsOff":"Desactivados","playerChapters":"Capítulos","frameRepeat":"Repetir","playerCurrentTime":"Tiempo actual","playerDuration":"Duración","splitHandle":"Cambiar el tamaño de los paneles"}');
2
+ const es = JSON.parse('{"commonClose":"Cerrar","commonNext":"Siguiente","commonPrevious":"Anterior","commonSearch":"Buscar","commonViewAll":"Ver todo","controlShortcut":"{{label}} ({{shortcut}})","contentSearchLoading":"Cargando...","contentSearchPlaceholder":"Buscar","contentSearchResultsNone":"Sin resultados","contentSearchResult":"1 resultado","contentSearchResults":"{{count}} resultados","contentSearchError":"No se pudo completar la búsqueda.","contentSearchPosition":"Resultado {{index}} de {{total}}","contentSearchClear":"Borrar la búsqueda","canvasPosition":"Elemento {{index}} de {{total}}","canvasImage":"Imagen","bodyUnloadableImage":"No se pudo cargar esta imagen.","bodyUnloadableVideo":"No se pudo cargar este vídeo.","bodyUnloadableAudio":"No se pudo cargar este audio.","bodyUnloadableModel":"No se pudo cargar este modelo.","canvasRoleDescription":"imagen ampliable","canvasKeysImage":"Use las teclas de flecha para desplazar la imagen, con Mayús para avanzar más, las teclas más y menos para acercar y alejar, 0 para restablecer la vista, y R o Mayús+R para girar.","canvasKeysMedia":"Pulse Espacio o K para reproducir o pausar, J o L para retroceder o avanzar diez segundos, y M para silenciar o activar el sonido.","canvasKeysAnnotations":"Pulse Esc para quitar la selección de la anotación.","sceneModel":"Modelo 3D","sceneRoleDescription":"modelo 3D giratorio","sceneKeys":"Use las teclas de flecha para girar el modelo, con Mayús para avanzar más, las teclas más y menos para acercar y alejar, 0 para restablecer la vista, y R o Mayús+R para girarlo a la derecha o a la izquierda.","sceneRotateUp":"Girar hacia arriba","sceneRotateDown":"Girar hacia abajo","sceneRotate":"Girar","sceneResetView":"Restablecer la vista","statusLoading":"Cargando…","statusError":"No se pudo cargar este contenido.","itemsLabel":"Elementos","download":"Descargar","downloadPage":"Esta página","downloadAll":"Todas las páginas","templateSidebar":"Elementos","templateSidebarToggle":"Mostrar elementos","templateBack":"Volver","templateBackTo":"Volver a {{label}}","collectionLabel":"Colección","itemsScrollBack":"Mostrar elementos anteriores","itemsScrollForward":"Mostrar más elementos","aboutRights":"Derechos","aboutDate":"Fecha","aboutHomepage":"Página de inicio","aboutSeeAlso":"Véase también","aboutProvider":"Proveedor","logo":"Logotipo","aboutManifest":"Manifiesto IIIF","aboutCanvas":"Lienzo IIIF","aboutPartOf":"Parte de","aboutOpenManifest":"Abrir el manifiesto completo","aboutCollection":"Colección IIIF","readingLanguage":"Idioma","annotationsHide":"Ocultar anotaciones","annotationsHideTip":"Ocultar","readMore":"Leer más","readLess":"Leer menos","annotationsShow":"Ver en la imagen","annotationsShowTime":"Ver en la grabación","annotationsImage":"Imagen","annotationsLanguage":"Idioma","annotationsOpenLink":"Abrir el enlace","transcriptLabel":"Transcripción","imageViewerOpen":"Abrir el visor de imágenes","imageViewerClose":"Cerrar el visor de imágenes","canvasChoice":"Alternativas","canvasViewerControls":"Controles del visor","canvasExpandControls":"Expandir los controles del visor","canvasCollapseControls":"Contraer los controles del visor","canvasScrollBack":"Mostrar controles anteriores","canvasScrollForward":"Mostrar más controles","imageFullScreen":"Pantalla completa","imageExitFullScreen":"Salir de pantalla completa","imageResetZoom":"Restablecer zoom","imageRotateLeft":"Girar a la izquierda","imageRotateRight":"Girar a la derecha","imageZoomIn":"Acercar","imageZoomOut":"Alejar","informationPanelTabs":"Panel de información","sectionsScrollBack":"Mostrar pestañas anteriores","sectionsScrollForward":"Mostrar más pestañas","informationPanelClose":"Cerrar el panel de información","informationPanelTabsAbout":"Acerca de","informationPanelTabsAnnotations":"Anotaciones","informationPanelTabsSearch":"Buscar","informationPanelTabsContents":"Índice","contentsSectionsIn":"Secciones de","informationPanelTabsMap":"Mapa","informationPanelTabsCollection":"Colección","informationPanelTabsTargets":"Vistas","mapUnavailable":"No se pudo mostrar el mapa.","mapLabel":"Mapa","mapAttribution":"Créditos del mapa","mapPlaceUntitled":"Lugar {{number}}","mapOverlay":"Imagen georreferenciada","mapPlacesListed":"Lugares enumerados después del mapa: {{count}}","informationPanelToggle":"Más información","playerPlay":"Reproducir","playerPause":"Pausar","playerMute":"Silenciar","playerUnmute":"Activar el sonido","playerVolume":"Volumen","playerSeek":"Posición de reproducción","playerCaptions":"Subtítulos","playerCaptionsOff":"Desactivados","playerChapters":"Capítulos","playerFill":"Rellenar el marco","playerFit":"Ajustar al marco","frameRepeat":"Repetir","playerCurrentTime":"Tiempo actual","playerDuration":"Duración","splitHandle":"Cambiar el tamaño de los paneles"}');
3
3
  export {
4
4
  es as default
5
5
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- const fi = JSON.parse('{"commonClose":"Sulje","commonNext":"Seuraava","commonPrevious":"Edellinen","commonSearch":"Hae","commonViewAll":"Näytä kaikki","controlShortcut":"{{label}} ({{shortcut}})","contentSearchLoading":"Ladataan...","contentSearchPlaceholder":"Haku","contentSearchResultsNone":"Ei osumia","contentSearchResult":"1 osuma","contentSearchResults":"{{count}} osumaa","contentSearchError":"Hakua ei voitu suorittaa loppuun.","contentSearchPosition":"Osuma {{index}} / {{total}}","contentSearchClear":"Tyhjennä haku","canvasPosition":"Kohde {{index}} / {{total}}","canvasImage":"Kuva","bodyUnloadableImage":"Tätä kuvaa ei voitu ladata.","bodyUnloadableVideo":"Tätä videota ei voitu ladata.","bodyUnloadableAudio":"Tätä ääntä ei voitu ladata.","bodyUnloadableModel":"Tätä mallia ei voitu ladata.","canvasRoleDescription":"zoomattava kuva","canvasKeysImage":"Siirrä kuvaa nuolinäppäimillä, pidemmin Vaihto-näppäimen kanssa, lähennä ja loitonna plus- ja miinusnäppäimillä, palauta näkymä näppäimellä 0 ja kierrä näppäimellä R tai Vaihto+R.","canvasKeysMedia":"Toista tai keskeytä välilyönnillä tai näppäimellä K, siirry kymmenen sekuntia taaksepäin tai eteenpäin näppäimellä J tai L ja mykistä tai poista mykistys näppäimellä M.","canvasKeysAnnotations":"Poista annotaation valinta painamalla Esc-näppäintä.","sceneModel":"3D-malli","sceneRoleDescription":"käännettävä 3D-malli","sceneKeys":"Kierrä mallia nuolinäppäimillä, pidemmin Vaihto-näppäimen kanssa, lähennä ja loitonna plus- ja miinusnäppäimillä, palauta näkymä näppäimellä 0 ja kierrä oikealle tai vasemmalle näppäimellä R tai Vaihto+R.","sceneRotateUp":"Kierrä ylös","sceneRotateDown":"Kierrä alas","sceneRotate":"Kierrä","sceneResetView":"Palauta näkymä","statusLoading":"Ladataan…","statusError":"Tätä ei voitu ladata.","itemsLabel":"Kohteet","download":"Lataa","downloadPage":"Tämä sivu","downloadAll":"Kaikki sivut","templateSidebar":"Kohteet","templateSidebarToggle":"Näytä kohteet","collectionLabel":"Kokoelma","itemsScrollBack":"Näytä edelliset kohteet","itemsScrollForward":"Näytä lisää kohteita","aboutRights":"Oikeudet","aboutDate":"Päivämäärä","aboutHomepage":"Kotisivu","aboutSeeAlso":"Katso myös","aboutProvider":"Tarjoaja","logo":"Logo","aboutManifest":"IIIF-manifesti","aboutCanvas":"IIIF-kanvaasi","aboutPartOf":"Osa kokonaisuutta","aboutOpenManifest":"Avaa koko manifesti","aboutCollection":"IIIF-kokoelma","readingLanguage":"Kieli","annotationsHide":"Piilota annotaatiot","annotationsHideTip":"Piilota","readMore":"Lue lisää","readLess":"Näytä vähemmän","annotationsShow":"Näytä kuvassa","annotationsShowTime":"Näytä tallenteessa","annotationsImage":"Kuva","annotationsLanguage":"Kieli","annotationsOpenLink":"Avaa linkki","transcriptLabel":"Litteraatti","imageViewerOpen":"Avaa kuvakatselin","imageViewerClose":"Sulje kuvakatselin","canvasChoice":"Vaihtoehdot","imageFullScreen":"Koko näyttö","imageExitFullScreen":"Poistu koko näytöstä","imageResetZoom":"Palauta zoomaus","imageRotateLeft":"Kierrä vasemmalle","imageRotateRight":"Kierrä oikealle","imageZoomIn":"Lähennä","imageZoomOut":"Loitonna","informationPanelTabs":"Tietopaneeli","sectionsScrollBack":"Näytä edelliset välilehdet","sectionsScrollForward":"Näytä lisää välilehtiä","informationPanelClose":"Sulje tietopaneeli","informationPanelTabsAbout":"Tiedot","informationPanelTabsAnnotations":"Annotaatiot","informationPanelTabsSearch":"Haku","informationPanelTabsContents":"Sisältö","contentsSectionsIn":"Osiot:","informationPanelTabsMap":"Kartta","informationPanelTabsCollection":"Kokoelma","informationPanelTabsTargets":"Näkymät","mapUnavailable":"Karttaa ei voitu näyttää.","mapLabel":"Kartta","mapAttribution":"Kartan tekijätiedot","mapPlaceUntitled":"Paikka {{number}}","mapOverlay":"Georeferoitu kuva","mapPlacesListed":"Kartan jälkeen luetellut paikat: {{count}}","informationPanelToggle":"Lisätiedot","playerPlay":"Toista","playerPause":"Keskeytä","playerClose":"Sulje soitin","playerMute":"Mykistä","playerUnmute":"Poista mykistys","playerVolume":"Äänenvoimakkuus","playerSeek":"Toistokohta","playerCaptions":"Tekstitykset","playerCaptionsOff":"Pois","playerChapters":"Luvut","frameRepeat":"Toista uudelleen","playerCurrentTime":"Kulunut aika","playerDuration":"Kesto","splitHandle":"Muuta paneelien kokoa"}');
2
+ const fi = JSON.parse('{"commonClose":"Sulje","commonNext":"Seuraava","commonPrevious":"Edellinen","commonSearch":"Hae","commonViewAll":"Näytä kaikki","controlShortcut":"{{label}} ({{shortcut}})","contentSearchLoading":"Ladataan...","contentSearchPlaceholder":"Haku","contentSearchResultsNone":"Ei osumia","contentSearchResult":"1 osuma","contentSearchResults":"{{count}} osumaa","contentSearchError":"Hakua ei voitu suorittaa loppuun.","contentSearchPosition":"Osuma {{index}} / {{total}}","contentSearchClear":"Tyhjennä haku","canvasPosition":"Kohde {{index}} / {{total}}","canvasImage":"Kuva","bodyUnloadableImage":"Tätä kuvaa ei voitu ladata.","bodyUnloadableVideo":"Tätä videota ei voitu ladata.","bodyUnloadableAudio":"Tätä ääntä ei voitu ladata.","bodyUnloadableModel":"Tätä mallia ei voitu ladata.","canvasRoleDescription":"zoomattava kuva","canvasKeysImage":"Siirrä kuvaa nuolinäppäimillä, pidemmin Vaihto-näppäimen kanssa, lähennä ja loitonna plus- ja miinusnäppäimillä, palauta näkymä näppäimellä 0 ja kierrä näppäimellä R tai Vaihto+R.","canvasKeysMedia":"Toista tai keskeytä välilyönnillä tai näppäimellä K, siirry kymmenen sekuntia taaksepäin tai eteenpäin näppäimellä J tai L ja mykistä tai poista mykistys näppäimellä M.","canvasKeysAnnotations":"Poista annotaation valinta painamalla Esc-näppäintä.","sceneModel":"3D-malli","sceneRoleDescription":"käännettävä 3D-malli","sceneKeys":"Kierrä mallia nuolinäppäimillä, pidemmin Vaihto-näppäimen kanssa, lähennä ja loitonna plus- ja miinusnäppäimillä, palauta näkymä näppäimellä 0 ja kierrä oikealle tai vasemmalle näppäimellä R tai Vaihto+R.","sceneRotateUp":"Kierrä ylös","sceneRotateDown":"Kierrä alas","sceneRotate":"Kierrä","sceneResetView":"Palauta näkymä","statusLoading":"Ladataan…","statusError":"Tätä ei voitu ladata.","itemsLabel":"Kohteet","download":"Lataa","downloadPage":"Tämä sivu","downloadAll":"Kaikki sivut","templateSidebar":"Kohteet","templateSidebarToggle":"Näytä kohteet","templateBack":"Takaisin","templateBackTo":"Takaisin: {{label}}","collectionLabel":"Kokoelma","itemsScrollBack":"Näytä edelliset kohteet","itemsScrollForward":"Näytä lisää kohteita","aboutRights":"Oikeudet","aboutDate":"Päivämäärä","aboutHomepage":"Kotisivu","aboutSeeAlso":"Katso myös","aboutProvider":"Tarjoaja","logo":"Logo","aboutManifest":"IIIF-manifesti","aboutCanvas":"IIIF-kanvaasi","aboutPartOf":"Osa kokonaisuutta","aboutOpenManifest":"Avaa koko manifesti","aboutCollection":"IIIF-kokoelma","readingLanguage":"Kieli","annotationsHide":"Piilota annotaatiot","annotationsHideTip":"Piilota","readMore":"Lue lisää","readLess":"Näytä vähemmän","annotationsShow":"Näytä kuvassa","annotationsShowTime":"Näytä tallenteessa","annotationsImage":"Kuva","annotationsLanguage":"Kieli","annotationsOpenLink":"Avaa linkki","transcriptLabel":"Litteraatti","imageViewerOpen":"Avaa kuvakatselin","imageViewerClose":"Sulje kuvakatselin","canvasChoice":"Vaihtoehdot","canvasViewerControls":"Katselimen säätimet","canvasExpandControls":"Laajenna katselimen säätimet","canvasCollapseControls":"Supista katselimen säätimet","canvasScrollBack":"Näytä edelliset säätimet","canvasScrollForward":"Näytä lisää säätimiä","imageFullScreen":"Koko näyttö","imageExitFullScreen":"Poistu koko näytöstä","imageResetZoom":"Palauta zoomaus","imageRotateLeft":"Kierrä vasemmalle","imageRotateRight":"Kierrä oikealle","imageZoomIn":"Lähennä","imageZoomOut":"Loitonna","informationPanelTabs":"Tietopaneeli","sectionsScrollBack":"Näytä edelliset välilehdet","sectionsScrollForward":"Näytä lisää välilehtiä","informationPanelClose":"Sulje tietopaneeli","informationPanelTabsAbout":"Tiedot","informationPanelTabsAnnotations":"Annotaatiot","informationPanelTabsSearch":"Haku","informationPanelTabsContents":"Sisältö","contentsSectionsIn":"Osiot:","informationPanelTabsMap":"Kartta","informationPanelTabsCollection":"Kokoelma","informationPanelTabsTargets":"Näkymät","mapUnavailable":"Karttaa ei voitu näyttää.","mapLabel":"Kartta","mapAttribution":"Kartan tekijätiedot","mapPlaceUntitled":"Paikka {{number}}","mapOverlay":"Georeferoitu kuva","mapPlacesListed":"Kartan jälkeen luetellut paikat: {{count}}","informationPanelToggle":"Lisätiedot","playerPlay":"Toista","playerPause":"Keskeytä","playerMute":"Mykistä","playerUnmute":"Poista mykistys","playerVolume":"Äänenvoimakkuus","playerSeek":"Toistokohta","playerCaptions":"Tekstitykset","playerCaptionsOff":"Pois","playerChapters":"Luvut","playerFill":"Täytä kehys","playerFit":"Sovita kehykseen","frameRepeat":"Toista uudelleen","playerCurrentTime":"Kulunut aika","playerDuration":"Kesto","splitHandle":"Muuta paneelien kokoa"}');
3
3
  export {
4
4
  fi as default
5
5
  };