@nulib/clover 4.4.2 → 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 (316) hide show
  1. package/README.md +2 -2
  2. package/dist/components/Annotations/Annotations.mjs +11 -5
  3. package/dist/components/Items/Items.mjs +15 -5
  4. package/dist/components/Items/PagerLayout.mjs +1 -0
  5. package/dist/components/Map/MapView.mjs +1 -1
  6. package/dist/components/Panel/About.mjs +16 -5
  7. package/dist/components/Panel/AboutActions.mjs +10 -16
  8. package/dist/components/Panel/LanguageToggle.mjs +69 -0
  9. package/dist/components/Panel/Panel.mjs +9 -1
  10. package/dist/components/Panel/ReadingLanguages.mjs +2 -16
  11. package/dist/components/Panel/sections.mjs +6 -1
  12. package/dist/components/Root/useRootState.mjs +43 -4
  13. package/dist/components/Search/Search.mjs +10 -7
  14. package/dist/components/Transcript/Transcript.mjs +42 -33
  15. package/dist/core/image-service-content.mjs +108 -0
  16. package/dist/core/load.mjs +38 -1
  17. package/dist/i18n/config.mjs +88 -14
  18. package/dist/i18n/languages.mjs +42 -8
  19. package/dist/i18n/locales/index.mjs +4 -1
  20. package/dist/i18n/locales/ja.json.mjs +5 -0
  21. package/dist/i18n/locales/zh-Hans.json.mjs +5 -0
  22. package/dist/i18n/locales/zh-Hant.json.mjs +5 -0
  23. package/dist/index.d.mts +109 -24
  24. package/dist/lib/renderer/CanvasRenderer.mjs +20 -5
  25. package/dist/map/index.d.mts +3 -2
  26. package/dist/react/readingLanguages.mjs +15 -2
  27. package/dist/styles/default.css +1 -1
  28. package/dist/styles/items.css +1 -1
  29. package/dist/styles/panel.css +1 -1
  30. package/dist/styles.css +1 -1
  31. package/dist/templates/default/Default.mjs +2 -0
  32. package/dist/templates/document/Document.mjs +5 -1
  33. package/dist/templates/gallery/Gallery.mjs +2 -0
  34. package/dist/templates/index.d.mts +53 -11
  35. package/dist/templates/shared/LightboxView.mjs +2 -0
  36. package/dist/ui/GlobeGlyph.mjs +26 -0
  37. package/dist/ui/LanguageChoice.mjs +87 -20
  38. package/dist/ui/LanguageMenu.mjs +94 -0
  39. package/dist/ui/useScrollTrack.mjs +34 -19
  40. package/dist/web-components/About-BklM8JA9.mjs +1 -0
  41. package/dist/web-components/AnnotationItems-4mbvOrhN.mjs +1 -0
  42. package/dist/web-components/{AnnotationMenu-BiM0n-6H.mjs → AnnotationMenu-DtMaxXf5.mjs} +1 -1
  43. package/dist/web-components/AnnotationState-BuEpq99k.mjs +1 -0
  44. package/dist/web-components/Annotations-Dyg-RAdd.mjs +2 -0
  45. package/dist/web-components/{Annotations-x5H_Vls9.mjs → Annotations-oPabBO7j.mjs} +1 -1
  46. package/dist/web-components/{Body-BWOsHKU1.mjs → Body-CD7AtOPv.mjs} +1 -1
  47. package/dist/web-components/{BodyAlert-DYfrepDo.mjs → BodyAlert-DzW4__bK.mjs} +1 -1
  48. package/dist/web-components/{Button-Ch0E6GVj.mjs → Button-1To2Pwuz.mjs} +1 -1
  49. package/dist/web-components/{Camera-CY4adJpn.mjs → Camera-B82ZMekU.mjs} +1 -1
  50. package/dist/web-components/{Canvas2DBackend-eFcDTxq6.mjs → Canvas2DBackend-Ds-qoQ0W.mjs} +1 -1
  51. package/dist/web-components/{CanvasView-BqsXUI8n.mjs → CanvasView-B4fnYim4.mjs} +2 -2
  52. package/dist/web-components/{CaptionDetails-CuYSbD70.mjs → CaptionDetails-TTAEPH02.mjs} +1 -1
  53. package/dist/web-components/{ChaptersMenu-IlAt1pp2.mjs → ChaptersMenu-DhbAktrS.mjs} +1 -1
  54. package/dist/web-components/{Chevron-uZe3N2Pt.mjs → Chevron-Br3zRRMX.mjs} +1 -1
  55. package/dist/web-components/{ChoiceMenu-DBJynLGl.mjs → ChoiceMenu-B4_doj7b.mjs} +1 -1
  56. package/dist/web-components/{Collection-C1sRlJK1.mjs → Collection-DrMfq53r.mjs} +1 -1
  57. package/dist/web-components/{CollectionSelect-BYMQaanx.mjs → CollectionSelect-PP7IEcwu.mjs} +1 -1
  58. package/dist/web-components/{Connected-Bd2T2EUc.mjs → Connected-BOPNEv3j.mjs} +1 -1
  59. package/dist/web-components/{Connected-Dpp3iO3D.mjs → Connected-BguZSgy4.mjs} +1 -1
  60. package/dist/web-components/{Connected-Ckar86TI.mjs → Connected-CN94wOYw.mjs} +1 -1
  61. package/dist/web-components/{Contents-DjtD3iKA.mjs → Contents-Dn7MutL9.mjs} +1 -1
  62. package/dist/web-components/{ControlMenu-CaD8Frag.mjs → ControlMenu-DlP3JsqV.mjs} +1 -1
  63. package/dist/web-components/ControlsFade-Cuh5Mqe7.mjs +1 -0
  64. package/dist/web-components/{CountMenu-DBiLd3X6.mjs → CountMenu-Aoott7Hu.mjs} +1 -1
  65. package/dist/web-components/Cue-BAj92VWz.mjs +1 -0
  66. package/dist/web-components/Document-BjTWX_7P.mjs +1 -0
  67. package/dist/web-components/{DomLayers-DXbbsOVO.mjs → DomLayers-GnBlZ7yI.mjs} +1 -1
  68. package/dist/web-components/{Download-CgRv1Jio.mjs → Download-C1RNBLdn.mjs} +1 -1
  69. package/dist/web-components/{EntryBodies-DnXLIVR-.mjs → EntryBodies-BG4F8uub.mjs} +1 -1
  70. package/dist/web-components/{EntryThumbnail-BtRvqME5.mjs → EntryThumbnail-BJPQwkQw.mjs} +1 -1
  71. package/dist/web-components/{FieldPill-CmagfxvU.mjs → FieldPill-CgMPW9BB.mjs} +1 -1
  72. package/dist/web-components/{FrameAnimation-DmqYAi-M.mjs → FrameAnimation-DWd0yBuN.mjs} +1 -1
  73. package/dist/web-components/Gallery-DpJqgaft.mjs +1 -0
  74. package/dist/web-components/GlobeGlyph-CLM28n1E.mjs +1 -0
  75. package/dist/web-components/{HideToggle-aDBXi6F0.mjs → HideToggle-C4mW4-CK.mjs} +1 -1
  76. package/dist/web-components/{ImageControls-CdEwkNkw.mjs → ImageControls-B36Hng03.mjs} +1 -1
  77. package/dist/web-components/Items-BApzELFW.mjs +1 -0
  78. package/dist/web-components/Label-CRTQApU-.mjs +1 -0
  79. package/dist/web-components/LanguageChoice-B1941Wuu.mjs +1 -0
  80. package/dist/web-components/LanguageMenu-yWDzK3U0.mjs +1 -0
  81. package/dist/web-components/LightboxView-BLHI5EIj.mjs +1 -0
  82. package/dist/web-components/{ListEnd-D1Y0rzNK.mjs → ListEnd-CIiLZZzc.mjs} +1 -1
  83. package/dist/web-components/{Loaded-Bebqgt6V.mjs → Loaded-X_Pr53fq.mjs} +1 -1
  84. package/dist/web-components/LoadedCanvas-1Bi6-QtF.mjs +1 -0
  85. package/dist/web-components/LoadedMap-58bpxj_6.mjs +1 -0
  86. package/dist/web-components/{Loading-B5lpxt7E.mjs → Loading-CyoVEwax.mjs} +1 -1
  87. package/dist/web-components/{Map-DsHQLS6G.mjs → Map-2oeDIJzq.mjs} +1 -1
  88. package/dist/web-components/MapView-DX3ZLqmp.mjs +3 -0
  89. package/dist/web-components/{Markup-CQb91uB6.mjs → Markup-B2GbrisO.mjs} +1 -1
  90. package/dist/web-components/{MediaBody-CuCVF-N7.mjs → MediaBody-DZ9JgkKF.mjs} +1 -1
  91. package/dist/web-components/{MediaBody-BbipyE0n.mjs → MediaBody-eFAZIyGv.mjs} +1 -1
  92. package/dist/web-components/{NavDate-CjJTuBbs.mjs → NavDate-BwV4kPl-.mjs} +1 -1
  93. package/dist/web-components/{Navigator-BKVI3csP.mjs → Navigator-CTrfNuwj.mjs} +1 -1
  94. package/dist/web-components/{Pager-CTvxvbel.mjs → Pager-BGjj90LQ.mjs} +1 -1
  95. package/dist/web-components/PagerLayout-Ce7zW_yB.mjs +1 -0
  96. package/dist/web-components/Panel-77xi6y2C.mjs +1 -0
  97. package/dist/web-components/PanelPart-Cm9VykIu.mjs +1 -0
  98. package/dist/web-components/{PanelToggle-Dsp3JD1s.mjs → PanelToggle-Cj_FjIgS.mjs} +1 -1
  99. package/dist/web-components/{PartOfManifest-Bu5XTdcH.mjs → PartOfManifest-B0RwR4iy.mjs} +1 -1
  100. package/dist/web-components/{Pending-C7ZSt2eL.mjs → Pending-s7yYnZzR.mjs} +1 -1
  101. package/dist/web-components/{PlaceBox-PwpqCwOS.mjs → PlaceBox-pt7Vmrs1.mjs} +1 -1
  102. package/dist/web-components/{Placeholder-B_DxAE6y.mjs → Placeholder-BK-eqSCl.mjs} +1 -1
  103. package/dist/web-components/{Position-CQ7FBqd0.mjs → Position-CKsSKMgZ.mjs} +1 -1
  104. package/dist/web-components/Primitives-T7usOLie.mjs +1 -0
  105. package/dist/web-components/Provider-B2k1G-E0.mjs +1 -0
  106. package/dist/web-components/{ReadMore-0vMRgzA8.mjs → ReadMore-Cs2t9xkI.mjs} +1 -1
  107. package/dist/web-components/Root-D942bSXu.mjs +1 -0
  108. package/dist/web-components/Scene-Cwzisn4E.mjs +1 -0
  109. package/dist/web-components/{SceneView-DSUVfGQR.mjs → SceneView-_CNm8cGL.mjs} +1 -1
  110. package/dist/web-components/Search-u43mfzT8.mjs +1 -0
  111. package/dist/web-components/{Sections-BdEZZD0J.mjs → Sections-CPU5bGvk.mjs} +1 -1
  112. package/dist/web-components/{SeekMarks-ByDBrurH.mjs → SeekMarks-CnqVS-ym.mjs} +1 -1
  113. package/dist/web-components/StandaloneItems-D9Og9pdI.mjs +1 -0
  114. package/dist/web-components/{Status-CK2v5LdZ.mjs → Status-Cxev3WuC.mjs} +1 -1
  115. package/dist/web-components/{Steps-DlYRgYiS.mjs → Steps-l7_NsIBr.mjs} +1 -1
  116. package/dist/web-components/{TargetItems-B0ZkDWAH.mjs → TargetItems-nP3Oa9hh.mjs} +1 -1
  117. package/dist/web-components/Timeline-C1g1MXp5.mjs +1 -0
  118. package/dist/web-components/{Tip-BPxXnFcb.mjs → Tip-D2pR3HW4.mjs} +1 -1
  119. package/dist/web-components/Transcript-D_a9jio-.mjs +1 -0
  120. package/dist/web-components/{Transport-nQ1ytZeY.mjs → Transport-CowDRPK7.mjs} +1 -1
  121. package/dist/web-components/{Transport-Cc1VnGe1.mjs → Transport-uqpqUIKE.mjs} +1 -1
  122. package/dist/web-components/{annotation-collection-JrLc_Org.mjs → annotation-collection-d6JyHnML.mjs} +1 -1
  123. package/dist/web-components/{annotation-name-WwXE5c2m.mjs → annotation-name-BWTrB9nK.mjs} +1 -1
  124. package/dist/web-components/{annotations-content-G5YUyhp2.mjs → annotations-content-Bomfao_5.mjs} +1 -1
  125. package/dist/web-components/{body-BvY3Vpf_.mjs → body-Dfn0GJa2.mjs} +1 -1
  126. package/dist/web-components/{canvas-CaNpS96c.mjs → canvas-DHIn2DIV.mjs} +1 -1
  127. package/dist/web-components/{cloverEngine-Cpp8BjZa.mjs → cloverEngine-DDVOcZTv.mjs} +1 -1
  128. package/dist/web-components/{content-state-reader-DakKAf36.mjs → content-state-reader-CyNkhTZY.mjs} +1 -1
  129. package/dist/web-components/{controlGlyphs-bqWNGQ1-.mjs → controlGlyphs-Dymy1PkA.mjs} +1 -1
  130. package/dist/web-components/{controls-Db0929rf.mjs → controls-CIkf2UoE.mjs} +1 -1
  131. package/dist/web-components/custom-elements.json +35 -3
  132. package/dist/web-components/downloads-DCsDCcA8.mjs +1 -0
  133. package/dist/web-components/{dragToClose-D5AN98l4.mjs → dragToClose-BKcu5guw.mjs} +1 -1
  134. package/dist/web-components/{engine-B1m2m56g.mjs → engine-BhdQsvOB.mjs} +1 -1
  135. package/dist/web-components/{engines-CBm3cDwx.mjs → engines-pnfVMoUH.mjs} +1 -1
  136. package/dist/web-components/{fetchManifest-lvHWlQYu.mjs → fetchManifest-QmVIeaHo.mjs} +1 -1
  137. package/dist/web-components/{fromManifest-ZbH8cYoN.mjs → fromManifest-CvXwGGRI.mjs} +1 -1
  138. package/dist/web-components/{glyphs-BtnJwbd5.mjs → glyphs-BAh9Lia0.mjs} +1 -1
  139. package/dist/web-components/hooks-CTqjdpYl.mjs +1 -0
  140. package/dist/web-components/{image-layers-DjUA6eWF.mjs → image-layers-Dp2qOSA5.mjs} +1 -1
  141. package/dist/web-components/image-service-content-B5ICMeIO.mjs +1 -0
  142. package/dist/web-components/{imageService-B9yNXMcD.mjs → imageService-XKWMYAcG.mjs} +1 -1
  143. package/dist/web-components/index-BuoWCrun.mjs +1 -0
  144. package/dist/web-components/index.mjs +1 -1
  145. package/dist/web-components/items-8ZEJCxWU.mjs +1 -0
  146. package/dist/web-components/items-DjpIYUxD.mjs +1 -0
  147. package/dist/web-components/ja-Cg1enUhM.mjs +1 -0
  148. package/dist/web-components/label-BWHRHAY2.mjs +1 -0
  149. package/dist/web-components/layout-B3HyDCsP.mjs +1 -0
  150. package/dist/web-components/{link-BhvZNgtv.mjs → link-Mnt5GrKM.mjs} +1 -1
  151. package/dist/web-components/logo-YR9jXUE4.mjs +1 -0
  152. package/dist/web-components/{models-CIHL07o7.mjs → models-NfaX6B8u.mjs} +1 -1
  153. package/dist/web-components/{nodes-TS4tB7cC.mjs → nodes-CRrc5Svn.mjs} +1 -1
  154. package/dist/web-components/{overlayImage-B3ItMjXk.mjs → overlayImage-D7Knsh4X.mjs} +1 -1
  155. package/dist/web-components/{panel-M3PpVN7f.mjs → panel-DUMFdAc8.mjs} +1 -1
  156. package/dist/web-components/part-C_V28rvN.mjs +1 -0
  157. package/dist/web-components/{playerSurface-BGgYHT2u.mjs → playerSurface-CF5g-4Po.mjs} +1 -1
  158. package/dist/web-components/{pointer-J2gT4W9m.mjs → pointer-PJLHbbSD.mjs} +1 -1
  159. package/dist/web-components/{provider-CdJfEMUj.mjs → provider-b4id5kCa.mjs} +1 -1
  160. package/dist/web-components/{range-regions-DxSIpIVo.mjs → range-regions-DCY76ydS.mjs} +1 -1
  161. package/dist/web-components/{read-more-wCGc6ELt.mjs → read-more-UM90-AEc.mjs} +1 -1
  162. package/dist/web-components/readingLanguages-Qdn21-7Q.mjs +1 -0
  163. package/dist/web-components/rendererSurface-PZlq-wa_.mjs +22 -0
  164. package/dist/web-components/{renderers-zAtpns1S.mjs → renderers-DIHonXTq.mjs} +1 -1
  165. package/dist/web-components/resource-BlU2Ese6.mjs +1 -0
  166. package/dist/web-components/{save-file-DquBqxrS.mjs → save-file-GI0ekTmd.mjs} +1 -1
  167. package/dist/web-components/{search-ChOKTYz9.mjs → search-CHjjiXkB.mjs} +1 -1
  168. package/dist/web-components/shared-DgJ0bXca.mjs +1 -0
  169. package/dist/web-components/{show-link-Dry4M5w1.mjs → show-link-BlLkTYtm.mjs} +1 -1
  170. package/dist/web-components/{sizedImage-CjFqzhUE.mjs → sizedImage-BoGT1x5n.mjs} +1 -1
  171. package/dist/web-components/{split-88HcOLCm.mjs → split-OO6-WiG3.mjs} +1 -1
  172. package/dist/web-components/{status-BNrkhMe7.mjs → status-CSenPCO4.mjs} +1 -1
  173. package/dist/web-components/styles-Bvw9LFU7.mjs +1 -0
  174. package/dist/web-components/three.mjs +1 -1
  175. package/dist/web-components/{thumbnail-CoFd2duc.mjs → thumbnail-DYJHCrW_.mjs} +1 -1
  176. package/dist/web-components/{tip-BCClTo0G.mjs → tip-Dr1mfd4o.mjs} +1 -1
  177. package/dist/web-components/{toggle-DavvlVdF.mjs → toggle-86lqpaU9.mjs} +1 -1
  178. package/dist/web-components/{useContainerName-B_Kzx2Wp.mjs → useContainerName-BfNL6p3O.mjs} +1 -1
  179. package/dist/web-components/{useControlsVisibility-BdD2byHj.mjs → useControlsVisibility-C3LCnrb7.mjs} +1 -1
  180. package/dist/web-components/{useNearViewport-Bj8qJEA0.mjs → useNearViewport-Dk5q1rzk.mjs} +1 -1
  181. package/dist/web-components/useScrollTrack-B_yYmQDS.mjs +1 -0
  182. package/dist/web-components/viewer/{AnnotationItems-3Sf8MxRQ.mjs → AnnotationItems-BbPnS9EE.mjs} +1 -1
  183. package/dist/web-components/viewer/{AnnotationMenu-_xBnZtm1.mjs → AnnotationMenu-BGv-HimF.mjs} +1 -1
  184. package/dist/web-components/viewer/AnnotationState-uRm7bEwg.mjs +1 -0
  185. package/dist/web-components/viewer/{Annotations-24ComVk9.mjs → Annotations-_2PMmUfu.mjs} +1 -1
  186. package/dist/web-components/viewer/Annotations-reaO1ILe.mjs +2 -0
  187. package/dist/web-components/viewer/{Canvas2DBackend-DPWYD9ST.mjs → Canvas2DBackend-Dru1ImJh.mjs} +1 -1
  188. package/dist/web-components/viewer/CaptionDetails-3OlEaKmX.mjs +1 -0
  189. package/dist/web-components/viewer/{ChaptersMenu-C5J0d8Ck.mjs → ChaptersMenu-kchuXDZy.mjs} +1 -1
  190. package/dist/web-components/viewer/{ChoiceMenu-B8iukYiR.mjs → ChoiceMenu-C8pEoSC6.mjs} +1 -1
  191. package/dist/web-components/viewer/{Collection-CPVQ3JtI.mjs → Collection-B4LN_80C.mjs} +1 -1
  192. package/dist/web-components/viewer/{Connected-x3v9xr7x.mjs → Connected-80hCJuhg.mjs} +1 -1
  193. package/dist/web-components/viewer/{Connected-D5_bZzr5.mjs → Connected-CzPY2rgu.mjs} +1 -1
  194. package/dist/web-components/viewer/{Contents-Ma7oDW1R.mjs → Contents-D4jw_lGe.mjs} +1 -1
  195. package/dist/web-components/viewer/{ControlMenu-D2HokCqd.mjs → ControlMenu-C3Jh10iR.mjs} +1 -1
  196. package/dist/web-components/viewer/ControlsFade-BKkJ95B5.mjs +1 -0
  197. package/dist/web-components/viewer/{CountMenu-BnDN2b0n.mjs → CountMenu-Blz1oHgs.mjs} +1 -1
  198. package/dist/web-components/viewer/Cue-BnC9XuZp.mjs +1 -0
  199. package/dist/web-components/viewer/Document-BG0F97nL.mjs +1 -0
  200. package/dist/web-components/viewer/{DomLayers-BW2A4z82.mjs → DomLayers-BL6vNcmI.mjs} +1 -1
  201. package/dist/web-components/viewer/{Download-Cc_NA7QN.mjs → Download-B0BD_SzR.mjs} +1 -1
  202. package/dist/web-components/viewer/{EntryBodies-Bz69SWZh.mjs → EntryBodies-Cbmr-Eg4.mjs} +1 -1
  203. package/dist/web-components/viewer/{EntryThumbnail-C8cUA5qc.mjs → EntryThumbnail-DAdEyIuL.mjs} +1 -1
  204. package/dist/web-components/viewer/{FieldPill-BzKvMF-K.mjs → FieldPill-DNL96sDW.mjs} +1 -1
  205. package/dist/web-components/viewer/{FrameAnimation-DiQgfgri.mjs → FrameAnimation-BO3QVSUw.mjs} +1 -1
  206. package/dist/web-components/viewer/Gallery-DN7ajF4i.mjs +1 -0
  207. package/dist/web-components/viewer/GlobeGlyph-B-Wd0AkW.mjs +1 -0
  208. package/dist/web-components/viewer/{HideToggle-jg311sUK.mjs → HideToggle-DH0u1wFC.mjs} +1 -1
  209. package/dist/web-components/viewer/{ImageControls-8ZIWLAkf.mjs → ImageControls-Lz-ESk1X.mjs} +1 -1
  210. package/dist/web-components/viewer/LanguageChoice-BkQkSsPE.mjs +1 -0
  211. package/dist/web-components/viewer/LanguageMenu-gIJHQiBc.mjs +1 -0
  212. package/dist/web-components/viewer/LightboxView-D066VR5m.mjs +1 -0
  213. package/dist/web-components/viewer/{ListEnd-JjGQ_q6c.mjs → ListEnd-D4nNouKZ.mjs} +1 -1
  214. package/dist/web-components/viewer/{MapView-tAZ4vINr.mjs → MapView-C_8iciAK.mjs} +2 -2
  215. package/dist/web-components/viewer/{MediaBody-Da60tZIj.mjs → MediaBody-BgBDbfHg.mjs} +1 -1
  216. package/dist/web-components/viewer/{MediaBody-CQAJJpuz.mjs → MediaBody-D4hiLqhm.mjs} +1 -1
  217. package/dist/web-components/viewer/{NavDate-B7T2iPfP.mjs → NavDate-BMVT6UwB.mjs} +1 -1
  218. package/dist/web-components/viewer/{Navigator-sEfTvK-l.mjs → Navigator-DbBBbDZn.mjs} +1 -1
  219. package/dist/web-components/viewer/PagerLayout-D771pC5E.mjs +1 -0
  220. package/dist/web-components/viewer/PanelPart-2H7jd6PS.mjs +1 -0
  221. package/dist/web-components/viewer/{PartOfManifest-BYgk9r1j.mjs → PartOfManifest-BMaH_tsn.mjs} +1 -1
  222. package/dist/web-components/viewer/{PlaceBox-BBtsMTsl.mjs → PlaceBox-OytRM9_s.mjs} +1 -1
  223. package/dist/web-components/viewer/{Placeholder-5focqckW.mjs → Placeholder-BWuq47Sw.mjs} +1 -1
  224. package/dist/web-components/viewer/Search-Bmz7mUbA.mjs +1 -0
  225. package/dist/web-components/viewer/{SeekMarks-CUyvbMfC.mjs → SeekMarks-CAsMUj2N.mjs} +1 -1
  226. package/dist/web-components/viewer/{StandaloneItems-DsoMdwWS.mjs → StandaloneItems-BCHhR9sF.mjs} +1 -1
  227. package/dist/web-components/viewer/{Steps-zpuoH0K0.mjs → Steps-BDT2W9QN.mjs} +1 -1
  228. package/dist/web-components/viewer/{TargetItems-DIKBor9X.mjs → TargetItems-CkZbD8GE.mjs} +1 -1
  229. package/dist/web-components/viewer/Transcript-BbFXEJSc.mjs +1 -0
  230. package/dist/web-components/viewer/{Transport-BM3IMXDW.mjs → Transport-CI5UkA3K.mjs} +1 -1
  231. package/dist/web-components/viewer/{Transport-DMnPpTsQ.mjs → Transport-PgBpf33S.mjs} +1 -1
  232. package/dist/web-components/viewer/{annotation-collection-C_9c9NPs.mjs → annotation-collection-l4zuf56A.mjs} +1 -1
  233. package/dist/web-components/viewer/{annotation-name-jt1y3erg.mjs → annotation-name-CRl0w7NR.mjs} +1 -1
  234. package/dist/web-components/viewer/annotations-content-CYjPRTZn.mjs +1 -0
  235. package/dist/web-components/viewer/{cloverEngine-CVyaltw7.mjs → cloverEngine-2b_guC4P.mjs} +2 -2
  236. package/dist/web-components/viewer/{content-state-reader-DIcY4zWj.mjs → content-state-reader-Cm-rvusT.mjs} +1 -1
  237. package/dist/web-components/viewer/{dragToClose-D2h8gIpa.mjs → dragToClose-DXXIWV62.mjs} +1 -1
  238. package/dist/web-components/viewer/{fetchManifest-C66Fk39V.mjs → fetchManifest-DorkDXGC.mjs} +1 -1
  239. package/dist/web-components/viewer/{host-Fl21T-Pt.mjs → host-DscGC2S0.mjs} +1 -1
  240. package/dist/web-components/viewer/{image-layers-CpDOoRh9.mjs → image-layers-CZ9-efD2.mjs} +1 -1
  241. package/dist/web-components/viewer/image-service-content-C60w8IZm.mjs +1 -0
  242. package/dist/web-components/viewer/index.mjs +1 -1
  243. package/dist/web-components/viewer/{link-DlX6OdhG.mjs → link-CysSctMX.mjs} +1 -1
  244. package/dist/web-components/viewer/overlayImage-CwPnVnIi.mjs +1 -0
  245. package/dist/web-components/viewer/{range-regions--YB9ll1N.mjs → range-regions-C7ZBtSyb.mjs} +1 -1
  246. package/dist/web-components/viewer/{renderers-zvRp3xYJ.mjs → renderers-D4wJiQYv.mjs} +1 -1
  247. package/dist/web-components/viewer/{save-file-83yWcPHX.mjs → save-file-uqsNOVPU.mjs} +1 -1
  248. package/dist/web-components/viewer/{search-DDXsrZz3.mjs → search-CWuD5EZA.mjs} +1 -1
  249. package/dist/web-components/viewer/styles-BjjJM8OS.mjs +1 -0
  250. package/dist/web-components/viewer/{useControlsVisibility-CudUJBCj.mjs → useControlsVisibility-KTxa_3yJ.mjs} +1 -1
  251. package/dist/web-components/viewer/viewer-C3d_TgAI.mjs +29 -0
  252. package/dist/web-components/viewer/{vtt-D1xyC48J.mjs → vtt-DqtJ20x0.mjs} +1 -1
  253. package/dist/web-components/viewer-BoyWG64n.mjs +1 -0
  254. package/dist/web-components/{vtt-ChAUl4lm.mjs → vtt-BNuRzGap.mjs} +1 -1
  255. package/dist/web-components/zh-Hans-DnYm6PWu.mjs +1 -0
  256. package/dist/web-components/zh-Hant-DsxnuLPZ.mjs +1 -0
  257. package/package.json +1 -1
  258. package/dist/web-components/About-rhhglI1Z.mjs +0 -1
  259. package/dist/web-components/AnnotationItems-9o4vZn9M.mjs +0 -1
  260. package/dist/web-components/AnnotationState-BCfjI6kC.mjs +0 -1
  261. package/dist/web-components/Annotations-bAuL-Vo6.mjs +0 -2
  262. package/dist/web-components/ControlsFade-qs_zu-DZ.mjs +0 -1
  263. package/dist/web-components/Cue-CrlByfoX.mjs +0 -1
  264. package/dist/web-components/Document-C3K-CXHu.mjs +0 -1
  265. package/dist/web-components/Gallery-DMNATgzf.mjs +0 -1
  266. package/dist/web-components/Items-xeEzg7uu.mjs +0 -1
  267. package/dist/web-components/Label-7SZqCiYh.mjs +0 -1
  268. package/dist/web-components/LanguageChoice-DrIQjsPP.mjs +0 -1
  269. package/dist/web-components/LightboxView-BzxRQK6r.mjs +0 -1
  270. package/dist/web-components/LoadedCanvas-8To8LkUE.mjs +0 -1
  271. package/dist/web-components/LoadedMap-BmF3Gmnw.mjs +0 -1
  272. package/dist/web-components/MapView-DcLIazmJ.mjs +0 -3
  273. package/dist/web-components/PagerLayout-DR6V9wwv.mjs +0 -1
  274. package/dist/web-components/Panel-BBRkfdof.mjs +0 -1
  275. package/dist/web-components/PanelPart-Cdbsnr8P.mjs +0 -1
  276. package/dist/web-components/Primitives-D5lVsBs8.mjs +0 -1
  277. package/dist/web-components/Provider-B9X74RHz.mjs +0 -1
  278. package/dist/web-components/Root-COIMTFHh.mjs +0 -1
  279. package/dist/web-components/Scene-DjUgqzXR.mjs +0 -1
  280. package/dist/web-components/Search-DOitIwis.mjs +0 -1
  281. package/dist/web-components/StandaloneItems-DATV9XoT.mjs +0 -1
  282. package/dist/web-components/Timeline-D-FevrUe.mjs +0 -1
  283. package/dist/web-components/Transcript-BLm9tljk.mjs +0 -1
  284. package/dist/web-components/downloads-CGkM4OSO.mjs +0 -1
  285. package/dist/web-components/hooks-BLpTDu28.mjs +0 -1
  286. package/dist/web-components/index-2F1l5TLi.mjs +0 -1
  287. package/dist/web-components/items-C56FfpBX.mjs +0 -1
  288. package/dist/web-components/items-DlG6IYqm.mjs +0 -1
  289. package/dist/web-components/label-DJ-Udq1e.mjs +0 -1
  290. package/dist/web-components/layout-Dh0myod-.mjs +0 -1
  291. package/dist/web-components/logo-k93ZgyqF.mjs +0 -1
  292. package/dist/web-components/part-Df1Vr2Ss.mjs +0 -1
  293. package/dist/web-components/readingLanguages-DmZ8CHoc.mjs +0 -1
  294. package/dist/web-components/rendererSurface-Bk7SHYws.mjs +0 -22
  295. package/dist/web-components/resource-Cb3AnAXL.mjs +0 -1
  296. package/dist/web-components/shared-D4j4IirO.mjs +0 -1
  297. package/dist/web-components/styles-Ca564vB9.mjs +0 -1
  298. package/dist/web-components/useScrollTrack-DBIW4pCJ.mjs +0 -1
  299. package/dist/web-components/viewer/AnnotationState-o4goI6T-.mjs +0 -1
  300. package/dist/web-components/viewer/Annotations-CJamLUnL.mjs +0 -2
  301. package/dist/web-components/viewer/CaptionDetails-DNPq32gk.mjs +0 -1
  302. package/dist/web-components/viewer/ControlsFade-JoRgQt8U.mjs +0 -1
  303. package/dist/web-components/viewer/Cue-FHw5d8zO.mjs +0 -1
  304. package/dist/web-components/viewer/Document-DiXiOkPn.mjs +0 -1
  305. package/dist/web-components/viewer/Gallery-BYmzAEuZ.mjs +0 -1
  306. package/dist/web-components/viewer/LanguageChoice-BXXMBe-A.mjs +0 -1
  307. package/dist/web-components/viewer/LightboxView-DnN0fkeg.mjs +0 -1
  308. package/dist/web-components/viewer/PagerLayout-B4C72jTV.mjs +0 -1
  309. package/dist/web-components/viewer/PanelPart-Di406l-a.mjs +0 -1
  310. package/dist/web-components/viewer/Search-DbHlUxOS.mjs +0 -1
  311. package/dist/web-components/viewer/Transcript-B_puRtfb.mjs +0 -1
  312. package/dist/web-components/viewer/annotations-content-Dg8h7vJX.mjs +0 -1
  313. package/dist/web-components/viewer/overlayImage-yGXMVHgX.mjs +0 -1
  314. package/dist/web-components/viewer/styles-04jB_4IT.mjs +0 -1
  315. package/dist/web-components/viewer/viewer-0aUYzmQj.mjs +0 -29
  316. package/dist/web-components/viewer-B_5rFgy5.mjs +0 -1
