@nulib/clover 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Body/useControlsVisibility.mjs +35 -13
- package/dist/components/Panel/Panel.mjs +47 -59
- package/dist/components/Panel/sections.mjs +62 -0
- package/dist/index.d.mts +70 -6
- package/dist/index.mjs +2 -0
- package/dist/lib/pointer.mjs +1 -1
- package/dist/styles.css +1 -1
- package/dist/templates/default/Default.mjs +5 -0
- package/dist/templates/document/Document.mjs +10 -1
- package/dist/templates/gallery/Gallery.mjs +4 -0
- package/dist/templates/index.d.mts +68 -3
- package/dist/templates/shared/LightboxView.mjs +5 -0
- package/dist/templates/shared/PanelPane.mjs +13 -1
- package/dist/web-components/{About-DvyvVUK5.mjs → About-D1TBGGPL.mjs} +1 -1
- package/dist/web-components/{AnnotationItems-BpRcSrOM.mjs → AnnotationItems-DTacmRA9.mjs} +1 -1
- package/dist/web-components/{AnnotationMenu-BDPec3iI.mjs → AnnotationMenu-DYc9ekWS.mjs} +1 -1
- package/dist/web-components/{AnnotationState-Chs_37Kk.mjs → AnnotationState--5ghW0C2.mjs} +1 -1
- package/dist/web-components/{Annotations-CLPEq7Ro.mjs → Annotations-BG8lPjk1.mjs} +1 -1
- package/dist/web-components/{Annotations-6E-oD_wg.mjs → Annotations-Bvc_FmJ5.mjs} +1 -1
- package/dist/web-components/{Body-Ct61yxI7.mjs → Body-QQ1DmnbP.mjs} +1 -1
- package/dist/web-components/{BodyAlert-C_Qh3Up_.mjs → BodyAlert-A4xRjOKr.mjs} +1 -1
- package/dist/web-components/{Button-L8ZMy5lY.mjs → Button-Cx6VE_UW.mjs} +1 -1
- package/dist/web-components/{Camera-BPyLzZjP.mjs → Camera-DqT_1MgD.mjs} +1 -1
- package/dist/web-components/{Canvas2DBackend-8wFavYdl.mjs → Canvas2DBackend-TZtR3zHf.mjs} +1 -1
- package/dist/web-components/{CanvasView-2Fj9nT06.mjs → CanvasView-DxZASM9E.mjs} +1 -1
- package/dist/web-components/{CaptionDetails-DuwS-grE.mjs → CaptionDetails-DMRWmtaY.mjs} +1 -1
- package/dist/web-components/{ChaptersMenu-Bj2EqtVJ.mjs → ChaptersMenu-BAZVVDrK.mjs} +1 -1
- package/dist/web-components/{Chevron-Cyr_cc9X.mjs → Chevron-DFGbSGPI.mjs} +1 -1
- package/dist/web-components/{ChoiceMenu-ConzybVH.mjs → ChoiceMenu-C80kdxvq.mjs} +1 -1
- package/dist/web-components/{Collection-CLayN8sv.mjs → Collection-B4CxBsFL.mjs} +1 -1
- package/dist/web-components/{CollectionSelect-D2d8dGJ4.mjs → CollectionSelect-DO8YO2p7.mjs} +1 -1
- package/dist/web-components/{Connected-pyd0EBD3.mjs → Connected-CcbVqzmj.mjs} +1 -1
- package/dist/web-components/{Connected-CBQ6xyhr.mjs → Connected-DthCPaHl.mjs} +1 -1
- package/dist/web-components/{Connected-DMXG3imZ.mjs → Connected-sYBn_9MK.mjs} +1 -1
- package/dist/web-components/{Contents-tCMXBYDK.mjs → Contents-AVPYYXht.mjs} +1 -1
- package/dist/web-components/{ControlMenu-D1zkB0qX.mjs → ControlMenu-BjJsWnuZ.mjs} +1 -1
- package/dist/web-components/ControlsFade-C-6WhSxB.mjs +1 -0
- package/dist/web-components/{CountMenu-Dnzb7lKo.mjs → CountMenu-Dx8D_RJZ.mjs} +1 -1
- package/dist/web-components/Cue-xuo5dgKE.mjs +1 -0
- package/dist/web-components/Document-BWdafeEi.mjs +1 -0
- package/dist/web-components/{DomLayers-BxPU05-D.mjs → DomLayers-DlRapZ1u.mjs} +1 -1
- package/dist/web-components/{Download-Bku9Vptk.mjs → Download-Ci_JUTVd.mjs} +1 -1
- package/dist/web-components/{EntryBodies-77vDudCb.mjs → EntryBodies-C0ICfS2R.mjs} +1 -1
- package/dist/web-components/{EntryThumbnail-BxQWKW6e.mjs → EntryThumbnail-DxHhfRo_.mjs} +1 -1
- package/dist/web-components/{FieldPill-nFGsaru9.mjs → FieldPill-CVfeeafm.mjs} +1 -1
- package/dist/web-components/{FrameAnimation-BvKiSXcm.mjs → FrameAnimation-AZpVvu0R.mjs} +1 -1
- package/dist/web-components/{Gallery-4Hd58afA.mjs → Gallery-C2PTJmvN.mjs} +1 -1
- package/dist/web-components/{HideToggle-TEhY4TS4.mjs → HideToggle-0nlIo-f8.mjs} +1 -1
- package/dist/web-components/{ImageControls-CZO7WoPb.mjs → ImageControls-tKVAMpaj.mjs} +1 -1
- package/dist/web-components/{Items-CudZ4Lnb.mjs → Items-Drd82_Jj.mjs} +1 -1
- package/dist/web-components/{Label-f07N5Fld.mjs → Label-BIjqJ-_T.mjs} +1 -1
- package/dist/web-components/{LanguageChoice-B5VM21DV.mjs → LanguageChoice-DkSc-n6g.mjs} +1 -1
- package/dist/web-components/LightboxView-Cuqx2H1m.mjs +1 -0
- package/dist/web-components/{ListEnd-M39M62Cl.mjs → ListEnd-pq-BgaDI.mjs} +1 -1
- package/dist/web-components/{Loaded-oGFyBuos.mjs → Loaded-CSO5NFhm.mjs} +1 -1
- package/dist/web-components/{LoadedCanvas-IvpSzPO6.mjs → LoadedCanvas-DK6xMmM1.mjs} +1 -1
- package/dist/web-components/LoadedMap-DmPH-LKY.mjs +1 -0
- package/dist/web-components/{Loading-YxuKrDAM.mjs → Loading-CoJLSRkv.mjs} +1 -1
- package/dist/web-components/{Map-Cw9j3gi3.mjs → Map-BEVtD52O.mjs} +1 -1
- package/dist/web-components/{MapView-3OxoCr5l.mjs → MapView-DHJcn9gW.mjs} +2 -2
- package/dist/web-components/{Markup-DW75Jx3j.mjs → Markup-Hm6bWOjm.mjs} +1 -1
- package/dist/web-components/{MediaBody-CLtd0bf0.mjs → MediaBody-BpgNtpKZ.mjs} +1 -1
- package/dist/web-components/{MediaBody-JnKnoIqY.mjs → MediaBody-Co23JjUJ.mjs} +1 -1
- package/dist/web-components/{NavDate-BCCOyycx.mjs → NavDate-CYNK0Qmp.mjs} +1 -1
- package/dist/web-components/{Navigator-Bx4zS0Yr.mjs → Navigator-DrYPepzN.mjs} +1 -1
- package/dist/web-components/{Pager-B9GvQ64b.mjs → Pager-CN4lHURv.mjs} +1 -1
- package/dist/web-components/{PagerLayout-BF33VZL_.mjs → PagerLayout-DeqnSQcF.mjs} +1 -1
- package/dist/web-components/Panel-CFYUlXup.mjs +1 -0
- package/dist/web-components/PanelPart-CpUIRbxr.mjs +1 -0
- package/dist/web-components/{PanelToggle-bPcIULGZ.mjs → PanelToggle-9ud55NNI.mjs} +1 -1
- package/dist/web-components/{PartOfManifest-HLg-r00O.mjs → PartOfManifest-KUHUq-6q.mjs} +1 -1
- package/dist/web-components/{Pending-BxGjjnqq.mjs → Pending-mcmdyZPA.mjs} +1 -1
- package/dist/web-components/{PlaceBox-D-Zhe9-U.mjs → PlaceBox-DX4ZLDat.mjs} +1 -1
- package/dist/web-components/{Placeholder-DzY5hcbk.mjs → Placeholder-0hE8q-SY.mjs} +1 -1
- package/dist/web-components/{Position-TYnzcm8e.mjs → Position-DO5qg5Sp.mjs} +1 -1
- package/dist/web-components/{Primitives-C6VJXxZD.mjs → Primitives-c9sIz0oQ.mjs} +1 -1
- package/dist/web-components/{Provider-DyB0wpeO.mjs → Provider-a3xY016W.mjs} +1 -1
- package/dist/web-components/{ReadMore-De_0T7lc.mjs → ReadMore-D_WmmKEP.mjs} +1 -1
- package/dist/web-components/{Root-Bt3NNBFb.mjs → Root-CU1o0wje.mjs} +1 -1
- package/dist/web-components/Scene-CboEeptc.mjs +1 -0
- package/dist/web-components/SceneView-hcc78jQT.mjs +1 -0
- package/dist/web-components/{Search-DgT8OPsK.mjs → Search-BgxEW1UT.mjs} +1 -1
- package/dist/web-components/{Sections-d1acn7qm.mjs → Sections-DZVrhoAC.mjs} +1 -1
- package/dist/web-components/{StandaloneItems-DUb4YKCB.mjs → StandaloneItems-6cSw7nbF.mjs} +1 -1
- package/dist/web-components/{Status-CcU3u6P4.mjs → Status-DHTzuTkh.mjs} +1 -1
- package/dist/web-components/{Steps-nlSCzbDQ.mjs → Steps-Dkpy9KiJ.mjs} +1 -1
- package/dist/web-components/{TargetItems-BDJM3Ar-.mjs → TargetItems-CyOI9_Z4.mjs} +1 -1
- package/dist/web-components/Timeline-B9tD3Rar.mjs +1 -0
- package/dist/web-components/{Tip-OCB88zwY.mjs → Tip-nJSTYquc.mjs} +1 -1
- package/dist/web-components/{Transcript-bSA3cx_K.mjs → Transcript-WvFFAJQM.mjs} +1 -1
- package/dist/web-components/{Transport-DjOYI-fR.mjs → Transport-FxLp_bdW.mjs} +1 -1
- package/dist/web-components/Transport-VUxSEIQO.mjs +1 -0
- package/dist/web-components/{annotation-collection-D8emkElk.mjs → annotation-collection-BkC3nBPA.mjs} +1 -1
- package/dist/web-components/{annotation-name-DbWjhgra.mjs → annotation-name-Du2KAWoD.mjs} +1 -1
- package/dist/web-components/{annotations-content-Bg6aVAGC.mjs → annotations-content-CEzAS-P2.mjs} +1 -1
- package/dist/web-components/{body-Ct8dmQdW.mjs → body-DPlfbLt3.mjs} +1 -1
- package/dist/web-components/{canvas-goEZLqEd.mjs → canvas-BUwBftJW.mjs} +1 -1
- package/dist/web-components/{cloverEngine-Df7cMwOP.mjs → cloverEngine-UNw5K4Xg.mjs} +1 -1
- package/dist/web-components/{content-state-reader-CNmBpG1L.mjs → content-state-reader-GgQF2MvJ.mjs} +1 -1
- package/dist/web-components/{controls-BZr16sYQ.mjs → controls-CC9G5LxK.mjs} +1 -1
- package/dist/web-components/custom-elements.json +31 -1
- package/dist/web-components/{downloads-EjJ6Hpip.mjs → downloads-CmAYeEIz.mjs} +1 -1
- package/dist/web-components/{dragToClose-X9NbZOhA.mjs → dragToClose-DK-eM097.mjs} +1 -1
- package/dist/web-components/{engine-DMoc0tff.mjs → engine-Dok0z8WP.mjs} +1 -1
- package/dist/web-components/{engines-BmB81VXR.mjs → engines-BD2IfwQF.mjs} +1 -1
- package/dist/web-components/{fetchManifest-CwQC6cCh.mjs → fetchManifest-tQXcfFiz.mjs} +1 -1
- package/dist/web-components/{fromManifest-DrAmY1lB.mjs → fromManifest-BwQdeAuL.mjs} +1 -1
- package/dist/web-components/{glyphs-BFK_hvJJ.mjs → glyphs-dp_HK3Ja.mjs} +1 -1
- package/dist/web-components/{hooks-BhtNDs_1.mjs → hooks-C4dJ5K_D.mjs} +1 -1
- package/dist/web-components/{image-layers-D2nQC4R-.mjs → image-layers-xcBsiad9.mjs} +1 -1
- package/dist/web-components/{imageService-iFElsopt.mjs → imageService-4sFnmAFX.mjs} +1 -1
- package/dist/web-components/index-DspT4wUm.mjs +1 -0
- package/dist/web-components/index.d.mts +1 -1
- package/dist/web-components/index.mjs +1 -1
- package/dist/web-components/{items-BnEnc5ot.mjs → items-BUmOy2QY.mjs} +1 -1
- package/dist/web-components/items-CWMI53aN.mjs +1 -0
- package/dist/web-components/label-BGjL7I4b.mjs +1 -0
- package/dist/web-components/{layout-Djwu8f4R.mjs → layout-B29v2RKK.mjs} +1 -1
- package/dist/web-components/{link-0lUlTZlw.mjs → link-Ct5PpHEY.mjs} +1 -1
- package/dist/web-components/logo-BFstM-0a.mjs +1 -0
- package/dist/web-components/{models-BF2pqufA.mjs → models-BXcT4ijX.mjs} +1 -1
- package/dist/web-components/{nodes-ChQRLDGU.mjs → nodes-BleXuYE6.mjs} +1 -1
- package/dist/web-components/{overlayImage-MKrcgDep.mjs → overlayImage-BJtfot4Y.mjs} +1 -1
- package/dist/web-components/{panel-C13V6w6E.mjs → panel-BxxV_JkD.mjs} +1 -1
- package/dist/web-components/part-D4gjnYmT.mjs +1 -0
- package/dist/web-components/{playerSurface-DG1XipTq.mjs → playerSurface-BXNLaFk0.mjs} +1 -1
- package/dist/web-components/{pointer-YQppt0at.mjs → pointer-CJELU3gI.mjs} +1 -1
- package/dist/web-components/{provider-DiUkZYiW.mjs → provider-CPp0Sgr_.mjs} +1 -1
- package/dist/web-components/{range-regions-CqGjyM76.mjs → range-regions-DAaOu0IS.mjs} +1 -1
- package/dist/web-components/{read-more-D8RJYdtQ.mjs → read-more-lcqGslUd.mjs} +1 -1
- package/dist/web-components/{readingLanguages-BWOLZK2k.mjs → readingLanguages-FyVsSWJ8.mjs} +1 -1
- package/dist/web-components/{rendererSurface-BkbGDL_Z.mjs → rendererSurface-nh6-EfuZ.mjs} +2 -2
- package/dist/web-components/{renderers-LtRX5pT0.mjs → renderers-BFS7hFVU.mjs} +1 -1
- package/dist/web-components/{resource-Cfydiy4m.mjs → resource-Bufu7lAr.mjs} +1 -1
- package/dist/web-components/{save-file-dZyOpXgY.mjs → save-file-CoknKOPz.mjs} +1 -1
- package/dist/web-components/{search-BfUZJM3a.mjs → search-5ocrsYmT.mjs} +1 -1
- package/dist/web-components/{shared-DkY2a89G.mjs → shared-DFAX0n3B.mjs} +1 -1
- package/dist/web-components/{show-link-DgLJzG7k.mjs → show-link-DBaJj4s_.mjs} +1 -1
- package/dist/web-components/{sizedImage-NHzhcBYk.mjs → sizedImage-jnOGcIIZ.mjs} +1 -1
- package/dist/web-components/{split-CuFiKjin.mjs → split-P6J0qqf5.mjs} +1 -1
- package/dist/web-components/{status-C3etlkhY.mjs → status-honoOMNx.mjs} +1 -1
- package/dist/web-components/styles-BwkYiCLC.mjs +1 -0
- package/dist/web-components/three.mjs +1 -1
- package/dist/web-components/{thumbnail-DecrVnpj.mjs → thumbnail-EbURh-UM.mjs} +1 -1
- package/dist/web-components/{tip-D5YgaIWW.mjs → tip-BhNI83aT.mjs} +1 -1
- package/dist/web-components/{toggle-CZGB65VZ.mjs → toggle-CJKdi5KH.mjs} +1 -1
- package/dist/web-components/{useContainerName-hKQjEt7a.mjs → useContainerName-_48Cdi0m.mjs} +1 -1
- package/dist/web-components/useControlsVisibility-CieBxGnK.mjs +1 -0
- package/dist/web-components/useLazyPanelPane-Da3kJiOt.mjs +1 -0
- package/dist/web-components/{useNearViewport-CDbHQUBk.mjs → useNearViewport-B34ebmIW.mjs} +1 -1
- package/dist/web-components/{useScrollTrack-D9l_P3_B.mjs → useScrollTrack-DgRGFeP5.mjs} +1 -1
- package/dist/web-components/viewer/{AnnotationItems-DtsnDXPM.mjs → AnnotationItems-BNA_92Dv.mjs} +1 -1
- package/dist/web-components/viewer/{AnnotationMenu-C-Mz6CCn.mjs → AnnotationMenu-BIQYVR4N.mjs} +1 -1
- package/dist/web-components/viewer/{AnnotationState-5pim5K72.mjs → AnnotationState-BbwQqA1U.mjs} +1 -1
- package/dist/web-components/viewer/{Annotations-Cqn1TkzD.mjs → Annotations-CZzOZAFP.mjs} +1 -1
- package/dist/web-components/viewer/{Annotations-CxwN9FkB.mjs → Annotations-P4XzAlNc.mjs} +1 -1
- package/dist/web-components/viewer/{Canvas2DBackend-C-ZMSCak.mjs → Canvas2DBackend-DFfCzyjL.mjs} +1 -1
- package/dist/web-components/viewer/{CaptionDetails-CRD-gSZP.mjs → CaptionDetails-DPtE-RQQ.mjs} +1 -1
- package/dist/web-components/viewer/{ChaptersMenu-Brcq3yJv.mjs → ChaptersMenu-D6Jmujag.mjs} +1 -1
- package/dist/web-components/viewer/{ChoiceMenu-ByGzQQx1.mjs → ChoiceMenu-GkqyTQRQ.mjs} +1 -1
- package/dist/web-components/viewer/{Collection-m0GCcsfQ.mjs → Collection-DjY_6qa6.mjs} +1 -1
- package/dist/web-components/viewer/{Connected-Dvx7wtot.mjs → Connected-D5T-mtiy.mjs} +1 -1
- package/dist/web-components/viewer/Connected-DIOuI3Mv.mjs +1 -0
- package/dist/web-components/viewer/{Contents-CwDpfiJY.mjs → Contents-DV-VxXuf.mjs} +1 -1
- package/dist/web-components/viewer/{ControlMenu-TcO85hDf.mjs → ControlMenu-BsEpff6N.mjs} +1 -1
- package/dist/web-components/viewer/ControlsFade-BowtN96W.mjs +1 -0
- package/dist/web-components/viewer/{CountMenu-0-ie8kIZ.mjs → CountMenu-DCmA6HdK.mjs} +1 -1
- package/dist/web-components/viewer/Cue-BjbVzrpl.mjs +1 -0
- package/dist/web-components/viewer/Document-4ZQd3W3o.mjs +1 -0
- package/dist/web-components/viewer/{DomLayers-hc0qARQc.mjs → DomLayers-BCwCxPDU.mjs} +1 -1
- package/dist/web-components/viewer/{Download-MO-1Rik4.mjs → Download-CL4IClAD.mjs} +1 -1
- package/dist/web-components/viewer/{EntryBodies-g-OEwEsk.mjs → EntryBodies-e40y47bl.mjs} +1 -1
- package/dist/web-components/viewer/{EntryThumbnail-DcIDYATi.mjs → EntryThumbnail-B_dP3w4o.mjs} +1 -1
- package/dist/web-components/viewer/{FieldPill-B9S21lxw.mjs → FieldPill-Hse1cDBE.mjs} +1 -1
- package/dist/web-components/viewer/{FrameAnimation-qI9cZPEs.mjs → FrameAnimation-CE218DCr.mjs} +1 -1
- package/dist/web-components/viewer/{Gallery-BOgUqfqw.mjs → Gallery-F2sVj4ph.mjs} +1 -1
- package/dist/web-components/viewer/{HideToggle-D8wH49mq.mjs → HideToggle-CYoqe_ez.mjs} +1 -1
- package/dist/web-components/viewer/{ImageControls-ZoEC9jWd.mjs → ImageControls-C2G4x2Es.mjs} +1 -1
- package/dist/web-components/viewer/{LanguageChoice-CRqsCBAp.mjs → LanguageChoice-BmO-322r.mjs} +1 -1
- package/dist/web-components/viewer/LightboxView-DKR8dXcg.mjs +1 -0
- package/dist/web-components/viewer/{ListEnd-D9Obxie4.mjs → ListEnd-DX1jsvJk.mjs} +1 -1
- package/dist/web-components/viewer/{MapView-DQSwUzd7.mjs → MapView-Df0wZjCh.mjs} +2 -2
- package/dist/web-components/viewer/{MediaBody-CIw2nTlj.mjs → MediaBody-CataNonO.mjs} +1 -1
- package/dist/web-components/viewer/{MediaBody-D5ff6xy-.mjs → MediaBody-SkIgrEMj.mjs} +1 -1
- package/dist/web-components/viewer/{NavDate-BnfDG57h.mjs → NavDate-BZgeaMG9.mjs} +1 -1
- package/dist/web-components/viewer/{Navigator-BNwjmkXY.mjs → Navigator-Co76p-1n.mjs} +1 -1
- package/dist/web-components/viewer/{PagerLayout-C8jraHqs.mjs → PagerLayout-tUkN1-FV.mjs} +1 -1
- package/dist/web-components/viewer/PanelPart-Cl4Sst60.mjs +1 -0
- package/dist/web-components/viewer/{PartOfManifest-DX7H0V4g.mjs → PartOfManifest-DXnbEPzS.mjs} +1 -1
- package/dist/web-components/viewer/{PlaceBox-CCWfzsNU.mjs → PlaceBox-xrJ4CGdN.mjs} +1 -1
- package/dist/web-components/viewer/{Placeholder-CsEkLhz7.mjs → Placeholder-B1AcizHL.mjs} +1 -1
- package/dist/web-components/viewer/{Search-CsdYzdq1.mjs → Search-DTg1cHZ3.mjs} +1 -1
- package/dist/web-components/viewer/{StandaloneItems-BfvBxbUm.mjs → StandaloneItems-BpBEQG8i.mjs} +1 -1
- package/dist/web-components/viewer/{Steps-BH8ZApS4.mjs → Steps-SpwMQdCL.mjs} +1 -1
- package/dist/web-components/viewer/{TargetItems-BebPFr-c.mjs → TargetItems-B6Icep5k.mjs} +1 -1
- package/dist/web-components/viewer/{Transcript-DXLv5WR9.mjs → Transcript-rTAhuXCF.mjs} +1 -1
- package/dist/web-components/viewer/{Transport-C-fh7Kx2.mjs → Transport-vKIDALE-.mjs} +1 -1
- package/dist/web-components/viewer/Transport-z_kdVisw.mjs +1 -0
- package/dist/web-components/viewer/{annotation-collection-Cjd8Dgyl.mjs → annotation-collection-B7pZiLVk.mjs} +1 -1
- package/dist/web-components/viewer/{annotation-name-CwmgQFia.mjs → annotation-name-BKj1O9lA.mjs} +1 -1
- package/dist/web-components/viewer/{annotations-content-BARXoAz-.mjs → annotations-content-9AtLlPNn.mjs} +1 -1
- package/dist/web-components/viewer/{cloverEngine-CumnJPKO.mjs → cloverEngine-jRrYLrWa.mjs} +1 -1
- package/dist/web-components/viewer/{content-state-reader-DuvyLThu.mjs → content-state-reader-CPvkju6Q.mjs} +1 -1
- package/dist/web-components/viewer/{dragToClose-CFCxhUxn.mjs → dragToClose-Co9kGk9q.mjs} +1 -1
- package/dist/web-components/viewer/{fetchManifest-qNB_KgxL.mjs → fetchManifest-D7N9WhhF.mjs} +1 -1
- package/dist/web-components/viewer/{host-GTHX2fPK.mjs → host-DMD9LE4H.mjs} +1 -1
- package/dist/web-components/viewer/{image-layers-DKOuaRTj.mjs → image-layers-x_shzPvu.mjs} +1 -1
- package/dist/web-components/viewer/index.mjs +1 -1
- package/dist/web-components/viewer/{link-BlaM0tCa.mjs → link-DikPGzNO.mjs} +1 -1
- package/dist/web-components/viewer/{overlayImage-RVpv69R5.mjs → overlayImage-33kKKB0T.mjs} +1 -1
- package/dist/web-components/viewer/{range-regions-CIZiAHOp.mjs → range-regions-TH6WWGTT.mjs} +1 -1
- package/dist/web-components/viewer/{renderers-Dw1klwlx.mjs → renderers-BxePmixF.mjs} +1 -1
- package/dist/web-components/viewer/{save-file-EvzaBEJN.mjs → save-file-QXKiPlST.mjs} +1 -1
- package/dist/web-components/viewer/{search-x1QL_bth.mjs → search-B_NePyas.mjs} +1 -1
- package/dist/web-components/viewer/styles-Bedyz7_l.mjs +1 -0
- package/dist/web-components/viewer/useControlsVisibility-Cu-jTDzs.mjs +1 -0
- package/dist/web-components/viewer/useLazyPanelPane-BhLtRixT.mjs +1 -0
- package/dist/web-components/viewer/viewer-nfPJPwwt.mjs +29 -0
- package/dist/web-components/viewer/{vtt-C2G89SWH.mjs → vtt-CUn4h5JB.mjs} +1 -1
- package/dist/web-components/viewer-DN2Mo3vc.mjs +1 -0
- package/dist/web-components/{vtt-Dd0c7psH.mjs → vtt-C5M5WPSG.mjs} +1 -1
- package/package.json +1 -1
- package/dist/web-components/ControlsFade-BNXVTL_Q.mjs +0 -1
- package/dist/web-components/Cue-CUGmPS3k.mjs +0 -1
- package/dist/web-components/Document-D-8nalCX.mjs +0 -1
- package/dist/web-components/LightboxView-C4OASmkg.mjs +0 -1
- package/dist/web-components/LoadedMap-WATGNLxl.mjs +0 -1
- package/dist/web-components/Panel-BvDpCn6K.mjs +0 -1
- package/dist/web-components/PanelPart-Bd4lSUrP.mjs +0 -1
- package/dist/web-components/Scene-DrOM9YlD.mjs +0 -1
- package/dist/web-components/SceneView-DA7Yg20p.mjs +0 -1
- package/dist/web-components/Timeline-BfdN3lIv.mjs +0 -1
- package/dist/web-components/Transport-DaIhfZqC.mjs +0 -1
- package/dist/web-components/index-FJEpXukG.mjs +0 -1
- package/dist/web-components/items-BPPrqbeh.mjs +0 -1
- package/dist/web-components/label-DauFa5sg.mjs +0 -1
- package/dist/web-components/logo-DWPxaZaG.mjs +0 -1
- package/dist/web-components/part-CekFWrtz.mjs +0 -1
- package/dist/web-components/styles-DkkVOSUQ.mjs +0 -1
- package/dist/web-components/useControlsVisibility-DPg8uAkW.mjs +0 -1
- package/dist/web-components/useLazyPanelPane-eby-OI1V.mjs +0 -1
- package/dist/web-components/viewer/Connected-Bmc_CdUD.mjs +0 -1
- package/dist/web-components/viewer/ControlsFade-BoZ4ABAE.mjs +0 -1
- package/dist/web-components/viewer/Cue-DxmAS9Gx.mjs +0 -1
- package/dist/web-components/viewer/Document-BsryuYJ1.mjs +0 -1
- package/dist/web-components/viewer/LightboxView-BB-GcbYr.mjs +0 -1
- package/dist/web-components/viewer/PanelPart-YNbBI9SQ.mjs +0 -1
- package/dist/web-components/viewer/Transport-CY6BWfMi.mjs +0 -1
- package/dist/web-components/viewer/styles-I7_LWFGj.mjs +0 -1
- package/dist/web-components/viewer/useControlsVisibility-C_SQHIVR.mjs +0 -1
- package/dist/web-components/viewer/useLazyPanelPane-UuGDJrf_.mjs +0 -1
- package/dist/web-components/viewer/viewer-DJrQuNs1.mjs +0 -29
- package/dist/web-components/viewer-Br44EEba.mjs +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useState, useEffect } from "react";
|
|
3
3
|
import { isDirect, TAP_MS, isHovering, TAP_SLOP, isInteractive, DOUBLE_TAP_SLOP } from "../../lib/pointer.mjs";
|
|
4
|
-
const DEFAULT_HIDE_DELAY =
|
|
4
|
+
const DEFAULT_HIDE_DELAY = 3e3;
|
|
5
5
|
const LEAVE_DELAY = 1e3;
|
|
6
6
|
const PRESS_FOCUS_MS = 1e3;
|
|
7
7
|
const FADING_CONTROLS = [
|
|
@@ -20,10 +20,12 @@ function useControlsVisibility(element, hideDelay = DEFAULT_HIDE_DELAY, picture)
|
|
|
20
20
|
let focusHeld = false;
|
|
21
21
|
let penHovers = false;
|
|
22
22
|
let pressedAt = -Infinity;
|
|
23
|
+
let pressedInside = false;
|
|
23
24
|
let held = null;
|
|
24
25
|
let swallowClick = false;
|
|
25
26
|
let clickTimer;
|
|
26
27
|
let press = null;
|
|
28
|
+
let using = null;
|
|
27
29
|
let tap = null;
|
|
28
30
|
const set = (value) => {
|
|
29
31
|
shown = value;
|
|
@@ -40,6 +42,11 @@ function useControlsVisibility(element, hideDelay = DEFAULT_HIDE_DELAY, picture)
|
|
|
40
42
|
if (tap) clearTimeout(tap.timer);
|
|
41
43
|
tap = null;
|
|
42
44
|
};
|
|
45
|
+
const touchShow = () => {
|
|
46
|
+
set(true);
|
|
47
|
+
stop();
|
|
48
|
+
if (Number.isFinite(hideDelay)) timer = setTimeout(hide, hideDelay);
|
|
49
|
+
};
|
|
43
50
|
const direct = (event) => isDirect(event.pointerType, penHovers);
|
|
44
51
|
const show = (event) => {
|
|
45
52
|
keyboard = event.type === "keydown";
|
|
@@ -59,7 +66,10 @@ function useControlsVisibility(element, hideDelay = DEFAULT_HIDE_DELAY, picture)
|
|
|
59
66
|
...at,
|
|
60
67
|
timer: setTimeout(() => {
|
|
61
68
|
tap = null;
|
|
62
|
-
|
|
69
|
+
if (at.onPicture && shown) {
|
|
70
|
+
stop();
|
|
71
|
+
set(false);
|
|
72
|
+
} else touchShow();
|
|
63
73
|
}, TAP_MS)
|
|
64
74
|
};
|
|
65
75
|
};
|
|
@@ -70,10 +80,21 @@ function useControlsVisibility(element, hideDelay = DEFAULT_HIDE_DELAY, picture)
|
|
|
70
80
|
press = null;
|
|
71
81
|
}
|
|
72
82
|
};
|
|
83
|
+
const onPicture = (target) => {
|
|
84
|
+
const pictureElement = picture == null ? void 0 : picture.current;
|
|
85
|
+
return Boolean(
|
|
86
|
+
pictureElement && target instanceof Node && pictureElement.contains(target)
|
|
87
|
+
);
|
|
88
|
+
};
|
|
73
89
|
const down = (event) => {
|
|
74
90
|
if (!direct(event)) return show(event);
|
|
75
91
|
keyboard = false;
|
|
76
92
|
stop();
|
|
93
|
+
using = isInteractive(event.target, element) && !onPicture(event.target) ? {
|
|
94
|
+
id: event.pointerId,
|
|
95
|
+
inSight: shown || getComputedStyle(element).getPropertyValue("--clover-controls-shown").trim() === "1"
|
|
96
|
+
} : null;
|
|
97
|
+
if (using) forgetTap();
|
|
77
98
|
press = event.isPrimary === false ? null : {
|
|
78
99
|
id: event.pointerId,
|
|
79
100
|
x: event.clientX,
|
|
@@ -82,26 +103,25 @@ function useControlsVisibility(element, hideDelay = DEFAULT_HIDE_DELAY, picture)
|
|
|
82
103
|
};
|
|
83
104
|
};
|
|
84
105
|
const up = (event) => {
|
|
85
|
-
if (!direct(event)
|
|
106
|
+
if (!direct(event)) return;
|
|
107
|
+
if ((using == null ? void 0 : using.id) === event.pointerId) {
|
|
108
|
+
if (using.inSight) touchShow();
|
|
109
|
+
using = null;
|
|
110
|
+
} else if (shown && event.isPrimary !== false) touchShow();
|
|
111
|
+
if ((press == null ? void 0 : press.id) !== event.pointerId) return;
|
|
86
112
|
const { target } = press;
|
|
87
113
|
press = null;
|
|
88
114
|
if (event.type !== "pointerup") return;
|
|
89
115
|
if (isInteractive(target, element)) return;
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
pictureElement && target instanceof Node && pictureElement.contains(target)
|
|
93
|
-
);
|
|
94
|
-
if (onPicture && (tap == null ? void 0 : tap.onPicture) && Math.hypot(event.clientX - tap.x, event.clientY - tap.y) < DOUBLE_TAP_SLOP) {
|
|
116
|
+
const tapped = onPicture(target);
|
|
117
|
+
if (tapped && (tap == null ? void 0 : tap.onPicture) && Math.hypot(event.clientX - tap.x, event.clientY - tap.y) < DOUBLE_TAP_SLOP) {
|
|
95
118
|
forgetTap();
|
|
96
119
|
return;
|
|
97
120
|
}
|
|
98
|
-
later({ x: event.clientX, y: event.clientY, onPicture });
|
|
121
|
+
later({ x: event.clientX, y: event.clientY, onPicture: tapped });
|
|
99
122
|
};
|
|
100
123
|
const underFadedControls = (event) => {
|
|
101
|
-
|
|
102
|
-
const target = event.target;
|
|
103
|
-
if (!pictureElement || !target || !pictureElement.contains(target))
|
|
104
|
-
return false;
|
|
124
|
+
if (!onPicture(event.target)) return false;
|
|
105
125
|
return Array.from(element.querySelectorAll(FADING_CONTROLS)).some(
|
|
106
126
|
(piece) => {
|
|
107
127
|
const box = piece.getBoundingClientRect();
|
|
@@ -144,6 +164,7 @@ function useControlsVisibility(element, hideDelay = DEFAULT_HIDE_DELAY, picture)
|
|
|
144
164
|
};
|
|
145
165
|
const pressed = (event) => {
|
|
146
166
|
pressedAt = Date.now();
|
|
167
|
+
pressedInside = element.contains(event.target);
|
|
147
168
|
if (event.type === "pointerdown") focusHeld = false;
|
|
148
169
|
};
|
|
149
170
|
const focus = () => {
|
|
@@ -159,6 +180,7 @@ function useControlsVisibility(element, hideDelay = DEFAULT_HIDE_DELAY, picture)
|
|
|
159
180
|
const blur = (event) => {
|
|
160
181
|
if (element.contains(event.relatedTarget)) return;
|
|
161
182
|
focusHeld = false;
|
|
183
|
+
if (pressedInside && Date.now() - pressedAt < PRESS_FOCUS_MS) return;
|
|
162
184
|
if (shown || keyboard) linger();
|
|
163
185
|
};
|
|
164
186
|
page.addEventListener("pointerdown", pressed, true);
|
|
@@ -6,12 +6,10 @@ import { AboutActions } from "./AboutActions.mjs";
|
|
|
6
6
|
import { InPanelContext } from "./ReadingLanguages.mjs";
|
|
7
7
|
import { Tip } from "../../ui/Tip.mjs";
|
|
8
8
|
import { Close } from "../Body/glyphs.mjs";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { partOfCollection, selectVisibleCanvases } from "../../core/selectors.mjs";
|
|
14
|
-
import { selectListedSets } from "../../core/annotation-sets.mjs";
|
|
9
|
+
import { SEARCH_SET_ID } from "../../core/search-service.mjs";
|
|
10
|
+
import { usePanelSections } from "./sections.mjs";
|
|
11
|
+
import { langWithin } from "../../i18n/config.mjs";
|
|
12
|
+
import { languageToRead } from "../../i18n/languages.mjs";
|
|
15
13
|
import { useCloverTranslation } from "../../i18n/useCloverTranslation.mjs";
|
|
16
14
|
import { join } from "../../lib/classnames.mjs";
|
|
17
15
|
import { useClover, useCloverSelector } from "../../react/context.mjs";
|
|
@@ -54,6 +52,8 @@ const Panel = forwardRef(function Panel2({
|
|
|
54
52
|
as: Tag = "aside",
|
|
55
53
|
download = true,
|
|
56
54
|
languages = true,
|
|
55
|
+
sections,
|
|
56
|
+
labels,
|
|
57
57
|
className,
|
|
58
58
|
children,
|
|
59
59
|
onKeyDown,
|
|
@@ -62,7 +62,7 @@ const Panel = forwardRef(function Panel2({
|
|
|
62
62
|
var _a;
|
|
63
63
|
const { clover } = useClover("Panel");
|
|
64
64
|
const element = useRef(null);
|
|
65
|
-
const { t, langOf } = useCloverTranslation();
|
|
65
|
+
const { t, langOf, hostLanguage, i18n } = useCloverTranslation();
|
|
66
66
|
const name = useContainerName(
|
|
67
67
|
t("informationPanelTabs"),
|
|
68
68
|
langOf("informationPanelTabs"),
|
|
@@ -72,38 +72,18 @@ const Panel = forwardRef(function Panel2({
|
|
|
72
72
|
const lang = langOf(key);
|
|
73
73
|
return lang ? /* @__PURE__ */ jsx("span", { ...languageProps(lang), children: t(key) }) : t(key);
|
|
74
74
|
};
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
);
|
|
86
|
-
const
|
|
87
|
-
(state) => tableOfContents(state.manifest).length > 0
|
|
88
|
-
);
|
|
89
|
-
const hasSearch = useCloverSelector(
|
|
90
|
-
(state) => Boolean(searchServiceOf(state.manifest))
|
|
91
|
-
);
|
|
92
|
-
const hasMap = useCloverSelector(
|
|
93
|
-
(state) => hasMapData(state.manifest, state.collection)
|
|
94
|
-
);
|
|
95
|
-
const hasTargets = useCloverSelector(
|
|
96
|
-
(state) => {
|
|
97
|
-
var _a2;
|
|
98
|
-
return (((_a2 = state.targets) == null ? void 0 : _a2.items.length) ?? 0) > 1;
|
|
99
|
-
}
|
|
100
|
-
);
|
|
101
|
-
const hasCollection = useCloverSelector(
|
|
102
|
-
(state) => {
|
|
103
|
-
var _a2, _b;
|
|
104
|
-
return (((_b = (_a2 = state.collection) == null ? void 0 : _a2.items) == null ? void 0 : _b.length) ?? 0) > 0 || Boolean(partOfCollection(state.manifest));
|
|
105
|
-
}
|
|
106
|
-
);
|
|
75
|
+
const sectionLabel = (section, key) => {
|
|
76
|
+
const given2 = labels == null ? void 0 : labels[section];
|
|
77
|
+
if (given2 === void 0) return tabLabel(key);
|
|
78
|
+
if (typeof given2 === "string") return given2;
|
|
79
|
+
const tags = Object.keys(given2);
|
|
80
|
+
const tag = languageToRead(tags, i18n.language);
|
|
81
|
+
if (!tag) return tabLabel(key);
|
|
82
|
+
const lang = langWithin(tag, hostLanguage);
|
|
83
|
+
return lang ? /* @__PURE__ */ jsx("span", { ...languageProps(lang), children: given2[tag] }) : given2[tag];
|
|
84
|
+
};
|
|
85
|
+
const offered = usePanelSections(sections);
|
|
86
|
+
const has = (section) => offered.includes(section);
|
|
107
87
|
const given = React.Children.toArray(children).filter(
|
|
108
88
|
(child) => React.isValidElement(child) && child.type === Tab
|
|
109
89
|
);
|
|
@@ -115,62 +95,70 @@ const Panel = forwardRef(function Panel2({
|
|
|
115
95
|
content: props.children,
|
|
116
96
|
...props.value === "about" && { actions: aboutActions }
|
|
117
97
|
})) : [
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
98
|
+
...has("about") ? [
|
|
99
|
+
{
|
|
100
|
+
value: "about",
|
|
101
|
+
label: sectionLabel("about", "informationPanelTabsAbout"),
|
|
102
|
+
content: /* @__PURE__ */ jsx(About, { headingLevel: inner, download }),
|
|
103
|
+
actions: aboutActions
|
|
104
|
+
}
|
|
105
|
+
] : [],
|
|
106
|
+
...has("targets") ? [
|
|
125
107
|
{
|
|
126
108
|
value: "targets",
|
|
127
|
-
label:
|
|
109
|
+
label: sectionLabel("targets", "informationPanelTabsTargets"),
|
|
128
110
|
content: later(/* @__PURE__ */ jsx(Targets, { headingLevel: inner }))
|
|
129
111
|
}
|
|
130
112
|
] : [],
|
|
131
|
-
...
|
|
113
|
+
...has("collection") ? [
|
|
132
114
|
{
|
|
133
115
|
value: "collection",
|
|
134
|
-
label:
|
|
116
|
+
label: sectionLabel(
|
|
117
|
+
"collection",
|
|
118
|
+
"informationPanelTabsCollection"
|
|
119
|
+
),
|
|
135
120
|
content: later(/* @__PURE__ */ jsx(Collection, { headingLevel: inner }))
|
|
136
121
|
}
|
|
137
122
|
] : [],
|
|
138
|
-
...
|
|
123
|
+
...has("contents") ? [
|
|
139
124
|
{
|
|
140
125
|
value: "contents",
|
|
141
|
-
label:
|
|
126
|
+
label: sectionLabel("contents", "informationPanelTabsContents"),
|
|
142
127
|
content: later(/* @__PURE__ */ jsx(Contents, {}))
|
|
143
128
|
}
|
|
144
129
|
] : [],
|
|
145
|
-
...
|
|
130
|
+
...has("search") ? [
|
|
146
131
|
{
|
|
147
132
|
value: "search",
|
|
148
|
-
label:
|
|
133
|
+
label: sectionLabel("search", "informationPanelTabsSearch"),
|
|
149
134
|
// Its field small and held as the hits scroll (Mat, 2026-10-26).
|
|
150
135
|
content: later(
|
|
151
136
|
/* @__PURE__ */ jsx(Search, { headingLevel: inner, sticky: true, size: "small" })
|
|
152
137
|
)
|
|
153
138
|
}
|
|
154
139
|
] : [],
|
|
155
|
-
...
|
|
140
|
+
...has("map") ? [
|
|
156
141
|
{
|
|
157
142
|
value: "map",
|
|
158
|
-
label:
|
|
143
|
+
label: sectionLabel("map", "informationPanelTabsMap"),
|
|
159
144
|
content: later(/* @__PURE__ */ jsx(RootMap, {}))
|
|
160
145
|
}
|
|
161
146
|
] : [],
|
|
162
|
-
...
|
|
147
|
+
...has("transcript") ? [
|
|
163
148
|
{
|
|
164
149
|
value: "transcript",
|
|
165
|
-
label:
|
|
150
|
+
label: sectionLabel("transcript", "transcriptLabel"),
|
|
166
151
|
// Its find field small and held as the cues scroll, as Search's.
|
|
167
152
|
content: later(/* @__PURE__ */ jsx(Transcript, { sticky: true, size: "small" }))
|
|
168
153
|
}
|
|
169
154
|
] : [],
|
|
170
|
-
...
|
|
155
|
+
...has("annotations") ? [
|
|
171
156
|
{
|
|
172
157
|
value: "annotations",
|
|
173
|
-
label:
|
|
158
|
+
label: sectionLabel(
|
|
159
|
+
"annotations",
|
|
160
|
+
"informationPanelTabsAnnotations"
|
|
161
|
+
),
|
|
174
162
|
// Every Canvas's, by Canvas, those in view kept in sight.
|
|
175
163
|
content: later(/* @__PURE__ */ jsx(Annotations, { headingLevel: inner }))
|
|
176
164
|
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { canvasTimedText, canvasTextTranscripts } from "../Canvas/layout.mjs";
|
|
3
|
+
import { hasMapData } from "../../core/geo-detect.mjs";
|
|
4
|
+
import { searchServiceOf } from "../../core/search-service.mjs";
|
|
5
|
+
import { tableOfContents } from "../../core/ranges.mjs";
|
|
6
|
+
import { selectVisibleCanvases, partOfCollection } from "../../core/selectors.mjs";
|
|
7
|
+
import { selectListedSets } from "../../core/annotation-sets.mjs";
|
|
8
|
+
import { useCloverSelector } from "../../react/context.mjs";
|
|
9
|
+
const PANEL_SECTIONS = [
|
|
10
|
+
"about",
|
|
11
|
+
"targets",
|
|
12
|
+
"collection",
|
|
13
|
+
"contents",
|
|
14
|
+
"search",
|
|
15
|
+
"map",
|
|
16
|
+
"transcript",
|
|
17
|
+
"annotations"
|
|
18
|
+
];
|
|
19
|
+
const HAS = {
|
|
20
|
+
// A content state's several targets (Cookbook 0540), listed as a Collection's members are.
|
|
21
|
+
targets: (state) => {
|
|
22
|
+
var _a;
|
|
23
|
+
return (((_a = state.targets) == null ? void 0 : _a.items.length) ?? 0) > 1;
|
|
24
|
+
},
|
|
25
|
+
// Reached through a Collection, or part of one: offered either way, fetched when opened.
|
|
26
|
+
collection: (state) => {
|
|
27
|
+
var _a, _b;
|
|
28
|
+
return (((_b = (_a = state.collection) == null ? void 0 : _a.items) == null ? void 0 : _b.length) ?? 0) > 0 || Boolean(partOfCollection(state.manifest));
|
|
29
|
+
},
|
|
30
|
+
contents: (state) => tableOfContents(state.manifest).length > 0,
|
|
31
|
+
search: (state) => Boolean(searchServiceOf(state.manifest)),
|
|
32
|
+
map: (state) => hasMapData(state.manifest, state.collection),
|
|
33
|
+
transcript: (state) => selectVisibleCanvases(
|
|
34
|
+
state.manifest,
|
|
35
|
+
state.canvasId
|
|
36
|
+
).some(
|
|
37
|
+
(canvas) => canvasTimedText(canvas).length > 0 || canvasTextTranscripts(canvas).length > 0
|
|
38
|
+
),
|
|
39
|
+
annotations: (state) => selectListedSets(state.manifest, state.addedSets).length > 0
|
|
40
|
+
};
|
|
41
|
+
const narrow = (data, sections) => {
|
|
42
|
+
const chosen = Array.isArray(sections) ? new Set(sections) : void 0;
|
|
43
|
+
return PANEL_SECTIONS.filter(
|
|
44
|
+
(section) => data[section] && (!chosen || chosen.has(section))
|
|
45
|
+
);
|
|
46
|
+
};
|
|
47
|
+
function usePanelSections(sections) {
|
|
48
|
+
const data = {
|
|
49
|
+
about: true,
|
|
50
|
+
targets: useCloverSelector(HAS.targets),
|
|
51
|
+
collection: useCloverSelector(HAS.collection),
|
|
52
|
+
contents: useCloverSelector(HAS.contents),
|
|
53
|
+
search: useCloverSelector(HAS.search),
|
|
54
|
+
map: useCloverSelector(HAS.map),
|
|
55
|
+
transcript: useCloverSelector(HAS.transcript),
|
|
56
|
+
annotations: useCloverSelector(HAS.annotations)
|
|
57
|
+
};
|
|
58
|
+
return narrow(data, sections);
|
|
59
|
+
}
|
|
60
|
+
export {
|
|
61
|
+
usePanelSections
|
|
62
|
+
};
|
package/dist/index.d.mts
CHANGED
|
@@ -989,9 +989,9 @@ export interface CloverCanvasOptions {
|
|
|
989
989
|
animationTime?: number;
|
|
990
990
|
/**
|
|
991
991
|
* Milliseconds the controls and navigator stay after a mouse (or a pen that hovers)
|
|
992
|
-
* stops moving, as the Player's `hideDelay`. Default
|
|
993
|
-
* shown. A
|
|
994
|
-
*
|
|
992
|
+
* stops moving, or a finger lifts, as the Player's `hideDelay`. Default 3000; `Infinity`
|
|
993
|
+
* keeps them once shown. A tap on the picture shows them, and another hides them. Focus
|
|
994
|
+
* that no press brought holds them, and so does a paused recording.
|
|
995
995
|
* A Timeline's: a Canvas's controls stay in sight, for now (Mat, 2026-11-01).
|
|
996
996
|
*/
|
|
997
997
|
hideDelay?: number;
|
|
@@ -1611,8 +1611,36 @@ export interface LogoProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement
|
|
|
1611
1611
|
* picture.
|
|
1612
1612
|
*/
|
|
1613
1613
|
export declare function Logo({ of, value, alt, className, ...rest }: LogoProps): React.JSX.Element | null;
|
|
1614
|
+
/**
|
|
1615
|
+
* A section `Panel` draws by itself, from what the Root's resource holds. `sections`
|
|
1616
|
+
* chooses among them; each still shows only where there is data for it.
|
|
1617
|
+
*/
|
|
1618
|
+
export type PanelSection = "about" | "targets" | "collection" | "contents" | "search" | "map" | "transcript" | "annotations";
|
|
1619
|
+
/**
|
|
1620
|
+
* The default sections a `Panel` in this Root would have, in its order: About, and each
|
|
1621
|
+
* other one the resource has data for, narrowed to `sections` where the page names the
|
|
1622
|
+
* ones it wants. None of them, and the panel draws nothing, so a layout of your own can
|
|
1623
|
+
* ask first and leave out the pane that would hold it:
|
|
1624
|
+
*
|
|
1625
|
+
* ```jsx
|
|
1626
|
+
* const sections = Clover.usePanelSections(["contents", "search"]);
|
|
1627
|
+
* return sections.length ? <Clover.Panel sections={sections} /> : null;
|
|
1628
|
+
* ```
|
|
1629
|
+
*
|
|
1630
|
+
* Asking costs nothing a `Panel` does not already cost: the same reads of the Root, one
|
|
1631
|
+
* for each section, so a change that moves none of them re-renders nothing.
|
|
1632
|
+
*/
|
|
1633
|
+
export declare function usePanelSections(sections?: readonly PanelSection[]): PanelSection[];
|
|
1614
1634
|
/** How the sections are laid out. */
|
|
1615
1635
|
export type SectionsLayout = "tabs" | "accordion";
|
|
1636
|
+
/**
|
|
1637
|
+
* What a page calls a section, in place of Clover's own word for it: its words, taken to
|
|
1638
|
+
* be in the page's language, or its words by language tag, one of which the tab carries
|
|
1639
|
+
* as its `lang` where it is not the page's (WCAG 3.1.2).
|
|
1640
|
+
*/
|
|
1641
|
+
export type PanelSectionLabel = string | Readonly<Record<string, string>>;
|
|
1642
|
+
/** A label for any of the default sections, by its value. */
|
|
1643
|
+
export type PanelSectionLabels = Partial<Record<PanelSection, PanelSectionLabel>>;
|
|
1616
1644
|
export interface TabProps {
|
|
1617
1645
|
/** Identifies the tab, for `value` / `defaultValue` on the panel. */
|
|
1618
1646
|
value: string;
|
|
@@ -1678,7 +1706,22 @@ export interface PanelProps extends Omit<React.HTMLAttributes<HTMLElement>, "def
|
|
|
1678
1706
|
*/
|
|
1679
1707
|
languages?: boolean;
|
|
1680
1708
|
/**
|
|
1681
|
-
*
|
|
1709
|
+
* Which of the default sections the panel may have, in Clover's own order: with
|
|
1710
|
+
* `["contents", "search"]` it has those two and no About. Each still shows only where
|
|
1711
|
+
* the resource has data for it, so a resource with none of them draws no panel at all.
|
|
1712
|
+
* `Tab` children win over it. Default: every section.
|
|
1713
|
+
*/
|
|
1714
|
+
sections?: readonly PanelSection[];
|
|
1715
|
+
/**
|
|
1716
|
+
* What a default section's tab or heading says, in place of Clover's own word for it:
|
|
1717
|
+
* `{ annotations: "Chapters" }`, or `{ annotations: { en: "Chapters", de: "Kapitel" } }`
|
|
1718
|
+
* to say it in several, read in the one Clover speaks and marked with its language
|
|
1719
|
+
* where that is not the page's (WCAG 3.1.2). A `Tab` of your own says it in `label`.
|
|
1720
|
+
*/
|
|
1721
|
+
labels?: PanelSectionLabels;
|
|
1722
|
+
/**
|
|
1723
|
+
* `Clover.Tab`s, the panel's sections whole, in their order: they win over `sections`.
|
|
1724
|
+
* Without any, the panel has the tabs Clover has data for: About,
|
|
1682
1725
|
* Contents when the Manifest has Ranges, Search when it has a Content Search service, a
|
|
1683
1726
|
* Map when it (or a Canvas or annotation) has navPlace or a georeference,
|
|
1684
1727
|
* a Transcript when the view's media has captions or a plain-text transcript, and
|
|
@@ -1698,6 +1741,14 @@ export interface PanelProps extends Omit<React.HTMLAttributes<HTMLElement>, "def
|
|
|
1698
1741
|
* <Clover.Tab value="notes" label="Notes"><MyNotes /></Clover.Tab>
|
|
1699
1742
|
* </Clover.Panel>
|
|
1700
1743
|
* ```
|
|
1744
|
+
*
|
|
1745
|
+
* To keep Clover's own sections but not all of them, name the ones you want in
|
|
1746
|
+
* `sections`: each still shows only where the resource has data for it, and a resource
|
|
1747
|
+
* with none of them has no panel.
|
|
1748
|
+
*
|
|
1749
|
+
* ```jsx
|
|
1750
|
+
* <Clover.Panel sections={["contents", "search", "transcript", "annotations"]} />
|
|
1751
|
+
* ```
|
|
1701
1752
|
*/
|
|
1702
1753
|
export declare const Panel: React.ForwardRefExoticComponent<PanelProps & React.RefAttributes<HTMLElement>>;
|
|
1703
1754
|
export interface AboutProps extends React.HTMLAttributes<HTMLElement> {
|
|
@@ -2085,7 +2136,7 @@ export interface SceneProps {
|
|
|
2085
2136
|
options?: {
|
|
2086
2137
|
/** Credentials and headers for the Scene and its models. Inside a `Root`, the Root's. */
|
|
2087
2138
|
request?: CloverRequest;
|
|
2088
|
-
/** Milliseconds the controls stay after a mouse stops
|
|
2139
|
+
/** Milliseconds the controls stay after a mouse stops or a finger lifts, as `Canvas`'s. */
|
|
2089
2140
|
hideDelay?: number;
|
|
2090
2141
|
};
|
|
2091
2142
|
/**
|
|
@@ -2541,6 +2592,19 @@ export type DefaultProps = Omit<RootProps, "children"> & {
|
|
|
2541
2592
|
* stacked boxes each opened by its heading, or `"tabs"`.
|
|
2542
2593
|
*/
|
|
2543
2594
|
panelLayout?: PanelLayout;
|
|
2595
|
+
/**
|
|
2596
|
+
* The panel's sections, from Clover's own: with
|
|
2597
|
+
* `["contents", "search", "transcript", "annotations"]` it has those four, each still
|
|
2598
|
+
* only where the resource has data for it, and no panel at all where it has none of
|
|
2599
|
+
* them. Default: every section.
|
|
2600
|
+
*/
|
|
2601
|
+
panelSections?: readonly PanelSection[];
|
|
2602
|
+
/**
|
|
2603
|
+
* What a panel section's tab or heading says, in place of Clover's own word for it:
|
|
2604
|
+
* `{ annotations: "Chapters" }`, or a word by language tag to say it in several (the
|
|
2605
|
+
* Panel's `labels`).
|
|
2606
|
+
*/
|
|
2607
|
+
panelLabels?: PanelSectionLabels;
|
|
2544
2608
|
/** The downloads, from a Download button beside the panel's About heading. Default `true`. */
|
|
2545
2609
|
download?: boolean;
|
|
2546
2610
|
/**
|
|
@@ -2574,7 +2638,7 @@ export type DefaultProps = Omit<RootProps, "children"> & {
|
|
|
2574
2638
|
*/
|
|
2575
2639
|
collapseControls?: "auto" | "always";
|
|
2576
2640
|
};
|
|
2577
|
-
declare function Default({ className, header, headingLevel, panel, defaultPanelOpen, panelLayout, download, languages, items, singleItem, storageKey, fill, collapseControls, ...root }: DefaultProps): React.JSX.Element;
|
|
2641
|
+
declare function Default({ className, header, headingLevel, panel, defaultPanelOpen, panelLayout, panelSections, panelLabels, download, languages, items, singleItem, storageKey, fill, collapseControls, ...root }: DefaultProps): React.JSX.Element;
|
|
2578
2642
|
/**
|
|
2579
2643
|
* A layout the Viewer draws: one from `@nulib/clover/templates`, or a component of your
|
|
2580
2644
|
* own that takes the `Clover.Root` props.
|
package/dist/index.mjs
CHANGED
|
@@ -11,6 +11,7 @@ import { Status } from "./components/Status/Status.mjs";
|
|
|
11
11
|
import { Homepage, Id, Metadata, PartOf, Rendering, RequiredStatement, Rights, SeeAlso, Summary, Thumbnail, Value } from "./components/Primitives/Primitives.mjs";
|
|
12
12
|
import { Logo, Provider } from "./components/Provider/Provider.mjs";
|
|
13
13
|
import { Panel, Tab } from "./components/Panel/Panel.mjs";
|
|
14
|
+
import { usePanelSections } from "./components/Panel/sections.mjs";
|
|
14
15
|
import { About } from "./components/Panel/About.mjs";
|
|
15
16
|
import { Annotations } from "./components/Annotations/Annotations.mjs";
|
|
16
17
|
import { Transcript } from "./components/Transcript/Transcript.mjs";
|
|
@@ -127,6 +128,7 @@ export {
|
|
|
127
128
|
useManifest,
|
|
128
129
|
useNavigation,
|
|
129
130
|
useOneOpen,
|
|
131
|
+
usePanelSections,
|
|
130
132
|
useProvider,
|
|
131
133
|
useSequence,
|
|
132
134
|
useStatus,
|
package/dist/lib/pointer.mjs
CHANGED
|
@@ -20,7 +20,7 @@ function isInteractive(target, bodyBox) {
|
|
|
20
20
|
var _a;
|
|
21
21
|
let node = target;
|
|
22
22
|
while (node && node !== bodyBox) {
|
|
23
|
-
if (node instanceof HTMLButtonElement || node instanceof HTMLAnchorElement || node instanceof HTMLInputElement || node instanceof HTMLSelectElement || ((_a = node.dataset) == null ? void 0 : _a.cloverCanvasInteractive) !== void 0) {
|
|
23
|
+
if (node instanceof HTMLButtonElement || node instanceof HTMLAnchorElement || node instanceof HTMLInputElement || node instanceof HTMLLabelElement || node instanceof HTMLSelectElement || ((_a = node.dataset) == null ? void 0 : _a.cloverCanvasInteractive) !== void 0) {
|
|
24
24
|
return true;
|
|
25
25
|
}
|
|
26
26
|
node = node.parentElement;
|