@nulib/clover 4.0.0 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/dist/components/Body/Body.mjs +16 -1
  2. package/dist/components/Body/glyphs.mjs +15 -0
  3. package/dist/components/Body/useControlsVisibility.mjs +35 -13
  4. package/dist/components/Canvas/CanvasView.mjs +116 -12
  5. package/dist/components/Canvas/ChaptersMenu.mjs +105 -0
  6. package/dist/components/Canvas/ControlMenu.mjs +23 -4
  7. package/dist/components/Canvas/Controls.mjs +223 -60
  8. package/dist/components/Canvas/ControlsFade.mjs +16 -0
  9. package/dist/components/Canvas/ImageControls.mjs +209 -0
  10. package/dist/components/Canvas/Placeholder.mjs +44 -12
  11. package/dist/components/Canvas/RowFits.mjs +85 -0
  12. package/dist/components/Canvas/layout.mjs +11 -0
  13. package/dist/components/Canvas/media/MediaBody.mjs +105 -46
  14. package/dist/components/Canvas/media/Player.mjs +0 -55
  15. package/dist/components/Canvas/media/Transport.mjs +14 -23
  16. package/dist/components/Canvas/panClearOfControls.mjs +1 -1
  17. package/dist/components/Collection/Collection.mjs +1 -1
  18. package/dist/components/Items/CountMenu.mjs +1 -0
  19. package/dist/components/Items/Item.mjs +4 -3
  20. package/dist/components/Items/Items.mjs +30 -10
  21. package/dist/components/Items/PagerLayout.mjs +2 -0
  22. package/dist/components/Items/TargetItems.mjs +1 -1
  23. package/dist/components/Items/masonry.mjs +35 -0
  24. package/dist/components/Panel/About.mjs +25 -8
  25. package/dist/components/Panel/Panel.mjs +47 -59
  26. package/dist/components/Panel/sections.mjs +62 -0
  27. package/dist/components/Root/useRootState.mjs +2 -49
  28. package/dist/components/Scene/SceneView.mjs +13 -2
  29. package/dist/components/Scene/cloverEngine.mjs +2 -1
  30. package/dist/components/Timeline/playerSurface.mjs +2 -0
  31. package/dist/core/clover.mjs +7 -4
  32. package/dist/core/content-state.mjs +5 -3
  33. package/dist/i18n/locales/en.json.mjs +1 -1
  34. package/dist/i18n/locales/es.json.mjs +1 -1
  35. package/dist/i18n/locales/fi.json.mjs +1 -1
  36. package/dist/i18n/locales/fr.json.mjs +1 -1
  37. package/dist/i18n/locales/nb.json.mjs +1 -1
  38. package/dist/i18n/locales/nn.json.mjs +1 -1
  39. package/dist/i18n/locales/no.json.mjs +1 -1
  40. package/dist/i18n/locales/pt.json.mjs +1 -1
  41. package/dist/index.d.mts +178 -56
  42. package/dist/index.mjs +2 -0
  43. package/dist/lib/gltf/load.mjs +26 -6
  44. package/dist/lib/pointer.mjs +1 -1
  45. package/dist/lib/renderer/CanvasRenderer.mjs +44 -32
  46. package/dist/lib/renderer/camera/Camera.mjs +1 -1
  47. package/dist/react/useContentStateOutput.mjs +71 -0
  48. package/dist/styles.css +1 -1
  49. package/dist/templates/default/Default.mjs +42 -128
  50. package/dist/templates/document/Document.mjs +51 -65
  51. package/dist/templates/document/Sheets.mjs +13 -5
  52. package/dist/templates/gallery/Gallery.mjs +94 -18
  53. package/dist/templates/index.d.mts +364 -17
  54. package/dist/templates/shared/Lightbox.mjs +161 -69
  55. package/dist/templates/shared/LightboxView.mjs +123 -0
  56. package/dist/templates/shared/PanelPane.mjs +116 -0
  57. package/dist/templates/{document/DocumentPanel.mjs → shared/PanelPart.mjs} +2 -2
  58. package/dist/templates/shared/dragToClose.mjs +51 -8
  59. package/dist/templates/shared/givenAnnotations.mjs +13 -0
  60. package/dist/templates/shared/useDragToClose.mjs +6 -3
  61. package/dist/templates/shared/useLazyPanelPane.mjs +16 -0
  62. package/dist/templates/shared/useSlide.mjs +6 -0
  63. package/dist/templates.css +1 -1
  64. package/dist/ui/ControlCluster.mjs +15 -17
  65. package/dist/ui/Sections.mjs +3 -3
  66. package/dist/ui/mediaIcons.mjs +35 -8
  67. package/dist/ui/useScrollTrack.mjs +2 -1
  68. package/dist/web-components/About-D1TBGGPL.mjs +1 -0
  69. package/dist/web-components/AnnotationItems-DTacmRA9.mjs +1 -0
  70. package/dist/web-components/{AnnotationMenu-BCwwwfbb.mjs → AnnotationMenu-DYc9ekWS.mjs} +1 -1
  71. package/dist/web-components/{AnnotationState-CavxnAAq.mjs → AnnotationState--5ghW0C2.mjs} +1 -1
  72. package/dist/web-components/{Annotations-rBmeI5sR.mjs → Annotations-BG8lPjk1.mjs} +1 -1
  73. package/dist/web-components/{Annotations-DDjSrBL5.mjs → Annotations-Bvc_FmJ5.mjs} +1 -1
  74. package/dist/web-components/Body-QQ1DmnbP.mjs +1 -0
  75. package/dist/web-components/{BodyAlert-COKp19lq.mjs → BodyAlert-A4xRjOKr.mjs} +1 -1
  76. package/dist/web-components/{Button-DLFYqtz9.mjs → Button-Cx6VE_UW.mjs} +1 -1
  77. package/dist/web-components/{Camera-Cp5ma-6C.mjs → Camera-DqT_1MgD.mjs} +1 -1
  78. package/dist/web-components/{Canvas2DBackend-3PToh87Z.mjs → Canvas2DBackend-TZtR3zHf.mjs} +1 -1
  79. package/dist/web-components/CanvasView-DxZASM9E.mjs +2 -0
  80. package/dist/web-components/CaptionDetails-DMRWmtaY.mjs +1 -0
  81. package/dist/web-components/ChaptersMenu-BAZVVDrK.mjs +1 -0
  82. package/dist/web-components/{Chevron-r-_hUPn8.mjs → Chevron-DFGbSGPI.mjs} +1 -1
  83. package/dist/web-components/ChoiceMenu-C80kdxvq.mjs +1 -0
  84. package/dist/web-components/Collection-B4CxBsFL.mjs +1 -0
  85. package/dist/web-components/{CollectionSelect-CBWUbqQi.mjs → CollectionSelect-DO8YO2p7.mjs} +1 -1
  86. package/dist/web-components/{Connected-BnpxYeJN.mjs → Connected-CcbVqzmj.mjs} +1 -1
  87. package/dist/web-components/{Connected-B2d6EoFl.mjs → Connected-DthCPaHl.mjs} +1 -1
  88. package/dist/web-components/{Connected-BSRM9FJY.mjs → Connected-sYBn_9MK.mjs} +1 -1
  89. package/dist/web-components/{Contents-D7FPxSH-.mjs → Contents-AVPYYXht.mjs} +1 -1
  90. package/dist/web-components/ControlMenu-BjJsWnuZ.mjs +1 -0
  91. package/dist/web-components/ControlsFade-C-6WhSxB.mjs +1 -0
  92. package/dist/web-components/{CountMenu-DyTp_J4k.mjs → CountMenu-Dx8D_RJZ.mjs} +1 -1
  93. package/dist/web-components/Cue-xuo5dgKE.mjs +1 -0
  94. package/dist/web-components/Document-BWdafeEi.mjs +1 -0
  95. package/dist/web-components/{DomLayers-CTGub6wo.mjs → DomLayers-DlRapZ1u.mjs} +1 -1
  96. package/dist/web-components/{Download-BOYNIb7C.mjs → Download-Ci_JUTVd.mjs} +1 -1
  97. package/dist/web-components/{EntryBodies-Bfd2Z42z.mjs → EntryBodies-C0ICfS2R.mjs} +1 -1
  98. package/dist/web-components/{EntryThumbnail-DQE8ajI9.mjs → EntryThumbnail-DxHhfRo_.mjs} +1 -1
  99. package/dist/web-components/{FieldPill-D5DNJWLy.mjs → FieldPill-CVfeeafm.mjs} +1 -1
  100. package/dist/web-components/FrameAnimation-AZpVvu0R.mjs +1 -0
  101. package/dist/web-components/Gallery-C2PTJmvN.mjs +1 -0
  102. package/dist/web-components/{HideToggle-DL911R1Z.mjs → HideToggle-0nlIo-f8.mjs} +1 -1
  103. package/dist/web-components/ImageControls-tKVAMpaj.mjs +1 -0
  104. package/dist/web-components/Items-Drd82_Jj.mjs +1 -0
  105. package/dist/web-components/Label-BIjqJ-_T.mjs +1 -0
  106. package/dist/web-components/{LanguageChoice-DT1UPiDn.mjs → LanguageChoice-DkSc-n6g.mjs} +1 -1
  107. package/dist/web-components/LightboxView-Cuqx2H1m.mjs +1 -0
  108. package/dist/web-components/ListEnd-pq-BgaDI.mjs +1 -0
  109. package/dist/web-components/{Loaded-BWfEBJyg.mjs → Loaded-CSO5NFhm.mjs} +1 -1
  110. package/dist/web-components/LoadedCanvas-DK6xMmM1.mjs +1 -0
  111. package/dist/web-components/LoadedMap-DmPH-LKY.mjs +1 -0
  112. package/dist/web-components/{Loading-zw74TdAz.mjs → Loading-CoJLSRkv.mjs} +1 -1
  113. package/dist/web-components/{Map--dJhk0_0.mjs → Map-BEVtD52O.mjs} +1 -1
  114. package/dist/web-components/MapView-DHJcn9gW.mjs +3 -0
  115. package/dist/web-components/Markup-Hm6bWOjm.mjs +2 -0
  116. package/dist/web-components/MediaBody-BpgNtpKZ.mjs +1 -0
  117. package/dist/web-components/MediaBody-Co23JjUJ.mjs +1 -0
  118. package/dist/web-components/{NavDate-BQHuyLOC.mjs → NavDate-CYNK0Qmp.mjs} +1 -1
  119. package/dist/web-components/{Navigator-B3U21_ti.mjs → Navigator-DrYPepzN.mjs} +1 -1
  120. package/dist/web-components/{Pager-DnJknq92.mjs → Pager-CN4lHURv.mjs} +1 -1
  121. package/dist/web-components/PagerLayout-DeqnSQcF.mjs +1 -0
  122. package/dist/web-components/Panel-CFYUlXup.mjs +1 -0
  123. package/dist/web-components/PanelPart-CpUIRbxr.mjs +1 -0
  124. package/dist/web-components/{PanelToggle-CFtWIeWv.mjs → PanelToggle-9ud55NNI.mjs} +1 -1
  125. package/dist/web-components/{PartOfManifest-F87jIrf9.mjs → PartOfManifest-KUHUq-6q.mjs} +1 -1
  126. package/dist/web-components/{Pending-CYAQajKu.mjs → Pending-mcmdyZPA.mjs} +1 -1
  127. package/dist/web-components/PlaceBox-DX4ZLDat.mjs +1 -0
  128. package/dist/web-components/Placeholder-0hE8q-SY.mjs +1 -0
  129. package/dist/web-components/{Position-BkWBRBfW.mjs → Position-DO5qg5Sp.mjs} +1 -1
  130. package/dist/web-components/{Primitives-BmODPlnK.mjs → Primitives-c9sIz0oQ.mjs} +1 -1
  131. package/dist/web-components/Provider-a3xY016W.mjs +1 -0
  132. package/dist/web-components/{ReadMore-BwGFsLS2.mjs → ReadMore-D_WmmKEP.mjs} +1 -1
  133. package/dist/web-components/Root-CU1o0wje.mjs +1 -0
  134. package/dist/web-components/Scene-CboEeptc.mjs +1 -0
  135. package/dist/web-components/SceneView-hcc78jQT.mjs +1 -0
  136. package/dist/web-components/{Search-CbmK9vLp.mjs → Search-BgxEW1UT.mjs} +1 -1
  137. package/dist/web-components/{Sections-Dy5_pkyQ.mjs → Sections-DZVrhoAC.mjs} +2 -2
  138. package/dist/web-components/{StandaloneItems-BmUnBp0H.mjs → StandaloneItems-6cSw7nbF.mjs} +1 -1
  139. package/dist/web-components/{Status-Dww3Pyf4.mjs → Status-DHTzuTkh.mjs} +1 -1
  140. package/dist/web-components/{Steps-o_UprQfZ.mjs → Steps-Dkpy9KiJ.mjs} +1 -1
  141. package/dist/web-components/{TargetItems-BBOGDubv.mjs → TargetItems-CyOI9_Z4.mjs} +1 -1
  142. package/dist/web-components/Timeline-B9tD3Rar.mjs +1 -0
  143. package/dist/web-components/{Tip-BbexILXs.mjs → Tip-nJSTYquc.mjs} +1 -1
  144. package/dist/web-components/{Transcript-ZVXM3ZDA.mjs → Transcript-WvFFAJQM.mjs} +1 -1
  145. package/dist/web-components/Transport-FxLp_bdW.mjs +1 -0
  146. package/dist/web-components/Transport-VUxSEIQO.mjs +1 -0
  147. package/dist/web-components/{annotation-collection-7SS1ELcO.mjs → annotation-collection-BkC3nBPA.mjs} +1 -1
  148. package/dist/web-components/{annotation-name-CYkZopdd.mjs → annotation-name-Du2KAWoD.mjs} +1 -1
  149. package/dist/web-components/{annotations-content-Bdtn50sf.mjs → annotations-content-CEzAS-P2.mjs} +1 -1
  150. package/dist/web-components/{body-CkOBHlJ0.mjs → body-DPlfbLt3.mjs} +1 -1
  151. package/dist/web-components/canvas-BUwBftJW.mjs +1 -0
  152. package/dist/web-components/cloverEngine-UNw5K4Xg.mjs +164 -0
  153. package/dist/web-components/{content-state-reader-Ahh6artg.mjs → content-state-reader-GgQF2MvJ.mjs} +1 -1
  154. package/dist/web-components/{controls-BJrZVQkS.mjs → controls-CC9G5LxK.mjs} +1 -1
  155. package/dist/web-components/custom-elements.json +191 -45
  156. package/dist/web-components/{downloads-CqVWo-yn.mjs → downloads-CmAYeEIz.mjs} +1 -1
  157. package/dist/web-components/dragToClose-DK-eM097.mjs +1 -0
  158. package/dist/web-components/{engine-B-sscpLa.mjs → engine-Dok0z8WP.mjs} +1 -1
  159. package/dist/web-components/{engines-DfCHjbt3.mjs → engines-BD2IfwQF.mjs} +1 -1
  160. package/dist/web-components/es-B1NvdYp-.mjs +1 -0
  161. package/dist/web-components/{fetchManifest-BIzne1Pj.mjs → fetchManifest-tQXcfFiz.mjs} +1 -1
  162. package/dist/web-components/fi-BjtYZNLo.mjs +1 -0
  163. package/dist/web-components/fr-Cd22Lziw.mjs +1 -0
  164. package/dist/web-components/fromManifest-BwQdeAuL.mjs +1 -0
  165. package/dist/web-components/glyphs-dp_HK3Ja.mjs +1 -0
  166. package/dist/web-components/hooks-C4dJ5K_D.mjs +1 -0
  167. package/dist/web-components/image-layers-xcBsiad9.mjs +1 -0
  168. package/dist/web-components/{imageService-0eTvQ-3h.mjs → imageService-4sFnmAFX.mjs} +1 -1
  169. package/dist/web-components/index-DspT4wUm.mjs +1 -0
  170. package/dist/web-components/index.d.mts +5 -5
  171. package/dist/web-components/index.mjs +1 -1
  172. package/dist/web-components/items-BUmOy2QY.mjs +1 -0
  173. package/dist/web-components/items-CWMI53aN.mjs +1 -0
  174. package/dist/web-components/label-BGjL7I4b.mjs +1 -0
  175. package/dist/web-components/layout-B29v2RKK.mjs +1 -0
  176. package/dist/web-components/{link-GEdiEwlR.mjs → link-Ct5PpHEY.mjs} +1 -1
  177. package/dist/web-components/logo-BFstM-0a.mjs +1 -0
  178. package/dist/web-components/masonry-0QfzOgbB.mjs +1 -0
  179. package/dist/web-components/{models-59cEeiAA.mjs → models-BXcT4ijX.mjs} +1 -1
  180. package/dist/web-components/nb-CEwZDBiR.mjs +1 -0
  181. package/dist/web-components/nn-jYQhr9RI.mjs +1 -0
  182. package/dist/web-components/no-CEwZDBiR.mjs +1 -0
  183. package/dist/web-components/{nodes-CTw9OqlA.mjs → nodes-BleXuYE6.mjs} +1 -1
  184. package/dist/web-components/{overlayImage-BMt4UTlR.mjs → overlayImage-BJtfot4Y.mjs} +1 -1
  185. package/dist/web-components/panClearOfControls-Cn2ZXsZi.mjs +1 -0
  186. package/dist/web-components/{panel-C17Rl9Ya.mjs → panel-BxxV_JkD.mjs} +1 -1
  187. package/dist/web-components/part-D4gjnYmT.mjs +1 -0
  188. package/dist/web-components/playerSurface-BXNLaFk0.mjs +1 -0
  189. package/dist/web-components/pointer-CJELU3gI.mjs +1 -0
  190. package/dist/web-components/{provider-BpxorEiq.mjs → provider-CPp0Sgr_.mjs} +1 -1
  191. package/dist/web-components/pt-CWR30SzS.mjs +1 -0
  192. package/dist/web-components/{range-regions-BGQy4E9U.mjs → range-regions-DAaOu0IS.mjs} +1 -1
  193. package/dist/web-components/{read-more-BDM_6CVc.mjs → read-more-lcqGslUd.mjs} +1 -1
  194. package/dist/web-components/readingLanguages-FyVsSWJ8.mjs +1 -0
  195. package/dist/web-components/rendererSurface-nh6-EfuZ.mjs +22 -0
  196. package/dist/web-components/{renderers-CiB74bQh.mjs → renderers-BFS7hFVU.mjs} +1 -1
  197. package/dist/web-components/{resource-CRbpf9pX.mjs → resource-Bufu7lAr.mjs} +1 -1
  198. package/dist/web-components/{save-file-CCuZEuQr.mjs → save-file-CoknKOPz.mjs} +1 -1
  199. package/dist/web-components/search-5ocrsYmT.mjs +1 -0
  200. package/dist/web-components/shared-DFAX0n3B.mjs +1 -0
  201. package/dist/web-components/{show-link-BXm7SNIC.mjs → show-link-DBaJj4s_.mjs} +1 -1
  202. package/dist/web-components/{sizedImage-k4Q-eyOB.mjs → sizedImage-jnOGcIIZ.mjs} +1 -1
  203. package/dist/web-components/{split-Hp6z-v4h.mjs → split-P6J0qqf5.mjs} +1 -1
  204. package/dist/web-components/{status-BmtuKfAG.mjs → status-honoOMNx.mjs} +1 -1
  205. package/dist/web-components/styles-BwkYiCLC.mjs +1 -0
  206. package/dist/web-components/three.mjs +1 -1
  207. package/dist/web-components/{thumbnail-Dp7a8oom.mjs → thumbnail-EbURh-UM.mjs} +1 -1
  208. package/dist/web-components/{tip-C-oovDZK.mjs → tip-BhNI83aT.mjs} +1 -1
  209. package/dist/web-components/{toggle-C7ODWDEZ.mjs → toggle-CJKdi5KH.mjs} +1 -1
  210. package/dist/web-components/{useContainerName-CrOmY-km.mjs → useContainerName-_48Cdi0m.mjs} +1 -1
  211. package/dist/web-components/useControlsVisibility-CieBxGnK.mjs +1 -0
  212. package/dist/web-components/useLazyPanelPane-Da3kJiOt.mjs +1 -0
  213. package/dist/web-components/{useNearViewport-BqXi9Gn4.mjs → useNearViewport-B34ebmIW.mjs} +1 -1
  214. package/dist/web-components/useScrollTrack-DgRGFeP5.mjs +1 -0
  215. package/dist/web-components/viewer/AnnotationItems-BNA_92Dv.mjs +1 -0
  216. package/dist/web-components/viewer/{AnnotationMenu-DPOSehBo.mjs → AnnotationMenu-BIQYVR4N.mjs} +1 -1
  217. package/dist/web-components/viewer/AnnotationState-BbwQqA1U.mjs +1 -0
  218. package/dist/web-components/viewer/Annotations-CZzOZAFP.mjs +2 -0
  219. package/dist/web-components/viewer/Annotations-P4XzAlNc.mjs +1 -0
  220. package/dist/web-components/viewer/{Canvas2DBackend-BTK6ZJh0.mjs → Canvas2DBackend-DFfCzyjL.mjs} +1 -1
  221. package/dist/web-components/viewer/CaptionDetails-DPtE-RQQ.mjs +1 -0
  222. package/dist/web-components/viewer/ChaptersMenu-D6Jmujag.mjs +1 -0
  223. package/dist/web-components/viewer/{ChoiceMenu-DQ1x572Y.mjs → ChoiceMenu-GkqyTQRQ.mjs} +1 -1
  224. package/dist/web-components/viewer/Collection-DjY_6qa6.mjs +1 -0
  225. package/dist/web-components/viewer/Connected-D5T-mtiy.mjs +1 -0
  226. package/dist/web-components/viewer/Connected-DIOuI3Mv.mjs +1 -0
  227. package/dist/web-components/viewer/Contents-DV-VxXuf.mjs +1 -0
  228. package/dist/web-components/viewer/ControlMenu-BsEpff6N.mjs +1 -0
  229. package/dist/web-components/viewer/ControlsFade-BowtN96W.mjs +1 -0
  230. package/dist/web-components/viewer/{CountMenu-4u6U6yqb.mjs → CountMenu-DCmA6HdK.mjs} +1 -1
  231. package/dist/web-components/viewer/Cue-BjbVzrpl.mjs +1 -0
  232. package/dist/web-components/viewer/Document-4ZQd3W3o.mjs +1 -0
  233. package/dist/web-components/viewer/{DomLayers-CGkDtemL.mjs → DomLayers-BCwCxPDU.mjs} +1 -1
  234. package/dist/web-components/viewer/Download-CL4IClAD.mjs +1 -0
  235. package/dist/web-components/viewer/EntryBodies-e40y47bl.mjs +1 -0
  236. package/dist/web-components/viewer/EntryThumbnail-B_dP3w4o.mjs +1 -0
  237. package/dist/web-components/viewer/{FieldPill-DFXGWrvB.mjs → FieldPill-Hse1cDBE.mjs} +1 -1
  238. package/dist/web-components/viewer/FrameAnimation-CE218DCr.mjs +1 -0
  239. package/dist/web-components/viewer/Gallery-F2sVj4ph.mjs +1 -0
  240. package/dist/web-components/viewer/{HideToggle-DP5kHzWM.mjs → HideToggle-CYoqe_ez.mjs} +1 -1
  241. package/dist/web-components/viewer/ImageControls-C2G4x2Es.mjs +1 -0
  242. package/dist/web-components/viewer/LanguageChoice-BmO-322r.mjs +1 -0
  243. package/dist/web-components/viewer/LightboxView-DKR8dXcg.mjs +1 -0
  244. package/dist/web-components/viewer/ListEnd-DX1jsvJk.mjs +1 -0
  245. package/dist/web-components/viewer/{MapView-BN9wXQKV.mjs → MapView-Df0wZjCh.mjs} +2 -2
  246. package/dist/web-components/viewer/MediaBody-CataNonO.mjs +1 -0
  247. package/dist/web-components/viewer/MediaBody-SkIgrEMj.mjs +1 -0
  248. package/dist/web-components/viewer/{NavDate-C2-wwLuB.mjs → NavDate-BZgeaMG9.mjs} +1 -1
  249. package/dist/web-components/viewer/{Navigator-C3jghOd3.mjs → Navigator-Co76p-1n.mjs} +1 -1
  250. package/dist/web-components/viewer/PagerLayout-tUkN1-FV.mjs +1 -0
  251. package/dist/web-components/viewer/PanelPart-Cl4Sst60.mjs +1 -0
  252. package/dist/web-components/viewer/{PartOfManifest-D22yMgCf.mjs → PartOfManifest-DXnbEPzS.mjs} +1 -1
  253. package/dist/web-components/viewer/PlaceBox-xrJ4CGdN.mjs +1 -0
  254. package/dist/web-components/viewer/Placeholder-B1AcizHL.mjs +1 -0
  255. package/dist/web-components/viewer/Search-DTg1cHZ3.mjs +1 -0
  256. package/dist/web-components/viewer/StandaloneItems-BpBEQG8i.mjs +1 -0
  257. package/dist/web-components/viewer/{Steps-Bw32X5xO.mjs → Steps-SpwMQdCL.mjs} +1 -1
  258. package/dist/web-components/viewer/{TargetItems-DLhUH1Gq.mjs → TargetItems-B6Icep5k.mjs} +1 -1
  259. package/dist/web-components/viewer/Transcript-rTAhuXCF.mjs +1 -0
  260. package/dist/web-components/viewer/Transport-vKIDALE-.mjs +1 -0
  261. package/dist/web-components/viewer/Transport-z_kdVisw.mjs +1 -0
  262. package/dist/web-components/viewer/annotation-collection-B7pZiLVk.mjs +1 -0
  263. package/dist/web-components/viewer/annotation-name-BKj1O9lA.mjs +1 -0
  264. package/dist/web-components/viewer/{annotations-content-CbA3eOIC.mjs → annotations-content-9AtLlPNn.mjs} +1 -1
  265. package/dist/web-components/viewer/cloverEngine-jRrYLrWa.mjs +164 -0
  266. package/dist/web-components/viewer/{content-state-reader-C7UBMOq3.mjs → content-state-reader-CPvkju6Q.mjs} +1 -1
  267. package/dist/web-components/viewer/dragToClose-Co9kGk9q.mjs +1 -0
  268. package/dist/web-components/viewer/{fetchManifest-C2Yxg3x9.mjs → fetchManifest-D7N9WhhF.mjs} +1 -1
  269. package/dist/web-components/viewer/{host-CZeyjCKR.mjs → host-DMD9LE4H.mjs} +1 -1
  270. package/dist/web-components/viewer/image-layers-x_shzPvu.mjs +1 -0
  271. package/dist/web-components/viewer/index.mjs +1 -1
  272. package/dist/web-components/viewer/{link-DssZ0Z2N.mjs → link-DikPGzNO.mjs} +1 -1
  273. package/dist/web-components/viewer/overlayImage-33kKKB0T.mjs +1 -0
  274. package/dist/web-components/viewer/range-regions-TH6WWGTT.mjs +1 -0
  275. package/dist/web-components/viewer/{renderers-DLoqv3QO.mjs → renderers-BxePmixF.mjs} +1 -1
  276. package/dist/web-components/viewer/{save-file-CJT5p5Hg.mjs → save-file-QXKiPlST.mjs} +1 -1
  277. package/dist/web-components/viewer/{search-PhOwMKHi.mjs → search-B_NePyas.mjs} +1 -1
  278. package/dist/web-components/viewer/styles-Bedyz7_l.mjs +1 -0
  279. package/dist/web-components/viewer/useControlsVisibility-Cu-jTDzs.mjs +1 -0
  280. package/dist/web-components/viewer/useLazyPanelPane-BhLtRixT.mjs +1 -0
  281. package/dist/web-components/viewer/viewer-nfPJPwwt.mjs +29 -0
  282. package/dist/web-components/viewer/{vtt-1Pk7Dhsj.mjs → vtt-CUn4h5JB.mjs} +1 -1
  283. package/dist/web-components/viewer-DN2Mo3vc.mjs +1 -0
  284. package/dist/web-components/{vtt-CacHieeN.mjs → vtt-C5M5WPSG.mjs} +1 -1
  285. package/package.json +1 -1
  286. package/dist/templates/shared/LightboxBody.mjs +0 -9
  287. package/dist/web-components/About-DhOGPFaI.mjs +0 -1
  288. package/dist/web-components/AnnotationItems-CNP4CJiT.mjs +0 -1
  289. package/dist/web-components/Body-DaY1UJIy.mjs +0 -1
  290. package/dist/web-components/BodyUnloadable-DcTM7hHF.mjs +0 -1
  291. package/dist/web-components/CanvasView-BWQ4SK2b.mjs +0 -2
  292. package/dist/web-components/CaptionDetails-DSziiuQV.mjs +0 -1
  293. package/dist/web-components/ChoiceMenu-DTuEEUeM.mjs +0 -1
  294. package/dist/web-components/Collection-B9swJtPW.mjs +0 -1
  295. package/dist/web-components/ControlMenu-Crtho2cs.mjs +0 -1
  296. package/dist/web-components/Cue-CbZaGwZh.mjs +0 -1
  297. package/dist/web-components/Document-BfltLWZZ.mjs +0 -1
  298. package/dist/web-components/DocumentPanel-ZSe40cV4.mjs +0 -1
  299. package/dist/web-components/FrameAnimation-IfR1czfc.mjs +0 -1
  300. package/dist/web-components/Gallery-DD06BDQo.mjs +0 -1
  301. package/dist/web-components/Items-BHzT9A73.mjs +0 -1
  302. package/dist/web-components/Label-KabnxuMN.mjs +0 -1
  303. package/dist/web-components/LightboxBody-BhRhdXo6.mjs +0 -1
  304. package/dist/web-components/ListEnd-CbwNlty-.mjs +0 -1
  305. package/dist/web-components/LoadedCanvas-CdZ5WOWz.mjs +0 -1
  306. package/dist/web-components/LoadedMap-DQyQVRVQ.mjs +0 -1
  307. package/dist/web-components/MapView-duA5WGsu.mjs +0 -3
  308. package/dist/web-components/Markup-D-kioDf9.mjs +0 -2
  309. package/dist/web-components/MediaBody-CoOiVXcv.mjs +0 -1
  310. package/dist/web-components/MediaBody-d8ErTuwT.mjs +0 -1
  311. package/dist/web-components/PagerLayout-CvOmKtSW.mjs +0 -1
  312. package/dist/web-components/Panel-CIdjOznL.mjs +0 -1
  313. package/dist/web-components/PlaceBox-BtIbIotm.mjs +0 -1
  314. package/dist/web-components/Placeholder-TIyj4ZjR.mjs +0 -1
  315. package/dist/web-components/Provider-C8se8i4I.mjs +0 -1
  316. package/dist/web-components/Root-CAJB0-Mh.mjs +0 -1
  317. package/dist/web-components/Scene-Ctcdt7CD.mjs +0 -1
  318. package/dist/web-components/SceneView-B6bEx_7x.mjs +0 -1
  319. package/dist/web-components/Timeline-CfIF4APc.mjs +0 -1
  320. package/dist/web-components/canvas-CWf_Fag8.mjs +0 -1
  321. package/dist/web-components/cloverEngine-6djEHNCD.mjs +0 -164
  322. package/dist/web-components/dragToClose-C-Pf1IeO.mjs +0 -1
  323. package/dist/web-components/es-BYfHUZ7P.mjs +0 -1
  324. package/dist/web-components/fi-B5y2qr8T.mjs +0 -1
  325. package/dist/web-components/fr-ChezCx6V.mjs +0 -1
  326. package/dist/web-components/fromManifest-gg5Wx14y.mjs +0 -1
  327. package/dist/web-components/glyphs-JYl2STEr.mjs +0 -1
  328. package/dist/web-components/hooks-x7rO95CS.mjs +0 -1
  329. package/dist/web-components/image-layers-BjbeyHBS.mjs +0 -1
  330. package/dist/web-components/index-BZ7b9k0N.mjs +0 -1
  331. package/dist/web-components/items-CnAIl9fS.mjs +0 -1
  332. package/dist/web-components/items-F6hJgdAS.mjs +0 -1
  333. package/dist/web-components/label-CI88KH2_.mjs +0 -1
  334. package/dist/web-components/layout-De1MOSYe.mjs +0 -1
  335. package/dist/web-components/logo-Ckwj7FlP.mjs +0 -1
  336. package/dist/web-components/nb-8J22f9Td.mjs +0 -1
  337. package/dist/web-components/nn-Dv1EvzI1.mjs +0 -1
  338. package/dist/web-components/no-8J22f9Td.mjs +0 -1
  339. package/dist/web-components/panClearOfControls-ac9uf-Qs.mjs +0 -1
  340. package/dist/web-components/part-CXts97_M.mjs +0 -1
  341. package/dist/web-components/playerSurface-HYwEwPK6.mjs +0 -1
  342. package/dist/web-components/pt-DWYQkATt.mjs +0 -1
  343. package/dist/web-components/readingLanguages-fs_HqvqQ.mjs +0 -1
  344. package/dist/web-components/rendererSurface-C0aKlE0v.mjs +0 -22
  345. package/dist/web-components/search-CkM0O0Z1.mjs +0 -1
  346. package/dist/web-components/shared-MTsMddHx.mjs +0 -1
  347. package/dist/web-components/styles-CZV1nbBQ.mjs +0 -1
  348. package/dist/web-components/useScrollTrack-CEsOU2yT.mjs +0 -1
  349. package/dist/web-components/viewer/AnnotationItems-CyhVcRFc.mjs +0 -1
  350. package/dist/web-components/viewer/AnnotationState-Bjztkobn.mjs +0 -1
  351. package/dist/web-components/viewer/Annotations-Dh_8Tzi0.mjs +0 -2
  352. package/dist/web-components/viewer/Annotations-wwuOCxzI.mjs +0 -1
  353. package/dist/web-components/viewer/CaptionDetails-BwCTovy_.mjs +0 -1
  354. package/dist/web-components/viewer/Collection-DSBxCmXw.mjs +0 -1
  355. package/dist/web-components/viewer/Connected-CL3N8F2J.mjs +0 -1
  356. package/dist/web-components/viewer/Connected-DTk1jlyI.mjs +0 -1
  357. package/dist/web-components/viewer/Contents-DrXckx7d.mjs +0 -1
  358. package/dist/web-components/viewer/ControlMenu-Bp91s-g_.mjs +0 -1
  359. package/dist/web-components/viewer/Cue-C-aF8peC.mjs +0 -1
  360. package/dist/web-components/viewer/Document-BN1rICu3.mjs +0 -1
  361. package/dist/web-components/viewer/DocumentPanel-CEesxdeY.mjs +0 -1
  362. package/dist/web-components/viewer/Download-CawEl9MN.mjs +0 -1
  363. package/dist/web-components/viewer/EntryBodies-nYHMwSSM.mjs +0 -1
  364. package/dist/web-components/viewer/EntryThumbnail-DrO_0SzR.mjs +0 -1
  365. package/dist/web-components/viewer/FrameAnimation-CZfzpxaD.mjs +0 -1
  366. package/dist/web-components/viewer/Gallery-MWHtvjti.mjs +0 -1
  367. package/dist/web-components/viewer/LanguageChoice-C50T7dPI.mjs +0 -1
  368. package/dist/web-components/viewer/LightboxBody-C2T7IC29.mjs +0 -1
  369. package/dist/web-components/viewer/ListEnd-BDuOx__m.mjs +0 -1
  370. package/dist/web-components/viewer/MediaBody-CEyswliX.mjs +0 -1
  371. package/dist/web-components/viewer/MediaBody-Dw3DWDjc.mjs +0 -1
  372. package/dist/web-components/viewer/PagerLayout-Cg2NpqoD.mjs +0 -1
  373. package/dist/web-components/viewer/PlaceBox-Dckw4Sfk.mjs +0 -1
  374. package/dist/web-components/viewer/Placeholder-NYVWYg5Q.mjs +0 -1
  375. package/dist/web-components/viewer/Search-DC259m4f.mjs +0 -1
  376. package/dist/web-components/viewer/StandaloneItems-E4kpMne9.mjs +0 -1
  377. package/dist/web-components/viewer/Transcript-D_VGJQxn.mjs +0 -1
  378. package/dist/web-components/viewer/annotation-collection-DZHa18ir.mjs +0 -1
  379. package/dist/web-components/viewer/annotation-name-BaNdW2Xk.mjs +0 -1
  380. package/dist/web-components/viewer/cloverEngine-C04bCSFR.mjs +0 -164
  381. package/dist/web-components/viewer/image-layers-B09fporZ.mjs +0 -1
  382. package/dist/web-components/viewer/overlayImage-BR3eJCKq.mjs +0 -1
  383. package/dist/web-components/viewer/range-regions-By6L5JOK.mjs +0 -1
  384. package/dist/web-components/viewer/styles-NZLnZPAC.mjs +0 -1
  385. package/dist/web-components/viewer/viewer-D30YHqyF.mjs +0 -29
  386. package/dist/web-components/viewer-CH7re5OO.mjs +0 -1
