@nulib/clover 4.2.0 → 4.3.1

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 (343) hide show
  1. package/README.md +1 -1
  2. package/dist/components/Canvas/CanvasView.mjs +37 -4
  3. package/dist/components/Canvas/ChaptersMenu.mjs +6 -1
  4. package/dist/components/Canvas/ControlMenu.mjs +9 -2
  5. package/dist/components/Canvas/Controls.mjs +17 -4
  6. package/dist/components/Canvas/FrameAnimation.mjs +3 -0
  7. package/dist/components/Canvas/ImageControls.mjs +8 -3
  8. package/dist/components/Canvas/Placeholder.mjs +5 -2
  9. package/dist/components/Canvas/RowFits.mjs +3 -1
  10. package/dist/components/Canvas/media/MediaBody.mjs +41 -10
  11. package/dist/components/Canvas/media/Player.mjs +3 -0
  12. package/dist/components/Canvas/media/SeekMarks.mjs +236 -0
  13. package/dist/components/Canvas/media/Transport.mjs +29 -3
  14. package/dist/components/Canvas/media/useMediaElement.mjs +54 -19
  15. package/dist/components/Items/masonry.mjs +2 -0
  16. package/dist/components/Map/MapView.mjs +42 -2
  17. package/dist/components/Map/maplibre-sheet.mjs +5 -0
  18. package/dist/components/Map/sheet.mjs +19 -0
  19. package/dist/components/Map/worker.mjs +28 -1
  20. package/dist/components/Scene/SceneView.mjs +3 -0
  21. package/dist/core/content-state.mjs +1 -11
  22. package/dist/core/load.mjs +9 -1
  23. package/dist/core/presentation.mjs +4 -5
  24. package/dist/core/sanitize.mjs +15 -3
  25. package/dist/core/svg-shape.mjs +2 -1
  26. package/dist/core/thumbnail.mjs +15 -4
  27. package/dist/core/trusted.mjs +26 -0
  28. package/dist/core/vtt.mjs +20 -9
  29. package/dist/index.d.mts +200 -1
  30. package/dist/index.mjs +11 -0
  31. package/dist/lib/renderer/CanvasRenderer.mjs +48 -7
  32. package/dist/lib/renderer/camera/CameraAnimator.mjs +39 -20
  33. package/dist/lib/renderer/input/GestureController.mjs +15 -5
  34. package/dist/map/index.d.mts +6 -1
  35. package/dist/styles/collection-select.css +1 -0
  36. package/dist/styles/core.css +1 -0
  37. package/dist/styles/default.css +1 -0
  38. package/dist/styles/items.css +1 -0
  39. package/dist/styles/map.css +1 -0
  40. package/dist/styles/media.css +1 -0
  41. package/dist/styles/panel.css +1 -0
  42. package/dist/styles/scene.css +1 -0
  43. package/dist/styles/split.css +1 -0
  44. package/dist/styles.css +1 -1
  45. package/dist/templates/default/Default.mjs +2 -0
  46. package/dist/templates/document/Document.mjs +12 -2
  47. package/dist/templates/document/Sheets.mjs +2 -0
  48. package/dist/templates/gallery/Gallery.mjs +3 -1
  49. package/dist/templates/index.d.mts +102 -6
  50. package/dist/templates/shared/Lightbox.mjs +50 -3
  51. package/dist/templates/shared/LightboxView.mjs +3 -1
  52. package/dist/templates.css +1 -1
  53. package/dist/ui/Button.mjs +3 -1
  54. package/dist/ui/ControlCluster.mjs +6 -3
  55. package/dist/ui/Markup.mjs +8 -7
  56. package/dist/ui/Tip.mjs +6 -1
  57. package/dist/ui/adoptSheet.mjs +19 -0
  58. package/dist/ui/sheets/map.mjs +5 -0
  59. package/dist/ui/sheets/media.mjs +5 -0
  60. package/dist/ui/sheets/scene.mjs +5 -0
  61. package/dist/web-components/{About-D1TBGGPL.mjs → About-j3O9cA3r.mjs} +1 -1
  62. package/dist/web-components/{AnnotationItems-DTacmRA9.mjs → AnnotationItems-U0WmWGOh.mjs} +1 -1
  63. package/dist/web-components/{AnnotationMenu-DYc9ekWS.mjs → AnnotationMenu-C1fAWWYy.mjs} +1 -1
  64. package/dist/web-components/{AnnotationState--5ghW0C2.mjs → AnnotationState-C9UhGpsr.mjs} +1 -1
  65. package/dist/web-components/{Annotations-Bvc_FmJ5.mjs → Annotations-BtJ4IVmy.mjs} +2 -2
  66. package/dist/web-components/{Annotations-BG8lPjk1.mjs → Annotations-YcFbQRJx.mjs} +1 -1
  67. package/dist/web-components/{Body-QQ1DmnbP.mjs → Body-Ccxmucbr.mjs} +1 -1
  68. package/dist/web-components/{BodyAlert-A4xRjOKr.mjs → BodyAlert-BBSStCpI.mjs} +1 -1
  69. package/dist/web-components/Button-Bphsp8rv.mjs +1 -0
  70. package/dist/web-components/{Camera-DqT_1MgD.mjs → Camera-DSk-YFpW.mjs} +1 -1
  71. package/dist/web-components/{Canvas2DBackend-TZtR3zHf.mjs → Canvas2DBackend-CYAJ-W6-.mjs} +1 -1
  72. package/dist/web-components/CanvasView-BAJ6OYvn.mjs +2 -0
  73. package/dist/web-components/{CaptionDetails-DMRWmtaY.mjs → CaptionDetails-Dg9Y11o_.mjs} +1 -1
  74. package/dist/web-components/ChaptersMenu-i4bFwR8c.mjs +1 -0
  75. package/dist/web-components/{Chevron-DFGbSGPI.mjs → Chevron-BnlK9F4K.mjs} +1 -1
  76. package/dist/web-components/{ChoiceMenu-C80kdxvq.mjs → ChoiceMenu-YXA7Ku8M.mjs} +1 -1
  77. package/dist/web-components/{Collection-B4CxBsFL.mjs → Collection-DgSFQbN-.mjs} +1 -1
  78. package/dist/web-components/{CollectionSelect-DO8YO2p7.mjs → CollectionSelect-PUcTh3Uv.mjs} +1 -1
  79. package/dist/web-components/{Connected-sYBn_9MK.mjs → Connected-B_caNIrW.mjs} +1 -1
  80. package/dist/web-components/{Connected-CcbVqzmj.mjs → Connected-XhRc6yaA.mjs} +1 -1
  81. package/dist/web-components/{Connected-DthCPaHl.mjs → Connected-YgL5BWf5.mjs} +1 -1
  82. package/dist/web-components/{Contents-AVPYYXht.mjs → Contents-CoC4TK6G.mjs} +1 -1
  83. package/dist/web-components/ControlMenu-CYfLg3Ok.mjs +1 -0
  84. package/dist/web-components/ControlsFade-BcGL7yUH.mjs +1 -0
  85. package/dist/web-components/CountMenu-C7XawAoa.mjs +1 -0
  86. package/dist/web-components/Cue-DZJ5TBKU.mjs +1 -0
  87. package/dist/web-components/Document-DZDYR2Tk.mjs +1 -0
  88. package/dist/web-components/{DomLayers-DlRapZ1u.mjs → DomLayers-Bbrulm6v.mjs} +1 -1
  89. package/dist/web-components/{Download-Ci_JUTVd.mjs → Download-CfRPt74Y.mjs} +1 -1
  90. package/dist/web-components/{EntryBodies-C0ICfS2R.mjs → EntryBodies-Bz8hyAUW.mjs} +1 -1
  91. package/dist/web-components/{EntryThumbnail-DxHhfRo_.mjs → EntryThumbnail-R9h0AXcu.mjs} +1 -1
  92. package/dist/web-components/{FieldPill-CVfeeafm.mjs → FieldPill-DFIdy-hn.mjs} +1 -1
  93. package/dist/web-components/{FrameAnimation-AZpVvu0R.mjs → FrameAnimation-DFDuFwwt.mjs} +1 -1
  94. package/dist/web-components/Gallery-BrYWLufL.mjs +1 -0
  95. package/dist/web-components/{HideToggle-0nlIo-f8.mjs → HideToggle-geO9QfFR.mjs} +1 -1
  96. package/dist/web-components/ImageControls-B9PhCHqi.mjs +1 -0
  97. package/dist/web-components/{Items-Drd82_Jj.mjs → Items-C7wjylgH.mjs} +1 -1
  98. package/dist/web-components/{Label-BIjqJ-_T.mjs → Label-S7o8PlWU.mjs} +1 -1
  99. package/dist/web-components/{LanguageChoice-DkSc-n6g.mjs → LanguageChoice-URJJAdah.mjs} +1 -1
  100. package/dist/web-components/LightboxView-65ROPr0_.mjs +1 -0
  101. package/dist/web-components/{ListEnd-pq-BgaDI.mjs → ListEnd-B0wGr87o.mjs} +1 -1
  102. package/dist/web-components/{Loaded-CSO5NFhm.mjs → Loaded-Do53YvYw.mjs} +1 -1
  103. package/dist/web-components/{LoadedCanvas-DK6xMmM1.mjs → LoadedCanvas-BrtGPpSm.mjs} +1 -1
  104. package/dist/web-components/LoadedMap-C06TIgvf.mjs +1 -0
  105. package/dist/web-components/{Loading-CoJLSRkv.mjs → Loading-Du3wn1EM.mjs} +1 -1
  106. package/dist/web-components/{Map-BEVtD52O.mjs → Map-B6LVO0gx.mjs} +1 -1
  107. package/dist/web-components/MapView-CzV3y5iI.mjs +3 -0
  108. package/dist/web-components/Markup-DACv7sRg.mjs +2 -0
  109. package/dist/web-components/MediaBody-CcuO5IZT.mjs +1 -0
  110. package/dist/web-components/MediaBody-DGd2uFfK.mjs +1 -0
  111. package/dist/web-components/{NavDate-CYNK0Qmp.mjs → NavDate-DRKmjc54.mjs} +1 -1
  112. package/dist/web-components/{Navigator-DrYPepzN.mjs → Navigator-CA8zB6CU.mjs} +1 -1
  113. package/dist/web-components/{Pager-CN4lHURv.mjs → Pager-DWp6u3iv.mjs} +1 -1
  114. package/dist/web-components/{PagerLayout-DeqnSQcF.mjs → PagerLayout-DHRpcI8x.mjs} +1 -1
  115. package/dist/web-components/{Panel-CFYUlXup.mjs → Panel-CzUDNn8M.mjs} +1 -1
  116. package/dist/web-components/PanelPart-DKb9dXm6.mjs +1 -0
  117. package/dist/web-components/{PanelToggle-9ud55NNI.mjs → PanelToggle-D5sx5FP9.mjs} +1 -1
  118. package/dist/web-components/{PartOfManifest-KUHUq-6q.mjs → PartOfManifest-Ct-I8Ofm.mjs} +1 -1
  119. package/dist/web-components/{Pending-mcmdyZPA.mjs → Pending-f1heQNo7.mjs} +1 -1
  120. package/dist/web-components/{PlaceBox-DX4ZLDat.mjs → PlaceBox-_an9ya_W.mjs} +1 -1
  121. package/dist/web-components/Placeholder-D4-VCxeD.mjs +1 -0
  122. package/dist/web-components/{Position-DO5qg5Sp.mjs → Position-DA4rzRiy.mjs} +1 -1
  123. package/dist/web-components/{Primitives-c9sIz0oQ.mjs → Primitives-DU_VhdO2.mjs} +1 -1
  124. package/dist/web-components/{Provider-a3xY016W.mjs → Provider-Dl_t_qEC.mjs} +1 -1
  125. package/dist/web-components/{ReadMore-D_WmmKEP.mjs → ReadMore-BpA8Dex8.mjs} +1 -1
  126. package/dist/web-components/Root-DixSZV9Y.mjs +1 -0
  127. package/dist/web-components/Scene-CSaXgBNr.mjs +1 -0
  128. package/dist/web-components/SceneView-BJNlboix.mjs +1 -0
  129. package/dist/web-components/{Search-BgxEW1UT.mjs → Search-CvpKzlYP.mjs} +1 -1
  130. package/dist/web-components/{Sections-DZVrhoAC.mjs → Sections-BhfcUyaf.mjs} +1 -1
  131. package/dist/web-components/SeekMarks-BfOrFnvQ.mjs +1 -0
  132. package/dist/web-components/{StandaloneItems-6cSw7nbF.mjs → StandaloneItems-CoiceHd8.mjs} +1 -1
  133. package/dist/web-components/{Status-DHTzuTkh.mjs → Status-B4327UOL.mjs} +1 -1
  134. package/dist/web-components/{Steps-Dkpy9KiJ.mjs → Steps-ACdXJZrV.mjs} +1 -1
  135. package/dist/web-components/TargetItems-D1bLKA_B.mjs +1 -0
  136. package/dist/web-components/Timeline-DY8LpnOG.mjs +1 -0
  137. package/dist/web-components/Tip-BatwzZZo.mjs +1 -0
  138. package/dist/web-components/{Transcript-WvFFAJQM.mjs → Transcript-B1nh9UJK.mjs} +1 -1
  139. package/dist/web-components/Transport-BsjGGbFJ.mjs +1 -0
  140. package/dist/web-components/Transport-DKb3XTMA.mjs +1 -0
  141. package/dist/web-components/{annotation-collection-BkC3nBPA.mjs → annotation-collection-CtxYL-V3.mjs} +1 -1
  142. package/dist/web-components/{annotation-name-Du2KAWoD.mjs → annotation-name-KQ4wAi8-.mjs} +1 -1
  143. package/dist/web-components/{annotations-content-CEzAS-P2.mjs → annotations-content-XVgQ5me7.mjs} +1 -1
  144. package/dist/web-components/{body-DPlfbLt3.mjs → body-CbYkzpmQ.mjs} +1 -1
  145. package/dist/web-components/{canvas-BUwBftJW.mjs → canvas-Du31_Dru.mjs} +1 -1
  146. package/dist/web-components/{cloverEngine-UNw5K4Xg.mjs → cloverEngine-CuRCXZNZ.mjs} +1 -1
  147. package/dist/web-components/{content-state-reader-GgQF2MvJ.mjs → content-state-reader-DLlBY4Ox.mjs} +1 -1
  148. package/dist/web-components/controlGlyphs-ClH59vLg.mjs +1 -0
  149. package/dist/web-components/{controls-CC9G5LxK.mjs → controls-smixEi0i.mjs} +1 -1
  150. package/dist/web-components/custom-elements.json +10 -2
  151. package/dist/web-components/{downloads-CmAYeEIz.mjs → downloads-BqkNwsM0.mjs} +1 -1
  152. package/dist/web-components/{dragToClose-DK-eM097.mjs → dragToClose-2joCF413.mjs} +1 -1
  153. package/dist/web-components/{engine-Dok0z8WP.mjs → engine-DNTgJBST.mjs} +1 -1
  154. package/dist/web-components/{engines-BD2IfwQF.mjs → engines-BpFZX2dO.mjs} +1 -1
  155. package/dist/web-components/{fetchManifest-tQXcfFiz.mjs → fetchManifest-B-poGgag.mjs} +1 -1
  156. package/dist/web-components/{fromManifest-BwQdeAuL.mjs → fromManifest-Dw3BwjHM.mjs} +1 -1
  157. package/dist/web-components/{glyphs-dp_HK3Ja.mjs → glyphs-VoJVEqLE.mjs} +1 -1
  158. package/dist/web-components/hooks-Syt1XLVX.mjs +1 -0
  159. package/dist/web-components/{image-layers-xcBsiad9.mjs → image-layers-ryUJ_0bq.mjs} +1 -1
  160. package/dist/web-components/{imageService-4sFnmAFX.mjs → imageService-DBU_Xks1.mjs} +1 -1
  161. package/dist/web-components/index-DGXCFoHu.mjs +1 -0
  162. package/dist/web-components/index.d.mts +4 -2
  163. package/dist/web-components/index.mjs +1 -1
  164. package/dist/web-components/{items-BUmOy2QY.mjs → items-BQPvL5D6.mjs} +1 -1
  165. package/dist/web-components/items-TIbaHoB8.mjs +1 -0
  166. package/dist/web-components/label-Bd-QYEXn.mjs +1 -0
  167. package/dist/web-components/{layout-B29v2RKK.mjs → layout-MzMKFa5I.mjs} +1 -1
  168. package/dist/web-components/{link-Ct5PpHEY.mjs → link-BUQQE9P2.mjs} +1 -1
  169. package/dist/web-components/logo-Cn820OoX.mjs +1 -0
  170. package/dist/web-components/maplibre-sheet-CfiZ6JFk.mjs +1 -0
  171. package/dist/web-components/masonry-BZCdA3bV.mjs +1 -0
  172. package/dist/web-components/{models-BXcT4ijX.mjs → models-wl-5vW2i.mjs} +1 -1
  173. package/dist/web-components/{nodes-BleXuYE6.mjs → nodes-CmOpA3s7.mjs} +1 -1
  174. package/dist/web-components/{overlayImage-BJtfot4Y.mjs → overlayImage-tb9-Md51.mjs} +1 -1
  175. package/dist/web-components/{panel-BxxV_JkD.mjs → panel-BPVyAugu.mjs} +1 -1
  176. package/dist/web-components/part-DeZI8Hmp.mjs +1 -0
  177. package/dist/web-components/{playerSurface-BXNLaFk0.mjs → playerSurface-BxxMV-va.mjs} +1 -1
  178. package/dist/web-components/pointer-BqgxBJ82.mjs +1 -0
  179. package/dist/web-components/{provider-CPp0Sgr_.mjs → provider-B9oAQG-u.mjs} +1 -1
  180. package/dist/web-components/{range-regions-DAaOu0IS.mjs → range-regions-BFB1374L.mjs} +1 -1
  181. package/dist/web-components/{read-more-lcqGslUd.mjs → read-more-oWPk0OLi.mjs} +1 -1
  182. package/dist/web-components/{readingLanguages-FyVsSWJ8.mjs → readingLanguages-BigCi6rZ.mjs} +1 -1
  183. package/dist/web-components/rendererSurface-B_OOhxzA.mjs +22 -0
  184. package/dist/web-components/{renderers-BFS7hFVU.mjs → renderers-CBupZj8Z.mjs} +1 -1
  185. package/dist/web-components/{resource-Bufu7lAr.mjs → resource-B6uUsU6D.mjs} +1 -1
  186. package/dist/web-components/{sanitize-qIOeyIww.mjs → sanitize-BedC_UE5.mjs} +3 -3
  187. package/dist/web-components/{save-file-CoknKOPz.mjs → save-file-BaIrLp1V.mjs} +1 -1
  188. package/dist/web-components/{search-5ocrsYmT.mjs → search-DaGpvTki.mjs} +1 -1
  189. package/dist/web-components/shared-D2RadIoz.mjs +1 -0
  190. package/dist/web-components/{show-link-DBaJj4s_.mjs → show-link-Cxylys81.mjs} +1 -1
  191. package/dist/web-components/{sizedImage-jnOGcIIZ.mjs → sizedImage-DchqGFdt.mjs} +1 -1
  192. package/dist/web-components/{split-P6J0qqf5.mjs → split-oaEIep3T.mjs} +1 -1
  193. package/dist/web-components/{status-honoOMNx.mjs → status-CfCgO5OB.mjs} +1 -1
  194. package/dist/web-components/styles-DZIDbHxL.mjs +1 -0
  195. package/dist/web-components/svg-shape-D1K-WNrY.mjs +1 -0
  196. package/dist/web-components/three.mjs +1 -1
  197. package/dist/web-components/thumbnail-D83GaQ8C.mjs +1 -0
  198. package/dist/web-components/{tip-BhNI83aT.mjs → tip-CMEBtCil.mjs} +1 -1
  199. package/dist/web-components/{toggle-CJKdi5KH.mjs → toggle-3NncfBSZ.mjs} +1 -1
  200. package/dist/web-components/trusted-Bvpx307M.mjs +1 -0
  201. package/dist/web-components/{useContainerName-_48Cdi0m.mjs → useContainerName-fp0-n_9x.mjs} +1 -1
  202. package/dist/web-components/{useControlsVisibility-CieBxGnK.mjs → useControlsVisibility-BYZlgiAt.mjs} +1 -1
  203. package/dist/web-components/useLazyPanelPane-DXYGGS7f.mjs +1 -0
  204. package/dist/web-components/{useNearViewport-B34ebmIW.mjs → useNearViewport-DMqMdvue.mjs} +1 -1
  205. package/dist/web-components/{useScrollTrack-DgRGFeP5.mjs → useScrollTrack-BHuPAWxB.mjs} +1 -1
  206. package/dist/web-components/viewer/{AnnotationItems-BNA_92Dv.mjs → AnnotationItems-B5Vs0dYi.mjs} +1 -1
  207. package/dist/web-components/viewer/{AnnotationMenu-BIQYVR4N.mjs → AnnotationMenu-BO18q_Ze.mjs} +1 -1
  208. package/dist/web-components/viewer/{AnnotationState-BbwQqA1U.mjs → AnnotationState-ZPmnCpbZ.mjs} +1 -1
  209. package/dist/web-components/viewer/{Annotations-P4XzAlNc.mjs → Annotations-C46kSUA6.mjs} +1 -1
  210. package/dist/web-components/viewer/{Annotations-CZzOZAFP.mjs → Annotations-DEKa_9xz.mjs} +2 -2
  211. package/dist/web-components/viewer/{Canvas2DBackend-DFfCzyjL.mjs → Canvas2DBackend-DHSI3dKr.mjs} +1 -1
  212. package/dist/web-components/viewer/{CaptionDetails-DPtE-RQQ.mjs → CaptionDetails-BVCqV9NT.mjs} +1 -1
  213. package/dist/web-components/viewer/ChaptersMenu-CIwIM2Pb.mjs +1 -0
  214. package/dist/web-components/viewer/{ChoiceMenu-GkqyTQRQ.mjs → ChoiceMenu-Ww7lcPnq.mjs} +1 -1
  215. package/dist/web-components/viewer/{Collection-DjY_6qa6.mjs → Collection-DCYM9eE6.mjs} +1 -1
  216. package/dist/web-components/viewer/{Connected-D5T-mtiy.mjs → Connected-Bbk8M5rE.mjs} +1 -1
  217. package/dist/web-components/viewer/{Connected-DIOuI3Mv.mjs → Connected-DAOMKtJR.mjs} +1 -1
  218. package/dist/web-components/viewer/{Contents-DV-VxXuf.mjs → Contents-BnRBx3rc.mjs} +1 -1
  219. package/dist/web-components/viewer/ControlMenu-Co6yBttc.mjs +1 -0
  220. package/dist/web-components/viewer/ControlsFade-pOQ5VQ5i.mjs +1 -0
  221. package/dist/web-components/viewer/CountMenu-lu21fO_7.mjs +1 -0
  222. package/dist/web-components/viewer/Cue-oaiVO9ZO.mjs +1 -0
  223. package/dist/web-components/viewer/Document-ByBRhL68.mjs +1 -0
  224. package/dist/web-components/viewer/{DomLayers-BCwCxPDU.mjs → DomLayers-BjxGaZkt.mjs} +1 -1
  225. package/dist/web-components/viewer/{Download-CL4IClAD.mjs → Download-DhMD4AJt.mjs} +1 -1
  226. package/dist/web-components/viewer/{EntryBodies-e40y47bl.mjs → EntryBodies-DL5UolEz.mjs} +1 -1
  227. package/dist/web-components/viewer/{EntryThumbnail-B_dP3w4o.mjs → EntryThumbnail-CJisDcni.mjs} +1 -1
  228. package/dist/web-components/viewer/{FieldPill-Hse1cDBE.mjs → FieldPill-DAk6zxxD.mjs} +1 -1
  229. package/dist/web-components/viewer/{FrameAnimation-CE218DCr.mjs → FrameAnimation-DGMuFNdW.mjs} +1 -1
  230. package/dist/web-components/viewer/Gallery-CbHhyWlF.mjs +1 -0
  231. package/dist/web-components/viewer/{HideToggle-CYoqe_ez.mjs → HideToggle-C6B9B2Bo.mjs} +1 -1
  232. package/dist/web-components/viewer/ImageControls-BDx7C1q5.mjs +1 -0
  233. package/dist/web-components/viewer/{LanguageChoice-BmO-322r.mjs → LanguageChoice-BM9xZr_D.mjs} +1 -1
  234. package/dist/web-components/viewer/LightboxView-RrioB0CN.mjs +1 -0
  235. package/dist/web-components/viewer/{ListEnd-DX1jsvJk.mjs → ListEnd-8vdKw6Py.mjs} +1 -1
  236. package/dist/web-components/viewer/MapView-G3yj-Bjd.mjs +3 -0
  237. package/dist/web-components/viewer/MediaBody-BokgnTO-.mjs +1 -0
  238. package/dist/web-components/viewer/MediaBody-DPOcyiYH.mjs +1 -0
  239. package/dist/web-components/viewer/{NavDate-BZgeaMG9.mjs → NavDate-B6rCV-Cd.mjs} +1 -1
  240. package/dist/web-components/viewer/{Navigator-Co76p-1n.mjs → Navigator-CjgUcgKY.mjs} +1 -1
  241. package/dist/web-components/viewer/{PagerLayout-tUkN1-FV.mjs → PagerLayout-LZmC6VpV.mjs} +1 -1
  242. package/dist/web-components/viewer/PanelPart-Cw1G5W4b.mjs +1 -0
  243. package/dist/web-components/viewer/{PartOfManifest-DXnbEPzS.mjs → PartOfManifest-B0TYADTv.mjs} +1 -1
  244. package/dist/web-components/viewer/{PlaceBox-xrJ4CGdN.mjs → PlaceBox-Cjdjg-_9.mjs} +1 -1
  245. package/dist/web-components/viewer/Placeholder-MYLjXbiF.mjs +1 -0
  246. package/dist/web-components/viewer/{Search-DTg1cHZ3.mjs → Search-CyRrBHsr.mjs} +1 -1
  247. package/dist/web-components/viewer/SeekMarks-1WSjARP5.mjs +1 -0
  248. package/dist/web-components/viewer/{StandaloneItems-BpBEQG8i.mjs → StandaloneItems-CQrzTSPC.mjs} +1 -1
  249. package/dist/web-components/viewer/{Steps-SpwMQdCL.mjs → Steps-Bd42-eq7.mjs} +1 -1
  250. package/dist/web-components/viewer/TargetItems-BpmZEVMS.mjs +1 -0
  251. package/dist/web-components/viewer/{Transcript-rTAhuXCF.mjs → Transcript-CE4BsnWd.mjs} +1 -1
  252. package/dist/web-components/viewer/Transport-1ROUkfsf.mjs +1 -0
  253. package/dist/web-components/viewer/Transport-g0_Cjy0f.mjs +1 -0
  254. package/dist/web-components/viewer/{annotation-collection-B7pZiLVk.mjs → annotation-collection-vM0aeJgP.mjs} +1 -1
  255. package/dist/web-components/viewer/annotation-name-kjUrGbhg.mjs +1 -0
  256. package/dist/web-components/viewer/{annotations-content-9AtLlPNn.mjs → annotations-content-CysDLy4t.mjs} +1 -1
  257. package/dist/web-components/viewer/{cloverEngine-jRrYLrWa.mjs → cloverEngine-S8GEd-YZ.mjs} +1 -1
  258. package/dist/web-components/viewer/{content-state-reader-CPvkju6Q.mjs → content-state-reader-BTZKS9Hq.mjs} +1 -1
  259. package/dist/web-components/viewer/{dragToClose-Co9kGk9q.mjs → dragToClose-Bt4QtVSO.mjs} +1 -1
  260. package/dist/web-components/viewer/{fetchManifest-D7N9WhhF.mjs → fetchManifest-D4aIqcDV.mjs} +1 -1
  261. package/dist/web-components/viewer/{host-DMD9LE4H.mjs → host-ClJe-BX1.mjs} +1 -1
  262. package/dist/web-components/viewer/{image-layers-x_shzPvu.mjs → image-layers-DGa5HJt8.mjs} +1 -1
  263. package/dist/web-components/viewer/index.mjs +1 -1
  264. package/dist/web-components/viewer/{link-DikPGzNO.mjs → link-CU71f0wU.mjs} +1 -1
  265. package/dist/web-components/viewer/{overlayImage-33kKKB0T.mjs → overlayImage-D9GHzMmm.mjs} +1 -1
  266. package/dist/web-components/viewer/{range-regions-TH6WWGTT.mjs → range-regions-CiceyEuu.mjs} +1 -1
  267. package/dist/web-components/viewer/{renderers-BxePmixF.mjs → renderers-2BgvLkI0.mjs} +1 -1
  268. package/dist/web-components/viewer/{save-file-QXKiPlST.mjs → save-file-BW7D7oYG.mjs} +1 -1
  269. package/dist/web-components/viewer/{search-B_NePyas.mjs → search-DBMO82DV.mjs} +1 -1
  270. package/dist/web-components/viewer/styles-DogZyfVz.mjs +1 -0
  271. package/dist/web-components/viewer/{useControlsVisibility-Cu-jTDzs.mjs → useControlsVisibility-DSSIzst5.mjs} +1 -1
  272. package/dist/web-components/viewer/useLazyPanelPane-_6IY7cV5.mjs +1 -0
  273. package/dist/web-components/viewer/viewer-ClQD1LNQ.mjs +29 -0
  274. package/dist/web-components/viewer/vtt-Dk5bwDVQ.mjs +5 -0
  275. package/dist/web-components/viewer-DLfZQmZs.mjs +1 -0
  276. package/dist/web-components/vtt-9Ui3h60h.mjs +5 -0
  277. package/dist/web-components/worker-C9aVbya_.mjs +1 -0
  278. package/package.json +2 -1
  279. package/dist/web-components/Button-Cx6VE_UW.mjs +0 -1
  280. package/dist/web-components/CanvasView-DxZASM9E.mjs +0 -2
  281. package/dist/web-components/ChaptersMenu-BAZVVDrK.mjs +0 -1
  282. package/dist/web-components/ControlMenu-BjJsWnuZ.mjs +0 -1
  283. package/dist/web-components/ControlsFade-C-6WhSxB.mjs +0 -1
  284. package/dist/web-components/CountMenu-Dx8D_RJZ.mjs +0 -1
  285. package/dist/web-components/Cue-xuo5dgKE.mjs +0 -1
  286. package/dist/web-components/Document-BWdafeEi.mjs +0 -1
  287. package/dist/web-components/Gallery-C2PTJmvN.mjs +0 -1
  288. package/dist/web-components/ImageControls-tKVAMpaj.mjs +0 -1
  289. package/dist/web-components/LightboxView-Cuqx2H1m.mjs +0 -1
  290. package/dist/web-components/LoadedMap-DmPH-LKY.mjs +0 -1
  291. package/dist/web-components/MapView-DHJcn9gW.mjs +0 -3
  292. package/dist/web-components/Markup-Hm6bWOjm.mjs +0 -2
  293. package/dist/web-components/MediaBody-BpgNtpKZ.mjs +0 -1
  294. package/dist/web-components/MediaBody-Co23JjUJ.mjs +0 -1
  295. package/dist/web-components/PanelPart-CpUIRbxr.mjs +0 -1
  296. package/dist/web-components/Placeholder-0hE8q-SY.mjs +0 -1
  297. package/dist/web-components/Root-CU1o0wje.mjs +0 -1
  298. package/dist/web-components/Scene-CboEeptc.mjs +0 -1
  299. package/dist/web-components/SceneView-hcc78jQT.mjs +0 -1
  300. package/dist/web-components/TargetItems-CyOI9_Z4.mjs +0 -1
  301. package/dist/web-components/Timeline-B9tD3Rar.mjs +0 -1
  302. package/dist/web-components/Tip-nJSTYquc.mjs +0 -1
  303. package/dist/web-components/Transport-FxLp_bdW.mjs +0 -1
  304. package/dist/web-components/Transport-VUxSEIQO.mjs +0 -1
  305. package/dist/web-components/hooks-C4dJ5K_D.mjs +0 -1
  306. package/dist/web-components/index-DspT4wUm.mjs +0 -1
  307. package/dist/web-components/items-CWMI53aN.mjs +0 -1
  308. package/dist/web-components/label-BGjL7I4b.mjs +0 -1
  309. package/dist/web-components/logo-BFstM-0a.mjs +0 -1
  310. package/dist/web-components/masonry-0QfzOgbB.mjs +0 -1
  311. package/dist/web-components/part-D4gjnYmT.mjs +0 -1
  312. package/dist/web-components/pointer-CJELU3gI.mjs +0 -1
  313. package/dist/web-components/rendererSurface-nh6-EfuZ.mjs +0 -22
  314. package/dist/web-components/shared-DFAX0n3B.mjs +0 -1
  315. package/dist/web-components/styles-BwkYiCLC.mjs +0 -1
  316. package/dist/web-components/svg-shape-DLY3g7oq.mjs +0 -1
  317. package/dist/web-components/thumbnail-EbURh-UM.mjs +0 -1
  318. package/dist/web-components/useLazyPanelPane-Da3kJiOt.mjs +0 -1
  319. package/dist/web-components/viewer/ChaptersMenu-D6Jmujag.mjs +0 -1
  320. package/dist/web-components/viewer/ControlMenu-BsEpff6N.mjs +0 -1
  321. package/dist/web-components/viewer/ControlsFade-BowtN96W.mjs +0 -1
  322. package/dist/web-components/viewer/CountMenu-DCmA6HdK.mjs +0 -1
  323. package/dist/web-components/viewer/Cue-BjbVzrpl.mjs +0 -1
  324. package/dist/web-components/viewer/Document-4ZQd3W3o.mjs +0 -1
  325. package/dist/web-components/viewer/Gallery-F2sVj4ph.mjs +0 -1
  326. package/dist/web-components/viewer/ImageControls-C2G4x2Es.mjs +0 -1
  327. package/dist/web-components/viewer/LightboxView-DKR8dXcg.mjs +0 -1
  328. package/dist/web-components/viewer/MapView-Df0wZjCh.mjs +0 -3
  329. package/dist/web-components/viewer/MediaBody-CataNonO.mjs +0 -1
  330. package/dist/web-components/viewer/MediaBody-SkIgrEMj.mjs +0 -1
  331. package/dist/web-components/viewer/PanelPart-Cl4Sst60.mjs +0 -1
  332. package/dist/web-components/viewer/Placeholder-B1AcizHL.mjs +0 -1
  333. package/dist/web-components/viewer/TargetItems-B6Icep5k.mjs +0 -1
  334. package/dist/web-components/viewer/Transport-vKIDALE-.mjs +0 -1
  335. package/dist/web-components/viewer/Transport-z_kdVisw.mjs +0 -1
  336. package/dist/web-components/viewer/annotation-name-BKj1O9lA.mjs +0 -1
  337. package/dist/web-components/viewer/styles-Bedyz7_l.mjs +0 -1
  338. package/dist/web-components/viewer/useLazyPanelPane-BhLtRixT.mjs +0 -1
  339. package/dist/web-components/viewer/viewer-nfPJPwwt.mjs +0 -29
  340. package/dist/web-components/viewer/vtt-CUn4h5JB.mjs +0 -5
  341. package/dist/web-components/viewer-DN2Mo3vc.mjs +0 -1
  342. package/dist/web-components/vtt-C5M5WPSG.mjs +0 -5
  343. package/dist/web-components/worker-CjXN0dku.mjs +0 -1
