@nulib/clover 4.4.2 → 4.5.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 +2 -2
- package/dist/components/Annotations/Annotations.mjs +11 -5
- package/dist/components/Items/Items.mjs +15 -5
- package/dist/components/Items/PagerLayout.mjs +1 -0
- package/dist/components/Map/MapView.mjs +1 -1
- package/dist/components/Panel/About.mjs +16 -5
- package/dist/components/Panel/AboutActions.mjs +10 -16
- package/dist/components/Panel/LanguageToggle.mjs +69 -0
- package/dist/components/Panel/Panel.mjs +9 -1
- package/dist/components/Panel/ReadingLanguages.mjs +2 -16
- package/dist/components/Panel/sections.mjs +6 -1
- package/dist/components/Root/useRootState.mjs +43 -4
- package/dist/components/Search/Search.mjs +10 -7
- package/dist/components/Transcript/Transcript.mjs +42 -33
- package/dist/core/image-service-content.mjs +108 -0
- package/dist/core/load.mjs +38 -1
- package/dist/i18n/config.mjs +88 -14
- package/dist/i18n/languages.mjs +42 -8
- package/dist/i18n/locales/index.mjs +4 -1
- package/dist/i18n/locales/ja.json.mjs +5 -0
- package/dist/i18n/locales/zh-Hans.json.mjs +5 -0
- package/dist/i18n/locales/zh-Hant.json.mjs +5 -0
- package/dist/index.d.mts +109 -24
- package/dist/lib/renderer/CanvasRenderer.mjs +20 -5
- package/dist/map/index.d.mts +3 -2
- package/dist/react/readingLanguages.mjs +15 -2
- package/dist/styles/default.css +1 -1
- package/dist/styles/items.css +1 -1
- package/dist/styles/panel.css +1 -1
- package/dist/styles.css +1 -1
- package/dist/templates/default/Default.mjs +2 -0
- package/dist/templates/document/Document.mjs +5 -1
- package/dist/templates/gallery/Gallery.mjs +2 -0
- package/dist/templates/index.d.mts +53 -11
- package/dist/templates/shared/LightboxView.mjs +2 -0
- package/dist/ui/GlobeGlyph.mjs +26 -0
- package/dist/ui/LanguageChoice.mjs +87 -20
- package/dist/ui/LanguageMenu.mjs +94 -0
- package/dist/ui/useScrollTrack.mjs +34 -19
- package/dist/web-components/About-BklM8JA9.mjs +1 -0
- package/dist/web-components/AnnotationItems-4mbvOrhN.mjs +1 -0
- package/dist/web-components/{AnnotationMenu-BiM0n-6H.mjs → AnnotationMenu-DtMaxXf5.mjs} +1 -1
- package/dist/web-components/AnnotationState-BuEpq99k.mjs +1 -0
- package/dist/web-components/Annotations-Dyg-RAdd.mjs +2 -0
- package/dist/web-components/{Annotations-x5H_Vls9.mjs → Annotations-oPabBO7j.mjs} +1 -1
- package/dist/web-components/{Body-BWOsHKU1.mjs → Body-CD7AtOPv.mjs} +1 -1
- package/dist/web-components/{BodyAlert-DYfrepDo.mjs → BodyAlert-DzW4__bK.mjs} +1 -1
- package/dist/web-components/{Button-Ch0E6GVj.mjs → Button-1To2Pwuz.mjs} +1 -1
- package/dist/web-components/{Camera-CY4adJpn.mjs → Camera-B82ZMekU.mjs} +1 -1
- package/dist/web-components/{Canvas2DBackend-eFcDTxq6.mjs → Canvas2DBackend-Ds-qoQ0W.mjs} +1 -1
- package/dist/web-components/{CanvasView-BqsXUI8n.mjs → CanvasView-B4fnYim4.mjs} +2 -2
- package/dist/web-components/{CaptionDetails-CuYSbD70.mjs → CaptionDetails-TTAEPH02.mjs} +1 -1
- package/dist/web-components/{ChaptersMenu-IlAt1pp2.mjs → ChaptersMenu-DhbAktrS.mjs} +1 -1
- package/dist/web-components/{Chevron-uZe3N2Pt.mjs → Chevron-Br3zRRMX.mjs} +1 -1
- package/dist/web-components/{ChoiceMenu-DBJynLGl.mjs → ChoiceMenu-B4_doj7b.mjs} +1 -1
- package/dist/web-components/{Collection-C1sRlJK1.mjs → Collection-DrMfq53r.mjs} +1 -1
- package/dist/web-components/{CollectionSelect-BYMQaanx.mjs → CollectionSelect-PP7IEcwu.mjs} +1 -1
- package/dist/web-components/{Connected-Bd2T2EUc.mjs → Connected-BOPNEv3j.mjs} +1 -1
- package/dist/web-components/{Connected-Dpp3iO3D.mjs → Connected-BguZSgy4.mjs} +1 -1
- package/dist/web-components/{Connected-Ckar86TI.mjs → Connected-CN94wOYw.mjs} +1 -1
- package/dist/web-components/{Contents-DjtD3iKA.mjs → Contents-Dn7MutL9.mjs} +1 -1
- package/dist/web-components/{ControlMenu-CaD8Frag.mjs → ControlMenu-DlP3JsqV.mjs} +1 -1
- package/dist/web-components/ControlsFade-Cuh5Mqe7.mjs +1 -0
- package/dist/web-components/{CountMenu-DBiLd3X6.mjs → CountMenu-Aoott7Hu.mjs} +1 -1
- package/dist/web-components/Cue-BAj92VWz.mjs +1 -0
- package/dist/web-components/Document-BjTWX_7P.mjs +1 -0
- package/dist/web-components/{DomLayers-DXbbsOVO.mjs → DomLayers-GnBlZ7yI.mjs} +1 -1
- package/dist/web-components/{Download-CgRv1Jio.mjs → Download-C1RNBLdn.mjs} +1 -1
- package/dist/web-components/{EntryBodies-DnXLIVR-.mjs → EntryBodies-BG4F8uub.mjs} +1 -1
- package/dist/web-components/{EntryThumbnail-BtRvqME5.mjs → EntryThumbnail-BJPQwkQw.mjs} +1 -1
- package/dist/web-components/{FieldPill-CmagfxvU.mjs → FieldPill-CgMPW9BB.mjs} +1 -1
- package/dist/web-components/{FrameAnimation-DmqYAi-M.mjs → FrameAnimation-DWd0yBuN.mjs} +1 -1
- package/dist/web-components/Gallery-DpJqgaft.mjs +1 -0
- package/dist/web-components/GlobeGlyph-CLM28n1E.mjs +1 -0
- package/dist/web-components/{HideToggle-aDBXi6F0.mjs → HideToggle-C4mW4-CK.mjs} +1 -1
- package/dist/web-components/{ImageControls-CdEwkNkw.mjs → ImageControls-B36Hng03.mjs} +1 -1
- package/dist/web-components/Items-BApzELFW.mjs +1 -0
- package/dist/web-components/Label-CRTQApU-.mjs +1 -0
- package/dist/web-components/LanguageChoice-B1941Wuu.mjs +1 -0
- package/dist/web-components/LanguageMenu-yWDzK3U0.mjs +1 -0
- package/dist/web-components/LightboxView-BLHI5EIj.mjs +1 -0
- package/dist/web-components/{ListEnd-D1Y0rzNK.mjs → ListEnd-CIiLZZzc.mjs} +1 -1
- package/dist/web-components/{Loaded-Bebqgt6V.mjs → Loaded-X_Pr53fq.mjs} +1 -1
- package/dist/web-components/LoadedCanvas-1Bi6-QtF.mjs +1 -0
- package/dist/web-components/LoadedMap-58bpxj_6.mjs +1 -0
- package/dist/web-components/{Loading-B5lpxt7E.mjs → Loading-CyoVEwax.mjs} +1 -1
- package/dist/web-components/{Map-DsHQLS6G.mjs → Map-2oeDIJzq.mjs} +1 -1
- package/dist/web-components/MapView-DX3ZLqmp.mjs +3 -0
- package/dist/web-components/{Markup-CQb91uB6.mjs → Markup-B2GbrisO.mjs} +1 -1
- package/dist/web-components/{MediaBody-CuCVF-N7.mjs → MediaBody-DZ9JgkKF.mjs} +1 -1
- package/dist/web-components/{MediaBody-BbipyE0n.mjs → MediaBody-eFAZIyGv.mjs} +1 -1
- package/dist/web-components/{NavDate-CjJTuBbs.mjs → NavDate-BwV4kPl-.mjs} +1 -1
- package/dist/web-components/{Navigator-BKVI3csP.mjs → Navigator-CTrfNuwj.mjs} +1 -1
- package/dist/web-components/{Pager-CTvxvbel.mjs → Pager-BGjj90LQ.mjs} +1 -1
- package/dist/web-components/PagerLayout-Ce7zW_yB.mjs +1 -0
- package/dist/web-components/Panel-77xi6y2C.mjs +1 -0
- package/dist/web-components/PanelPart-Cm9VykIu.mjs +1 -0
- package/dist/web-components/{PanelToggle-Dsp3JD1s.mjs → PanelToggle-Cj_FjIgS.mjs} +1 -1
- package/dist/web-components/{PartOfManifest-Bu5XTdcH.mjs → PartOfManifest-B0RwR4iy.mjs} +1 -1
- package/dist/web-components/{Pending-C7ZSt2eL.mjs → Pending-s7yYnZzR.mjs} +1 -1
- package/dist/web-components/{PlaceBox-PwpqCwOS.mjs → PlaceBox-pt7Vmrs1.mjs} +1 -1
- package/dist/web-components/{Placeholder-B_DxAE6y.mjs → Placeholder-BK-eqSCl.mjs} +1 -1
- package/dist/web-components/{Position-CQ7FBqd0.mjs → Position-CKsSKMgZ.mjs} +1 -1
- package/dist/web-components/Primitives-T7usOLie.mjs +1 -0
- package/dist/web-components/Provider-B2k1G-E0.mjs +1 -0
- package/dist/web-components/{ReadMore-0vMRgzA8.mjs → ReadMore-Cs2t9xkI.mjs} +1 -1
- package/dist/web-components/Root-D942bSXu.mjs +1 -0
- package/dist/web-components/Scene-Cwzisn4E.mjs +1 -0
- package/dist/web-components/{SceneView-DSUVfGQR.mjs → SceneView-_CNm8cGL.mjs} +1 -1
- package/dist/web-components/Search-u43mfzT8.mjs +1 -0
- package/dist/web-components/{Sections-BdEZZD0J.mjs → Sections-CPU5bGvk.mjs} +1 -1
- package/dist/web-components/{SeekMarks-ByDBrurH.mjs → SeekMarks-CnqVS-ym.mjs} +1 -1
- package/dist/web-components/StandaloneItems-D9Og9pdI.mjs +1 -0
- package/dist/web-components/{Status-CK2v5LdZ.mjs → Status-Cxev3WuC.mjs} +1 -1
- package/dist/web-components/{Steps-DlYRgYiS.mjs → Steps-l7_NsIBr.mjs} +1 -1
- package/dist/web-components/{TargetItems-B0ZkDWAH.mjs → TargetItems-nP3Oa9hh.mjs} +1 -1
- package/dist/web-components/Timeline-C1g1MXp5.mjs +1 -0
- package/dist/web-components/{Tip-BPxXnFcb.mjs → Tip-D2pR3HW4.mjs} +1 -1
- package/dist/web-components/Transcript-D_a9jio-.mjs +1 -0
- package/dist/web-components/{Transport-nQ1ytZeY.mjs → Transport-CowDRPK7.mjs} +1 -1
- package/dist/web-components/{Transport-Cc1VnGe1.mjs → Transport-uqpqUIKE.mjs} +1 -1
- package/dist/web-components/{annotation-collection-JrLc_Org.mjs → annotation-collection-d6JyHnML.mjs} +1 -1
- package/dist/web-components/{annotation-name-WwXE5c2m.mjs → annotation-name-BWTrB9nK.mjs} +1 -1
- package/dist/web-components/{annotations-content-G5YUyhp2.mjs → annotations-content-Bomfao_5.mjs} +1 -1
- package/dist/web-components/{body-BvY3Vpf_.mjs → body-Dfn0GJa2.mjs} +1 -1
- package/dist/web-components/{canvas-CaNpS96c.mjs → canvas-DHIn2DIV.mjs} +1 -1
- package/dist/web-components/{cloverEngine-Cpp8BjZa.mjs → cloverEngine-DDVOcZTv.mjs} +1 -1
- package/dist/web-components/{content-state-reader-DakKAf36.mjs → content-state-reader-CyNkhTZY.mjs} +1 -1
- package/dist/web-components/{controlGlyphs-bqWNGQ1-.mjs → controlGlyphs-Dymy1PkA.mjs} +1 -1
- package/dist/web-components/{controls-Db0929rf.mjs → controls-CIkf2UoE.mjs} +1 -1
- package/dist/web-components/custom-elements.json +35 -3
- package/dist/web-components/downloads-DCsDCcA8.mjs +1 -0
- package/dist/web-components/{dragToClose-D5AN98l4.mjs → dragToClose-BKcu5guw.mjs} +1 -1
- package/dist/web-components/{engine-B1m2m56g.mjs → engine-BhdQsvOB.mjs} +1 -1
- package/dist/web-components/{engines-CBm3cDwx.mjs → engines-pnfVMoUH.mjs} +1 -1
- package/dist/web-components/{fetchManifest-lvHWlQYu.mjs → fetchManifest-QmVIeaHo.mjs} +1 -1
- package/dist/web-components/{fromManifest-ZbH8cYoN.mjs → fromManifest-CvXwGGRI.mjs} +1 -1
- package/dist/web-components/{glyphs-BtnJwbd5.mjs → glyphs-BAh9Lia0.mjs} +1 -1
- package/dist/web-components/hooks-CTqjdpYl.mjs +1 -0
- package/dist/web-components/{image-layers-DjUA6eWF.mjs → image-layers-Dp2qOSA5.mjs} +1 -1
- package/dist/web-components/image-service-content-B5ICMeIO.mjs +1 -0
- package/dist/web-components/{imageService-B9yNXMcD.mjs → imageService-XKWMYAcG.mjs} +1 -1
- package/dist/web-components/index-BuoWCrun.mjs +1 -0
- package/dist/web-components/index.mjs +1 -1
- package/dist/web-components/items-8ZEJCxWU.mjs +1 -0
- package/dist/web-components/items-DjpIYUxD.mjs +1 -0
- package/dist/web-components/ja-Cg1enUhM.mjs +1 -0
- package/dist/web-components/label-BWHRHAY2.mjs +1 -0
- package/dist/web-components/layout-B3HyDCsP.mjs +1 -0
- package/dist/web-components/{link-BhvZNgtv.mjs → link-Mnt5GrKM.mjs} +1 -1
- package/dist/web-components/logo-YR9jXUE4.mjs +1 -0
- package/dist/web-components/{models-CIHL07o7.mjs → models-NfaX6B8u.mjs} +1 -1
- package/dist/web-components/{nodes-TS4tB7cC.mjs → nodes-CRrc5Svn.mjs} +1 -1
- package/dist/web-components/{overlayImage-B3ItMjXk.mjs → overlayImage-D7Knsh4X.mjs} +1 -1
- package/dist/web-components/{panel-M3PpVN7f.mjs → panel-DUMFdAc8.mjs} +1 -1
- package/dist/web-components/part-C_V28rvN.mjs +1 -0
- package/dist/web-components/{playerSurface-BGgYHT2u.mjs → playerSurface-CF5g-4Po.mjs} +1 -1
- package/dist/web-components/{pointer-J2gT4W9m.mjs → pointer-PJLHbbSD.mjs} +1 -1
- package/dist/web-components/{provider-CdJfEMUj.mjs → provider-b4id5kCa.mjs} +1 -1
- package/dist/web-components/{range-regions-DxSIpIVo.mjs → range-regions-DCY76ydS.mjs} +1 -1
- package/dist/web-components/{read-more-wCGc6ELt.mjs → read-more-UM90-AEc.mjs} +1 -1
- package/dist/web-components/readingLanguages-Qdn21-7Q.mjs +1 -0
- package/dist/web-components/rendererSurface-PZlq-wa_.mjs +22 -0
- package/dist/web-components/{renderers-zAtpns1S.mjs → renderers-DIHonXTq.mjs} +1 -1
- package/dist/web-components/resource-BlU2Ese6.mjs +1 -0
- package/dist/web-components/{save-file-DquBqxrS.mjs → save-file-GI0ekTmd.mjs} +1 -1
- package/dist/web-components/{search-ChOKTYz9.mjs → search-CHjjiXkB.mjs} +1 -1
- package/dist/web-components/shared-DgJ0bXca.mjs +1 -0
- package/dist/web-components/{show-link-Dry4M5w1.mjs → show-link-BlLkTYtm.mjs} +1 -1
- package/dist/web-components/{sizedImage-CjFqzhUE.mjs → sizedImage-BoGT1x5n.mjs} +1 -1
- package/dist/web-components/{split-88HcOLCm.mjs → split-OO6-WiG3.mjs} +1 -1
- package/dist/web-components/{status-BNrkhMe7.mjs → status-CSenPCO4.mjs} +1 -1
- package/dist/web-components/styles-Bvw9LFU7.mjs +1 -0
- package/dist/web-components/three.mjs +1 -1
- package/dist/web-components/{thumbnail-CoFd2duc.mjs → thumbnail-DYJHCrW_.mjs} +1 -1
- package/dist/web-components/{tip-BCClTo0G.mjs → tip-Dr1mfd4o.mjs} +1 -1
- package/dist/web-components/{toggle-DavvlVdF.mjs → toggle-86lqpaU9.mjs} +1 -1
- package/dist/web-components/{useContainerName-B_Kzx2Wp.mjs → useContainerName-BfNL6p3O.mjs} +1 -1
- package/dist/web-components/{useControlsVisibility-BdD2byHj.mjs → useControlsVisibility-C3LCnrb7.mjs} +1 -1
- package/dist/web-components/{useNearViewport-Bj8qJEA0.mjs → useNearViewport-Dk5q1rzk.mjs} +1 -1
- package/dist/web-components/useScrollTrack-B_yYmQDS.mjs +1 -0
- package/dist/web-components/viewer/{AnnotationItems-3Sf8MxRQ.mjs → AnnotationItems-BbPnS9EE.mjs} +1 -1
- package/dist/web-components/viewer/{AnnotationMenu-_xBnZtm1.mjs → AnnotationMenu-BGv-HimF.mjs} +1 -1
- package/dist/web-components/viewer/AnnotationState-uRm7bEwg.mjs +1 -0
- package/dist/web-components/viewer/{Annotations-24ComVk9.mjs → Annotations-_2PMmUfu.mjs} +1 -1
- package/dist/web-components/viewer/Annotations-reaO1ILe.mjs +2 -0
- package/dist/web-components/viewer/{Canvas2DBackend-DPWYD9ST.mjs → Canvas2DBackend-Dru1ImJh.mjs} +1 -1
- package/dist/web-components/viewer/CaptionDetails-3OlEaKmX.mjs +1 -0
- package/dist/web-components/viewer/{ChaptersMenu-C5J0d8Ck.mjs → ChaptersMenu-kchuXDZy.mjs} +1 -1
- package/dist/web-components/viewer/{ChoiceMenu-B8iukYiR.mjs → ChoiceMenu-C8pEoSC6.mjs} +1 -1
- package/dist/web-components/viewer/{Collection-CPVQ3JtI.mjs → Collection-B4LN_80C.mjs} +1 -1
- package/dist/web-components/viewer/{Connected-x3v9xr7x.mjs → Connected-80hCJuhg.mjs} +1 -1
- package/dist/web-components/viewer/{Connected-D5_bZzr5.mjs → Connected-CzPY2rgu.mjs} +1 -1
- package/dist/web-components/viewer/{Contents-Ma7oDW1R.mjs → Contents-D4jw_lGe.mjs} +1 -1
- package/dist/web-components/viewer/{ControlMenu-D2HokCqd.mjs → ControlMenu-C3Jh10iR.mjs} +1 -1
- package/dist/web-components/viewer/ControlsFade-BKkJ95B5.mjs +1 -0
- package/dist/web-components/viewer/{CountMenu-BnDN2b0n.mjs → CountMenu-Blz1oHgs.mjs} +1 -1
- package/dist/web-components/viewer/Cue-BnC9XuZp.mjs +1 -0
- package/dist/web-components/viewer/Document-BG0F97nL.mjs +1 -0
- package/dist/web-components/viewer/{DomLayers-BW2A4z82.mjs → DomLayers-BL6vNcmI.mjs} +1 -1
- package/dist/web-components/viewer/{Download-Cc_NA7QN.mjs → Download-B0BD_SzR.mjs} +1 -1
- package/dist/web-components/viewer/{EntryBodies-Bz69SWZh.mjs → EntryBodies-Cbmr-Eg4.mjs} +1 -1
- package/dist/web-components/viewer/{EntryThumbnail-C8cUA5qc.mjs → EntryThumbnail-DAdEyIuL.mjs} +1 -1
- package/dist/web-components/viewer/{FieldPill-BzKvMF-K.mjs → FieldPill-DNL96sDW.mjs} +1 -1
- package/dist/web-components/viewer/{FrameAnimation-DiQgfgri.mjs → FrameAnimation-BO3QVSUw.mjs} +1 -1
- package/dist/web-components/viewer/Gallery-DN7ajF4i.mjs +1 -0
- package/dist/web-components/viewer/GlobeGlyph-B-Wd0AkW.mjs +1 -0
- package/dist/web-components/viewer/{HideToggle-jg311sUK.mjs → HideToggle-DH0u1wFC.mjs} +1 -1
- package/dist/web-components/viewer/{ImageControls-8ZIWLAkf.mjs → ImageControls-Lz-ESk1X.mjs} +1 -1
- package/dist/web-components/viewer/LanguageChoice-BkQkSsPE.mjs +1 -0
- package/dist/web-components/viewer/LanguageMenu-gIJHQiBc.mjs +1 -0
- package/dist/web-components/viewer/LightboxView-D066VR5m.mjs +1 -0
- package/dist/web-components/viewer/{ListEnd-JjGQ_q6c.mjs → ListEnd-D4nNouKZ.mjs} +1 -1
- package/dist/web-components/viewer/{MapView-tAZ4vINr.mjs → MapView-C_8iciAK.mjs} +2 -2
- package/dist/web-components/viewer/{MediaBody-Da60tZIj.mjs → MediaBody-BgBDbfHg.mjs} +1 -1
- package/dist/web-components/viewer/{MediaBody-CQAJJpuz.mjs → MediaBody-D4hiLqhm.mjs} +1 -1
- package/dist/web-components/viewer/{NavDate-B7T2iPfP.mjs → NavDate-BMVT6UwB.mjs} +1 -1
- package/dist/web-components/viewer/{Navigator-sEfTvK-l.mjs → Navigator-DbBBbDZn.mjs} +1 -1
- package/dist/web-components/viewer/PagerLayout-D771pC5E.mjs +1 -0
- package/dist/web-components/viewer/PanelPart-2H7jd6PS.mjs +1 -0
- package/dist/web-components/viewer/{PartOfManifest-BYgk9r1j.mjs → PartOfManifest-BMaH_tsn.mjs} +1 -1
- package/dist/web-components/viewer/{PlaceBox-BBtsMTsl.mjs → PlaceBox-OytRM9_s.mjs} +1 -1
- package/dist/web-components/viewer/{Placeholder-5focqckW.mjs → Placeholder-BWuq47Sw.mjs} +1 -1
- package/dist/web-components/viewer/Search-Bmz7mUbA.mjs +1 -0
- package/dist/web-components/viewer/{SeekMarks-CUyvbMfC.mjs → SeekMarks-CAsMUj2N.mjs} +1 -1
- package/dist/web-components/viewer/{StandaloneItems-DsoMdwWS.mjs → StandaloneItems-BCHhR9sF.mjs} +1 -1
- package/dist/web-components/viewer/{Steps-zpuoH0K0.mjs → Steps-BDT2W9QN.mjs} +1 -1
- package/dist/web-components/viewer/{TargetItems-DIKBor9X.mjs → TargetItems-CkZbD8GE.mjs} +1 -1
- package/dist/web-components/viewer/Transcript-BbFXEJSc.mjs +1 -0
- package/dist/web-components/viewer/{Transport-BM3IMXDW.mjs → Transport-CI5UkA3K.mjs} +1 -1
- package/dist/web-components/viewer/{Transport-DMnPpTsQ.mjs → Transport-PgBpf33S.mjs} +1 -1
- package/dist/web-components/viewer/{annotation-collection-C_9c9NPs.mjs → annotation-collection-l4zuf56A.mjs} +1 -1
- package/dist/web-components/viewer/{annotation-name-jt1y3erg.mjs → annotation-name-CRl0w7NR.mjs} +1 -1
- package/dist/web-components/viewer/annotations-content-CYjPRTZn.mjs +1 -0
- package/dist/web-components/viewer/{cloverEngine-CVyaltw7.mjs → cloverEngine-2b_guC4P.mjs} +2 -2
- package/dist/web-components/viewer/{content-state-reader-DIcY4zWj.mjs → content-state-reader-Cm-rvusT.mjs} +1 -1
- package/dist/web-components/viewer/{dragToClose-D2h8gIpa.mjs → dragToClose-DXXIWV62.mjs} +1 -1
- package/dist/web-components/viewer/{fetchManifest-C66Fk39V.mjs → fetchManifest-DorkDXGC.mjs} +1 -1
- package/dist/web-components/viewer/{host-Fl21T-Pt.mjs → host-DscGC2S0.mjs} +1 -1
- package/dist/web-components/viewer/{image-layers-CpDOoRh9.mjs → image-layers-CZ9-efD2.mjs} +1 -1
- package/dist/web-components/viewer/image-service-content-C60w8IZm.mjs +1 -0
- package/dist/web-components/viewer/index.mjs +1 -1
- package/dist/web-components/viewer/{link-DlX6OdhG.mjs → link-CysSctMX.mjs} +1 -1
- package/dist/web-components/viewer/overlayImage-CwPnVnIi.mjs +1 -0
- package/dist/web-components/viewer/{range-regions--YB9ll1N.mjs → range-regions-C7ZBtSyb.mjs} +1 -1
- package/dist/web-components/viewer/{renderers-zvRp3xYJ.mjs → renderers-D4wJiQYv.mjs} +1 -1
- package/dist/web-components/viewer/{save-file-83yWcPHX.mjs → save-file-uqsNOVPU.mjs} +1 -1
- package/dist/web-components/viewer/{search-DDXsrZz3.mjs → search-CWuD5EZA.mjs} +1 -1
- package/dist/web-components/viewer/styles-BjjJM8OS.mjs +1 -0
- package/dist/web-components/viewer/{useControlsVisibility-CudUJBCj.mjs → useControlsVisibility-KTxa_3yJ.mjs} +1 -1
- package/dist/web-components/viewer/viewer-C3d_TgAI.mjs +29 -0
- package/dist/web-components/viewer/{vtt-D1xyC48J.mjs → vtt-DqtJ20x0.mjs} +1 -1
- package/dist/web-components/viewer-BoyWG64n.mjs +1 -0
- package/dist/web-components/{vtt-ChAUl4lm.mjs → vtt-BNuRzGap.mjs} +1 -1
- package/dist/web-components/zh-Hans-DnYm6PWu.mjs +1 -0
- package/dist/web-components/zh-Hant-DsxnuLPZ.mjs +1 -0
- package/package.json +1 -1
- package/dist/web-components/About-rhhglI1Z.mjs +0 -1
- package/dist/web-components/AnnotationItems-9o4vZn9M.mjs +0 -1
- package/dist/web-components/AnnotationState-BCfjI6kC.mjs +0 -1
- package/dist/web-components/Annotations-bAuL-Vo6.mjs +0 -2
- package/dist/web-components/ControlsFade-qs_zu-DZ.mjs +0 -1
- package/dist/web-components/Cue-CrlByfoX.mjs +0 -1
- package/dist/web-components/Document-C3K-CXHu.mjs +0 -1
- package/dist/web-components/Gallery-DMNATgzf.mjs +0 -1
- package/dist/web-components/Items-xeEzg7uu.mjs +0 -1
- package/dist/web-components/Label-7SZqCiYh.mjs +0 -1
- package/dist/web-components/LanguageChoice-DrIQjsPP.mjs +0 -1
- package/dist/web-components/LightboxView-BzxRQK6r.mjs +0 -1
- package/dist/web-components/LoadedCanvas-8To8LkUE.mjs +0 -1
- package/dist/web-components/LoadedMap-BmF3Gmnw.mjs +0 -1
- package/dist/web-components/MapView-DcLIazmJ.mjs +0 -3
- package/dist/web-components/PagerLayout-DR6V9wwv.mjs +0 -1
- package/dist/web-components/Panel-BBRkfdof.mjs +0 -1
- package/dist/web-components/PanelPart-Cdbsnr8P.mjs +0 -1
- package/dist/web-components/Primitives-D5lVsBs8.mjs +0 -1
- package/dist/web-components/Provider-B9X74RHz.mjs +0 -1
- package/dist/web-components/Root-COIMTFHh.mjs +0 -1
- package/dist/web-components/Scene-DjUgqzXR.mjs +0 -1
- package/dist/web-components/Search-DOitIwis.mjs +0 -1
- package/dist/web-components/StandaloneItems-DATV9XoT.mjs +0 -1
- package/dist/web-components/Timeline-D-FevrUe.mjs +0 -1
- package/dist/web-components/Transcript-BLm9tljk.mjs +0 -1
- package/dist/web-components/downloads-CGkM4OSO.mjs +0 -1
- package/dist/web-components/hooks-BLpTDu28.mjs +0 -1
- package/dist/web-components/index-2F1l5TLi.mjs +0 -1
- package/dist/web-components/items-C56FfpBX.mjs +0 -1
- package/dist/web-components/items-DlG6IYqm.mjs +0 -1
- package/dist/web-components/label-DJ-Udq1e.mjs +0 -1
- package/dist/web-components/layout-Dh0myod-.mjs +0 -1
- package/dist/web-components/logo-k93ZgyqF.mjs +0 -1
- package/dist/web-components/part-Df1Vr2Ss.mjs +0 -1
- package/dist/web-components/readingLanguages-DmZ8CHoc.mjs +0 -1
- package/dist/web-components/rendererSurface-Bk7SHYws.mjs +0 -22
- package/dist/web-components/resource-Cb3AnAXL.mjs +0 -1
- package/dist/web-components/shared-D4j4IirO.mjs +0 -1
- package/dist/web-components/styles-Ca564vB9.mjs +0 -1
- package/dist/web-components/useScrollTrack-DBIW4pCJ.mjs +0 -1
- package/dist/web-components/viewer/AnnotationState-o4goI6T-.mjs +0 -1
- package/dist/web-components/viewer/Annotations-CJamLUnL.mjs +0 -2
- package/dist/web-components/viewer/CaptionDetails-DNPq32gk.mjs +0 -1
- package/dist/web-components/viewer/ControlsFade-JoRgQt8U.mjs +0 -1
- package/dist/web-components/viewer/Cue-FHw5d8zO.mjs +0 -1
- package/dist/web-components/viewer/Document-DiXiOkPn.mjs +0 -1
- package/dist/web-components/viewer/Gallery-BYmzAEuZ.mjs +0 -1
- package/dist/web-components/viewer/LanguageChoice-BXXMBe-A.mjs +0 -1
- package/dist/web-components/viewer/LightboxView-DnN0fkeg.mjs +0 -1
- package/dist/web-components/viewer/PagerLayout-B4C72jTV.mjs +0 -1
- package/dist/web-components/viewer/PanelPart-Di406l-a.mjs +0 -1
- package/dist/web-components/viewer/Search-DbHlUxOS.mjs +0 -1
- package/dist/web-components/viewer/Transcript-B_puRtfb.mjs +0 -1
- package/dist/web-components/viewer/annotations-content-Dg8h7vJX.mjs +0 -1
- package/dist/web-components/viewer/overlayImage-yGXMVHgX.mjs +0 -1
- package/dist/web-components/viewer/styles-04jB_4IT.mjs +0 -1
- package/dist/web-components/viewer/viewer-0aUYzmQj.mjs +0 -29
- package/dist/web-components/viewer-B_5rFgy5.mjs +0 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { parseInfo, imageRequestUrl } from "../lib/renderer/sources/imageService.mjs";
|
|
3
|
+
import { toPresentation4 } from "./presentation.mjs";
|
|
4
|
+
function fittedSize(info) {
|
|
5
|
+
const { width, height, maxWidth, maxHeight, maxArea } = info;
|
|
6
|
+
const fits = (w, h) => (!maxWidth || w <= maxWidth) && (!maxHeight || h <= maxHeight) && (!maxArea || w * h <= maxArea);
|
|
7
|
+
if (fits(width, height)) return { width, height };
|
|
8
|
+
const listed = info.sizes.filter((size) => fits(size.width, size.height));
|
|
9
|
+
if (listed.length) return listed[listed.length - 1];
|
|
10
|
+
if (!info.sizeByW) return { width, height };
|
|
11
|
+
const scale = Math.min(
|
|
12
|
+
maxWidth ? maxWidth / width : 1,
|
|
13
|
+
maxHeight ? maxHeight / height : 1,
|
|
14
|
+
maxArea ? Math.sqrt(maxArea / (width * height)) : 1
|
|
15
|
+
);
|
|
16
|
+
return {
|
|
17
|
+
width: Math.max(1, Math.floor(width * scale)),
|
|
18
|
+
height: Math.max(1, Math.floor(height * scale))
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function thumbnailSize(info, edge = 200) {
|
|
22
|
+
return info.sizes.find((size) => Math.max(size.width, size.height) >= edge) ?? fittedSize(info);
|
|
23
|
+
}
|
|
24
|
+
const FORMATS = {
|
|
25
|
+
jpg: "image/jpeg",
|
|
26
|
+
png: "image/png",
|
|
27
|
+
webp: "image/webp",
|
|
28
|
+
gif: "image/gif"
|
|
29
|
+
};
|
|
30
|
+
function imageBody(info, service, size) {
|
|
31
|
+
const whole = { x: 0, y: 0, width: info.width, height: info.height };
|
|
32
|
+
return {
|
|
33
|
+
id: imageRequestUrl(info, whole, size.width, size.height),
|
|
34
|
+
type: "Image",
|
|
35
|
+
format: FORMATS[info.format] ?? "image/jpeg",
|
|
36
|
+
width: size.width,
|
|
37
|
+
height: size.height,
|
|
38
|
+
service: [service]
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function serviceEntry(doc, info) {
|
|
42
|
+
if (info.version === 3) {
|
|
43
|
+
return {
|
|
44
|
+
id: info.id,
|
|
45
|
+
type: "ImageService3",
|
|
46
|
+
profile: typeof doc.profile === "string" ? doc.profile : "level0"
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const profile = [].concat(doc.profile ?? []).find((value) => typeof value === "string");
|
|
50
|
+
return {
|
|
51
|
+
"@id": info.id,
|
|
52
|
+
"@type": "ImageService2",
|
|
53
|
+
profile: profile ?? "http://iiif.io/api/image/2/level0.json"
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async function imageServiceContent(json, requestedId) {
|
|
57
|
+
const info = parseInfo(json, requestedId);
|
|
58
|
+
const service = serviceEntry(json, info);
|
|
59
|
+
const canvasId = `${info.id}/canvas`;
|
|
60
|
+
const rights = [json.rights, json.license].flat().find((value) => typeof value === "string");
|
|
61
|
+
const attribution = json.attribution;
|
|
62
|
+
const manifest = {
|
|
63
|
+
"@context": "http://iiif.io/api/presentation/3/context.json",
|
|
64
|
+
id: info.id,
|
|
65
|
+
type: "Manifest",
|
|
66
|
+
label: { none: [""] },
|
|
67
|
+
thumbnail: [imageBody(info, service, thumbnailSize(info))],
|
|
68
|
+
items: [
|
|
69
|
+
{
|
|
70
|
+
id: canvasId,
|
|
71
|
+
type: "Canvas",
|
|
72
|
+
width: info.width,
|
|
73
|
+
height: info.height,
|
|
74
|
+
items: [
|
|
75
|
+
{
|
|
76
|
+
id: `${canvasId}/page`,
|
|
77
|
+
type: "AnnotationPage",
|
|
78
|
+
items: [
|
|
79
|
+
{
|
|
80
|
+
id: `${canvasId}/page/image`,
|
|
81
|
+
type: "Annotation",
|
|
82
|
+
motivation: "painting",
|
|
83
|
+
body: imageBody(info, service, fittedSize(info)),
|
|
84
|
+
target: canvasId
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
};
|
|
92
|
+
if (rights) manifest.rights = rights;
|
|
93
|
+
if (attribution) {
|
|
94
|
+
manifest.requiredStatement = {
|
|
95
|
+
label: { en: ["Attribution"] },
|
|
96
|
+
value: {
|
|
97
|
+
none: [].concat(attribution).map(
|
|
98
|
+
(value) => typeof value === "string" ? value : String((value == null ? void 0 : value["@value"]) ?? "")
|
|
99
|
+
).filter(Boolean)
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return { manifest: await toPresentation4(manifest) };
|
|
104
|
+
}
|
|
105
|
+
export {
|
|
106
|
+
fittedSize,
|
|
107
|
+
imageServiceContent
|
|
108
|
+
};
|
package/dist/core/load.mjs
CHANGED
|
@@ -14,6 +14,30 @@ function isContentState(json) {
|
|
|
14
14
|
}
|
|
15
15
|
return value.type === "SpecificResource";
|
|
16
16
|
}
|
|
17
|
+
const isImageService = (json) => Boolean(json) && typeof json === "object" && /ImageService[123]|iiif\.io\/api\/image/.test(
|
|
18
|
+
JSON.stringify(
|
|
19
|
+
["@context", "type", "@type", "protocol"].map(
|
|
20
|
+
(key) => json[key]
|
|
21
|
+
)
|
|
22
|
+
)
|
|
23
|
+
);
|
|
24
|
+
async function fetchContent(request, url, signal) {
|
|
25
|
+
try {
|
|
26
|
+
return await fetchJson(request, url, signal);
|
|
27
|
+
} catch (error) {
|
|
28
|
+
if ((signal == null ? void 0 : signal.aborted) || /\.json([?#]|$)/i.test(url)) throw error;
|
|
29
|
+
try {
|
|
30
|
+
const json = await fetchJson(
|
|
31
|
+
request,
|
|
32
|
+
`${url.replace(/\/+$/, "")}/info.json`,
|
|
33
|
+
signal
|
|
34
|
+
);
|
|
35
|
+
if (isImageService(json)) return json;
|
|
36
|
+
} catch {
|
|
37
|
+
}
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
17
41
|
const DESCRIPTIVE = [
|
|
18
42
|
"summary",
|
|
19
43
|
"metadata",
|
|
@@ -45,6 +69,10 @@ const isLoneCanvas = (manifest) => {
|
|
|
45
69
|
var _a, _b;
|
|
46
70
|
return Boolean(manifest) && ((_b = (_a = manifest.items) == null ? void 0 : _a[0]) == null ? void 0 : _b.id) === manifest.id;
|
|
47
71
|
};
|
|
72
|
+
const isImageServiceManifest = (manifest) => {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
return Boolean(manifest) && ((_a = manifest.items) == null ? void 0 : _a.length) === 1 && ((_b = manifest.items[0]) == null ? void 0 : _b.id) === `${manifest.id}/canvas`;
|
|
75
|
+
};
|
|
48
76
|
const ANNOTATIONS = /^(oa:)?Annotation(Page|Collection)$/;
|
|
49
77
|
class CloverContentError extends Error {
|
|
50
78
|
constructor() {
|
|
@@ -132,7 +160,7 @@ async function loadContent(input, options = {}) {
|
|
|
132
160
|
};
|
|
133
161
|
if (typeof input === "string") {
|
|
134
162
|
if (isUrl(input.trim())) {
|
|
135
|
-
json = await
|
|
163
|
+
json = await fetchContent(request, input.trim(), signal);
|
|
136
164
|
} else {
|
|
137
165
|
const { decodeContentState } = await readContentState();
|
|
138
166
|
const state = decodeContentState(input);
|
|
@@ -149,6 +177,13 @@ async function loadContent(input, options = {}) {
|
|
|
149
177
|
const { annotationsContent } = await import("./annotations-content.mjs");
|
|
150
178
|
return annotationsContent(json, options);
|
|
151
179
|
}
|
|
180
|
+
if (isImageService(json)) {
|
|
181
|
+
const { imageServiceContent } = await import("./image-service-content.mjs");
|
|
182
|
+
return imageServiceContent(
|
|
183
|
+
json,
|
|
184
|
+
typeof input === "string" ? input.trim() : void 0
|
|
185
|
+
);
|
|
186
|
+
}
|
|
152
187
|
const resource = await toPresentation4(json);
|
|
153
188
|
(_a = signal == null ? void 0 : signal.throwIfAborted) == null ? void 0 : _a.call(signal);
|
|
154
189
|
switch (resource.type) {
|
|
@@ -185,6 +220,8 @@ async function loadContent(input, options = {}) {
|
|
|
185
220
|
export {
|
|
186
221
|
CloverContentError,
|
|
187
222
|
fetchResource,
|
|
223
|
+
isImageService,
|
|
224
|
+
isImageServiceManifest,
|
|
188
225
|
isLoneCanvas,
|
|
189
226
|
loadContent,
|
|
190
227
|
loadManifest,
|
package/dist/i18n/config.mjs
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { loaders } from "./locales/index.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { visitorLanguages, pageLanguage, scriptLanguage, baseLanguage, sameLanguage, readInterfaceLanguagesFrom } from "./languages.mjs";
|
|
4
4
|
import en from "./locales/en.json.mjs";
|
|
5
5
|
const CLOVER_I18N_NAMESPACE = "clover";
|
|
6
6
|
const resources = {
|
|
7
7
|
en: { [CLOVER_I18N_NAMESPACE]: { ...en } }
|
|
8
8
|
};
|
|
9
|
-
let
|
|
9
|
+
let configured = [];
|
|
10
|
+
let chosen;
|
|
11
|
+
let picked = [];
|
|
10
12
|
let fallbacks = [];
|
|
11
13
|
let version = 0;
|
|
12
14
|
const listeners = /* @__PURE__ */ new Set();
|
|
@@ -15,9 +17,12 @@ function notify() {
|
|
|
15
17
|
listeners.forEach((listener) => listener());
|
|
16
18
|
}
|
|
17
19
|
function withBase(lng) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
return [lng, scriptLanguage(lng), baseLanguage(lng)].filter(
|
|
21
|
+
(tag) => !!tag
|
|
22
|
+
);
|
|
20
23
|
}
|
|
24
|
+
const has = (tag) => tag === "en" || ships(tag) || !!resources[tag];
|
|
25
|
+
const speaks = (lng) => withBase(lng).find(has);
|
|
21
26
|
const loading = /* @__PURE__ */ new Map();
|
|
22
27
|
const ships = (lng) => Object.prototype.hasOwnProperty.call(loaders, lng);
|
|
23
28
|
function load(lng) {
|
|
@@ -48,28 +53,87 @@ function loadFor(chain2) {
|
|
|
48
53
|
}
|
|
49
54
|
let chain = [];
|
|
50
55
|
let madeFrom = "";
|
|
56
|
+
let byDefault = "en";
|
|
57
|
+
function offered() {
|
|
58
|
+
const page = pageLanguage();
|
|
59
|
+
return [.../* @__PURE__ */ new Set([...configured, ...page ? [page] : []])];
|
|
60
|
+
}
|
|
51
61
|
function lookupChain() {
|
|
52
|
-
const from =
|
|
62
|
+
const from = `${version} ${typeof document < "u" ? document.documentElement.lang : ""} ${typeof navigator < "u" ? navigator.languages : ""}`;
|
|
53
63
|
if (from === madeFrom) return chain;
|
|
54
64
|
madeFrom = from;
|
|
55
|
-
const
|
|
65
|
+
const set = offered();
|
|
66
|
+
const visitor = visitorLanguages().map(speaks).find(Boolean);
|
|
67
|
+
byDefault = visitor ?? set.map(speaks).find(Boolean) ?? "en";
|
|
56
68
|
chain = [
|
|
57
|
-
...new Set(
|
|
69
|
+
...new Set(
|
|
70
|
+
[chosen ?? byDefault, ...fallbacks, ...set].filter((tag) => !!tag).flatMap(withBase).concat("en")
|
|
71
|
+
)
|
|
58
72
|
];
|
|
59
73
|
void loadFor(chain);
|
|
60
74
|
return chain;
|
|
61
75
|
}
|
|
76
|
+
function offeredLanguages() {
|
|
77
|
+
lookupChain();
|
|
78
|
+
return [
|
|
79
|
+
...new Set(
|
|
80
|
+
[byDefault, ...offered().map(speaks), ...picked.map(speaks)].filter(
|
|
81
|
+
(tag) => !!tag
|
|
82
|
+
)
|
|
83
|
+
)
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
readInterfaceLanguagesFrom(() => {
|
|
87
|
+
lookupChain();
|
|
88
|
+
return [chosen, byDefault, ...offered()];
|
|
89
|
+
});
|
|
62
90
|
function langWithin(lang, hostLanguage) {
|
|
63
91
|
if (!lang) return void 0;
|
|
64
92
|
return sameLanguage(lang, hostLanguage || cloverI18n.resolvedLanguage) ? void 0 : lang;
|
|
65
93
|
}
|
|
66
94
|
const cloverI18n = {
|
|
67
|
-
/**
|
|
95
|
+
/**
|
|
96
|
+
* Clover's interface language: the one the visitor chose, else the first of the chain
|
|
97
|
+
* whose strings have loaded.
|
|
98
|
+
*/
|
|
68
99
|
get language() {
|
|
69
|
-
return
|
|
100
|
+
return chosen ?? lookupChain().find((lng) => resources[lng]) ?? "en";
|
|
101
|
+
},
|
|
102
|
+
/** The interface language the visitor chose, if they chose one. */
|
|
103
|
+
get chosenLanguage() {
|
|
104
|
+
return chosen;
|
|
105
|
+
},
|
|
106
|
+
/**
|
|
107
|
+
* The tag Clover has strings for that speaks `lng` (`zh-Hans` for `zh-CN`, `en` for
|
|
108
|
+
* `en-US`), shipped or given by the page; none where it has no strings for it.
|
|
109
|
+
*/
|
|
110
|
+
stringsFor(lng) {
|
|
111
|
+
return speaks(lng);
|
|
112
|
+
},
|
|
113
|
+
/**
|
|
114
|
+
* The interface languages to offer, and the one in use (`chosen`): the default (the
|
|
115
|
+
* visitor's, where Clover has strings for it), then the languages configured, each as
|
|
116
|
+
* the tag Clover has strings for. A choice is worth offering only where there are two
|
|
117
|
+
* or more.
|
|
118
|
+
*/
|
|
119
|
+
interfaceLanguages() {
|
|
120
|
+
const languages = offeredLanguages();
|
|
121
|
+
return { languages, chosen: chosen && speaks(chosen) || byDefault };
|
|
70
122
|
},
|
|
71
123
|
/**
|
|
72
|
-
*
|
|
124
|
+
* Speak `lng` whatever the visitor's languages, as their choice of interface language;
|
|
125
|
+
* none goes back to the default. Settles once its strings have loaded, or failed to.
|
|
126
|
+
*
|
|
127
|
+
* await cloverI18n.chooseInterfaceLanguage("fr");
|
|
128
|
+
*/
|
|
129
|
+
chooseInterfaceLanguage(lng) {
|
|
130
|
+
chosen = lng || void 0;
|
|
131
|
+
picked = chosen ? [.../* @__PURE__ */ new Set([...picked, chosen])] : [];
|
|
132
|
+
notify();
|
|
133
|
+
return loadFor(lookupChain());
|
|
134
|
+
},
|
|
135
|
+
/**
|
|
136
|
+
* The language Clover's interface strings are in: the first of the lookup chain that has any. A
|
|
73
137
|
* language set with no strings of its own resolves to the next, English at the last.
|
|
74
138
|
*/
|
|
75
139
|
get resolvedLanguage() {
|
|
@@ -80,9 +144,9 @@ const cloverI18n = {
|
|
|
80
144
|
}
|
|
81
145
|
) ?? "en";
|
|
82
146
|
},
|
|
147
|
+
/** As `chooseInterfaceLanguage` does: i18next's name for it. */
|
|
83
148
|
changeLanguage(lng) {
|
|
84
|
-
|
|
85
|
-
notify();
|
|
149
|
+
return cloverI18n.chooseInterfaceLanguage(lng);
|
|
86
150
|
},
|
|
87
151
|
/** A string and the language it came from, which a missing key leaves in another. */
|
|
88
152
|
resolve(key, values, namespace = CLOVER_I18N_NAMESPACE) {
|
|
@@ -123,7 +187,7 @@ const cloverI18n = {
|
|
|
123
187
|
* Settles once the language Clover speaks has loaded, or failed to: for a server render,
|
|
124
188
|
* or a test, that needs the strings in place before it draws.
|
|
125
189
|
*
|
|
126
|
-
* await initCloverI18n({
|
|
190
|
+
* await initCloverI18n({ languages: ["fr"] }).ready();
|
|
127
191
|
*/
|
|
128
192
|
ready() {
|
|
129
193
|
return loadFor(lookupChain());
|
|
@@ -153,7 +217,17 @@ function initCloverI18n(options = {}) {
|
|
|
153
217
|
if (options.fallbackLng !== void 0) {
|
|
154
218
|
fallbacks = options.fallbackLng === false ? [] : [options.fallbackLng].flat();
|
|
155
219
|
}
|
|
156
|
-
|
|
220
|
+
const before = configured.join();
|
|
221
|
+
if (options.languages !== void 0) {
|
|
222
|
+
configured = [options.languages].flat().filter(Boolean);
|
|
223
|
+
} else if (options.lng) {
|
|
224
|
+
configured = [options.lng];
|
|
225
|
+
}
|
|
226
|
+
if (configured.join() !== before) {
|
|
227
|
+
picked = [];
|
|
228
|
+
const kept = [...visitorLanguages(), ...offered()].map(speaks);
|
|
229
|
+
if (chosen && !kept.includes(speaks(chosen))) chosen = void 0;
|
|
230
|
+
}
|
|
157
231
|
notify();
|
|
158
232
|
return cloverI18n;
|
|
159
233
|
}
|
package/dist/i18n/languages.mjs
CHANGED
|
@@ -1,17 +1,45 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
function visitorLanguages() {
|
|
3
|
+
if (typeof navigator === "undefined") return [];
|
|
4
|
+
return [...navigator.languages ?? [], navigator.language].filter(Boolean);
|
|
5
|
+
}
|
|
6
|
+
function pageLanguage() {
|
|
7
|
+
if (typeof document === "undefined") return void 0;
|
|
8
|
+
return document.documentElement.lang || void 0;
|
|
9
|
+
}
|
|
10
|
+
let interfaceLanguages = () => [];
|
|
11
|
+
function readInterfaceLanguagesFrom(source) {
|
|
12
|
+
interfaceLanguages = source;
|
|
13
|
+
}
|
|
2
14
|
function readerLanguages() {
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
15
|
+
const [chosen, ...rest] = interfaceLanguages();
|
|
16
|
+
return [
|
|
17
|
+
...new Set(
|
|
18
|
+
[chosen, ...visitorLanguages(), ...rest, pageLanguage()].filter(
|
|
19
|
+
(tag) => !!tag
|
|
20
|
+
)
|
|
21
|
+
)
|
|
22
|
+
];
|
|
10
23
|
}
|
|
11
24
|
const baseLanguage = (tag) => tag.split("-")[0];
|
|
12
25
|
function sameLanguage(a, b) {
|
|
13
26
|
return baseLanguage(a).toLowerCase() === baseLanguage(b).toLowerCase();
|
|
14
27
|
}
|
|
28
|
+
function scriptLanguage(tag) {
|
|
29
|
+
try {
|
|
30
|
+
const { language, script } = new Intl.Locale(tag).maximize();
|
|
31
|
+
return script && `${language}-${script}`;
|
|
32
|
+
} catch {
|
|
33
|
+
return void 0;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function sameScript(tag, tags) {
|
|
37
|
+
const script = scriptLanguage(tag);
|
|
38
|
+
if (!script) return void 0;
|
|
39
|
+
return tags.find(
|
|
40
|
+
(each) => each !== "none" && each !== "@none" && scriptLanguage(each) === script
|
|
41
|
+
);
|
|
42
|
+
}
|
|
15
43
|
const baseOf = (tag) => tag.includes("-") ? baseLanguage(tag) : null;
|
|
16
44
|
function closestLanguage(language, tags, fallbacks = []) {
|
|
17
45
|
if (!tags.length) return void 0;
|
|
@@ -21,6 +49,8 @@ function closestLanguage(language, tags, fallbacks = []) {
|
|
|
21
49
|
if (tags.includes(language)) return language;
|
|
22
50
|
const base = baseOf(language);
|
|
23
51
|
if (base && tags.includes(base)) return base;
|
|
52
|
+
const script = sameScript(language, tags);
|
|
53
|
+
if (script) return script;
|
|
24
54
|
const fallback = fallbacks.find((tag) => tags.includes(tag));
|
|
25
55
|
if (fallback) return fallback;
|
|
26
56
|
const regional = tags.findIndex((tag) => baseOf(tag) === language);
|
|
@@ -39,6 +69,10 @@ export {
|
|
|
39
69
|
baseLanguage,
|
|
40
70
|
closestLanguage,
|
|
41
71
|
languageToRead,
|
|
72
|
+
pageLanguage,
|
|
73
|
+
readInterfaceLanguagesFrom,
|
|
42
74
|
readerLanguages,
|
|
43
|
-
sameLanguage
|
|
75
|
+
sameLanguage,
|
|
76
|
+
scriptLanguage,
|
|
77
|
+
visitorLanguages
|
|
44
78
|
};
|
|
@@ -3,10 +3,13 @@ const loaders = {
|
|
|
3
3
|
es: () => import("./es.json.mjs"),
|
|
4
4
|
fi: () => import("./fi.json.mjs"),
|
|
5
5
|
fr: () => import("./fr.json.mjs"),
|
|
6
|
+
ja: () => import("./ja.json.mjs"),
|
|
6
7
|
nb: () => import("./nb.json.mjs"),
|
|
7
8
|
nn: () => import("./nn.json.mjs"),
|
|
8
9
|
no: () => import("./no.json.mjs"),
|
|
9
|
-
pt: () => import("./pt.json.mjs")
|
|
10
|
+
pt: () => import("./pt.json.mjs"),
|
|
11
|
+
"zh-Hans": () => import("./zh-Hans.json.mjs"),
|
|
12
|
+
"zh-Hant": () => import("./zh-Hant.json.mjs")
|
|
10
13
|
};
|
|
11
14
|
export {
|
|
12
15
|
loaders
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const ja = JSON.parse('{"commonClose":"閉じる","commonNext":"次へ","commonPrevious":"前へ","commonSearch":"検索","commonViewAll":"すべて表示","controlShortcut":"{{label}}({{shortcut}})","contentSearchLoading":"読み込み中…","contentSearchPlaceholder":"検索","contentSearchResultsNone":"結果はありません","contentSearchResult":"1 件の結果","contentSearchResults":"{{count}} 件の結果","contentSearchError":"検索を完了できませんでした。","contentSearchPosition":"{{total}} 件中 {{index}} 件目の結果","contentSearchClear":"検索をクリア","canvasPosition":"{{total}} 件中 {{index}} 件目","canvasImage":"画像","bodyUnloadableImage":"この画像を読み込めませんでした。","bodyUnloadableVideo":"この動画を読み込めませんでした。","bodyUnloadableAudio":"この音声を読み込めませんでした。","bodyUnloadableModel":"このモデルを読み込めませんでした。","canvasRoleDescription":"ズームできる画像","canvasKeysImage":"矢印キーで移動(Shift で大きく移動)、プラスとマイナスでズーム、0 で表示をリセット、R または Shift+R で回転します。","canvasKeysMedia":"Space または K で再生・一時停止、J または L で 10 秒戻る・進む、M でミュート・ミュート解除します。","canvasKeysAnnotations":"Escape キーで選択した注釈を解除します。","sceneModel":"3D モデル","sceneRoleDescription":"回転できる 3D モデル","sceneKeys":"矢印キーでモデルを回転(Shift で大きく回転)、プラスとマイナスでズーム、0 で表示をリセット、R または Shift+R で右または左に回転します。","sceneRotateUp":"上に回転","sceneRotateDown":"下に回転","sceneRotate":"回転","sceneResetView":"表示をリセット","statusLoading":"読み込み中…","statusError":"読み込めませんでした。","itemsLabel":"アイテム","download":"ダウンロード","downloadPage":"このページ","downloadAll":"すべてのページ","templateSidebar":"アイテム","templateSidebarToggle":"アイテムを表示","templateBack":"戻る","templateBackTo":"{{label}} に戻る","collectionLabel":"コレクション","itemsScrollBack":"前のアイテムを表示","itemsScrollForward":"さらにアイテムを表示","aboutRights":"権利","aboutDate":"日付","aboutHomepage":"ホームページ","aboutSeeAlso":"関連情報","aboutProvider":"提供者","logo":"ロゴ","aboutManifest":"IIIF マニフェスト","aboutCanvas":"IIIF キャンバス","aboutPartOf":"所属先","aboutOpenManifest":"マニフェスト全体を開く","aboutCollection":"IIIF コレクション","readingLanguage":"言語","annotationsHide":"注釈を非表示","annotationsHideTip":"非表示","readMore":"続きを読む","readLess":"折りたたむ","annotationsShow":"画像上で探す","annotationsShowTime":"録音内で探す","annotationsImage":"画像","annotationsLanguage":"言語","annotationsOpenLink":"リンクを開く","transcriptLabel":"文字起こし","imageViewerOpen":"画像ビューアを開く","imageViewerClose":"画像ビューアを閉じる","canvasChoice":"選択肢","canvasViewerControls":"ビューアのコントロール","canvasExpandControls":"ビューアのコントロールを展開","canvasCollapseControls":"ビューアのコントロールを折りたたむ","canvasScrollBack":"前のコントロールを表示","canvasScrollForward":"さらにコントロールを表示","imageFullScreen":"全画面表示","imageExitFullScreen":"全画面表示を終了","imageResetZoom":"ズームをリセット","imageRotateLeft":"左に回転","imageRotateRight":"右に回転","imageZoomIn":"拡大","imageZoomOut":"縮小","informationPanelTabs":"情報パネル","sectionsScrollBack":"前のタブを表示","sectionsScrollForward":"さらにタブを表示","informationPanelClose":"情報パネルを閉じる","informationPanelTabsAbout":"概要","informationPanelTabsAnnotations":"注釈","informationPanelTabsSearch":"検索","informationPanelTabsContents":"目次","contentsSectionsIn":"下位セクション:","informationPanelTabsMap":"地図","informationPanelTabsCollection":"コレクション","informationPanelTabsTargets":"ビュー","mapUnavailable":"地図を表示できませんでした。","mapLabel":"地図","mapAttribution":"地図のクレジット","mapPlaceUntitled":"場所 {{number}}","mapOverlay":"ジオリファレンス画像","mapPlacesListed":"地図の後に一覧表示される場所:{{count}} 件","informationPanelToggle":"詳細情報","playerPlay":"再生","playerPause":"一時停止","playerMute":"ミュート","playerUnmute":"ミュート解除","playerVolume":"音量","playerSeek":"再生位置","playerCaptions":"字幕","playerCaptionsOff":"オフ","playerChapters":"チャプター","playerFill":"枠いっぱいに表示","playerFit":"枠に収める","frameRepeat":"繰り返し","playerCurrentTime":"経過時間","playerDuration":"再生時間","splitHandle":"パネルのサイズを変更"}');
|
|
3
|
+
export {
|
|
4
|
+
ja as default
|
|
5
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const zhHans = JSON.parse('{"commonClose":"关闭","commonNext":"下一个","commonPrevious":"上一个","commonSearch":"搜索","commonViewAll":"查看全部","controlShortcut":"{{label}}({{shortcut}})","contentSearchLoading":"正在加载…","contentSearchPlaceholder":"搜索","contentSearchResultsNone":"无结果","contentSearchResult":"1 个结果","contentSearchResults":"{{count}} 个结果","contentSearchError":"无法完成搜索。","contentSearchPosition":"第 {{index}} 个结果,共 {{total}} 个","contentSearchClear":"清除搜索","canvasPosition":"第 {{index}} 项,共 {{total}} 项","canvasImage":"图像","bodyUnloadableImage":"无法加载此图像。","bodyUnloadableVideo":"无法加载此视频。","bodyUnloadableAudio":"无法加载此音频。","bodyUnloadableModel":"无法加载此模型。","canvasRoleDescription":"可缩放图像","canvasKeysImage":"使用方向键平移(按住 Shift 可大步移动),按加号和减号缩放,按 0 重置视图,按 R 或 Shift+R 旋转。","canvasKeysMedia":"按空格键或 K 播放或暂停,按 J 或 L 后退或前进十秒,按 M 静音或取消静音。","canvasKeysAnnotations":"按 Esc 键清除所选注释。","sceneModel":"3D 模型","sceneRoleDescription":"可旋转 3D 模型","sceneKeys":"使用方向键旋转模型(按住 Shift 可大步旋转),按加号和减号缩放,按 0 重置视图,按 R 或 Shift+R 向右或向左旋转。","sceneRotateUp":"向上旋转","sceneRotateDown":"向下旋转","sceneRotate":"旋转","sceneResetView":"重置视图","statusLoading":"正在加载…","statusError":"无法加载。","itemsLabel":"项目","download":"下载","downloadPage":"本页","downloadAll":"所有页面","templateSidebar":"项目","templateSidebarToggle":"显示项目","templateBack":"返回","templateBackTo":"返回{{label}}","collectionLabel":"集合","itemsScrollBack":"显示上一组项目","itemsScrollForward":"显示更多项目","aboutRights":"权利","aboutDate":"日期","aboutHomepage":"主页","aboutSeeAlso":"另见","aboutProvider":"提供者","logo":"标志","aboutManifest":"IIIF 清单","aboutCanvas":"IIIF 画布","aboutPartOf":"所属","aboutOpenManifest":"打开完整清单","aboutCollection":"IIIF 集合","readingLanguage":"语言","annotationsHide":"隐藏注释","annotationsHideTip":"隐藏","readMore":"展开","readLess":"收起","annotationsShow":"在图像上查找","annotationsShowTime":"在录音中查找","annotationsImage":"图像","annotationsLanguage":"语言","annotationsOpenLink":"打开链接","transcriptLabel":"文字记录","imageViewerOpen":"打开图像查看器","imageViewerClose":"关闭图像查看器","canvasChoice":"选项","canvasViewerControls":"查看器控件","canvasExpandControls":"展开查看器控件","canvasCollapseControls":"收起查看器控件","canvasScrollBack":"显示上一组控件","canvasScrollForward":"显示更多控件","imageFullScreen":"全屏","imageExitFullScreen":"退出全屏","imageResetZoom":"重置缩放","imageRotateLeft":"向左旋转","imageRotateRight":"向右旋转","imageZoomIn":"放大","imageZoomOut":"缩小","informationPanelTabs":"信息面板","sectionsScrollBack":"显示上一组标签页","sectionsScrollForward":"显示更多标签页","informationPanelClose":"关闭信息面板","informationPanelTabsAbout":"简介","informationPanelTabsAnnotations":"注释","informationPanelTabsSearch":"搜索","informationPanelTabsContents":"目录","contentsSectionsIn":"下级章节:","informationPanelTabsMap":"地图","informationPanelTabsCollection":"集合","informationPanelTabsTargets":"视图","mapUnavailable":"无法显示地图。","mapLabel":"地图","mapAttribution":"地图来源","mapPlaceUntitled":"地点 {{number}}","mapOverlay":"地理配准图像","mapPlacesListed":"地图后列出的地点:{{count}} 个","informationPanelToggle":"更多信息","playerPlay":"播放","playerPause":"暂停","playerMute":"静音","playerUnmute":"取消静音","playerVolume":"音量","playerSeek":"播放进度","playerCaptions":"字幕","playerCaptionsOff":"关闭","playerChapters":"章节","playerFill":"填满画面","playerFit":"适应画面","frameRepeat":"重复","playerCurrentTime":"当前时间","playerDuration":"时长","splitHandle":"调整面板大小"}');
|
|
3
|
+
export {
|
|
4
|
+
zhHans as default
|
|
5
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const zhHant = JSON.parse('{"commonClose":"關閉","commonNext":"下一個","commonPrevious":"上一個","commonSearch":"搜尋","commonViewAll":"檢視全部","controlShortcut":"{{label}}({{shortcut}})","contentSearchLoading":"載入中…","contentSearchPlaceholder":"搜尋","contentSearchResultsNone":"沒有結果","contentSearchResult":"1 筆結果","contentSearchResults":"{{count}} 筆結果","contentSearchError":"無法完成搜尋。","contentSearchPosition":"第 {{index}} 筆結果,共 {{total}} 筆","contentSearchClear":"清除搜尋","canvasPosition":"第 {{index}} 項,共 {{total}} 項","canvasImage":"影像","bodyUnloadableImage":"無法載入此影像。","bodyUnloadableVideo":"無法載入此影片。","bodyUnloadableAudio":"無法載入此音訊。","bodyUnloadableModel":"無法載入此模型。","canvasRoleDescription":"可縮放影像","canvasKeysImage":"使用方向鍵平移(按住 Shift 可大幅移動),按加號和減號縮放,按 0 重設檢視,按 R 或 Shift+R 旋轉。","canvasKeysMedia":"按空白鍵或 K 播放或暫停,按 J 或 L 倒轉或快轉十秒,按 M 靜音或取消靜音。","canvasKeysAnnotations":"按 Esc 鍵清除所選註解。","sceneModel":"3D 模型","sceneRoleDescription":"可旋轉 3D 模型","sceneKeys":"使用方向鍵旋轉模型(按住 Shift 可大幅旋轉),按加號和減號縮放,按 0 重設檢視,按 R 或 Shift+R 向右或向左旋轉。","sceneRotateUp":"向上旋轉","sceneRotateDown":"向下旋轉","sceneRotate":"旋轉","sceneResetView":"重設檢視","statusLoading":"載入中…","statusError":"無法載入。","itemsLabel":"項目","download":"下載","downloadPage":"本頁","downloadAll":"所有頁面","templateSidebar":"項目","templateSidebarToggle":"顯示項目","templateBack":"返回","templateBackTo":"返回{{label}}","collectionLabel":"集合","itemsScrollBack":"顯示上一組項目","itemsScrollForward":"顯示更多項目","aboutRights":"權利","aboutDate":"日期","aboutHomepage":"首頁","aboutSeeAlso":"另見","aboutProvider":"提供者","logo":"標誌","aboutManifest":"IIIF 清單","aboutCanvas":"IIIF 畫布","aboutPartOf":"所屬","aboutOpenManifest":"開啟完整清單","aboutCollection":"IIIF 集合","readingLanguage":"語言","annotationsHide":"隱藏註解","annotationsHideTip":"隱藏","readMore":"展開","readLess":"收合","annotationsShow":"在影像上尋找","annotationsShowTime":"在錄音中尋找","annotationsImage":"影像","annotationsLanguage":"語言","annotationsOpenLink":"開啟連結","transcriptLabel":"逐字稿","imageViewerOpen":"開啟影像檢視器","imageViewerClose":"關閉影像檢視器","canvasChoice":"選項","canvasViewerControls":"檢視器控制項","canvasExpandControls":"展開檢視器控制項","canvasCollapseControls":"收合檢視器控制項","canvasScrollBack":"顯示上一組控制項","canvasScrollForward":"顯示更多控制項","imageFullScreen":"全螢幕","imageExitFullScreen":"結束全螢幕","imageResetZoom":"重設縮放","imageRotateLeft":"向左旋轉","imageRotateRight":"向右旋轉","imageZoomIn":"放大","imageZoomOut":"縮小","informationPanelTabs":"資訊面板","sectionsScrollBack":"顯示上一組分頁","sectionsScrollForward":"顯示更多分頁","informationPanelClose":"關閉資訊面板","informationPanelTabsAbout":"簡介","informationPanelTabsAnnotations":"註解","informationPanelTabsSearch":"搜尋","informationPanelTabsContents":"目錄","contentsSectionsIn":"下層章節:","informationPanelTabsMap":"地圖","informationPanelTabsCollection":"集合","informationPanelTabsTargets":"檢視","mapUnavailable":"無法顯示地圖。","mapLabel":"地圖","mapAttribution":"地圖來源","mapPlaceUntitled":"地點 {{number}}","mapOverlay":"地理對位影像","mapPlacesListed":"地圖後列出的地點:{{count}} 個","informationPanelToggle":"更多資訊","playerPlay":"播放","playerPause":"暫停","playerMute":"靜音","playerUnmute":"取消靜音","playerVolume":"音量","playerSeek":"播放進度","playerCaptions":"字幕","playerCaptionsOff":"關閉","playerChapters":"章節","playerFill":"填滿畫面","playerFit":"符合畫面","frameRepeat":"重複","playerCurrentTime":"目前時間","playerDuration":"長度","splitHandle":"調整面板大小"}');
|
|
3
|
+
export {
|
|
4
|
+
zhHant as default
|
|
5
|
+
};
|