@@ -1,62 +1,138 @@
1
1
  "use client";
2
- import { jsxs, jsx } from "react/jsx-runtime";
3
- import { useState } from "react";
2
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
3
+ import { useState, useCallback } from "react";
4
+ import { useGivenAnnotations } from "../shared/givenAnnotations.mjs";
4
5
  import { preloadLightbox, Lightbox } from "../shared/Lightbox.mjs";
5
6
  import { titled } from "../../ui/heading.mjs";
6
7
  import { useUniqueId } from "../../ui/useUniqueId.mjs";
7
8
  import { Root } from "../../components/Root/Root.mjs";
9
+ import { useCloverSelector } from "../../react/context.mjs";
8
10
  import { Label } from "../../components/Label/Label.mjs";
9
11
  import { Summary } from "../../components/Primitives/Primitives.mjs";
10
12
  import { Status } from "../../components/Status/Status.mjs";
11
13
  import { Items } from "../../components/Items/Items.mjs";
12
14
  const below = (level) => level + 1;
15
+ const length = (value) => typeof value === "number" ? `${value}px` : value;
13
16
  function Gallery({
14
17
  className,
15
18
  size,
19
+ height = "auto",
20
+ gap,
21
+ items = "grid",
22
+ secondary,
23
+ summary = true,
24
+ lightboxItems = "slider",
25
+ panel = true,
26
+ defaultPanelOpen = true,
27
+ panelLayout = "accordion",
28
+ panelSections,
29
+ panelLabels,
30
+ download = true,
31
+ languages = true,
32
+ storageKey = "clover-template-gallery",
16
33
  headingLevel = 2,
34
+ collapseControls,
17
35
  style,
18
36
  ...root
19
37
  }) {
20
38
  const [open, setOpen] = useState(false);
39
+ const close = useCallback(() => setOpen(false), []);
21
40
  const title = titled(
22
41
  headingLevel,
23
42
  `${useUniqueId().replace(/:/g, "")}-title`
24
43
  );
44
+ const fixed = height !== "auto";
45
+ const vars = {
46
+ ...size && { "--clover-items-size": size },
47
+ ...fixed && { "--clover-template-gallery-height": length(height) },
48
+ ...gap != null && { "--clover-template-gallery-gap": length(gap) }
49
+ };
25
50
  return /* @__PURE__ */ jsxs(
26
51
  Root,
27
52
  {
28
53
  className: ["clover-template-gallery", className].filter(Boolean).join(" "),
29
- style: size ? { ...style, "--clover-items-size": size } : style,
54
+ style: { ...style, ...vars },
55
+ "data-height": fixed ? "fixed" : "auto",
30
56
  onPointerOver: preloadLightbox,
31
57
  onFocus: preloadLightbox,
32
58
  ...title.group,
33
59
  ...root,
34
60
  children: [
35
- /* @__PURE__ */ jsxs("header", { className: "clover-template-gallery-header", children: [
36
- /* @__PURE__ */ jsx(
37
- Label,
38
- {
39
- as: title.as,
40
- className: "clover-template-gallery-title",
41
- ...title.title
42
- }
43
- ),
44
- /* @__PURE__ */ jsx(Summary, { className: "clover-template-gallery-summary" })
45
- ] }),
46
- /* @__PURE__ */ jsx(Status, {}),
47
- /* @__PURE__ */ jsx(Items, { layout: "grid", onSelect: () => setOpen(true) }),
61
+ /* @__PURE__ */ jsx(
62
+ GalleryGrid,
63
+ {
64
+ title,
65
+ layout: items === "masonry" ? "masonry" : "grid",
66
+ secondary,
67
+ summary,
68
+ onOpen: () => setOpen(true)
69
+ }
70
+ ),
48
71
  /* @__PURE__ */ jsx(
49
72
  Lightbox,
50
73
  {
51
74
  open,
52
- onClose: () => setOpen(false),
53
- headingLevel: below(headingLevel)
75
+ onClose: close,
76
+ headingLevel: below(headingLevel),
77
+ items: lightboxItems,
78
+ panel,
79
+ defaultPanelOpen,
80
+ panelLayout,
81
+ panelSections,
82
+ panelLabels,
83
+ download,
84
+ languages,
85
+ storageKey,
86
+ collapseControls
54
87
  }
55
88
  )
56
89
  ]
57
90
  }
58
91
  );
59
92
  }
