@nulib/clover 4.4.1 → 4.5.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 (353) hide show
  1. package/README.md +4 -3
  2. package/dist/components/Annotations/Annotations.mjs +11 -5
  3. package/dist/components/Body/Caption.mjs +1 -1
  4. package/dist/components/Canvas/AnnotationMenu.mjs +16 -2
  5. package/dist/components/Canvas/AnnotationState.mjs +27 -23
  6. package/dist/components/Canvas/ControlMenu.mjs +9 -0
  7. package/dist/components/Canvas/PlaceBox.mjs +8 -0
  8. package/dist/components/Canvas/media/Transport.mjs +32 -18
  9. package/dist/components/Items/CountMenu.mjs +13 -1
  10. package/dist/components/Items/Items.mjs +24 -7
  11. package/dist/components/Items/PagerLayout.mjs +1 -0
  12. package/dist/components/Map/MapView.mjs +31 -19
  13. package/dist/components/Panel/About.mjs +16 -5
  14. package/dist/components/Panel/AboutActions.mjs +10 -16
  15. package/dist/components/Panel/LanguageToggle.mjs +69 -0
  16. package/dist/components/Panel/Panel.mjs +9 -1
  17. package/dist/components/Panel/ReadingLanguages.mjs +2 -16
  18. package/dist/components/Panel/sections.mjs +6 -1
  19. package/dist/components/Root/useRootState.mjs +43 -4
  20. package/dist/components/Search/Search.mjs +10 -7
  21. package/dist/components/Transcript/Transcript.mjs +42 -33
  22. package/dist/core/image-service-content.mjs +108 -0
  23. package/dist/core/load.mjs +38 -1
  24. package/dist/core/value.mjs +1 -1
  25. package/dist/i18n/config.mjs +88 -14
  26. package/dist/i18n/direction.mjs +2 -2
  27. package/dist/i18n/languages.mjs +42 -8
  28. package/dist/i18n/locales/index.mjs +4 -1
  29. package/dist/i18n/locales/ja.json.mjs +5 -0
  30. package/dist/i18n/locales/zh-Hans.json.mjs +5 -0
  31. package/dist/i18n/locales/zh-Hant.json.mjs +5 -0
  32. package/dist/index.d.mts +109 -24
  33. package/dist/lib/renderer/CanvasRenderer.mjs +20 -5
  34. package/dist/map/index.d.mts +3 -2
  35. package/dist/react/readingLanguages.mjs +15 -2
  36. package/dist/styles/core.css +1 -1
  37. package/dist/styles/default.css +1 -1
  38. package/dist/styles/items.css +1 -1
  39. package/dist/styles/map.css +1 -1
  40. package/dist/styles/media.css +1 -1
  41. package/dist/styles/panel.css +1 -1
  42. package/dist/styles.css +1 -1
  43. package/dist/templates/default/Default.mjs +3 -0
  44. package/dist/templates/document/Document.mjs +6 -1
  45. package/dist/templates/gallery/Gallery.mjs +2 -0
  46. package/dist/templates/index.d.mts +56 -11
  47. package/dist/templates/shared/LightboxView.mjs +3 -0
  48. package/dist/templates/shared/useDrawer.mjs +14 -2
  49. package/dist/ui/ErrorBoundary.mjs +19 -5
  50. package/dist/ui/FieldPill.mjs +2 -0
  51. package/dist/ui/GlobeGlyph.mjs +26 -0
  52. package/dist/ui/LanguageChoice.mjs +87 -20
  53. package/dist/ui/LanguageMenu.mjs +94 -0
  54. package/dist/ui/Sections.mjs +18 -5
  55. package/dist/ui/Tip.mjs +4 -2
  56. package/dist/ui/sheets/map.mjs +1 -1
  57. package/dist/ui/sheets/media.mjs +1 -1
  58. package/dist/ui/useScrollTrack.mjs +34 -19
  59. package/dist/web-components/About-BklM8JA9.mjs +1 -0
  60. package/dist/web-components/AnnotationItems-4mbvOrhN.mjs +1 -0
  61. package/dist/web-components/AnnotationMenu-DtMaxXf5.mjs +1 -0
  62. package/dist/web-components/AnnotationState-BuEpq99k.mjs +1 -0
  63. package/dist/web-components/Annotations-Dyg-RAdd.mjs +2 -0
  64. package/dist/web-components/{Annotations-oXpa3fvs.mjs → Annotations-oPabBO7j.mjs} +1 -1
  65. package/dist/web-components/{Body-BNLhtQi3.mjs → Body-CD7AtOPv.mjs} +1 -1
  66. package/dist/web-components/{BodyAlert-B0AblEtp.mjs → BodyAlert-DzW4__bK.mjs} +1 -1
  67. package/dist/web-components/{Button-0dU8Owcz.mjs → Button-1To2Pwuz.mjs} +1 -1
  68. package/dist/web-components/{Camera-BS8iIH74.mjs → Camera-B82ZMekU.mjs} +1 -1
  69. package/dist/web-components/{Canvas2DBackend-U4BLi8EN.mjs → Canvas2DBackend-Ds-qoQ0W.mjs} +1 -1
  70. package/dist/web-components/CanvasView-B4fnYim4.mjs +2 -0
  71. package/dist/web-components/{CaptionDetails-CtRzBSwh.mjs → CaptionDetails-TTAEPH02.mjs} +1 -1
  72. package/dist/web-components/{ChaptersMenu-DJRfJSwC.mjs → ChaptersMenu-DhbAktrS.mjs} +1 -1
  73. package/dist/web-components/{Chevron-BJFhP5wm.mjs → Chevron-Br3zRRMX.mjs} +1 -1
  74. package/dist/web-components/{ChoiceMenu-Cfjnk3NG.mjs → ChoiceMenu-B4_doj7b.mjs} +1 -1
  75. package/dist/web-components/{Collection-C2ji8AVd.mjs → Collection-DrMfq53r.mjs} +1 -1
  76. package/dist/web-components/{CollectionSelect-CSTSqjG3.mjs → CollectionSelect-PP7IEcwu.mjs} +1 -1
  77. package/dist/web-components/{Connected-B42WdjMx.mjs → Connected-BOPNEv3j.mjs} +1 -1
  78. package/dist/web-components/{Connected-D2y_qBDh.mjs → Connected-BguZSgy4.mjs} +1 -1
  79. package/dist/web-components/{Connected-C-Ars8eC.mjs → Connected-CN94wOYw.mjs} +1 -1
  80. package/dist/web-components/{Contents-BLbU9Qvc.mjs → Contents-Dn7MutL9.mjs} +1 -1
  81. package/dist/web-components/ControlMenu-DlP3JsqV.mjs +1 -0
  82. package/dist/web-components/ControlsFade-Cuh5Mqe7.mjs +1 -0
  83. package/dist/web-components/CountMenu-Aoott7Hu.mjs +1 -0
  84. package/dist/web-components/Cue-BAj92VWz.mjs +1 -0
  85. package/dist/web-components/Document-BjTWX_7P.mjs +1 -0
  86. package/dist/web-components/{DomLayers-DDRNVemT.mjs → DomLayers-GnBlZ7yI.mjs} +1 -1
  87. package/dist/web-components/{Download-VPFf23Kw.mjs → Download-C1RNBLdn.mjs} +1 -1
  88. package/dist/web-components/{EntryBodies-CKgmBQCk.mjs → EntryBodies-BG4F8uub.mjs} +1 -1
  89. package/dist/web-components/{EntryThumbnail-CgukpUtr.mjs → EntryThumbnail-BJPQwkQw.mjs} +1 -1
  90. package/dist/web-components/FieldPill-CgMPW9BB.mjs +1 -0
  91. package/dist/web-components/{FrameAnimation-C2EFrQl0.mjs → FrameAnimation-DWd0yBuN.mjs} +1 -1
  92. package/dist/web-components/Gallery-DpJqgaft.mjs +1 -0
  93. package/dist/web-components/GlobeGlyph-CLM28n1E.mjs +1 -0
  94. package/dist/web-components/{HideToggle-HVrk9D6t.mjs → HideToggle-C4mW4-CK.mjs} +1 -1
  95. package/dist/web-components/{ImageControls-BsGWsB_S.mjs → ImageControls-B36Hng03.mjs} +1 -1
  96. package/dist/web-components/Items-BApzELFW.mjs +1 -0
  97. package/dist/web-components/Label-CRTQApU-.mjs +1 -0
  98. package/dist/web-components/LanguageChoice-B1941Wuu.mjs +1 -0
  99. package/dist/web-components/LanguageMenu-yWDzK3U0.mjs +1 -0
  100. package/dist/web-components/LightboxView-BLHI5EIj.mjs +1 -0
  101. package/dist/web-components/{ListEnd-BPSaqeEg.mjs → ListEnd-CIiLZZzc.mjs} +1 -1
  102. package/dist/web-components/{Loaded-vg9q9y73.mjs → Loaded-X_Pr53fq.mjs} +1 -1
  103. package/dist/web-components/{LoadedCanvas-BtNg_QnI.mjs → LoadedCanvas-1Bi6-QtF.mjs} +1 -1
  104. package/dist/web-components/LoadedMap-58bpxj_6.mjs +1 -0
  105. package/dist/web-components/{Loading-DnCFXiNy.mjs → Loading-CyoVEwax.mjs} +1 -1
  106. package/dist/web-components/{Map-CIGzy4XB.mjs → Map-2oeDIJzq.mjs} +1 -1
  107. package/dist/web-components/MapView-DX3ZLqmp.mjs +3 -0
  108. package/dist/web-components/{Markup-Csh1bNkq.mjs → Markup-B2GbrisO.mjs} +1 -1
  109. package/dist/web-components/{MediaBody-CRJFBpMk.mjs → MediaBody-DZ9JgkKF.mjs} +1 -1
  110. package/dist/web-components/{MediaBody-CeEWPIDp.mjs → MediaBody-eFAZIyGv.mjs} +1 -1
  111. package/dist/web-components/{NavDate-qoFXy3Ou.mjs → NavDate-BwV4kPl-.mjs} +1 -1
  112. package/dist/web-components/{Navigator-9n2yLQdc.mjs → Navigator-CTrfNuwj.mjs} +1 -1
  113. package/dist/web-components/{Pager-4rZjWBna.mjs → Pager-BGjj90LQ.mjs} +1 -1
  114. package/dist/web-components/PagerLayout-Ce7zW_yB.mjs +1 -0
  115. package/dist/web-components/Panel-77xi6y2C.mjs +1 -0
  116. package/dist/web-components/PanelPart-Cm9VykIu.mjs +1 -0
  117. package/dist/web-components/{PanelToggle-0K2YTp6k.mjs → PanelToggle-Cj_FjIgS.mjs} +1 -1
  118. package/dist/web-components/{PartOfManifest-ZUGZW86B.mjs → PartOfManifest-B0RwR4iy.mjs} +1 -1
  119. package/dist/web-components/{Pending-lpHOVvqE.mjs → Pending-s7yYnZzR.mjs} +1 -1
  120. package/dist/web-components/PlaceBox-pt7Vmrs1.mjs +1 -0
  121. package/dist/web-components/{Placeholder-ChFeaw7a.mjs → Placeholder-BK-eqSCl.mjs} +1 -1
  122. package/dist/web-components/{Position-C2Hm7tJZ.mjs → Position-CKsSKMgZ.mjs} +1 -1
  123. package/dist/web-components/Primitives-T7usOLie.mjs +1 -0
  124. package/dist/web-components/Provider-B2k1G-E0.mjs +1 -0
  125. package/dist/web-components/{ReadMore-DsthjUIZ.mjs → ReadMore-Cs2t9xkI.mjs} +1 -1
  126. package/dist/web-components/Root-D942bSXu.mjs +1 -0
  127. package/dist/web-components/Scene-Cwzisn4E.mjs +1 -0
  128. package/dist/web-components/SceneView-_CNm8cGL.mjs +1 -0
  129. package/dist/web-components/Search-u43mfzT8.mjs +1 -0
  130. package/dist/web-components/Sections-CPU5bGvk.mjs +2 -0
  131. package/dist/web-components/{SeekMarks-DNHLgUaX.mjs → SeekMarks-CnqVS-ym.mjs} +1 -1
  132. package/dist/web-components/StandaloneItems-D9Og9pdI.mjs +1 -0
  133. package/dist/web-components/{Status-DLZANUzF.mjs → Status-Cxev3WuC.mjs} +1 -1
  134. package/dist/web-components/{Steps-BigQvWNW.mjs → Steps-l7_NsIBr.mjs} +1 -1
  135. package/dist/web-components/{TargetItems-DzNzoEeh.mjs → TargetItems-nP3Oa9hh.mjs} +1 -1
  136. package/dist/web-components/Timeline-C1g1MXp5.mjs +1 -0
  137. package/dist/web-components/{Tip-CoSRaKjm.mjs → Tip-D2pR3HW4.mjs} +1 -1
  138. package/dist/web-components/Transcript-D_a9jio-.mjs +1 -0
  139. package/dist/web-components/Transport-CowDRPK7.mjs +1 -0
  140. package/dist/web-components/Transport-uqpqUIKE.mjs +1 -0
  141. package/dist/web-components/{annotation-collection-DwJ2R8tG.mjs → annotation-collection-d6JyHnML.mjs} +1 -1
  142. package/dist/web-components/{annotation-name-2rUtUYsN.mjs → annotation-name-BWTrB9nK.mjs} +1 -1
  143. package/dist/web-components/{annotations-content-fTNYRgN_.mjs → annotations-content-Bomfao_5.mjs} +1 -1
  144. package/dist/web-components/{body-qFClz6nF.mjs → body-Dfn0GJa2.mjs} +1 -1
  145. package/dist/web-components/{canvas-DqmG6v1g.mjs → canvas-DHIn2DIV.mjs} +1 -1
  146. package/dist/web-components/{cloverEngine-BBfVDNbE.mjs → cloverEngine-DDVOcZTv.mjs} +1 -1
  147. package/dist/web-components/{content-state-reader-DYXL5lFa.mjs → content-state-reader-CyNkhTZY.mjs} +1 -1
  148. package/dist/web-components/{controlGlyphs-DqZmaT9n.mjs → controlGlyphs-Dymy1PkA.mjs} +1 -1
  149. package/dist/web-components/{controls-BvC6zo32.mjs → controls-CIkf2UoE.mjs} +1 -1
  150. package/dist/web-components/custom-elements.json +35 -3
  151. package/dist/web-components/downloads-DCsDCcA8.mjs +1 -0
  152. package/dist/web-components/{dragToClose-wFiErDub.mjs → dragToClose-BKcu5guw.mjs} +1 -1
  153. package/dist/web-components/{engine-B0W3FXuQ.mjs → engine-BhdQsvOB.mjs} +1 -1
  154. package/dist/web-components/{engines-DVRUnyFv.mjs → engines-pnfVMoUH.mjs} +1 -1
  155. package/dist/web-components/{fetchManifest-f8gYlPDK.mjs → fetchManifest-QmVIeaHo.mjs} +1 -1
  156. package/dist/web-components/{fromManifest-BmpOsc5g.mjs → fromManifest-CvXwGGRI.mjs} +1 -1
  157. package/dist/web-components/{glyphs-oAgi4Au0.mjs → glyphs-BAh9Lia0.mjs} +1 -1
  158. package/dist/web-components/hooks-CTqjdpYl.mjs +1 -0
  159. package/dist/web-components/{image-layers-CndzdWOW.mjs → image-layers-Dp2qOSA5.mjs} +1 -1
  160. package/dist/web-components/image-service-content-B5ICMeIO.mjs +1 -0
  161. package/dist/web-components/{imageService-DTp1mc0F.mjs → imageService-XKWMYAcG.mjs} +1 -1
  162. package/dist/web-components/index-BuoWCrun.mjs +1 -0
  163. package/dist/web-components/index.mjs +1 -1
  164. package/dist/web-components/items-8ZEJCxWU.mjs +1 -0
  165. package/dist/web-components/items-DjpIYUxD.mjs +1 -0
  166. package/dist/web-components/ja-Cg1enUhM.mjs +1 -0
  167. package/dist/web-components/label-BWHRHAY2.mjs +1 -0
  168. package/dist/web-components/layout-B3HyDCsP.mjs +1 -0
  169. package/dist/web-components/{link-CEfxl5hU.mjs → link-Mnt5GrKM.mjs} +1 -1
  170. package/dist/web-components/logo-YR9jXUE4.mjs +1 -0
  171. package/dist/web-components/{models-B-kri8Ov.mjs → models-NfaX6B8u.mjs} +1 -1
  172. package/dist/web-components/{nodes-BKoxD-el.mjs → nodes-CRrc5Svn.mjs} +1 -1
  173. package/dist/web-components/{overlayImage-Dp8CjA_L.mjs → overlayImage-D7Knsh4X.mjs} +1 -1
  174. package/dist/web-components/{panel-ldBDfuIV.mjs → panel-DUMFdAc8.mjs} +1 -1
  175. package/dist/web-components/part-C_V28rvN.mjs +1 -0
  176. package/dist/web-components/{playerSurface-CLWTmyt1.mjs → playerSurface-CF5g-4Po.mjs} +1 -1
  177. package/dist/web-components/pointer-PJLHbbSD.mjs +1 -0
  178. package/dist/web-components/{provider-D24Pm3a1.mjs → provider-b4id5kCa.mjs} +1 -1
  179. package/dist/web-components/{range-regions-9vY5ikPm.mjs → range-regions-DCY76ydS.mjs} +1 -1
  180. package/dist/web-components/{read-more-CoOeWZOF.mjs → read-more-UM90-AEc.mjs} +1 -1
  181. package/dist/web-components/readingLanguages-Qdn21-7Q.mjs +1 -0
  182. package/dist/web-components/rendererSurface-PZlq-wa_.mjs +22 -0
  183. package/dist/web-components/{renderers-BXcv_AqV.mjs → renderers-DIHonXTq.mjs} +1 -1
  184. package/dist/web-components/resource-BlU2Ese6.mjs +1 -0
  185. package/dist/web-components/{save-file-Dj3MRR7Y.mjs → save-file-GI0ekTmd.mjs} +1 -1
  186. package/dist/web-components/{search-C9OyY1qk.mjs → search-CHjjiXkB.mjs} +1 -1
  187. package/dist/web-components/shared-DgJ0bXca.mjs +1 -0
  188. package/dist/web-components/{show-link-4mlfdoeo.mjs → show-link-BlLkTYtm.mjs} +1 -1
  189. package/dist/web-components/{sizedImage-COfCkv_8.mjs → sizedImage-BoGT1x5n.mjs} +1 -1
  190. package/dist/web-components/{split-Ci426kxC.mjs → split-OO6-WiG3.mjs} +1 -1
  191. package/dist/web-components/{status-CzasXLV8.mjs → status-CSenPCO4.mjs} +1 -1
  192. package/dist/web-components/styles-Bvw9LFU7.mjs +1 -0
  193. package/dist/web-components/three.mjs +1 -1
  194. package/dist/web-components/{thumbnail-ByuoouMG.mjs → thumbnail-DYJHCrW_.mjs} +1 -1
  195. package/dist/web-components/{tip-CQEGLOst.mjs → tip-Dr1mfd4o.mjs} +1 -1
  196. package/dist/web-components/{toggle-Dro_EmUU.mjs → toggle-86lqpaU9.mjs} +1 -1
  197. package/dist/web-components/{useContainerName-CUP-TlA5.mjs → useContainerName-BfNL6p3O.mjs} +1 -1
  198. package/dist/web-components/{useControlsVisibility-DeI3NHWp.mjs → useControlsVisibility-C3LCnrb7.mjs} +1 -1
  199. package/dist/web-components/useNearViewport-Dk5q1rzk.mjs +1 -0
  200. package/dist/web-components/useScrollTrack-B_yYmQDS.mjs +1 -0
  201. package/dist/web-components/viewer/{AnnotationItems-ByWBkMRd.mjs → AnnotationItems-BbPnS9EE.mjs} +1 -1
  202. package/dist/web-components/viewer/AnnotationMenu-BGv-HimF.mjs +1 -0
  203. package/dist/web-components/viewer/AnnotationState-uRm7bEwg.mjs +1 -0
  204. package/dist/web-components/viewer/{Annotations-CJRF_IwO.mjs → Annotations-_2PMmUfu.mjs} +1 -1
  205. package/dist/web-components/viewer/Annotations-reaO1ILe.mjs +2 -0
  206. package/dist/web-components/viewer/{Canvas2DBackend-DPDF0a8D.mjs → Canvas2DBackend-Dru1ImJh.mjs} +1 -1
  207. package/dist/web-components/viewer/CaptionDetails-3OlEaKmX.mjs +1 -0
  208. package/dist/web-components/viewer/{ChaptersMenu-D7b9t6bm.mjs → ChaptersMenu-kchuXDZy.mjs} +1 -1
  209. package/dist/web-components/viewer/{ChoiceMenu-f2774ZaY.mjs → ChoiceMenu-C8pEoSC6.mjs} +1 -1
  210. package/dist/web-components/viewer/{Collection-D1E6A8es.mjs → Collection-B4LN_80C.mjs} +1 -1
  211. package/dist/web-components/viewer/{Connected-BLeqNIOf.mjs → Connected-80hCJuhg.mjs} +1 -1
  212. package/dist/web-components/viewer/{Connected-DfqFYcTn.mjs → Connected-CzPY2rgu.mjs} +1 -1
  213. package/dist/web-components/viewer/{Contents-DvmP8OGy.mjs → Contents-D4jw_lGe.mjs} +1 -1
  214. package/dist/web-components/viewer/ControlMenu-C3Jh10iR.mjs +1 -0
  215. package/dist/web-components/viewer/ControlsFade-BKkJ95B5.mjs +1 -0
  216. package/dist/web-components/viewer/CountMenu-Blz1oHgs.mjs +1 -0
  217. package/dist/web-components/viewer/Cue-BnC9XuZp.mjs +1 -0
  218. package/dist/web-components/viewer/Document-BG0F97nL.mjs +1 -0
  219. package/dist/web-components/viewer/{DomLayers-CD56oMcR.mjs → DomLayers-BL6vNcmI.mjs} +1 -1
  220. package/dist/web-components/viewer/{Download-DAOzY3Nu.mjs → Download-B0BD_SzR.mjs} +1 -1
  221. package/dist/web-components/viewer/{EntryBodies-0A0uyEwC.mjs → EntryBodies-Cbmr-Eg4.mjs} +1 -1
  222. package/dist/web-components/viewer/{EntryThumbnail-fBaBZJGd.mjs → EntryThumbnail-DAdEyIuL.mjs} +1 -1
  223. package/dist/web-components/viewer/FieldPill-DNL96sDW.mjs +1 -0
  224. package/dist/web-components/viewer/{FrameAnimation-kba5V4Vk.mjs → FrameAnimation-BO3QVSUw.mjs} +1 -1
  225. package/dist/web-components/viewer/Gallery-DN7ajF4i.mjs +1 -0
  226. package/dist/web-components/viewer/GlobeGlyph-B-Wd0AkW.mjs +1 -0
  227. package/dist/web-components/viewer/{HideToggle-D8c_7URN.mjs → HideToggle-DH0u1wFC.mjs} +1 -1
  228. package/dist/web-components/viewer/{ImageControls-C_C0LSj7.mjs → ImageControls-Lz-ESk1X.mjs} +1 -1
  229. package/dist/web-components/viewer/LanguageChoice-BkQkSsPE.mjs +1 -0
  230. package/dist/web-components/viewer/LanguageMenu-gIJHQiBc.mjs +1 -0
  231. package/dist/web-components/viewer/LightboxView-D066VR5m.mjs +1 -0
  232. package/dist/web-components/viewer/{ListEnd-B2hnHrcl.mjs → ListEnd-D4nNouKZ.mjs} +1 -1
  233. package/dist/web-components/viewer/{MapView-Cr3RiB1K.mjs → MapView-C_8iciAK.mjs} +3 -3
  234. package/dist/web-components/viewer/{MediaBody-4ZFKNnr3.mjs → MediaBody-BgBDbfHg.mjs} +1 -1
  235. package/dist/web-components/viewer/{MediaBody-xjpo27Vw.mjs → MediaBody-D4hiLqhm.mjs} +1 -1
  236. package/dist/web-components/viewer/{NavDate-Dz5eW2XY.mjs → NavDate-BMVT6UwB.mjs} +1 -1
  237. package/dist/web-components/viewer/{Navigator-DNZcaADs.mjs → Navigator-DbBBbDZn.mjs} +1 -1
  238. package/dist/web-components/viewer/PagerLayout-D771pC5E.mjs +1 -0
  239. package/dist/web-components/viewer/PanelPart-2H7jd6PS.mjs +1 -0
  240. package/dist/web-components/viewer/{PartOfManifest-BHpVLJOn.mjs → PartOfManifest-BMaH_tsn.mjs} +1 -1
  241. package/dist/web-components/viewer/PlaceBox-OytRM9_s.mjs +1 -0
  242. package/dist/web-components/viewer/{Placeholder-CLITKdu6.mjs → Placeholder-BWuq47Sw.mjs} +1 -1
  243. package/dist/web-components/viewer/Search-Bmz7mUbA.mjs +1 -0
  244. package/dist/web-components/viewer/{SeekMarks-B8cuyVgz.mjs → SeekMarks-CAsMUj2N.mjs} +1 -1
  245. package/dist/web-components/viewer/{StandaloneItems-Cu0aBqAo.mjs → StandaloneItems-BCHhR9sF.mjs} +1 -1
  246. package/dist/web-components/viewer/{Steps-DqszSHcR.mjs → Steps-BDT2W9QN.mjs} +1 -1
  247. package/dist/web-components/viewer/{TargetItems-DN8ebfbK.mjs → TargetItems-CkZbD8GE.mjs} +1 -1
  248. package/dist/web-components/viewer/Transcript-BbFXEJSc.mjs +1 -0
  249. package/dist/web-components/viewer/Transport-CI5UkA3K.mjs +1 -0
  250. package/dist/web-components/viewer/Transport-PgBpf33S.mjs +1 -0
  251. package/dist/web-components/viewer/{annotation-collection-Drwfws4R.mjs → annotation-collection-l4zuf56A.mjs} +1 -1
  252. package/dist/web-components/viewer/{annotation-name-Bp2GHdpi.mjs → annotation-name-CRl0w7NR.mjs} +1 -1
  253. package/dist/web-components/viewer/annotations-content-CYjPRTZn.mjs +1 -0
  254. package/dist/web-components/viewer/{cloverEngine-BmUppb5Y.mjs → cloverEngine-2b_guC4P.mjs} +2 -2
  255. package/dist/web-components/viewer/{content-state-reader-B9u1vc3t.mjs → content-state-reader-Cm-rvusT.mjs} +1 -1
  256. package/dist/web-components/viewer/{dragToClose-C9KwbQpA.mjs → dragToClose-DXXIWV62.mjs} +1 -1
  257. package/dist/web-components/viewer/{fetchManifest-gl9fyg7D.mjs → fetchManifest-DorkDXGC.mjs} +1 -1
  258. package/dist/web-components/viewer/{host-D3tVEhAD.mjs → host-DscGC2S0.mjs} +1 -1
  259. package/dist/web-components/viewer/{image-layers-DSehEFmU.mjs → image-layers-CZ9-efD2.mjs} +1 -1
  260. package/dist/web-components/viewer/image-service-content-C60w8IZm.mjs +1 -0
  261. package/dist/web-components/viewer/index.mjs +1 -1
  262. package/dist/web-components/viewer/{link-BYKFtAno.mjs → link-CysSctMX.mjs} +1 -1
  263. package/dist/web-components/viewer/overlayImage-CwPnVnIi.mjs +1 -0
  264. package/dist/web-components/viewer/{range-regions-CEM4sQKi.mjs → range-regions-C7ZBtSyb.mjs} +1 -1
  265. package/dist/web-components/viewer/{renderers-BiDrFLxn.mjs → renderers-D4wJiQYv.mjs} +1 -1
  266. package/dist/web-components/viewer/{save-file-CzYUFJNg.mjs → save-file-uqsNOVPU.mjs} +1 -1
  267. package/dist/web-components/viewer/{search-Dr6AQ3Lb.mjs → search-CWuD5EZA.mjs} +1 -1
  268. package/dist/web-components/viewer/styles-BjjJM8OS.mjs +1 -0
  269. package/dist/web-components/viewer/{useControlsVisibility-CP5m7oBd.mjs → useControlsVisibility-KTxa_3yJ.mjs} +1 -1
  270. package/dist/web-components/viewer/viewer-C3d_TgAI.mjs +29 -0
  271. package/dist/web-components/viewer/{vtt-CDqR3lHn.mjs → vtt-DqtJ20x0.mjs} +1 -1
  272. package/dist/web-components/viewer-BoyWG64n.mjs +1 -0
  273. package/dist/web-components/{vtt-DHZRkZ_P.mjs → vtt-BNuRzGap.mjs} +1 -1
  274. package/dist/web-components/zh-Hans-DnYm6PWu.mjs +1 -0
  275. package/dist/web-components/zh-Hant-DsxnuLPZ.mjs +1 -0
  276. package/package.json +1 -1
  277. package/dist/web-components/About-DgBOPS3N.mjs +0 -1
  278. package/dist/web-components/AnnotationItems-CBEb7Cew.mjs +0 -1
  279. package/dist/web-components/AnnotationMenu-DiQyu45i.mjs +0 -1
  280. package/dist/web-components/AnnotationState-DemGGP7N.mjs +0 -1
  281. package/dist/web-components/Annotations-CDVyd69_.mjs +0 -2
  282. package/dist/web-components/CanvasView-DeM04pm-.mjs +0 -2
  283. package/dist/web-components/ControlMenu-CJtszzgx.mjs +0 -1
  284. package/dist/web-components/ControlsFade-Pye8AyCz.mjs +0 -1
  285. package/dist/web-components/CountMenu-3-t8974M.mjs +0 -1
  286. package/dist/web-components/Cue-eTms5gbr.mjs +0 -1
  287. package/dist/web-components/Document-CkKoLQ51.mjs +0 -1
  288. package/dist/web-components/FieldPill-M9u0eLtz.mjs +0 -1
  289. package/dist/web-components/Gallery-mqXXjGtK.mjs +0 -1
  290. package/dist/web-components/Items-BoFm0Hlx.mjs +0 -1
  291. package/dist/web-components/Label-GTBsGDCC.mjs +0 -1
  292. package/dist/web-components/LanguageChoice-BEiskuVG.mjs +0 -1
  293. package/dist/web-components/LightboxView-Daz0RCee.mjs +0 -1
  294. package/dist/web-components/LoadedMap-D9Z3zl12.mjs +0 -1
  295. package/dist/web-components/MapView-CExlNO5E.mjs +0 -3
  296. package/dist/web-components/PagerLayout-l6UNSoQ1.mjs +0 -1
  297. package/dist/web-components/Panel-ikILE92M.mjs +0 -1
  298. package/dist/web-components/PanelPart-VPAwSoQZ.mjs +0 -1
  299. package/dist/web-components/PlaceBox-D73C--SU.mjs +0 -1
  300. package/dist/web-components/Primitives-CBRreXtS.mjs +0 -1
  301. package/dist/web-components/Provider-HPVBNZPr.mjs +0 -1
  302. package/dist/web-components/Root-BJwk-F1e.mjs +0 -1
  303. package/dist/web-components/Scene-DC7ofvsK.mjs +0 -1
  304. package/dist/web-components/SceneView-C53yZtMZ.mjs +0 -1
  305. package/dist/web-components/Search-Cd0xLU3y.mjs +0 -1
  306. package/dist/web-components/Sections-Cf3JDxnz.mjs +0 -2
  307. package/dist/web-components/StandaloneItems-DEchYe7Y.mjs +0 -1
  308. package/dist/web-components/Timeline--uq4-_TD.mjs +0 -1
  309. package/dist/web-components/Transcript-Dex719tP.mjs +0 -1
  310. package/dist/web-components/Transport-BV0Rg5Ym.mjs +0 -1
  311. package/dist/web-components/Transport-CHkvmPbN.mjs +0 -1
  312. package/dist/web-components/downloads-CFz0RnMz.mjs +0 -1
  313. package/dist/web-components/hooks-uer3ZRx7.mjs +0 -1
  314. package/dist/web-components/index-BkADsP3U.mjs +0 -1
  315. package/dist/web-components/items-BWG13qDG.mjs +0 -1
  316. package/dist/web-components/items-SD92pRMN.mjs +0 -1
  317. package/dist/web-components/label-Bw9SwLh8.mjs +0 -1
  318. package/dist/web-components/layout-DrVnUBcm.mjs +0 -1
  319. package/dist/web-components/logo-Dzr2M4F7.mjs +0 -1
  320. package/dist/web-components/part-dr-d1XPo.mjs +0 -1
  321. package/dist/web-components/pointer-IZcH8rZy.mjs +0 -1
  322. package/dist/web-components/readingLanguages-Bd4MD2DP.mjs +0 -1
  323. package/dist/web-components/rendererSurface-Ox625xUL.mjs +0 -22
  324. package/dist/web-components/resource-DmK-8hJ-.mjs +0 -1
  325. package/dist/web-components/shared-BmkV0s_d.mjs +0 -1
  326. package/dist/web-components/styles-On1ck1Ob.mjs +0 -1
  327. package/dist/web-components/useNearViewport-yyUYq47j.mjs +0 -1
  328. package/dist/web-components/useScrollTrack-CcFLYR4o.mjs +0 -1
  329. package/dist/web-components/viewer/AnnotationMenu-C-9tbH4G.mjs +0 -1
  330. package/dist/web-components/viewer/AnnotationState-CV4g-WUB.mjs +0 -1
  331. package/dist/web-components/viewer/Annotations-t1K8U5Kp.mjs +0 -2
  332. package/dist/web-components/viewer/CaptionDetails-xzvdqP5N.mjs +0 -1
  333. package/dist/web-components/viewer/ControlMenu-DIfN3xYJ.mjs +0 -1
  334. package/dist/web-components/viewer/ControlsFade-sckPhZ4x.mjs +0 -1
  335. package/dist/web-components/viewer/CountMenu-BQVCtVfu.mjs +0 -1
  336. package/dist/web-components/viewer/Cue-DQ8q-fgb.mjs +0 -1
  337. package/dist/web-components/viewer/Document-B-nJpfDh.mjs +0 -1
  338. package/dist/web-components/viewer/FieldPill-BQcDb4xM.mjs +0 -1
  339. package/dist/web-components/viewer/Gallery-_0dEBq2w.mjs +0 -1
  340. package/dist/web-components/viewer/LanguageChoice-0UWQ5V-y.mjs +0 -1
  341. package/dist/web-components/viewer/LightboxView-Dnlf7m8l.mjs +0 -1
  342. package/dist/web-components/viewer/PagerLayout-PYWFPFSJ.mjs +0 -1
  343. package/dist/web-components/viewer/PanelPart-Bd0JqUwF.mjs +0 -1
  344. package/dist/web-components/viewer/PlaceBox-Bh9V3RLS.mjs +0 -1
  345. package/dist/web-components/viewer/Search-C0B5Jh9V.mjs +0 -1
  346. package/dist/web-components/viewer/Transcript-D3mKmdQY.mjs +0 -1
  347. package/dist/web-components/viewer/Transport-9f_lhebG.mjs +0 -1
  348. package/dist/web-components/viewer/Transport-BudReE7Y.mjs +0 -1
  349. package/dist/web-components/viewer/annotations-content-Ci-orrao.mjs +0 -1
  350. package/dist/web-components/viewer/overlayImage-CdgpMutd.mjs +0 -1
  351. package/dist/web-components/viewer/styles-DvZTMHkr.mjs +0 -1
  352. package/dist/web-components/viewer/viewer-DaG51iO3.mjs +0 -29
  353. package/dist/web-components/viewer-DeAUI9Fi.mjs +0 -1
