@nulib/clover 4.0.0-beta.1 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/dist/components/Annotations/Annotations.mjs +165 -204
- package/dist/components/Annotations/EntryBodies.mjs +28 -3
- package/dist/components/Annotations/languages.mjs +1 -17
- package/dist/components/Body/Body.mjs +16 -1
- package/dist/components/Body/BodyAlert.mjs +2 -1
- package/dist/components/Body/Caption.mjs +2 -1
- package/dist/components/Body/CaptionDetails.mjs +2 -1
- package/dist/components/Body/glyphs.mjs +24 -0
- package/dist/components/Canvas/AnnotationMenu.mjs +76 -60
- package/dist/components/Canvas/AnnotationState.mjs +9 -2
- package/dist/components/Canvas/Annotations.mjs +16 -7
- package/dist/components/Canvas/CanvasView.mjs +287 -42
- package/dist/components/Canvas/ChaptersMenu.mjs +105 -0
- package/dist/components/Canvas/ChoiceMenu.mjs +51 -31
- package/dist/components/Canvas/Connected.mjs +38 -4
- package/dist/components/Canvas/ControlMenu.mjs +29 -8
- package/dist/components/Canvas/Controls.mjs +227 -48
- package/dist/components/Canvas/ControlsFade.mjs +16 -0
- package/dist/components/Canvas/FrameAnimation.mjs +568 -167
- package/dist/components/Canvas/ImageControls.mjs +209 -0
- package/dist/components/Canvas/LoadedCanvas.mjs +5 -3
- package/dist/components/Canvas/PlaceBox.mjs +74 -0
- package/dist/components/Canvas/Placeholder.mjs +46 -13
- package/dist/components/Canvas/RowFits.mjs +85 -0
- package/dist/components/Canvas/fromManifest.mjs +2 -1
- package/dist/components/Canvas/layout.mjs +132 -32
- package/dist/components/Canvas/media/MediaBody.mjs +130 -45
- package/dist/components/Canvas/media/Player.mjs +9 -78
- package/dist/components/Canvas/media/Transport.mjs +102 -78
- package/dist/components/Canvas/media/TransportButton.mjs +2 -1
- package/dist/components/Canvas/media/placeMenu.mjs +19 -0
- package/dist/components/Canvas/media/seekGaps.mjs +43 -0
- package/dist/components/Canvas/media/sequence.mjs +96 -0
- package/dist/components/Canvas/media/useMediaElement.mjs +22 -3
- package/dist/components/Canvas/panClearOfControls.mjs +1 -1
- package/dist/components/Collection/Collection.mjs +3 -2
- package/dist/components/CollectionSelect/CollectionSelect.mjs +5 -2
- package/dist/components/Contents/Contents.mjs +163 -34
- package/dist/components/Download/Download.mjs +34 -38
- package/dist/components/Download/downloads.mjs +40 -0
- package/dist/components/Items/AnnotationItems.mjs +165 -0
- package/dist/components/Items/CountMenu.mjs +90 -0
- package/dist/components/Items/Item.mjs +27 -19
- package/dist/components/Items/Items.mjs +93 -45
- package/dist/components/Items/Pager.mjs +39 -79
- package/dist/components/Items/PagerLayout.mjs +43 -0
- package/dist/components/Items/Position.mjs +103 -0
- package/dist/components/Items/StandaloneItems.mjs +12 -4
- package/dist/components/Items/TargetItems.mjs +202 -0
- package/dist/components/Items/masonry.mjs +35 -0
- package/dist/components/Label/Label.mjs +2 -1
- package/dist/components/Map/MapView.mjs +367 -57
- package/dist/components/Panel/About.mjs +61 -15
- package/dist/components/Panel/AboutActions.mjs +117 -0
- package/dist/components/Panel/Panel.mjs +58 -18
- package/dist/components/Panel/PartOfManifest.mjs +4 -3
- package/dist/components/Panel/ReadingLanguages.mjs +20 -0
- package/dist/components/Primitives/Primitives.mjs +18 -3
- package/dist/components/Provider/Provider.mjs +19 -5
- package/dist/components/Root/Announcer.mjs +3 -2
- package/dist/components/Root/Root.mjs +5 -2
- package/dist/components/Root/useRootState.mjs +16 -51
- package/dist/components/Scene/SceneView.mjs +36 -8
- package/dist/components/Scene/cloverEngine.mjs +2 -1
- package/dist/components/Search/Search.mjs +3 -2
- package/dist/components/Split/Split.mjs +4 -1
- package/dist/components/Status/Status.mjs +10 -2
- package/dist/components/Timeline/playerSurface.mjs +4 -1
- package/dist/components/Transcript/Transcript.mjs +42 -23
- package/dist/core/annotation-bodies.mjs +25 -5
- package/dist/core/annotation-collection.mjs +3 -2
- package/dist/core/annotation-name.mjs +12 -9
- package/dist/core/annotation-sets.mjs +139 -10
- package/dist/core/annotations-content.mjs +8 -1
- package/dist/core/annotations.mjs +8 -1
- package/dist/core/choice-key.mjs +5 -0
- package/dist/core/clover.mjs +112 -24
- package/dist/core/content-state-reader.mjs +33 -2
- package/dist/core/content-state.mjs +5 -3
- package/dist/core/dates-format.mjs +30 -0
- package/dist/core/dates.mjs +19 -0
- package/dist/core/geo.mjs +46 -5
- package/dist/core/image-layers.mjs +96 -0
- package/dist/core/items.mjs +4 -2
- package/dist/core/language-choice.mjs +30 -0
- package/dist/core/link.mjs +15 -1
- package/dist/core/load.mjs +4 -2
- package/dist/core/pages.mjs +20 -1
- package/dist/core/presentation.mjs +6 -4
- package/dist/core/range-regions.mjs +70 -0
- package/dist/core/ranges.mjs +52 -18
- package/dist/core/region.mjs +7 -2
- package/dist/core/sanitize.mjs +86 -1
- package/dist/core/save-file.mjs +33 -0
- package/dist/core/selectors.mjs +12 -0
- package/dist/core/upgrade.mjs +23 -0
- package/dist/core/value.mjs +11 -23
- package/dist/hooks/useFullscreenExit.mjs +26 -0
- package/dist/hooks/useHighContrast.mjs +27 -0
- package/dist/i18n/autonym.mjs +11 -0
- package/dist/i18n/config.mjs +3 -8
- package/dist/{core → i18n}/direction.mjs +5 -1
- package/dist/i18n/languages.mjs +44 -0
- package/dist/i18n/locales/en.json.mjs +1 -1
- package/dist/i18n/locales/es.json.mjs +1 -1
- package/dist/i18n/locales/fi.json.mjs +1 -1
- package/dist/i18n/locales/fr.json.mjs +1 -1
- package/dist/i18n/locales/nb.json.mjs +1 -1
- package/dist/i18n/locales/nn.json.mjs +1 -1
- package/dist/i18n/locales/no.json.mjs +1 -1
- package/dist/i18n/locales/pt.json.mjs +1 -1
- package/dist/{ui → i18n}/useContainerName.mjs +5 -4
- package/dist/{react/language.mjs → i18n/useRootLanguage.mjs} +2 -2
- package/dist/index.d.mts +476 -78
- package/dist/index.mjs +6 -2
- package/dist/lib/fullscreen.mjs +6 -1
- package/dist/lib/gltf/load.mjs +26 -6
- package/dist/lib/renderer/CanvasRenderer.mjs +71 -36
- package/dist/lib/renderer/camera/Camera.mjs +1 -1
- package/dist/lib/renderer/math/affine.mjs +14 -0
- package/dist/lib/renderer/scene/planFrame.mjs +12 -12
- package/dist/lib/renderer/scene/regions.mjs +11 -1
- package/dist/lib/renderer/scene/sceneItem.mjs +72 -9
- package/dist/lib/time.mjs +10 -0
- package/dist/map/index.d.mts +26 -4
- package/dist/react/fetchManifest.mjs +19 -0
- package/dist/react/hooks.mjs +7 -1
- package/dist/react/readingLanguages.mjs +16 -0
- package/dist/react/useContentStateOutput.mjs +71 -0
- package/dist/react/usePagesReached.mjs +42 -0
- package/dist/styles.css +1 -1
- package/dist/templates/default/Default.mjs +122 -135
- package/dist/templates/document/Document.mjs +45 -64
- package/dist/templates/document/Sheets.mjs +13 -5
- package/dist/templates/gallery/Gallery.mjs +90 -18
- package/dist/templates/index.d.mts +318 -18
- package/dist/templates/shared/Lightbox.mjs +161 -69
- package/dist/templates/shared/LightboxView.mjs +118 -0
- package/dist/templates/shared/PanelPane.mjs +104 -0
- package/dist/templates/{document/DocumentPanel.mjs → shared/PanelPart.mjs} +2 -2
- package/dist/templates/shared/dragToClose.mjs +51 -8
- package/dist/templates/shared/givenAnnotations.mjs +13 -0
- package/dist/templates/shared/useDragToClose.mjs +6 -3
- package/dist/templates/shared/useLazyPanelPane.mjs +16 -0
- package/dist/templates/shared/useSlide.mjs +6 -0
- package/dist/templates.css +1 -1
- package/dist/ui/BodyUnloadable.mjs +34 -0
- package/dist/ui/Button.mjs +2 -1
- package/dist/ui/Chevron.mjs +34 -0
- package/dist/ui/ControlCluster.mjs +15 -14
- package/dist/ui/EntryThumbnail.mjs +60 -0
- package/dist/ui/ExitFullscreen.mjs +2 -1
- package/dist/ui/FieldPill.mjs +5 -4
- package/dist/ui/HideToggle.mjs +2 -1
- package/dist/ui/LanguageChoice.mjs +45 -0
- package/dist/ui/ListEnd.mjs +29 -0
- package/dist/ui/Markup.mjs +27 -8
- package/dist/ui/NavDate.mjs +29 -0
- package/dist/ui/ReadMore.mjs +3 -2
- package/dist/ui/Sections.mjs +22 -31
- package/dist/ui/Steps.mjs +4 -3
- package/dist/ui/Tip.mjs +9 -4
- package/dist/ui/mediaIcons.mjs +35 -8
- package/dist/ui/useScrollTrack.mjs +2 -1
- package/dist/web-components/About-DvyvVUK5.mjs +1 -0
- package/dist/web-components/AnnotationItems-BpRcSrOM.mjs +1 -0
- package/dist/web-components/AnnotationMenu-BDPec3iI.mjs +1 -0
- package/dist/web-components/AnnotationState-Chs_37Kk.mjs +1 -0
- package/dist/web-components/Annotations-6E-oD_wg.mjs +2 -0
- package/dist/web-components/Annotations-CLPEq7Ro.mjs +1 -0
- package/dist/web-components/Body-Ct61yxI7.mjs +1 -0
- package/dist/web-components/BodyAlert-C_Qh3Up_.mjs +1 -0
- package/dist/web-components/Button-L8ZMy5lY.mjs +1 -0
- package/dist/web-components/{Camera-cdCqKMup.mjs → Camera-BPyLzZjP.mjs} +1 -1
- package/dist/web-components/{Canvas2DBackend-CnLEHRs4.mjs → Canvas2DBackend-8wFavYdl.mjs} +1 -1
- package/dist/web-components/CanvasView-2Fj9nT06.mjs +2 -0
- package/dist/web-components/CaptionDetails-DuwS-grE.mjs +1 -0
- package/dist/web-components/ChaptersMenu-Bj2EqtVJ.mjs +1 -0
- package/dist/web-components/Chevron-Cyr_cc9X.mjs +1 -0
- package/dist/web-components/ChoiceMenu-ConzybVH.mjs +1 -0
- package/dist/web-components/Collection-CLayN8sv.mjs +1 -0
- package/dist/web-components/CollectionSelect-D2d8dGJ4.mjs +1 -0
- package/dist/web-components/Connected-CBQ6xyhr.mjs +1 -0
- package/dist/web-components/Connected-DMXG3imZ.mjs +1 -0
- package/dist/web-components/Connected-pyd0EBD3.mjs +1 -0
- package/dist/web-components/Contents-tCMXBYDK.mjs +1 -0
- package/dist/web-components/ControlMenu-D1zkB0qX.mjs +1 -0
- package/dist/web-components/ControlsFade-BNXVTL_Q.mjs +1 -0
- package/dist/web-components/CountMenu-Dnzb7lKo.mjs +1 -0
- package/dist/web-components/Cue-CUGmPS3k.mjs +1 -0
- package/dist/web-components/Document-D-8nalCX.mjs +1 -0
- package/dist/web-components/{DomLayers-BD4QPbl6.mjs → DomLayers-BxPU05-D.mjs} +1 -1
- package/dist/web-components/Download-Bku9Vptk.mjs +1 -0
- package/dist/web-components/EntryBodies-77vDudCb.mjs +1 -0
- package/dist/web-components/EntryThumbnail-BxQWKW6e.mjs +1 -0
- package/dist/web-components/FieldPill-nFGsaru9.mjs +1 -0
- package/dist/web-components/FrameAnimation-BvKiSXcm.mjs +1 -0
- package/dist/web-components/Gallery-4Hd58afA.mjs +1 -0
- package/dist/web-components/HideToggle-TEhY4TS4.mjs +1 -0
- package/dist/web-components/ImageControls-CZO7WoPb.mjs +1 -0
- package/dist/web-components/Items-CudZ4Lnb.mjs +1 -0
- package/dist/web-components/Label-f07N5Fld.mjs +1 -0
- package/dist/web-components/LanguageChoice-B5VM21DV.mjs +1 -0
- package/dist/web-components/LightboxView-C4OASmkg.mjs +1 -0
- package/dist/web-components/ListEnd-M39M62Cl.mjs +1 -0
- package/dist/web-components/{Loaded-D5xmFRSo.mjs → Loaded-oGFyBuos.mjs} +1 -1
- package/dist/web-components/LoadedCanvas-IvpSzPO6.mjs +1 -0
- package/dist/web-components/LoadedMap-WATGNLxl.mjs +1 -0
- package/dist/web-components/{Loading-CBKfwsML.mjs → Loading-YxuKrDAM.mjs} +1 -1
- package/dist/web-components/{Map-Bcgp_R8H.mjs → Map-Cw9j3gi3.mjs} +1 -1
- package/dist/web-components/MapView-3OxoCr5l.mjs +3 -0
- package/dist/web-components/Markup-DW75Jx3j.mjs +2 -0
- package/dist/web-components/MediaBody-CLtd0bf0.mjs +1 -0
- package/dist/web-components/MediaBody-JnKnoIqY.mjs +1 -0
- package/dist/web-components/NavDate-BCCOyycx.mjs +1 -0
- package/dist/web-components/{Navigator-BSJbEbuJ.mjs → Navigator-Bx4zS0Yr.mjs} +1 -1
- package/dist/web-components/Pager-B9GvQ64b.mjs +1 -0
- package/dist/web-components/PagerLayout-BF33VZL_.mjs +1 -0
- package/dist/web-components/Panel-BvDpCn6K.mjs +1 -0
- package/dist/web-components/PanelPart-Bd4lSUrP.mjs +1 -0
- package/dist/web-components/{PanelToggle-mUDw73zI.mjs → PanelToggle-bPcIULGZ.mjs} +1 -1
- package/dist/web-components/PartOfManifest-HLg-r00O.mjs +1 -0
- package/dist/web-components/{Pending-BPOQ2z1L.mjs → Pending-BxGjjnqq.mjs} +1 -1
- package/dist/web-components/PlaceBox-D-Zhe9-U.mjs +1 -0
- package/dist/web-components/Placeholder-DzY5hcbk.mjs +1 -0
- package/dist/web-components/Position-TYnzcm8e.mjs +1 -0
- package/dist/web-components/Primitives-C6VJXxZD.mjs +1 -0
- package/dist/web-components/Provider-DyB0wpeO.mjs +1 -0
- package/dist/web-components/ReadMore-De_0T7lc.mjs +1 -0
- package/dist/web-components/Root-Bt3NNBFb.mjs +1 -0
- package/dist/web-components/Scene-DrOM9YlD.mjs +1 -0
- package/dist/web-components/SceneView-DA7Yg20p.mjs +1 -0
- package/dist/web-components/Search-DgT8OPsK.mjs +1 -0
- package/dist/web-components/Sections-d1acn7qm.mjs +2 -0
- package/dist/web-components/StandaloneItems-DUb4YKCB.mjs +1 -0
- package/dist/web-components/Status-CcU3u6P4.mjs +1 -0
- package/dist/web-components/Steps-nlSCzbDQ.mjs +1 -0
- package/dist/web-components/TargetItems-BDJM3Ar-.mjs +1 -0
- package/dist/web-components/Timeline-BfdN3lIv.mjs +1 -0
- package/dist/web-components/Tip-OCB88zwY.mjs +1 -0
- package/dist/web-components/Transcript-bSA3cx_K.mjs +1 -0
- package/dist/web-components/Transport-DaIhfZqC.mjs +1 -0
- package/dist/web-components/Transport-DjOYI-fR.mjs +1 -0
- package/dist/web-components/annotation-collection-D8emkElk.mjs +1 -0
- package/dist/web-components/annotation-name-DbWjhgra.mjs +1 -0
- package/dist/web-components/annotations-content-Bg6aVAGC.mjs +1 -0
- package/dist/web-components/body-Ct8dmQdW.mjs +1 -0
- package/dist/web-components/canvas-goEZLqEd.mjs +1 -0
- package/dist/web-components/choice-key-BUNebLKe.mjs +1 -0
- package/dist/web-components/cloverEngine-Df7cMwOP.mjs +164 -0
- package/dist/web-components/content-state-reader-CNmBpG1L.mjs +1 -0
- package/dist/web-components/{controls-Dj2BybWb.mjs → controls-BZr16sYQ.mjs} +1 -1
- package/dist/web-components/custom-elements.json +260 -48
- package/dist/web-components/dates-DR3gfcON.mjs +1 -0
- package/dist/web-components/downloads-EjJ6Hpip.mjs +1 -0
- package/dist/web-components/dragToClose-X9NbZOhA.mjs +1 -0
- package/dist/web-components/{engine-BSt8LTso.mjs → engine-DMoc0tff.mjs} +1 -1
- package/dist/web-components/{engines-CC0OEsVE.mjs → engines-BmB81VXR.mjs} +1 -1
- package/dist/web-components/es-B1NvdYp-.mjs +1 -0
- package/dist/web-components/fetchManifest-CwQC6cCh.mjs +1 -0
- package/dist/web-components/fi-BjtYZNLo.mjs +1 -0
- package/dist/web-components/fr-Cd22Lziw.mjs +1 -0
- package/dist/web-components/fromManifest-DrAmY1lB.mjs +1 -0
- package/dist/web-components/glyphs-BFK_hvJJ.mjs +1 -0
- package/dist/web-components/hooks-BhtNDs_1.mjs +1 -0
- package/dist/web-components/image-layers-D2nQC4R-.mjs +1 -0
- package/dist/web-components/{imageService-dsdmcegU.mjs → imageService-iFElsopt.mjs} +1 -1
- package/dist/web-components/index-FJEpXukG.mjs +1 -0
- package/dist/web-components/index.d.mts +99 -14
- package/dist/web-components/index.mjs +1 -1
- package/dist/web-components/items-BPPrqbeh.mjs +1 -0
- package/dist/web-components/items-BnEnc5ot.mjs +1 -0
- package/dist/web-components/label-DauFa5sg.mjs +1 -0
- package/dist/web-components/layout-Djwu8f4R.mjs +1 -0
- package/dist/web-components/link-0lUlTZlw.mjs +1 -0
- package/dist/web-components/logo-DWPxaZaG.mjs +1 -0
- package/dist/web-components/masonry-0QfzOgbB.mjs +1 -0
- package/dist/web-components/models-BF2pqufA.mjs +1 -0
- package/dist/web-components/nb-CEwZDBiR.mjs +1 -0
- package/dist/web-components/nn-jYQhr9RI.mjs +1 -0
- package/dist/web-components/no-CEwZDBiR.mjs +1 -0
- package/dist/web-components/{nodes-B7JRwBgl.mjs → nodes-ChQRLDGU.mjs} +1 -1
- package/dist/web-components/{overlayImage-0OgQl1TL.mjs → overlayImage-MKrcgDep.mjs} +1 -1
- package/dist/web-components/panClearOfControls-Cn2ZXsZi.mjs +1 -0
- package/dist/web-components/{panel-CjXfre-g.mjs → panel-C13V6w6E.mjs} +1 -1
- package/dist/web-components/part-CekFWrtz.mjs +1 -0
- package/dist/web-components/playerSurface-DG1XipTq.mjs +1 -0
- package/dist/web-components/pointer-YQppt0at.mjs +1 -0
- package/dist/web-components/presentation-2-C-U79S_T.mjs +1 -0
- package/dist/web-components/{provider-C1wKfdjb.mjs → provider-DiUkZYiW.mjs} +1 -1
- package/dist/web-components/pt-CWR30SzS.mjs +1 -0
- package/dist/web-components/range-regions-CqGjyM76.mjs +1 -0
- package/dist/web-components/read-more-D8RJYdtQ.mjs +1 -0
- package/dist/web-components/readingLanguages-BWOLZK2k.mjs +1 -0
- package/dist/web-components/rendererSurface-BkbGDL_Z.mjs +22 -0
- package/dist/web-components/{renderers-BMSWEFUR.mjs → renderers-LtRX5pT0.mjs} +1 -1
- package/dist/web-components/{resource-DLHocQ1C.mjs → resource-Cfydiy4m.mjs} +1 -1
- package/dist/web-components/sanitize-qIOeyIww.mjs +3 -0
- package/dist/web-components/save-file-dZyOpXgY.mjs +1 -0
- package/dist/web-components/search-BfUZJM3a.mjs +1 -0
- package/dist/web-components/sequence-C28xoNmD.mjs +1 -0
- package/dist/web-components/shared-DkY2a89G.mjs +1 -0
- package/dist/web-components/{show-link-CyzYE1eS.mjs → show-link-DgLJzG7k.mjs} +1 -1
- package/dist/web-components/{sizedImage-uv_NlE0l.mjs → sizedImage-NHzhcBYk.mjs} +1 -1
- package/dist/web-components/{split-CYuMjp89.mjs → split-CuFiKjin.mjs} +1 -1
- package/dist/web-components/{status-Ms5L0ghK.mjs → status-C3etlkhY.mjs} +1 -1
- package/dist/web-components/styles-DkkVOSUQ.mjs +1 -0
- package/dist/web-components/three.mjs +1 -1
- package/dist/web-components/thumbnail-DecrVnpj.mjs +1 -0
- package/dist/web-components/{tip-dWhupWSr.mjs → tip-D5YgaIWW.mjs} +1 -1
- package/dist/web-components/{toggle-BQTjR1I3.mjs → toggle-CZGB65VZ.mjs} +1 -1
- package/dist/web-components/upgrade-eNW0DPXq.mjs +1 -0
- package/dist/web-components/upgrader-BlbMUEH6.mjs +1 -0
- package/dist/web-components/useContainerName-hKQjEt7a.mjs +1 -0
- package/dist/web-components/useControlsVisibility-DPg8uAkW.mjs +1 -0
- package/dist/web-components/useLazyPanelPane-eby-OI1V.mjs +1 -0
- package/dist/web-components/useNearViewport-CDbHQUBk.mjs +1 -0
- package/dist/web-components/useScrollTrack-D9l_P3_B.mjs +1 -0
- package/dist/web-components/viewer/AnnotationItems-DtsnDXPM.mjs +1 -0
- package/dist/web-components/viewer/AnnotationMenu-C-Mz6CCn.mjs +1 -0
- package/dist/web-components/viewer/AnnotationState-5pim5K72.mjs +1 -0
- package/dist/web-components/viewer/Annotations-Cqn1TkzD.mjs +2 -0
- package/dist/web-components/viewer/Annotations-CxwN9FkB.mjs +1 -0
- package/dist/web-components/viewer/{Canvas2DBackend-CAmzJD5P.mjs → Canvas2DBackend-C-ZMSCak.mjs} +1 -1
- package/dist/web-components/viewer/CaptionDetails-CRD-gSZP.mjs +1 -0
- package/dist/web-components/viewer/ChaptersMenu-Brcq3yJv.mjs +1 -0
- package/dist/web-components/viewer/ChoiceMenu-ByGzQQx1.mjs +1 -0
- package/dist/web-components/viewer/Collection-m0GCcsfQ.mjs +1 -0
- package/dist/web-components/viewer/Connected-Bmc_CdUD.mjs +1 -0
- package/dist/web-components/viewer/Connected-Dvx7wtot.mjs +1 -0
- package/dist/web-components/viewer/Contents-CwDpfiJY.mjs +1 -0
- package/dist/web-components/viewer/ControlMenu-TcO85hDf.mjs +1 -0
- package/dist/web-components/viewer/ControlsFade-BoZ4ABAE.mjs +1 -0
- package/dist/web-components/viewer/CountMenu-0-ie8kIZ.mjs +1 -0
- package/dist/web-components/viewer/Cue-DxmAS9Gx.mjs +1 -0
- package/dist/web-components/viewer/Document-BsryuYJ1.mjs +1 -0
- package/dist/web-components/viewer/{DomLayers-DRdQSEtN.mjs → DomLayers-hc0qARQc.mjs} +1 -1
- package/dist/web-components/viewer/Download-MO-1Rik4.mjs +1 -0
- package/dist/web-components/viewer/EntryBodies-g-OEwEsk.mjs +1 -0
- package/dist/web-components/viewer/EntryThumbnail-DcIDYATi.mjs +1 -0
- package/dist/web-components/viewer/FieldPill-B9S21lxw.mjs +1 -0
- package/dist/web-components/viewer/FrameAnimation-qI9cZPEs.mjs +1 -0
- package/dist/web-components/viewer/Gallery-BOgUqfqw.mjs +1 -0
- package/dist/web-components/viewer/HideToggle-D8wH49mq.mjs +1 -0
- package/dist/web-components/viewer/ImageControls-ZoEC9jWd.mjs +1 -0
- package/dist/web-components/viewer/LanguageChoice-CRqsCBAp.mjs +1 -0
- package/dist/web-components/viewer/LightboxView-BB-GcbYr.mjs +1 -0
- package/dist/web-components/viewer/ListEnd-D9Obxie4.mjs +1 -0
- package/dist/web-components/viewer/MapView-DQSwUzd7.mjs +3 -0
- package/dist/web-components/viewer/MediaBody-CIw2nTlj.mjs +1 -0
- package/dist/web-components/viewer/MediaBody-D5ff6xy-.mjs +1 -0
- package/dist/web-components/viewer/NavDate-BnfDG57h.mjs +1 -0
- package/dist/web-components/viewer/{Navigator-CKwDgG2x.mjs → Navigator-BNwjmkXY.mjs} +1 -1
- package/dist/web-components/viewer/PagerLayout-C8jraHqs.mjs +1 -0
- package/dist/web-components/viewer/PanelPart-YNbBI9SQ.mjs +1 -0
- package/dist/web-components/viewer/PartOfManifest-DX7H0V4g.mjs +1 -0
- package/dist/web-components/viewer/PlaceBox-CCWfzsNU.mjs +1 -0
- package/dist/web-components/viewer/Placeholder-CsEkLhz7.mjs +1 -0
- package/dist/web-components/viewer/Search-CsdYzdq1.mjs +1 -0
- package/dist/web-components/viewer/StandaloneItems-BfvBxbUm.mjs +1 -0
- package/dist/web-components/viewer/Steps-BH8ZApS4.mjs +1 -0
- package/dist/web-components/viewer/TargetItems-BebPFr-c.mjs +1 -0
- package/dist/web-components/viewer/Transcript-DXLv5WR9.mjs +1 -0
- package/dist/web-components/viewer/Transport-C-fh7Kx2.mjs +1 -0
- package/dist/web-components/viewer/Transport-CY6BWfMi.mjs +1 -0
- package/dist/web-components/viewer/annotation-collection-Cjd8Dgyl.mjs +1 -0
- package/dist/web-components/viewer/annotation-name-CwmgQFia.mjs +1 -0
- package/dist/web-components/viewer/annotations-content-BARXoAz-.mjs +1 -0
- package/dist/web-components/viewer/cloverEngine-CumnJPKO.mjs +164 -0
- package/dist/web-components/viewer/content-state-reader-DuvyLThu.mjs +1 -0
- package/dist/web-components/viewer/dragToClose-CFCxhUxn.mjs +1 -0
- package/dist/web-components/viewer/fetchManifest-qNB_KgxL.mjs +1 -0
- package/dist/web-components/viewer/{host-DlCltI_c.mjs → host-GTHX2fPK.mjs} +1 -1
- package/dist/web-components/viewer/image-layers-DKOuaRTj.mjs +1 -0
- package/dist/web-components/viewer/index.mjs +1 -1
- package/dist/web-components/viewer/link-BlaM0tCa.mjs +1 -0
- package/dist/web-components/viewer/overlayImage-RVpv69R5.mjs +1 -0
- package/dist/web-components/viewer/range-regions-CIZiAHOp.mjs +1 -0
- package/dist/web-components/viewer/{renderers-C_wdmw9v.mjs → renderers-Dw1klwlx.mjs} +1 -1
- package/dist/web-components/viewer/save-file-EvzaBEJN.mjs +1 -0
- package/dist/web-components/viewer/{search-BHLyNxZ6.mjs → search-x1QL_bth.mjs} +1 -1
- package/dist/web-components/viewer/styles-I7_LWFGj.mjs +1 -0
- package/dist/web-components/viewer/useControlsVisibility-C_SQHIVR.mjs +1 -0
- package/dist/web-components/viewer/useLazyPanelPane-UuGDJrf_.mjs +1 -0
- package/dist/web-components/viewer/viewer-DJrQuNs1.mjs +29 -0
- package/dist/web-components/viewer/{vtt-XiS_-5Ao.mjs → vtt-C2G89SWH.mjs} +1 -1
- package/dist/web-components/viewer-Br44EEba.mjs +1 -0
- package/dist/web-components/{vtt-DYAOuQoK.mjs → vtt-Dd0c7psH.mjs} +1 -1
- package/package.json +8 -4
- package/dist/i18n/reader.mjs +0 -13
- package/dist/templates/shared/LightboxBody.mjs +0 -9
- package/dist/web-components/About-DbrFSVBm.mjs +0 -1
- package/dist/web-components/AnnotationMenu-EBjIQpQl.mjs +0 -1
- package/dist/web-components/AnnotationState-DQTaO6Gz.mjs +0 -1
- package/dist/web-components/Annotations-Cb9U7HJ_.mjs +0 -2
- package/dist/web-components/Annotations-Dl0SgHBS.mjs +0 -1
- package/dist/web-components/Body-DxSz3iST.mjs +0 -1
- package/dist/web-components/BodyAlert-C8EOXz24.mjs +0 -1
- package/dist/web-components/Button-uWgfvqsL.mjs +0 -1
- package/dist/web-components/CanvasView-BI3YzNdK.mjs +0 -1
- package/dist/web-components/CaptionDetails-B80ZhZ7v.mjs +0 -1
- package/dist/web-components/ChoiceMenu-DCp7-co7.mjs +0 -1
- package/dist/web-components/Collection-B1Le2_TU.mjs +0 -1
- package/dist/web-components/CollectionSelect-BL_jQog-.mjs +0 -1
- package/dist/web-components/Connected-BxqaRL9o.mjs +0 -1
- package/dist/web-components/Connected-DCBI-j9H.mjs +0 -1
- package/dist/web-components/Connected-DkhfVWxd.mjs +0 -1
- package/dist/web-components/Contents-zYEGHLfe.mjs +0 -1
- package/dist/web-components/ControlMenu-CAHiLAtl.mjs +0 -1
- package/dist/web-components/Cue-BT2V9VAq.mjs +0 -1
- package/dist/web-components/Document-BdCjGnJN.mjs +0 -1
- package/dist/web-components/DocumentPanel-X_Rta0Wu.mjs +0 -1
- package/dist/web-components/Download-DqU-goFi.mjs +0 -1
- package/dist/web-components/EntryBodies-DXAQH0vR.mjs +0 -1
- package/dist/web-components/ErrorBoundary-chQaO-Up.mjs +0 -1
- package/dist/web-components/FieldPill-CyEssPVm.mjs +0 -1
- package/dist/web-components/FrameAnimation-Bb0pOoRl.mjs +0 -1
- package/dist/web-components/Gallery-BXU3TcT3.mjs +0 -1
- package/dist/web-components/HideToggle-BwMrOBMu.mjs +0 -1
- package/dist/web-components/Items-DRj1UEpC.mjs +0 -1
- package/dist/web-components/Label-D6aVJB9s.mjs +0 -1
- package/dist/web-components/LightboxBody-BzXQGMDn.mjs +0 -1
- package/dist/web-components/LoadedCanvas-DOjtxLSe.mjs +0 -1
- package/dist/web-components/LoadedMap-DouDS2lO.mjs +0 -1
- package/dist/web-components/MapView-CD5zkTs8.mjs +0 -1
- package/dist/web-components/Markup-C1hMA8wk.mjs +0 -2
- package/dist/web-components/MediaBody-B_Gii4we.mjs +0 -1
- package/dist/web-components/MediaBody-BfrKIPte.mjs +0 -1
- package/dist/web-components/Pager-Di_2hHM3.mjs +0 -1
- package/dist/web-components/Panel-DbsC8A9V.mjs +0 -1
- package/dist/web-components/PartOfManifest-7eOwURrF.mjs +0 -1
- package/dist/web-components/Primitives-XQO3m1wG.mjs +0 -1
- package/dist/web-components/Provider-B61118lU.mjs +0 -1
- package/dist/web-components/ReadMore-BJH-qqte.mjs +0 -1
- package/dist/web-components/Root-Dj277K6p.mjs +0 -1
- package/dist/web-components/Scene-BTWpLeec.mjs +0 -1
- package/dist/web-components/SceneView-BYo7WmPt.mjs +0 -1
- package/dist/web-components/Search-ZV8FFN4p.mjs +0 -1
- package/dist/web-components/Sections-ejwu1_Sm.mjs +0 -2
- package/dist/web-components/StandaloneItems-BYaiyCca.mjs +0 -1
- package/dist/web-components/Status-YbQK2KzY.mjs +0 -1
- package/dist/web-components/Timeline-ByyVSd7B.mjs +0 -1
- package/dist/web-components/Tip-IO11xX4x.mjs +0 -1
- package/dist/web-components/Transcript-D0gUxUoA.mjs +0 -1
- package/dist/web-components/annotation-collection-Csv7WIlm.mjs +0 -1
- package/dist/web-components/annotations-content-BS_OFz5Z.mjs +0 -1
- package/dist/web-components/body-CKjwwFep.mjs +0 -1
- package/dist/web-components/canvas-CIzpp-Uz.mjs +0 -1
- package/dist/web-components/cloverEngine-B4LinbSt.mjs +0 -164
- package/dist/web-components/content-state-reader-D1BkpICh.mjs +0 -1
- package/dist/web-components/dragToClose-C-Pf1IeO.mjs +0 -1
- package/dist/web-components/es-BwMkoRod.mjs +0 -1
- package/dist/web-components/fi-gPFOn9RK.mjs +0 -1
- package/dist/web-components/fr-DUHmgdJo.mjs +0 -1
- package/dist/web-components/fromManifest-BhemHaoA.mjs +0 -1
- package/dist/web-components/glyphs-drROkef9.mjs +0 -1
- package/dist/web-components/hooks-BXzQSllm.mjs +0 -1
- package/dist/web-components/index-B7nZdqLg.mjs +0 -1
- package/dist/web-components/items-CB2Uk7ts.mjs +0 -1
- package/dist/web-components/items-jfQ5XzEj.mjs +0 -1
- package/dist/web-components/keep-fragments-B5nlv2ck.mjs +0 -1
- package/dist/web-components/label-Vbg_cMOJ.mjs +0 -1
- package/dist/web-components/layout-mMHI0lsj.mjs +0 -1
- package/dist/web-components/link-ZRnv5NFR.mjs +0 -1
- package/dist/web-components/logo-Boy6u4m2.mjs +0 -1
- package/dist/web-components/models-D1EE_CmH.mjs +0 -1
- package/dist/web-components/nb-BSvnQ6jd.mjs +0 -1
- package/dist/web-components/nn-Dg2_HdZu.mjs +0 -1
- package/dist/web-components/no-BSvnQ6jd.mjs +0 -1
- package/dist/web-components/panClearOfControls-ac9uf-Qs.mjs +0 -1
- package/dist/web-components/part-cUiPs2-y.mjs +0 -1
- package/dist/web-components/playerSurface-CU5XxI1j.mjs +0 -1
- package/dist/web-components/pt-B3J80JgO.mjs +0 -1
- package/dist/web-components/read-more-DNHNtG-a.mjs +0 -1
- package/dist/web-components/rendererSurface-DhIlOjGT.mjs +0 -22
- package/dist/web-components/sanitize-Dc7nOsgO.mjs +0 -3
- package/dist/web-components/search-CLy2Wj01.mjs +0 -1
- package/dist/web-components/shared-YUjOSBKO.mjs +0 -1
- package/dist/web-components/styles-CyuM_fB1.mjs +0 -1
- package/dist/web-components/thumbnail-c2K_iQsD.mjs +0 -1
- package/dist/web-components/time-B9GZoYcm.mjs +0 -1
- package/dist/web-components/upgrader-XNxI-5jo.mjs +0 -1
- package/dist/web-components/useContainerName-BpJ3IWY0.mjs +0 -1
- package/dist/web-components/useNearViewport-CtLyYg9n.mjs +0 -1
- package/dist/web-components/useScrollTrack-WbG28FPD.mjs +0 -1
- package/dist/web-components/viewer/AnnotationMenu-ZKyBeyUU.mjs +0 -1
- package/dist/web-components/viewer/AnnotationState-DO33zokc.mjs +0 -1
- package/dist/web-components/viewer/Annotations-BOjhr5ks.mjs +0 -1
- package/dist/web-components/viewer/Annotations-DkLueFLK.mjs +0 -2
- package/dist/web-components/viewer/CaptionDetails-DOJlUtOn.mjs +0 -1
- package/dist/web-components/viewer/ChoiceMenu-BDq6H34G.mjs +0 -1
- package/dist/web-components/viewer/Collection-By3puO0V.mjs +0 -1
- package/dist/web-components/viewer/Connected-DZNO2CPf.mjs +0 -1
- package/dist/web-components/viewer/Connected-ESg5y49m.mjs +0 -1
- package/dist/web-components/viewer/Contents-B_FqDwTW.mjs +0 -1
- package/dist/web-components/viewer/ControlMenu-DdQl-dTf.mjs +0 -1
- package/dist/web-components/viewer/Cue-BTRHfiWQ.mjs +0 -1
- package/dist/web-components/viewer/Document-B9_PyD2w.mjs +0 -1
- package/dist/web-components/viewer/DocumentPanel-CtEJVPoE.mjs +0 -1
- package/dist/web-components/viewer/EntryBodies-CJuTRcTq.mjs +0 -1
- package/dist/web-components/viewer/FieldPill-06uwrNwE.mjs +0 -1
- package/dist/web-components/viewer/FrameAnimation-3dcDHf5q.mjs +0 -1
- package/dist/web-components/viewer/Gallery-BYasTqZc.mjs +0 -1
- package/dist/web-components/viewer/HideToggle-BxkNMX-T.mjs +0 -1
- package/dist/web-components/viewer/LightboxBody-CXMc1xOH.mjs +0 -1
- package/dist/web-components/viewer/MapView-DCerrRRV.mjs +0 -1
- package/dist/web-components/viewer/MediaBody-BdkJcyGy.mjs +0 -1
- package/dist/web-components/viewer/MediaBody-waF4KvHp.mjs +0 -1
- package/dist/web-components/viewer/PartOfManifest-DalHJFwC.mjs +0 -1
- package/dist/web-components/viewer/Search-Di_QQfDb.mjs +0 -1
- package/dist/web-components/viewer/StandaloneItems-B9J6nnWn.mjs +0 -1
- package/dist/web-components/viewer/Transcript-aHOixfna.mjs +0 -1
- package/dist/web-components/viewer/annotation-collection-I2UkdobR.mjs +0 -1
- package/dist/web-components/viewer/annotations-content-D-i4j9pD.mjs +0 -1
- package/dist/web-components/viewer/cloverEngine-CynoKdta.mjs +0 -164
- package/dist/web-components/viewer/content-state-reader-D7GIMcKK.mjs +0 -1
- package/dist/web-components/viewer/link-BX-wzj1u.mjs +0 -1
- package/dist/web-components/viewer/overlayImage-CHqn1fG8.mjs +0 -1
- package/dist/web-components/viewer/styles-BRCkEU3w.mjs +0 -1
- package/dist/web-components/viewer/viewer-ipqAA-xQ.mjs +0 -28
- package/dist/web-components/viewer-DEHIsIHd.mjs +0 -1
- /package/dist/{ui → i18n}/languageCode.mjs +0 -0
package/dist/index.mjs
CHANGED
|
@@ -5,7 +5,8 @@ import { Root } from "./components/Root/Root.mjs";
|
|
|
5
5
|
import { Body } from "./components/Body/Body.mjs";
|
|
6
6
|
import { Label } from "./components/Label/Label.mjs";
|
|
7
7
|
import { Items } from "./components/Items/Items.mjs";
|
|
8
|
-
import { Next,
|
|
8
|
+
import { Next, Previous } from "./components/Items/Pager.mjs";
|
|
9
|
+
import { Position } from "./components/Items/Position.mjs";
|
|
9
10
|
import { Status } from "./components/Status/Status.mjs";
|
|
10
11
|
import { Homepage, Id, Metadata, PartOf, Rendering, RequiredStatement, Rights, SeeAlso, Summary, Thumbnail, Value } from "./components/Primitives/Primitives.mjs";
|
|
11
12
|
import { Logo, Provider } from "./components/Provider/Provider.mjs";
|
|
@@ -25,7 +26,7 @@ import { CollectionSelect } from "./components/CollectionSelect/CollectionSelect
|
|
|
25
26
|
import { PanelToggle } from "./components/Panel/PanelToggle.mjs";
|
|
26
27
|
import { Timeline } from "./components/Timeline/Timeline.mjs";
|
|
27
28
|
import { Scene } from "./components/Scene/Scene.mjs";
|
|
28
|
-
import { useActiveCanvas, useAnnotationSets, useLangOf, useLocalized, useManifest, useNavigation, useSequence, useStatus, useT, useVisibleCanvases } from "./react/hooks.mjs";
|
|
29
|
+
import { useActiveCanvas, useAnnotationCollection, useAnnotationSets, useLangOf, useLocalized, useManifest, useNavigation, useSequence, useStatus, useT, useVisibleCanvases } from "./react/hooks.mjs";
|
|
29
30
|
import { useProvider } from "./components/Primitives/resource.mjs";
|
|
30
31
|
import { visuallyHidden } from "./ui/visuallyHidden.mjs";
|
|
31
32
|
import { Tip } from "./ui/Tip.mjs";
|
|
@@ -39,6 +40,7 @@ import { buildContentState, encodeContentState } from "./core/content-state.mjs"
|
|
|
39
40
|
import { decodeContentState } from "./core/content-state-reader.mjs";
|
|
40
41
|
import { cueAt, parseVtt } from "./core/vtt.mjs";
|
|
41
42
|
import { chaptersOf, currentContents, tableOfContents } from "./core/ranges.mjs";
|
|
43
|
+
import { CONTENTS_SET_ID } from "./core/annotation-sets.mjs";
|
|
42
44
|
import { localize } from "./core/value.mjs";
|
|
43
45
|
import { readAs, toPlainText } from "./core/text.mjs";
|
|
44
46
|
import { resolveThumbnail, stillSource, thumbnailSource } from "./core/thumbnail.mjs";
|
|
@@ -50,6 +52,7 @@ export {
|
|
|
50
52
|
Annotations,
|
|
51
53
|
Body,
|
|
52
54
|
CLOVER_I18N_NAMESPACE,
|
|
55
|
+
CONTENTS_SET_ID,
|
|
53
56
|
default2 as Canvas,
|
|
54
57
|
Collection,
|
|
55
58
|
CollectionSelect,
|
|
@@ -115,6 +118,7 @@ export {
|
|
|
115
118
|
toPlainText,
|
|
116
119
|
toPresentation4,
|
|
117
120
|
useActiveCanvas,
|
|
121
|
+
useAnnotationCollection,
|
|
118
122
|
useAnnotationSets,
|
|
119
123
|
useClover,
|
|
120
124
|
useCloverSelector,
|
package/dist/lib/fullscreen.mjs
CHANGED
|
@@ -9,7 +9,12 @@ const isFullscreenSupported = () => {
|
|
|
9
9
|
const doc = document;
|
|
10
10
|
return Boolean(doc.fullscreenEnabled ?? doc.webkitFullscreenEnabled);
|
|
11
11
|
};
|
|
12
|
-
const getCloverRoot = (from) =>
|
|
12
|
+
const getCloverRoot = (from) => {
|
|
13
|
+
const root = from == null ? void 0 : from.closest(".clover-root");
|
|
14
|
+
const dialog = from == null ? void 0 : from.closest("dialog");
|
|
15
|
+
if (root && !(dialog && root.contains(dialog))) return root;
|
|
16
|
+
return (from == null ? void 0 : from.closest(".clover-canvas")) ?? null;
|
|
17
|
+
};
|
|
13
18
|
const enterNativeFullscreen = (video, from) => {
|
|
14
19
|
if (typeof video.webkitEnterFullscreen !== "function") return;
|
|
15
20
|
const canvas = from.closest(".clover-canvas");
|
package/dist/lib/gltf/load.mjs
CHANGED
|
@@ -37,19 +37,21 @@ async function fetchBytes(uri, base, request) {
|
|
|
37
37
|
return response.arrayBuffer();
|
|
38
38
|
}
|
|
39
39
|
const loading = /* @__PURE__ */ new WeakMap();
|
|
40
|
-
function loadGltf(url, request) {
|
|
40
|
+
function loadGltf(url, request, maxTextureSize) {
|
|
41
41
|
const run = (request == null ? void 0 : request.fetch) ?? globalThis.fetch;
|
|
42
42
|
const loads = loading.get(run) ?? /* @__PURE__ */ new Map();
|
|
43
43
|
loading.set(run, loads);
|
|
44
|
-
const key = `${requestKey(request)} ${url}`;
|
|
44
|
+
const key = `${requestKey(request)} ${maxTextureSize ?? ""} ${url}`;
|
|
45
45
|
let load = loads.get(key);
|
|
46
46
|
if (!load) {
|
|
47
|
-
load = readGltf(url, request).finally(
|
|
47
|
+
load = readGltf(url, request, maxTextureSize).finally(
|
|
48
|
+
() => loads.delete(key)
|
|
49
|
+
);
|
|
48
50
|
loads.set(key, load);
|
|
49
51
|
}
|
|
50
52
|
return load;
|
|
51
53
|
}
|
|
52
|
-
async function readGltf(url, request) {
|
|
54
|
+
async function readGltf(url, request, maxTextureSize) {
|
|
53
55
|
const data = await fetchBytes(url, location.href, request);
|
|
54
56
|
const glb = new DataView(data).getUint32(0, true) === GLB;
|
|
55
57
|
const { json, bin } = glb ? parseGlb(data) : { json: JSON.parse(new TextDecoder().decode(data)) };
|
|
@@ -88,10 +90,15 @@ async function readGltf(url, request) {
|
|
|
88
90
|
type: image.mimeType
|
|
89
91
|
});
|
|
90
92
|
} else return null;
|
|
91
|
-
|
|
93
|
+
const options = {
|
|
92
94
|
premultiplyAlpha: "none",
|
|
93
95
|
colorSpaceConversion: "none"
|
|
94
|
-
}
|
|
96
|
+
};
|
|
97
|
+
return await fitted(
|
|
98
|
+
await createImageBitmap(blob, options),
|
|
99
|
+
maxTextureSize,
|
|
100
|
+
options
|
|
101
|
+
);
|
|
95
102
|
} catch {
|
|
96
103
|
return null;
|
|
97
104
|
}
|
|
@@ -99,6 +106,19 @@ async function readGltf(url, request) {
|
|
|
99
106
|
);
|
|
100
107
|
return { json, buffers, images };
|
|
101
108
|
}
|
|
109
|
+
async function fitted(bitmap, most, options) {
|
|
110
|
+
const longest = Math.max(bitmap.width, bitmap.height);
|
|
111
|
+
if (!most || longest <= most) return bitmap;
|
|
112
|
+
const ratio = most / longest;
|
|
113
|
+
const resized = await createImageBitmap(bitmap, {
|
|
114
|
+
...options,
|
|
115
|
+
resizeWidth: Math.max(1, Math.floor(bitmap.width * ratio)),
|
|
116
|
+
resizeHeight: Math.max(1, Math.floor(bitmap.height * ratio)),
|
|
117
|
+
resizeQuality: "high"
|
|
118
|
+
});
|
|
119
|
+
bitmap.close();
|
|
120
|
+
return resized;
|
|
121
|
+
}
|
|
102
122
|
const COMPONENTS = {
|
|
103
123
|
SCALAR: 1,
|
|
104
124
|
VEC2: 2,
|
|
@@ -4,7 +4,7 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
|
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
5
|
import { claimContext, returnContext } from "./backends/contexts.mjs";
|
|
6
6
|
import { WebGL2Backend } from "./backends/webgl2/WebGL2Backend.mjs";
|
|
7
|
-
import { fitCamera, visibleWorldRect, screenPointToWorld,
|
|
7
|
+
import { fitCamera, anchoredCenter, visibleWorldRect, screenPointToWorld, worldPointToScreen, sameCamera } from "./camera/Camera.mjs";
|
|
8
8
|
import { CameraAnimator } from "./camera/CameraAnimator.mjs";
|
|
9
9
|
import { GestureController, DEFAULT_GESTURES } from "./input/GestureController.mjs";
|
|
10
10
|
import { TileCache } from "./io/TileCache.mjs";
|
|
@@ -12,9 +12,9 @@ import { loadImage } from "./io/decode.mjs";
|
|
|
12
12
|
import { FrameLoop } from "./loop/FrameLoop.mjs";
|
|
13
13
|
import { uploadBudget } from "./scene/uploadBudget.mjs";
|
|
14
14
|
import { apply, compose, rotate, scale } from "./math/affine.mjs";
|
|
15
|
-
import { union, clamp } from "./math/rect.mjs";
|
|
15
|
+
import { union, rectCenter, clamp, transformRect } from "./math/rect.mjs";
|
|
16
16
|
import { planFrame } from "./scene/planFrame.mjs";
|
|
17
|
-
import { sameSpec, prepareItem, layoutItems, pixelsToWorld, MEDIA_KEY_PREFIX } from "./scene/sceneItem.mjs";
|
|
17
|
+
import { sameSpec, prepareItem, layoutItems, pixelsToWorld, itemToWorld, MEDIA_KEY_PREFIX } from "./scene/sceneItem.mjs";
|
|
18
18
|
const DEFAULTS = {
|
|
19
19
|
maxZoomPixelRatio: 1.1,
|
|
20
20
|
minZoomImageRatio: 0.9,
|
|
@@ -29,15 +29,15 @@ const MAX_CONTEXT_LOSSES = 3;
|
|
|
29
29
|
const ANNOTATION_PADDING = 0.1;
|
|
30
30
|
const ZOOM_EPSILON = 1e-6;
|
|
31
31
|
const NO_INSET = { top: 0, right: 0, bottom: 0, left: 0 };
|
|
32
|
-
function readInset(
|
|
33
|
-
if (typeof getComputedStyle !== "function") return NO_INSET;
|
|
34
|
-
const style = getComputedStyle(
|
|
35
|
-
const px = (
|
|
32
|
+
function readInset(element, box = "padding") {
|
|
33
|
+
if (!element || typeof getComputedStyle !== "function") return NO_INSET;
|
|
34
|
+
const style = getComputedStyle(element);
|
|
35
|
+
const px = (side) => parseFloat(style.getPropertyValue(`${box}-${side}`)) || 0;
|
|
36
36
|
return {
|
|
37
|
-
top: px(
|
|
38
|
-
right: px(
|
|
39
|
-
bottom: px(
|
|
40
|
-
left: px(
|
|
37
|
+
top: px("top"),
|
|
38
|
+
right: px("right"),
|
|
39
|
+
bottom: px("bottom"),
|
|
40
|
+
left: px("left")
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
43
|
const sameInset = (a, b) => a.top === b.top && a.right === b.right && a.bottom === b.bottom && a.left === b.left;
|
|
@@ -98,6 +98,7 @@ class CanvasRenderer {
|
|
|
98
98
|
__publicField(this, "lastEmitted", null);
|
|
99
99
|
__publicField(this, "generation", 0);
|
|
100
100
|
__publicField(this, "listeners", /* @__PURE__ */ new Map());
|
|
101
|
+
__publicField(this, "unloadable", false);
|
|
101
102
|
__publicField(this, "resizeObserver", null);
|
|
102
103
|
__publicField(this, "intersectionObserver", null);
|
|
103
104
|
__publicField(this, "releaseTimer", null);
|
|
@@ -125,9 +126,13 @@ class CanvasRenderer {
|
|
|
125
126
|
// Fetch for where the camera lands, not for each view on the way.
|
|
126
127
|
destination: animating ? this.camera.destination : void 0
|
|
127
128
|
});
|
|
128
|
-
|
|
129
|
-
|
|
129
|
+
const wants = plan.wants.filter(
|
|
130
|
+
(want) => !want.url.startsWith(MEDIA_KEY_PREFIX)
|
|
130
131
|
);
|
|
132
|
+
this.cache.update(wants);
|
|
133
|
+
if (plan.draws.length) this.setUnloadable(false);
|
|
134
|
+
else if (wants.length && wants.every((want) => this.cache.failed(want.url)))
|
|
135
|
+
this.setUnloadable(true);
|
|
131
136
|
this.paint(plan.draws);
|
|
132
137
|
(_a = this.overlays) == null ? void 0 : _a.position(camera, this.viewport);
|
|
133
138
|
(_b = this.navigator) == null ? void 0 : _b.render(
|
|
@@ -257,6 +262,7 @@ class CanvasRenderer {
|
|
|
257
262
|
this.worldBounds = world ? laidOut ? union([world, laidOut]) : world : laidOut;
|
|
258
263
|
this.contentVersion++;
|
|
259
264
|
if (errors.length) this.emit("error", errors);
|
|
265
|
+
this.setUnloadable(images.length > 0 && !items.length && errors.length > 0);
|
|
260
266
|
if (!this.worldBounds) {
|
|
261
267
|
this.invalidate();
|
|
262
268
|
return;
|
|
@@ -281,6 +287,7 @@ class CanvasRenderer {
|
|
|
281
287
|
* scene, framed afresh. A swap within one resource keeps the old scene up instead.
|
|
282
288
|
*/
|
|
283
289
|
clear() {
|
|
290
|
+
this.setUnloadable(false);
|
|
284
291
|
this.generation++;
|
|
285
292
|
this.items = [];
|
|
286
293
|
this.watchMedia([]);
|
|
@@ -322,20 +329,38 @@ class CanvasRenderer {
|
|
|
322
329
|
}
|
|
323
330
|
return true;
|
|
324
331
|
}
|
|
325
|
-
/** Frame `bounds` (world units) in the viewport. */
|
|
326
|
-
fitBounds(bounds, immediate = false) {
|
|
327
|
-
const target =
|
|
328
|
-
bounds,
|
|
329
|
-
this.viewport,
|
|
330
|
-
this.camera.destination.rotation,
|
|
331
|
-
0
|
|
332
|
-
);
|
|
332
|
+
/** Frame `bounds` (world units) in the viewport, or in the part of it `inset` leaves. */
|
|
333
|
+
fitBounds(bounds, immediate = false, inset = NO_INSET) {
|
|
334
|
+
const target = this.fit(bounds, this.camera.destination.rotation, inset);
|
|
333
335
|
this.atHome = false;
|
|
334
336
|
this.animateTo(
|
|
335
337
|
this.constrain(target, { allowBeyondLimits: true }),
|
|
336
338
|
immediate
|
|
337
339
|
);
|
|
338
340
|
}
|
|
341
|
+
/**
|
|
342
|
+
* The camera that frames `bounds`, turned by `rotation`, in the part of the viewport
|
|
343
|
+
* `inset` leaves: centered there, off the viewport's center where its sides differ.
|
|
344
|
+
*/
|
|
345
|
+
fit(bounds, rotation, { top, right, bottom, left }) {
|
|
346
|
+
const { width, height } = this.viewport;
|
|
347
|
+
const { zoom } = fitCamera(
|
|
348
|
+
bounds,
|
|
349
|
+
{
|
|
350
|
+
width: Math.max(1, width - left - right),
|
|
351
|
+
height: Math.max(1, height - top - bottom)
|
|
352
|
+
},
|
|
353
|
+
rotation
|
|
354
|
+
);
|
|
355
|
+
const center = anchoredCenter(
|
|
356
|
+
rectCenter(bounds),
|
|
357
|
+
{ x: (width + left - right) / 2, y: (height + top - bottom) / 2 },
|
|
358
|
+
zoom,
|
|
359
|
+
rotation,
|
|
360
|
+
this.viewport
|
|
361
|
+
);
|
|
362
|
+
return { ...center, zoom, rotation };
|
|
363
|
+
}
|
|
339
364
|
/**
|
|
340
365
|
* Zoom to a rectangle in item `index`'s own coordinates — an annotation's `xywh` — with
|
|
341
366
|
* OpenSeadragon's padding.
|
|
@@ -344,8 +369,12 @@ class CanvasRenderer {
|
|
|
344
369
|
const world = this.itemRectToWorld(index, rect);
|
|
345
370
|
if (world) this.fitAnnotation(world, immediate);
|
|
346
371
|
}
|
|
347
|
-
/**
|
|
372
|
+
/**
|
|
373
|
+
* Zoom to a world rectangle with OpenSeadragon's annotation padding, clear of the
|
|
374
|
+
* controls over the view (the hotspots' layer's scroll padding, `Annotations.css`).
|
|
375
|
+
*/
|
|
348
376
|
fitAnnotation(world, immediate = false) {
|
|
377
|
+
var _a;
|
|
349
378
|
const first = this.items[0];
|
|
350
379
|
if (!first) return;
|
|
351
380
|
const pad = first.rect.width * ANNOTATION_PADDING;
|
|
@@ -356,7 +385,8 @@ class CanvasRenderer {
|
|
|
356
385
|
width: world.width + pad * 2,
|
|
357
386
|
height: world.height + pad * 2
|
|
358
387
|
},
|
|
359
|
-
immediate
|
|
388
|
+
immediate,
|
|
389
|
+
readInset((_a = this.overlays) == null ? void 0 : _a.container, "scroll-padding")
|
|
360
390
|
);
|
|
361
391
|
}
|
|
362
392
|
/** The world rectangle currently visible (its bounding box when rotated). */
|
|
@@ -493,7 +523,18 @@ class CanvasRenderer {
|
|
|
493
523
|
itemRectToWorld(index, rect) {
|
|
494
524
|
const item = this.items[index];
|
|
495
525
|
if (!item) return null;
|
|
496
|
-
const { contentClip } = item;
|
|
526
|
+
const { contentClip, clip } = item;
|
|
527
|
+
if (item.turn)
|
|
528
|
+
return transformRect(
|
|
529
|
+
compose(
|
|
530
|
+
itemToWorld(item),
|
|
531
|
+
scale(
|
|
532
|
+
clip.width / contentClip.width,
|
|
533
|
+
clip.height / contentClip.height
|
|
534
|
+
)
|
|
535
|
+
),
|
|
536
|
+
rect
|
|
537
|
+
);
|
|
497
538
|
const kx = item.rect.width / contentClip.width;
|
|
498
539
|
const ky = item.rect.height / contentClip.height;
|
|
499
540
|
return {
|
|
@@ -645,18 +686,7 @@ class CanvasRenderer {
|
|
|
645
686
|
if (!this.worldBounds) return null;
|
|
646
687
|
const turn = 2 * Math.PI;
|
|
647
688
|
const upright = Math.round(this.camera.destination.rotation / turn) * turn || 0;
|
|
648
|
-
|
|
649
|
-
const camera = fitCamera(
|
|
650
|
-
this.worldBounds,
|
|
651
|
-
{
|
|
652
|
-
width: Math.max(1, this.viewport.width - left - right),
|
|
653
|
-
height: Math.max(1, this.viewport.height - top - bottom)
|
|
654
|
-
},
|
|
655
|
-
upright
|
|
656
|
-
);
|
|
657
|
-
camera.x -= (left - right) / 2 / camera.zoom;
|
|
658
|
-
camera.y -= (top - bottom) / 2 / camera.zoom;
|
|
659
|
-
return camera;
|
|
689
|
+
return this.fit(this.worldBounds, upright, this.inset);
|
|
660
690
|
}
|
|
661
691
|
/**
|
|
662
692
|
* Keep the camera usable: zoom within limits, and the center over the world so the
|
|
@@ -831,6 +861,11 @@ class CanvasRenderer {
|
|
|
831
861
|
);
|
|
832
862
|
(_d = (_c = this.dprQuery).addEventListener) == null ? void 0 : _d.call(_c, "change", this.onPixelRatioChange);
|
|
833
863
|
}
|
|
864
|
+
setUnloadable(unloadable) {
|
|
865
|
+
if (unloadable === this.unloadable) return;
|
|
866
|
+
this.unloadable = unloadable;
|
|
867
|
+
this.emit("unloadable", unloadable);
|
|
868
|
+
}
|
|
834
869
|
emit(event, detail) {
|
|
835
870
|
var _a;
|
|
836
871
|
(_a = this.listeners.get(event)) == null ? void 0 : _a.forEach((listener) => listener(detail));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { apply, compose, rotate,
|
|
2
|
+
import { apply, compose, rotate, scale, translate } from "../math/affine.mjs";
|
|
3
3
|
import { transformRect, rectCenter } from "../math/rect.mjs";
|
|
4
4
|
function worldToScreen(camera, viewport) {
|
|
5
5
|
return compose(
|
|
@@ -31,6 +31,19 @@ function multiply(m, n) {
|
|
|
31
31
|
function compose(...transforms) {
|
|
32
32
|
return transforms.reduce((acc, t) => multiply(acc, t), IDENTITY);
|
|
33
33
|
}
|
|
34
|
+
function invert(m) {
|
|
35
|
+
const det = m.a * m.d - m.b * m.c;
|
|
36
|
+
if (!det || !Number.isFinite(det)) return null;
|
|
37
|
+
const inv = 1 / det;
|
|
38
|
+
return {
|
|
39
|
+
a: m.d * inv,
|
|
40
|
+
b: -m.b * inv,
|
|
41
|
+
c: -m.c * inv,
|
|
42
|
+
d: m.a * inv,
|
|
43
|
+
e: (m.c * m.f - m.d * m.e) * inv,
|
|
44
|
+
f: (m.b * m.e - m.a * m.f) * inv
|
|
45
|
+
};
|
|
46
|
+
}
|
|
34
47
|
function apply(m, p) {
|
|
35
48
|
return { x: m.a * p.x + m.c * p.y + m.e, y: m.b * p.x + m.d * p.y + m.f };
|
|
36
49
|
}
|
|
@@ -59,6 +72,7 @@ export {
|
|
|
59
72
|
IDENTITY,
|
|
60
73
|
apply,
|
|
61
74
|
compose,
|
|
75
|
+
invert,
|
|
62
76
|
multiply,
|
|
63
77
|
rotate,
|
|
64
78
|
scale,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { worldToScreen, visibleWorldRect } from "../camera/Camera.mjs";
|
|
3
|
-
import { compose,
|
|
3
|
+
import { compose, scale, translate } from "../math/affine.mjs";
|
|
4
4
|
import { intersects } from "../math/rect.mjs";
|
|
5
|
-
import { pixelsToWorld } from "./sceneItem.mjs";
|
|
5
|
+
import { pixelsToWorld, orientOf, shownPointToPixels, shownToPixels } from "./sceneItem.mjs";
|
|
6
6
|
import { tilesInRegion, chooseLevel } from "../sources/tilePyramid.mjs";
|
|
7
7
|
const TARGET_BAND = 1e7;
|
|
8
8
|
const IN_FLIGHT_BAND = 15e6;
|
|
@@ -78,7 +78,7 @@ function planFrame(input) {
|
|
|
78
78
|
view,
|
|
79
79
|
translate(rect.x, rect.y),
|
|
80
80
|
scale(k.x, k.y),
|
|
81
|
-
|
|
81
|
+
orientOf(item)
|
|
82
82
|
);
|
|
83
83
|
for (const level of paintLevels) {
|
|
84
84
|
const addresses = level === 0 ? coarse : level === target ? fine : tilesInRegion(pyramid, level, area);
|
|
@@ -102,7 +102,7 @@ function planFrame(input) {
|
|
|
102
102
|
return { draws, wants: dedupeWants(wants), levels };
|
|
103
103
|
}
|
|
104
104
|
function itemView(item, camera, viewport, pixelRatio) {
|
|
105
|
-
const { pyramid,
|
|
105
|
+
const { pyramid, rect } = item;
|
|
106
106
|
const visible = visibleWorldRect(camera, viewport);
|
|
107
107
|
if (!intersects(visible, rect)) return null;
|
|
108
108
|
const k = pixelsToWorld(item);
|
|
@@ -112,16 +112,16 @@ function itemView(item, camera, viewport, pixelRatio) {
|
|
|
112
112
|
const y1 = Math.min(visible.y + visible.height, rect.y + rect.height);
|
|
113
113
|
const imagePerDevice = 1 / (k.x * camera.zoom * pixelRatio);
|
|
114
114
|
return {
|
|
115
|
-
area: {
|
|
116
|
-
x:
|
|
117
|
-
y:
|
|
115
|
+
area: shownToPixels(item, {
|
|
116
|
+
x: (x0 - rect.x) / k.x,
|
|
117
|
+
y: (y0 - rect.y) / k.y,
|
|
118
118
|
width: (x1 - x0) / k.x,
|
|
119
119
|
height: (y1 - y0) / k.y
|
|
120
|
-
},
|
|
121
|
-
center: {
|
|
122
|
-
x:
|
|
123
|
-
y:
|
|
124
|
-
},
|
|
120
|
+
}),
|
|
121
|
+
center: shownPointToPixels(item, {
|
|
122
|
+
x: (camera.x - rect.x) / k.x,
|
|
123
|
+
y: (camera.y - rect.y) / k.y
|
|
124
|
+
}),
|
|
125
125
|
target: chooseLevel(pyramid, imagePerDevice)
|
|
126
126
|
};
|
|
127
127
|
}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
function parseRotation(rotation) {
|
|
3
|
+
const match = /^(!)?(\d+(?:\.\d+)?)$/.exec((rotation == null ? void 0 : rotation.trim()) ?? "");
|
|
4
|
+
if (!match) return null;
|
|
5
|
+
const turned = Number(match[2]);
|
|
6
|
+
if (turned > 360) return null;
|
|
7
|
+
const degrees = turned % 360;
|
|
8
|
+
const mirror = Boolean(match[1]);
|
|
9
|
+
return degrees || mirror ? { degrees, mirror } : null;
|
|
10
|
+
}
|
|
2
11
|
function parseRegion(region, width, height) {
|
|
3
12
|
if (!region) return null;
|
|
4
13
|
let value = region.trim().replace(/^xywh=/, "");
|
|
@@ -26,5 +35,6 @@ function parseRegion(region, width, height) {
|
|
|
26
35
|
return { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };
|
|
27
36
|
}
|
|
28
37
|
export {
|
|
29
|
-
parseRegion
|
|
38
|
+
parseRegion,
|
|
39
|
+
parseRotation
|
|
30
40
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { compose, scale, translate, invert, apply } from "../math/affine.mjs";
|
|
3
|
+
import { union, transformRect } from "../math/rect.mjs";
|
|
4
|
+
import { parseRegion, parseRotation } from "./regions.mjs";
|
|
4
5
|
import { fetchInfo } from "../sources/imageService.mjs";
|
|
5
6
|
import { servicePyramid, staticPyramid, tilesInRegion } from "../sources/tilePyramid.mjs";
|
|
6
7
|
async function prepareItem(spec, context) {
|
|
@@ -37,6 +38,8 @@ async function prepareItem(spec, context) {
|
|
|
37
38
|
width: contentClip.width * toPixelsX,
|
|
38
39
|
height: contentClip.height * toPixelsY
|
|
39
40
|
};
|
|
41
|
+
const rotation = parseRotation(spec.rotation);
|
|
42
|
+
const turn = rotation ? turnOf(clip, rotation) : void 0;
|
|
40
43
|
const item = {
|
|
41
44
|
id: spec.id,
|
|
42
45
|
spec,
|
|
@@ -44,7 +47,8 @@ async function prepareItem(spec, context) {
|
|
|
44
47
|
size,
|
|
45
48
|
clip,
|
|
46
49
|
contentClip,
|
|
47
|
-
rect: { x: 0, y: 0, width: contentClip.width, height: contentClip.height }
|
|
50
|
+
rect: { x: 0, y: 0, width: contentClip.width, height: contentClip.height },
|
|
51
|
+
...turn ? { turn } : {}
|
|
48
52
|
};
|
|
49
53
|
await context.cache.prefetch(
|
|
50
54
|
tilesInRegion(pyramid, 0, clip).map((address) => {
|
|
@@ -80,35 +84,94 @@ function prepareMedia(spec, media) {
|
|
|
80
84
|
rect: { ...clip }
|
|
81
85
|
};
|
|
82
86
|
}
|
|
87
|
+
function turnOf(clip, { degrees, mirror }) {
|
|
88
|
+
const radians = degrees * Math.PI / 180;
|
|
89
|
+
const exact = (value) => Math.abs(value) < 1e-12 ? 0 : value;
|
|
90
|
+
const cos = exact(Math.cos(radians));
|
|
91
|
+
const sin = exact(Math.sin(radians));
|
|
92
|
+
const width = Math.abs(clip.width * cos) + Math.abs(clip.height * sin);
|
|
93
|
+
const height = Math.abs(clip.width * sin) + Math.abs(clip.height * cos);
|
|
94
|
+
const orient = compose(
|
|
95
|
+
translate(width / 2, height / 2),
|
|
96
|
+
{ a: cos, b: sin, c: -sin, d: cos, e: 0, f: 0 },
|
|
97
|
+
scale(mirror ? -1 : 1, 1),
|
|
98
|
+
translate(-(clip.x + clip.width / 2), -(clip.y + clip.height / 2))
|
|
99
|
+
);
|
|
100
|
+
return { orient, unorient: invert(orient), width, height };
|
|
101
|
+
}
|
|
102
|
+
function orientOf(item) {
|
|
103
|
+
var _a;
|
|
104
|
+
return ((_a = item.turn) == null ? void 0 : _a.orient) ?? translate(-item.clip.x, -item.clip.y);
|
|
105
|
+
}
|
|
106
|
+
function shownToPixels(item, rect) {
|
|
107
|
+
const { turn, clip } = item;
|
|
108
|
+
if (!turn) return { ...rect, x: clip.x + rect.x, y: clip.y + rect.y };
|
|
109
|
+
const box = transformRect(turn.unorient, rect);
|
|
110
|
+
const x = Math.max(box.x, clip.x);
|
|
111
|
+
const y = Math.max(box.y, clip.y);
|
|
112
|
+
return {
|
|
113
|
+
x,
|
|
114
|
+
y,
|
|
115
|
+
width: Math.max(0, Math.min(box.x + box.width, clip.x + clip.width) - x),
|
|
116
|
+
height: Math.max(0, Math.min(box.y + box.height, clip.y + clip.height) - y)
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function shownPointToPixels(item, point) {
|
|
120
|
+
const { turn, clip } = item;
|
|
121
|
+
return turn ? apply(turn.unorient, point) : { x: clip.x + point.x, y: clip.y + point.y };
|
|
122
|
+
}
|
|
123
|
+
function shownContent(item) {
|
|
124
|
+
const { turn, clip, contentClip } = item;
|
|
125
|
+
if (!turn) return contentClip;
|
|
126
|
+
return {
|
|
127
|
+
width: turn.width * contentClip.width / clip.width,
|
|
128
|
+
height: turn.height * contentClip.height / clip.height
|
|
129
|
+
};
|
|
130
|
+
}
|
|
83
131
|
function layoutItems(items) {
|
|
84
132
|
if (!items.length) return null;
|
|
85
133
|
if (items.every((item) => item.spec.placement)) {
|
|
86
134
|
for (const item of items) item.rect = { ...item.spec.placement };
|
|
87
135
|
return union(items.map((item) => item.rect));
|
|
88
136
|
}
|
|
89
|
-
const height = items[0].
|
|
137
|
+
const height = shownContent(items[0]).height;
|
|
90
138
|
let x = 0;
|
|
91
139
|
for (const item of items) {
|
|
92
|
-
const
|
|
140
|
+
const shown = shownContent(item);
|
|
141
|
+
const width = shown.width * height / shown.height;
|
|
93
142
|
item.rect = { x, y: 0, width, height };
|
|
94
143
|
x += width;
|
|
95
144
|
}
|
|
96
145
|
return { x: 0, y: 0, width: x, height };
|
|
97
146
|
}
|
|
98
147
|
function pixelsToWorld(item) {
|
|
148
|
+
const shown = item.turn ?? item.clip;
|
|
99
149
|
return {
|
|
100
|
-
x: item.rect.width /
|
|
101
|
-
y: item.rect.height /
|
|
150
|
+
x: item.rect.width / shown.width,
|
|
151
|
+
y: item.rect.height / shown.height
|
|
102
152
|
};
|
|
103
153
|
}
|
|
154
|
+
function itemToWorld(item) {
|
|
155
|
+
const k = pixelsToWorld(item);
|
|
156
|
+
return compose(
|
|
157
|
+
translate(item.rect.x, item.rect.y),
|
|
158
|
+
scale(k.x, k.y),
|
|
159
|
+
orientOf(item)
|
|
160
|
+
);
|
|
161
|
+
}
|
|
104
162
|
function sameSpec(a, b) {
|
|
105
163
|
var _a, _b;
|
|
106
|
-
return a.service === b.service && a.url === b.url && a.width === b.width && a.height === b.height && a.region === b.region && ((_a = a.media) == null ? void 0 : _a.element) === ((_b = b.media) == null ? void 0 : _b.element) && JSON.stringify(a.placement) === JSON.stringify(b.placement);
|
|
164
|
+
return a.service === b.service && a.url === b.url && a.width === b.width && a.height === b.height && a.region === b.region && a.rotation === b.rotation && ((_a = a.media) == null ? void 0 : _a.element) === ((_b = b.media) == null ? void 0 : _b.element) && JSON.stringify(a.placement) === JSON.stringify(b.placement);
|
|
107
165
|
}
|
|
108
166
|
export {
|
|
109
167
|
MEDIA_KEY_PREFIX,
|
|
168
|
+
itemToWorld,
|
|
110
169
|
layoutItems,
|
|
170
|
+
orientOf,
|
|
111
171
|
pixelsToWorld,
|
|
112
172
|
prepareItem,
|
|
113
|
-
sameSpec
|
|
173
|
+
sameSpec,
|
|
174
|
+
shownPointToPixels,
|
|
175
|
+
shownToPixels,
|
|
176
|
+
turnOf
|
|
114
177
|
};
|
package/dist/lib/time.mjs
CHANGED
|
@@ -15,7 +15,17 @@ function playFrom(element, seconds) {
|
|
|
15
15
|
} catch {
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
function parseTime(t) {
|
|
19
|
+
if (!t) return void 0;
|
|
20
|
+
const [rawStart, rawEnd] = t.split(",");
|
|
21
|
+
const start = Number(rawStart);
|
|
22
|
+
if (rawStart === "" || Number.isNaN(start)) return void 0;
|
|
23
|
+
if (rawEnd === void 0 || rawEnd === "") return { start };
|
|
24
|
+
const end = Number(rawEnd);
|
|
25
|
+
return Number.isNaN(end) ? { start } : { start, end };
|
|
26
|
+
}
|
|
18
27
|
export {
|
|
19
28
|
formatTime,
|
|
29
|
+
parseTime,
|
|
20
30
|
playFrom
|
|
21
31
|
};
|
package/dist/map/index.d.mts
CHANGED
|
@@ -9,7 +9,8 @@ import React from 'react';
|
|
|
9
9
|
* Every resource is upgraded to Presentation 4 on the way in, so no part is written for
|
|
10
10
|
* several shapes. Presentation 2.1 and 3.0 are upgraded by `@iiif/parser`; Presentation 4
|
|
11
11
|
* passes through untouched. The upgrader is imported on demand, so it costs nothing until
|
|
12
|
-
* the first resource that needs it arrives
|
|
12
|
+
* the first resource that needs it arrives, and its reader of Presentation 2 only with
|
|
13
|
+
* the first resource in 2.
|
|
13
14
|
*/
|
|
14
15
|
export type Manifest = P4.Manifest;
|
|
15
16
|
export type Presentation4Collection = P4.Collection;
|
|
@@ -56,6 +57,12 @@ export interface MapFeature {
|
|
|
56
57
|
title?: string;
|
|
57
58
|
titleLang?: string;
|
|
58
59
|
canvasId?: string;
|
|
60
|
+
/** The annotation it is a body of (Cookbook 0139), which a press on it selects. */
|
|
61
|
+
annotationId?: string;
|
|
62
|
+
/** The Collection's member it locates (Cookbook 0318), which a press on it opens. */
|
|
63
|
+
manifestId?: string;
|
|
64
|
+
/** Its owner's `navDate`, as written, shown with its name (Cookbook 0318). */
|
|
65
|
+
navDate?: string;
|
|
59
66
|
};
|
|
60
67
|
}
|
|
61
68
|
export interface MapFeatureCollection {
|
|
@@ -84,10 +91,13 @@ export interface Georeference {
|
|
|
84
91
|
}
|
|
85
92
|
export type Json = Record<string, any>;
|
|
86
93
|
/**
|
|
87
|
-
* Every navPlace feature of the Root's resource: the Collection's,
|
|
94
|
+
* Every navPlace feature of the Root's resource: the Collection's, each of its members'
|
|
95
|
+
* (Cookbook 0318: a Collection of Manifests, each where it is), the Manifest's, each
|
|
88
96
|
* Canvas's, and each loaded annotation's (its `navPlace`, or a GeoJSON body as Cookbook
|
|
89
|
-
* 0139 has). A feature from a
|
|
90
|
-
* Manifest
|
|
97
|
+
* 0139 has). A feature from a member names that member, the open one's place its own
|
|
98
|
+
* Manifest's where it gives one, in the member's place in the Collection's order; one
|
|
99
|
+
* from a Canvas or annotation names that Canvas. Memoized on the Manifest (and the
|
|
100
|
+
* Collection), so the same collection comes back while nothing changes.
|
|
91
101
|
*/
|
|
92
102
|
export declare function navPlaceOf(manifest: Manifest | null, collection?: Presentation4Collection | null, language?: string): MapFeatureCollection;
|
|
93
103
|
/**
|
|
@@ -182,6 +192,18 @@ export interface MapProps extends Omit<React.HTMLAttributes<HTMLElement>, "onSel
|
|
|
182
192
|
request?: CloverRequest;
|
|
183
193
|
/** Standalone: the language to read IIIF text in. */
|
|
184
194
|
language?: string;
|
|
195
|
+
/**
|
|
196
|
+
* Clover's higher-contrast mode: the accent kept to rings, outlines and marks, and never
|
|
197
|
+
* under words or a glyph, where the controls' dark fill takes its place, edged in the
|
|
198
|
+
* accent. Inside a `Root`, the Root's too; on wherever the reader's system asks for more
|
|
199
|
+
* contrast. Default `false`.
|
|
200
|
+
*/
|
|
201
|
+
highContrast?: boolean;
|
|
202
|
+
/**
|
|
203
|
+
* The basemap's credits, behind an ⓘ in the map's lower corner. Default true. A basemap's license
|
|
204
|
+
* may ask for its credits: give them on the page yourself before setting this false.
|
|
205
|
+
*/
|
|
206
|
+
credits?: boolean;
|
|
185
207
|
as?: React.ElementType;
|
|
186
208
|
}
|
|
187
209
|
declare const CloverMap: React.ForwardRefExoticComponent<MapProps & React.RefAttributes<HTMLElement>>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { loadManifest } from "../core/load.mjs";
|
|
3
|
+
const fetched = /* @__PURE__ */ new WeakMap();
|
|
4
|
+
function fetchManifest(clover, id) {
|
|
5
|
+
let byId = fetched.get(clover);
|
|
6
|
+
if (!byId) fetched.set(clover, byId = /* @__PURE__ */ new Map());
|
|
7
|
+
let manifest = byId.get(id);
|
|
8
|
+
if (!manifest) {
|
|
9
|
+
manifest = loadManifest(
|
|
10
|
+
{ id, type: "Manifest" },
|
|
11
|
+
{ request: clover.request }
|
|
12
|
+
).catch(() => null);
|
|
13
|
+
byId.set(id, manifest);
|
|
14
|
+
}
|
|
15
|
+
return manifest;
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
fetchManifest
|
|
19
|
+
};
|