93
+ function GalleryGrid({
94
+ title,
95
+ layout,
96
+ secondary,
97
+ summary,
98
+ onOpen
99
+ }) {
100
+ const collection = useCloverSelector(
101
+ (state) => state.throughCollection ? state.collection : null
102
+ );
103
+ const set = useGivenAnnotations();
104
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
105
+ /* @__PURE__ */ jsxs("header", { className: "clover-template-gallery-header", children: [
106
+ /* @__PURE__ */ jsx(
107
+ Label,
108
+ {
109
+ as: title.as,
110
+ className: "clover-template-gallery-title clover-template-title clover-title",
111
+ label: set ? set.label : collection == null ? void 0 : collection.label,
112
+ ...title.title
113
+ }
114
+ ),
115
+ summary && !set && /* @__PURE__ */ jsx(
116
+ Summary,
117
+ {
118
+ className: "clover-template-gallery-summary",
119
+ value: collection == null ? void 0 : collection.summary
120
+ }
121
+ )
122
+ ] }),
123
+ /* @__PURE__ */ jsx(Status, { loading: collection || set ? false : void 0 }),
124
+ /* @__PURE__ */ jsx(
125
+ Items,
126
+ {
127
+ layout,
128
+ secondary,
129
+ of: set ? "annotations" : collection ? "members" : "views",
130
+ singleItem: true,
131
+ onSelect: onOpen
132
+ }
133
+ )
134
+ ] });
135
+ }
60
136
  export {
61
137
  Gallery
62
138
  };
