@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
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useRef, useState, useLayoutEffect, useMemo } from "react";
|
|
4
|
+
import { alongBar } from "./seekGaps.mjs";
|
|
5
|
+
import { Steps } from "../../../ui/Steps.mjs";
|
|
6
|
+
import { hideUntilBack } from "../../../ui/Tip.mjs";
|
|
7
|
+
import { useCloverTranslation } from "../../../i18n/useCloverTranslation.mjs";
|
|
8
|
+
import { languageProps } from "../../../i18n/direction.mjs";
|
|
9
|
+
import { formatTime } from "../../../lib/time.mjs";
|
|
10
|
+
const THUMB = 12;
|
|
11
|
+
function groupMarks(marks, duration, width, target) {
|
|
12
|
+
const x = (mark) => THUMB / 2 + (width - THUMB) * (mark.start / duration);
|
|
13
|
+
const groups = [];
|
|
14
|
+
for (const mark of marks) {
|
|
15
|
+
const group = groups[groups.length - 1];
|
|
16
|
+
const near = group ? width > 0 ? x(mark) - x(group[0]) < target : mark.start === group[0].start : false;
|
|
17
|
+
if (near) group.push(mark);
|
|
18
|
+
else groups.push([mark]);
|
|
19
|
+
}
|
|
20
|
+
return groups;
|
|
21
|
+
}
|
|
22
|
+
const SCROLL_KEYS = {
|
|
23
|
+
ArrowDown: (words) => parseFloat(getComputedStyle(words).lineHeight) || 16,
|
|
24
|
+
ArrowUp: (words) => -(parseFloat(getComputedStyle(words).lineHeight) || 16),
|
|
25
|
+
PageDown: (words) => words.clientHeight,
|
|
26
|
+
PageUp: (words) => -words.clientHeight
|
|
27
|
+
};
|
|
28
|
+
function scrollWords(event) {
|
|
29
|
+
const words = event.currentTarget.querySelector(
|
|
30
|
+
".clover-canvas-transport-mark-words"
|
|
31
|
+
);
|
|
32
|
+
const by = SCROLL_KEYS[event.key];
|
|
33
|
+
if (!words || !by || event.altKey || event.ctrlKey || event.metaKey)
|
|
34
|
+
return false;
|
|
35
|
+
const delta = by(words);
|
|
36
|
+
const room = delta > 0 ? words.scrollHeight - words.clientHeight - words.scrollTop : words.scrollTop;
|
|
37
|
+
if (room < 1) return false;
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
words.scrollBy({ top: delta });
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
function SeekMarks({
|
|
43
|
+
marks,
|
|
44
|
+
duration,
|
|
45
|
+
selected,
|
|
46
|
+
onSelect,
|
|
47
|
+
onActivate
|
|
48
|
+
}) {
|
|
49
|
+
const { t, langOf } = useCloverTranslation();
|
|
50
|
+
const toolbar = useRef(null);
|
|
51
|
+
const [bar, setBar] = useState({ width: 0, target: 0, from: 0 });
|
|
52
|
+
useLayoutEffect(() => {
|
|
53
|
+
const element = toolbar.current;
|
|
54
|
+
if (!element) return;
|
|
55
|
+
const body = element.closest(".clover-canvas-media");
|
|
56
|
+
const measure = () => {
|
|
57
|
+
const button = element.querySelector(
|
|
58
|
+
".clover-canvas-transport-mark"
|
|
59
|
+
);
|
|
60
|
+
const next = {
|
|
61
|
+
width: element.clientWidth,
|
|
62
|
+
target: (button == null ? void 0 : button.offsetWidth) ?? 0,
|
|
63
|
+
from: body ? element.getBoundingClientRect().left - body.getBoundingClientRect().left : 0
|
|
64
|
+
};
|
|
65
|
+
setBar(
|
|
66
|
+
(was) => was.width === next.width && was.target === next.target && was.from === next.from ? was : next
|
|
67
|
+
);
|
|
68
|
+
};
|
|
69
|
+
measure();
|
|
70
|
+
const observer = new ResizeObserver(measure);
|
|
71
|
+
observer.observe(element);
|
|
72
|
+
if (body) observer.observe(body);
|
|
73
|
+
return () => observer.disconnect();
|
|
74
|
+
}, []);
|
|
75
|
+
const groups = useMemo(
|
|
76
|
+
() => groupMarks(marks, duration, bar.width, bar.target),
|
|
77
|
+
[marks, duration, bar]
|
|
78
|
+
);
|
|
79
|
+
const [stepped, setStepped] = useState({});
|
|
80
|
+
const shownIn = (group) => {
|
|
81
|
+
const picked = group.findIndex((mark) => mark.id === selected);
|
|
82
|
+
if (picked >= 0) return picked;
|
|
83
|
+
return Math.min(stepped[group[0].id] ?? 0, group.length - 1);
|
|
84
|
+
};
|
|
85
|
+
const [focused, setFocused] = useState(null);
|
|
86
|
+
const [lit, setLit] = useState(null);
|
|
87
|
+
const light = (id) => {
|
|
88
|
+
setLit(id);
|
|
89
|
+
onActivate == null ? void 0 : onActivate(id);
|
|
90
|
+
};
|
|
91
|
+
const buttons = useRef([]);
|
|
92
|
+
const escaped = useRef(/* @__PURE__ */ new Set());
|
|
93
|
+
if (!marks.length || !(duration > 0)) return null;
|
|
94
|
+
const holds = (group, id) => Boolean(id) && group.some((mark) => mark.id === id);
|
|
95
|
+
const stop = Math.max(
|
|
96
|
+
0,
|
|
97
|
+
groups.findIndex((group) => holds(group, focused ?? selected))
|
|
98
|
+
);
|
|
99
|
+
const moveTo = (index) => {
|
|
100
|
+
var _a;
|
|
101
|
+
const next = Math.min(groups.length - 1, Math.max(0, index));
|
|
102
|
+
(_a = buttons.current[next]) == null ? void 0 : _a.focus();
|
|
103
|
+
};
|
|
104
|
+
const along = (group) => alongBar(group[0].start / duration * 100);
|
|
105
|
+
const inBody = (group) => `${bar.from + THUMB / 2 + (bar.width - THUMB) * (group[0].start / duration)}px`;
|
|
106
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
107
|
+
/* @__PURE__ */ jsx("span", { className: "clover-canvas-transport-points", "aria-hidden": "true", children: groups.map((group) => /* @__PURE__ */ jsx(
|
|
108
|
+
"span",
|
|
109
|
+
{
|
|
110
|
+
className: "clover-canvas-transport-mark-point",
|
|
111
|
+
"data-active": holds(group, lit) || holds(group, selected) ? "true" : void 0,
|
|
112
|
+
style: { left: along(group) }
|
|
113
|
+
},
|
|
114
|
+
group[0].id
|
|
115
|
+
)) }),
|
|
116
|
+
/* @__PURE__ */ jsx(
|
|
117
|
+
"div",
|
|
118
|
+
{
|
|
119
|
+
ref: toolbar,
|
|
120
|
+
className: "clover-canvas-transport-marks",
|
|
121
|
+
role: "toolbar",
|
|
122
|
+
"aria-label": t("informationPanelTabsAnnotations"),
|
|
123
|
+
lang: langOf("informationPanelTabsAnnotations"),
|
|
124
|
+
onKeyDown: (event) => {
|
|
125
|
+
const index = buttons.current.findIndex(
|
|
126
|
+
(button) => button === document.activeElement
|
|
127
|
+
);
|
|
128
|
+
if (index < 0) return;
|
|
129
|
+
const step = getComputedStyle(event.currentTarget).direction === "rtl" ? -1 : 1;
|
|
130
|
+
if (event.key === "ArrowRight") moveTo(index + step);
|
|
131
|
+
else if (event.key === "ArrowLeft") moveTo(index - step);
|
|
132
|
+
else if (event.key === "Home") moveTo(0);
|
|
133
|
+
else if (event.key === "End") moveTo(groups.length - 1);
|
|
134
|
+
else return;
|
|
135
|
+
event.preventDefault();
|
|
136
|
+
},
|
|
137
|
+
children: groups.map((group, index) => {
|
|
138
|
+
const shown = shownIn(group);
|
|
139
|
+
const mark = group[shown];
|
|
140
|
+
const time = formatTime(mark.start);
|
|
141
|
+
const place = group.length > 1 ? ` ${shown + 1} / ${group.length}` : "";
|
|
142
|
+
const show = (to) => {
|
|
143
|
+
setStepped((was) => ({ ...was, [group[0].id]: to }));
|
|
144
|
+
light(group[to].id);
|
|
145
|
+
onSelect(group[to].id);
|
|
146
|
+
};
|
|
147
|
+
return /* @__PURE__ */ jsxs(
|
|
148
|
+
"div",
|
|
149
|
+
{
|
|
150
|
+
className: "clover-canvas-transport-mark-group",
|
|
151
|
+
style: {
|
|
152
|
+
left: along(group),
|
|
153
|
+
...bar.width > 0 && { "--clover-mark-x": inBody(group) }
|
|
154
|
+
},
|
|
155
|
+
onPointerEnter: () => {
|
|
156
|
+
escaped.current.delete(group[0].id);
|
|
157
|
+
light(mark.id);
|
|
158
|
+
},
|
|
159
|
+
onPointerLeave: () => light(null),
|
|
160
|
+
onFocus: () => {
|
|
161
|
+
escaped.current.delete(group[0].id);
|
|
162
|
+
setFocused(mark.id);
|
|
163
|
+
light(mark.id);
|
|
164
|
+
},
|
|
165
|
+
onBlur: (event) => {
|
|
166
|
+
if (!event.currentTarget.contains(event.relatedTarget))
|
|
167
|
+
light(null);
|
|
168
|
+
},
|
|
169
|
+
onKeyDown: (event) => {
|
|
170
|
+
if (event.defaultPrevented) return;
|
|
171
|
+
if (scrollWords(event)) return;
|
|
172
|
+
if (event.key !== "Escape") return;
|
|
173
|
+
if (escaped.current.has(group[0].id)) return;
|
|
174
|
+
event.preventDefault();
|
|
175
|
+
escaped.current.add(group[0].id);
|
|
176
|
+
const point = buttons.current[index];
|
|
177
|
+
if (point && document.activeElement !== point) point.focus();
|
|
178
|
+
hideUntilBack(event.currentTarget, "tipHidden", [
|
|
179
|
+
"pointerenter",
|
|
180
|
+
"focusin"
|
|
181
|
+
]);
|
|
182
|
+
},
|
|
183
|
+
children: [
|
|
184
|
+
/* @__PURE__ */ jsx(
|
|
185
|
+
"button",
|
|
186
|
+
{
|
|
187
|
+
ref: (button) => {
|
|
188
|
+
buttons.current[index] = button;
|
|
189
|
+
},
|
|
190
|
+
type: "button",
|
|
191
|
+
className: "clover-canvas-transport-mark",
|
|
192
|
+
tabIndex: index === stop ? 0 : -1,
|
|
193
|
+
"aria-label": `${time} ${mark.label}${place}`,
|
|
194
|
+
...languageProps(mark.lang),
|
|
195
|
+
"aria-current": holds(group, selected) ? "true" : void 0,
|
|
196
|
+
"data-active": holds(group, selected) ? "true" : void 0,
|
|
197
|
+
onClick: () => onSelect(mark.id)
|
|
198
|
+
}
|
|
199
|
+
),
|
|
200
|
+
/* @__PURE__ */ jsxs("span", { className: "clover-tip clover-canvas-transport-mark-tip", children: [
|
|
201
|
+
/* @__PURE__ */ jsxs(
|
|
202
|
+
"span",
|
|
203
|
+
{
|
|
204
|
+
className: "clover-canvas-transport-mark-words",
|
|
205
|
+
"aria-hidden": "true",
|
|
206
|
+
...languageProps(mark.lang),
|
|
207
|
+
children: [
|
|
208
|
+
/* @__PURE__ */ jsx("span", { className: "clover-tip-lead", children: time }),
|
|
209
|
+
mark.label
|
|
210
|
+
]
|
|
211
|
+
}
|
|
212
|
+
),
|
|
213
|
+
group.length > 1 && /* @__PURE__ */ jsx(
|
|
214
|
+
Steps,
|
|
215
|
+
{
|
|
216
|
+
steps: {
|
|
217
|
+
position: shown,
|
|
218
|
+
total: group.length,
|
|
219
|
+
step: (by) => show(shown + by)
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
)
|
|
223
|
+
] })
|
|
224
|
+
]
|
|
225
|
+
},
|
|
226
|
+
group[0].id
|
|
227
|
+
);
|
|
228
|
+
})
|
|
229
|
+
}
|
|
230
|
+
)
|
|
231
|
+
] });
|
|
232
|
+
}
|
|
233
|
+
export {
|
|
234
|
+
SeekMarks,
|
|
235
|
+
groupMarks
|
|
236
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { useRef, useState, useLayoutEffect, useMemo, useEffect } from "react";
|
|
3
|
+
import { useRef, useState, useLayoutEffect, useMemo, Suspense, lazy, useEffect } from "react";
|
|
4
4
|
import { TransportButton } from "./TransportButton.mjs";
|
|
5
5
|
import { useBarHeight } from "./useBarHeight.mjs";
|
|
6
6
|
import { gapsOf, gapMask, alongBar, lengthOnBar, seekShare } from "./seekGaps.mjs";
|
|
@@ -17,7 +17,13 @@ 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";
|
|
23
|
+
const SeekMarks = lazy(
|
|
24
|
+
() => import("./SeekMarks.mjs").then(({ SeekMarks: SeekMarks2 }) => ({ default: SeekMarks2 }))
|
|
25
|
+
);
|
|
26
|
+
const SEEK_MARKS = ".clover-canvas-transport-marks";
|
|
21
27
|
const chapterPicture = (chapter) => typeof (chapter == null ? void 0 : chapter.thumbnail) === "string" ? { src: chapter.thumbnail } : imageSource(chapter == null ? void 0 : chapter.thumbnail);
|
|
22
28
|
function chapterAt(chapters, time) {
|
|
23
29
|
var _a;
|
|
@@ -240,7 +246,11 @@ const Transport = ({
|
|
|
240
246
|
highlightedChapter = null,
|
|
241
247
|
onChapterHighlight,
|
|
242
248
|
request,
|
|
243
|
-
fill
|
|
249
|
+
fill,
|
|
250
|
+
marks = [],
|
|
251
|
+
selectedMark,
|
|
252
|
+
onMarkSelect,
|
|
253
|
+
onMarkActivate
|
|
244
254
|
}) => {
|
|
245
255
|
var _a, _b;
|
|
246
256
|
const { t, langOf } = useCloverTranslation();
|
|
@@ -350,8 +360,13 @@ const Transport = ({
|
|
|
350
360
|
ref: seekArea,
|
|
351
361
|
className: "clover-canvas-transport-seek-area",
|
|
352
362
|
onPointerMove: (event) => {
|
|
353
|
-
|
|
363
|
+
const over = event.target;
|
|
364
|
+
if (over.closest(SEEK_MARKS)) {
|
|
365
|
+
setPointing(false);
|
|
366
|
+
point(-1);
|
|
354
367
|
return;
|
|
368
|
+
}
|
|
369
|
+
if (!duration || over.closest(".clover-tip")) return;
|
|
355
370
|
const at = seekShare(event.currentTarget, event.clientX) * duration;
|
|
356
371
|
setPointing(true);
|
|
357
372
|
setPointedAt(Math.floor(at));
|
|
@@ -368,6 +383,16 @@ const Transport = ({
|
|
|
368
383
|
)
|
|
369
384
|
} : void 0,
|
|
370
385
|
children: [
|
|
386
|
+
onMarkSelect && marks.length > 0 && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
|
|
387
|
+
SeekMarks,
|
|
388
|
+
{
|
|
389
|
+
marks,
|
|
390
|
+
duration,
|
|
391
|
+
selected: selectedMark,
|
|
392
|
+
onSelect: onMarkSelect,
|
|
393
|
+
onActivate: onMarkActivate
|
|
394
|
+
}
|
|
395
|
+
) }),
|
|
371
396
|
/* @__PURE__ */ jsx(
|
|
372
397
|
"input",
|
|
373
398
|
{
|
|
@@ -528,6 +553,7 @@ const Transport = ({
|
|
|
528
553
|
}
|
|
529
554
|
);
|
|
530
555
|
};
|
|
556
|
+
adoptSheet("media", __clover_sheet_media);
|
|
531
557
|
export {
|
|
532
558
|
chapterAt,
|
|
533
559
|
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,25 +34,10 @@ function useMediaElement(media, { request, language }) {
|
|
|
34
34
|
if (!canceled && url) video.poster = url;
|
|
35
35
|
}
|
|
36
36
|
);
|
|
37
|
-
const blobs = [];
|
|
38
|
-
media.captions.forEach((caption, index) => {
|
|
39
|
-
const track = document.createElement("track");
|
|
40
|
-
track.kind = caption.kind;
|
|
41
|
-
if (caption.language) track.srclang = caption.language;
|
|
42
|
-
track.label = captionName(caption, index, languageRef.current).text;
|
|
43
|
-
video.appendChild(track);
|
|
44
|
-
loadVtt(caption.id, requestRef.current).then((text) => {
|
|
45
|
-
if (canceled) return;
|
|
46
|
-
const url = URL.createObjectURL(
|
|
47
|
-
new Blob([text], { type: "text/vtt" })
|
|
48
|
-
);
|
|
49
|
-
blobs.push(url);
|
|
50
|
-
track.src = url;
|
|
51
|
-
}).catch(() => void 0);
|
|
52
|
-
});
|
|
53
37
|
let hls = null;
|
|
38
|
+
let attached = Promise.resolve();
|
|
54
39
|
if (isHls(media.src, media.format)) {
|
|
55
|
-
import("hls.js").then(({ default: Hls }) => {
|
|
40
|
+
attached = import("hls.js").then(({ default: Hls }) => {
|
|
56
41
|
if (canceled) return;
|
|
57
42
|
if (!Hls.isSupported()) {
|
|
58
43
|
video.src = media.src;
|
|
@@ -78,6 +63,22 @@ function useMediaElement(media, { request, language }) {
|
|
|
78
63
|
} else {
|
|
79
64
|
video.src = media.src;
|
|
80
65
|
}
|
|
66
|
+
media.captions.forEach((caption, index) => {
|
|
67
|
+
const track = document.createElement("track");
|
|
68
|
+
track.kind = caption.kind;
|
|
69
|
+
if (caption.language) track.srclang = caption.language;
|
|
70
|
+
track.label = captionName(caption, index, languageRef.current).text;
|
|
71
|
+
video.appendChild(track);
|
|
72
|
+
Promise.all([loadVtt(caption.id, requestRef.current), attached]).then(([text]) => {
|
|
73
|
+
if (canceled) return;
|
|
74
|
+
addCues(track.track, text);
|
|
75
|
+
whenSettled(track, () => {
|
|
76
|
+
var _a, _b;
|
|
77
|
+
if (!canceled && !((_b = (_a = track.track) == null ? void 0 : _a.cues) == null ? void 0 : _b.length))
|
|
78
|
+
addCues(track.track, text);
|
|
79
|
+
});
|
|
80
|
+
}).catch(() => void 0);
|
|
81
|
+
});
|
|
81
82
|
for (const track of Array.from(video.textTracks ?? [])) {
|
|
82
83
|
track.mode = "hidden";
|
|
83
84
|
}
|
|
@@ -100,7 +101,6 @@ function useMediaElement(media, { request, language }) {
|
|
|
100
101
|
video.removeAttribute("src");
|
|
101
102
|
video.load();
|
|
102
103
|
video.remove();
|
|
103
|
-
blobs.forEach((url) => URL.revokeObjectURL(url));
|
|
104
104
|
setElement(null);
|
|
105
105
|
};
|
|
106
106
|
}, [
|
|
@@ -113,7 +113,42 @@ function useMediaElement(media, { request, language }) {
|
|
|
113
113
|
]);
|
|
114
114
|
return element;
|
|
115
115
|
}
|
|
116
|
+
function whenSettled(element, then) {
|
|
117
|
+
if (element.readyState >= HTMLTrackElement.LOADED) return;
|
|
118
|
+
element.addEventListener("load", then, { once: true });
|
|
119
|
+
element.addEventListener("error", then, { once: true });
|
|
120
|
+
}
|
|
121
|
+
function addCues(track, text) {
|
|
122
|
+
if (!track || typeof VTTCue === "undefined") return;
|
|
123
|
+
for (const { id, start, end, settings, raw } of vttBlocks(text)) {
|
|
124
|
+
const cue = new VTTCue(start, end, raw);
|
|
125
|
+
cue.id = id;
|
|
126
|
+
settle(cue, settings);
|
|
127
|
+
track.addCue(cue);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function settle(cue, settings) {
|
|
131
|
+
for (const setting of settings.split(" ")) {
|
|
132
|
+
const [name, value = ""] = setting.split(":");
|
|
133
|
+
const [first, second] = value.split(",");
|
|
134
|
+
try {
|
|
135
|
+
if (name === "vertical") cue.vertical = first;
|
|
136
|
+
else if (name === "align") cue.align = first;
|
|
137
|
+
else if (name === "size") cue.size = parseFloat(first);
|
|
138
|
+
else if (name === "position") {
|
|
139
|
+
cue.position = parseFloat(first);
|
|
140
|
+
if (second) cue.positionAlign = second;
|
|
141
|
+
} else if (name === "line") {
|
|
142
|
+
cue.snapToLines = !first.endsWith("%");
|
|
143
|
+
cue.line = parseFloat(first);
|
|
144
|
+
if (second) cue.lineAlign = second;
|
|
145
|
+
}
|
|
146
|
+
} catch {
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
116
150
|
export {
|
|
151
|
+
addCues,
|
|
117
152
|
captionName,
|
|
118
153
|
useMediaElement
|
|
119
154
|
};
|
|
@@ -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,
|