package/README.md CHANGED
@@ -109,10 +109,11 @@ If you serve Clover's files yourself, copy the whole `dist/web-components` folde
109
109
  - [Composing layouts](https://clover.iiif.library.northwestern.edu/docs/composing): layouts of your
110
110
  own, from the parts and hooks.
111
111
  - [Styling](https://clover.iiif.library.northwestern.edu/docs/styling): colors, sizes and classes.
112
- - [Technical overview](https://clover.iiif.library.northwestern.edu/docs/technical): events,
113
- languages, types, what each part loads, and coming from Clover 3.x.
112
+ - [Glossary](https://clover.iiif.library.northwestern.edu/docs/composing/glossary): every
113
+ component and helper, and the package's structure.
114
114
 
115
- Clover 3.x, `@samvera/clover-iiif`, is documented on the same site, under
115
+ Clover 3.x, `@samvera/clover-iiif`, is deprecated and no longer maintained. Its docs are
116
+ kept on the same site, under
116
117
  [Clover 3.x](https://clover.iiif.library.northwestern.edu/docs/deprecated-versions).
117
118
 
118
119
  ## License
@@ -26,7 +26,7 @@ import { useLoaded } from "../../hooks/useLoaded.mjs";
26
26
  import { HideToggle } from "../../ui/HideToggle.mjs";
27
27
  import { visuallyHidden } from "../../ui/visuallyHidden.mjs";
28
28
  import { startingLanguage } from "../../core/language-choice.mjs";
29
- import { useReadingLanguages } from "../../react/readingLanguages.mjs";
29
+ import { useReadingLanguages, covers } from "../../react/readingLanguages.mjs";
30
30
  import { LanguageChoice } from "../../ui/LanguageChoice.mjs";
31
31
  import { languagesOf, inLanguage } from "./languages.mjs";
32
32
  import { languageProps } from "../../i18n/direction.mjs";
@@ -160,7 +160,8 @@ function AnnotationGroup({
160
160
  const languages = useMemo(() => languagesOf(entries), [entries]);
161
161
  const [picked, setPicked] = useState();
162
162
  const offered = useReadingLanguages();
163
- const chosen = offered ? startingLanguage(languages, offered.chosen) : startingLanguage(languages, language, picked);
163
+ const follows = covers(offered, languages);
164
+ const chosen = follows ? startingLanguage(languages, offered.chosen) : startingLanguage(languages, (offered == null ? void 0 : offered.chosen) ?? language, picked);
164
165
  const listed = entries.filter((entry) => inLanguage(entry, chosen));
165
166
  return /* @__PURE__ */ jsxs(
166
167
  "section",
@@ -179,7 +180,7 @@ function AnnotationGroup({
179
180
  children: title.text
180
181
  }
181
182
  ),
182
- chosen && !offered && /* @__PURE__ */ jsx(
183
+ chosen && !follows && /* @__PURE__ */ jsx(
183
184
  LanguageChoice,
184
185
  {
185
186
  languages,
@@ -391,7 +392,12 @@ const AnnotationLayers = forwardRef(function AnnotationLayers2({
391
392
  const languages = languagesOf(
392
393
  layer.canvases.flatMap((group) => group.entries)
393
394
  );
394
- const chosen = offered ? startingLanguage(languages, offered.chosen) : startingLanguage(languages, language, picked[layer.key]);
395
+ const follows = covers(offered, languages);
396
+ const chosen = follows ? startingLanguage(languages, offered.chosen) : startingLanguage(
397
+ languages,
398
+ (offered == null ? void 0 : offered.chosen) ?? language,
399
+ picked[layer.key]
400
+ );
395
401
  return /* @__PURE__ */ jsxs(
396
402
  "section",
397
403
  {
@@ -408,7 +414,7 @@ const AnnotationLayers = forwardRef(function AnnotationLayers2({
408
414
  children: layer.title.text
409
415
  }
410
416
  ),
411
- chosen && !offered && /* @__PURE__ */ jsx(
417
+ chosen && !follows && /* @__PURE__ */ jsx(
412
418
  LanguageChoice,
413
419
  {
414
420
  languages,
@@ -38,7 +38,7 @@ const Caption = ({
38
38
  "data-testid": "clover-canvas-caption",
39
39
  id,
40
40
  onKeyDown: (event) => {
41
- if (event.key !== "Escape") return;
41
+ if (event.key !== "Escape" || event.defaultPrevented) return;
42
42
  event.preventDefault();
43
43
  event.stopPropagation();
44
44
  onClose(true);
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from "react/jsx-runtime";
3
+ import { useRef } from "react";
3
4
  import { startOf } from "./Annotations.mjs";
4
5
  import ControlMenu from "./ControlMenu.mjs";
5
6
  import { CueTime } from "../../ui/Cue.mjs";
@@ -20,6 +21,7 @@ const AnnotationMenu = ({
20
21
  onClose
21
22
  }) => {
22
23
  const name = useContainerName(label, labelLang);
24
+ const pointer = useRef(false);
23
25
  const groups = [];
24
26
  annotations.forEach((annotation, index) => {
25
27
  var _a, _b;
@@ -84,6 +86,9 @@ const AnnotationMenu = ({
84
86
  "data-selected": picked,
85
87
  onMouseEnter: () => onActivate(annotation.id),
86
88
  onMouseLeave: () => onActivate(null),
89
+ onPointerDown: () => {
90
+ pointer.current = true;
91
+ },
87
92
  children: [
88
93
  /* @__PURE__ */ jsx(
89
94
  "input",
@@ -91,8 +96,17 @@ const AnnotationMenu = ({
91
96
  type: "radio",
92
97
  name: id,
93
98
  checked: picked,
94
- onChange: () => onSelect(annotation),
95
- onClick: () => picked && onSelect(annotation),
99
+ onChange: () => onSelect(annotation, pointer.current),
100
+ onClick: () => {
101
+ if (picked || !pointer.current) onSelect(annotation);
102
+ },
103
+ onKeyDown: (event) => {
104
+ pointer.current = false;
105
+ if (event.key === "Enter") {
106
+ event.preventDefault();
107
+ onSelect(annotation);
108
+ }
109
+ },
96
110
  onFocus: () => onActivate(annotation.id),
97
111
  onBlur: () => onActivate(null)
98
112
  }
@@ -165,30 +165,34 @@ function AnnotationState({
165
165
  hiddenPagesRef.current = hiddenPages;
166
166
  const setPagesVisibleRef = useRef(setPagesVisible);
167
167
  setPagesVisibleRef.current = setPagesVisible;
168
- const selectAnnotation = useCallback((annotation) => {
169
- var _a, _b, _c;
170
- if (annotation.pageId && hiddenPagesRef.current.includes(annotation.pageId))
171
- setPagesVisibleRef.current([annotation.pageId], true);
172
- setOwnSelected(annotation.id);
173
- (_a = onAnnotationActiveRef.current) == null ? void 0 : _a.call(onAnnotationActiveRef, annotation.id);
174
- (_b = onAnnotationSelectRef.current) == null ? void 0 : _b.call(onAnnotationSelectRef, annotation.id);
175
- if (held.current) return;
176
- if ("start" in annotation) {
177
- const element = mediaElementRef.current;
178
- if (!element) return;
179
- sought.current = annotation.id;
180
- playFrom(element, annotation.start);
181
- return;
182
- }
183
- framed.current = annotation.id;
184
- if (annotation.track) {
185
- const element = mediaElementRef.current;
186
- if (element && goToTrack(annotation, element))
168
+ const selectAnnotation = useCallback(
169
+ (annotation, play = true) => {
170
+ var _a, _b, _c;
171
+ if (annotation.pageId && hiddenPagesRef.current.includes(annotation.pageId))
172
+ setPagesVisibleRef.current([annotation.pageId], true);
173
+ setOwnSelected(annotation.id);
174
+ (_a = onAnnotationActiveRef.current) == null ? void 0 : _a.call(onAnnotationActiveRef, annotation.id);
175
+ (_b = onAnnotationSelectRef.current) == null ? void 0 : _b.call(onAnnotationSelectRef, annotation.id);
176
+ if (held.current) return;
177
+ if ("start" in annotation) {
178
+ const element = mediaElementRef.current;
179
+ if (!element) return;
187
180
  sought.current = annotation.id;
188
- return;
189
- }
190
- (_c = rendererRef.current) == null ? void 0 : _c.fitAnnotation(annotation.world, !glide.current);
191
- }, []);
181
+ if (play) playFrom(element, annotation.start);
182
+ else element.currentTime = annotation.start;
183
+ return;
184
+ }
185
+ framed.current = annotation.id;
186
+ if (annotation.track) {
187
+ const element = mediaElementRef.current;
188
+ if (element && goToTrack(annotation, element))
189
+ sought.current = annotation.id;
190
+ return;
191
+ }
192
+ (_c = rendererRef.current) == null ? void 0 : _c.fitAnnotation(annotation.world, !glide.current);
193
+ },
194
+ []
195
+ );
192
196
  const selectedRef = useRef(selectedAnnotation);
193
197
  selectedRef.current = selectedAnnotation;
194
198
  const releaseAnnotation = useCallback(() => {
@@ -58,11 +58,20 @@ const ControlMenu = ({
58
58
  };
59
59
  document.addEventListener("keydown", after, { once: true });
60
60
  };
61
+ const onFocusIn = (event) => {
62
+ var _a;
63
+ const target = event.target;
64
+ if (!(target == null ? void 0 : target.closest(".clover-canvas-viewport"))) return;
65
+ if ((_a = ref.current) == null ? void 0 : _a.contains(target)) return;
66
+ onClose(false);
67
+ };
61
68
  document.addEventListener("pointerdown", onPointerDown);
62
69
  document.addEventListener("keydown", onKeyDown, true);
70
+ document.addEventListener("focusin", onFocusIn);
63
71
  return () => {
64
72
  document.removeEventListener("pointerdown", onPointerDown);
65
73
  document.removeEventListener("keydown", onKeyDown, true);
74
+ document.removeEventListener("focusin", onFocusIn);
66
75
  };
67
76
  }, [triggerId, onClose, holds]);
68
77
  return /* @__PURE__ */ jsx(
@@ -7,6 +7,7 @@ import { useCloverTranslation } from "../../i18n/useCloverTranslation.mjs";
7
7
  import { localize } from "../../core/value.mjs";
8
8
  import { useOneOpen } from "../../ui/useOneOpen.mjs";
9
9
  import { languageProps } from "../../i18n/direction.mjs";
10
+ import { useContainerName } from "../../i18n/useContainerName.mjs";
10
11
  import { visuallyHidden } from "../../ui/visuallyHidden.mjs";
11
12
  function PlaceBox({
12
13
  id,
@@ -19,6 +20,11 @@ function PlaceBox({
19
20
  const { t, langOf } = useCloverTranslation();
20
21
  useOneOpen(open, () => onClose(false));
21
22
  const heading = localize(name, language);
23
+ const fallback = useContainerName(
24
+ t("mapLabel"),
25
+ langOf("mapLabel"),
26
+ Boolean(heading.text)
27
+ );
22
28
  return /* @__PURE__ */ jsxs(
23
29
  "div",
24
30
  {
@@ -28,6 +34,7 @@ function PlaceBox({
28
34
  id,
29
35
  role: "group",
30
36
  "aria-labelledby": heading.text ? `${id}-name` : void 0,
37
+ ...fallback.props,
31
38
  onKeyDown: (event) => {
32
39
  if (event.key !== "Escape") return;
33
40
  event.preventDefault();
@@ -46,6 +53,7 @@ function PlaceBox({
46
53
  children: /* @__PURE__ */ jsx(Close, {})
47
54
  }
48
55
  ),
56
+ fallback.node,
49
57
  heading.text && /* @__PURE__ */ jsx(
50
58
  "p",
51
59
  {
@@ -14,6 +14,7 @@ import { useOneOpen } from "../../../ui/useOneOpen.mjs";
14
14
  import { PlayIcon, PauseIcon, VolumeMutedIcon, VolumeHighIcon, CaptionsIcon, FitIcon, FillIcon, ExitFullScreenIcon, FullScreenIcon } from "../../../ui/mediaIcons.mjs";
15
15
  import { useContainerName } from "../../../i18n/useContainerName.mjs";
16
16
  import { useCloverTranslation } from "../../../i18n/useCloverTranslation.mjs";
17
+ import { visuallyHidden } from "../../../ui/visuallyHidden.mjs";
17
18
  import { toggleFullscreen } from "../../../lib/fullscreen.mjs";
18
19
  import useFullscreenSupported from "../../../hooks/useFullscreenSupported.mjs";
19
20
  import { languageProps } from "../../../i18n/direction.mjs";
@@ -330,7 +331,7 @@ const Transport = ({
330
331
  focused.current = null;
331
332
  const active = document.activeElement;
332
333
  if (!active || active === document.body) (_a2 = play.current) == null ? void 0 : _a2.focus();
333
- }, [captions.length, chapters.length, hasFullscreen]);
334
+ });
334
335
  return /* @__PURE__ */ jsxs(
335
336
  "div",
336
337
  {
@@ -481,28 +482,41 @@ const Transport = ({
481
482
  "--clover-transport-progress": `${(muted ? 0 : volume) * 100}%`
482
483
  },
483
484
  type: "range",
484
- value: muted ? 0 : volume
485
+ value: muted ? 0 : volume,
486
+ "aria-valuetext": `${Math.round((muted ? 0 : volume) * 100)}%`
485
487
  }
486
488
  ),
487
489
  /* @__PURE__ */ jsxs("span", { className: "clover-canvas-transport-status", children: [
488
490
  /* @__PURE__ */ jsxs("span", { className: "clover-canvas-transport-time", children: [
489
- /* @__PURE__ */ jsx(
490
- "span",
491
- {
492
- "aria-label": t("playerCurrentTime"),
493
- ...languageProps(langOf("playerCurrentTime")),
494
- children: formatTime(currentTime)
495
- }
496
- ),
491
+ /* @__PURE__ */ jsxs("span", { children: [
492
+ /* @__PURE__ */ jsxs(
493
+ "span",
494
+ {
495
+ style: visuallyHidden,
496
+ ...languageProps(langOf("playerCurrentTime")),
497
+ children: [
498
+ t("playerCurrentTime"),
499
+ " "
500
+ ]
501
+ }
502
+ ),
503
+ formatTime(currentTime)
504
+ ] }),
497
505
  /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: " / " }),
498
- /* @__PURE__ */ jsx(
499
- "span",
500
- {
501
- "aria-label": t("playerDuration"),
502
- ...languageProps(langOf("playerDuration")),
503
- children: formatTime(duration)
504
- }
505
- )
506
+ /* @__PURE__ */ jsxs("span", { children: [
507
+ /* @__PURE__ */ jsxs(
508
+ "span",
509
+ {
510
+ style: visuallyHidden,
511
+ ...languageProps(langOf("playerDuration")),
512
+ children: [
513
+ t("playerDuration"),
514
+ " "
515
+ ]
516
+ }
517
+ ),
518
+ formatTime(duration)
519
+ ] })
506
520
  ] }),
507
521
  chapter >= 0 && /* @__PURE__ */ jsx(
508
522
  "span",
@@ -2,12 +2,16 @@
2
2
  import { jsxs, jsx } from "react/jsx-runtime";
3
3
  import { useState, useRef, useCallback, Suspense, lazy } from "react";
4
4
  import { useUniqueId } from "../../ui/useUniqueId.mjs";
5
+ import { useCloverTranslation } from "../../i18n/useCloverTranslation.mjs";
6
+ import { languageProps } from "../../i18n/direction.mjs";
7
+ import { visuallyHidden } from "../../ui/visuallyHidden.mjs";
5
8
  const ControlMenu = lazy(() => import("../Canvas/ControlMenu.mjs"));
6
9
  function CountMenu({
7
10
  position,
8
11
  total,
9
12
  list
10
13
  }) {
14
+ const { t, langOf } = useCloverTranslation();
11
15
  const triggerId = `${useUniqueId().replace(/:/g, "")}-count`;
12
16
  const menuId = `${triggerId}-menu`;
13
17
  const [open, setOpen] = useState(false);
@@ -36,11 +40,19 @@ function CountMenu({
36
40
  onClick: () => setOpen(!open),
37
41
  children: [
38
42
  /* @__PURE__ */ jsxs("span", { className: "clover-pager-position", "aria-live": "polite", children: [
39
- /* @__PURE__ */ jsxs("span", { children: [
43
+ /* @__PURE__ */ jsxs("span", { "aria-hidden": position >= 0 || void 0, children: [
40
44
  position >= 0 ? position + 1 : "–",
41
45
  " / ",
42
46
  total
43
47
  ] }),
48
+ position >= 0 && /* @__PURE__ */ jsx(
49
+ "span",
50
+ {
51
+ style: visuallyHidden,
52
+ ...languageProps(langOf("canvasPosition")),
53
+ children: t("canvasPosition", { index: position + 1, total })
54
+ }
55
+ ),
44
56
  /* @__PURE__ */ jsxs("span", { className: "clover-pager-room", "aria-hidden": "true", hidden: true, children: [
45
57
  total,
46
58
  " / ",
@@ -183,6 +183,7 @@ function ItemsView({
183
183
  navigation,
184
184
  rtl = false,
185
185
  layout = "slider",
186
+ orientation = "horizontal",
186
187
  thumbnailSize = 200,
187
188
  request,
188
189
  language,
@@ -212,6 +213,7 @@ function ItemsView({
212
213
  const { langOf } = root;
213
214
  const contrast = useHighContrast(highContrast);
214
215
  const slider = layout === "slider";
216
+ const vertical = slider && orientation === "vertical";
215
217
  const listbox = navigation === "id";
216
218
  const viewport = useRef(null);
217
219
  const masonry = layout === "masonry";
@@ -230,12 +232,13 @@ function ItemsView({
230
232
  }, [masonry]);
231
233
  const track = useScrollTrack({
232
234
  align: listbox ? "center" : "start",
233
- itemCount: items.length
235
+ itemCount: items.length,
236
+ axis: vertical ? "y" : "x"
234
237
  });
235
238
  const held = useRef(void 0);
236
239
  useEffect(() => () => window.clearTimeout(held.current), []);
237
240
  const roving = useRovingFocus(items.length, selected, {
238
- orientation: layout === "slider" ? "horizontal" : layout === "list" ? "vertical" : "both",
241
+ orientation: vertical ? "vertical" : layout === "slider" ? "horizontal" : layout === "list" ? "vertical" : "both",
239
242
  rtl,
240
243
  onActivate: (index, event) => onActivate(items[index], event),
241
244
  onMove: followFocus ? (index, event) => {
@@ -301,7 +304,13 @@ function ItemsView({
301
304
  const positioned = (item) => !(renderItem || localize(item.label, language).text || showSummary && secondary === "summary" && localize(item.summary, language).text);
302
305
  const positionName = (item, index) => positioned(item) ? t("canvasPosition", { index: index + 1, total: items.length }) : void 0;
303
306
  const positionLang = (item) => positioned(item) ? langOf("canvasPosition") : void 0;
304
- const trackStyle = slider ? { display: "flex", margin: 0, padding: 0, listStyle: "none" } : void 0;
307
+ const trackStyle = slider ? {
308
+ display: "flex",
309
+ flexDirection: vertical ? "column" : void 0,
310
+ margin: 0,
311
+ padding: 0,
312
+ listStyle: "none"
313
+ } : void 0;
305
314
  const slideStyle = slider ? { flex: "0 0 auto", scrollSnapAlign: listbox ? "center" : "start" } : void 0;
306
315
  const stepping = listbox && selected >= 0;
307
316
  const scrollButton = (step) => {
@@ -339,7 +348,7 @@ function ItemsView({
339
348
  children: /* @__PURE__ */ jsx(
340
349
  "path",
341
350
  {
342
- d: step === "next" !== rtl ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5",
351
+ d: vertical ? step === "next" ? "M3 6l5 5 5-5" : "M3 10l5-5 5 5" : step === "next" !== rtl ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5",
343
352
  fill: "none",
344
353
  stroke: "currentColor",
345
354
  strokeWidth: "2",
@@ -361,6 +370,7 @@ function ItemsView({
361
370
  ref: root.ref,
362
371
  className: join("clover-items", className),
363
372
  "data-layout": layout,
373
+ "data-orientation": vertical ? "vertical" : void 0,
364
374
  "data-navigation": navigation,
365
375
  ...highContrastProps(contrast),
366
376
  ...rest,
@@ -414,7 +424,7 @@ function ItemsView({
414
424
  ref: listRef,
415
425
  role: "listbox",
416
426
  ...listName,
417
- "aria-orientation": slider ? "horizontal" : "vertical",
427
+ "aria-orientation": vertical ? "vertical" : slider ? "horizontal" : layout === "list" ? "vertical" : void 0,
418
428
  className: "clover-items-track",
419
429
  style: trackStyle,
420
430
  children: items.map((item, index) => {
@@ -480,7 +490,7 @@ function ItemsView({
480
490
  ) });
481
491
  }
482
492
  function keepInView(element, instant) {
483
- var _a;
493
+ var _a, _b;
484
494
  let box = element.parentElement;
485
495
  while (box && box !== document.body) {
486
496
  const { overflowY } = getComputedStyle(box);
@@ -494,7 +504,14 @@ function keepInView(element, instant) {
494
504
  const inner = element.getBoundingClientRect();
495
505
  const delta = inner.top < outer.top ? inner.top - outer.top : inner.bottom > outer.bottom ? inner.bottom - outer.bottom : 0;
496
506
  if (delta) {
497
- (_a = box.scrollBy) == null ? void 0 : _a.call(box, { top: delta, behavior: instant ? "auto" : "smooth" });
507
+ const still = (_a = window.matchMedia) == null ? void 0 : _a.call(
508
+ window,
509
+ "(prefers-reduced-motion: reduce)"
510
+ ).matches;
511
+ (_b = box.scrollBy) == null ? void 0 : _b.call(box, {
512
+ top: delta,
513
+ behavior: instant || still ? "auto" : "smooth"
514
+ });
498
515
  }
499
516
  }
500
517
  export {
@@ -10,6 +10,7 @@ function PagerLayout({
10
10
  forwardedRef,
11
11
  /* eslint-disable @typescript-eslint/no-unused-vars -- Items' own, not the nav's */
12
12
  layout,
13
+ orientation,
13
14
  thumbnailSize,
14
15
  renderItem,
15
16
  header,
@@ -221,7 +221,7 @@ function MapView({
221
221
  (bundled) => bundled.mapLibreSheet().then(() => bundled)
222
222
  )
223
223
  ]).then(async ([module, bundled]) => {
224
- var _a;
224
+ var _a, _b, _c, _d, _e;
225
225
  const maplibre = "Map" in module ? module : module.default;
226
226
  if (!live || !container.current) return;
227
227
  const worker = workerUrl ?? getMapWorkerUrl() ?? bundled.bundledWorkerUrl((_a = maplibre.getVersion) == null ? void 0 : _a.call(maplibre));
@@ -243,7 +243,7 @@ function MapView({
243
243
  scrollZoom,
244
244
  // Its credits behind their ⓘ, in the lower corner; none where left out.
245
245
  attributionControl: credits ? { compact: true } : false,
246
- // MapLibre's own names, in Clover's words; kept current below.
246
+ // MapLibre's own names, in Clover's interface words; kept current below.
247
247
  locale: {
248
248
  "Map.Title": t2("mapLabel"),
249
249
  "NavigationControl.ZoomIn": t2("imageZoomIn"),
@@ -256,6 +256,8 @@ function MapView({
256
256
  new maplibre.NavigationControl({ showCompass: false }),
257
257
  "bottom-left"
258
258
  );
259
+ (_c = (_b = instance.touchZoomRotate) == null ? void 0 : _b.disableRotation) == null ? void 0 : _c.call(_b);
260
+ (_e = (_d = instance.keyboard) == null ? void 0 : _d.disableRotation) == null ? void 0 : _e.call(_d);
259
261
  instance.on("load", () => {
260
262
  var _a2;
261
263
  if (!live) return;
@@ -269,6 +271,7 @@ function MapView({
269
271
  let popup = null;
270
272
  let picked = null;
271
273
  let shown = "";
274
+ let dismissed = "";
272
275
  let hovered;
273
276
  let pickedId;
274
277
  const idOf = (feature) => typeof feature.id === "number" && feature.id >= 0 ? feature.id : latest.current.features.features.indexOf(feature);
@@ -294,7 +297,7 @@ function MapView({
294
297
  shown = "";
295
298
  };
296
299
  const show2 = (feature) => {
297
- var _a3, _b, _c, _d, _e, _f, _g, _h, _i;
300
+ var _a3, _b2, _c2, _d2, _e2, _f, _g, _h, _i;
298
301
  if (shown === keyOf(feature) && popup) return;
299
302
  unname();
300
303
  const title = (_a3 = feature.properties) == null ? void 0 : _a3.title;
@@ -302,7 +305,7 @@ function MapView({
302
305
  if (!title || !bounds) return;
303
306
  const text = document.createElement("span");
304
307
  text.textContent = String(title);
305
- const lang = (_b = feature.properties) == null ? void 0 : _b.titleLang;
308
+ const lang = (_b2 = feature.properties) == null ? void 0 : _b2.titleLang;
306
309
  const marked = (element, tag) => {
307
310
  if (tag === void 0) return;
308
311
  element.lang = tag;
@@ -311,7 +314,7 @@ function MapView({
311
314
  };
312
315
  const nameLang = lang === void 0 ? void 0 : String(lang);
313
316
  marked(text, nameLang);
314
- const date = readDate((_c = feature.properties) == null ? void 0 : _c.navDate);
317
+ const date = readDate((_c2 = feature.properties) == null ? void 0 : _c2.navDate);
315
318
  if (date) {
316
319
  const locale = cloverI18n.language;
317
320
  const time = document.createElement("time");
@@ -326,7 +329,7 @@ function MapView({
326
329
  }
327
330
  const [[west, south], [east, north]] = bounds;
328
331
  const middle = (west + east) / 2;
329
- const room = ((_e = (_d = instance.getContainer) == null ? void 0 : _d.call(instance)) == null ? void 0 : _e.clientHeight) ?? 0;
332
+ const room = ((_e2 = (_d2 = instance.getContainer) == null ? void 0 : _d2.call(instance)) == null ? void 0 : _e2.clientHeight) ?? 0;
330
333
  const top = ((_g = (_f = instance.project) == null ? void 0 : _f.call(instance, [middle, north])) == null ? void 0 : _g.y) ?? 0;
331
334
  const foot = ((_i = (_h = instance.project) == null ? void 0 : _h.call(instance, [middle, south])) == null ? void 0 : _i.y) ?? 0;
332
335
  const below = room - foot >= top;
@@ -345,9 +348,9 @@ function MapView({
345
348
  };
346
349
  let hangs = 0;
347
350
  const keepInside = () => {
348
- var _a3, _b, _c, _d;
351
+ var _a3, _b2, _c2, _d2;
349
352
  const element = (_a3 = popup == null ? void 0 : popup.getElement) == null ? void 0 : _a3.call(popup);
350
- const box2 = (_d = (_c = (_b = instance.getContainer) == null ? void 0 : _b.call(instance)) == null ? void 0 : _c.getBoundingClientRect) == null ? void 0 : _d.call(_c);
353
+ const box2 = (_d2 = (_c2 = (_b2 = instance.getContainer) == null ? void 0 : _b2.call(instance)) == null ? void 0 : _c2.getBoundingClientRect) == null ? void 0 : _d2.call(_c2);
351
354
  if (!element || !box2 || !popup.setOffset) return;
352
355
  const away = gap();
353
356
  popup.setOffset([0, hangs]);
@@ -370,37 +373,39 @@ function MapView({
370
373
  show2(kept);
371
374
  };
372
375
  name.current = (feature) => {
376
+ dismissed = "";
373
377
  picked = feature;
374
378
  pick(feature);
375
379
  show2(feature);
376
380
  };
377
381
  for (const layer of CLICKABLE) {
378
382
  instance.on("click", layer, (event) => {
379
- var _a3, _b, _c, _d;
383
+ var _a3, _b2, _c2, _d2;
380
384
  const feature = (_a3 = event.features) == null ? void 0 : _a3[0];
381
385
  if (!feature) return;
382
- (_b = name.current) == null ? void 0 : _b.call(name, feature, event.lngLat);
383
- (_d = (_c = latest.current).onSelect) == null ? void 0 : _d.call(_c, feature);
386
+ (_b2 = name.current) == null ? void 0 : _b2.call(name, feature, event.lngLat);
387
+ (_d2 = (_c2 = latest.current).onSelect) == null ? void 0 : _d2.call(_c2, feature);
384
388
  });
385
389
  instance.on("mousemove", layer, (event) => {
386
- var _a3, _b, _c;
390
+ var _a3, _b2, _c2;
387
391
  instance.getCanvas().style.cursor = "pointer";
388
392
  const feature = (_a3 = event.features) == null ? void 0 : _a3[0];
389
393
  if (!feature) return;
390
- show2(feature);
394
+ if (keyOf(feature) !== dismissed) show2(feature);
391
395
  const id = idOf(feature);
392
396
  if (id === hovered) return;
393
397
  mark(hovered, "hover", false);
394
398
  hovered = id;
395
399
  mark(hovered, "hover", true);
396
- (_c = (_b = latest.current).onHighlight) == null ? void 0 : _c.call(_b, feature);
400
+ (_c2 = (_b2 = latest.current).onHighlight) == null ? void 0 : _c2.call(_b2, feature);
397
401
  });
398
402
  instance.on("mouseleave", layer, () => {
399
- var _a3, _b;
403
+ var _a3, _b2;
400
404
  instance.getCanvas().style.cursor = "";
405
+ dismissed = "";
401
406
  mark(hovered, "hover", false);
402
407
  hovered = void 0;
403
- (_b = (_a3 = latest.current).onHighlight) == null ? void 0 : _b.call(_a3, null);
408
+ (_b2 = (_a3 = latest.current).onHighlight) == null ? void 0 : _b2.call(_a3, null);
404
409
  if (picked) show2(picked);
405
410
  else unname();
406
411
  });
@@ -419,13 +424,20 @@ function MapView({
419
424
  unname();
420
425
  });
421
426
  const escape = (event) => {
422
- if (event.key !== "Escape" || !popup) return;
427
+ var _a3;
428
+ if (event.key !== "Escape" || event.defaultPrevented || !popup)
429
+ return;
430
+ const own = (_a3 = container.current) == null ? void 0 : _a3.closest(".clover-geomap");
431
+ const target = event.target;
432
+ if (!(own == null ? void 0 : own.contains(target)) && !(own == null ? void 0 : own.matches(":hover"))) return;
433
+ event.preventDefault();
434
+ dismissed = shown;
423
435
  picked = null;
424
436
  pick(null);
425
437
  unname();
426
438
  };
427
- document.addEventListener("keydown", escape);
428
- letGo = () => document.removeEventListener("keydown", escape);
439
+ document.addEventListener("keydown", escape, true);
440
+ letGo = () => document.removeEventListener("keydown", escape, true);
429
441
  setMap(instance);
430
442
  });
431
443
  if (typeof ResizeObserver !== "undefined") {