@@ -3,6 +3,11 @@
3
3
  import * as P4 from '@iiif/parser/presentation-4/types';
4
4
  import React from 'react';
5
5
 
6
+ /**
7
+ * IIIF language maps as text: the closest language to the reader's, and that language's
8
+ * tag, so the text can carry a `lang` attribute.
9
+ */
10
+ export type LanguageMapLike = string | Record<string, string[] | string | undefined> | null | undefined;
6
11
  export type Presentation4Canvas = P4.Canvas;
7
12
  export type Presentation4Scene = P4.Scene;
8
13
  export type Presentation4Timeline = P4.Timeline;
@@ -142,21 +147,184 @@ export interface RootProps extends Omit<React.HTMLAttributes<HTMLElement>, "chil
142
147
  */
143
148
  annotationPages?: "view" | "all";
144
149
  /**
145
- * Where the reader is, as a IIIF content state, whenever it settles: after a move, a
146
- * pan or zoom, or a pause or seek in media. Debounced, and only when it changed.
150
+ * Where the reader is, as a IIIF content state, as it changes: a move, a pan or zoom,
151
+ * or a pause or seek in media. At most every 150ms while it moves, always its last
152
+ * place, and only when it changed.
147
153
  */
148
154
  onContentStateChange?: (state: ContentStateOutput) => void;