@@ -34,6 +34,7 @@ function Document({
34
34
  headingLevel = 2,
35
35
  storageKey = "clover-template-document",
36
36
  collapseControls,
37
+ canvasOptions,
37
38
  ...root
38
39
  }) {
39
40
  const title = titled(
@@ -60,7 +61,8 @@ function Document({
60
61
  languages,
61
62
  headingLevel,
62
63
  storageKey,
63
- collapseControls
64
+ collapseControls,
65
+ canvasOptions
64
66
  }
65
67
  )
66
68
  }
@@ -81,6 +83,7 @@ function DocumentLayout({
81
83
  panelSections,
82
84
  panelLabels,
83
85
  collapseControls,
86
+ canvasOptions,
84
87
  title
85
88
  }) {
86
89
  const t = useT();
@@ -241,7 +244,14 @@ function DocumentLayout({
241
244
  min: showSidebar && !sidebar.over || docked ? PAGE_MIN : void 0,
242
245
  children: [
243
246
  pages && !sidebar.open && /* @__PURE__ */ jsx("div", { className: "clover-template-document-sidebar-closed", children: toggle }),
244
- /* @__PURE__ */ jsx(Sheets, { collapseControls, children: !docked && panelToggle })
247
+ /* @__PURE__ */ jsx(
248
+ Sheets,
249
+ {
250
+ collapseControls,
251
+ canvasOptions,
252
+ children: !docked && panelToggle
253
+ }
254
+ )
245
255
  ]
246
256
  }
247
257
  ),
@@ -17,6 +17,7 @@ const ratioOf = (canvas) => {
17
17
  };
18
18
  function Sheets({
19
19
  collapseControls,
20
+ canvasOptions,
20
21
  children
21
22
  }) {
22
23
  const { clover } = useClover("Document");
@@ -307,6 +308,7 @@ function Sheets({
307
308
  {
308
309
  className: "clover-template-document-body",
309
310
  collapseControls,
311
+ options: canvasOptions,
310
312
  onReady: setHandle,
311
313
  children
312
314
  }
@@ -32,6 +32,7 @@ function Gallery({
32
32
  storageKey = "clover-template-gallery",
33
33
  headingLevel = 2,
34
34
  collapseControls,
35
+ canvasOptions,
35
36
  style,
36
37
  ...root
37
38
  }) {
@@ -83,7 +84,8 @@ function Gallery({
83
84
  download,
84
85
  languages,
85
86
  storageKey,
86
- collapseControls
87
+ collapseControls,
88
+ canvasOptions
87
89
  }
88
90
  )
89
91
  ]
@@ -156,6 +156,39 @@ export interface RootProps extends Omit<React.HTMLAttributes<HTMLElement>, "chil
156
156
  as?: React.ElementType;
157
157
  children?: React.ReactNode;
158
158
  }
159
+ export type BackendKind = "webgl2" | "canvas2d" | "none";
160
+ export interface GestureOptions {
161
+ /**
162
+ * A mouse click zooms in; with Shift, out. With this or `dblClickToZoom`, a double tap
163
+ * (a finger, or a pen that does not hover) zooms in.
164
+ */
165
+ clickToZoom: boolean;
166
+ /** A double click zooms in. Only consulted when `clickToZoom` is off. */
167
+ dblClickToZoom: boolean;
168
+ pinchToZoom: boolean;
169
+ /**
170
+ * Plain wheel zooms. Off by default, matching Clover's OpenSeadragon setting, so an
171
+ * embedded viewer never swallows page scroll. A trackpad pinch (a wheel event with
172
+ * `ctrlKey`) always zooms the image, since it is never a page scroll.
173
+ */
174
+ scrollToZoom: boolean;
175
+ /**
176
+ * The reader may move the camera at all: drag, pinch, wheel, double-click and keys.
177
+ * Off, the view stays where the host puts it and only taps are reported (a lone video
178
+ * or sound, always fitted to the Body).
179
+ */
180
+ navigable: boolean;
181
+ /**
182
+ * A mouse or pen drag tracks the pointer 1:1 and glides on after a fast release. Off,
183
+ * the drag is eased instead and stops where the pointer does. A finger always tracks 1:1 and flicks.
184
+ */
185
+ flickEnabled: boolean;
186
+ /** Release speed, px/s, below which a drag does not flick. */
187
+ flickMinSpeed: number;
188
+ /** Seconds of release velocity the flick travels. */
189
+ flickMomentum: number;
190
+ }
191
+ export type BackendPreference = "auto" | BackendKind;
159
192
  /** A region of the image as shares of it: 0 to 1 across and down. */
160
193
  export interface RegionShare {
161
194
  x: number;
@@ -174,6 +207,9 @@ export interface RegionShare {
174
207
  * nor than its limits, at level 0 only a size it lists (Mat, 2026-10-24: "be
175
208
  * responsible when making IIIF image server requests"). What a manifest says of a
176
209
  * service is not trusted to say what its server does.
210
+ * - A `thumbnail` whose own `width` and `height` already fit the size (`resolveThumbnail`)
211
+ * is used as the manifest gives it, with no `info.json` read: the publisher's own URL,
212
+ * not one built from what a service says.
177
213
  * - Without a service, the image itself is used.
178
214
  */
179
215
  export interface ThumbnailSource {
@@ -188,6 +224,58 @@ export interface ThumbnailSource {
188
224
  region?: RegionShare | string;
189
225
  /** Used if the service cannot answer. */
190
226
  fallback?: string;
227
+ /** The pixels `fallback` is, as its own `width` and `height` say (a `thumbnail`'s). */
228
+ fallbackSize?: {
229
+ width: number;
230
+ height: number;
231
+ };
232
+ }
233
+ export interface CloverCanvasOptions {
234
+ /** Which painter to use. `auto` (default) tries WebGL2, then Canvas2D. */
235
+ backend?: BackendPreference;
236
+ /** Pointer, wheel and keyboard behavior. Wheel zoom is off by default. */
237
+ gestures?: Partial<GestureOptions>;
238
+ /** Largest zoom, in CSS pixels per image pixel. Default 1.1. */
239
+ maxZoomPixelRatio?: number;
240
+ /** Smallest zoom, as a fraction of the home zoom. Default 0.9. */
241
+ minZoomImageRatio?: number;
242
+ /** Seconds for an animation to close most of its distance. 0 disables easing. */
243
+ animationTime?: number;
244
+ /**
245
+ * Seconds each animation (zoom, glide, home) takes, on a fixed-length spring. Unset,
246
+ * the camera eases by `animationTime` instead.
247
+ */
248
+ animationDuration?: number;
249
+ /** With `animationDuration`, how much of the movement comes early: higher starts faster. Default 6.5. */
250
+ springStiffness?: number;
251
+ /** Hold the image inside its bounds while dragging. Default true; false lets it spring back on release. */
252
+ constrainDuringPan?: boolean;
253
+ /**
254
+ * Milliseconds the controls and navigator stay after a mouse (or a pen that hovers)
255
+ * stops moving, or a finger lifts, as the Player's `hideDelay`. Default 3000; `Infinity`
256
+ * keeps them once shown. A tap on the picture shows them, and another hides them. Focus
257
+ * that no press brought holds them, and so does a paused recording.
258
+ * A Timeline's: a Canvas's controls stay in sight, for now (Mat, 2026-11-01).
259
+ */
260
+ hideDelay?: number;
261
+ /** A time-based Canvas's video or sound. */
262
+ /**
263
+ * An animation Canvas (painting annotations at `#t=` times, one per frame): play on
264
+ * arrival, and loop at the end (the reader can turn looping off and on). Inside a `Root`,
265
+ * `auto-advance` and `repeat` behaviors set them, and a Manifest's `auto-advance` moves
266
+ * on when a non-looping animation ends (`onEnded`, as for video). Neither by default; a
267
+ * reader asking for reduced motion is never autoplayed.
268
+ */
269
+ animation?: {
270
+ autoplay?: boolean;
271
+ loop?: boolean;
272
+ };
273
+ /**
274
+ * Credentials, headers and a custom `fetch` for every request the Canvas makes:
275
+ * `info.json`, tiles, captions and HLS. A `<video>` or an image without CORS can only
276
+ * send credentials. Inside a `Root`, the Root's `request` is used.
277
+ */
278
+ request?: CloverRequest;
191
279
  }
192
280
  /**
193
281
  * What `Items` shows: light models of a Manifest's views or a Collection's members, never
@@ -393,6 +481,8 @@ export type DefaultProps = Omit<RootProps, "children"> & {
393
481
  * The Body's `collapseControls`.
394
482
  */
395
483
  collapseControls?: "auto" | "always";
484
+ /** The Body's Canvas `options`: its gestures, zoom limits and motion. */
485
+ canvasOptions?: CloverCanvasOptions;
396
486
  };
397
487
  /**
398
488
  * The Viewer's own layout, drawn when no `template` is given: Clover 3.x's Viewer, built
@@ -406,7 +496,7 @@ export type DefaultProps = Omit<RootProps, "children"> & {
406
496
  * uncovered: a click there, Escape or the panel's close button puts it away. Size it with
407
497
  * `--clover-body-height`.
408
498
  */
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;
499
+ 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;
410
500
  export type DocumentProps = Omit<RootProps, "children"> & {
411
501
  /**
412
502
  * Whether the page thumbnails start shown beside the page. Default `true`. On a phone,
@@ -465,6 +555,8 @@ export type DocumentProps = Omit<RootProps, "children"> & {
465
555
  * The Body's `collapseControls`.
466
556
  */
467
557
  collapseControls?: "auto" | "always";
558
+ /** The Body's Canvas `options`: its gestures, zoom limits and motion. */
559
+ canvasOptions?: CloverCanvasOptions;
468
560
  };
469
561
  /**
470
562
  * A layout that reads like a PDF viewer: a toolbar, page thumbnails down the left, and
@@ -475,7 +567,7 @@ export type DocumentProps = Omit<RootProps, "children"> & {
475
567
  * where there is room for both, and slides out over the page where there is not. Size
476
568
  * it with `--clover-template-document-height`.
477
569
  */
478
- export declare function Document({ className, defaultSidebarOpen, singleItem, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, headingLevel, storageKey, collapseControls, ...root }: DocumentProps): React.JSX.Element;
570
+ export declare function Document({ className, defaultSidebarOpen, singleItem, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, headingLevel, storageKey, collapseControls, canvasOptions, ...root }: DocumentProps): React.JSX.Element;
479
571
  export type GalleryProps = Omit<RootProps, "children"> & {
480
572
  /** The size of a grid cell. Default `10rem`, through `--clover-items-size`. */
481
573
  size?: string;
@@ -558,6 +650,8 @@ export type GalleryProps = Omit<RootProps, "children"> & {
558
650
  * Its lightbox's Body's `collapseControls`.
559
651
  */
560
652
  collapseControls?: "auto" | "always";
653
+ /** Its lightbox's Body's Canvas `options`: its gestures, zoom limits and motion. */
654
+ canvasOptions?: CloverCanvasOptions;
561
655
  };
562
656
  /**
563
657
  * A grid framed by what it opens, that opens a cell in a lightbox with the Body and the
@@ -566,7 +660,7 @@ export type GalleryProps = Omit<RootProps, "children"> & {
566
660
  * shows that Manifest in the lightbox. Escape, the close button, or a press outside
567
661
  * closes it, and focus returns to the cell.
568
662
  */
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;
663
+ 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;
570
664
  export interface LightboxProps {
571
665
  open: boolean;
572
666
  onClose: () => void;
@@ -607,6 +701,8 @@ export interface LightboxProps {
607
701
  storageKey?: string | false;
608
702
  /** The Body's `collapseControls`: when the view's controls collapse behind one button. */
609
703
  collapseControls?: "auto" | "always";
704
+ /** The Body's Canvas `options`: its gestures, zoom limits and motion. */
705
+ canvasOptions?: CloverCanvasOptions;
610
706
  className?: string;
611
707
  }
612
708
  /**
@@ -619,9 +715,9 @@ export interface LightboxProps {
619
715
  * 2026-11-01: "carousel by default") or the pager (with the position). A modal
620
716
  * `<dialog>`'s backdrop always covers the whole window, so this is a layer in the Root, a
621
717
  * `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.
718
+ * Root is inert but what speaks, focus is on the view in its strip (on Close with the
719
+ * pager), Tab comes round inside it, and Escape, Close, Back or a press on the layer
720
+ * outside the panel closes it, focus going back to the grid's cell of the view shown.
625
721
  * By default it fills the layout's bounds; `--clover-template-lightbox-inset`,
626
722
  * `-backdrop` and `-radius` give it room, a backdrop and corners (`Lightbox.css`). The
627
723
  * layout positions it and holds its stacking (`position: relative` and `isolation:
@@ -40,7 +40,7 @@ function Lightbox({
40
40
  if (!open || !element || !root) return;
41
41
  const opener = element.ownerDocument.activeElement;
42
42
  const others = Array.from(root.children).filter(
43
- (child) => child !== element && !child.classList.contains("clover-announcer")
43
+ (child) => child !== element && !child.classList.contains("clover-announcer") && !child.classList.contains("clover-status")
44
44
  );
45
45
  others.forEach((child) => child.inert = true);
46
46
  (_b = (_a2 = panel.current) == null ? void 0 : _a2.scrollIntoView) == null ? void 0 : _b.call(_a2, { block: "nearest" });
@@ -48,9 +48,33 @@ function Lightbox({
48
48
  '[role="listbox"] [role="option"][aria-selected="true"]'
49
49
  );
50
50
  (_d = chosen ?? close.current) == null ? void 0 : _d.focus({ preventScroll: true });
51
+ const doc = element.ownerDocument;
52
+ let check;
53
+ const onTab = (event) => {
54
+ var _a3;
55
+ if (event.key !== "Tab" || !((_a3 = panel.current) == null ? void 0 : _a3.contains(event.target)))
56
+ return;
57
+ const back = event.shiftKey;
58
+ clearTimeout(check);
59
+ check = setTimeout(() => {
60
+ var _a4;
61
+ const dialog = panel.current;
62
+ if (!dialog || dialog.contains(doc.activeElement)) return;
63
+ const stops = stopsOf(dialog);
64
+ (_a4 = back ? stops.at(-1) : stops[0]) == null ? void 0 : _a4.focus();
65
+ });
66
+ };
67
+ doc.addEventListener("keydown", onTab, true);
51
68
  return () => {
69
+ var _a3, _b2;
70
+ doc.removeEventListener("keydown", onTab, true);
71
+ clearTimeout(check);
52
72
  others.forEach((child) => child.inert = false);
53
- if (opener == null ? void 0 : opener.isConnected) opener.focus({ preventScroll: true });
73
+ const shown = (_a3 = opener == null ? void 0 : opener.closest('[role="listbox"]')) == null ? void 0 : _a3.querySelector('[role="option"][aria-selected="true"]');
74
+ const back = shown ?? opener;
75
+ if (!(back == null ? void 0 : back.isConnected)) return;
76
+ back.focus({ preventScroll: true });
77
+ (_b2 = back.scrollIntoView) == null ? void 0 : _b2.call(back, { block: "nearest" });
54
78
  };
55
79
  }, [open]);
56
80
  return /* @__PURE__ */ jsx(
@@ -63,7 +87,12 @@ function Lightbox({
63
87
  if (event.target === layer.current) onClose();
64
88
  },
65
89
  onKeyDown: (event) => {
66
- if (event.key !== "Escape" || event.defaultPrevented) return;
90
+ if (event.defaultPrevented) return;
91
+ if (event.key === "Tab" && panel.current) {
92
+ wrapFocus(panel.current, event);
93
+ return;
94
+ }
95
+ if (event.key !== "Escape") return;
67
96
  event.preventDefault();
68
97
  closing.current();
69
98
  },
@@ -149,6 +178,24 @@ function Lightbox({
149
178
  }
150
179
  );
151
180
  }
181
+ const STOPS = 'a[href], button, input, select, textarea, summary, [tabindex]:not([tabindex="-1"])';
182
+ const stopsOf = (dialog) => Array.from(dialog.querySelectorAll(STOPS)).filter(
183
+ (stop) => {
184
+ var _a;
185
+ return stop.tabIndex >= 0 && !stop.matches(":disabled") && !stop.closest("[inert]") && (((_a = stop.checkVisibility) == null ? void 0 : _a.call(stop, { visibilityProperty: true })) ?? true);
186
+ }
187
+ );
188
+ function wrapFocus(dialog, event) {
189
+ const stops = stopsOf(dialog);
190
+ const first = stops[0];
191
+ const last = stops.at(-1);
192
+ if (!first || !last) return;
193
+ const at = dialog.ownerDocument.activeElement;
194
+ if (event.shiftKey ? at === first : at === last) {
195
+ event.preventDefault();
196
+ (event.shiftKey ? last : first).focus();
197
+ }
198
+ }
152
199
  function Back({ onOut }) {
153
200
  const t = useT();
154
201
  const langOf = useLangOf();
@@ -22,7 +22,8 @@ function LightboxView({
22
22
  download = true,
23
23
  languages = true,
24
24
  storageKey,
25
- collapseControls
25
+ collapseControls,
26
+ canvasOptions
26
27
  }) {
27
28
  const panes = useRef(null);
28
29
  useEffect(() => {
@@ -81,6 +82,7 @@ function LightboxView({
81
82
  {
82
83
  className: "clover-template-lightbox-body",
83
84
  collapseControls,
85
+ options: canvasOptions,
84
86
  children: panel && !pane.docked && pane.toggle
85
87
  }
86
88
  ),
@@ -1 +1 @@
1
- @layer clover{.clover-template-lightbox{position:absolute;inset:0;z-index:10;padding:var(--clover-template-lightbox-inset, 0);background:var(--clover-template-lightbox-backdrop, transparent)}.clover-template-lightbox[hidden]{display:none}.clover-template-lightbox-content{position:sticky;top:calc(var(--clover-template-lightbox-top, 0px) + var(--clover-template-lightbox-inset, 0px));box-sizing:border-box;display:flex;flex-direction:column;gap:var(--clover-space-m);height:min(100%,calc(100vh - var(--clover-template-lightbox-top, 0px) - 2 * var(--clover-template-lightbox-inset, 0px)));padding:var(--clover-inset);border-radius:var(--clover-template-lightbox-radius, 0);background:var(--clover-color-secondary, #fff);color:var(--clover-color-primary, #1a1d1e);--clover-body-height: min(70vh, 48rem)}@supports (height: 1svh){.clover-template-lightbox-content{height:min(100%,calc(100svh - var(--clover-template-lightbox-top, 0px) - 2 * var(--clover-template-lightbox-inset, 0px)));--clover-body-height: min(70svh, 48rem)}}.clover-template-lightbox-content>.clover-template-lightbox-panes{flex:1 1 auto;min-height:0}.clover-template-lightbox-main{display:flex;flex-direction:column;gap:var(--clover-space-m);min-height:0}.clover-template-lightbox-main>.clover-template-lightbox-body{flex:1 1 auto;min-height:0}.clover-template-lightbox-main>.clover-items[data-layout=slider]{flex:none;--clover-items-height: 4rem;--clover-items-lines: 1}.clover-template-lightbox-pending{height:var(--clover-body-height, 60vh);background-color:#0001}.clover-template-lightbox-header{display:flex;align-items:center;gap:var(--clover-space-m)}.clover-template-lightbox-title{flex:1 1 auto;min-width:0}.clover-template-lightbox-caption{flex:none;margin:calc(var(--clover-space-xs) - var(--clover-space-m)) 0 0;overflow-wrap:anywhere}.clover-template-lightbox-back:dir(rtl) svg{transform:scaleX(-1)}button:is(.clover-template-lightbox-back,.clover-template-lightbox-close){flex:none;display:inline-flex;align-items:center;justify-content:center;width:var(--clover-control);height:var(--clover-control);padding:0;border:0;border-radius:var(--clover-radius-pill, 2rem);background:transparent;color:inherit;cursor:pointer}button:is(.clover-template-lightbox-back,.clover-template-lightbox-close):is(:hover,:focus-visible){background:var(--clover-color-accent, #0065c3);color:var(--clover-color-control-glyph, #fff)}:where([data-high-contrast]) button:is(.clover-template-lightbox-back,.clover-template-lightbox-close):is(:hover,:focus-visible){background:var(--clover-accent-fill)}:where([data-high-contrast]) button:is(.clover-template-lightbox-back,.clover-template-lightbox-close):hover:not(:focus-visible){outline:var(--clover-accent-ring-hover);outline-offset:1px}.clover-template-document{--clover-template-document-height: min(85vh, 56rem);display:flex;flex-direction:column;height:var(--clover-template-document-height);min-height:min-content;overflow:hidden;background-color:var(--clover-color-secondary, #fff);color:var(--clover-color-primary, #1a1d1e)}@supports (height: 1svh){.clover-template-document{--clover-template-document-height: min(85svh, 56rem)}}.clover-template-document-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--clover-space-s);padding:var(--clover-space-m) var(--clover-inset);border-bottom:1px solid var(--clover-color-secondary-muted, #e6e8eb)}.clover-template-document-provider{max-width:100%;margin-inline-start:auto}.clover-template-document-toolbar .clover-download-groups{flex-direction:row;flex-wrap:wrap;column-gap:var(--clover-space-m)}.clover-template-document-toolbar .clover-download-group{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:var(--clover-space-s)}.clover-template-document-toolbar .clover-download-title{margin:0}.clover-template-document-toolbar .clover-download-list{display:flex;flex-wrap:wrap;column-gap:var(--clover-space-s)}.clover-template-document-title{flex:1 1 6rem;min-width:0}button.clover-template-document-sidebar-toggle{display:inline-flex;flex:none;align-items:center;gap:var(--clover-space-xs);min-height:var(--clover-control);padding-block:0;padding-inline:var(--clover-space-s) calc(var(--clover-space-xs) + var(--clover-space-3xs));border:0;border-radius:var(--clover-radius-pill, 2rem);background-color:var(--clover-color-control, #1a1d1e);color:var(--clover-color-control-glyph, #fff);cursor:pointer;transition:var(--clover-transition, all .2s cubic-bezier(.16, 1, .3, 1))}button.clover-template-document-sidebar-toggle:is(:hover,:focus-visible){background-color:var(--clover-color-accent, #0065c3)}:where([data-high-contrast]) button.clover-template-document-sidebar-toggle:is(:hover,:focus-visible){background-color:var(--clover-accent-fill)}:where([data-high-contrast]) button.clover-template-document-sidebar-toggle:hover:not(:focus-visible){outline:var(--clover-accent-ring-hover);outline-offset:1px}button.clover-template-document-sidebar-toggle:focus-visible{outline:2px solid var(--clover-color-accent, #0065c3);outline-offset:2px}.clover-template-document-sidebar-toggle .clover-template-document-position{color:inherit;font-size:var(--clover-text-xs);white-space:nowrap}.clover-template-document-sidebar-toggle .clover-template-document-position>.clover-pager-room[hidden]{display:none}.clover-template-document-panes{position:relative;flex:1 1 auto;min-height:16rem}.clover-template-document-panes:is([data-panel=over],[data-narrow])>.clover-template-document-main{isolation:isolate}.clover-template-document-sidebar{contain:size;overflow-y:auto;overscroll-behavior:contain;padding:var(--clover-inset);scroll-padding-top:calc(2 * var(--clover-inset) + var(--clover-control));background-color:var(--clover-color-secondary, #fff)}.clover-template-document-sidebar-closed{position:absolute;top:var(--clover-inset);inset-inline-start:var(--clover-inset);z-index:3}@media (width < 31rem){.clover-template-document-toolbar,.clover-template-document-sidebar-closed,.clover-template-document-spine{--clover-inset: var(--clover-space-m)}}.clover-template-document-sidebar[hidden]{display:none}.clover-template-document-sidebar+.clover-split-handle:before{inset-inline-start:0;inset-inline-end:calc(3px - var(--clover-space-l))}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-figure{grid-template-columns:repeat(var(--parts, 1),minmax(0,1fr));gap:var(--clover-space-xs) 0}.clover-template-document-sidebar .clover-items[data-layout] :is(.clover-items-pictures,.clover-items-caption){grid-column:1 / -1;grid-template-columns:subgrid}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-label{contain:inline-size}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-picture[data-empty],.clover-template-document-sidebar .clover-items[data-layout] .clover-items-picture img{width:100%;height:auto;max-height:20rem;aspect-ratio:var(--clover-items-ratio, auto);object-fit:contain}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-caption{font-size:var(--clover-text-s)}.clover-template-document-main{position:relative;overflow:hidden;background-color:var(--clover-color-secondary-muted, #e6e8eb)}.clover-template-document-column{position:absolute;inset:0;overflow-x:hidden;overflow-y:auto;container-type:size}.clover-template-document-sheets{position:relative}.clover-template-document-sheet{--clover-template-document-tease: calc(2 * var(--clover-inset));display:flex;justify-content:center;box-sizing:border-box;height:min(100cqh - var(--clover-template-document-tease),(100cqw - 2 * var(--clover-inset)) / var(--ratio) + 2 * var(--clover-inset));padding:var(--clover-inset);transition:opacity .2s ease,height .24s cubic-bezier(.16,1,.3,1)}.clover-template-document-sheet[data-fill]{height:calc(100cqh - var(--clover-template-document-tease))}.clover-template-document-column[data-zoomed] .clover-template-document-sheet[data-active]{height:100cqh}.clover-template-document-column[data-zoomed] .clover-template-document-sheet[data-active]>*{visibility:hidden}.clover-template-document-column[data-zoomed] .clover-template-document-sheet:not([data-active]){--clover-template-document-muted: 0;pointer-events:none}.clover-template-document-sheet:not([data-active]){--clover-template-document-muted: .618;cursor:pointer;opacity:var(--clover-template-document-muted)}.clover-template-document-sheet:not([data-active]):hover{--clover-template-document-muted: .809}@media (prefers-reduced-motion: reduce){.clover-template-document-sheet{transition:none}}.clover-template-document-sheets[data-single]>.clover-template-document-sheet{--clover-template-document-tease: 0px}.clover-template-document-sheet>*{display:block;height:100%;min-width:0}.clover-template-document-sheet[data-fill]>*{object-fit:contain}.clover-template-document-live{--clover-body-height: 100%;position:absolute;inset-inline:0;top:0;height:100%;transition:opacity .16s ease}.clover-template-document-body .clover-canvas{--clover-canvas-inset: var(--clover-inset);background-color:transparent}.clover-template-document-live[data-moved]:not(:focus-within){opacity:0;pointer-events:none}.clover-template-document-column[data-scrolling] .clover-template-document-live:not(:focus-within) .clover-canvas-controls>*{--clover-controls-shown: 0;--clover-controls-events: none}.clover-template-document-column:not([data-zoomed]) :not(.clover-scene)>.clover-canvas-viewport{touch-action:pan-y}.clover-template-document-scrim[data-for=sidebar]{z-index:2}.clover-template-document-panes[data-narrow]{--clover-template-sidebar-width: min(14rem, 80%)}.clover-template-document-panes[data-narrow]>.clover-template-document-sidebar{position:absolute;inset-block:0;inset-inline-start:0;z-index:3;width:var(--clover-template-sidebar-width);border-inline-end:1px solid var(--clover-color-secondary-muted, #e6e8eb);--clover-template-inner: right;--clover-template-toward: 1}.clover-template-document-panes[data-narrow]>.clover-template-document-sidebar:dir(rtl){--clover-template-inner: left;--clover-template-toward: -1}.clover-template-document-spine{position:relative;z-index:4;flex:none;width:0}.clover-template-document-spine>*{position:absolute;top:var(--clover-inset);inset-inline-start:-1.5px;translate:-50%}.clover-template-document-spine:dir(rtl)>*{translate:50%}.clover-template-document-spine[data-for=sidebar]>*{inset-inline:auto calc(1.5px - var(--clover-control) / 2);translate:none}.clover-template-document-panes[data-narrow]>.clover-template-document-spine[data-for=sidebar]{inset-inline-start:var(--clover-template-sidebar-width)}.clover-template-document-panes[data-narrow]>.clover-template-document-spine[data-for=sidebar]>*{inset-inline-end:calc(var(--clover-control) / -2)}.clover-template-gallery{position:relative;isolation:isolate;display:flex;flex-direction:column;gap:var(--clover-space-l);padding:var(--clover-inset);color:var(--clover-color-primary, #1a1d1e)}.clover-template-gallery[data-height=fixed]{box-sizing:border-box;height:var(--clover-template-gallery-height)}.clover-template-gallery[data-height=fixed]>.clover-items{flex:1 1 auto;min-height:0;overflow:auto;margin:calc(-1 * var(--clover-items-ring-room, 4px));padding:var(--clover-items-ring-room, 4px)}.clover-template-gallery-header{flex:none;display:flex;flex-direction:column;gap:var(--clover-space-2xs)}.clover-template-gallery-summary{margin:0;--clover-summary-lines: 2}.clover-template-gallery .clover-items{--clover-items-gap: var(--clover-template-gallery-gap, var(--clover-inset));--clover-items-lines: none}}
1
+ @layer clover{.clover-template-lightbox{position:absolute;inset:0;z-index:10;padding:var(--clover-template-lightbox-inset, 0);background:var(--clover-template-lightbox-backdrop, transparent)}.clover-template-lightbox[hidden]{display:none}.clover-template-lightbox-content{position:sticky;overflow-y:auto;top:calc(var(--clover-template-lightbox-top, 0px) + var(--clover-template-lightbox-inset, 0px));box-sizing:border-box;display:flex;flex-direction:column;gap:var(--clover-space-m);height:min(100%,calc(100vh - var(--clover-template-lightbox-top, 0px) - 2 * var(--clover-template-lightbox-inset, 0px)));padding:var(--clover-inset);border-radius:var(--clover-template-lightbox-radius, 0);background:var(--clover-color-secondary, #fff);color:var(--clover-color-primary, #1a1d1e);--clover-body-height: min(70vh, 48rem)}@supports (height: 1svh){.clover-template-lightbox-content{height:min(100%,calc(100svh - var(--clover-template-lightbox-top, 0px) - 2 * var(--clover-template-lightbox-inset, 0px)));--clover-body-height: min(70svh, 48rem)}}.clover-template-lightbox-content>.clover-template-lightbox-panes{flex:1 1 auto;min-height:16rem}.clover-template-lightbox-main{display:flex;flex-direction:column;gap:var(--clover-space-m);min-height:0}.clover-template-lightbox-main>.clover-template-lightbox-body{flex:1 1 auto;min-height:0}.clover-template-lightbox-main>.clover-items[data-layout=slider]{flex:none;--clover-items-height: 4rem;--clover-items-lines: 1}.clover-template-lightbox-pending{height:var(--clover-body-height, 60vh);background-color:#0001}.clover-template-lightbox-header{display:flex;align-items:center;gap:var(--clover-space-m)}.clover-template-lightbox-title{flex:1 1 auto;min-width:0}.clover-template-lightbox-caption{flex:none;margin:calc(var(--clover-space-xs) - var(--clover-space-m)) 0 0;overflow-wrap:anywhere}.clover-template-lightbox-back:dir(rtl) svg{transform:scaleX(-1)}button:is(.clover-template-lightbox-back,.clover-template-lightbox-close){flex:none;display:inline-flex;align-items:center;justify-content:center;width:var(--clover-control);height:var(--clover-control);padding:0;border:0;border-radius:var(--clover-radius-pill, 2rem);background:transparent;color:inherit;cursor:pointer}button:is(.clover-template-lightbox-back,.clover-template-lightbox-close):is(:hover,:focus-visible){background:var(--clover-color-accent, #0065c3);color:var(--clover-color-control-glyph, #fff)}:where([data-high-contrast]) button:is(.clover-template-lightbox-back,.clover-template-lightbox-close):is(:hover,:focus-visible){background:var(--clover-accent-fill)}:where([data-high-contrast]) button:is(.clover-template-lightbox-back,.clover-template-lightbox-close):hover:not(:focus-visible){outline:var(--clover-accent-ring-hover);outline-offset:1px}.clover-template-document{--clover-template-document-height: min(85vh, 56rem);display:flex;flex-direction:column;height:var(--clover-template-document-height);min-height:min-content;overflow:hidden;background-color:var(--clover-color-secondary, #fff);color:var(--clover-color-primary, #1a1d1e)}@supports (height: 1svh){.clover-template-document{--clover-template-document-height: min(85svh, 56rem)}}.clover-template-document-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--clover-space-s);padding:var(--clover-space-m) var(--clover-inset);border-bottom:1px solid var(--clover-color-secondary-muted, #e6e8eb)}.clover-template-document-provider{max-width:100%;margin-inline-start:auto}.clover-template-document-toolbar .clover-download-groups{flex-direction:row;flex-wrap:wrap;column-gap:var(--clover-space-m)}.clover-template-document-toolbar .clover-download-group{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:var(--clover-space-s)}.clover-template-document-toolbar .clover-download-title{margin:0}.clover-template-document-toolbar .clover-download-list{display:flex;flex-wrap:wrap;column-gap:var(--clover-space-s)}.clover-template-document-title{flex:1 1 6rem;min-width:0}button.clover-template-document-sidebar-toggle{display:inline-flex;flex:none;align-items:center;gap:var(--clover-space-xs);min-height:var(--clover-control);padding-block:0;padding-inline:var(--clover-space-s) calc(var(--clover-space-xs) + var(--clover-space-3xs));border:0;border-radius:var(--clover-radius-pill, 2rem);background-color:var(--clover-color-control, #1a1d1e);color:var(--clover-color-control-glyph, #fff);cursor:pointer;transition:var(--clover-transition, all .2s cubic-bezier(.16, 1, .3, 1))}button.clover-template-document-sidebar-toggle:is(:hover,:focus-visible){background-color:var(--clover-color-accent, #0065c3)}:where([data-high-contrast]) button.clover-template-document-sidebar-toggle:is(:hover,:focus-visible){background-color:var(--clover-accent-fill)}:where([data-high-contrast]) button.clover-template-document-sidebar-toggle:hover:not(:focus-visible){outline:var(--clover-accent-ring-hover);outline-offset:1px}button.clover-template-document-sidebar-toggle:focus-visible{outline:2px solid var(--clover-color-accent, #0065c3);outline-offset:2px}.clover-template-document-sidebar-toggle .clover-template-document-position{color:inherit;font-size:var(--clover-text-xs);white-space:nowrap}.clover-template-document-sidebar-toggle .clover-template-document-position>.clover-pager-room[hidden]{display:none}.clover-template-document-panes{position:relative;flex:1 1 auto;min-height:16rem}.clover-template-document-panes:is([data-panel=over],[data-narrow])>.clover-template-document-main{isolation:isolate}.clover-template-document-sidebar{contain:size;overflow-y:auto;overscroll-behavior:contain;padding:var(--clover-inset);scroll-padding-top:calc(2 * var(--clover-inset) + var(--clover-control));background-color:var(--clover-color-secondary, #fff)}.clover-template-document-sidebar-closed{position:absolute;top:var(--clover-inset);inset-inline-start:var(--clover-inset);z-index:3}@media (width < 31rem){.clover-template-document-toolbar,.clover-template-document-sidebar-closed,.clover-template-document-spine{--clover-inset: var(--clover-space-m)}}.clover-template-document-sidebar[hidden]{display:none}.clover-template-document-sidebar+.clover-split-handle:before{inset-inline-start:0;inset-inline-end:calc(3px - var(--clover-space-l))}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-figure{grid-template-columns:repeat(var(--parts, 1),minmax(0,1fr));gap:var(--clover-space-xs) 0}.clover-template-document-sidebar .clover-items[data-layout] :is(.clover-items-pictures,.clover-items-caption){grid-column:1 / -1;grid-template-columns:subgrid}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-label{contain:inline-size}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-picture[data-empty],.clover-template-document-sidebar .clover-items[data-layout] .clover-items-picture img{width:100%;height:auto;max-height:20rem;aspect-ratio:var(--clover-items-ratio, auto);object-fit:contain}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-caption{font-size:var(--clover-text-s)}.clover-template-document-main{position:relative;overflow:hidden;background-color:var(--clover-color-secondary-muted, #e6e8eb)}.clover-template-document-column{position:absolute;inset:0;overflow-x:hidden;overflow-y:auto;container-type:size}.clover-template-document-sheets{position:relative}.clover-template-document-sheet{--clover-template-document-tease: calc(2 * var(--clover-inset));display:flex;justify-content:center;box-sizing:border-box;height:min(100cqh - var(--clover-template-document-tease),(100cqw - 2 * var(--clover-inset)) / var(--ratio) + 2 * var(--clover-inset));padding:var(--clover-inset);transition:opacity .2s ease,height .24s cubic-bezier(.16,1,.3,1)}.clover-template-document-sheet[data-fill]{height:calc(100cqh - var(--clover-template-document-tease))}.clover-template-document-column[data-zoomed] .clover-template-document-sheet[data-active]{height:100cqh}.clover-template-document-column[data-zoomed] .clover-template-document-sheet[data-active]>*{visibility:hidden}.clover-template-document-column[data-zoomed] .clover-template-document-sheet:not([data-active]){--clover-template-document-muted: 0;pointer-events:none}.clover-template-document-sheet:not([data-active]){--clover-template-document-muted: .618;cursor:pointer;opacity:var(--clover-template-document-muted)}.clover-template-document-sheet:not([data-active]):hover{--clover-template-document-muted: .809}@media (prefers-reduced-motion: reduce){.clover-template-document-sheet{transition:none}}.clover-template-document-sheets[data-single]>.clover-template-document-sheet{--clover-template-document-tease: 0px}.clover-template-document-sheet>*{display:block;height:100%;min-width:0}.clover-template-document-sheet[data-fill]>*{object-fit:contain}.clover-template-document-live{--clover-body-height: 100%;position:absolute;inset-inline:0;top:0;height:100%;transition:opacity .16s ease}.clover-template-document-body .clover-canvas{--clover-canvas-inset: var(--clover-inset);background-color:transparent}.clover-template-document-live[data-moved]:not(:focus-within){opacity:0;pointer-events:none}.clover-template-document-column[data-scrolling] .clover-template-document-live:not(:focus-within) .clover-canvas-controls>*{--clover-controls-shown: 0;--clover-controls-events: none}.clover-template-document-column:not([data-zoomed]) :not(.clover-scene)>.clover-canvas-viewport{touch-action:pan-y}.clover-template-document-scrim[data-for=sidebar]{z-index:2}.clover-template-document-panes[data-narrow]{--clover-template-sidebar-width: min(14rem, 80%)}.clover-template-document-panes[data-narrow]>.clover-template-document-sidebar{position:absolute;inset-block:0;inset-inline-start:0;z-index:3;width:var(--clover-template-sidebar-width);border-inline-end:1px solid var(--clover-color-secondary-muted, #e6e8eb);--clover-template-inner: right;--clover-template-toward: 1}.clover-template-document-panes[data-narrow]>.clover-template-document-sidebar:dir(rtl){--clover-template-inner: left;--clover-template-toward: -1}.clover-template-document-spine{position:relative;z-index:4;flex:none;width:0}.clover-template-document-spine>*{position:absolute;top:var(--clover-inset);inset-inline-start:-1.5px;translate:-50%}.clover-template-document-spine:dir(rtl)>*{translate:50%}.clover-template-document-spine[data-for=sidebar]>*{inset-inline:auto calc(1.5px - var(--clover-control) / 2);translate:none}.clover-template-document-panes[data-narrow]>.clover-template-document-spine[data-for=sidebar]{inset-inline-start:var(--clover-template-sidebar-width)}.clover-template-document-panes[data-narrow]>.clover-template-document-spine[data-for=sidebar]>*{inset-inline-end:calc(var(--clover-control) / -2)}.clover-template-gallery{position:relative;isolation:isolate;display:flex;flex-direction:column;gap:var(--clover-space-l);padding:var(--clover-inset);color:var(--clover-color-primary, #1a1d1e)}.clover-template-gallery[data-height=fixed]{box-sizing:border-box;height:var(--clover-template-gallery-height)}.clover-template-gallery[data-height=fixed]>.clover-items{flex:1 1 auto;min-height:0;overflow:auto;margin:calc(-1 * var(--clover-items-ring-room, 4px));padding:var(--clover-items-ring-room, 4px)}.clover-template-gallery-header{flex:none;display:flex;flex-direction:column;gap:var(--clover-space-2xs)}.clover-template-gallery-summary{margin:0;--clover-summary-lines: 2}.clover-template-gallery .clover-items{--clover-items-gap: var(--clover-template-gallery-gap, var(--clover-inset));--clover-items-lines: none}}
@@ -12,7 +12,8 @@ const Button = ({
12
12
  expanded,
13
13
  controls,
14
14
  shortcut,
15
- lang
15
+ lang,
16
+ unavailable
16
17
  }) => {
17
18
  const buttonType = id.split("-")[0];
18
19
  const dataButton = buttonType.replace(/([A-Z])/g, "-$1").toLowerCase().replace(/^-/, "");
@@ -24,6 +25,7 @@ const Button = ({
24
25
  "data-testid": "clover-canvas-button",
25
26
  "data-button": dataButton,
26
27
  onClick,
28
+ "aria-disabled": unavailable || void 0,
27
29
  "aria-expanded": expanded,
28
30
  "aria-controls": controls,
29
31
  "aria-label": label,
@@ -15,7 +15,8 @@ function renderControl({
15
15
  expanded,
16
16
  controls,
17
17
  shortcut,
18
- lang
18
+ lang,
19
+ unavailable
19
20
  }, controlButtons) {
20
21
  const Custom = controlButtons == null ? void 0 : controlButtons[key];
21
22
  if (Custom)
@@ -28,7 +29,8 @@ function renderControl({
28
29
  "aria-label": label,
29
30
  ...lang && { lang },
30
31
  ...shortcut && { "aria-keyshortcuts": shortcut.keys },
31
- onClick,
32
+ onClick: unavailable ? void 0 : onClick,
33
+ ...unavailable && { "aria-disabled": true },
32
34
  ...expanded !== void 0 && {
33
35
  "aria-expanded": expanded,
34
36
  "aria-controls": controls
@@ -45,7 +47,8 @@ function renderControl({
45
47
  {
46
48
  id,
47
49
  label,
48
- onClick,
50
+ onClick: unavailable ? void 0 : onClick,
51
+ unavailable,
49
52
  expanded,
50
53
  controls,
51
54
  shortcut,
@@ -15,16 +15,16 @@ ${text}` : text;
15
15
  Promise.all([
16
16
  import("../core/sanitize.mjs"),
17
17
  markdown ? import("../core/markdown.mjs") : null
18
- ]).then(([{ sanitizeHTML }, md]) => {
18
+ ]).then(([{ sanitizeHTML, trusted }, md]) => {
19
19
  const source = md ? md.markdownToHtml(text, { headingLevel }) : text;
20
- if (live)
21
- setHtml({ for: key, html: sanitizeHTML(source, { markdown: !!md }) });
20
+ const clean = sanitizeHTML(source, { markdown: !!md });
21
+ if (live) setHtml({ for: key, html: clean, inner: trusted(clean) });
22
22
  });
23
23
  return () => {
24
24
  live = false;
25
25
  };
26
26
  }, [text, key, markup, markdown, headingLevel]);
27
- return markup && (html == null ? void 0 : html.for) === key ? html.html : null;
27
+ return markup && (html == null ? void 0 : html.for) === key ? html : null;
28
28
  }
29
29
  const INLINE_ONLY = /* @__PURE__ */ new Set([
30
30
  "p",
@@ -50,11 +50,12 @@ const Markup = forwardRef(function Markup2({ as: Tag = "span", markup, language,
50
50
  const written = languageProps(lang);
51
51
  const kind = readAs(format, text);
52
52
  const markdown = kind === "markdown";
53
- const html = useSanitized(
53
+ const sanitized = useSanitized(
54
54
  kind === "plain" ? "" : text,
55
55
  markdown,
56
56
  headingLevel
57
57
  );
58
+ const html = (sanitized == null ? void 0 : sanitized.html) ?? null;
58
59
  if (!text) return null;
59
60
  if (kind === "plain")
60
61
  return /* @__PURE__ */ jsx(Tag, { ref, ...rest, ...written, children: text.split(/\r?\n/).map((line, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
@@ -62,13 +63,13 @@ const Markup = forwardRef(function Markup2({ as: Tag = "span", markup, language,
62
63
  line
63
64
  ] }, index)) });
64
65
  const Box = typeof Tag === "string" && INLINE_ONLY.has(Tag) && html && /<(p|ul|ol|div)[\s>]/i.test(html) ? "div" : Tag;
65
- return html !== null ? /* @__PURE__ */ jsx(
66
+ return sanitized ? /* @__PURE__ */ jsx(
66
67
  Box,
67
68
  {
68
69
  ref,
69
70
  ...rest,
70
71
  ...written,
71
- dangerouslySetInnerHTML: { __html: html }
72
+ dangerouslySetInnerHTML: { __html: sanitized.inner }
72
73
  }
73
74
  ) : (
74
75
  // Until the sanitizer arrives, Markdown shows without its syntax.
package/dist/ui/Tip.mjs CHANGED
@@ -87,6 +87,10 @@ function placeTip(event) {
87
87
  const tip = control && tipOf(control);
88
88
  if (tip) keepInside(tip);
89
89
  }
90
+ function placeTipAgain(control) {
91
+ const tip = tipOf(controlOf(control));
92
+ if (tip && isShown(tip)) keepInside(tip);
93
+ }
90
94
  function tipOf(control) {
91
95
  return Array.from(control.children).find(
92
96
  (child) => child.classList.contains("clover-tip")
@@ -197,5 +201,6 @@ export {
197
201
  SHORTCUT_KEYS,
198
202
  Tip,
199
203
  forwardShortcut,
200
- hideUntilBack
204
+ hideUntilBack,
205
+ placeTipAgain
201
206
  };
@@ -0,0 +1,19 @@
1
+ "use client";
2
+ const adopted = /* @__PURE__ */ new Set();
3
+ function adoptSheet(name, css) {
4
+ if (typeof document === "undefined" || adopted.has(name)) return;
5
+ adopted.add(name);
6
+ if ("adoptedStyleSheets" in document && "replaceSync" in CSSStyleSheet.prototype) {
7
+ const sheet = new CSSStyleSheet();
8
+ sheet.replaceSync(css);
9
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
10
+ return;
11
+ }
12
+ const style = document.createElement("style");
13
+ style.dataset.clover = name;
14
+ style.textContent = css;
15
+ document.head.append(style);
16
+ }
17
+ export {
18
+ adoptSheet
19
+ };
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ const __clover_sheet_map = '@layer clover{.clover-geomap{display:grid;gap:var(--clover-space-s)}.clover-geomap>div:first-child{overflow:hidden;border-radius:var(--clover-radius, 3px);background-color:var(--clover-color-secondary-muted, #e6e8eb)}.clover-geomap-error{position:absolute;inset:0;display:grid;place-items:center;margin:0;padding:var(--clover-space-m);color:var(--clover-color-primary-muted, #26292b);text-align:center}.clover-geomap>div:has(.maplibregl-canvas:focus-visible):after{content:"";position:absolute;inset:0;z-index:1;border-radius:inherit;box-shadow:inset 0 0 0 2px var(--clover-color-primary, #1a1d1e),inset 0 0 0 5px var(--clover-color-accent, #0065c3),inset 0 0 0 7px var(--clover-color-secondary, #fff);pointer-events:none}.clover-geomap .maplibregl-map{font:inherit!important}.clover-geomap{--clover-map-controls-inset: var(--clover-inset);--clover-map-controls-top: 0px;--clover-map-controls-start: calc( 2 * var(--clover-control) + 2 * var(--clover-space-s) )}.clover-geomap :is(.maplibregl-ctrl-top-right,.maplibregl-ctrl-bottom-right){right:var(--clover-map-controls-inset)!important}.clover-geomap .maplibregl-ctrl-top-right{top:var(--clover-map-controls-inset)!important}.clover-geomap :is(.maplibregl-ctrl-bottom-left,.maplibregl-ctrl-bottom-right){bottom:var(--clover-map-controls-inset)!important}.clover-geomap .maplibregl-ctrl-bottom-left{left:var(--clover-map-controls-inset)!important}.clover-geomap :is(.maplibregl-ctrl-top-right,.maplibregl-ctrl-bottom-left,.maplibregl-ctrl-bottom-right)>.maplibregl-ctrl{float:none!important;margin:0!important}.clover-geomap .maplibregl-ctrl-group{display:flex;gap:var(--clover-space-s);border-radius:0!important;background:none!important;box-shadow:none!important}.clover-geomap .maplibregl-ctrl-group button{position:relative!important;display:flex!important;align-items:center;justify-content:center;box-sizing:border-box;width:var(--clover-control)!important;height:var(--clover-control)!important;border:0!important;border-radius:var(--clover-radius-pill, 2rem)!important;background-color:var(--clover-color-control, #1a1d1e)!important;background-image:none!important;color:var(--clover-color-control-glyph, #fff);cursor:pointer;transition:var(--clover-transition, all .2s cubic-bezier(.16, 1, .3, 1))}.clover-geomap .maplibregl-ctrl-group button:is(:hover,:focus-visible){background-color:var(--clover-color-accent, #0065c3)!important;box-shadow:none!important}:where([data-high-contrast]) .clover-geomap .maplibregl-ctrl-group button:is(:hover,:focus-visible){background-color:var(--clover-accent-fill)!important}:where([data-high-contrast]) .clover-geomap .maplibregl-ctrl-group button:hover:not(:focus-visible){outline:var(--clover-accent-ring-hover)!important;outline-offset:1px!important}.clover-geomap .maplibregl-ctrl-group button .maplibregl-ctrl-icon{display:none!important}.clover-geomap .clover-geomap-glyph{flex:none;width:1rem;height:1rem}.clover-geomap>div:first-child{container-type:size}.clover-geomap .maplibregl-ctrl-attrib.maplibregl-compact{display:flex;flex-direction:row-reverse;align-items:flex-end;gap:var(--clover-space-xs);box-sizing:border-box!important;min-height:0!important;max-width:calc(100cqi - 2 * var(--clover-map-controls-inset) - var(--clover-map-controls-start));margin:0!important;padding:0!important;border-radius:0!important;background:none!important;color:inherit}.clover-geomap .maplibregl-ctrl-attrib-button{position:relative!important;inset:auto!important;display:inline-flex!important;flex:none;align-items:center;justify-content:center;box-sizing:border-box;width:var(--clover-space-l)!important;height:var(--clover-space-l)!important;border:0!important;border-radius:var(--clover-radius-pill, 2rem)!important;background-color:var(--clover-color-control, #1a1d1e)!important;background-image:none!important;color:var(--clover-color-control-glyph, #fff);cursor:pointer;list-style:none;transition:var(--clover-transition, all .2s cubic-bezier(.16, 1, .3, 1))}.clover-geomap .maplibregl-ctrl-attrib-button::-webkit-details-marker{display:none}.clover-geomap .maplibregl-ctrl-attrib-button:before{content:none!important}.clover-geomap .maplibregl-ctrl-attrib-button .clover-geomap-glyph{width:var(--clover-text-s);height:var(--clover-text-s)}.clover-geomap :is(.maplibregl-ctrl-attrib-button:is(:hover,:focus-visible),.maplibregl-compact-show>.maplibregl-ctrl-attrib-button){background-color:var(--clover-color-accent, #0065c3)!important;box-shadow:none!important}:where([data-high-contrast]) .clover-geomap :is(.maplibregl-ctrl-attrib-button:is(:hover,:focus-visible),.maplibregl-compact-show>.maplibregl-ctrl-attrib-button){background-color:var(--clover-accent-fill)!important}:where([data-high-contrast]) .clover-geomap .maplibregl-ctrl-attrib-button:hover:not(:focus-visible){outline:var(--clover-accent-ring-hover)!important;outline-offset:1px!important}:where([data-high-contrast]) .clover-geomap .maplibregl-compact-show>.maplibregl-ctrl-attrib-button:not(:focus-visible){outline:var(--clover-accent-ring)!important;outline-offset:1px!important}.clover-geomap .maplibregl-compact-show>.maplibregl-ctrl-attrib-button>.clover-tip{opacity:0;visibility:hidden}.clover-geomap .maplibregl-compact-show .maplibregl-ctrl-attrib-inner{box-sizing:border-box;min-width:0;max-height:max(calc(100cqb - 2 * var(--clover-map-controls-inset) - var(--clover-map-controls-top)),calc(2lh + 2 * var(--clover-space-2xs)));overflow-y:auto;padding:var(--clover-space-2xs) var(--clover-space-xs);border-radius:var(--clover-radius, 3px);background-color:var(--clover-color-primary, #1a1d1e);color:var(--clover-color-secondary, #fff);font-size:var(--clover-text-s);line-height:inherit;text-align:end;overflow-wrap:anywhere}.clover-geomap .maplibregl-ctrl-attrib-inner a{color:inherit!important;text-decoration:underline!important}.clover-geomap .maplibregl-ctrl-top-right .clover-tip{top:calc(100% + var(--clover-space-xs));bottom:auto}.clover-geomap .maplibregl-ctrl-top-right .clover-tip:before{top:auto;bottom:100%}@media (forced-colors: active){.clover-geomap :is(.maplibregl-ctrl-group button,.maplibregl-ctrl-attrib-button){border:1px solid ButtonText!important}}@media (forced-colors: active){.clover-geomap>div:has(.maplibregl-canvas:focus-visible):after{box-shadow:none;outline:3px solid CanvasText;outline-offset:-3px}}.clover-geomap-popup .maplibregl-popup-content{padding:var(--clover-space-2xs) var(--clover-space-xs);border-radius:var(--clover-radius, 3px);background-color:var(--clover-color-primary, #1a1d1e)!important;box-shadow:none!important;color:var(--clover-color-secondary, #fff);font:inherit;font-size:var(--clover-text-s)}.clover-geomap-popup{pointer-events:none}.clover-geomap-popup .maplibregl-popup-tip{display:none!important}.clover-geomap-popup .maplibregl-popup-content{max-width:min(18rem,100cqi - 2 * var(--clover-space-xs))}.clover-geomap-popup-date{display:block;color:var(--clover-color-secondary-alt, #c1c8cd)}.clover-geomap-places :is(span+span,.clover-geomap-place-date){display:block;margin-block-start:var(--clover-space-3xs);color:var(--clover-color-primary-muted, #26292b);font-size:var(--clover-text-s)}}';
3
+ export {
4
+ __clover_sheet_map as default
5
+ };
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ const __clover_sheet_media = '@layer clover{.clover-canvas-media{position:absolute;inset:0;z-index:1;pointer-events:none;container-type:size}.clover-canvas-media:has([aria-expanded=true],.clover-canvas-transport-mark-group:is(:hover,:focus-within)){z-index:4}.clover-canvas-captions{position:absolute;inset:0 0 max(var(--clover-canvas-controls-inset) + var(--clover-controls-shown) * (var(--clover-transport-room) - var(--clover-canvas-controls-inset)),var(--clover-transport-preview-top, 0px) + var(--clover-space-2xs));z-index:3;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;justify-content:safe flex-end;gap:var(--clover-space-2xs);padding:0 var(--clover-canvas-controls-inset);pointer-events:none;transition:bottom var(--clover-controls-timing)}.clover-canvas:has(.clover-canvas-transport-seek-area[data-tip-hidden]) .clover-canvas-captions{--clover-transport-preview-top: 0px}.clover-canvas-captions-cue{max-width:90%;padding:var(--clover-space-2xs) var(--clover-space-xs);border-radius:var(--clover-radius, 3px);background-color:var(--clover-player-caption-surface, rgb(0 0 0 / 85%));color:var(--clover-player-caption-text, #fff);text-shadow:var(--clover-player-caption-edge, none);font-size:var(--clover-text-s);line-height:1.35;text-align:center;text-wrap:balance;white-space:pre-line}.clover-canvas-captions-cue-label{display:block;font-size:var(--clover-text-s);font-weight:500}.clover-canvas-media>*{--clover-cue-size: var(--clover-text-s)}@container (min-width: 38.5rem){.clover-canvas-media>*{--clover-cue-size: 1rem}.clover-canvas-captions-cue{font-size:inherit}}@container (min-width: 44rem){.clover-canvas-media>*{--clover-cue-size: var(--clover-text-m)}.clover-canvas-captions-cue{font-size:var(--clover-text-m)}}@container (min-width: 47.5rem){.clover-canvas-media>*{--clover-cue-size: var(--clover-text-l)}.clover-canvas-captions-cue{font-size:var(--clover-text-l)}}.clover-canvas-transport{position:absolute;inset:auto 0 0;z-index:2;display:flex;flex-direction:column;padding:var(--clover-space-xl) var(--clover-canvas-controls-inset) var(--clover-canvas-controls-inset);--clover-controls-edge: 1;--clover-transport-thumb: 12px;--clover-transport-track: var(--clover-space-xs);-webkit-user-select:none;user-select:none;--clover-transport-menu-room: calc( 100cqb - var(--clover-canvas-controls-inset) - var(--clover-control) - var(--clover-space-s) - var(--clover-space-xs) )}.clover-canvas-transport:before{position:absolute;inset:0;z-index:-1;background:linear-gradient(to top,#000000c7,#0009 calc(100% - var(--clover-space-xl)),#0000);pointer-events:none;content:""}.clover-canvas-transport:has([aria-expanded=true],:focus-visible,>.clover-canvas-transport-seek-area:hover){z-index:4}.clover-canvas-transport-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--clover-space-xs) var(--clover-space-s);min-width:0}.clover-canvas-transport-bar>*{flex-shrink:0}.clover-canvas-transport-bar>:is(:hover,:active,:focus-within){z-index:1}.clover-canvas-transport-bar>.clover-canvas-transport-status{display:flex;flex:1 1 0;align-items:center;gap:var(--clover-space-s);min-width:min-content}.clover-canvas-transport-end{display:flex;gap:var(--clover-space-s);margin-inline-start:auto}@container (max-width: 37.5rem){.clover-canvas-transport-bar:has([data-button=chapters])>.clover-canvas-transport-status{order:-1;flex-basis:100%}}@container (max-width: 28rem){.clover-canvas-transport-bar>.clover-canvas-transport-status{order:-1;flex-basis:100%}}.clover-canvas-transport-button svg{fill:currentColor;stroke:none}.clover-canvas-transport-button svg [stroke]{fill:none}.clover-canvas-transport-button:hover,.clover-canvas-transport-button:focus-visible{background-color:var(--clover-color-accent, #0065c3)}:where([data-high-contrast]) .clover-canvas-transport-button:is(:hover,:focus-visible){background-color:var(--clover-accent-fill)}:where([data-high-contrast]) .clover-canvas-transport-button:hover:not(:focus-visible){outline:var(--clover-accent-ring-hover);outline-offset:1px}button.clover-canvas-transport-button[aria-pressed=true]:after{content:"";position:absolute;inset-inline:var(--clover-space-s);bottom:var(--clover-space-2xs);border-bottom:2px solid;border-radius:1px}.clover-canvas-transport-button:focus-visible{outline:none;box-shadow:0 0 0 2px var(--clover-color-secondary, #fff),0 0 0 4px var(--clover-color-accent, #0065c3)}.clover-canvas-transport-seek-area{position:relative;display:flex;margin-bottom:var(--clover-space-xs);--clover-transport-gap: var(--clover-space-2xs)}.clover-canvas-transport-points,.clover-canvas-transport-marks{--clover-transport-mark: var(--clover-space-s);position:absolute;inset:0;pointer-events:none}.clover-canvas-transport-points{z-index:0}.clover-canvas-transport-seek{position:relative;z-index:1}.clover-canvas-transport-marks{z-index:2}.clover-canvas-transport-mark-point{position:absolute;top:calc(50% - var(--clover-transport-track) / 2 - var(--clover-space-s) - (var(--clover-transport-mark) + 2 * 3px) / 2);box-sizing:content-box;width:var(--clover-transport-mark);height:var(--clover-transport-mark);border:2px solid var(--clover-color-secondary, #fff);border-radius:50%;background-color:var(--clover-color-accent, #0065c3);box-shadow:0 0 0 1px var(--clover-color-primary, #1a1d1e);translate:-50% -50%}.clover-canvas-transport-mark-point:after{position:absolute;top:calc(100% + 3px);left:50%;width:3px;height:calc(var(--clover-space-s) + var(--clover-transport-track));translate:-50% 0;background-color:color-mix(in srgb,var(--clover-color-accent, #0065c3) 38.2%,transparent);-webkit-mask-image:linear-gradient(#000,#0000);mask-image:linear-gradient(#000,#0000);content:""}.clover-canvas-transport-mark-point[data-active=true]{box-shadow:0 0 0 2px var(--clover-color-accent, #0065c3),0 0 0 3px var(--clover-color-primary, #1a1d1e)}.clover-canvas-transport-mark-group{position:absolute;top:calc(50% - var(--clover-transport-track) / 2 - var(--clover-space-l));width:var(--clover-space-l);height:var(--clover-space-l);translate:-50% 0;pointer-events:var(--clover-controls-events, auto)}.clover-canvas-transport-mark{display:block;width:100%;height:100%;margin:0;padding:0;border:none;border-radius:50%;background:none;cursor:pointer}.clover-canvas-transport-mark:focus-visible{outline:none}.clover-canvas-transport-mark-group:is(:hover,:focus-within){z-index:1}.clover-canvas-transport-mark-group>.clover-tip.clover-canvas-transport-mark-tip{text-align:start;--clover-tip-x: clamp( var(--clover-space-xs) - var(--clover-mark-x, 50cqw), -50%, 100cqw - var(--clover-space-xs) - var(--clover-mark-x, 50cqw) - 100% );display:flex;flex-direction:column;max-width:min(18rem,100cqw - 2 * var(--clover-space-xs));max-height:calc(100cqh - var(--clover-canvas-controls-inset) - var(--clover-transport-bar-height, var(--clover-control)) - var(--clover-space-xs) - var(--clover-space-l) / 2 - var(--clover-transport-track) / 2 - var(--clover-space-l) - 3 * var(--clover-space-xs));transform:translate(calc(var(--clover-tip-x) + 50%))}.clover-canvas-transport-mark-group:focus-within:not([data-tip-hidden])>.clover-tip.clover-canvas-transport-mark-tip{opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s}.clover-canvas:has(.clover-canvas-transport-marks){--clover-transport-marks-room: calc( 2 * var(--clover-space-s) + 2 * 3px - (var(--clover-space-l) - var(--clover-space-xs)) / 2 )}.clover-canvas-transport-mark-words{min-height:0;overflow-y:auto}.clover-canvas-transport-mark-tip{--clover-color-primary-muted: var(--clover-color-secondary-alt, #c1c8cd);color:var(--clover-color-secondary-alt, #c1c8cd)}.clover-canvas-transport-mark-group .clover-canvas-transport-mark-tip>.clover-steps{flex:none;margin-top:var(--clover-space-xs)}.clover-canvas-transport input[type=range]{appearance:none;-webkit-appearance:none;width:100%;height:var(--clover-space-l);margin:0;background:transparent;cursor:pointer;touch-action:none}.clover-canvas-transport input.clover-canvas-transport-volume{width:var(--clover-space-2xl)}@container (max-width: 28rem){.clover-canvas-transport input.clover-canvas-transport-volume{width:var(--clover-space-xl)}.clover-canvas-transport-bar,.clover-canvas-transport-end{column-gap:var(--clover-space-xs)}}.clover-canvas-transport input[type=range]::-webkit-slider-runnable-track{height:var(--clover-transport-track);border-radius:var(--clover-radius, 3px);background:linear-gradient(to right,var(--clover-color-accent, #0065c3) var(--clover-transport-progress, 0%),rgb(255 255 255 / 90%) var(--clover-transport-progress, 0%),rgb(255 255 255 / 90%) var(--clover-transport-loaded, 0%),var(--clover-player-track, rgb(255 255 255 / 65%)) var(--clover-transport-loaded, 0%));box-shadow:var(--clover-player-track-shadow, none)}.clover-canvas-transport input[type=range]::-moz-range-track{height:var(--clover-transport-track);border-radius:var(--clover-radius, 3px);background:linear-gradient(to right,var(--clover-color-accent, #0065c3) var(--clover-transport-progress, 0%),rgb(255 255 255 / 90%) var(--clover-transport-progress, 0%),rgb(255 255 255 / 90%) var(--clover-transport-loaded, 0%),var(--clover-player-track, rgb(255 255 255 / 65%)) var(--clover-transport-loaded, 0%));box-shadow:var(--clover-player-track-shadow, none)}.clover-canvas-transport input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:var(--clover-transport-thumb);height:var(--clover-transport-thumb);margin-top:calc((var(--clover-transport-track) - var(--clover-transport-thumb)) / 2);border:none;border-radius:var(--clover-radius-pill, 2rem);background-color:var(--clover-player-text, #fff)}.clover-canvas-transport input[type=range]::-moz-range-thumb{width:var(--clover-transport-thumb);height:var(--clover-transport-thumb);border:none;border-radius:var(--clover-radius-pill, 2rem);background-color:var(--clover-player-text, #fff)}.clover-canvas-transport input[type=range]:focus-visible{outline:none}.clover-canvas-transport input[type=range]:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--clover-color-accent, #0065c3),0 0 0 4px var(--clover-player-text, #fff),0 0 0 6px #0009}.clover-canvas-transport input[type=range]:focus-visible::-moz-range-thumb{box-shadow:0 0 0 2px var(--clover-color-accent, #0065c3),0 0 0 4px var(--clover-player-text, #fff),0 0 0 6px #0009}.clover-canvas-transport-time{display:flex;align-items:center;gap:var(--clover-space-xs);color:var(--clover-player-text, #fff);font-size:var(--clover-text-s);font-variant-numeric:tabular-nums;white-space:nowrap;text-shadow:0 1px 2px rgb(0 0 0 / 90%)}.clover-canvas-transport-frames{position:relative;display:flex}button.clover-canvas-transport-time{margin:0;padding:var(--clover-space-2xs) var(--clover-space-xs);border:0;border-radius:var(--clover-radius, 3px);background:none;font:inherit;font-size:var(--clover-text-s);cursor:pointer}button.clover-canvas-transport-time:is(:hover,[aria-expanded=true]){background-color:#0006}button.clover-canvas-transport-time:focus-visible{outline:2px solid var(--clover-player-text, #fff)}.clover-canvas-transport-place{display:inline-grid;justify-items:end;font-variant-numeric:tabular-nums}.clover-canvas-transport-place>*{grid-area:1 / 1}.clover-canvas-transport-place>.clover-canvas-transport-place-room[hidden]{display:block;visibility:hidden}.clover-canvas-transport-frames>.clover-canvas-menu{right:0;bottom:calc(100% + var(--clover-space-s));left:auto;max-width:min(20rem,100cqi - 2 * var(--clover-canvas-controls-inset));max-height:min(24rem,var(--clover-transport-menu-room),var(--clover-transport-menu-above, 100cqb) - var(--clover-space-s) - var(--clover-space-xs));translate:var(--clover-transport-menu-shift, 0px) 0}.clover-canvas-transport-menu{position:relative;display:flex}.clover-canvas-transport-options{position:absolute;right:0;bottom:calc(100% + var(--clover-space-s));display:flex;flex-direction:column;box-sizing:border-box;min-width:min(11rem,100cqi - 2 * var(--clover-canvas-controls-inset));max-width:calc(100cqi - 2 * var(--clover-canvas-controls-inset));max-height:min(16rem,var(--clover-transport-menu-room),var(--clover-transport-menu-above, 100cqb) - var(--clover-space-s) - var(--clover-space-xs));translate:var(--clover-transport-menu-shift, 0px) 0;margin:0;padding:var(--clover-space-xs);border:none;border-radius:var(--clover-radius, 3px);background-color:var(--clover-player-menu-surface, #151718);color:var(--clover-player-text, #fff);overflow-y:auto}.clover-canvas-transport-option{display:flex;flex:none;align-items:center;gap:var(--clover-space-xs);min-height:var(--clover-space-l);padding:var(--clover-space-xs) var(--clover-space-s);border-radius:var(--clover-radius, 3px);font-size:var(--clover-text-s);cursor:pointer}.clover-canvas-transport-option:hover{background-color:var(--clover-player-menu-hover, #26292b)}.clover-canvas-transport-option:has(input:checked){background-color:color-mix(in srgb,var(--clover-color-accent, #0065c3) 24%,transparent);font-weight:600}.clover-canvas-transport-option:has(input:focus-visible){box-shadow:inset 0 0 0 2px var(--clover-player-text, #fff)}.clover-canvas-transport-code{flex:none;min-width:var(--clover-space-l);color:color-mix(in srgb,currentColor 72%,transparent);font-size:var(--clover-text-xs);font-weight:600;line-height:1}.clover-canvas-transport-options:has(.clover-canvas-transport-code),.clover-canvas-transport-menu:has([data-button=chapters]) .clover-canvas-transport-options{min-width:min(16rem,100cqi - 2 * var(--clover-canvas-controls-inset))}.clover-canvas-transport-option:has(>.clover-entry-thumbnail){display:grid;grid-template-columns:auto minmax(0,1fr);justify-items:start;gap:var(--clover-space-2xs) var(--clover-space-s);padding-block-end:var(--clover-space-s)}.clover-canvas-transport-options.clover-canvas-menu{border-radius:var(--clover-radius, 6px);background-color:var(--clover-color-secondary, #fff);color:var(--clover-color-primary, #1a1d1e)}.clover-canvas-menu>.clover-canvas-transport-option{align-items:baseline;gap:var(--clover-space-s);font-size:inherit}.clover-canvas-menu>.clover-canvas-transport-option:hover{background-color:var(--clover-color-secondary-muted, #e6e8eb)}@media (forced-colors: none){.clover-canvas-menu>.clover-canvas-transport-option:has(input:checked){background-color:color-mix(in srgb,var(--clover-color-accent, #0065c3) 8%,transparent)}}.clover-canvas-menu>.clover-canvas-transport-option:has(input:focus-visible){box-shadow:none;outline:2px solid var(--clover-color-accent, #0065c3);outline-offset:-2px}.clover-canvas-transport-option input{position:absolute;opacity:0;pointer-events:none}@media (forced-colors: active){.clover-canvas-transport button.clover-canvas-transport-button{border:1px solid ButtonText}.clover-canvas-transport input[type=range]{forced-color-adjust:none}.clover-canvas-transport input[type=range]::-webkit-slider-runnable-track{border:1px solid CanvasText;background:linear-gradient(to right,Highlight var(--clover-transport-progress, 0%),Canvas var(--clover-transport-progress, 0%));box-shadow:none}.clover-canvas-transport input[type=range]::-moz-range-track{border:1px solid CanvasText;background:linear-gradient(to right,Highlight var(--clover-transport-progress, 0%),Canvas var(--clover-transport-progress, 0%));box-shadow:none}.clover-canvas-transport input[type=range]::-webkit-slider-thumb,.clover-canvas-transport input[type=range]:focus-visible::-webkit-slider-thumb{background-color:CanvasText;box-shadow:0 0 0 2px Canvas}.clover-canvas-transport input[type=range]::-moz-range-thumb,.clover-canvas-transport input[type=range]:focus-visible::-moz-range-thumb{background-color:CanvasText;box-shadow:0 0 0 2px Canvas}.clover-canvas-transport input[type=range]:focus-visible{outline:2px solid CanvasText;outline-offset:2px}.clover-canvas-transport-button:focus-visible{outline:3px solid CanvasText;outline-offset:2px;box-shadow:none}.clover-canvas-transport-button:is([data-active],[aria-pressed=true]),.clover-canvas-transport-option:has(input:checked){background-color:Highlight;color:HighlightText}.clover-captions-icon[data-on] .clover-captions-icon-letters{stroke:ButtonFace}.clover-canvas-transport-button[data-active] .clover-captions-icon[data-on] .clover-captions-icon-letters{stroke:Highlight}}@media (prefers-reduced-motion: reduce){.clover-canvas-transport,.clover-canvas-transport-button,.clover-canvas-transport-button svg{transition:none}}.clover-canvas-transport-seek[data-gaps]{--clover-transport-disk: calc(var(--clover-transport-thumb) / 2 + 1px);-webkit-mask-image:radial-gradient(circle at calc(var(--clover-transport-thumb) / 2 + (100% - var(--clover-transport-thumb)) * var(--clover-transport-at, 0)) 50%,#000 var(--clover-transport-disk),transparent var(--clover-transport-disk)),var(--clover-transport-gaps);mask-image:radial-gradient(circle at calc(var(--clover-transport-thumb) / 2 + (100% - var(--clover-transport-thumb)) * var(--clover-transport-at, 0)) 50%,#000 var(--clover-transport-disk),transparent var(--clover-transport-disk)),var(--clover-transport-gaps)}.clover-canvas-transport-seek[data-gaps]:focus-visible{--clover-transport-disk: calc(var(--clover-transport-thumb) / 2 + 6px)}.clover-canvas-transport-chapter-span{position:absolute;z-index:1;top:50%;box-sizing:border-box;border-inline:calc(var(--clover-transport-gap) / 2) solid transparent;background-clip:padding-box;height:var(--clover-space-s);translate:0 -50%;border-radius:var(--clover-radius, 3px);background-color:var(--clover-player-text, #fff);opacity:.5;pointer-events:none}.clover-canvas-transport-seek-area>.clover-tip{left:var(--clover-transport-preview, 50%)}.clover-canvas-transport-seek-area>.clover-tip:has(>.clover-tip-image){padding:var(--clover-space-s)}.clover-canvas-transport-seek-area>.clover-tip .clover-tip-image{width:var(--clover-picture);max-height:none;margin-block-end:var(--clover-space-xs)}.clover-canvas-transport-seek-area:is(:hover,:has(>input:focus-visible)):not([data-tip-hidden])>.clover-tip{opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s}@media (forced-colors: active){.clover-canvas-transport-mark-point:after{position:absolute;top:calc(100% + 3px);left:50%;width:3px;height:calc(var(--clover-space-s) + var(--clover-transport-track));translate:-50% 0;background-color:color-mix(in srgb,var(--clover-color-accent, #0065c3) 38.2%,transparent);content:""}.clover-canvas-transport-mark-point[data-active=true]{outline:2px solid Highlight;outline-offset:1px}.clover-canvas-transport-chapter-span{background-color:Highlight;opacity:1}}.clover-canvas-transport-status>.clover-canvas-transport-chapter{flex:1 1 auto;overflow:hidden;width:0;min-width:0;color:color-mix(in srgb,var(--clover-player-text, #fff) 85%,transparent);font-size:var(--clover-text-s);text-overflow:ellipsis;white-space:nowrap;text-shadow:0 1px 2px rgb(0 0 0 / 90%)}.clover-canvas[data-player]{--clover-controls-shown: 1;--clover-controls-events: auto}.clover-canvas[data-player]>.clover-canvas-scrim{display:none}.clover-canvas[data-player]>.clover-canvas-controls>*{opacity:1;translate:none}.clover-canvas[data-player]:has(>.clover-canvas-viewport:focus-visible)>.clover-canvas-media:after{content:"";position:absolute;inset:0;z-index:3;pointer-events:none;box-shadow:inset 0 0 0 2px var(--clover-color-primary, #1a1d1e),inset 0 0 0 5px var(--clover-color-accent, #0065c3),inset 0 0 0 7px var(--clover-color-secondary, #fff)}.clover-canvas-player{--clover-player-pad: var(--clover-space-l);--clover-player-text: var(--clover-color-control-glyph, #fff);--clover-player-muted: color-mix( in srgb, var(--clover-player-text) 80%, transparent );--clover-player-dark: var(--clover-color-control, #1a1d1e);--clover-player-top: calc( var(--clover-canvas-controls-inset, var(--clover-space-l)) + var(--clover-control) + var(--clover-space-s) );--clover-player-bottom: calc( var(--clover-transport-room, 0px) + 2.7 * var(--clover-cue-size, var(--clover-text-s)) + 2 * var(--clover-space-2xs) + var(--clover-space-s) );--clover-player-art-height: max( 0px, calc(100cqb - var(--clover-player-top) - var(--clover-player-bottom)) );position:absolute;inset:0;isolation:isolate;box-sizing:border-box;display:flex;align-items:center;justify-content:center;gap:var(--clover-space-l);padding:var(--clover-player-top) var(--clover-player-pad) var(--clover-player-bottom);color:var(--clover-player-text)}.clover-canvas-player-ground{--clover-player-depth: color-mix( in srgb, var(--clover-player-dark) 82%, var(--clover-player-text) );--clover-player-glow: color-mix( in srgb, var(--clover-player-text) 61.8%, #0000 );--clover-player-shade: color-mix( in srgb, var(--clover-player-dark) 61.8%, #0000 );position:absolute;inset:0;z-index:-1;overflow:hidden;isolation:isolate;background-color:color-mix(in srgb,var(--clover-color-accent, #0065c3) 23.6%,var(--clover-player-dark))}.clover-canvas-player-ground>img{position:absolute;inset:-24%;z-index:0;width:148%;height:148%;object-fit:cover;filter:blur(var(--clover-space-2xl)) saturate(2.618)}.clover-canvas-player-ground[data-art]:before{content:"";position:absolute;inset:0;z-index:1;background:radial-gradient(61.8% 85% at 23.6% 23.6%,var(--clover-player-glow),#0000 70%),radial-gradient(50% 70% at 85% 76.4%,var(--clover-player-glow),#0000 70%);mix-blend-mode:soft-light}.clover-canvas-player-ground[data-art]:after{content:"";position:absolute;inset:0;z-index:2;background:radial-gradient(61.8% 76.4% at 0% 100%,var(--clover-player-shade),#0000 100%),radial-gradient(50% 61.8% at 100% 0%,var(--clover-player-shade),#0000 100%),var(--clover-player-depth);mix-blend-mode:multiply}.clover-canvas-player>.clover-canvas-transport:before{background:linear-gradient(to top,color-mix(in srgb,var(--clover-player-dark) 38.2%,#0000),#0000)}.clover-canvas-player-art{flex:none;display:grid;place-items:center;overflow:hidden;width:min(calc(var(--clover-player-art-height) * var(--clover-player-art-ratio, 1)),40cqi,12rem);aspect-ratio:var(--clover-player-art-ratio, 1);border-radius:calc(2 * var(--clover-radius, 3px));background-color:color-mix(in srgb,var(--clover-color-accent, #0065c3) 40%,var(--clover-player-dark));box-shadow:0 .618rem 1.618rem color-mix(in srgb,var(--clover-player-dark) 45%,#0000)}.clover-canvas-player-art>img{display:block;width:100%;height:100%;object-fit:cover;opacity:0}.clover-canvas-player-art[data-loaded]>img{opacity:1}.clover-canvas-player-note{width:38.2%;height:38.2%;fill:currentColor;opacity:.85}.clover-canvas-player-head{flex:0 1 auto;max-width:38rem;min-width:0}.clover-canvas-player-title,.clover-canvas-player-part-of{margin:0;overflow-wrap:break-word}.clover-canvas-player-title{font-size:inherit;font-weight:700;line-height:1.25;text-wrap:balance}.clover-canvas-player-part-of{margin-top:var(--clover-space-xs);color:var(--clover-player-muted);font-size:var(--clover-text-s);line-height:1.35}.clover-canvas-player-cues{display:contents}@container (max-width: 30rem){.clover-canvas-player{--clover-player-pad: var(--clover-space-m)}}@container (max-height: 24rem){.clover-canvas-player{--clover-player-room: calc( 100cqb - 2 * var(--clover-canvas-controls-inset) );--clover-player-art-height: clamp( var(--clover-player-art-least, 7.416rem), var(--clover-player-room), 12rem );--clover-player-centering: max( 0px, (var(--clover-player-room) - var(--clover-player-art-height)) / 2 );display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto 1fr auto auto;align-content:end;gap:0 var(--clover-player-pad);padding:calc(var(--clover-canvas-controls-inset) + var(--clover-player-centering)) var(--clover-canvas-controls-inset)}.clover-canvas-player-art{grid-row:1 / -1;align-self:end;width:min(calc(var(--clover-player-art-height) * var(--clover-player-art-ratio, 1)),38.2cqi,12rem)}.clover-canvas-player-head,.clover-canvas-player-cues,.clover-canvas-player .clover-canvas-transport-seek-area,.clover-canvas-player .clover-canvas-transport-bar{grid-column:2}.clover-canvas-player-head{grid-row:1;max-width:none;margin-inline-end:calc(var(--clover-canvas-controls-width, var(--clover-control)) + var(--clover-space-s))}.clover-canvas-player-cues{grid-row:2;z-index:3;display:flex;flex-direction:column;justify-content:flex-end;gap:var(--clover-space-2xs);padding:var(--clover-space-xs) 0 calc(var(--clover-space-2xs) + var(--clover-transport-marks-room, 0px));pointer-events:none}.clover-canvas-player-cues>.clover-canvas-captions{position:static;align-items:flex-start;padding:0;transition:none}.clover-canvas-player-cues .clover-canvas-captions-cue{max-width:100%;text-align:start}.clover-canvas-player>.clover-canvas-transport{display:contents}.clover-canvas-player>.clover-canvas-transport:before{display:none}.clover-canvas-player .clover-canvas-transport-seek-area{grid-row:3;z-index:2}.clover-canvas-player .clover-canvas-transport-bar{grid-row:4;z-index:2}.clover-canvas-player :is(.clover-canvas-transport-seek-area:is(:hover,:focus-within),.clover-canvas-transport-bar:has([aria-expanded=true],:focus-visible)){z-index:4}.clover-canvas-player-title,.clover-canvas-player-part-of{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.clover-canvas-player-part-of{-webkit-line-clamp:1}}@container (max-height: 24rem) and (max-width: 37.5rem){.clover-canvas-player{--clover-player-art-height: var(--clover-space-2xl);--clover-player-centering: 0px}.clover-canvas-player-art{grid-row:1;align-self:center}.clover-canvas-player-head{align-self:center}.clover-canvas-player-cues,.clover-canvas-player .clover-canvas-transport-seek-area,.clover-canvas-player .clover-canvas-transport-bar{grid-column:1 / -1}}@container (max-height: 15.236rem){.clover-canvas-player:has(>.clover-canvas-player-cues>.clover-canvas-captions)>.clover-canvas-player-head{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}}@container (max-height: 15.236rem) and (min-width: 38.5rem){.clover-canvas-player-cues .clover-canvas-captions-cue{font-size:var(--clover-text-s)}}@container (max-height: 15.236rem) and (min-width: 44rem){.clover-canvas-player-cues .clover-canvas-captions-cue{font-size:inherit}}@container (max-height: 15.236rem) and (min-width: 47.5rem){.clover-canvas-player-cues .clover-canvas-captions-cue{font-size:var(--clover-text-m)}}@container (max-height: 15.236rem) and (max-width: 37.5rem){.clover-canvas-player:has(>.clover-canvas-player-cues>.clover-canvas-captions)>.clover-canvas-player-art{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip-path:inset(50%)}}@media (prefers-reduced-motion: no-preference){.clover-canvas-player-art>img{transition:opacity 382ms ease}}@media (forced-colors: active){.clover-canvas-player-ground{display:none}.clover-canvas-player{color:CanvasText}}}';
3
+ export {
4
+ __clover_sheet_media as default
5
+ };