@nulib/clover 4.2.0 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/components/Canvas/CanvasView.mjs +33 -4
- package/dist/components/Canvas/ChaptersMenu.mjs +6 -1
- package/dist/components/Canvas/ControlMenu.mjs +9 -2
- package/dist/components/Canvas/Controls.mjs +17 -4
- package/dist/components/Canvas/FrameAnimation.mjs +3 -0
- package/dist/components/Canvas/ImageControls.mjs +8 -3
- package/dist/components/Canvas/Placeholder.mjs +5 -2
- package/dist/components/Canvas/RowFits.mjs +3 -1
- package/dist/components/Canvas/media/MediaBody.mjs +3 -0
- package/dist/components/Canvas/media/Player.mjs +3 -0
- package/dist/components/Canvas/media/Transport.mjs +3 -0
- package/dist/components/Canvas/media/useMediaElement.mjs +32 -9
- package/dist/components/Items/masonry.mjs +2 -0
- package/dist/components/Map/MapView.mjs +42 -2
- package/dist/components/Map/maplibre-sheet.mjs +5 -0
- package/dist/components/Map/sheet.mjs +19 -0
- package/dist/components/Map/worker.mjs +28 -1
- package/dist/components/Scene/SceneView.mjs +3 -0
- package/dist/core/content-state.mjs +1 -11
- package/dist/core/load.mjs +9 -1
- package/dist/core/presentation.mjs +4 -5
- package/dist/core/sanitize.mjs +15 -3
- package/dist/core/svg-shape.mjs +2 -1
- package/dist/core/thumbnail.mjs +15 -4
- package/dist/core/trusted.mjs +26 -0
- package/dist/core/vtt.mjs +20 -9
- package/dist/index.d.mts +200 -1
- package/dist/index.mjs +11 -0
- package/dist/lib/renderer/CanvasRenderer.mjs +48 -7
- package/dist/lib/renderer/camera/CameraAnimator.mjs +39 -20
- package/dist/lib/renderer/input/GestureController.mjs +15 -5
- package/dist/map/index.d.mts +6 -1
- package/dist/styles/collection-select.css +1 -0
- package/dist/styles/core.css +1 -0
- package/dist/styles/default.css +1 -0
- package/dist/styles/items.css +1 -0
- package/dist/styles/map.css +1 -0
- package/dist/{web-components/Transport-VUxSEIQO.mjs → styles/media.css} +1 -1
- package/dist/styles/panel.css +1 -0
- package/dist/styles/scene.css +1 -0
- package/dist/styles/split.css +1 -0
- package/dist/styles.css +1 -1
- package/dist/templates/default/Default.mjs +2 -0
- package/dist/templates/document/Document.mjs +12 -2
- package/dist/templates/document/Sheets.mjs +2 -0
- package/dist/templates/gallery/Gallery.mjs +3 -1
- package/dist/templates/index.d.mts +102 -6
- package/dist/templates/shared/Lightbox.mjs +50 -3
- package/dist/templates/shared/LightboxView.mjs +3 -1
- package/dist/templates.css +1 -1
- package/dist/ui/Button.mjs +3 -1
- package/dist/ui/ControlCluster.mjs +6 -3
- package/dist/ui/Markup.mjs +8 -7
- package/dist/ui/Tip.mjs +6 -1
- package/dist/ui/adoptSheet.mjs +19 -0
- package/dist/ui/sheets/map.mjs +5 -0
- package/dist/ui/sheets/media.mjs +5 -0
- package/dist/ui/sheets/scene.mjs +5 -0
- package/dist/web-components/{About-D1TBGGPL.mjs → About-uNCjvWgs.mjs} +1 -1
- package/dist/web-components/{AnnotationItems-DTacmRA9.mjs → AnnotationItems-JwlcCvPo.mjs} +1 -1
- package/dist/web-components/{AnnotationMenu-DYc9ekWS.mjs → AnnotationMenu-BWyKEyvW.mjs} +1 -1
- package/dist/web-components/{AnnotationState--5ghW0C2.mjs → AnnotationState-Bhqs75Br.mjs} +1 -1
- package/dist/web-components/{Annotations-BG8lPjk1.mjs → Annotations-C7y0N8Lj.mjs} +1 -1
- package/dist/web-components/{Annotations-Bvc_FmJ5.mjs → Annotations-ZwcRh2UE.mjs} +2 -2
- package/dist/web-components/{Body-QQ1DmnbP.mjs → Body-DyrvRDkt.mjs} +1 -1
- package/dist/web-components/{BodyAlert-A4xRjOKr.mjs → BodyAlert-XV88XjL8.mjs} +1 -1
- package/dist/web-components/Button-BIaw5k1q.mjs +1 -0
- package/dist/web-components/{Camera-DqT_1MgD.mjs → Camera-7SlnmGtb.mjs} +1 -1
- package/dist/web-components/{Canvas2DBackend-TZtR3zHf.mjs → Canvas2DBackend-DBGZRGid.mjs} +1 -1
- package/dist/web-components/CanvasView-CmDxczm9.mjs +2 -0
- package/dist/web-components/{CaptionDetails-DMRWmtaY.mjs → CaptionDetails-Bxz8AXMz.mjs} +1 -1
- package/dist/web-components/ChaptersMenu-CMQiBqvx.mjs +1 -0
- package/dist/web-components/{Chevron-DFGbSGPI.mjs → Chevron-B3XaClVT.mjs} +1 -1
- package/dist/web-components/{ChoiceMenu-C80kdxvq.mjs → ChoiceMenu-pugo5zxI.mjs} +1 -1
- package/dist/web-components/{Collection-B4CxBsFL.mjs → Collection-Ch_FeSKp.mjs} +1 -1
- package/dist/web-components/{CollectionSelect-DO8YO2p7.mjs → CollectionSelect-2jDEkOcK.mjs} +1 -1
- package/dist/web-components/{Connected-DthCPaHl.mjs → Connected-3hnIPSWM.mjs} +1 -1
- package/dist/web-components/{Connected-sYBn_9MK.mjs → Connected-Bne3I5E1.mjs} +1 -1
- package/dist/web-components/{Connected-CcbVqzmj.mjs → Connected-DuANHN93.mjs} +1 -1
- package/dist/web-components/{Contents-AVPYYXht.mjs → Contents-DIQrin_-.mjs} +1 -1
- package/dist/web-components/ControlMenu-BydnCTTQ.mjs +1 -0
- package/dist/web-components/ControlsFade-CleBsk-W.mjs +1 -0
- package/dist/web-components/CountMenu-CReBYVwu.mjs +1 -0
- package/dist/web-components/Cue-2zGQuUOC.mjs +1 -0
- package/dist/web-components/Document-pjc2qOX4.mjs +1 -0
- package/dist/web-components/{DomLayers-DlRapZ1u.mjs → DomLayers-D9X_FPto.mjs} +1 -1
- package/dist/web-components/{Download-Ci_JUTVd.mjs → Download-B8MpVqgk.mjs} +1 -1
- package/dist/web-components/{EntryBodies-C0ICfS2R.mjs → EntryBodies-DdpRfU5U.mjs} +1 -1
- package/dist/web-components/{EntryThumbnail-DxHhfRo_.mjs → EntryThumbnail-DM7Zjj1z.mjs} +1 -1
- package/dist/web-components/{FieldPill-CVfeeafm.mjs → FieldPill-BAql8_6s.mjs} +1 -1
- package/dist/web-components/{FrameAnimation-AZpVvu0R.mjs → FrameAnimation-Dj46RxuL.mjs} +1 -1
- package/dist/web-components/Gallery-B9FNA02Z.mjs +1 -0
- package/dist/web-components/{HideToggle-0nlIo-f8.mjs → HideToggle-duXvDvDw.mjs} +1 -1
- package/dist/web-components/ImageControls-DODKjC0d.mjs +1 -0
- package/dist/web-components/{Items-Drd82_Jj.mjs → Items-BHTQJU7T.mjs} +1 -1
- package/dist/web-components/{Label-BIjqJ-_T.mjs → Label-D4dlrtpH.mjs} +1 -1
- package/dist/web-components/{LanguageChoice-DkSc-n6g.mjs → LanguageChoice-DR3X-dtJ.mjs} +1 -1
- package/dist/web-components/LightboxView-D-aBaKfB.mjs +1 -0
- package/dist/web-components/{ListEnd-pq-BgaDI.mjs → ListEnd-CQ4vX-NW.mjs} +1 -1
- package/dist/web-components/{Loaded-CSO5NFhm.mjs → Loaded-DsNSPXWf.mjs} +1 -1
- package/dist/web-components/{LoadedCanvas-DK6xMmM1.mjs → LoadedCanvas-Cq7_O2bw.mjs} +1 -1
- package/dist/web-components/LoadedMap-0_prxuA4.mjs +1 -0
- package/dist/web-components/{Loading-CoJLSRkv.mjs → Loading-4PmhMeZ-.mjs} +1 -1
- package/dist/web-components/{Map-BEVtD52O.mjs → Map-B29Ba50b.mjs} +1 -1
- package/dist/web-components/MapView-nHeg39Kz.mjs +3 -0
- package/dist/web-components/Markup-BZ7l5GbG.mjs +2 -0
- package/dist/web-components/MediaBody-DH-rr_0N.mjs +1 -0
- package/dist/web-components/{MediaBody-Co23JjUJ.mjs → MediaBody-eSThjFzH.mjs} +1 -1
- package/dist/web-components/{NavDate-CYNK0Qmp.mjs → NavDate-0MsHRjBW.mjs} +1 -1
- package/dist/web-components/{Navigator-DrYPepzN.mjs → Navigator-qJ79A8Nk.mjs} +1 -1
- package/dist/web-components/{Pager-CN4lHURv.mjs → Pager-SPd_u0qz.mjs} +1 -1
- package/dist/web-components/{PagerLayout-DeqnSQcF.mjs → PagerLayout-CkSwDAnp.mjs} +1 -1
- package/dist/web-components/{Panel-CFYUlXup.mjs → Panel-C8r3EsWn.mjs} +1 -1
- package/dist/web-components/PanelPart-BA1NoeLA.mjs +1 -0
- package/dist/web-components/{PanelToggle-9ud55NNI.mjs → PanelToggle-CrKP8BqE.mjs} +1 -1
- package/dist/web-components/{PartOfManifest-KUHUq-6q.mjs → PartOfManifest-BdDSxK4k.mjs} +1 -1
- package/dist/web-components/{Pending-mcmdyZPA.mjs → Pending-CmgVU1kF.mjs} +1 -1
- package/dist/web-components/{PlaceBox-DX4ZLDat.mjs → PlaceBox-D7HLNGxE.mjs} +1 -1
- package/dist/web-components/Placeholder-DVAlXejQ.mjs +1 -0
- package/dist/web-components/{Position-DO5qg5Sp.mjs → Position-C6KUAceQ.mjs} +1 -1
- package/dist/web-components/{Primitives-c9sIz0oQ.mjs → Primitives-ClQVjY6x.mjs} +1 -1
- package/dist/web-components/{Provider-a3xY016W.mjs → Provider-C0IUdU6v.mjs} +1 -1
- package/dist/web-components/{ReadMore-D_WmmKEP.mjs → ReadMore-BiEJA4yO.mjs} +1 -1
- package/dist/web-components/Root-Drt5N4_s.mjs +1 -0
- package/dist/web-components/Scene-C7t16NjC.mjs +1 -0
- package/dist/web-components/SceneView-BHg37-rs.mjs +1 -0
- package/dist/web-components/{Search-BgxEW1UT.mjs → Search-Bpd_lGzH.mjs} +1 -1
- package/dist/web-components/{Sections-DZVrhoAC.mjs → Sections-D_bS5IQH.mjs} +1 -1
- package/dist/web-components/{StandaloneItems-6cSw7nbF.mjs → StandaloneItems-YV9O9M8F.mjs} +1 -1
- package/dist/web-components/{Status-DHTzuTkh.mjs → Status-BCG7AN9B.mjs} +1 -1
- package/dist/web-components/{Steps-Dkpy9KiJ.mjs → Steps-Dnn8Ajqf.mjs} +1 -1
- package/dist/web-components/TargetItems-xxbtePln.mjs +1 -0
- package/dist/web-components/Timeline-Danuk_Nn.mjs +1 -0
- package/dist/web-components/Tip-DPFWlNLu.mjs +1 -0
- package/dist/web-components/{Transcript-WvFFAJQM.mjs → Transcript-C-_DbUO5.mjs} +1 -1
- package/dist/web-components/{Transport-FxLp_bdW.mjs → Transport-BKona8RD.mjs} +1 -1
- package/dist/web-components/Transport-Bonmu77-.mjs +1 -0
- package/dist/web-components/{annotation-collection-BkC3nBPA.mjs → annotation-collection-nmxzo_hO.mjs} +1 -1
- package/dist/web-components/{annotation-name-Du2KAWoD.mjs → annotation-name-DoUUo-8D.mjs} +1 -1
- package/dist/web-components/{annotations-content-CEzAS-P2.mjs → annotations-content-Cl1upbdd.mjs} +1 -1
- package/dist/web-components/{body-DPlfbLt3.mjs → body-DC8Oq8rY.mjs} +1 -1
- package/dist/web-components/{canvas-BUwBftJW.mjs → canvas-gzoTnBxw.mjs} +1 -1
- package/dist/web-components/{cloverEngine-UNw5K4Xg.mjs → cloverEngine-CFL1Bd7n.mjs} +1 -1
- package/dist/web-components/{content-state-reader-GgQF2MvJ.mjs → content-state-reader-DYbmXxCp.mjs} +1 -1
- package/dist/web-components/controlGlyphs-d7KUIUwi.mjs +1 -0
- package/dist/web-components/{controls-CC9G5LxK.mjs → controls-VC9D1mwr.mjs} +1 -1
- package/dist/web-components/custom-elements.json +10 -2
- package/dist/web-components/{downloads-CmAYeEIz.mjs → downloads-D2cnWDbs.mjs} +1 -1
- package/dist/web-components/{dragToClose-DK-eM097.mjs → dragToClose-CzYeh_12.mjs} +1 -1
- package/dist/web-components/{engine-Dok0z8WP.mjs → engine-Dcfyp2DV.mjs} +1 -1
- package/dist/web-components/{engines-BD2IfwQF.mjs → engines-BMr7naGM.mjs} +1 -1
- package/dist/web-components/{fetchManifest-tQXcfFiz.mjs → fetchManifest-DxptUh4u.mjs} +1 -1
- package/dist/web-components/{fromManifest-BwQdeAuL.mjs → fromManifest-BpPFLVyZ.mjs} +1 -1
- package/dist/web-components/{glyphs-dp_HK3Ja.mjs → glyphs-BCnJl8py.mjs} +1 -1
- package/dist/web-components/hooks-Dz_5UXXp.mjs +1 -0
- package/dist/web-components/{image-layers-xcBsiad9.mjs → image-layers-BPnq7jk1.mjs} +1 -1
- package/dist/web-components/{imageService-4sFnmAFX.mjs → imageService-DFPkPNfe.mjs} +1 -1
- package/dist/web-components/index-ClM6Kq8w.mjs +1 -0
- package/dist/web-components/index.d.mts +4 -2
- package/dist/web-components/index.mjs +1 -1
- package/dist/web-components/items-BHporT5i.mjs +1 -0
- package/dist/web-components/{items-BUmOy2QY.mjs → items-D03KhDg6.mjs} +1 -1
- package/dist/web-components/label-r0ki6r1U.mjs +1 -0
- package/dist/web-components/{layout-B29v2RKK.mjs → layout-DVa_DnGH.mjs} +1 -1
- package/dist/web-components/{link-Ct5PpHEY.mjs → link-DxXxMXiw.mjs} +1 -1
- package/dist/web-components/logo-Br42Vlsk.mjs +1 -0
- package/dist/web-components/maplibre-sheet-CfiZ6JFk.mjs +1 -0
- package/dist/web-components/masonry-BZCdA3bV.mjs +1 -0
- package/dist/web-components/{models-BXcT4ijX.mjs → models-pO77sm3z.mjs} +1 -1
- package/dist/web-components/{nodes-BleXuYE6.mjs → nodes-CmL3eoRE.mjs} +1 -1
- package/dist/web-components/{overlayImage-BJtfot4Y.mjs → overlayImage-DFGetjMh.mjs} +1 -1
- package/dist/web-components/{panel-BxxV_JkD.mjs → panel-B1vzUm6_.mjs} +1 -1
- package/dist/web-components/part-DmRBh4pf.mjs +1 -0
- package/dist/web-components/{playerSurface-BXNLaFk0.mjs → playerSurface-CQ1wrIAQ.mjs} +1 -1
- package/dist/web-components/pointer-DWnCT3D3.mjs +1 -0
- package/dist/web-components/{provider-CPp0Sgr_.mjs → provider-U7xzX_0T.mjs} +1 -1
- package/dist/web-components/{range-regions-DAaOu0IS.mjs → range-regions-Di_lmVqZ.mjs} +1 -1
- package/dist/web-components/{read-more-lcqGslUd.mjs → read-more-BtA1sriO.mjs} +1 -1
- package/dist/web-components/{readingLanguages-FyVsSWJ8.mjs → readingLanguages-Ptho-Co9.mjs} +1 -1
- package/dist/web-components/rendererSurface-BgZPnAwj.mjs +22 -0
- package/dist/web-components/{renderers-BFS7hFVU.mjs → renderers-hoD3WKYA.mjs} +1 -1
- package/dist/web-components/{resource-Bufu7lAr.mjs → resource-DuTMsPEj.mjs} +1 -1
- package/dist/web-components/{sanitize-qIOeyIww.mjs → sanitize-BedC_UE5.mjs} +3 -3
- package/dist/web-components/{save-file-CoknKOPz.mjs → save-file-CLB5IM4a.mjs} +1 -1
- package/dist/web-components/{search-5ocrsYmT.mjs → search-Dd2Y1dsZ.mjs} +1 -1
- package/dist/web-components/shared-CCg1Iag8.mjs +1 -0
- package/dist/web-components/{show-link-DBaJj4s_.mjs → show-link-NjacLIdz.mjs} +1 -1
- package/dist/web-components/{sizedImage-jnOGcIIZ.mjs → sizedImage-CKOGmqhN.mjs} +1 -1
- package/dist/web-components/{split-P6J0qqf5.mjs → split-CcoXZcGX.mjs} +1 -1
- package/dist/web-components/{status-honoOMNx.mjs → status-B4a3Izph.mjs} +1 -1
- package/dist/web-components/styles-C7PVxtkQ.mjs +1 -0
- package/dist/web-components/svg-shape-D1K-WNrY.mjs +1 -0
- package/dist/web-components/three.mjs +1 -1
- package/dist/web-components/thumbnail-ez20ssEY.mjs +1 -0
- package/dist/web-components/{tip-BhNI83aT.mjs → tip-DeFPN33O.mjs} +1 -1
- package/dist/web-components/{toggle-CJKdi5KH.mjs → toggle-CGSnnjW-.mjs} +1 -1
- package/dist/web-components/trusted-Bvpx307M.mjs +1 -0
- package/dist/web-components/{useContainerName-_48Cdi0m.mjs → useContainerName-BfyeBf6_.mjs} +1 -1
- package/dist/web-components/{useControlsVisibility-CieBxGnK.mjs → useControlsVisibility-oRiMiQhD.mjs} +1 -1
- package/dist/web-components/useLazyPanelPane-CReKsr8z.mjs +1 -0
- package/dist/web-components/{useNearViewport-B34ebmIW.mjs → useNearViewport-BADiMpLi.mjs} +1 -1
- package/dist/web-components/{useScrollTrack-DgRGFeP5.mjs → useScrollTrack-9QsMaHSx.mjs} +1 -1
- package/dist/web-components/viewer/{AnnotationItems-BNA_92Dv.mjs → AnnotationItems-Cvh3jfmf.mjs} +1 -1
- package/dist/web-components/viewer/{AnnotationMenu-BIQYVR4N.mjs → AnnotationMenu-d5PT7q8D.mjs} +1 -1
- package/dist/web-components/viewer/{AnnotationState-BbwQqA1U.mjs → AnnotationState-DbtYTHMy.mjs} +1 -1
- package/dist/web-components/viewer/{Annotations-CZzOZAFP.mjs → Annotations-DKWYJOo2.mjs} +2 -2
- package/dist/web-components/viewer/{Annotations-P4XzAlNc.mjs → Annotations-D_wg4O99.mjs} +1 -1
- package/dist/web-components/viewer/{Canvas2DBackend-DFfCzyjL.mjs → Canvas2DBackend-B4IXvdsN.mjs} +1 -1
- package/dist/web-components/viewer/{CaptionDetails-DPtE-RQQ.mjs → CaptionDetails-Bxh9VD7n.mjs} +1 -1
- package/dist/web-components/viewer/ChaptersMenu-CaAIaRZN.mjs +1 -0
- package/dist/web-components/viewer/{ChoiceMenu-GkqyTQRQ.mjs → ChoiceMenu-Clp4Zeog.mjs} +1 -1
- package/dist/web-components/viewer/{Collection-DjY_6qa6.mjs → Collection-C5BfoUOH.mjs} +1 -1
- package/dist/web-components/viewer/{Connected-DIOuI3Mv.mjs → Connected-9VGl2Xnx.mjs} +1 -1
- package/dist/web-components/viewer/{Connected-D5T-mtiy.mjs → Connected-Cd2qwuuo.mjs} +1 -1
- package/dist/web-components/viewer/{Contents-DV-VxXuf.mjs → Contents-CsG9e7v2.mjs} +1 -1
- package/dist/web-components/viewer/ControlMenu-q_u_UC8q.mjs +1 -0
- package/dist/web-components/viewer/ControlsFade-Db3IWArv.mjs +1 -0
- package/dist/web-components/viewer/CountMenu-Dn0-z5A9.mjs +1 -0
- package/dist/web-components/viewer/Cue-slOJQhPI.mjs +1 -0
- package/dist/web-components/viewer/Document-r3Sz3RfH.mjs +1 -0
- package/dist/web-components/viewer/{DomLayers-BCwCxPDU.mjs → DomLayers-CwHg1jZg.mjs} +1 -1
- package/dist/web-components/viewer/{Download-CL4IClAD.mjs → Download-Clx_e2ga.mjs} +1 -1
- package/dist/web-components/viewer/{EntryBodies-e40y47bl.mjs → EntryBodies-B4SnV6NJ.mjs} +1 -1
- package/dist/web-components/viewer/{EntryThumbnail-B_dP3w4o.mjs → EntryThumbnail-CsAqKh38.mjs} +1 -1
- package/dist/web-components/viewer/{FieldPill-Hse1cDBE.mjs → FieldPill-NQfq8SXA.mjs} +1 -1
- package/dist/web-components/viewer/{FrameAnimation-CE218DCr.mjs → FrameAnimation-wN2VNW7D.mjs} +1 -1
- package/dist/web-components/viewer/Gallery-nX9kQlft.mjs +1 -0
- package/dist/web-components/viewer/{HideToggle-CYoqe_ez.mjs → HideToggle-B843JuKU.mjs} +1 -1
- package/dist/web-components/viewer/ImageControls--qeUY5kg.mjs +1 -0
- package/dist/web-components/viewer/{LanguageChoice-BmO-322r.mjs → LanguageChoice-CZ6K3Mhv.mjs} +1 -1
- package/dist/web-components/viewer/LightboxView-BcbP3cJD.mjs +1 -0
- package/dist/web-components/viewer/{ListEnd-DX1jsvJk.mjs → ListEnd-DbYDv46a.mjs} +1 -1
- package/dist/web-components/viewer/MapView-Dj7Iq7P2.mjs +3 -0
- package/dist/web-components/viewer/MediaBody-TN4XsCm7.mjs +1 -0
- package/dist/web-components/viewer/{MediaBody-SkIgrEMj.mjs → MediaBody-iAxGgXNy.mjs} +1 -1
- package/dist/web-components/viewer/{NavDate-BZgeaMG9.mjs → NavDate-Clj6OMa6.mjs} +1 -1
- package/dist/web-components/viewer/{Navigator-Co76p-1n.mjs → Navigator-DPdR3SYX.mjs} +1 -1
- package/dist/web-components/viewer/{PagerLayout-tUkN1-FV.mjs → PagerLayout-CtlmDRjI.mjs} +1 -1
- package/dist/web-components/viewer/PanelPart-DzZWRlK1.mjs +1 -0
- package/dist/web-components/viewer/{PartOfManifest-DXnbEPzS.mjs → PartOfManifest-NAXs2DYd.mjs} +1 -1
- package/dist/web-components/viewer/{PlaceBox-xrJ4CGdN.mjs → PlaceBox-C2k5Fsfo.mjs} +1 -1
- package/dist/web-components/viewer/Placeholder-DF6dRMjt.mjs +1 -0
- package/dist/web-components/viewer/{Search-DTg1cHZ3.mjs → Search-DoUc8tWu.mjs} +1 -1
- package/dist/web-components/viewer/{StandaloneItems-BpBEQG8i.mjs → StandaloneItems-DuXasJO0.mjs} +1 -1
- package/dist/web-components/viewer/{Steps-SpwMQdCL.mjs → Steps-B3MrG4Cv.mjs} +1 -1
- package/dist/web-components/viewer/TargetItems-DOFSQtYR.mjs +1 -0
- package/dist/web-components/viewer/{Transcript-rTAhuXCF.mjs → Transcript-Dy-FHWMo.mjs} +1 -1
- package/dist/web-components/viewer/Transport-C5wkxVOF.mjs +1 -0
- package/dist/web-components/viewer/{Transport-vKIDALE-.mjs → Transport-CUXmY_jW.mjs} +1 -1
- package/dist/web-components/viewer/{annotation-collection-B7pZiLVk.mjs → annotation-collection-A0PNdPhI.mjs} +1 -1
- package/dist/web-components/viewer/annotation-name-CfQs7Mb2.mjs +1 -0
- package/dist/web-components/viewer/{annotations-content-9AtLlPNn.mjs → annotations-content-B52-zM99.mjs} +1 -1
- package/dist/web-components/viewer/{cloverEngine-jRrYLrWa.mjs → cloverEngine-4sgpB7Rz.mjs} +1 -1
- package/dist/web-components/viewer/{content-state-reader-CPvkju6Q.mjs → content-state-reader-vtATl-W3.mjs} +1 -1
- package/dist/web-components/viewer/{dragToClose-Co9kGk9q.mjs → dragToClose-B4rj1D3r.mjs} +1 -1
- package/dist/web-components/viewer/{fetchManifest-D7N9WhhF.mjs → fetchManifest-gAj8phm4.mjs} +1 -1
- package/dist/web-components/viewer/{host-DMD9LE4H.mjs → host-Hv8WXfiF.mjs} +1 -1
- package/dist/web-components/viewer/{image-layers-x_shzPvu.mjs → image-layers-gFEDKVkV.mjs} +1 -1
- package/dist/web-components/viewer/index.mjs +1 -1
- package/dist/web-components/viewer/{link-DikPGzNO.mjs → link-DIh6ysyo.mjs} +1 -1
- package/dist/web-components/viewer/{overlayImage-33kKKB0T.mjs → overlayImage-BRjcH40Q.mjs} +1 -1
- package/dist/web-components/viewer/{range-regions-TH6WWGTT.mjs → range-regions-uPqjKIER.mjs} +1 -1
- package/dist/web-components/viewer/{renderers-BxePmixF.mjs → renderers-C5EfPrd7.mjs} +1 -1
- package/dist/web-components/viewer/{save-file-QXKiPlST.mjs → save-file-dIa0LCAn.mjs} +1 -1
- package/dist/web-components/viewer/{search-B_NePyas.mjs → search-Bbv9dCNq.mjs} +1 -1
- package/dist/web-components/viewer/styles-L1HpSoL2.mjs +1 -0
- package/dist/web-components/viewer/{useControlsVisibility-Cu-jTDzs.mjs → useControlsVisibility-jopIdHZi.mjs} +1 -1
- package/dist/web-components/viewer/useLazyPanelPane-CoPgtYkx.mjs +1 -0
- package/dist/web-components/viewer/viewer-DqpSyvH-.mjs +29 -0
- package/dist/web-components/viewer/vtt-DpgB_K8v.mjs +5 -0
- package/dist/web-components/viewer-D2lGdifc.mjs +1 -0
- package/dist/web-components/vtt-KUQbi4PK.mjs +5 -0
- package/dist/web-components/worker-C9aVbya_.mjs +1 -0
- package/package.json +2 -1
- package/dist/web-components/Button-Cx6VE_UW.mjs +0 -1
- package/dist/web-components/CanvasView-DxZASM9E.mjs +0 -2
- package/dist/web-components/ChaptersMenu-BAZVVDrK.mjs +0 -1
- package/dist/web-components/ControlMenu-BjJsWnuZ.mjs +0 -1
- package/dist/web-components/ControlsFade-C-6WhSxB.mjs +0 -1
- package/dist/web-components/CountMenu-Dx8D_RJZ.mjs +0 -1
- package/dist/web-components/Cue-xuo5dgKE.mjs +0 -1
- package/dist/web-components/Document-BWdafeEi.mjs +0 -1
- package/dist/web-components/Gallery-C2PTJmvN.mjs +0 -1
- package/dist/web-components/ImageControls-tKVAMpaj.mjs +0 -1
- package/dist/web-components/LightboxView-Cuqx2H1m.mjs +0 -1
- package/dist/web-components/LoadedMap-DmPH-LKY.mjs +0 -1
- package/dist/web-components/MapView-DHJcn9gW.mjs +0 -3
- package/dist/web-components/Markup-Hm6bWOjm.mjs +0 -2
- package/dist/web-components/MediaBody-BpgNtpKZ.mjs +0 -1
- package/dist/web-components/PanelPart-CpUIRbxr.mjs +0 -1
- package/dist/web-components/Placeholder-0hE8q-SY.mjs +0 -1
- package/dist/web-components/Root-CU1o0wje.mjs +0 -1
- package/dist/web-components/Scene-CboEeptc.mjs +0 -1
- package/dist/web-components/SceneView-hcc78jQT.mjs +0 -1
- package/dist/web-components/TargetItems-CyOI9_Z4.mjs +0 -1
- package/dist/web-components/Timeline-B9tD3Rar.mjs +0 -1
- package/dist/web-components/Tip-nJSTYquc.mjs +0 -1
- package/dist/web-components/hooks-C4dJ5K_D.mjs +0 -1
- package/dist/web-components/index-DspT4wUm.mjs +0 -1
- package/dist/web-components/items-CWMI53aN.mjs +0 -1
- package/dist/web-components/label-BGjL7I4b.mjs +0 -1
- package/dist/web-components/logo-BFstM-0a.mjs +0 -1
- package/dist/web-components/masonry-0QfzOgbB.mjs +0 -1
- package/dist/web-components/part-D4gjnYmT.mjs +0 -1
- package/dist/web-components/pointer-CJELU3gI.mjs +0 -1
- package/dist/web-components/rendererSurface-nh6-EfuZ.mjs +0 -22
- package/dist/web-components/shared-DFAX0n3B.mjs +0 -1
- package/dist/web-components/styles-BwkYiCLC.mjs +0 -1
- package/dist/web-components/svg-shape-DLY3g7oq.mjs +0 -1
- package/dist/web-components/thumbnail-EbURh-UM.mjs +0 -1
- package/dist/web-components/useLazyPanelPane-Da3kJiOt.mjs +0 -1
- package/dist/web-components/viewer/ChaptersMenu-D6Jmujag.mjs +0 -1
- package/dist/web-components/viewer/ControlMenu-BsEpff6N.mjs +0 -1
- package/dist/web-components/viewer/ControlsFade-BowtN96W.mjs +0 -1
- package/dist/web-components/viewer/CountMenu-DCmA6HdK.mjs +0 -1
- package/dist/web-components/viewer/Cue-BjbVzrpl.mjs +0 -1
- package/dist/web-components/viewer/Document-4ZQd3W3o.mjs +0 -1
- package/dist/web-components/viewer/Gallery-F2sVj4ph.mjs +0 -1
- package/dist/web-components/viewer/ImageControls-C2G4x2Es.mjs +0 -1
- package/dist/web-components/viewer/LightboxView-DKR8dXcg.mjs +0 -1
- package/dist/web-components/viewer/MapView-Df0wZjCh.mjs +0 -3
- package/dist/web-components/viewer/MediaBody-CataNonO.mjs +0 -1
- package/dist/web-components/viewer/PanelPart-Cl4Sst60.mjs +0 -1
- package/dist/web-components/viewer/Placeholder-B1AcizHL.mjs +0 -1
- package/dist/web-components/viewer/TargetItems-B6Icep5k.mjs +0 -1
- package/dist/web-components/viewer/Transport-z_kdVisw.mjs +0 -1
- package/dist/web-components/viewer/annotation-name-BKj1O9lA.mjs +0 -1
- package/dist/web-components/viewer/styles-Bedyz7_l.mjs +0 -1
- package/dist/web-components/viewer/useLazyPanelPane-BhLtRixT.mjs +0 -1
- package/dist/web-components/viewer/viewer-nfPJPwwt.mjs +0 -29
- package/dist/web-components/viewer/vtt-CUn4h5JB.mjs +0 -5
- package/dist/web-components/viewer-DN2Mo3vc.mjs +0 -1
- package/dist/web-components/vtt-C5M5WPSG.mjs +0 -5
- package/dist/web-components/worker-CjXN0dku.mjs +0 -1
package/README.md
CHANGED
|
@@ -94,7 +94,7 @@ If you serve Clover's files yourself, copy the whole `dist/web-components` folde
|
|
|
94
94
|
| ------------------------------------- | ------------------------------------------------------------------------------------- |
|
|
95
95
|
| `@nulib/clover` | The Viewer (the default export), and every part, hook and helper (named). |
|
|
96
96
|
| `@nulib/clover/templates` | The templates: `Default`, `Document` and `Gallery`. |
|
|
97
|
-
| `@nulib/clover/map` | `Map
|
|
97
|
+
| `@nulib/clover/map` | `Map` and its helpers, as `@nulib/clover` exports them (`Clover.Map`). |
|
|
98
98
|
| `@nulib/clover/three` | `registerThreeEngine`, to draw a Scene with three.js, which you install. |
|
|
99
99
|
| `@nulib/clover/web-components` | `<clover-viewer>`, and every part as an element. |
|
|
100
100
|
| `@nulib/clover/web-components/viewer` | `<clover-viewer>` alone, for a page that shows a Viewer and nothing else of Clover's. |
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import React, { useRef, useState, useMemo, useEffect, useCallback, useLayoutEffect, Suspense, lazy } from "react";
|
|
4
4
|
import Caption, { hasInformation, captionLabelId } from "../Body/Caption.mjs";
|
|
5
|
-
import Controls from "./Controls.mjs";
|
|
5
|
+
import Controls, { NO_LIMITS } from "./Controls.mjs";
|
|
6
6
|
import { findChoices, startingChoices, animationFrames, canvasScene, paintedType, placeholderStill, frameKey, canvasSize, canvasRectToWorld } from "./layout.mjs";
|
|
7
7
|
import ExitFullscreen from "../../ui/ExitFullscreen.mjs";
|
|
8
8
|
import { useNearViewport } from "../Body/useNearViewport.mjs";
|
|
@@ -24,12 +24,15 @@ import { HostLanguageContext } from "../../i18n/hostLanguage.mjs";
|
|
|
24
24
|
import { useRootLanguage } from "../../i18n/useRootLanguage.mjs";
|
|
25
25
|
import { useContainerName } from "../../i18n/useContainerName.mjs";
|
|
26
26
|
import { union } from "../../lib/renderer/math/rect.mjs";
|
|
27
|
-
import { findImageServiceId } from "../../lib/renderer/sources/imageService.mjs";
|
|
27
|
+
import { findImageServiceId, fetchInfo } from "../../lib/renderer/sources/imageService.mjs";
|
|
28
28
|
import { hasCamera } from "./surface.mjs";
|
|
29
29
|
import { languageProps } from "../../i18n/direction.mjs";
|
|
30
|
-
import { buildContentState } from "../../core/content-state.mjs";
|
|
31
30
|
import { useContentStateOutput, watchMedia } from "../../react/useContentStateOutput.mjs";
|
|
32
31
|
import { resolveDirection } from "../../core/sequence.mjs";
|
|
32
|
+
let writeContentState;
|
|
33
|
+
const loadContentState = () => import("../../core/content-state.mjs").then((module) => {
|
|
34
|
+
writeContentState = module.buildContentState;
|
|
35
|
+
});
|
|
33
36
|
const MediaBody = lazy(() => import("./media/MediaBody.mjs"));
|
|
34
37
|
const loadHotspots = () => import("./AnnotationState.mjs");
|
|
35
38
|
const NO_COMMENTS = /* @__PURE__ */ new Map();
|
|
@@ -166,6 +169,7 @@ const CanvasBody = (props) => {
|
|
|
166
169
|
const [status, setStatus] = useState("loading");
|
|
167
170
|
const [unloadable, setUnloadable] = useState(false);
|
|
168
171
|
const [sceneVersion, setSceneVersion] = useState(0);
|
|
172
|
+
const [viewLimits, setViewLimits] = useState(NO_LIMITS);
|
|
169
173
|
const onReadyRef = useRef(onReady);
|
|
170
174
|
const onViewportChangeRef = useRef(onViewportChange);
|
|
171
175
|
const optionsRef = useRef(options);
|
|
@@ -309,6 +313,15 @@ ${canvases.map((canvas) => canvas.id).join("|")}` : null;
|
|
|
309
313
|
const [imagesOpen, setImagesOpen] = useState(false);
|
|
310
314
|
const [mediaOpenedFor, setMediaOpenedFor] = useState(null);
|
|
311
315
|
const showPlaceholder = !player && stills.length > 0 && (media ? mediaOpenedFor !== canvasKey : !imagesOpen);
|
|
316
|
+
const stillsRequest = options == null ? void 0 : options.request;
|
|
317
|
+
useEffect(() => {
|
|
318
|
+
if (!showPlaceholder) return;
|
|
319
|
+
void import("../../core/thumbnail.mjs");
|
|
320
|
+
for (const { source } of stills)
|
|
321
|
+
if (source.service)
|
|
322
|
+
fetchInfo(source.service, { request: stillsRequest }).catch(() => {
|
|
323
|
+
});
|
|
324
|
+
}, [showPlaceholder, stills, stillsRequest]);
|
|
312
325
|
const onlyInformation = (config, { annotations = false, fullPage = false } = {}) => ({
|
|
313
326
|
...config,
|
|
314
327
|
zoom: false,
|
|
@@ -410,7 +423,11 @@ ${canvases.map((canvas) => canvas.id).join("|")}` : null;
|
|
|
410
423
|
const region = !time && surface2 && hasCamera(surface2) ? canvasRegion(surface2.getBounds(), shown.canvases, shown.placements) : null;
|
|
411
424
|
const canvas = shown.canvases.find((each) => each.id === (region == null ? void 0 : region.canvasId)) ?? shown.canvases[0];
|
|
412
425
|
if (!canvas) return null;
|
|
413
|
-
|
|
426
|
+
if (!writeContentState) {
|
|
427
|
+
void loadContentState().then(() => contentStateChanged());
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
return writeContentState({
|
|
414
431
|
manifestId,
|
|
415
432
|
canvasId: canvas.id,
|
|
416
433
|
type: canvas.type,
|
|
@@ -435,8 +452,16 @@ ${canvases.map((canvas) => canvas.id).join("|")}` : null;
|
|
|
435
452
|
surfaceRef.current = surface2;
|
|
436
453
|
setSurface(surface2);
|
|
437
454
|
surface2.setDismiss(releaseAnnotation);
|
|
455
|
+
const readLimits = () => {
|
|
456
|
+
if (!renderer2) return;
|
|
457
|
+
const next = renderer2.viewLimits();
|
|
458
|
+
setViewLimits(
|
|
459
|
+
(last) => last.atMax === next.atMax && last.atMin === next.atMin && last.atHome === next.atHome ? last : next
|
|
460
|
+
);
|
|
461
|
+
};
|
|
438
462
|
const offOpen = surface2.on("open", () => {
|
|
439
463
|
var _a2;
|
|
464
|
+
readLimits();
|
|
440
465
|
setCleared(false);
|
|
441
466
|
markDrawn();
|
|
442
467
|
contentStateChanged();
|
|
@@ -464,6 +489,7 @@ ${canvases.map((canvas) => canvas.id).join("|")}` : null;
|
|
|
464
489
|
);
|
|
465
490
|
});
|
|
466
491
|
const offChange = surface2.on("change", () => {
|
|
492
|
+
readLimits();
|
|
467
493
|
setCleared(false);
|
|
468
494
|
markDrawn();
|
|
469
495
|
contentStateChanged();
|
|
@@ -479,6 +505,7 @@ ${canvases.map((canvas) => canvas.id).join("|")}` : null;
|
|
|
479
505
|
);
|
|
480
506
|
const offViewport = surface2.on("viewport", () => {
|
|
481
507
|
var _a2;
|
|
508
|
+
readLimits();
|
|
482
509
|
if (renderer2) (_a2 = onViewportChangeRef.current) == null ? void 0 : _a2.call(onViewportChangeRef, renderer2.getBounds());
|
|
483
510
|
contentStateChanged();
|
|
484
511
|
});
|
|
@@ -594,10 +621,12 @@ ${canvases.map((canvas) => canvas.id).join("|")}` : null;
|
|
|
594
621
|
instance,
|
|
595
622
|
config: shownControls ?? NO_CONTROLS,
|
|
596
623
|
controlButtons,
|
|
624
|
+
limits: viewLimits,
|
|
597
625
|
placeholderIsMore: cornerToggle && !media,
|
|
598
626
|
chapters: media ? chapters : void 0,
|
|
599
627
|
mediaElement,
|
|
600
628
|
onChapter: goToChapter,
|
|
629
|
+
overStill: Boolean(media) && showPlaceholder,
|
|
601
630
|
request: options == null ? void 0 : options.request,
|
|
602
631
|
placeholder: cornerToggle && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
|
|
603
632
|
PlaceholderToggle,
|
|
@@ -15,6 +15,7 @@ const ChaptersMenu = ({
|
|
|
15
15
|
chapters,
|
|
16
16
|
element,
|
|
17
17
|
onChapter,
|
|
18
|
+
overStill = false,
|
|
18
19
|
request,
|
|
19
20
|
onClose
|
|
20
21
|
}) => {
|
|
@@ -59,7 +60,11 @@ const ChaptersMenu = ({
|
|
|
59
60
|
type: "radio",
|
|
60
61
|
name: id,
|
|
61
62
|
checked: index === current,
|
|
62
|
-
onChange: () =>
|
|
63
|
+
onChange: () => {
|
|
64
|
+
if (overStill && !pointer.current)
|
|
65
|
+
setTime(chapters[index].start);
|
|
66
|
+
else go(index);
|
|
67
|
+
},
|
|
63
68
|
onClick: () => {
|
|
64
69
|
if (pointer.current) onClose(true);
|
|
65
70
|
},
|
|
@@ -48,8 +48,15 @@ const ControlMenu = ({
|
|
|
48
48
|
const inside2 = Boolean(
|
|
49
49
|
((_a = ref.current) == null ? void 0 : _a.contains(active)) || ((_b = document.getElementById(triggerId)) == null ? void 0 : _b.contains(active))
|
|
50
50
|
);
|
|
51
|
-
if (inside2)
|
|
52
|
-
|
|
51
|
+
if (inside2) {
|
|
52
|
+
event.preventDefault();
|
|
53
|
+
onClose(true);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const after = (late) => {
|
|
57
|
+
if (late === event && !event.defaultPrevented) onClose(false);
|
|
58
|
+
};
|
|
59
|
+
document.addEventListener("keydown", after, { once: true });
|
|
53
60
|
};
|
|
54
61
|
document.addEventListener("pointerdown", onPointerDown);
|
|
55
62
|
document.addEventListener("keydown", onKeyDown, true);
|
|
@@ -26,11 +26,17 @@ const VIEW = /* @__PURE__ */ new Set([
|
|
|
26
26
|
"reset",
|
|
27
27
|
"fullPage"
|
|
28
28
|
]);
|
|
29
|
+
const NO_LIMITS = {
|
|
30
|
+
atMax: false,
|
|
31
|
+
atMin: false,
|
|
32
|
+
atHome: false
|
|
33
|
+
};
|
|
29
34
|
const Controls = ({
|
|
30
35
|
renderer,
|
|
31
36
|
instance,
|
|
32
37
|
config,
|
|
33
38
|
controlButtons,
|
|
39
|
+
limits = NO_LIMITS,
|
|
34
40
|
placeholder,
|
|
35
41
|
placeholderIsMore = false,
|
|
36
42
|
choices = [],
|
|
@@ -40,6 +46,7 @@ const Controls = ({
|
|
|
40
46
|
chapters = [],
|
|
41
47
|
mediaElement = null,
|
|
42
48
|
onChapter,
|
|
49
|
+
overStill,
|
|
43
50
|
request,
|
|
44
51
|
hiddenPages,
|
|
45
52
|
onPageVisibilityChange,
|
|
@@ -168,6 +175,7 @@ const Controls = ({
|
|
|
168
175
|
label: t("imageZoomIn"),
|
|
169
176
|
lang: langOf("imageZoomIn"),
|
|
170
177
|
glyph: /* @__PURE__ */ jsx(ZoomIn, {}),
|
|
178
|
+
unavailable: limits.atMax,
|
|
171
179
|
onClick: () => camera.zoomBy(ZOOM_PER_CLICK)
|
|
172
180
|
},
|
|
173
181
|
{
|
|
@@ -177,6 +185,7 @@ const Controls = ({
|
|
|
177
185
|
label: t("imageZoomOut"),
|
|
178
186
|
lang: langOf("imageZoomOut"),
|
|
179
187
|
glyph: /* @__PURE__ */ jsx(ZoomOut, {}),
|
|
188
|
+
unavailable: limits.atMin,
|
|
180
189
|
onClick: () => camera.zoomBy(1 / ZOOM_PER_CLICK)
|
|
181
190
|
}
|
|
182
191
|
);
|
|
@@ -222,6 +231,7 @@ const Controls = ({
|
|
|
222
231
|
label: t("imageResetZoom"),
|
|
223
232
|
lang: langOf("imageResetZoom"),
|
|
224
233
|
glyph: /* @__PURE__ */ jsx(Reset, {}),
|
|
234
|
+
unavailable: limits.atHome,
|
|
225
235
|
// Home also turns the image upright, as `Image`'s reset does.
|
|
226
236
|
onClick: () => camera.home()
|
|
227
237
|
});
|
|
@@ -325,10 +335,10 @@ const Controls = ({
|
|
|
325
335
|
const always = moreWhen === "always" || placeholderIsMore;
|
|
326
336
|
const ImageControls = (_d = useLoaded(
|
|
327
337
|
loadImageControls,
|
|
328
|
-
fit && (always || !fits) && items.some((item) => item.view)
|
|
338
|
+
fit && (placeholderIsMore || (always || !fits) && items.some((item) => item.view))
|
|
329
339
|
)) == null ? void 0 : _d.ImageControls;
|
|
330
340
|
const tucked = fits && !always || !ImageControls ? [] : items.filter((item) => item.view);
|
|
331
|
-
const deck = placeholderIsMore &&
|
|
341
|
+
const deck = placeholderIsMore && Boolean(placeholder) && Boolean(ImageControls);
|
|
332
342
|
useEffect(() => {
|
|
333
343
|
if (!tucked.length) setMoreOpen(false);
|
|
334
344
|
}, [tucked.length]);
|
|
@@ -338,11 +348,11 @@ const Controls = ({
|
|
|
338
348
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
339
349
|
/* @__PURE__ */ jsxs(ControlCluster, { fit, clusterRef: setCluster, children: [
|
|
340
350
|
shown(lead),
|
|
341
|
-
ImageControls && tucked.length > 0 && /* @__PURE__ */ jsx(
|
|
351
|
+
ImageControls && (tucked.length > 0 || deck) && /* @__PURE__ */ jsx(
|
|
342
352
|
ImageControls,
|
|
343
353
|
{
|
|
344
354
|
instance,
|
|
345
|
-
open: deck
|
|
355
|
+
open: deck ? tucked.length > 0 : moreOpen,
|
|
346
356
|
onOpenChange: setMoreOpen,
|
|
347
357
|
toggle: deck ? placeholder : void 0,
|
|
348
358
|
children: tucked.map(({ node }) => node)
|
|
@@ -358,6 +368,7 @@ const Controls = ({
|
|
|
358
368
|
ids: items.map(({ id }) => id),
|
|
359
369
|
more: `more-${instance}`,
|
|
360
370
|
fits,
|
|
371
|
+
settled: fits || tucked.length > 0 || !items.some((item) => item.view),
|
|
361
372
|
onFits: setFits
|
|
362
373
|
}
|
|
363
374
|
),
|
|
@@ -371,6 +382,7 @@ const Controls = ({
|
|
|
371
382
|
chapters,
|
|
372
383
|
element: mediaElement,
|
|
373
384
|
onChapter,
|
|
385
|
+
overStill,
|
|
374
386
|
request,
|
|
375
387
|
onClose: closeChapters
|
|
376
388
|
}
|
|
@@ -408,5 +420,6 @@ const Controls = ({
|
|
|
408
420
|
] });
|
|
409
421
|
};
|
|
410
422
|
export {
|
|
423
|
+
NO_LIMITS,
|
|
411
424
|
Controls as default
|
|
412
425
|
};
|
|
@@ -19,6 +19,8 @@ import { PauseIcon, PlayIcon, VolumeMutedIcon, VolumeHighIcon } from "../../ui/m
|
|
|
19
19
|
import { formatTime } from "../../lib/time.mjs";
|
|
20
20
|
import { gapsOf, gapMask, alongBar, seekShare } from "./media/seekGaps.mjs";
|
|
21
21
|
import { placeMenu } from "./media/placeMenu.mjs";
|
|
22
|
+
import { adoptSheet } from "../../ui/adoptSheet.mjs";
|
|
23
|
+
import __clover_sheet_media from "../../ui/sheets/media.mjs";
|
|
22
24
|
const clockTime = (seconds, total) => total < 10 ? `${formatTime(seconds)}.${Math.min(9, Math.floor((seconds || 0) % 1 * 10))}` : formatTime(seconds);
|
|
23
25
|
const focusVisible = (element) => {
|
|
24
26
|
try {
|
|
@@ -736,6 +738,7 @@ function FrameAnimation({
|
|
|
736
738
|
)
|
|
737
739
|
] });
|
|
738
740
|
}
|
|
741
|
+
adoptSheet("media", __clover_sheet_media);
|
|
739
742
|
export {
|
|
740
743
|
FrameControls,
|
|
741
744
|
clockTime,
|
|
@@ -7,7 +7,7 @@ import { useContainerName } from "../../i18n/useContainerName.mjs";
|
|
|
7
7
|
import { useOneOpen } from "../../ui/useOneOpen.mjs";
|
|
8
8
|
import { CloseViewer, OpenViewer } from "../Body/glyphs.mjs";
|
|
9
9
|
import { languageProps } from "../../i18n/direction.mjs";
|
|
10
|
-
import { Tip } from "../../ui/Tip.mjs";
|
|
10
|
+
import { placeTipAgain, Tip } from "../../ui/Tip.mjs";
|
|
11
11
|
function overhang(list) {
|
|
12
12
|
var _a, _b;
|
|
13
13
|
const box = list.getBoundingClientRect();
|
|
@@ -90,14 +90,19 @@ function ImageControls({
|
|
|
90
90
|
else if (under > 0) list2.scrollLeft -= Math.min(under, Math.max(left, 0));
|
|
91
91
|
mark();
|
|
92
92
|
};
|
|
93
|
+
const scrolled = () => {
|
|
94
|
+
mark();
|
|
95
|
+
const active = list2.ownerDocument.activeElement;
|
|
96
|
+
if (active && list2.contains(active)) placeTipAgain(active);
|
|
97
|
+
};
|
|
93
98
|
mark();
|
|
94
|
-
list2.addEventListener("scroll",
|
|
99
|
+
list2.addEventListener("scroll", scrolled, { passive: true });
|
|
95
100
|
list2.addEventListener("focusin", reveal);
|
|
96
101
|
list2.addEventListener("animationend", mark);
|
|
97
102
|
const resize = new ResizeObserver(() => mark());
|
|
98
103
|
resize.observe(list2);
|
|
99
104
|
return () => {
|
|
100
|
-
list2.removeEventListener("scroll",
|
|
105
|
+
list2.removeEventListener("scroll", scrolled);
|
|
101
106
|
list2.removeEventListener("focusin", reveal);
|
|
102
107
|
list2.removeEventListener("animationend", mark);
|
|
103
108
|
resize.disconnect();
|
|
@@ -57,6 +57,8 @@ function PlaceholderToggle({
|
|
|
57
57
|
id,
|
|
58
58
|
label: t(toggleKey),
|
|
59
59
|
lang: langOf(toggleKey),
|
|
60
|
+
expanded: more && !media ? !active : void 0,
|
|
61
|
+
controls: more && !media ? `more-${instance}-list` : void 0,
|
|
60
62
|
onClick: (event) => {
|
|
61
63
|
const focused = document.activeElement === event.currentTarget;
|
|
62
64
|
const figure = event.currentTarget.closest(".clover-canvas");
|
|
@@ -100,12 +102,13 @@ const Placeholder = ({
|
|
|
100
102
|
onToggle
|
|
101
103
|
}
|
|
102
104
|
),
|
|
103
|
-
(active || lingering) && /* @__PURE__ */ jsx(
|
|
105
|
+
(active || lingering || !media) && /* @__PURE__ */ jsx(
|
|
104
106
|
"div",
|
|
105
107
|
{
|
|
106
108
|
"aria-hidden": active ? void 0 : true,
|
|
107
109
|
className: "clover-canvas-placeholder",
|
|
108
|
-
"data-
|
|
110
|
+
"data-hidden": !active && !lingering,
|
|
111
|
+
"data-lingering": !active && lingering,
|
|
109
112
|
"data-media": media,
|
|
110
113
|
"data-testid": "clover-canvas-placeholder",
|
|
111
114
|
"data-vertical": vertical,
|
|
@@ -18,6 +18,7 @@ function Fits({
|
|
|
18
18
|
ids,
|
|
19
19
|
more,
|
|
20
20
|
fits,
|
|
21
|
+
settled,
|
|
21
22
|
onFits
|
|
22
23
|
}) {
|
|
23
24
|
const shown = useRef(fits);
|
|
@@ -70,13 +71,14 @@ function Fits({
|
|
|
70
71
|
};
|
|
71
72
|
}, [cluster, key, more]);
|
|
72
73
|
useLayoutEffect(() => {
|
|
74
|
+
if (!settled) return;
|
|
73
75
|
const id = moved.current;
|
|
74
76
|
moved.current = null;
|
|
75
77
|
if (id === null) return;
|
|
76
78
|
const active = cluster.ownerDocument.activeElement;
|
|
77
79
|
if (!active || !cluster.contains(active) || active.closest("[hidden]"))
|
|
78
80
|
refocus(cluster, id, more);
|
|
79
|
-
}, [fits, cluster, more]);
|
|
81
|
+
}, [fits, settled, cluster, more]);
|
|
80
82
|
return null;
|
|
81
83
|
}
|
|
82
84
|
export {
|
|
@@ -11,6 +11,8 @@ import { hasCamera } from "../surface.mjs";
|
|
|
11
11
|
import { useOptionalClover } from "../../../react/context.mjs";
|
|
12
12
|
import { BodyUnloadable } from "../../../ui/BodyUnloadable.mjs";
|
|
13
13
|
import { languageProps } from "../../../i18n/direction.mjs";
|
|
14
|
+
import { adoptSheet } from "../../../ui/adoptSheet.mjs";
|
|
15
|
+
import __clover_sheet_media from "../../../ui/sheets/media.mjs";
|
|
14
16
|
const SKIP_SECONDS = 10;
|
|
15
17
|
const MOMENT_SECONDS = 3;
|
|
16
18
|
const MediaBody = ({
|
|
@@ -363,6 +365,7 @@ function containAspect(box, size) {
|
|
|
363
365
|
height
|
|
364
366
|
};
|
|
365
367
|
}
|
|
368
|
+
adoptSheet("media", __clover_sheet_media);
|
|
366
369
|
export {
|
|
367
370
|
containAspect,
|
|
368
371
|
MediaBody as default,
|
|
@@ -5,6 +5,8 @@ import { thumbnailSource, stillSource } from "../../../core/thumbnail.mjs";
|
|
|
5
5
|
import { localize } from "../../../core/value.mjs";
|
|
6
6
|
import { useThumbnail } from "../../../ui/EntryThumbnail.mjs";
|
|
7
7
|
import { languageProps } from "../../../i18n/direction.mjs";
|
|
8
|
+
import { adoptSheet } from "../../../ui/adoptSheet.mjs";
|
|
9
|
+
import __clover_sheet_media from "../../../ui/sheets/media.mjs";
|
|
8
10
|
const ART_SIZE = 1200;
|
|
9
11
|
const GROUND_SIZE = 32;
|
|
10
12
|
function artworkOf(canvas, language) {
|
|
@@ -119,6 +121,7 @@ function PlayerFace({
|
|
|
119
121
|
] })
|
|
120
122
|
] });
|
|
121
123
|
}
|
|
124
|
+
adoptSheet("media", __clover_sheet_media);
|
|
122
125
|
export {
|
|
123
126
|
PlayerFace
|
|
124
127
|
};
|
|
@@ -17,6 +17,8 @@ import { useCloverTranslation } from "../../../i18n/useCloverTranslation.mjs";
|
|
|
17
17
|
import { toggleFullscreen } from "../../../lib/fullscreen.mjs";
|
|
18
18
|
import useFullscreenSupported from "../../../hooks/useFullscreenSupported.mjs";
|
|
19
19
|
import { languageProps } from "../../../i18n/direction.mjs";
|
|
20
|
+
import { adoptSheet } from "../../../ui/adoptSheet.mjs";
|
|
21
|
+
import __clover_sheet_media from "../../../ui/sheets/media.mjs";
|
|
20
22
|
import { formatTime } from "../../../lib/time.mjs";
|
|
21
23
|
const chapterPicture = (chapter) => typeof (chapter == null ? void 0 : chapter.thumbnail) === "string" ? { src: chapter.thumbnail } : imageSource(chapter == null ? void 0 : chapter.thumbnail);
|
|
22
24
|
function chapterAt(chapters, time) {
|
|
@@ -528,6 +530,7 @@ const Transport = ({
|
|
|
528
530
|
}
|
|
529
531
|
);
|
|
530
532
|
};
|
|
533
|
+
adoptSheet("media", __clover_sheet_media);
|
|
531
534
|
export {
|
|
532
535
|
chapterAt,
|
|
533
536
|
chapterPicture,
|
|
@@ -4,7 +4,7 @@ import { STILL_SIZE } from "../layout.mjs";
|
|
|
4
4
|
import { resolveThumbnail } from "../../../core/thumbnail.mjs";
|
|
5
5
|
import { localize } from "../../../core/value.mjs";
|
|
6
6
|
import { sendsCredentials, requestKey } from "../../../core/request.mjs";
|
|
7
|
-
import { loadVtt } from "../../../core/vtt.mjs";
|
|
7
|
+
import { loadVtt, vttBlocks } from "../../../core/vtt.mjs";
|
|
8
8
|
import { isHls } from "../../../lib/hls.mjs";
|
|
9
9
|
function captionName(caption, index, language) {
|
|
10
10
|
const name = localize(caption.label, language);
|
|
@@ -34,7 +34,6 @@ function useMediaElement(media, { request, language }) {
|
|
|
34
34
|
if (!canceled && url) video.poster = url;
|
|
35
35
|
}
|
|
36
36
|
);
|
|
37
|
-
const blobs = [];
|
|
38
37
|
media.captions.forEach((caption, index) => {
|
|
39
38
|
const track = document.createElement("track");
|
|
40
39
|
track.kind = caption.kind;
|
|
@@ -42,12 +41,7 @@ function useMediaElement(media, { request, language }) {
|
|
|
42
41
|
track.label = captionName(caption, index, languageRef.current).text;
|
|
43
42
|
video.appendChild(track);
|
|
44
43
|
loadVtt(caption.id, requestRef.current).then((text) => {
|
|
45
|
-
if (canceled)
|
|
46
|
-
const url = URL.createObjectURL(
|
|
47
|
-
new Blob([text], { type: "text/vtt" })
|
|
48
|
-
);
|
|
49
|
-
blobs.push(url);
|
|
50
|
-
track.src = url;
|
|
44
|
+
if (!canceled) addCues(track.track, text);
|
|
51
45
|
}).catch(() => void 0);
|
|
52
46
|
});
|
|
53
47
|
let hls = null;
|
|
@@ -100,7 +94,6 @@ function useMediaElement(media, { request, language }) {
|
|
|
100
94
|
video.removeAttribute("src");
|
|
101
95
|
video.load();
|
|
102
96
|
video.remove();
|
|
103
|
-
blobs.forEach((url) => URL.revokeObjectURL(url));
|
|
104
97
|
setElement(null);
|
|
105
98
|
};
|
|
106
99
|
}, [
|
|
@@ -113,7 +106,37 @@ function useMediaElement(media, { request, language }) {
|
|
|
113
106
|
]);
|
|
114
107
|
return element;
|
|
115
108
|
}
|
|
109
|
+
function addCues(track, text) {
|
|
110
|
+
if (!track || typeof VTTCue === "undefined") return;
|
|
111
|
+
for (const { id, start, end, settings, raw } of vttBlocks(text)) {
|
|
112
|
+
const cue = new VTTCue(start, end, raw);
|
|
113
|
+
cue.id = id;
|
|
114
|
+
settle(cue, settings);
|
|
115
|
+
track.addCue(cue);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function settle(cue, settings) {
|
|
119
|
+
for (const setting of settings.split(" ")) {
|
|
120
|
+
const [name, value = ""] = setting.split(":");
|
|
121
|
+
const [first, second] = value.split(",");
|
|
122
|
+
try {
|
|
123
|
+
if (name === "vertical") cue.vertical = first;
|
|
124
|
+
else if (name === "align") cue.align = first;
|
|
125
|
+
else if (name === "size") cue.size = parseFloat(first);
|
|
126
|
+
else if (name === "position") {
|
|
127
|
+
cue.position = parseFloat(first);
|
|
128
|
+
if (second) cue.positionAlign = second;
|
|
129
|
+
} else if (name === "line") {
|
|
130
|
+
cue.snapToLines = !first.endsWith("%");
|
|
131
|
+
cue.line = parseFloat(first);
|
|
132
|
+
if (second) cue.lineAlign = second;
|
|
133
|
+
}
|
|
134
|
+
} catch {
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
116
138
|
export {
|
|
139
|
+
addCues,
|
|
117
140
|
captionName,
|
|
118
141
|
useMediaElement
|
|
119
142
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
function attachMasonry(box) {
|
|
3
|
+
box.dataset.masonry = "";
|
|
3
4
|
const items = () => Array.from(
|
|
4
5
|
box.querySelectorAll(
|
|
5
6
|
".clover-items-track > .clover-items-item"
|
|
@@ -28,6 +29,7 @@ function attachMasonry(box) {
|
|
|
28
29
|
added.disconnect();
|
|
29
30
|
sizes == null ? void 0 : sizes.disconnect();
|
|
30
31
|
items().forEach((item) => item.style.removeProperty("grid-row-end"));
|
|
32
|
+
delete box.dataset.masonry;
|
|
31
33
|
};
|
|
32
34
|
}
|
|
33
35
|
export {
|
|
@@ -18,10 +18,14 @@ import { getMapWorkerUrl } from "../../core/map-config.mjs";
|
|
|
18
18
|
import { useNearViewport } from "../Body/useNearViewport.mjs";
|
|
19
19
|
import { languageProps, directionOf } from "../../i18n/direction.mjs";
|
|
20
20
|
import { Tip } from "../../ui/Tip.mjs";
|
|
21
|
+
import { ZoomOut, ZoomIn } from "../../ui/controlGlyphs.mjs";
|
|
22
|
+
import { Information } from "../Body/glyphs.mjs";
|
|
21
23
|
import { NavDate } from "../../ui/NavDate.mjs";
|
|
22
24
|
import { readDate } from "../../core/dates.mjs";
|
|
23
25
|
import { dateTimeOf, formatDate } from "../../core/dates-format.mjs";
|
|
24
26
|
import { cloverI18n, langWithin } from "../../i18n/config.mjs";
|
|
27
|
+
import { adoptSheet } from "../../ui/adoptSheet.mjs";
|
|
28
|
+
import __clover_sheet_map from "../../ui/sheets/map.mjs";
|
|
25
29
|
const RootMap = forwardRef(function RootMap2(props, ref) {
|
|
26
30
|
return /* @__PURE__ */ jsx(ConnectedMap, { ...props, scope: "view", landmark: false, forwardedRef: ref });
|
|
27
31
|
});
|
|
@@ -210,11 +214,22 @@ function MapView({
|
|
|
210
214
|
let instance = null;
|
|
211
215
|
let observer = null;
|
|
212
216
|
let letGo = null;
|
|
213
|
-
Promise.all([
|
|
217
|
+
Promise.all([
|
|
218
|
+
import("maplibre-gl"),
|
|
219
|
+
import("./worker.mjs").then(
|
|
220
|
+
(bundled) => bundled.mapLibreSheet().then(() => bundled)
|
|
221
|
+
)
|
|
222
|
+
]).then(async ([module, bundled]) => {
|
|
214
223
|
var _a;
|
|
215
224
|
const maplibre = "Map" in module ? module : module.default;
|
|
216
225
|
if (!live || !container.current) return;
|
|
217
226
|
const worker = workerUrl ?? getMapWorkerUrl() ?? bundled.bundledWorkerUrl((_a = maplibre.getVersion) == null ? void 0 : _a.call(maplibre));
|
|
227
|
+
const viaBlob = !!worker && (worker.startsWith("blob:") || new URL(worker, location.href).origin !== location.origin);
|
|
228
|
+
if (viaBlob && !await bundled.blobWorkersAllowed()) {
|
|
229
|
+
if (live) setFailed(true);
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
if (!live || !container.current) return;
|
|
218
233
|
if (worker) maplibre.setWorkerUrl(worker);
|
|
219
234
|
const { t: t2 } = latest.current;
|
|
220
235
|
instance = new maplibre.Map({
|
|
@@ -590,7 +605,10 @@ function MapView({
|
|
|
590
605
|
),
|
|
591
606
|
map && tips.map(
|
|
592
607
|
({ element, key }) => createPortal(
|
|
593
|
-
/* @__PURE__ */
|
|
608
|
+
/* @__PURE__ */ jsxs(Fragment, { children: [
|
|
609
|
+
/* @__PURE__ */ jsx(MapGlyph, { name: key }),
|
|
610
|
+
/* @__PURE__ */ jsx(Tip, { label: t(key), lang: langOf(key) })
|
|
611
|
+
] }),
|
|
594
612
|
element,
|
|
595
613
|
key
|
|
596
614
|
)
|
|
@@ -842,6 +860,28 @@ function hash(text) {
|
|
|
842
860
|
}
|
|
843
861
|
return (value >>> 0).toString(36);
|
|
844
862
|
}
|
|
863
|
+
const GLYPHS = {
|
|
864
|
+
imageZoomIn: ZoomIn,
|
|
865
|
+
imageZoomOut: ZoomOut,
|
|
866
|
+
mapAttribution: Information
|
|
867
|
+
};
|
|
868
|
+
function MapGlyph({ name }) {
|
|
869
|
+
const Glyph = GLYPHS[name];
|
|
870
|
+
if (!Glyph) return null;
|
|
871
|
+
return /* @__PURE__ */ jsx(
|
|
872
|
+
"svg",
|
|
873
|
+
{
|
|
874
|
+
className: "clover-geomap-glyph",
|
|
875
|
+
viewBox: "0 0 512 512",
|
|
876
|
+
fill: "currentColor",
|
|
877
|
+
stroke: "currentColor",
|
|
878
|
+
focusable: "false",
|
|
879
|
+
"aria-hidden": "true",
|
|
880
|
+
children: /* @__PURE__ */ jsx(Glyph, {})
|
|
881
|
+
}
|
|
882
|
+
);
|
|
883
|
+
}
|
|
884
|
+
adoptSheet("map", __clover_sheet_map);
|
|
845
885
|
export {
|
|
846
886
|
ConnectedMap,
|
|
847
887
|
GivenMap,
|