149
155
  /** The element to render. Default `div`. */
150
156
  as?: React.ElementType;
151
157
  children?: React.ReactNode;
152
158
  }
159
+ /** A region of the image as shares of it: 0 to 1 across and down. */
160
+ export interface RegionShare {
161
+ x: number;
162
+ y: number;
163
+ width: number;
164
+ height: number;
165
+ }
153
166
  /**
154
- * A scrolling row of thumbnails (`slider`), a column, a wrapping grid, or one item at a
155
- * time (`pager`: Previous, Position and Next).
167
+ * A small picture of a IIIF resource, for a list or a strip of them.
168
+ *
169
+ * - The resource's own `thumbnail` comes first; then, for a Canvas, the first image it
170
+ * paints; then its placeholder or accompanying Canvas's (video and sound).
171
+ * - An image service is asked for nothing until its own `info.json` has been read (the
172
+ * renderer's cached fetch, so a Canvas shown later does not ask again), and then only
173
+ * as strictly as it says it can answer (`sizedImageUrl`): never more than the image has,
174
+ * nor than its limits, at level 0 only a size it lists (Mat, 2026-10-24: "be
175
+ * responsible when making IIIF image server requests"). What a manifest says of a
176
+ * service is not trusted to say what its server does.
177
+ * - Without a service, the image itself is used.
156
178
  */