@@ -183,8 +183,9 @@ export interface ContentStateOutput {
183
183
  * state (JSON or base64url). The resource may be a Manifest, a Collection (its first
184
184
  * Manifest is shown), a lone Canvas (its `partOf` Manifest, or a Manifest made around
185
185
  * it), or annotations, an AnnotationPage or AnnotationCollection (the Manifest their first
186
- * annotation's Canvas is `partOf`, at that Canvas). Everything is fetched once, with the
187
- * request settings, and upgraded to Presentation 4.
186
+ * annotation's Canvas is `partOf`, at that Canvas). It may also be a IIIF Image service,
187
+ * its `info.json` or its base URI, shown as the one image it is (`imageServiceContent`).
188
+ * Everything is fetched once, with the request settings, and upgraded to Presentation 4.
188
189
  */
189
190
  export type IIIFContent = string | Record<string, unknown>;
190
191
  /**
@@ -372,6 +373,11 @@ export interface CloverCanvasOptions {
372
373
  maxZoomPixelRatio?: number;
373
374
  /** Smallest zoom, as a fraction of the home zoom. Default 0.9. */
374
375
  minZoomImageRatio?: number;
376
+ /**
377
+ * Whether home may enlarge the image past `maxZoomPixelRatio` to fill the box. False,
378
+ * home stops at that zoom and centers the image, smaller than the box. Default true.
379
+ */
380
+ upscale?: boolean;
375
381
  /** Seconds for an animation to close most of its distance. 0 disables easing. */
376
382
  animationTime?: number;
377
383
  /**
@@ -462,6 +468,12 @@ export interface ItemsProps extends Omit<React.HTMLAttributes<HTMLElement>, "onS
462
468
  * under the one above it, still in reading order, left to right.
463
469
  */
464
470
  layout?: ItemsLayout;
471
+ /**
472
+ * The slider's direction: a row (`horizontal`), or a column (`vertical`) that fills
473
+ * the height of what holds it, as a filmstrip beside the Body, its pictures as wide as
474
+ * the column. Default `"horizontal"`.
475
+ */
476
+ orientation?: "horizontal" | "vertical";
465
477
  /**
466
478
  * The line under an item's label, where it has one (a Collection's members do): its
467
479
  * `summary` (the default), its `navDate`, or `none`. Default `"summary"`.
@@ -545,7 +557,7 @@ export type PanelSection = "about" | "targets" | "collection" | "contents" | "se
545
557
  /** How the sections are laid out. */
546
558
  export type SectionsLayout = "tabs" | "accordion";
547
559
  /**
548
- * What a page calls a section, in place of Clover's own word for it: its words, taken to
560
+ * What a page calls a section, in place of its word in Clover's interface language: its words, taken to
549
561
  * be in the page's language, or its words by language tag, one of which the tab carries
550
562
  * as its `lang` where it is not the page's (WCAG 3.1.2).
551
563
  */
@@ -601,6 +613,13 @@ export interface PanelProps extends Omit<React.HTMLAttributes<HTMLElement>, "def
601
613
  * leaves the choice out, and the Root reads in its `language`, else the reader's.
602
614
  */
603
615
  languages?: boolean;
616
+ /**
617
+ * Whether About's language toggle also offers Clover's interface languages (its
618
+ * control labels, section titles and announcements) that the resource has none of: the
619
+ * visitor's and the site's, where they differ, one choice for the page. Default
620
+ * `true`; `false` leaves them out, and Clover speaks the visitor's.
621
+ */
622
+ interfaceLanguages?: boolean;
604
623
  /**
605
624
  * Which of the default sections the panel may have, in Clover's own order: with
606
625
  * `["contents", "search"]` it has those two and no About. Each still shows only where
@@ -609,7 +628,7 @@ export interface PanelProps extends Omit<React.HTMLAttributes<HTMLElement>, "def
609
628
  */
610
629
  sections?: readonly PanelSection[];
611
630
  /**
612
- * What a default section's tab or heading says, in place of Clover's own word for it:
631
+ * What a default section's tab or heading says, in place of its word in Clover's interface language:
613
632
  * `{ annotations: "Chapters" }`, or `{ annotations: { en: "Chapters", de: "Kapitel" } }`
614
633
  * to say it in several, read in the one Clover speaks and marked with its language
615
634
  * where that is not the page's (WCAG 3.1.2). A `Tab` of your own says it in `label`.
@@ -654,7 +673,7 @@ export type DefaultProps = Omit<RootProps, "children"> & {
654
673
  */
655
674
  panelSections?: readonly PanelSection[];
656
675
  /**
657
- * What a panel section's tab or heading says, in place of Clover's own word for it:
676
+ * What a panel section's tab or heading says, in place of its word in Clover's interface language:
658
677
  * `{ annotations: "Chapters" }`, or a word by language tag to say it in several (the
659
678
  * Panel's `labels`).
660
679
  */
@@ -666,6 +685,13 @@ export type DefaultProps = Omit<RootProps, "children"> & {
666
685
  * it says of itself comes in several (the Panel's `languages`). Default `true`.
667
686
  */
668
687
  languages?: boolean;
688
+ /**
689
+ * Default, Document and Gallery: whether the panel's language toggle, beside its About
690
+ * heading, also offers Clover's interface languages (its control labels, section
691
+ * titles and announcements) that the resource has none of, the visitor's and the
692
+ * site's, where they differ (the Panel's `interfaceLanguages`). Default `true`.
693
+ */
694
+ interfaceLanguages?: boolean;
669
695
  /** The thumbnails under the Body: a layout, or `false` for none. Default `slider`. */
670
696
  items?: Exclude<ItemsLayout, "pager"> | false;
671
697
  /**
@@ -706,7 +732,7 @@ export type DefaultProps = Omit<RootProps, "children"> & {
706
732
  * uncovered: a click there, Escape or the panel's close button puts it away. Size it with
707
733
  * `--clover-body-height`.
708
734
  */
709
- export declare function Default({ className, header, headingLevel, panel, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, items, singleItem, storageKey, fill, collapseControls, canvasOptions, ...root }: DefaultProps): React.JSX.Element;
735
+ export declare function Default({ className, header, headingLevel, panel, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, interfaceLanguages, items, singleItem, storageKey, fill, collapseControls, canvasOptions, ...root }: DefaultProps): React.JSX.Element;
710
736
  export type DocumentProps = Omit<RootProps, "children"> & {
711
737
  /**
712
738
  * Whether the page thumbnails start shown beside the page. Default `true`. On a phone,
@@ -736,7 +762,7 @@ export type DocumentProps = Omit<RootProps, "children"> & {
736
762
  */
737
763
  panelSections?: readonly PanelSection[];
738
764
  /**
739
- * What a panel section's tab or heading says, in place of Clover's own word for it:
765
+ * What a panel section's tab or heading says, in place of its word in Clover's interface language:
740
766
  * `{ annotations: "Chapters" }`, or a word by language tag to say it in several (the
741
767
  * Panel's `labels`).
742
768
  */
@@ -748,6 +774,13 @@ export type DocumentProps = Omit<RootProps, "children"> & {
748
774
  * it says of itself comes in several (the Panel's `languages`). Default `true`.
749
775
  */
750
776
  languages?: boolean;
777
+ /**
778
+ * Default, Document and Gallery: whether the panel's language toggle, beside its About
779
+ * heading, also offers Clover's interface languages (its control labels, section
780
+ * titles and announcements) that the resource has none of, the visitor's and the
781
+ * site's, where they differ (the Panel's `interfaceLanguages`). Default `true`.
782
+ */
783
+ interfaceLanguages?: boolean;
751
784
  /**
752
785
  * The title's heading level, to fit the outline of the page around the layout (under
753
786
  * an `h2`, 3). The panel's sections, and the downloads' groups, are a level below
@@ -777,7 +810,7 @@ export type DocumentProps = Omit<RootProps, "children"> & {
777
810
  * where there is room for both, and slides out over the page where there is not. Size
778
811
  * it with `--clover-template-document-height`.
779
812
  */
780
- export declare function Document({ className, defaultSidebarOpen, singleItem, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, headingLevel, storageKey, collapseControls, canvasOptions, ...root }: DocumentProps): React.JSX.Element;
813
+ export declare function Document({ className, defaultSidebarOpen, singleItem, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, interfaceLanguages, headingLevel, storageKey, collapseControls, canvasOptions, ...root }: DocumentProps): React.JSX.Element;
781
814
  export type GalleryProps = Omit<RootProps, "children"> & {
782
815
  /** The size of a grid cell. Default `10rem`, through `--clover-items-size`. */
783
816
  size?: string;
@@ -832,7 +865,7 @@ export type GalleryProps = Omit<RootProps, "children"> & {
832
865
  */
833
866
  panelSections?: readonly PanelSection[];
834
867
  /**
835
- * What a panel section's tab or heading says, in place of Clover's own word for it:
868
+ * What a panel section's tab or heading says, in place of its word in Clover's interface language:
836
869
  * `{ annotations: "Chapters" }`, or a word by language tag to say it in several (the
837
870
  * Panel's `labels`).
838
871
  */
@@ -844,6 +877,13 @@ export type GalleryProps = Omit<RootProps, "children"> & {
844
877
  * it says of itself comes in several (the Panel's `languages`). Default `true`.
845
878
  */
846
879
  languages?: boolean;
880
+ /**
881
+ * Default, Document and Gallery: whether the panel's language toggle, beside its About
882
+ * heading, also offers Clover's interface languages (its control labels, section
883
+ * titles and announcements) that the resource has none of, the visitor's and the
884
+ * site's, where they differ (the Panel's `interfaceLanguages`). Default `true`.
885
+ */
886
+ interfaceLanguages?: boolean;
847
887
  /**
848
888
  * Where the panel's width is remembered once the reader drags its bar
849
889
  * (`localStorage`). Default `"clover-template-gallery"`; `false` forgets it.
@@ -870,7 +910,7 @@ export type GalleryProps = Omit<RootProps, "children"> & {
870
910
  * shows that Manifest in the lightbox. Escape, the close button, or a press outside
871
911
  * closes it, and focus returns to the cell.
872
912
  */
873
- export declare function Gallery({ className, size, height, gap, items, secondary, summary, lightboxItems, panel, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, storageKey, headingLevel, collapseControls, canvasOptions, style, ...root }: GalleryProps): React.JSX.Element;
913
+ export declare function Gallery({ className, size, height, gap, items, secondary, summary, lightboxItems, panel, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, interfaceLanguages, storageKey, headingLevel, collapseControls, canvasOptions, style, ...root }: GalleryProps): React.JSX.Element;
874
914
  /**
875
915
  * Focus that follows a control as it moves. A toggle drawn in one place while its pane is
876
916
  * open and in another while it is shut is a new element after every press, and the one
@@ -1105,7 +1145,7 @@ export interface LightboxProps {
1105
1145
  */
1106
1146
  panelSections?: readonly PanelSection[];
1107
1147
  /**
1108
- * What a panel section's tab or heading says, in place of Clover's own word for it:
1148
+ * What a panel section's tab or heading says, in place of its word in Clover's interface language:
1109
1149
  * `{ annotations: "Chapters" }`, or a word by language tag to say it in several (the
1110
1150
  * Panel's `labels`).
1111
1151
  */
@@ -1114,6 +1154,8 @@ export interface LightboxProps {
1114
1154
  download?: boolean;
1115
1155
  /** The languages to read the resource in, beside the panel's About heading. Default `true`. */
1116
1156
  languages?: boolean;
1157
+ /** Clover's interface languages in the panel's language toggle. Default `true`. */
1158
+ interfaceLanguages?: boolean;
1117
1159
  /** Where the panel's width is remembered once dragged; `false` forgets it. */
1118
1160
  storageKey?: string | false;
1119
1161
  /** The Body's `collapseControls`: when the view's controls collapse behind one button. */
@@ -20,6 +20,7 @@ function LightboxView({
20
20
  panelLabels,
21
21
  download = true,
22
22
  languages = true,
23
+ interfaceLanguages = true,
23
24
  storageKey,
24
25
  collapseControls,
25
26
  canvasOptions,
@@ -116,6 +117,7 @@ function LightboxView({
116
117
  labels: panelLabels,
117
118
  download,
118
119
  languages,
120
+ interfaceLanguages,
119
121
  headingLevel: (headingLevel ?? 3) + 1
120
122
  }
121
123
  )
@@ -0,0 +1,26 @@
1
+ "use client";
2
+ import { jsxs, jsx } from "react/jsx-runtime";
3
+ function GlobeGlyph() {
4
+ return /* @__PURE__ */ jsxs(
5
+ "svg",
6
+ {
7
+ xmlns: "http://www.w3.org/2000/svg",
8
+ viewBox: "0 0 512 512",
9
+ "aria-hidden": "true",
10
+ focusable: "false",
11
+ fill: "none",
12
+ stroke: "currentColor",
13
+ strokeWidth: "48",
14
+ strokeLinecap: "round",
15
+ strokeLinejoin: "round",
16
+ children: [
17
+ /* @__PURE__ */ jsx("circle", { cx: "256", cy: "256", r: "200" }),
18
+ /* @__PURE__ */ jsx("ellipse", { cx: "256", cy: "256", rx: "84", ry: "200" }),
19
+ /* @__PURE__ */ jsx("path", { d: "M56 256h400M88 160h336M88 352h336" })
20
+ ]
21
+ }
22
+ );
23
+ }
24
+ export {
25
+ GlobeGlyph
26
+ };
@@ -1,5 +1,6 @@
1
1
  "use client";
2
- import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
+ import { Suspense, lazy, useState, useRef, useLayoutEffect } from "react";
3
4
  import { useCloverTranslation } from "../i18n/useCloverTranslation.mjs";
4
5
  import { autonym } from "../i18n/autonym.mjs";
5
6
  import { languageCode } from "../i18n/languageCode.mjs";
@@ -8,36 +9,102 @@ import { useContainerName } from "../i18n/useContainerName.mjs";
8
9
  import { useUniqueId } from "./useUniqueId.mjs";
9
10
  import { visuallyHidden } from "./visuallyHidden.mjs";
10
11
  import { languageProps } from "../i18n/direction.mjs";
12
+ import { GlobeGlyph } from "./GlobeGlyph.mjs";
13
+ const LanguageMenu = lazy(() => import("./LanguageMenu.mjs"));
14
+ const ROW_MOST = 5;
15
+ function naturalEnd(label, rtl) {
16
+ const was = label.style.whiteSpace;
17
+ label.style.whiteSpace = "nowrap";
18
+ const rect = label.getBoundingClientRect();
19
+ label.style.whiteSpace = was;
20
+ return rtl ? rect.left : rect.right;
21
+ }
22
+ function useFolded(fit, count, shown) {
23
+ const [element, place] = useState(null);
24
+ const width = useRef(0);
25
+ const [folded, setFolded] = useState(false);
26
+ const [measured, setMeasured] = useState(false);
27
+ const [shownWas, setShownWas] = useState(shown);
28
+ if (shownWas !== shown) {
29
+ setShownWas(shown);
30
+ setFolded(false);
31
+ }
32
+ useLayoutEffect(() => {
33
+ const found = element && (fit == null ? void 0 : fit(element));
34
+ if (element) setMeasured(!!found);
35
+ if (!element || !found) return;
36
+ const { label, box } = found;
37
+ const check = () => {
38
+ const rtl = getComputedStyle(box).direction === "rtl";
39
+ const rect = box.getBoundingClientRect();
40
+ if (!folded) width.current = rect.width;
41
+ const end = rtl ? rect.left : rect.right;
42
+ const start = rtl ? end + width.current : end - width.current;
43
+ const room = parseFloat(getComputedStyle(box).paddingInlineStart) || 0;
44
+ const words = naturalEnd(label, rtl);
45
+ const crosses = rtl ? words < start + room : words > start - room;
46
+ if (crosses !== folded) setFolded(crosses);
47
+ };
48
+ check();
49
+ if (typeof ResizeObserver === "undefined") return;
50
+ const observer = new ResizeObserver(check);
51
+ observer.observe(label);
52
+ if (label.parentElement) observer.observe(label.parentElement);
53
+ return () => observer.disconnect();
54
+ }, [fit, folded, count, element]);
55
+ return { place, folded: measured ? folded : count > ROW_MOST };
56
+ }
11
57
  function LanguageChoice({
12
58
  languages,
13
59
  chosen,
14
60
  onChange,
15
61
  nameKey,
16
- part
62
+ part,
63
+ fit
17
64
  }) {
18
65
  const { t, langOf } = useCloverTranslation();
19
66
  const id = useUniqueId();
20
67
  const name = useContainerName(t(nameKey), langOf(nameKey));
68
+ const { place, folded } = useFolded(
69
+ fit,
70
+ languages.length,
71
+ languages.join(" ")
72
+ );
73
+ if (folded)
74
+ return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
75
+ LanguageMenu,
76
+ {
77
+ languages,
78
+ chosen,
79
+ onChange,
80
+ nameKey,
81
+ part,
82
+ placeRef: place
83
+ }
84
+ ) });
21
85
  return /* @__PURE__ */ jsxs(Fragment, { children: [
22
86
  name.node,
23
- /* @__PURE__ */ jsx("fieldset", { ...name.props, className: `${part}-languages`, children: languages.map((tag) => {
24
- const own = autonym(tag);
25
- return /* @__PURE__ */ jsxs("label", { className: `${part}-language`, children: [
26
- /* @__PURE__ */ jsx(
27
- "input",
28
- {
29
- type: "radio",
30
- name: `${id}-language`,
31
- checked: tag === chosen,
32
- onChange: () => onChange(tag)
33
- }
34
- ),
35
- /* @__PURE__ */ jsx("span", { className: `${part}-language-code`, children: languageCode(tag) }),
36
- " ",
37
- /* @__PURE__ */ jsx("span", { style: visuallyHidden, ...languageProps(tag), children: own }),
38
- /* @__PURE__ */ jsx(Tip, { label: own, lang: tag })
39
- ] }, tag);
40
- }) })
87
+ /* @__PURE__ */ jsxs("fieldset", { ...name.props, className: `${part}-languages`, ref: place, children: [
88
+ /* @__PURE__ */ jsx("span", { className: "clover-languages-glyph", "aria-hidden": "true", children: /* @__PURE__ */ jsx(GlobeGlyph, {}) }),
89
+ languages.map((tag) => {
90
+ const own = autonym(tag);
91
+ return /* @__PURE__ */ jsxs("label", { className: `${part}-language`, children: [
92
+ /* @__PURE__ */ jsx(
93
+ "input",
94
+ {
95
+ type: "radio",
96
+ name: `${id}-language`,
97
+ checked: tag === chosen,
98
+ onChange: () => onChange(tag)
99
+ }
100
+ ),
101
+ /* @__PURE__ */ jsx("span", { className: `${part}-language-code`, children: languageCode(tag) }),
102
+ " ",
103
+ /* @__PURE__ */ jsx("span", { style: visuallyHidden, ...languageProps(tag), children: own }),
104
+ /* @__PURE__ */ jsx(Tip, { label: own, lang: tag })
105
+ ] }, tag);
106
+ })
107
+ ] })
41
108
  ] });
42
109
  }
43
110
  export {
@@ -0,0 +1,94 @@
1
+ "use client";
2
+ import { jsxs, jsx } from "react/jsx-runtime";
3
+ import { useState, useCallback } from "react";
4
+ import ControlMenu from "../components/Canvas/ControlMenu.mjs";
5
+ import { autonym } from "../i18n/autonym.mjs";
6
+ import { languageProps } from "../i18n/direction.mjs";
7
+ import { languageCode } from "../i18n/languageCode.mjs";
8
+ import { useCloverTranslation } from "../i18n/useCloverTranslation.mjs";
9
+ import { Chevron } from "./Chevron.mjs";
10
+ import { GlobeGlyph } from "./GlobeGlyph.mjs";
11
+ import { Tip } from "./Tip.mjs";
12
+ import { useUniqueId } from "./useUniqueId.mjs";
13
+ function LanguageMenu({
14
+ languages,
15
+ chosen,
16
+ onChange,
17
+ nameKey,
18
+ part,
19
+ placeRef
20
+ }) {
21
+ const { t, langOf } = useCloverTranslation();
22
+ const [open, setOpen] = useState(false);
23
+ const id = useUniqueId();
24
+ const button = `${id}-languages`;
25
+ const close = useCallback(
26
+ (restoreFocus) => {
27
+ var _a;
28
+ setOpen(false);
29
+ if (restoreFocus) (_a = document.getElementById(button)) == null ? void 0 : _a.focus();
30
+ },
31
+ [button]
32
+ );
33
+ const name = t(nameKey);
34
+ const nameLang = langOf(nameKey);
35
+ return /* @__PURE__ */ jsxs(
36
+ "span",
37
+ {
38
+ ref: placeRef,
39
+ className: `${part}-languages clover-languages-folded`,
40
+ onBlur: (event) => {
41
+ const next = event.relatedTarget;
42
+ if (open && next && !event.currentTarget.contains(next)) setOpen(false);
43
+ },
44
+ children: [
45
+ /* @__PURE__ */ jsxs(
46
+ "button",
47
+ {
48
+ type: "button",
49
+ id: button,
50
+ className: "clover-languages-button",
51
+ "aria-label": `${languageCode(chosen)}, ${name}`,
52
+ ...languageProps(nameLang),
53
+ "aria-expanded": open,
54
+ "aria-controls": open ? `${button}-menu` : void 0,
55
+ onClick: () => setOpen((was) => !was),
56
+ children: [
57
+ /* @__PURE__ */ jsx(GlobeGlyph, {}),
58
+ /* @__PURE__ */ jsx("span", { className: "clover-languages-code", "aria-hidden": "true", children: languageCode(chosen) }),
59
+ /* @__PURE__ */ jsx(Chevron, { open, className: "clover-languages-caret" }),
60
+ /* @__PURE__ */ jsx(Tip, { label: name, lang: nameLang })
61
+ ]
62
+ }
63
+ ),
64
+ open && /* @__PURE__ */ jsx(
65
+ ControlMenu,
66
+ {
67
+ id: `${button}-menu`,
68
+ triggerId: button,
69
+ onClose: close,
70
+ className: "clover-languages-menu",
71
+ children: /* @__PURE__ */ jsxs("fieldset", { children: [
72
+ /* @__PURE__ */ jsx("legend", { ...languageProps(nameLang), children: name }),
73
+ languages.map((tag) => /* @__PURE__ */ jsxs("label", { className: "clover-languages-option", children: [
74
+ /* @__PURE__ */ jsx(
75
+ "input",
76
+ {
77
+ type: "radio",
78
+ name: `${button}-language`,
79
+ checked: tag === chosen,
80
+ onChange: () => onChange(tag)
81
+ }
82
+ ),
83
+ /* @__PURE__ */ jsx("span", { ...languageProps(tag), children: autonym(tag) })
84
+ ] }, tag))
85
+ ] })
86
+ }
87
+ )
88
+ ]
89
+ }
90
+ );
91
+ }
92
+ export {
93
+ LanguageMenu as default
94
+ };
@@ -8,30 +8,33 @@ const prefersReducedMotion = () => {
8
8
  function useScrollTrack({
9
9
  align = "start",
10
10
  dragFree = false,
11
- itemCount = 0
11
+ itemCount = 0,
12
+ axis = "x"
12
13
  } = {}) {
14
+ const down = axis === "y";
13
15
  const [viewport, setViewport] = useState(null);
14
16
  const [canScrollPrev, setCanScrollPrev] = useState(false);
15
17
  const [canScrollNext, setCanScrollNext] = useState(false);
16
18
  const alignment = useRef(align);
17
19
  alignment.current = align;
18
- const snap = dragFree ? "none" : "x mandatory";
20
+ const snap = dragFree ? "none" : `${axis} mandatory`;
19
21
  const measure = useCallback(() => {
20
22
  if (!viewport) return;
21
- const position = Math.abs(viewport.scrollLeft);
22
- const max = viewport.scrollWidth - viewport.clientWidth;
23
+ const position = Math.abs(down ? viewport.scrollTop : viewport.scrollLeft);
24
+ const max = down ? viewport.scrollHeight - viewport.clientHeight : viewport.scrollWidth - viewport.clientWidth;
23
25
  setCanScrollPrev(position > 1);
24
26
  setCanScrollNext(position < max - 1);
25
- }, [viewport]);
27
+ }, [viewport, down]);
26
28
  useEffect(() => {
27
29
  if (!viewport) return;
28
30
  const style = viewport.style;
29
- style.overflowX = "auto";
30
- style.overflowY = "hidden";
31
+ style.overflowX = down ? "hidden" : "auto";
32
+ style.overflowY = down ? "auto" : "hidden";
31
33
  style.scrollSnapType = snap;
32
34
  style.setProperty("--clover-track-align", align);
33
- style.overscrollBehaviorX = "contain";
34
- }, [viewport, snap, align]);
35
+ if (down) style.overscrollBehaviorY = "contain";
36
+ else style.overscrollBehaviorX = "contain";
37
+ }, [viewport, snap, align, down]);
35
38
  useEffect(() => {
36
39
  if (!viewport) return;
37
40
  let frame = 0;
@@ -55,9 +58,9 @@ function useScrollTrack({
55
58
  (distance, instant = false) => {
56
59
  if (!viewport || !distance) return;
57
60
  const behavior = instant || prefersReducedMotion() ? "auto" : "smooth";
58
- viewport.scrollBy({ left: distance, behavior });
61
+ viewport.scrollBy({ [down ? "top" : "left"]: distance, behavior });
59
62
  },
60
- [viewport]
63
+ [viewport, down]
61
64
  );
62
65
  const scrollToIndex = useCallback(
63
66
  (index, { instant = false } = {}) => {
@@ -68,21 +71,29 @@ function useScrollTrack({
68
71
  const box = viewport.getBoundingClientRect();
69
72
  const rect = slide.getBoundingClientRect();
70
73
  const rtl = getComputedStyle(viewport).direction === "rtl";
74
+ if (down) {
75
+ scrollAlong(
76
+ alignment.current === "center" ? rect.top + rect.height / 2 - (box.top + box.height / 2) : rect.top - box.top,
77
+ instant
78
+ );
79
+ return true;
80
+ }
71
81
  scrollAlong(
72
82
  alignment.current === "center" ? rect.left + rect.width / 2 - (box.left + box.width / 2) : rtl ? rect.right - box.right : rect.left - box.left,
73
83
  instant
74
84
  );
75
85
  return true;
76
86
  },
77
- [viewport, scrollAlong]
87
+ [viewport, scrollAlong, down]
78
88
  );
79
89
  const page = useCallback(
80
90
  (direction) => {
81
91
  if (!viewport) return;
82
- const rtl = getComputedStyle(viewport).direction === "rtl";
83
- scrollAlong(direction * viewport.clientWidth * 0.9 * (rtl ? -1 : 1));
92
+ const rtl = !down && getComputedStyle(viewport).direction === "rtl";
93
+ const extent = down ? viewport.clientHeight : viewport.clientWidth;
94
+ scrollAlong(direction * extent * 0.9 * (rtl ? -1 : 1));
84
95
  },
85
- [viewport, scrollAlong]
96
+ [viewport, scrollAlong, down]
86
97
  );
87
98
  const scrollNext = useCallback(() => page(1), [page]);
88
99
  const scrollPrev = useCallback(() => page(-1), [page]);
@@ -92,13 +103,16 @@ function useScrollTrack({
92
103
  let dragging = false;
93
104
  const onDown = (event) => {
94
105
  if (event.pointerType !== "mouse" || event.button !== 0) return;
95
- start = { x: event.clientX, scroll: viewport.scrollLeft };
106
+ start = {
107
+ x: down ? event.clientY : event.clientX,
108
+ scroll: down ? viewport.scrollTop : viewport.scrollLeft
109
+ };
96
110
  dragging = false;
97
111
  };
98
112
  const onMove = (event) => {
99
113
  var _a;
100
114
  if (!start) return;
101
- const moved = event.clientX - start.x;
115
+ const moved = (down ? event.clientY : event.clientX) - start.x;
102
116
  if (!dragging && Math.abs(moved) < DRAG_THRESHOLD) return;
103
117
  if (!dragging) {
104
118
  dragging = true;
@@ -106,7 +120,8 @@ function useScrollTrack({
106
120
  viewport.style.scrollSnapType = "none";
107
121
  viewport.dataset.dragging = "true";
108
122
  }
109
- viewport.scrollLeft = start.scroll - moved;
123
+ if (down) viewport.scrollTop = start.scroll - moved;
124
+ else viewport.scrollLeft = start.scroll - moved;
110
125
  };
111
126
  const onUp = (event) => {
112
127
  var _a;
@@ -135,7 +150,7 @@ function useScrollTrack({
135
150
  viewport.removeEventListener("pointercancel", onUp);
136
151
  viewport.removeEventListener("click", onClick, true);
137
152
  };
138
- }, [viewport, snap]);
153
+ }, [viewport, snap, down]);
139
154
  return {
140
155
  ref: setViewport,
141
156
  canScrollPrev,
@@ -0,0 +1 @@
1
+ import{e as M,y as j,u as t,z as C,P as N,X as w,a as x,Q as $,x as H,c as _,A as G,b as U,Y as T,U as V,l as k}from"./shared-DgJ0bXca.mjs";import{j as B}from"./classnames-DukgfdpI.mjs";import{u as Q}from"./readingLanguages-Qdn21-7Q.mjs";import{Thumbnail as W,Summary as R,Metadata as X,RequiredStatement as Y,Rights as E,Homepage as J,SeeAlso as Z,Id as K}from"./Primitives-T7usOLie.mjs";import{u as ee}from"./downloads-DCsDCcA8.mjs";import{P as te}from"./Provider-B2k1G-E0.mjs";import{a as oe,t as ae}from"./heading-Cjt0f-Eu.mjs";import{L as ne}from"./Label-CRTQApU-.mjs";import{r as re}from"./dates-DR3gfcON.mjs";import"./styles-Bvw9LFU7.mjs";const se=C(()=>import("./LanguageChoice-B1941Wuu.mjs").then(e=>e.b).then(e=>({default:e.LanguageChoice}))),le=e=>{var r;const s=e.closest(".clover-sections-actions"),a=(r=s==null?void 0:s.closest(".clover-sections-item"))==null?void 0:r.querySelector(".clover-sections-heading .clover-sections-label");return s&&a?{box:s,label:a}:null},ce=e=>void w.chooseInterfaceLanguage(e);function ue(){x();const{languages:e,chosen:s}=w.interfaceLanguages();return e.length>1?{languages:e,chosen:s}:null}function ie({values:e=true,interfaceLanguages:s=true}={}){const a=Q(),r=ue(),l=e?(a==null?void 0:a.languages)??[]:[],c=o=>l.some(b=>b===o||w.stringsFor(b)===o),g=[...l,...(s?(r==null?void 0:r.languages)??[]:[]).filter(o=>!c(o))];if(g.length<2)return null;const P=w.chosenLanguage,h=P&&w.stringsFor(P),L=h&&g.includes(h)&&!c(h)?h:e&&a?a.chosen:(r==null?void 0:r.chosen)??g[0];return{languages:g,chosen:L,onChange:o=>l.includes(o)&&a?a.onChange(o):ce(o)}}function me({values:e,interfaceLanguages:s}){const a=ie({values:e,interfaceLanguages:s}),{drawsToggle:r}=M("About"),l=!!a;return j(()=>l?r==null?void 0:r():void 0,[l,r]),a?t(N,{fallback:null,children:t(se,{...a,nameKey:"readingLanguage",part:"clover-about",fit:le})}):null}const de=$(false),ge=C(()=>import("./Download-C1RNBLdn.mjs").then(({DownloadGroups:e})=>({default:e}))),he=C(()=>import("./NavDate-BwV4kPl-.mjs").then(e=>e.a).then(({NavDate:e})=>({default:e}))),be=C(()=>import("./PartOfManifest-B0RwR4iy.mjs"));function fe({languages:e=true,interfaceLanguages:s=true,...a}){const r=H(de);return t(ve,{...a,download:!r&&a.download!==false,choice:r?null:t(me,{values:e,interfaceLanguages:s})})}function ve({choice:e,canvasSummary:s=false,headingLevel:a=3,download:r=true,thumbnail:l=true,label:c=true,className:g,...P}){const{t:h,langOf:L}=x(),v=ee(),o=_(n=>n.manifest,Object.is,"About"),b=G(null);j(()=>{const n=b.current,i=n==null?void 0:n.querySelector(".clover-about-head");if(!n||!i||typeof ResizeObserver>"u")return;const m=new Set,d=()=>{const D=i.querySelector(".clover-about-thumbnail"),A=i.querySelector(".clover-about-label");for(const S of[D,A])S&&!m.has(S)&&(m.add(S),y.observe(S));const f=n.style;if(!D){f.removeProperty("--clover-about-label-height"),f.removeProperty("--clover-about-thumbnail-width");return}const O=`${(A==null?void 0:A.offsetHeight)??0}px`,q=`${D.offsetWidth}px`;f.getPropertyValue("--clover-about-label-height")!==O&&f.setProperty("--clover-about-label-height",O),f.getPropertyValue("--clover-about-thumbnail-width")!==q&&f.setProperty("--clover-about-thumbnail-width",q)};let p=0;const y=new ResizeObserver(()=>{cancelAnimationFrame(p),p=requestAnimationFrame(d)});return y.observe(i),d(),()=>{cancelAnimationFrame(p),y.disconnect(),n.style.removeProperty("--clover-about-label-height"),n.style.removeProperty("--clover-about-thumbnail-width")}},[c,l,o]);const z=U(),F=()=>{var m,d;const n=b.current;(d=((m=n==null?void 0:n.closest(".clover-sections-item"))==null?void 0:m.querySelector(".clover-sections-button"))??n)==null||d.focus({preventScroll:true})};if(!o)return null;const u=(n,i,m)=>{if(!i)return null;const{as:d,title:p,group:y}=ae(a,`${z}-${n}`);return t("section",{className:"clover-about-section",...y,children:[t(d,{className:"clover-about-heading",...k(L(n)),...p,children:h(n)}),m]})},I=n=>Array.isArray(o[n])?o[n].length>0:!!o[n];return t("div",{ref:b,className:B("clover-about",g),tabIndex:-1,...P,children:[e,(l||c)&&t("div",{className:"clover-about-head",children:[l&&t(W,{className:"clover-about-thumbnail",size:256,alt:c?"":void 0}),c&&t(ne,{as:oe(a),className:"clover-about-label clover-title"})]}),s&&t(R,{of:"canvas",className:"clover-about-summary"}),T(o)&&o.partOf&&t(N,{fallback:null,children:t(be,{manifest:o,headingLevel:a,onOpened:F})}),t(R,{className:"clover-about-summary"}),t(X,{className:"clover-about-metadata"}),t(Y,{className:"clover-about-metadata"}),u("aboutDate",re(o.navDate),t(N,{fallback:null,children:t(he,{value:o.navDate,className:"clover-about-date"})})),u("aboutProvider",I("provider"),t(te,{})),u("aboutRights",o.rights,t(E,{})),u("aboutHomepage",I("homepage"),t(J,{})),u("aboutSeeAlso",I("seeAlso"),t(Z,{})),u("download",r&&v.page.length+v.all.length>0,t(N,{fallback:null,children:t(ge,{page:v.page,all:v.all,headingLevel:a+1})})),u(T(o)?"aboutCanvas":"aboutManifest",!V(o)&&o.id,t(K,{}))]})}const De=Object.freeze(Object.defineProperty({__proto__:null,About:fe},Symbol.toStringTag,{value:"Module"}));export{fe as A,de as I,me as L,De as a,ie as u};
@@ -0,0 +1 @@
1
+ import{e as P,c as v,aj as _,T as E,G as O,A as R,y as T,u as f,k,d as q,a1 as F}from"./shared-DgJ0bXca.mjs";import{P as G,a as L}from"./Items-BApzELFW.mjs";import{C as j}from"./CountMenu-Aoott7Hu.mjs";import{a as y}from"./annotation-name-BWTrB9nK.mjs";import{f as B,r as D}from"./fetchManifest-QmVIeaHo.mjs";import{u as K,L as V}from"./ListEnd-CIiLZZzc.mjs";function z({onSelect:o,forwardedRef:r,...c}){const{clover:l,language:e}=P("Items"),n=v(t=>t.manifest),s=v(t=>_(t.manifest,t.addedSets)),u=v(t=>t.annotationId),d=(s==null?void 0:s.pages)??H,m=(s==null?void 0:s.entries)??J,{loaded:A,more:N,reachNext:S}=K(d),x=E(()=>[...new Set(m.map(t=>O(t.annotation)).filter(t=>!!t&&t!==(n==null?void 0:n.id)))],[m,n==null?void 0:n.id]),C=U(c.layout==="pager"?Q:x),M=x.length>0,i=E(()=>{const t=d.length?new Set(d.slice(0,A).map(a=>a.id)):null;return m.filter(a=>!t||t.has(a.setId)).map(a=>{const g=O(a.annotation),p=g&&g!==(n==null?void 0:n.id)?C.get(g)??null:n;return X(a,p,e,M)})},[d,A,m,n,C,M,e]),b=Math.max((s==null?void 0:s.total)??0,i.length),I=R(null);if(T(()=>{const t=I.current;t===null||!i[t]||(I.current=null,l.selectAnnotation(i[t].id))},[l,i]),!i.length)return null;const h=i.findIndex(t=>t.id===u),w=(t,a)=>{o==null||o(t,a),l.selectAnnotation(t.id)};return c.layout==="pager"?f(G,{...c,forwardedRef:r,steps:{position:h,total:b,direction:"left-to-right",step:(a,g)=>{const p=h+a;if(!(p<0)){if(i[p])return w(i[p],g);N&&(I.current=p,S())}}},nameKey:"informationPanelTabsAnnotations",position:f(j,{position:h,total:b,list:a=>f(z,{layout:"list",forwardedRef:null,onSelect:a})})}):f(k,{children:[f(L,{...c,forwardedRef:r,items:i,selected:h,navigation:"id",language:e,request:l.request,showSummary:true,onActivate:w}),N&&f(V,{onReached:S})]})}const H=[],J=[],Q=[];function U(o){const{clover:r}=P("Items"),[c,l]=q(W);return T(()=>{if(!o.length)return;let e=true;for(const n of o)B(r,n).then(s=>{e&&s&&l(u=>u.has(n)?u:new Map(u).set(n,s))});return()=>{e=false}},[r,o]),c}const W=new Map;function X(o,r,c,l){const e=F(r,o.canvasId),n=y(o.bodies,c),s=n.text?{[n.lang??"none"]:[n.text]}:e==null?void 0:e.label,u=l?r==null?void 0:r.label:e==null?void 0:e.label,d=e&&o.target.rect?D(e,o.target.rect):void 0;return{id:o.id,label:s,summary:n.text?u:void 0,parts:[{id:o.id,type:"Canvas",label:s,resource:e??{id:o.canvasId},...d?{source:d}:{}}]}}export{z as default};
@@ -1 +1 @@
1
- import{A as I,u as a,l as y}from"./shared-D4j4IirO.mjs";import{s as H}from"./Annotations-x5H_Vls9.mjs";import T from"./ControlMenu-CaD8Frag.mjs";import{C as $}from"./Cue-CrlByfoX.mjs";import{H as z}from"./HideToggle-aDBXi6F0.mjs";import{u as B}from"./useContainerName-B_Kzx2Wp.mjs";import"./styles-Ca564vB9.mjs";const G=({id:d,triggerId:C,label:M,labelLang:k,annotations:p,hiddenPages:x=[],onPageVisibilityChange:v,selected:w,onSelect:u,onActivate:i,onClose:D})=>{const h=B(M,k),m=I(false),r=[];p.forEach((n,c)=>{var s,l;const o=r[r.length-1];o&&((s=o.page)==null?void 0:s.text)===((l=n.page)==null?void 0:l.text)?o.items.push(c):r.push({page:n.page,items:[c]})});const E=r.some(n=>!n.page);return a(T,{className:"clover-canvas-annotation-menu","data-testid":"clover-canvas-annotation-menu",id:d,onClose:D,triggerId:C,children:[E&&h.node,r.map((n,c)=>{const o=[...new Set(n.items.flatMap(t=>p[t].pageId??[]))],s=`${d}-page-${c}`,l=v&&o.length>0&&a(z,{hidden:o.every(t=>x.includes(t)),onChange:t=>v(o,!t),of:n.page?s:void 0});return a("fieldset",{...n.page?{"aria-labelledby":s}:h.props,className:"clover-canvas-menu-group clover-annotations-set",children:[n.page?a("legend",{className:"clover-canvas-menu-legend clover-annotations-set-header",children:[a("span",{className:"clover-annotations-title",id:s,...y(n.page.lang),children:n.page.text}),l]}):l&&a("div",{className:"clover-annotations-set-header",children:l}),a("div",{className:"clover-annotations-list",children:n.items.map(t=>{const e=p[t],f=H(e),g=w===e.id,N="image"in e?e.image:void 0;return a("label",{className:"clover-canvas-menu-item clover-annotations-entry","data-selected":g,onMouseEnter:()=>i(e.id),onMouseLeave:()=>i(null),onPointerDown:()=>{m.current=true},children:[a("input",{type:"radio",name:d,checked:g,onChange:()=>u(e,m.current),onClick:()=>{(g||!m.current)&&u(e)},onKeyDown:b=>{m.current=false,b.key==="Enter"&&(b.preventDefault(),u(e))},onFocus:()=>i(e.id),onBlur:()=>i(null)}),f!==void 0&&a($,{start:f,className:"clover-annotations-time"}),a("span",{className:"clover-annotations-body clover-cue-text",children:[N&&a("img",{className:"clover-annotations-image",src:N,alt:"",loading:"lazy"}),a("span",{className:"clover-annotations-text",...y(e.label?e.lang:void 0),children:e.label??String(t+1)})]})]},e.id)})})]},c)})]})};export{G as default};
1
+ import{A as I,u as a,l as y}from"./shared-DgJ0bXca.mjs";import{s as H}from"./Annotations-oPabBO7j.mjs";import T from"./ControlMenu-DlP3JsqV.mjs";import{C as $}from"./Cue-BAj92VWz.mjs";import{H as z}from"./HideToggle-C4mW4-CK.mjs";import{u as B}from"./useContainerName-BfNL6p3O.mjs";import"./styles-Bvw9LFU7.mjs";const G=({id:d,triggerId:C,label:M,labelLang:k,annotations:p,hiddenPages:x=[],onPageVisibilityChange:v,selected:w,onSelect:u,onActivate:i,onClose:D})=>{const h=B(M,k),m=I(false),r=[];p.forEach((n,c)=>{var s,l;const o=r[r.length-1];o&&((s=o.page)==null?void 0:s.text)===((l=n.page)==null?void 0:l.text)?o.items.push(c):r.push({page:n.page,items:[c]})});const E=r.some(n=>!n.page);return a(T,{className:"clover-canvas-annotation-menu","data-testid":"clover-canvas-annotation-menu",id:d,onClose:D,triggerId:C,children:[E&&h.node,r.map((n,c)=>{const o=[...new Set(n.items.flatMap(t=>p[t].pageId??[]))],s=`${d}-page-${c}`,l=v&&o.length>0&&a(z,{hidden:o.every(t=>x.includes(t)),onChange:t=>v(o,!t),of:n.page?s:void 0});return a("fieldset",{...n.page?{"aria-labelledby":s}:h.props,className:"clover-canvas-menu-group clover-annotations-set",children:[n.page?a("legend",{className:"clover-canvas-menu-legend clover-annotations-set-header",children:[a("span",{className:"clover-annotations-title",id:s,...y(n.page.lang),children:n.page.text}),l]}):l&&a("div",{className:"clover-annotations-set-header",children:l}),a("div",{className:"clover-annotations-list",children:n.items.map(t=>{const e=p[t],f=H(e),g=w===e.id,N="image"in e?e.image:void 0;return a("label",{className:"clover-canvas-menu-item clover-annotations-entry","data-selected":g,onMouseEnter:()=>i(e.id),onMouseLeave:()=>i(null),onPointerDown:()=>{m.current=true},children:[a("input",{type:"radio",name:d,checked:g,onChange:()=>u(e,m.current),onClick:()=>{(g||!m.current)&&u(e)},onKeyDown:b=>{m.current=false,b.key==="Enter"&&(b.preventDefault(),u(e))},onFocus:()=>i(e.id),onBlur:()=>i(null)}),f!==void 0&&a($,{start:f,className:"clover-annotations-time"}),a("span",{className:"clover-annotations-body clover-cue-text",children:[N&&a("img",{className:"clover-annotations-image",src:N,alt:"",loading:"lazy"}),a("span",{className:"clover-annotations-text",...y(e.label?e.lang:void 0),children:e.label??String(t+1)})]})]},e.id)})})]},c)})]})};export{G as default};
@@ -0,0 +1 @@
1
+ import{T as d,ac as qt,f as bt,d as C,aI as Gt,q as I,A as l,E as jt,y as z,_ as It,u as zt}from"./shared-DgJ0bXca.mjs";import{w as Dt,p as kt,g as Ot,t as Jt,A as Ut}from"./Annotations-oPabBO7j.mjs";import{h as Xt}from"./layout-B3HyDCsP.mjs";const Yt=()=>import("./svg-shape-D1K-WNrY.mjs");function Zt(w){var S;const c=d(()=>!!(w!=null&&w.some(({annotation:s})=>{var p;return(p=qt(s==null?void 0:s.target))==null?void 0:p.svg})),[w]);return((S=bt(Yt,c))==null?void 0:S.readSvgShape)??null}const xt=[];function Et({given:w,annotations:c,scene:S,renderer:s,sceneVersion:p,drawn:E,media:k,mediaElement:f,showPlaceholder:F,canvasKey:D,openImages:tt,openMedia:et,host:nt,onModel:H,refind:_=0}){const{canvases:g,language:v,hiddenPages:rt,unlistedPages:yt,onPageVisibilityChange:ct,onAnnotationActive:ut,selectedAnnotation:st,animateAnnotations:ot=false,highlightedAnnotation:Ct,onAnnotationSelect:lt,onAnnotationLink:J}=w,[B,Ft]=C([]),[it,Ht]=C([]),L=rt!==void 0,U=d(()=>{var n;if(L)return xt;const t=new Map;for(const r of c){if(!r.pageId)continue;const o=!(Number((n=g==null?void 0:g[r.targetIndex])==null?void 0:n.duration)>0)&&Gt(r.annotation.motivation,qt(Array.isArray(r.annotation.target)?r.annotation.target[0]:r.annotation.target));t.set(r.pageId,(t.get(r.pageId)??true)&&o)}const e=[...t].filter(([,r])=>r).map(([r])=>r);return e.length?e:xt},[L,c,g]),_t=d(()=>{const t=U.filter(e=>!it.includes(e)&&!B.includes(e));return t.length?[...B,...t]:B},[B,it,U]),a=rt??_t,X=yt??U,N=I(t=>X.length?t.filter(e=>!e.pageId||!X.includes(e.pageId)):t,[X]),dt=d(()=>N(c).length,[c,N]),T=I(t=>a.length?t.filter(e=>!e.pageId||!a.includes(e.pageId)):t,[a]),Q=l(ct);Q.current=ct;const R=I((t,e)=>{var n;(n=Q.current)==null||n.call(Q,t,e),!L&&(Ft(r=>{const i=r.filter(o=>!t.includes(o));return e?i:[...i,...t]}),Ht(r=>{const i=r.filter(o=>!t.includes(o));return e?[...i,...t]:i}))},[L]),gt=d(()=>Dt(T(c),g),[c,T,g]),O=d(()=>{if(!(!S||!g))return(t,e,n)=>{const r=g.findIndex(Wt=>Wt.id===e),i=r===-1?n:r,o=S.placements[i];return o?Xt(g[i],o,t):null}},[S,g]),W=Zt(c),P=d(()=>s&&p>0&&E?kt(c,O??((t,e,n)=>s.itemRectToWorld(n,t)),W,v):[],[s,c,p,E,O,W,v]),x=d(()=>T(P),[P,T]),Y=d(()=>P.length||!O?P:kt(c,O,W,v),[P,O,c,W,v]),[Bt,Lt]=C(null),[Nt,ft]=C(null),u=st!==void 0?st:Nt,A=l(null),h=l(ut);h.current=ut;const m=l(lt);m.current=lt;const Z=I(t=>{var e;Lt(t),(e=h.current)==null||e.call(h,t)},[]),$=l(ot);$.current=ot;const pt=l(false);pt.current=F;const V=l(f);V.current=f;const at=l(s);at.current=s;const q=l(null),Pt=l(a);Pt.current=a;const ht=l(R);ht.current=R;const K=I((t,e=true)=>{var n,r,i;if(t.pageId&&Pt.current.includes(t.pageId)&&ht.current([t.pageId],true),ft(t.id),(n=h.current)==null||n.call(h,t.id),(r=m.current)==null||r.call(m,t.id),!pt.current){if("start"in t){const o=V.current;if(!o)return;q.current=t.id,e?jt(o,t.start):o.currentTime=t.start;return}if(A.current=t.id,t.track){const o=V.current;o&&Ot(t,o)&&(q.current=t.id);return}(i=at.current)==null||i.fitAnnotation(t.world,!$.current)}},[]),mt=l(u);mt.current=u;const b=I(()=>{var t;return mt.current?(ft(null),A.current=null,(t=m.current)==null||t.call(m,null),true):false},[]),G=l(J);G.current=J;const wt=!!J,Qt=d(()=>wt?t=>{var e,n;(e=nt.current)==null||e.focus({preventScroll:true}),b(),t.link&&((n=G.current)==null||n.call(G,t.link))}:void 0,[wt,b,nt]),St=l(_);z(()=>{if(!u){A.current=null;return}if(St.current!==_&&(St.current=_,A.current=null),A.current===u)return;const t=r=>r.find(i=>i.id===u),e=t(x),n=e??t(P);if(n){if(A.current=n.id,n.track){!e&&f&&Ot(n,f);return}s==null||s.fitAnnotation(n.world,!$.current)}},[u,x,P,f,s,_]);const y=d(()=>k?Jt(c,v):[],[k,c,v]),j=d(()=>T(y),[y,T]),vt=d(()=>N(y.length?[...Y,...y]:Y),[Y,y,N]);z(()=>{if(!u){q.current=null;return}if(q.current===u||!f)return;const t=j.find(e=>e.id===u);t&&(q.current=t.id,f.currentTime=t.start)},[u,j,f]);const M=l(null),[Tt,Rt]=C(null);z(()=>{M.current=u??null},[u]),z(()=>{const t=M.current;if(!(!t||!c.some(e=>{var n;return((n=e.annotation)==null?void 0:n.id)===t}))&&(M.current=null,!!F)){if(!k){tt(true);return}et(D),Rt(D)}},[u,c,F,k,D,tt,et]);const At=d(()=>({menu:vt,placed:x,timed:j,hiddenPages:a,setPagesVisible:R,listedCount:dt,comments:gt,selected:u??null,select:K,activate:Z,release:b,quietlyOpened:Tt}),[vt,x,j,a,R,dt,gt,u,K,Z,b,Tt]);return It(()=>H(At),[At,H]),It(()=>()=>H(null),[H]),s&&p>0&&!F?zt(Ut,{renderer:s,placed:x,sceneVersion:p,active:Bt??Ct??u,selected:u,onActivate:Z,onSelect:K,onFollow:Qt,media:k?f:void 0}):null}export{Et as AnnotationState};