@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.
- package/README.md +1 -1
- package/dist/components/Canvas/CanvasView.mjs +37 -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 +41 -10
- package/dist/components/Canvas/media/Player.mjs +3 -0
- package/dist/components/Canvas/media/SeekMarks.mjs +236 -0
- package/dist/components/Canvas/media/Transport.mjs +29 -3
- package/dist/components/Canvas/media/useMediaElement.mjs +54 -19
- 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/styles/media.css +1 -0
- 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-j3O9cA3r.mjs} +1 -1
- package/dist/web-components/{AnnotationItems-DTacmRA9.mjs → AnnotationItems-U0WmWGOh.mjs} +1 -1
- package/dist/web-components/{AnnotationMenu-DYc9ekWS.mjs → AnnotationMenu-C1fAWWYy.mjs} +1 -1
- package/dist/web-components/{AnnotationState--5ghW0C2.mjs → AnnotationState-C9UhGpsr.mjs} +1 -1
- package/dist/web-components/{Annotations-Bvc_FmJ5.mjs → Annotations-BtJ4IVmy.mjs} +2 -2
- package/dist/web-components/{Annotations-BG8lPjk1.mjs → Annotations-YcFbQRJx.mjs} +1 -1
- package/dist/web-components/{Body-QQ1DmnbP.mjs → Body-Ccxmucbr.mjs} +1 -1
- package/dist/web-components/{BodyAlert-A4xRjOKr.mjs → BodyAlert-BBSStCpI.mjs} +1 -1
- package/dist/web-components/Button-Bphsp8rv.mjs +1 -0
- package/dist/web-components/{Camera-DqT_1MgD.mjs → Camera-DSk-YFpW.mjs} +1 -1
- package/dist/web-components/{Canvas2DBackend-TZtR3zHf.mjs → Canvas2DBackend-CYAJ-W6-.mjs} +1 -1
- package/dist/web-components/CanvasView-BAJ6OYvn.mjs +2 -0
- package/dist/web-components/{CaptionDetails-DMRWmtaY.mjs → CaptionDetails-Dg9Y11o_.mjs} +1 -1
- package/dist/web-components/ChaptersMenu-i4bFwR8c.mjs +1 -0
- package/dist/web-components/{Chevron-DFGbSGPI.mjs → Chevron-BnlK9F4K.mjs} +1 -1
- package/dist/web-components/{ChoiceMenu-C80kdxvq.mjs → ChoiceMenu-YXA7Ku8M.mjs} +1 -1
- package/dist/web-components/{Collection-B4CxBsFL.mjs → Collection-DgSFQbN-.mjs} +1 -1
- package/dist/web-components/{CollectionSelect-DO8YO2p7.mjs → CollectionSelect-PUcTh3Uv.mjs} +1 -1
- package/dist/web-components/{Connected-sYBn_9MK.mjs → Connected-B_caNIrW.mjs} +1 -1
- package/dist/web-components/{Connected-CcbVqzmj.mjs → Connected-XhRc6yaA.mjs} +1 -1
- package/dist/web-components/{Connected-DthCPaHl.mjs → Connected-YgL5BWf5.mjs} +1 -1
- package/dist/web-components/{Contents-AVPYYXht.mjs → Contents-CoC4TK6G.mjs} +1 -1
- package/dist/web-components/ControlMenu-CYfLg3Ok.mjs +1 -0
- package/dist/web-components/ControlsFade-BcGL7yUH.mjs +1 -0
- package/dist/web-components/CountMenu-C7XawAoa.mjs +1 -0
- package/dist/web-components/Cue-DZJ5TBKU.mjs +1 -0
- package/dist/web-components/Document-DZDYR2Tk.mjs +1 -0
- package/dist/web-components/{DomLayers-DlRapZ1u.mjs → DomLayers-Bbrulm6v.mjs} +1 -1
- package/dist/web-components/{Download-Ci_JUTVd.mjs → Download-CfRPt74Y.mjs} +1 -1
- package/dist/web-components/{EntryBodies-C0ICfS2R.mjs → EntryBodies-Bz8hyAUW.mjs} +1 -1
- package/dist/web-components/{EntryThumbnail-DxHhfRo_.mjs → EntryThumbnail-R9h0AXcu.mjs} +1 -1
- package/dist/web-components/{FieldPill-CVfeeafm.mjs → FieldPill-DFIdy-hn.mjs} +1 -1
- package/dist/web-components/{FrameAnimation-AZpVvu0R.mjs → FrameAnimation-DFDuFwwt.mjs} +1 -1
- package/dist/web-components/Gallery-BrYWLufL.mjs +1 -0
- package/dist/web-components/{HideToggle-0nlIo-f8.mjs → HideToggle-geO9QfFR.mjs} +1 -1
- package/dist/web-components/ImageControls-B9PhCHqi.mjs +1 -0
- package/dist/web-components/{Items-Drd82_Jj.mjs → Items-C7wjylgH.mjs} +1 -1
- package/dist/web-components/{Label-BIjqJ-_T.mjs → Label-S7o8PlWU.mjs} +1 -1
- package/dist/web-components/{LanguageChoice-DkSc-n6g.mjs → LanguageChoice-URJJAdah.mjs} +1 -1
- package/dist/web-components/LightboxView-65ROPr0_.mjs +1 -0
- package/dist/web-components/{ListEnd-pq-BgaDI.mjs → ListEnd-B0wGr87o.mjs} +1 -1
- package/dist/web-components/{Loaded-CSO5NFhm.mjs → Loaded-Do53YvYw.mjs} +1 -1
- package/dist/web-components/{LoadedCanvas-DK6xMmM1.mjs → LoadedCanvas-BrtGPpSm.mjs} +1 -1
- package/dist/web-components/LoadedMap-C06TIgvf.mjs +1 -0
- package/dist/web-components/{Loading-CoJLSRkv.mjs → Loading-Du3wn1EM.mjs} +1 -1
- package/dist/web-components/{Map-BEVtD52O.mjs → Map-B6LVO0gx.mjs} +1 -1
- package/dist/web-components/MapView-CzV3y5iI.mjs +3 -0
- package/dist/web-components/Markup-DACv7sRg.mjs +2 -0
- package/dist/web-components/MediaBody-CcuO5IZT.mjs +1 -0
- package/dist/web-components/MediaBody-DGd2uFfK.mjs +1 -0
- package/dist/web-components/{NavDate-CYNK0Qmp.mjs → NavDate-DRKmjc54.mjs} +1 -1
- package/dist/web-components/{Navigator-DrYPepzN.mjs → Navigator-CA8zB6CU.mjs} +1 -1
- package/dist/web-components/{Pager-CN4lHURv.mjs → Pager-DWp6u3iv.mjs} +1 -1
- package/dist/web-components/{PagerLayout-DeqnSQcF.mjs → PagerLayout-DHRpcI8x.mjs} +1 -1
- package/dist/web-components/{Panel-CFYUlXup.mjs → Panel-CzUDNn8M.mjs} +1 -1
- package/dist/web-components/PanelPart-DKb9dXm6.mjs +1 -0
- package/dist/web-components/{PanelToggle-9ud55NNI.mjs → PanelToggle-D5sx5FP9.mjs} +1 -1
- package/dist/web-components/{PartOfManifest-KUHUq-6q.mjs → PartOfManifest-Ct-I8Ofm.mjs} +1 -1
- package/dist/web-components/{Pending-mcmdyZPA.mjs → Pending-f1heQNo7.mjs} +1 -1
- package/dist/web-components/{PlaceBox-DX4ZLDat.mjs → PlaceBox-_an9ya_W.mjs} +1 -1
- package/dist/web-components/Placeholder-D4-VCxeD.mjs +1 -0
- package/dist/web-components/{Position-DO5qg5Sp.mjs → Position-DA4rzRiy.mjs} +1 -1
- package/dist/web-components/{Primitives-c9sIz0oQ.mjs → Primitives-DU_VhdO2.mjs} +1 -1
- package/dist/web-components/{Provider-a3xY016W.mjs → Provider-Dl_t_qEC.mjs} +1 -1
- package/dist/web-components/{ReadMore-D_WmmKEP.mjs → ReadMore-BpA8Dex8.mjs} +1 -1
- package/dist/web-components/Root-DixSZV9Y.mjs +1 -0
- package/dist/web-components/Scene-CSaXgBNr.mjs +1 -0
- package/dist/web-components/SceneView-BJNlboix.mjs +1 -0
- package/dist/web-components/{Search-BgxEW1UT.mjs → Search-CvpKzlYP.mjs} +1 -1
- package/dist/web-components/{Sections-DZVrhoAC.mjs → Sections-BhfcUyaf.mjs} +1 -1
- package/dist/web-components/SeekMarks-BfOrFnvQ.mjs +1 -0
- package/dist/web-components/{StandaloneItems-6cSw7nbF.mjs → StandaloneItems-CoiceHd8.mjs} +1 -1
- package/dist/web-components/{Status-DHTzuTkh.mjs → Status-B4327UOL.mjs} +1 -1
- package/dist/web-components/{Steps-Dkpy9KiJ.mjs → Steps-ACdXJZrV.mjs} +1 -1
- package/dist/web-components/TargetItems-D1bLKA_B.mjs +1 -0
- package/dist/web-components/Timeline-DY8LpnOG.mjs +1 -0
- package/dist/web-components/Tip-BatwzZZo.mjs +1 -0
- package/dist/web-components/{Transcript-WvFFAJQM.mjs → Transcript-B1nh9UJK.mjs} +1 -1
- package/dist/web-components/Transport-BsjGGbFJ.mjs +1 -0
- package/dist/web-components/Transport-DKb3XTMA.mjs +1 -0
- package/dist/web-components/{annotation-collection-BkC3nBPA.mjs → annotation-collection-CtxYL-V3.mjs} +1 -1
- package/dist/web-components/{annotation-name-Du2KAWoD.mjs → annotation-name-KQ4wAi8-.mjs} +1 -1
- package/dist/web-components/{annotations-content-CEzAS-P2.mjs → annotations-content-XVgQ5me7.mjs} +1 -1
- package/dist/web-components/{body-DPlfbLt3.mjs → body-CbYkzpmQ.mjs} +1 -1
- package/dist/web-components/{canvas-BUwBftJW.mjs → canvas-Du31_Dru.mjs} +1 -1
- package/dist/web-components/{cloverEngine-UNw5K4Xg.mjs → cloverEngine-CuRCXZNZ.mjs} +1 -1
- package/dist/web-components/{content-state-reader-GgQF2MvJ.mjs → content-state-reader-DLlBY4Ox.mjs} +1 -1
- package/dist/web-components/controlGlyphs-ClH59vLg.mjs +1 -0
- package/dist/web-components/{controls-CC9G5LxK.mjs → controls-smixEi0i.mjs} +1 -1
- package/dist/web-components/custom-elements.json +10 -2
- package/dist/web-components/{downloads-CmAYeEIz.mjs → downloads-BqkNwsM0.mjs} +1 -1
- package/dist/web-components/{dragToClose-DK-eM097.mjs → dragToClose-2joCF413.mjs} +1 -1
- package/dist/web-components/{engine-Dok0z8WP.mjs → engine-DNTgJBST.mjs} +1 -1
- package/dist/web-components/{engines-BD2IfwQF.mjs → engines-BpFZX2dO.mjs} +1 -1
- package/dist/web-components/{fetchManifest-tQXcfFiz.mjs → fetchManifest-B-poGgag.mjs} +1 -1
- package/dist/web-components/{fromManifest-BwQdeAuL.mjs → fromManifest-Dw3BwjHM.mjs} +1 -1
- package/dist/web-components/{glyphs-dp_HK3Ja.mjs → glyphs-VoJVEqLE.mjs} +1 -1
- package/dist/web-components/hooks-Syt1XLVX.mjs +1 -0
- package/dist/web-components/{image-layers-xcBsiad9.mjs → image-layers-ryUJ_0bq.mjs} +1 -1
- package/dist/web-components/{imageService-4sFnmAFX.mjs → imageService-DBU_Xks1.mjs} +1 -1
- package/dist/web-components/index-DGXCFoHu.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-BUmOy2QY.mjs → items-BQPvL5D6.mjs} +1 -1
- package/dist/web-components/items-TIbaHoB8.mjs +1 -0
- package/dist/web-components/label-Bd-QYEXn.mjs +1 -0
- package/dist/web-components/{layout-B29v2RKK.mjs → layout-MzMKFa5I.mjs} +1 -1
- package/dist/web-components/{link-Ct5PpHEY.mjs → link-BUQQE9P2.mjs} +1 -1
- package/dist/web-components/logo-Cn820OoX.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-wl-5vW2i.mjs} +1 -1
- package/dist/web-components/{nodes-BleXuYE6.mjs → nodes-CmOpA3s7.mjs} +1 -1
- package/dist/web-components/{overlayImage-BJtfot4Y.mjs → overlayImage-tb9-Md51.mjs} +1 -1
- package/dist/web-components/{panel-BxxV_JkD.mjs → panel-BPVyAugu.mjs} +1 -1
- package/dist/web-components/part-DeZI8Hmp.mjs +1 -0
- package/dist/web-components/{playerSurface-BXNLaFk0.mjs → playerSurface-BxxMV-va.mjs} +1 -1
- package/dist/web-components/pointer-BqgxBJ82.mjs +1 -0
- package/dist/web-components/{provider-CPp0Sgr_.mjs → provider-B9oAQG-u.mjs} +1 -1
- package/dist/web-components/{range-regions-DAaOu0IS.mjs → range-regions-BFB1374L.mjs} +1 -1
- package/dist/web-components/{read-more-lcqGslUd.mjs → read-more-oWPk0OLi.mjs} +1 -1
- package/dist/web-components/{readingLanguages-FyVsSWJ8.mjs → readingLanguages-BigCi6rZ.mjs} +1 -1
- package/dist/web-components/rendererSurface-B_OOhxzA.mjs +22 -0
- package/dist/web-components/{renderers-BFS7hFVU.mjs → renderers-CBupZj8Z.mjs} +1 -1
- package/dist/web-components/{resource-Bufu7lAr.mjs → resource-B6uUsU6D.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-BaIrLp1V.mjs} +1 -1
- package/dist/web-components/{search-5ocrsYmT.mjs → search-DaGpvTki.mjs} +1 -1
- package/dist/web-components/shared-D2RadIoz.mjs +1 -0
- package/dist/web-components/{show-link-DBaJj4s_.mjs → show-link-Cxylys81.mjs} +1 -1
- package/dist/web-components/{sizedImage-jnOGcIIZ.mjs → sizedImage-DchqGFdt.mjs} +1 -1
- package/dist/web-components/{split-P6J0qqf5.mjs → split-oaEIep3T.mjs} +1 -1
- package/dist/web-components/{status-honoOMNx.mjs → status-CfCgO5OB.mjs} +1 -1
- package/dist/web-components/styles-DZIDbHxL.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-D83GaQ8C.mjs +1 -0
- package/dist/web-components/{tip-BhNI83aT.mjs → tip-CMEBtCil.mjs} +1 -1
- package/dist/web-components/{toggle-CJKdi5KH.mjs → toggle-3NncfBSZ.mjs} +1 -1
- package/dist/web-components/trusted-Bvpx307M.mjs +1 -0
- package/dist/web-components/{useContainerName-_48Cdi0m.mjs → useContainerName-fp0-n_9x.mjs} +1 -1
- package/dist/web-components/{useControlsVisibility-CieBxGnK.mjs → useControlsVisibility-BYZlgiAt.mjs} +1 -1
- package/dist/web-components/useLazyPanelPane-DXYGGS7f.mjs +1 -0
- package/dist/web-components/{useNearViewport-B34ebmIW.mjs → useNearViewport-DMqMdvue.mjs} +1 -1
- package/dist/web-components/{useScrollTrack-DgRGFeP5.mjs → useScrollTrack-BHuPAWxB.mjs} +1 -1
- package/dist/web-components/viewer/{AnnotationItems-BNA_92Dv.mjs → AnnotationItems-B5Vs0dYi.mjs} +1 -1
- package/dist/web-components/viewer/{AnnotationMenu-BIQYVR4N.mjs → AnnotationMenu-BO18q_Ze.mjs} +1 -1
- package/dist/web-components/viewer/{AnnotationState-BbwQqA1U.mjs → AnnotationState-ZPmnCpbZ.mjs} +1 -1
- package/dist/web-components/viewer/{Annotations-P4XzAlNc.mjs → Annotations-C46kSUA6.mjs} +1 -1
- package/dist/web-components/viewer/{Annotations-CZzOZAFP.mjs → Annotations-DEKa_9xz.mjs} +2 -2
- package/dist/web-components/viewer/{Canvas2DBackend-DFfCzyjL.mjs → Canvas2DBackend-DHSI3dKr.mjs} +1 -1
- package/dist/web-components/viewer/{CaptionDetails-DPtE-RQQ.mjs → CaptionDetails-BVCqV9NT.mjs} +1 -1
- package/dist/web-components/viewer/ChaptersMenu-CIwIM2Pb.mjs +1 -0
- package/dist/web-components/viewer/{ChoiceMenu-GkqyTQRQ.mjs → ChoiceMenu-Ww7lcPnq.mjs} +1 -1
- package/dist/web-components/viewer/{Collection-DjY_6qa6.mjs → Collection-DCYM9eE6.mjs} +1 -1
- package/dist/web-components/viewer/{Connected-D5T-mtiy.mjs → Connected-Bbk8M5rE.mjs} +1 -1
- package/dist/web-components/viewer/{Connected-DIOuI3Mv.mjs → Connected-DAOMKtJR.mjs} +1 -1
- package/dist/web-components/viewer/{Contents-DV-VxXuf.mjs → Contents-BnRBx3rc.mjs} +1 -1
- package/dist/web-components/viewer/ControlMenu-Co6yBttc.mjs +1 -0
- package/dist/web-components/viewer/ControlsFade-pOQ5VQ5i.mjs +1 -0
- package/dist/web-components/viewer/CountMenu-lu21fO_7.mjs +1 -0
- package/dist/web-components/viewer/Cue-oaiVO9ZO.mjs +1 -0
- package/dist/web-components/viewer/Document-ByBRhL68.mjs +1 -0
- package/dist/web-components/viewer/{DomLayers-BCwCxPDU.mjs → DomLayers-BjxGaZkt.mjs} +1 -1
- package/dist/web-components/viewer/{Download-CL4IClAD.mjs → Download-DhMD4AJt.mjs} +1 -1
- package/dist/web-components/viewer/{EntryBodies-e40y47bl.mjs → EntryBodies-DL5UolEz.mjs} +1 -1
- package/dist/web-components/viewer/{EntryThumbnail-B_dP3w4o.mjs → EntryThumbnail-CJisDcni.mjs} +1 -1
- package/dist/web-components/viewer/{FieldPill-Hse1cDBE.mjs → FieldPill-DAk6zxxD.mjs} +1 -1
- package/dist/web-components/viewer/{FrameAnimation-CE218DCr.mjs → FrameAnimation-DGMuFNdW.mjs} +1 -1
- package/dist/web-components/viewer/Gallery-CbHhyWlF.mjs +1 -0
- package/dist/web-components/viewer/{HideToggle-CYoqe_ez.mjs → HideToggle-C6B9B2Bo.mjs} +1 -1
- package/dist/web-components/viewer/ImageControls-BDx7C1q5.mjs +1 -0
- package/dist/web-components/viewer/{LanguageChoice-BmO-322r.mjs → LanguageChoice-BM9xZr_D.mjs} +1 -1
- package/dist/web-components/viewer/LightboxView-RrioB0CN.mjs +1 -0
- package/dist/web-components/viewer/{ListEnd-DX1jsvJk.mjs → ListEnd-8vdKw6Py.mjs} +1 -1
- package/dist/web-components/viewer/MapView-G3yj-Bjd.mjs +3 -0
- package/dist/web-components/viewer/MediaBody-BokgnTO-.mjs +1 -0
- package/dist/web-components/viewer/MediaBody-DPOcyiYH.mjs +1 -0
- package/dist/web-components/viewer/{NavDate-BZgeaMG9.mjs → NavDate-B6rCV-Cd.mjs} +1 -1
- package/dist/web-components/viewer/{Navigator-Co76p-1n.mjs → Navigator-CjgUcgKY.mjs} +1 -1
- package/dist/web-components/viewer/{PagerLayout-tUkN1-FV.mjs → PagerLayout-LZmC6VpV.mjs} +1 -1
- package/dist/web-components/viewer/PanelPart-Cw1G5W4b.mjs +1 -0
- package/dist/web-components/viewer/{PartOfManifest-DXnbEPzS.mjs → PartOfManifest-B0TYADTv.mjs} +1 -1
- package/dist/web-components/viewer/{PlaceBox-xrJ4CGdN.mjs → PlaceBox-Cjdjg-_9.mjs} +1 -1
- package/dist/web-components/viewer/Placeholder-MYLjXbiF.mjs +1 -0
- package/dist/web-components/viewer/{Search-DTg1cHZ3.mjs → Search-CyRrBHsr.mjs} +1 -1
- package/dist/web-components/viewer/SeekMarks-1WSjARP5.mjs +1 -0
- package/dist/web-components/viewer/{StandaloneItems-BpBEQG8i.mjs → StandaloneItems-CQrzTSPC.mjs} +1 -1
- package/dist/web-components/viewer/{Steps-SpwMQdCL.mjs → Steps-Bd42-eq7.mjs} +1 -1
- package/dist/web-components/viewer/TargetItems-BpmZEVMS.mjs +1 -0
- package/dist/web-components/viewer/{Transcript-rTAhuXCF.mjs → Transcript-CE4BsnWd.mjs} +1 -1
- package/dist/web-components/viewer/Transport-1ROUkfsf.mjs +1 -0
- package/dist/web-components/viewer/Transport-g0_Cjy0f.mjs +1 -0
- package/dist/web-components/viewer/{annotation-collection-B7pZiLVk.mjs → annotation-collection-vM0aeJgP.mjs} +1 -1
- package/dist/web-components/viewer/annotation-name-kjUrGbhg.mjs +1 -0
- package/dist/web-components/viewer/{annotations-content-9AtLlPNn.mjs → annotations-content-CysDLy4t.mjs} +1 -1
- package/dist/web-components/viewer/{cloverEngine-jRrYLrWa.mjs → cloverEngine-S8GEd-YZ.mjs} +1 -1
- package/dist/web-components/viewer/{content-state-reader-CPvkju6Q.mjs → content-state-reader-BTZKS9Hq.mjs} +1 -1
- package/dist/web-components/viewer/{dragToClose-Co9kGk9q.mjs → dragToClose-Bt4QtVSO.mjs} +1 -1
- package/dist/web-components/viewer/{fetchManifest-D7N9WhhF.mjs → fetchManifest-D4aIqcDV.mjs} +1 -1
- package/dist/web-components/viewer/{host-DMD9LE4H.mjs → host-ClJe-BX1.mjs} +1 -1
- package/dist/web-components/viewer/{image-layers-x_shzPvu.mjs → image-layers-DGa5HJt8.mjs} +1 -1
- package/dist/web-components/viewer/index.mjs +1 -1
- package/dist/web-components/viewer/{link-DikPGzNO.mjs → link-CU71f0wU.mjs} +1 -1
- package/dist/web-components/viewer/{overlayImage-33kKKB0T.mjs → overlayImage-D9GHzMmm.mjs} +1 -1
- package/dist/web-components/viewer/{range-regions-TH6WWGTT.mjs → range-regions-CiceyEuu.mjs} +1 -1
- package/dist/web-components/viewer/{renderers-BxePmixF.mjs → renderers-2BgvLkI0.mjs} +1 -1
- package/dist/web-components/viewer/{save-file-QXKiPlST.mjs → save-file-BW7D7oYG.mjs} +1 -1
- package/dist/web-components/viewer/{search-B_NePyas.mjs → search-DBMO82DV.mjs} +1 -1
- package/dist/web-components/viewer/styles-DogZyfVz.mjs +1 -0
- package/dist/web-components/viewer/{useControlsVisibility-Cu-jTDzs.mjs → useControlsVisibility-DSSIzst5.mjs} +1 -1
- package/dist/web-components/viewer/useLazyPanelPane-_6IY7cV5.mjs +1 -0
- package/dist/web-components/viewer/viewer-ClQD1LNQ.mjs +29 -0
- package/dist/web-components/viewer/vtt-Dk5bwDVQ.mjs +5 -0
- package/dist/web-components/viewer-DLfZQmZs.mjs +1 -0
- package/dist/web-components/vtt-9Ui3h60h.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/MediaBody-Co23JjUJ.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/Transport-FxLp_bdW.mjs +0 -1
- package/dist/web-components/Transport-VUxSEIQO.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/MediaBody-SkIgrEMj.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-vKIDALE-.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,
|
|
@@ -714,6 +743,10 @@ ${canvases.map((canvas) => canvas.id).join("|")}` : null;
|
|
|
714
743
|
autoPlay: !player && stills.length > 0 && model.quietlyOpened !== canvasKey,
|
|
715
744
|
language,
|
|
716
745
|
notes: model.timed,
|
|
746
|
+
marked: model.placed,
|
|
747
|
+
selectedAnnotation: model.selected,
|
|
748
|
+
onAnnotationSelect: hasAnnotations ? model.select : void 0,
|
|
749
|
+
onAnnotationActivate: model.activate,
|
|
717
750
|
player: player && canvases ? {
|
|
718
751
|
canvas: canvases[0],
|
|
719
752
|
title: ownName,
|
|
@@ -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 = ({
|
|
@@ -33,6 +35,10 @@ const MediaBody = ({
|
|
|
33
35
|
onChapterHighlight,
|
|
34
36
|
language: givenLanguage,
|
|
35
37
|
notes,
|
|
38
|
+
marked,
|
|
39
|
+
selectedAnnotation,
|
|
40
|
+
onAnnotationSelect,
|
|
41
|
+
onAnnotationActivate,
|
|
36
42
|
player
|
|
37
43
|
}) => {
|
|
38
44
|
var _a, _b;
|
|
@@ -189,6 +195,31 @@ const MediaBody = ({
|
|
|
189
195
|
),
|
|
190
196
|
[notes, currentTime]
|
|
191
197
|
);
|
|
198
|
+
const marking = useMemo(() => {
|
|
199
|
+
var _a2, _b2;
|
|
200
|
+
const byId = /* @__PURE__ */ new Map();
|
|
201
|
+
const marks = [];
|
|
202
|
+
for (const annotation of [
|
|
203
|
+
...notes ?? [],
|
|
204
|
+
...(marked ?? []).filter((each) => {
|
|
205
|
+
var _a3;
|
|
206
|
+
return (_a3 = each.track) == null ? void 0 : _a3.length;
|
|
207
|
+
})
|
|
208
|
+
]) {
|
|
209
|
+
const start = "start" in annotation ? annotation.start : (_b2 = (_a2 = annotation.track) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.start;
|
|
210
|
+
if (start === void 0 || !annotation.label || byId.has(annotation.id))
|
|
211
|
+
continue;
|
|
212
|
+
byId.set(annotation.id, annotation);
|
|
213
|
+
marks.push({
|
|
214
|
+
id: annotation.id,
|
|
215
|
+
start,
|
|
216
|
+
label: annotation.label,
|
|
217
|
+
lang: annotation.lang
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
marks.sort((a, b) => a.start - b.start);
|
|
221
|
+
return { marks, byId };
|
|
222
|
+
}, [notes, marked]);
|
|
192
223
|
const transport = /* @__PURE__ */ jsx(
|
|
193
224
|
Transport,
|
|
194
225
|
{
|
|
@@ -211,7 +242,14 @@ const MediaBody = ({
|
|
|
211
242
|
highlightedChapter,
|
|
212
243
|
onChapterHighlight,
|
|
213
244
|
request,
|
|
214
|
-
fill
|
|
245
|
+
fill,
|
|
246
|
+
marks: marking.marks,
|
|
247
|
+
selectedMark: selectedAnnotation,
|
|
248
|
+
onMarkSelect: onAnnotationSelect && ((id) => {
|
|
249
|
+
const annotation = marking.byId.get(id);
|
|
250
|
+
if (annotation) onAnnotationSelect(annotation);
|
|
251
|
+
}),
|
|
252
|
+
onMarkActivate: onAnnotationActivate
|
|
215
253
|
}
|
|
216
254
|
);
|
|
217
255
|
const noteLines = playing.map((note) => /* @__PURE__ */ jsxs(
|
|
@@ -266,15 +304,7 @@ const MediaBody = ({
|
|
|
266
304
|
language
|
|
267
305
|
}
|
|
268
306
|
),
|
|
269
|
-
|
|
270
|
-
"div",
|
|
271
|
-
{
|
|
272
|
-
className: "clover-canvas-captions clover-canvas-player-notes",
|
|
273
|
-
"aria-live": "off",
|
|
274
|
-
children: noteLines
|
|
275
|
-
}
|
|
276
|
-
),
|
|
277
|
-
cues.length > 0 && /* @__PURE__ */ jsx("div", { className: "clover-canvas-captions", "aria-live": "off", children: captionLines }),
|
|
307
|
+
/* @__PURE__ */ jsx("div", { className: "clover-canvas-player-cues", children: cues.length > 0 && /* @__PURE__ */ jsx("div", { className: "clover-canvas-captions", "aria-live": "off", children: captionLines }) }),
|
|
278
308
|
transport,
|
|
279
309
|
/* @__PURE__ */ jsx(BodyUnloadable, { kind: media.kind, shown: failed, room: true })
|
|
280
310
|
] })
|
|
@@ -363,6 +393,7 @@ function containAspect(box, size) {
|
|
|
363
393
|
height
|
|
364
394
|
};
|
|
365
395
|
}
|
|
396
|
+
adoptSheet("media", __clover_sheet_media);
|
|
366
397
|
export {
|
|
367
398
|
containAspect,
|
|
368
399
|
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
|
};
|