157
- export type ItemsLayout = "slider" | "list" | "grid" | "pager";
179
+ export interface ThumbnailSource {
180
+ /** Ready to use: an image with no service. */
181
+ src?: string;
182
+ /** An image service: its `info.json` is read before a URL is made (`resolveThumbnail`). */
183
+ service?: string;
184
+ /**
185
+ * Only part of the image: shares of it (a target's region), or a region in Image API
186
+ * syntax in the service's own pixels (a painting's selector), read against its `info.json`.
187
+ */
188
+ region?: RegionShare | string;
189
+ /** Used if the service cannot answer. */
190
+ fallback?: string;
191
+ }
192
+ /**
193
+ * What `Items` shows: light models of a Manifest's views or a Collection's members, never
194
+ * the resources themselves, so a long sequence costs a few fields per item.
195
+ *
196
+ * Memoized on the resource object, as the selectors are.
197
+ */
198
+ export interface ItemPart {
199
+ id: string;
200
+ type: string;
201
+ label?: LanguageMapLike;
202
+ /** The resource, for a thumbnail and for `renderItem`. */
203
+ resource: unknown;
204
+ /** Seconds, for video and sound. */
205
+ duration?: number;
206
+ /** What it mostly paints: `Image`, `Video`, `Audio` (`Sound` in Presentation 3) or `Model`. */
207
+ media?: string;
208
+ /**
209
+ * Its picture, where it is not the resource's own: a region of its Canvas (a content
210
+ * state's target, Cookbook 0540). Null for none.
211
+ */
212
+ source?: ThumbnailSource | null;
213
+ }
214
+ export interface ItemModel {
215
+ /** The first Canvas of a view, or a member's id. What selecting it goes to. */
216
+ id: string;
217
+ /** A Canvas view: one Canvas, or a spread. A member: itself. */
218
+ parts: ItemPart[];
219
+ label?: LanguageMapLike;
220
+ summary?: LanguageMapLike;
221
+ /** A member's date for navigation, as written (Cookbook 0318). */
222
+ navDate?: string;
223
+ /** Where a link to a member goes: its `homepage`, else its id. */
224
+ href?: string;
225
+ /** That homepage's own language, where its `language` gives one. */
226
+ hrefLang?: string;
227
+ }
228
+ /** The line under an item's label: its summary, its date (`navDate`), or neither. */
229
+ export type ItemSecondary = "summary" | "navDate" | "none";
230
+ /**
231
+ * A scrolling row of thumbnails (`slider`), a column, a wrapping grid, a grid whose
232
+ * pictures keep their proportions (`masonry`), or one item at a time (`pager`: Previous,
233
+ * Position and Next).
234
+ */
235
+ export type ItemsLayout = "slider" | "list" | "grid" | "masonry" | "pager";
236
+ export interface ItemsProps extends Omit<React.HTMLAttributes<HTMLElement>, "onSelect" | "children"> {
237
+ /**
238
+ * A scrolling row (the default), a column, a wrapping grid, `masonry`, or `pager`:
239
+ * Previous, Position and Next, stepping one item at a time, with no thumbnails.
240
+ * `masonry` is a grid whose pictures keep their own proportions, each item packed up
241
+ * under the one above it, still in reading order, left to right.
242
+ */
243
+ layout?: ItemsLayout;
244
+ /**
245
+ * The line under an item's label, where it has one (a Collection's members do): its
246
+ * `summary` (the default), its `navDate`, or `none`. Default `"summary"`.
247
+ */
248
+ secondary?: ItemSecondary;
249
+ /**
250
+ * The pager's size: `large` (the default), round controls; or `small`, its steps and
251
+ * count as Search's are, for a header's line. Default `"large"`.
252
+ */
253
+ size?: "large" | "small";
254
+ /**
255
+ * Inside a `Root`: the Manifest's views (default), the members of the Collection it
256
+ * belongs to, choosing one to show, a content state's targets, where it names two or
257
+ * more (Cookbook 0540), each opening its Manifest at its place, or annotations walked as
258
+ * one whole: the AnnotationPage or AnnotationCollection given as the content, else the
259
+ * AnnotationCollection its annotation pages are part of (Cookbook 0309), each picked
260
+ * and framed on its Canvas.
261
+ */
262
+ of?: "views" | "members" | "targets" | "annotations";
263
+ /**
264
+ * Standalone: a Collection (its members), a Manifest (its views) or a URL to one. Inside
265
+ * a `Root`, leave it out to list the Root's views.
266
+ */
267
+ iiifContent?: IIIFContent;
268
+ /** Standalone: a list of IIIF resources (Manifests, Collections, Canvases) as they are. */
269
+ items?: unknown[];
270
+ /**
271
+ * `id` selects: a listbox whose options go to a view (in a `Root`). `homepage` leaves: a
272
+ * list of links to each item's `homepage`. Defaults to `id` for views and `homepage`
273
+ * for a Collection's members or a list.
274
+ */
275
+ navigation?: "id" | "homepage";
276
+ /**
277
+ * An item was chosen, with the click's or the key's own event. For a link, call
278
+ * `event.preventDefault()` to stay on the page and handle it yourself.
279
+ */
280
+ onSelect?: (item: ItemModel, event: React.SyntheticEvent) => void;
281
+ /** Standalone: show the resource's label, summary and homepage link. Default true. */
282
+ header?: boolean;
283
+ /**
284
+ * Standalone: the level of the header's title, to fit the outline of the page around
285
+ * it (a slider under an `h2` takes 3). Default 2.
286
+ */
287
+ headingLevel?: number;
288
+ /** Pixels requested for each thumbnail's longer side. Default 200. */
289
+ thumbnailSize?: number;
290
+ /**
291
+ * Inside a `Root`: list the views even where there is only one, as a gallery's grid
292
+ * does. The pager, with nothing to step to, still draws nothing. Default `false`: one
293
+ * view has nothing to choose between.
294
+ */
295
+ singleItem?: boolean;
296
+ /** Standalone: credentials, headers and `fetch`. In a `Root`, the Root's are used. */
297
+ request?: CloverRequest;
298
+ /** Standalone: the language to read IIIF text in. */
299
+ language?: string;
300
+ /**
301
+ * Clover's higher-contrast mode: the accent kept to rings, outlines and marks, and never
302
+ * under words or a glyph, where the controls' dark fill takes its place, edged in the
303
+ * accent. Inside a `Root`, the Root's too; on wherever the reader's system asks for more
304
+ * contrast. Default `false`.
305
+ */
306
+ highContrast?: boolean;
307
+ /** Replace an item's figure with your own. */
308
+ renderItem?: (item: ItemModel, state: {
309
+ selected: boolean;
310
+ }) => React.ReactNode;
311
+ as?: React.ElementType;
312
+ }
313
+ /**
314
+ * A section `Panel` draws by itself, from what the Root's resource holds. `sections`
315
+ * chooses among them; each still shows only where there is data for it.
316
+ */
317
+ export type PanelSection = "about" | "targets" | "collection" | "contents" | "search" | "map" | "transcript" | "annotations";
158
318
  /** How the sections are laid out. */
159
319
  export type SectionsLayout = "tabs" | "accordion";
320
+ /**
321
+ * What a page calls a section, in place of Clover's own word for it: its words, taken to
322
+ * be in the page's language, or its words by language tag, one of which the tab carries
323
+ * as its `lang` where it is not the page's (WCAG 3.1.2).
324
+ */
325
+ export type PanelSectionLabel = string | Readonly<Record<string, string>>;
326
+ /** A label for any of the default sections, by its value. */
327
+ export type PanelSectionLabels = Partial<Record<PanelSection, PanelSectionLabel>>;
160
328
  /** How an information panel lays out its sections. */
161
329
  export type PanelLayout = SectionsLayout;
162
330
  export type DefaultProps = Omit<RootProps, "children"> & {
@@ -180,6 +348,19 @@ export type DefaultProps = Omit<RootProps, "children"> & {
180
348
  * stacked boxes each opened by its heading, or `"tabs"`.
181
349
  */
182
350
  panelLayout?: PanelLayout;
351
+ /**
352
+ * The panel's sections, from Clover's own: with
353
+ * `["contents", "search", "transcript", "annotations"]` it has those four, each still
354
+ * only where the resource has data for it, and no panel at all where it has none of
355
+ * them. Default: every section.
356
+ */
357
+ panelSections?: readonly PanelSection[];
358
+ /**
359
+ * What a panel section's tab or heading says, in place of Clover's own word for it:
360
+ * `{ annotations: "Chapters" }`, or a word by language tag to say it in several (the
361
+ * Panel's `labels`).
362
+ */
363
+ panelLabels?: PanelSectionLabels;
183
364
  /** The downloads, from a Download button beside the panel's About heading. Default `true`. */
184
365
  download?: boolean;
185
366
  /**
@@ -189,6 +370,11 @@ export type DefaultProps = Omit<RootProps, "children"> & {
189
370
  languages?: boolean;
190
371
  /** The thumbnails under the Body: a layout, or `false` for none. Default `slider`. */
191
372
  items?: Exclude<ItemsLayout, "pager"> | false;
373
+ /**
374
+ * The thumbnails even where the resource has one view, which has nothing to choose
375
+ * between. Default `false`.
376
+ */
377
+ singleItem?: boolean;
192
378
  /**
193
379
  * Where the panel's width is remembered once the reader drags its bar
194
380
  * (`localStorage`). Default `"clover-template-default"`; `false` forgets it.
@@ -201,6 +387,12 @@ export type DefaultProps = Omit<RootProps, "children"> & {
201
387
  * `--clover-body-height` tall, and the layout as tall as it needs.
202
388
  */
203
389
  fill?: boolean;
390
+ /**
391
+ * When the Body's view controls (zoom, the turns, reset, full screen) wait behind
392
+ * More: `"auto"` (the default), only where its row cannot hold them all; `"always"`.
393
+ * The Body's `collapseControls`.
394
+ */
395
+ collapseControls?: "auto" | "always";
204
396
  };
205
397
  /**
206
398
  * The Viewer's own layout, drawn when no `template` is given: Clover 3.x's Viewer, built
@@ -214,13 +406,18 @@ export type DefaultProps = Omit<RootProps, "children"> & {
214
406
  * uncovered: a click there, Escape or the panel's close button puts it away. Size it with
215
407
  * `--clover-body-height`.
216
408
  */
217
- export declare function Default({ className, header, headingLevel, panel, defaultPanelOpen, panelLayout, download, languages, items, storageKey, fill, ...root }: DefaultProps): React.JSX.Element;
409
+ export declare function Default({ className, header, headingLevel, panel, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, items, singleItem, storageKey, fill, collapseControls, ...root }: DefaultProps): React.JSX.Element;
218
410
  export type DocumentProps = Omit<RootProps, "children"> & {
219
411
  /**
220
412
  * Whether the page thumbnails start shown beside the page. Default `true`. On a phone,
221
413
  * where they would float over the page, they start put away.
222
414
  */
223
415
  defaultSidebarOpen?: boolean;
416
+ /**
417
+ * The page thumbnails, and their toggle, even where the resource has one page, which
418
+ * has nothing to choose between. Default `false`.
419
+ */
420
+ singleItem?: boolean;
224
421
  /**
225
422
  * Whether the information panel starts open beside the page. Default `false`. Where it
226
423
  * has no room there and would slide over the page, it starts closed.
@@ -231,6 +428,19 @@ export type DocumentProps = Omit<RootProps, "children"> & {
231
428
  * Default's), stacked boxes each opened by its heading, or `"tabs"`.
232
429
  */
233
430
  panelLayout?: PanelLayout;
431
+ /**
432
+ * The panel's sections, from Clover's own: with
433
+ * `["contents", "search", "transcript", "annotations"]` it has those four, each still
434
+ * only where the resource has data for it, and no panel at all where it has none of
435
+ * them. Default: every section.
436
+ */
437
+ panelSections?: readonly PanelSection[];
438
+ /**
439
+ * What a panel section's tab or heading says, in place of Clover's own word for it:
440
+ * `{ annotations: "Chapters" }`, or a word by language tag to say it in several (the
441
+ * Panel's `labels`).
442
+ */
443
+ panelLabels?: PanelSectionLabels;
234
444
  /** The downloads in the toolbar, as links: the page's and the Manifest's `rendering`. Default `true`. */
235
445
  download?: boolean;
236
446
  /**
@@ -249,6 +459,12 @@ export type DocumentProps = Omit<RootProps, "children"> & {
249
459
  * (`localStorage`). Default `"clover-template-document"`; `false` forgets it.
250
460
  */
251
461
  storageKey?: string | false;
462
+ /**
463
+ * When the Body's view controls (zoom, the turns, reset, full screen) wait behind
464
+ * More: `"auto"` (the default), only where its row cannot hold them all; `"always"`.
465
+ * The Body's `collapseControls`.
466
+ */
467
+ collapseControls?: "auto" | "always";
252
468
  };
253
469
  /**
254
470
  * A layout that reads like a PDF viewer: a toolbar, page thumbnails down the left, and
@@ -259,36 +475,167 @@ export type DocumentProps = Omit<RootProps, "children"> & {
259
475
  * where there is room for both, and slides out over the page where there is not. Size
260
476
  * it with `--clover-template-document-height`.
261
477
  */
262
- export declare function Document({ className, defaultSidebarOpen, defaultPanelOpen, panelLayout, download, languages, headingLevel, storageKey, ...root }: DocumentProps): React.JSX.Element;
478
+ export declare function Document({ className, defaultSidebarOpen, singleItem, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, headingLevel, storageKey, collapseControls, ...root }: DocumentProps): React.JSX.Element;
263
479
  export type GalleryProps = Omit<RootProps, "children"> & {
264
480
  /** The size of a grid cell. Default `10rem`, through `--clover-items-size`. */
265
481
  size?: string;
482
+ /**
483
+ * The Gallery's height: `"auto"` (the default) grows with its grid; a number (pixels)
484
+ * or any CSS length fixes it, its padding inside, and the grid scrolls under the header.
485
+ */
486
+ height?: number | string;
487
+ /**
488
+ * The space between the grid's cells: a number (pixels) or any CSS length. Default the
489
+ * Gallery's inset, `--clover-inset`.
490
+ */
491
+ gap?: number | string;
492
+ /**
493
+ * The grid, as its Items' layout: `grid`, square cells, or `masonry`, each picture at
494
+ * its own proportions. Default `grid`.
495
+ */
496
+ items?: Extract<ItemsLayout, "grid" | "masonry">;
497
+ /**
498
+ * The line under each cell's label, where it has one (a Collection's members do): its
499
+ * `summary`, its `navDate`, or `none`. Default `summary`.
500
+ */
501
+ secondary?: ItemsProps["secondary"];
502
+ /**
503
+ * The resource's summary under the title, cut to two lines with Read more under it where
504
+ * it runs longer. Default `true`; `false` leaves it out, the title alone over the grid.
505
+ */
506
+ summary?: boolean;
507
+ /**
508
+ * How the lightbox moves on from the view it shows: a short strip of thumbnails
509
+ * (`slider`, Items' carousel), or `pager`, Previous, the position and Next. Default
510
+ * `slider`.
511
+ */
512
+ lightboxItems?: "slider" | "pager";
513
+ /**
514
+ * The information panel beside the lightbox's view, as Default's and Document's is
515
+ * beside theirs, and its toggle. Default `true`.
516
+ */
517
+ panel?: boolean;
518
+ /**
519
+ * Whether the panel starts open beside the lightbox's view. Default `true`. Where it has
520
+ * no room there and would slide over the view, it starts closed.
521
+ */
522
+ defaultPanelOpen?: boolean;
523
+ /** How the panel lays out its sections: `"accordion"` (the default) or `"tabs"`. */
524
+ panelLayout?: PanelLayout;
525
+ /**
526
+ * The panel's sections, from Clover's own: with
527
+ * `["contents", "search", "transcript", "annotations"]` it has those four, each still
528
+ * only where the resource has data for it, and no panel at all where it has none of
529
+ * them. Default: every section.
530
+ */
531
+ panelSections?: readonly PanelSection[];
532
+ /**
533
+ * What a panel section's tab or heading says, in place of Clover's own word for it:
534
+ * `{ annotations: "Chapters" }`, or a word by language tag to say it in several (the
535
+ * Panel's `labels`).
536
+ */
537
+ panelLabels?: PanelSectionLabels;
538
+ /** The downloads in the panel's About, where there is a `rendering`. Default `true`. */
539
+ download?: boolean;
540
+ /**
541
+ * The languages to read the resource in, beside the panel's About heading, where what
542
+ * it says of itself comes in several (the Panel's `languages`). Default `true`.
543
+ */
544
+ languages?: boolean;
545
+ /**
546
+ * Where the panel's width is remembered once the reader drags its bar
547
+ * (`localStorage`). Default `"clover-template-gallery"`; `false` forgets it.
548
+ */
549
+ storageKey?: string | false;
266
550
  /**
267
551
  * The title's heading level, to fit the outline of the page around the layout (under
268
552
  * an `h2`, 3). The lightbox's title is a level below it. Default 2.
269
553
  */
270
554
  headingLevel?: number;
555
+ /**
556
+ * When the Body's view controls (zoom, the turns, reset, full screen) wait behind
557
+ * More: `"auto"` (the default), only where its row cannot hold them all; `"always"`.
558
+ * Its lightbox's Body's `collapseControls`.
559
+ */
560
+ collapseControls?: "auto" | "always";
271
561
  };
272
562
  /**
273
- * A grid of the Manifest's views — a spread is one cell — that opens one in a lightbox
274
- * with the Body and the pager. Escape, the close button, or a press outside closes it,
275
- * and focus returns to the cell.
563
+ * A grid framed by what it opens, that opens a cell in a lightbox with the Body and the
564
+ * pager. A Manifest: its title and summary, and a cell for each view (a spread is one
565
+ * cell). A Collection: its own title and summary, and a cell for each member, which
566
+ * shows that Manifest in the lightbox. Escape, the close button, or a press outside
567
+ * closes it, and focus returns to the cell.
276
568
  */
277
- export declare function Gallery({ className, size, headingLevel, style, ...root }: GalleryProps): React.JSX.Element;
569
+ export declare function Gallery({ className, size, height, gap, items, secondary, summary, lightboxItems, panel, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, storageKey, headingLevel, collapseControls, style, ...root }: GalleryProps): React.JSX.Element;
278
570
  export interface LightboxProps {
279
571
  open: boolean;
280
572
  onClose: () => void;
281
573
  /** The level of its title, a level under the layout's. Default 3. */
282
574
  headingLevel?: number;
575
+ /**
576
+ * How the reader moves on from the view shown: a short strip of thumbnails (`slider`,
577
+ * Items' carousel), or `pager`, Previous, the position and Next. Default `slider`.
578
+ */
579
+ items?: "slider" | "pager";
580
+ /**
581
+ * The information panel beside the view, as every template's is (`PanelPane`): its
582
+ * toggle among the Body's controls, or on the bar beside it. Default `true`.
583
+ */
584
+ panel?: boolean;
585
+ /** Whether the panel starts open beside the view; over it, closed. Default `true`. */
586
+ defaultPanelOpen?: boolean;
587
+ /** The panel's sections as stacked boxes (`"accordion"`, the default) or tabs. */
588
+ panelLayout?: PanelLayout;
589
+ /**
590
+ * The panel's sections, from Clover's own: with
591
+ * `["contents", "search", "transcript", "annotations"]` it has those four, each still
592
+ * only where the resource has data for it, and no panel at all where it has none of
593
+ * them. Default: every section.
594
+ */
595
+ panelSections?: readonly PanelSection[];
596
+ /**
597
+ * What a panel section's tab or heading says, in place of Clover's own word for it:
598
+ * `{ annotations: "Chapters" }`, or a word by language tag to say it in several (the
599
+ * Panel's `labels`).
600
+ */
601
+ panelLabels?: PanelSectionLabels;
602
+ /** The downloads in the panel's About, where there is a `rendering`. Default `true`. */
603
+ download?: boolean;
604
+ /** The languages to read the resource in, beside the panel's About heading. Default `true`. */
605
+ languages?: boolean;
606
+ /** Where the panel's width is remembered once dragged; `false` forgets it. */
607
+ storageKey?: string | false;
608
+ /** The Body's `collapseControls`: when the view's controls collapse behind one button. */
609
+ collapseControls?: "auto" | "always";
283
610
  className?: string;
284
611
  }
285
612
  /**
286
- * The current Canvas in a modal `<dialog>`: its label, the Body, and the pager (with the
287
- * position). A native dialog keeps focus inside, closes on Escape, and returns focus to
288
- * whatever opened it. The Body mounts only while open, so it is sized when drawn, and its
289
- * code loads the first time (`preloadLightbox` starts it sooner): until then its box holds
290
- * its place, busy, while the title, Close and the pager are already there.
613
+ * The current Canvas in a modal layer over the layout, and only the layout (Mat,
614
+ * 2026-10-30: "backdrop should not extend beyond the bounds of the template"): over it,
615
+ * a step back to the level it opened from, the Manifest's label as its title (Mat,
616
+ * 2026-11-01: "the Manifest label stay up here in the title and be more obvious as a
617
+ * heading") and Close; then the Body, the view's label under it (Mat, 2026-11-01: "move
618
+ * the Canvas/Scene/Timeline label below the item"), and a short strip of thumbnails (Mat,
619
+ * 2026-11-01: "carousel by default") or the pager (with the position). A modal
620
+ * `<dialog>`'s backdrop always covers the whole window, so this is a layer in the Root, a
621
+ * `dialog` to assistive technology, named by its title: while it is open the rest of the
622
+ * Root is inert, focus is on the view in its strip (on Close with the pager), and Escape,
623
+ * Close, Back or a press on the layer outside the panel closes it, focus going back to
624
+ * what opened it.
625
+ * By default it fills the layout's bounds; `--clover-template-lightbox-inset`,
626
+ * `-backdrop` and `-radius` give it room, a backdrop and corners (`Lightbox.css`). The
627
+ * layout positions it and holds its stacking (`position: relative` and `isolation:
628
+ * isolate`, as the Gallery does), so its layer never stacks over the page around it.
629
+ *
630
+ * Beside the view, the information panel, as every template's is (`PanelPane`; Mat,
631
+ * 2026-11-01: "show the pane like we have for document/default"), its every interaction
632
+ * theirs.
633
+ *
634
+ * Its view mounts only while open, so it is sized when drawn, and its code (the Body, the
635
+ * panes and the panel's pane) loads the first time (`preloadLightbox` starts it sooner):
636
+ * until then a busy box holds its place under the title and Close. The Panel's own code
637
+ * loads as it opens, the chunk Document's is (`PanelPart`).
291
638
  */
292
- export declare function Lightbox({ open, onClose, headingLevel, className, }: LightboxProps): React.JSX.Element;
639
+ export declare function Lightbox({ open, onClose, headingLevel, items, className, ...view }: LightboxProps): React.JSX.Element;
293
640
 
294
641
  export {};