@nulib/clover 0.0.0-stage → 4.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +9 -0
- package/README.md +120 -2
- package/dist/components/Annotations/Annotations.mjs +674 -0
- package/dist/components/Annotations/EntryBodies.mjs +52 -0
- package/dist/components/Annotations/languages.mjs +43 -0
- package/dist/components/Body/Body.mjs +51 -0
- package/dist/components/Body/BodyAlert.mjs +25 -0
- package/dist/components/Body/Caption.mjs +90 -0
- package/dist/components/Body/CaptionDetails.mjs +50 -0
- package/dist/components/Body/Pending.mjs +9 -0
- package/dist/components/Body/glyphs.mjs +66 -0
- package/dist/components/Body/renderers.mjs +30 -0
- package/dist/components/Body/useControlsVisibility.mjs +204 -0
- package/dist/components/Body/useNearViewport.mjs +27 -0
- package/dist/components/Canvas/AnnotationMenu.mjs +128 -0
- package/dist/components/Canvas/AnnotationState.mjs +338 -0
- package/dist/components/Canvas/Annotations.mjs +497 -0
- package/dist/components/Canvas/CanvasView.mjs +669 -0
- package/dist/components/Canvas/ChoiceMenu.mjs +77 -0
- package/dist/components/Canvas/Connected.mjs +228 -0
- package/dist/components/Canvas/ControlMenu.mjs +67 -0
- package/dist/components/Canvas/Controls.mjs +233 -0
- package/dist/components/Canvas/FrameAnimation.mjs +344 -0
- package/dist/components/Canvas/LoadedCanvas.mjs +177 -0
- package/dist/components/Canvas/Placeholder.mjs +105 -0
- package/dist/components/Canvas/fromManifest.mjs +44 -0
- package/dist/components/Canvas/index.mjs +19 -0
- package/dist/components/Canvas/layout.mjs +369 -0
- package/dist/components/Canvas/media/MediaBody.mjs +285 -0
- package/dist/components/Canvas/media/Player.mjs +193 -0
- package/dist/components/Canvas/media/Transport.mjs +511 -0
- package/dist/components/Canvas/media/TransportButton.mjs +39 -0
- package/dist/components/Canvas/media/useBarHeight.mjs +28 -0
- package/dist/components/Canvas/media/useCaptionTracks.mjs +131 -0
- package/dist/components/Canvas/media/useMediaController.mjs +77 -0
- package/dist/components/Canvas/media/useMediaElement.mjs +100 -0
- package/dist/components/Canvas/panClearOfControls.mjs +92 -0
- package/dist/components/Canvas/rendererSurface.mjs +6 -0
- package/dist/components/Canvas/surface.mjs +5 -0
- package/dist/components/Canvas/track.mjs +43 -0
- package/dist/components/Canvas/useSvgReader.mjs +23 -0
- package/dist/components/Collection/Collection.mjs +76 -0
- package/dist/components/CollectionSelect/CollectionSelect.mjs +114 -0
- package/dist/components/Contents/Contents.mjs +120 -0
- package/dist/components/Download/Download.mjs +105 -0
- package/dist/components/Items/Item.mjs +184 -0
- package/dist/components/Items/Items.mjs +455 -0
- package/dist/components/Items/Pager.mjs +190 -0
- package/dist/components/Items/StandaloneItems.mjs +80 -0
- package/dist/components/Items/clamped.mjs +90 -0
- package/dist/components/Label/Label.mjs +39 -0
- package/dist/components/Map/LoadedMap.mjs +26 -0
- package/dist/components/Map/Map.mjs +38 -0
- package/dist/components/Map/MapView.mjs +539 -0
- package/dist/components/Map/basemap.mjs +50 -0
- package/dist/components/Map/maplibre-worker.mjs +7 -0
- package/dist/components/Map/overlayImage.mjs +17 -0
- package/dist/components/Map/worker.mjs +22 -0
- package/dist/components/Panel/About.mjs +148 -0
- package/dist/components/Panel/Panel.mjs +259 -0
- package/dist/components/Panel/PanelToggle.mjs +43 -0
- package/dist/components/Panel/PartOfManifest.mjs +52 -0
- package/dist/components/Primitives/Primitives.mjs +263 -0
- package/dist/components/Primitives/resource.mjs +11 -0
- package/dist/components/Provider/Provider.mjs +174 -0
- package/dist/components/Root/Announcer.mjs +58 -0
- package/dist/components/Root/Root.mjs +29 -0
- package/dist/components/Root/useRootState.mjs +188 -0
- package/dist/components/Scene/Connected.mjs +48 -0
- package/dist/components/Scene/Loaded.mjs +56 -0
- package/dist/components/Scene/RotatePad.mjs +204 -0
- package/dist/components/Scene/Scene.mjs +20 -0
- package/dist/components/Scene/SceneView.mjs +539 -0
- package/dist/components/Scene/cloverEngine.mjs +105 -0
- package/dist/components/Scene/engine.mjs +141 -0
- package/dist/components/Scene/engines.mjs +23 -0
- package/dist/components/Scene/gestures.mjs +74 -0
- package/dist/components/Scene/models.mjs +78 -0
- package/dist/components/Scene/orbit.mjs +60 -0
- package/dist/components/Search/Search.mjs +246 -0
- package/dist/components/Split/Split.mjs +210 -0
- package/dist/components/Split/splitting.mjs +203 -0
- package/dist/components/Status/Status.mjs +47 -0
- package/dist/components/Timeline/Connected.mjs +25 -0
- package/dist/components/Timeline/Timeline.mjs +40 -0
- package/dist/components/Timeline/playerSurface.mjs +84 -0
- package/dist/components/Transcript/Transcript.mjs +377 -0
- package/dist/components/Viewer/Viewer.mjs +19 -0
- package/dist/core/annotation-bodies.mjs +29 -0
- package/dist/core/annotation-collection.mjs +55 -0
- package/dist/core/annotation-name.mjs +31 -0
- package/dist/core/annotation-sets.mjs +155 -0
- package/dist/core/annotations-content.mjs +27 -0
- package/dist/core/annotations.mjs +73 -0
- package/dist/core/clover.mjs +393 -0
- package/dist/core/content-state-reader.mjs +82 -0
- package/dist/core/content-state.mjs +43 -0
- package/dist/core/direction.mjs +12 -0
- package/dist/core/geo-detect.mjs +30 -0
- package/dist/core/geo.mjs +283 -0
- package/dist/core/items.mjs +76 -0
- package/dist/core/keep-fragments.mjs +40 -0
- package/dist/core/link.mjs +28 -0
- package/dist/core/load.mjs +183 -0
- package/dist/core/map-config.mjs +12 -0
- package/dist/core/markdown.mjs +139 -0
- package/dist/core/pages.mjs +51 -0
- package/dist/core/painted-bodies.mjs +20 -0
- package/dist/core/painting.mjs +17 -0
- package/dist/core/presentation.mjs +27 -0
- package/dist/core/ranges.mjs +133 -0
- package/dist/core/region.mjs +32 -0
- package/dist/core/request.mjs +40 -0
- package/dist/core/sanitize.mjs +72 -0
- package/dist/core/search-service.mjs +22 -0
- package/dist/core/search.mjs +154 -0
- package/dist/core/selectors.mjs +94 -0
- package/dist/core/sequence.mjs +70 -0
- package/dist/core/show-link.mjs +16 -0
- package/dist/core/store.mjs +40 -0
- package/dist/core/svg-shape.mjs +183 -0
- package/dist/core/text.mjs +36 -0
- package/dist/core/thumbnail.mjs +55 -0
- package/dist/core/value.mjs +39 -0
- package/dist/core/vtt.mjs +111 -0
- package/dist/hooks/useFullscreen.mjs +21 -0
- package/dist/hooks/useFullscreenSupported.mjs +11 -0
- package/dist/hooks/useLoaded.mjs +27 -0
- package/dist/hooks/useWithinFullscreen.mjs +24 -0
- package/dist/i18n/config.mjs +170 -0
- package/dist/i18n/hostLanguage.mjs +6 -0
- package/dist/i18n/locales/en.json.mjs +5 -0
- package/dist/i18n/locales/es.json.mjs +5 -0
- package/dist/i18n/locales/fi.json.mjs +5 -0
- package/dist/i18n/locales/fr.json.mjs +5 -0
- package/dist/i18n/locales/index.mjs +13 -0
- package/dist/i18n/locales/nb.json.mjs +5 -0
- package/dist/i18n/locales/nn.json.mjs +5 -0
- package/dist/i18n/locales/no.json.mjs +5 -0
- package/dist/i18n/locales/pt.json.mjs +5 -0
- package/dist/i18n/reader.mjs +13 -0
- package/dist/i18n/useCloverTranslation.mjs +28 -0
- package/dist/index.d.mts +2215 -0
- package/dist/index.mjs +133 -0
- package/dist/lib/asArray.mjs +5 -0
- package/dist/lib/classnames.mjs +5 -0
- package/dist/lib/fullscreen.mjs +65 -0
- package/dist/lib/gltf/bounds.mjs +44 -0
- package/dist/lib/gltf/load.mjs +156 -0
- package/dist/lib/gltf/mat4.mjs +150 -0
- package/dist/lib/gltf/renderer.mjs +342 -0
- package/dist/lib/gltf/shaders.mjs +192 -0
- package/dist/lib/hls.mjs +6 -0
- package/dist/lib/pointer.mjs +38 -0
- package/dist/lib/renderer/CanvasRenderer.mjs +857 -0
- package/dist/lib/renderer/backends/backend.mjs +21 -0
- package/dist/lib/renderer/backends/canvas2d/Canvas2DBackend.mjs +91 -0
- package/dist/lib/renderer/backends/contexts.mjs +27 -0
- package/dist/lib/renderer/backends/dom/DomLayers.mjs +91 -0
- package/dist/lib/renderer/backends/webgl2/WebGL2Backend.mjs +248 -0
- package/dist/lib/renderer/backends/webgl2/shaders.mjs +28 -0
- package/dist/lib/renderer/camera/Camera.mjs +64 -0
- package/dist/lib/renderer/camera/CameraAnimator.mjs +90 -0
- package/dist/lib/renderer/input/GestureController.mjs +252 -0
- package/dist/lib/renderer/io/TileCache.mjs +207 -0
- package/dist/lib/renderer/io/decode.mjs +156 -0
- package/dist/lib/renderer/loop/FrameLoop.mjs +50 -0
- package/dist/lib/renderer/math/affine.mjs +68 -0
- package/dist/lib/renderer/math/rect.mjs +45 -0
- package/dist/lib/renderer/overlays/Navigator.mjs +141 -0
- package/dist/lib/renderer/overlays/OverlayLayer.mjs +94 -0
- package/dist/lib/renderer/scene/planFrame.mjs +168 -0
- package/dist/lib/renderer/scene/regions.mjs +30 -0
- package/dist/lib/renderer/scene/sceneItem.mjs +114 -0
- package/dist/lib/renderer/scene/uploadBudget.mjs +30 -0
- package/dist/lib/renderer/sources/imageService.mjs +160 -0
- package/dist/lib/renderer/sources/sizedImage.mjs +38 -0
- package/dist/lib/renderer/sources/tilePyramid.mjs +172 -0
- package/dist/lib/time.mjs +21 -0
- package/dist/map/index.d.mts +195 -0
- package/dist/map/index.mjs +16 -0
- package/dist/react/context.mjs +46 -0
- package/dist/react/hooks.mjs +69 -0
- package/dist/react/language.mjs +30 -0
- package/dist/styles.css +1 -0
- package/dist/templates/default/Default.mjs +229 -0
- package/dist/templates/document/Document.mjs +286 -0
- package/dist/templates/document/DocumentPanel.mjs +9 -0
- package/dist/templates/document/Sheets.mjs +360 -0
- package/dist/templates/gallery/Gallery.mjs +62 -0
- package/dist/templates/index.d.mts +276 -0
- package/dist/templates/index.mjs +11 -0
- package/dist/templates/shared/Lightbox.mjs +111 -0
- package/dist/templates/shared/LightboxBody.mjs +9 -0
- package/dist/templates/shared/dragToClose.mjs +129 -0
- package/dist/templates/shared/useDragToClose.mjs +35 -0
- package/dist/templates/shared/useDrawer.mjs +113 -0
- package/dist/templates/shared/useFollowFocus.mjs +24 -0
- package/dist/templates/shared/useSlide.mjs +52 -0
- package/dist/templates/shared/useSpine.mjs +26 -0
- package/dist/templates.css +1 -0
- package/dist/three/index.d.mts +6 -0
- package/dist/three/index.mjs +8 -0
- package/dist/ui/Button.mjs +53 -0
- package/dist/ui/ControlCluster.mjs +87 -0
- package/dist/ui/Cue.mjs +13 -0
- package/dist/ui/ErrorBoundary.mjs +26 -0
- package/dist/ui/ExitFullscreen.mjs +46 -0
- package/dist/ui/FieldPill.mjs +153 -0
- package/dist/ui/HideToggle.mjs +57 -0
- package/dist/ui/Loading.mjs +20 -0
- package/dist/ui/Markup.mjs +95 -0
- package/dist/ui/ReadMore.mjs +84 -0
- package/dist/ui/Sections.mjs +448 -0
- package/dist/ui/Steps.mjs +84 -0
- package/dist/ui/Tip.mjs +196 -0
- package/dist/ui/bringIntoView.mjs +27 -0
- package/dist/ui/controlGlyphs.mjs +120 -0
- package/dist/ui/heading.mjs +19 -0
- package/dist/ui/languageCode.mjs +8 -0
- package/dist/ui/mediaIcons.mjs +104 -0
- package/dist/ui/useClusterReach.mjs +50 -0
- package/dist/ui/useContainerName.mjs +19 -0
- package/dist/ui/useOneOpen.mjs +22 -0
- package/dist/ui/useRovingFocus.mjs +64 -0
- package/dist/ui/useScrollTrack.mjs +150 -0
- package/dist/ui/useUniqueId.mjs +10 -0
- package/dist/ui/visuallyHidden.mjs +15 -0
- package/dist/web-components/About-DbrFSVBm.mjs +1 -0
- package/dist/web-components/AnnotationMenu-EBjIQpQl.mjs +1 -0
- package/dist/web-components/AnnotationState-DQTaO6Gz.mjs +1 -0
- package/dist/web-components/Annotations-Cb9U7HJ_.mjs +2 -0
- package/dist/web-components/Annotations-Dl0SgHBS.mjs +1 -0
- package/dist/web-components/Body-DxSz3iST.mjs +1 -0
- package/dist/web-components/BodyAlert-C8EOXz24.mjs +1 -0
- package/dist/web-components/Button-uWgfvqsL.mjs +1 -0
- package/dist/web-components/Camera-cdCqKMup.mjs +1 -0
- package/dist/web-components/Canvas2DBackend-CnLEHRs4.mjs +1 -0
- package/dist/web-components/CanvasView-BI3YzNdK.mjs +1 -0
- package/dist/web-components/CaptionDetails-B80ZhZ7v.mjs +1 -0
- package/dist/web-components/ChoiceMenu-DCp7-co7.mjs +1 -0
- package/dist/web-components/Collection-B1Le2_TU.mjs +1 -0
- package/dist/web-components/CollectionSelect-BL_jQog-.mjs +1 -0
- package/dist/web-components/Connected-BxqaRL9o.mjs +1 -0
- package/dist/web-components/Connected-DCBI-j9H.mjs +1 -0
- package/dist/web-components/Connected-DkhfVWxd.mjs +1 -0
- package/dist/web-components/Contents-zYEGHLfe.mjs +1 -0
- package/dist/web-components/ControlMenu-CAHiLAtl.mjs +1 -0
- package/dist/web-components/Cue-BT2V9VAq.mjs +1 -0
- package/dist/web-components/Document-BdCjGnJN.mjs +1 -0
- package/dist/web-components/DocumentPanel-X_Rta0Wu.mjs +1 -0
- package/dist/web-components/DomLayers-BD4QPbl6.mjs +1 -0
- package/dist/web-components/Download-DqU-goFi.mjs +1 -0
- package/dist/web-components/EntryBodies-DXAQH0vR.mjs +1 -0
- package/dist/web-components/ErrorBoundary-chQaO-Up.mjs +1 -0
- package/dist/web-components/FieldPill-CyEssPVm.mjs +1 -0
- package/dist/web-components/FrameAnimation-Bb0pOoRl.mjs +1 -0
- package/dist/web-components/Gallery-BXU3TcT3.mjs +1 -0
- package/dist/web-components/HideToggle-BwMrOBMu.mjs +1 -0
- package/dist/web-components/Items-DRj1UEpC.mjs +1 -0
- package/dist/web-components/Label-D6aVJB9s.mjs +1 -0
- package/dist/web-components/LightboxBody-BzXQGMDn.mjs +1 -0
- package/dist/web-components/Loaded-D5xmFRSo.mjs +1 -0
- package/dist/web-components/LoadedCanvas-DOjtxLSe.mjs +1 -0
- package/dist/web-components/LoadedMap-DouDS2lO.mjs +1 -0
- package/dist/web-components/Loading-CBKfwsML.mjs +1 -0
- package/dist/web-components/Map-Bcgp_R8H.mjs +1 -0
- package/dist/web-components/MapView-CD5zkTs8.mjs +1 -0
- package/dist/web-components/Markup-C1hMA8wk.mjs +2 -0
- package/dist/web-components/MediaBody-B_Gii4we.mjs +1 -0
- package/dist/web-components/MediaBody-BfrKIPte.mjs +1 -0
- package/dist/web-components/Navigator-BSJbEbuJ.mjs +1 -0
- package/dist/web-components/Pager-Di_2hHM3.mjs +1 -0
- package/dist/web-components/Panel-DbsC8A9V.mjs +1 -0
- package/dist/web-components/PanelToggle-mUDw73zI.mjs +1 -0
- package/dist/web-components/PartOfManifest-7eOwURrF.mjs +1 -0
- package/dist/web-components/Pending-BPOQ2z1L.mjs +1 -0
- package/dist/web-components/Primitives-XQO3m1wG.mjs +1 -0
- package/dist/web-components/Provider-B61118lU.mjs +1 -0
- package/dist/web-components/ReadMore-BJH-qqte.mjs +1 -0
- package/dist/web-components/Root-Dj277K6p.mjs +1 -0
- package/dist/web-components/Scene-BTWpLeec.mjs +1 -0
- package/dist/web-components/SceneView-BYo7WmPt.mjs +1 -0
- package/dist/web-components/Search-ZV8FFN4p.mjs +1 -0
- package/dist/web-components/Sections-ejwu1_Sm.mjs +2 -0
- package/dist/web-components/StandaloneItems-BYaiyCca.mjs +1 -0
- package/dist/web-components/Status-YbQK2KzY.mjs +1 -0
- package/dist/web-components/Timeline-ByyVSd7B.mjs +1 -0
- package/dist/web-components/Tip-IO11xX4x.mjs +1 -0
- package/dist/web-components/Transcript-D0gUxUoA.mjs +1 -0
- package/dist/web-components/annotation-collection-Csv7WIlm.mjs +1 -0
- package/dist/web-components/annotations-content-BS_OFz5Z.mjs +1 -0
- package/dist/web-components/assets/maplibre-gl-worker-kTz9OPxr.js +13831 -0
- package/dist/web-components/body-CKjwwFep.mjs +1 -0
- package/dist/web-components/bringIntoView-CQH5ZgMM.mjs +1 -0
- package/dist/web-components/canvas-CIzpp-Uz.mjs +1 -0
- package/dist/web-components/classnames-DukgfdpI.mjs +1 -0
- package/dist/web-components/cloverEngine-B4LinbSt.mjs +164 -0
- package/dist/web-components/content-state-reader-D1BkpICh.mjs +1 -0
- package/dist/web-components/contexts-ByL3eA_T.mjs +1 -0
- package/dist/web-components/controls-Dj2BybWb.mjs +1 -0
- package/dist/web-components/custom-elements.json +2739 -0
- package/dist/web-components/dragToClose-C-Pf1IeO.mjs +1 -0
- package/dist/web-components/engine-BSt8LTso.mjs +4228 -0
- package/dist/web-components/engines-CC0OEsVE.mjs +1 -0
- package/dist/web-components/es-BwMkoRod.mjs +1 -0
- package/dist/web-components/fi-gPFOn9RK.mjs +1 -0
- package/dist/web-components/fr-DUHmgdJo.mjs +1 -0
- package/dist/web-components/fromManifest-BhemHaoA.mjs +1 -0
- package/dist/web-components/glyphs-drROkef9.mjs +1 -0
- package/dist/web-components/heading-Cjt0f-Eu.mjs +1 -0
- package/dist/web-components/hls-CdKrthkC.mjs +40 -0
- package/dist/web-components/hooks-BXzQSllm.mjs +1 -0
- package/dist/web-components/imageService-dsdmcegU.mjs +1 -0
- package/dist/web-components/index-B7nZdqLg.mjs +1 -0
- package/dist/web-components/index.d.mts +604 -0
- package/dist/web-components/index.mjs +1 -0
- package/dist/web-components/index.umd.js +18 -0
- package/dist/web-components/items-CB2Uk7ts.mjs +1 -0
- package/dist/web-components/items-jfQ5XzEj.mjs +1 -0
- package/dist/web-components/keep-fragments-B5nlv2ck.mjs +1 -0
- package/dist/web-components/label-Vbg_cMOJ.mjs +1 -0
- package/dist/web-components/languageCode-cCpiU0b0.mjs +1 -0
- package/dist/web-components/layout-mMHI0lsj.mjs +1 -0
- package/dist/web-components/link-ZRnv5NFR.mjs +1 -0
- package/dist/web-components/logo-Boy6u4m2.mjs +1 -0
- package/dist/web-components/maplibre-gl-CQ4OueXY.mjs +823 -0
- package/dist/web-components/markdown-CCYJwzFn.mjs +5 -0
- package/dist/web-components/models-D1EE_CmH.mjs +1 -0
- package/dist/web-components/nb-BSvnQ6jd.mjs +1 -0
- package/dist/web-components/nn-Dg2_HdZu.mjs +1 -0
- package/dist/web-components/no-BSvnQ6jd.mjs +1 -0
- package/dist/web-components/nodes-B7JRwBgl.mjs +1 -0
- package/dist/web-components/overlayImage-0OgQl1TL.mjs +1 -0
- package/dist/web-components/panClearOfControls-ac9uf-Qs.mjs +1 -0
- package/dist/web-components/panel-CjXfre-g.mjs +1 -0
- package/dist/web-components/part-cUiPs2-y.mjs +1 -0
- package/dist/web-components/playerSurface-CU5XxI1j.mjs +1 -0
- package/dist/web-components/provider-C1wKfdjb.mjs +1 -0
- package/dist/web-components/pt-B3J80JgO.mjs +1 -0
- package/dist/web-components/read-more-DNHNtG-a.mjs +1 -0
- package/dist/web-components/rendererSurface-DhIlOjGT.mjs +22 -0
- package/dist/web-components/renderers-BMSWEFUR.mjs +1 -0
- package/dist/web-components/resource-DLHocQ1C.mjs +1 -0
- package/dist/web-components/sanitize-Dc7nOsgO.mjs +3 -0
- package/dist/web-components/search-CLy2Wj01.mjs +1 -0
- package/dist/web-components/shared-YUjOSBKO.mjs +1 -0
- package/dist/web-components/show-link-CyzYE1eS.mjs +1 -0
- package/dist/web-components/sizedImage-uv_NlE0l.mjs +1 -0
- package/dist/web-components/split-CYuMjp89.mjs +1 -0
- package/dist/web-components/splitting-BnQUxxgH.mjs +1 -0
- package/dist/web-components/status-Ms5L0ghK.mjs +1 -0
- package/dist/web-components/styles-CyuM_fB1.mjs +1 -0
- package/dist/web-components/svg-shape-DLY3g7oq.mjs +1 -0
- package/dist/web-components/text-BTAkxEfQ.mjs +5 -0
- package/dist/web-components/three.mjs +1 -0
- package/dist/web-components/thumbnail-c2K_iQsD.mjs +1 -0
- package/dist/web-components/time-B9GZoYcm.mjs +1 -0
- package/dist/web-components/tip-dWhupWSr.mjs +1 -0
- package/dist/web-components/toggle-BQTjR1I3.mjs +1 -0
- package/dist/web-components/upgrader-XNxI-5jo.mjs +1 -0
- package/dist/web-components/useContainerName-BpJ3IWY0.mjs +1 -0
- package/dist/web-components/useNearViewport-CtLyYg9n.mjs +1 -0
- package/dist/web-components/useScrollTrack-WbG28FPD.mjs +1 -0
- package/dist/web-components/viewer/AnnotationMenu-ZKyBeyUU.mjs +1 -0
- package/dist/web-components/viewer/AnnotationState-DO33zokc.mjs +1 -0
- package/dist/web-components/viewer/Annotations-BOjhr5ks.mjs +1 -0
- package/dist/web-components/viewer/Annotations-DkLueFLK.mjs +2 -0
- package/dist/web-components/viewer/Canvas2DBackend-CAmzJD5P.mjs +1 -0
- package/dist/web-components/viewer/CaptionDetails-DOJlUtOn.mjs +1 -0
- package/dist/web-components/viewer/ChoiceMenu-BDq6H34G.mjs +1 -0
- package/dist/web-components/viewer/Collection-By3puO0V.mjs +1 -0
- package/dist/web-components/viewer/Connected-DZNO2CPf.mjs +1 -0
- package/dist/web-components/viewer/Connected-ESg5y49m.mjs +1 -0
- package/dist/web-components/viewer/Contents-B_FqDwTW.mjs +1 -0
- package/dist/web-components/viewer/ControlMenu-DdQl-dTf.mjs +1 -0
- package/dist/web-components/viewer/Cue-BTRHfiWQ.mjs +1 -0
- package/dist/web-components/viewer/Document-B9_PyD2w.mjs +1 -0
- package/dist/web-components/viewer/DocumentPanel-CtEJVPoE.mjs +1 -0
- package/dist/web-components/viewer/DomLayers-DRdQSEtN.mjs +1 -0
- package/dist/web-components/viewer/EntryBodies-CJuTRcTq.mjs +1 -0
- package/dist/web-components/viewer/FieldPill-06uwrNwE.mjs +1 -0
- package/dist/web-components/viewer/FrameAnimation-3dcDHf5q.mjs +1 -0
- package/dist/web-components/viewer/Gallery-BYasTqZc.mjs +1 -0
- package/dist/web-components/viewer/HideToggle-BxkNMX-T.mjs +1 -0
- package/dist/web-components/viewer/LightboxBody-CXMc1xOH.mjs +1 -0
- package/dist/web-components/viewer/MapView-DCerrRRV.mjs +1 -0
- package/dist/web-components/viewer/MediaBody-BdkJcyGy.mjs +1 -0
- package/dist/web-components/viewer/MediaBody-waF4KvHp.mjs +1 -0
- package/dist/web-components/viewer/Navigator-CKwDgG2x.mjs +1 -0
- package/dist/web-components/viewer/PartOfManifest-DalHJFwC.mjs +1 -0
- package/dist/web-components/viewer/Search-Di_QQfDb.mjs +1 -0
- package/dist/web-components/viewer/StandaloneItems-B9J6nnWn.mjs +1 -0
- package/dist/web-components/viewer/Transcript-aHOixfna.mjs +1 -0
- package/dist/web-components/viewer/annotation-collection-I2UkdobR.mjs +1 -0
- package/dist/web-components/viewer/annotations-content-D-i4j9pD.mjs +1 -0
- package/dist/web-components/viewer/cloverEngine-CynoKdta.mjs +164 -0
- package/dist/web-components/viewer/content-state-reader-D7GIMcKK.mjs +1 -0
- package/dist/web-components/viewer/host-DlCltI_c.mjs +1 -0
- package/dist/web-components/viewer/index.d.mts +7 -0
- package/dist/web-components/viewer/index.mjs +1 -0
- package/dist/web-components/viewer/index.umd.js +18 -0
- package/dist/web-components/viewer/link-BX-wzj1u.mjs +1 -0
- package/dist/web-components/viewer/overlayImage-CHqn1fG8.mjs +1 -0
- package/dist/web-components/viewer/renderers-C_wdmw9v.mjs +1 -0
- package/dist/web-components/viewer/search-BHLyNxZ6.mjs +1 -0
- package/dist/web-components/viewer/styles-BRCkEU3w.mjs +1 -0
- package/dist/web-components/viewer/viewer-ipqAA-xQ.mjs +28 -0
- package/dist/web-components/viewer/vtt-XiS_-5Ao.mjs +5 -0
- package/dist/web-components/viewer-DEHIsIHd.mjs +1 -0
- package/dist/web-components/vtt-DYAOuQoK.mjs +5 -0
- package/dist/web-components/worker-CjXN0dku.mjs +1 -0
- package/package.json +111 -4
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Viewer, Viewer as Viewer2 } from "./components/Viewer/Viewer.mjs";
|
|
3
|
+
import { default as default2 } from "./components/Canvas/index.mjs";
|
|
4
|
+
import { Root } from "./components/Root/Root.mjs";
|
|
5
|
+
import { Body } from "./components/Body/Body.mjs";
|
|
6
|
+
import { Label } from "./components/Label/Label.mjs";
|
|
7
|
+
import { Items } from "./components/Items/Items.mjs";
|
|
8
|
+
import { Next, Position, Previous } from "./components/Items/Pager.mjs";
|
|
9
|
+
import { Status } from "./components/Status/Status.mjs";
|
|
10
|
+
import { Homepage, Id, Metadata, PartOf, Rendering, RequiredStatement, Rights, SeeAlso, Summary, Thumbnail, Value } from "./components/Primitives/Primitives.mjs";
|
|
11
|
+
import { Logo, Provider } from "./components/Provider/Provider.mjs";
|
|
12
|
+
import { Panel, Tab } from "./components/Panel/Panel.mjs";
|
|
13
|
+
import { About } from "./components/Panel/About.mjs";
|
|
14
|
+
import { Annotations } from "./components/Annotations/Annotations.mjs";
|
|
15
|
+
import { Transcript } from "./components/Transcript/Transcript.mjs";
|
|
16
|
+
import { Contents } from "./components/Contents/Contents.mjs";
|
|
17
|
+
import { Download } from "./components/Download/Download.mjs";
|
|
18
|
+
import { Split, SplitHandle, SplitPane } from "./components/Split/Split.mjs";
|
|
19
|
+
import { Search } from "./components/Search/Search.mjs";
|
|
20
|
+
import { search } from "./core/search.mjs";
|
|
21
|
+
import { SEARCH_SET_ID, searchServiceOf } from "./core/search-service.mjs";
|
|
22
|
+
import { setMapWorkerUrl } from "./core/map-config.mjs";
|
|
23
|
+
import { Collection } from "./components/Collection/Collection.mjs";
|
|
24
|
+
import { CollectionSelect } from "./components/CollectionSelect/CollectionSelect.mjs";
|
|
25
|
+
import { PanelToggle } from "./components/Panel/PanelToggle.mjs";
|
|
26
|
+
import { Timeline } from "./components/Timeline/Timeline.mjs";
|
|
27
|
+
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 { useProvider } from "./components/Primitives/resource.mjs";
|
|
30
|
+
import { visuallyHidden } from "./ui/visuallyHidden.mjs";
|
|
31
|
+
import { Tip } from "./ui/Tip.mjs";
|
|
32
|
+
import { useOneOpen } from "./ui/useOneOpen.mjs";
|
|
33
|
+
import { useUniqueId } from "./ui/useUniqueId.mjs";
|
|
34
|
+
import { ReadMore } from "./ui/ReadMore.mjs";
|
|
35
|
+
import { titled } from "./ui/heading.mjs";
|
|
36
|
+
import { useClover, useCloverSelector } from "./react/context.mjs";
|
|
37
|
+
import { toPresentation4 } from "./core/presentation.mjs";
|
|
38
|
+
import { buildContentState, encodeContentState } from "./core/content-state.mjs";
|
|
39
|
+
import { decodeContentState } from "./core/content-state-reader.mjs";
|
|
40
|
+
import { cueAt, parseVtt } from "./core/vtt.mjs";
|
|
41
|
+
import { chaptersOf, currentContents, tableOfContents } from "./core/ranges.mjs";
|
|
42
|
+
import { localize } from "./core/value.mjs";
|
|
43
|
+
import { readAs, toPlainText } from "./core/text.mjs";
|
|
44
|
+
import { resolveThumbnail, stillSource, thumbnailSource } from "./core/thumbnail.mjs";
|
|
45
|
+
import { regionSource } from "./core/region.mjs";
|
|
46
|
+
import { groupViews, resolveBehavior, resolveDirection } from "./core/sequence.mjs";
|
|
47
|
+
import { CLOVER_I18N_NAMESPACE, initCloverI18n } from "./i18n/config.mjs";
|
|
48
|
+
export {
|
|
49
|
+
About,
|
|
50
|
+
Annotations,
|
|
51
|
+
Body,
|
|
52
|
+
CLOVER_I18N_NAMESPACE,
|
|
53
|
+
default2 as Canvas,
|
|
54
|
+
Collection,
|
|
55
|
+
CollectionSelect,
|
|
56
|
+
Contents,
|
|
57
|
+
Download,
|
|
58
|
+
Homepage,
|
|
59
|
+
Id,
|
|
60
|
+
Items,
|
|
61
|
+
Label,
|
|
62
|
+
Logo,
|
|
63
|
+
Metadata,
|
|
64
|
+
Next,
|
|
65
|
+
Panel,
|
|
66
|
+
PanelToggle,
|
|
67
|
+
PartOf,
|
|
68
|
+
Position,
|
|
69
|
+
Previous,
|
|
70
|
+
Provider,
|
|
71
|
+
ReadMore,
|
|
72
|
+
Rendering,
|
|
73
|
+
RequiredStatement,
|
|
74
|
+
Rights,
|
|
75
|
+
Root,
|
|
76
|
+
SEARCH_SET_ID,
|
|
77
|
+
Scene,
|
|
78
|
+
Search,
|
|
79
|
+
SeeAlso,
|
|
80
|
+
Split,
|
|
81
|
+
SplitHandle,
|
|
82
|
+
SplitPane,
|
|
83
|
+
Status,
|
|
84
|
+
Summary,
|
|
85
|
+
Tab,
|
|
86
|
+
Thumbnail,
|
|
87
|
+
Timeline,
|
|
88
|
+
Tip,
|
|
89
|
+
Transcript,
|
|
90
|
+
Value,
|
|
91
|
+
Viewer,
|
|
92
|
+
buildContentState,
|
|
93
|
+
chaptersOf,
|
|
94
|
+
cueAt,
|
|
95
|
+
currentContents,
|
|
96
|
+
decodeContentState,
|
|
97
|
+
Viewer2 as default,
|
|
98
|
+
encodeContentState,
|
|
99
|
+
groupViews,
|
|
100
|
+
initCloverI18n,
|
|
101
|
+
localize,
|
|
102
|
+
parseVtt,
|
|
103
|
+
readAs,
|
|
104
|
+
regionSource,
|
|
105
|
+
resolveBehavior,
|
|
106
|
+
resolveDirection,
|
|
107
|
+
resolveThumbnail,
|
|
108
|
+
search,
|
|
109
|
+
searchServiceOf,
|
|
110
|
+
setMapWorkerUrl,
|
|
111
|
+
stillSource,
|
|
112
|
+
tableOfContents,
|
|
113
|
+
thumbnailSource,
|
|
114
|
+
titled,
|
|
115
|
+
toPlainText,
|
|
116
|
+
toPresentation4,
|
|
117
|
+
useActiveCanvas,
|
|
118
|
+
useAnnotationSets,
|
|
119
|
+
useClover,
|
|
120
|
+
useCloverSelector,
|
|
121
|
+
useLangOf,
|
|
122
|
+
useLocalized,
|
|
123
|
+
useManifest,
|
|
124
|
+
useNavigation,
|
|
125
|
+
useOneOpen,
|
|
126
|
+
useProvider,
|
|
127
|
+
useSequence,
|
|
128
|
+
useStatus,
|
|
129
|
+
useT,
|
|
130
|
+
useUniqueId,
|
|
131
|
+
useVisibleCanvases,
|
|
132
|
+
visuallyHidden
|
|
133
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const getFullscreenElement = () => {
|
|
3
|
+
if (typeof document === "undefined") return null;
|
|
4
|
+
const doc = document;
|
|
5
|
+
return doc.fullscreenElement ?? doc.webkitFullscreenElement ?? null;
|
|
6
|
+
};
|
|
7
|
+
const isFullscreenSupported = () => {
|
|
8
|
+
if (typeof document === "undefined") return false;
|
|
9
|
+
const doc = document;
|
|
10
|
+
return Boolean(doc.fullscreenEnabled ?? doc.webkitFullscreenEnabled);
|
|
11
|
+
};
|
|
12
|
+
const getCloverRoot = (from) => from == null ? void 0 : from.closest(".clover-canvas");
|
|
13
|
+
const enterNativeFullscreen = (video, from) => {
|
|
14
|
+
if (typeof video.webkitEnterFullscreen !== "function") return;
|
|
15
|
+
const canvas = from.closest(".clover-canvas");
|
|
16
|
+
const placed = !video.isConnected && Boolean(canvas);
|
|
17
|
+
if (placed && canvas) {
|
|
18
|
+
const style = video.getAttribute("style");
|
|
19
|
+
video.style.cssText = "position:absolute;inset:0;z-index:-1;width:100%;height:100%;object-fit:contain;pointer-events:none";
|
|
20
|
+
canvas.prepend(video);
|
|
21
|
+
video.addEventListener(
|
|
22
|
+
"webkitendfullscreen",
|
|
23
|
+
() => {
|
|
24
|
+
video.remove();
|
|
25
|
+
if (style === null) video.removeAttribute("style");
|
|
26
|
+
else video.setAttribute("style", style);
|
|
27
|
+
},
|
|
28
|
+
{ once: true }
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
const enter = () => {
|
|
32
|
+
var _a;
|
|
33
|
+
try {
|
|
34
|
+
(_a = video.webkitEnterFullscreen) == null ? void 0 : _a.call(video);
|
|
35
|
+
} catch {
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
if (placed) requestAnimationFrame(enter);
|
|
39
|
+
else enter();
|
|
40
|
+
};
|
|
41
|
+
const toggleFullscreen = async (from, video) => {
|
|
42
|
+
var _a, _b, _c, _d;
|
|
43
|
+
const root = getCloverRoot(from);
|
|
44
|
+
if (!root) return;
|
|
45
|
+
try {
|
|
46
|
+
if (getFullscreenElement()) {
|
|
47
|
+
const doc = document;
|
|
48
|
+
await (((_a = doc.exitFullscreen) == null ? void 0 : _a.call(doc)) ?? ((_b = doc.webkitExitFullscreen) == null ? void 0 : _b.call(doc)));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (!isFullscreenSupported()) {
|
|
52
|
+
if (video && from) enterNativeFullscreen(video, from);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const element = root;
|
|
56
|
+
await (((_c = element.requestFullscreen) == null ? void 0 : _c.call(element)) ?? ((_d = element.webkitRequestFullscreen) == null ? void 0 : _d.call(element)));
|
|
57
|
+
} catch {
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
export {
|
|
61
|
+
getCloverRoot,
|
|
62
|
+
getFullscreenElement,
|
|
63
|
+
isFullscreenSupported,
|
|
64
|
+
toggleFullscreen
|
|
65
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { readAccessor } from "./load.mjs";
|
|
3
|
+
const emptyBox = () => ({
|
|
4
|
+
min: [Infinity, Infinity, Infinity],
|
|
5
|
+
max: [-Infinity, -Infinity, -Infinity]
|
|
6
|
+
});
|
|
7
|
+
function turnsNothing(model) {
|
|
8
|
+
for (let column = 0; column < 3; column++) {
|
|
9
|
+
let axes = 0;
|
|
10
|
+
for (let row = 0; row < 3; row++)
|
|
11
|
+
if (Math.abs(model[column * 4 + row]) > 1e-6) axes++;
|
|
12
|
+
if (axes > 1) return false;
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
function growBox(box, asset, position, model) {
|
|
17
|
+
const accessor = asset.json.accessors[position];
|
|
18
|
+
let points;
|
|
19
|
+
if (turnsNothing(model) && accessor.min && accessor.max && !accessor.normalized) {
|
|
20
|
+
const [min, max] = [accessor.min, accessor.max];
|
|
21
|
+
points = Array.from({ length: 8 }, (_, corner) => [
|
|
22
|
+
corner & 1 ? max[0] : min[0],
|
|
23
|
+
corner & 2 ? max[1] : min[1],
|
|
24
|
+
corner & 4 ? max[2] : min[2]
|
|
25
|
+
]).flat();
|
|
26
|
+
} else points = readAccessor(asset, position);
|
|
27
|
+
const m = model;
|
|
28
|
+
for (let i = 0; i + 2 < points.length; i += 3) {
|
|
29
|
+
const x = points[i];
|
|
30
|
+
const y = points[i + 1];
|
|
31
|
+
const z = points[i + 2];
|
|
32
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
33
|
+
const value = m[axis] * x + m[4 + axis] * y + m[8 + axis] * z + m[12 + axis];
|
|
34
|
+
if (value < box.min[axis]) box.min[axis] = value;
|
|
35
|
+
if (value > box.max[axis]) box.max[axis] = value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return box;
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
emptyBox,
|
|
42
|
+
growBox,
|
|
43
|
+
turnsNothing
|
|
44
|
+
};
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { requestKey, cloverFetch } from "../../core/request.mjs";
|
|
3
|
+
const EXTENSIONS = [
|
|
4
|
+
"KHR_materials_unlit",
|
|
5
|
+
"KHR_materials_ior",
|
|
6
|
+
"KHR_materials_specular",
|
|
7
|
+
"KHR_mesh_quantization"
|
|
8
|
+
];
|
|
9
|
+
const GLB = 1179937895;
|
|
10
|
+
const JSON_CHUNK = 1313821514;
|
|
11
|
+
const BIN_CHUNK = 5130562;
|
|
12
|
+
function parseGlb(data) {
|
|
13
|
+
const view = new DataView(data);
|
|
14
|
+
if (view.getUint32(0, true) !== GLB) throw new Error("This is not a GLB.");
|
|
15
|
+
if (view.getUint32(4, true) !== 2) throw new Error("Only glTF 2.0 is drawn.");
|
|
16
|
+
let json;
|
|
17
|
+
let bin;
|
|
18
|
+
const length = Math.min(view.getUint32(8, true), data.byteLength);
|
|
19
|
+
for (let offset = 12; offset + 8 <= length; ) {
|
|
20
|
+
const size = view.getUint32(offset, true);
|
|
21
|
+
const type = view.getUint32(offset + 4, true);
|
|
22
|
+
const start = offset + 8;
|
|
23
|
+
if (type === JSON_CHUNK)
|
|
24
|
+
json = JSON.parse(
|
|
25
|
+
new TextDecoder().decode(new Uint8Array(data, start, size))
|
|
26
|
+
);
|
|
27
|
+
else if (type === BIN_CHUNK) bin = data.slice(start, start + size);
|
|
28
|
+
offset = start + size;
|
|
29
|
+
}
|
|
30
|
+
if (!json) throw new Error("The GLB has no JSON chunk.");
|
|
31
|
+
return { json, bin };
|
|
32
|
+
}
|
|
33
|
+
async function fetchBytes(uri, base, request) {
|
|
34
|
+
const url = new URL(uri, base).href;
|
|
35
|
+
const response = url.startsWith("data:") ? await fetch(url) : await cloverFetch(request, url);
|
|
36
|
+
if (!response.ok) throw new Error(`${url} answered ${response.status}`);
|
|
37
|
+
return response.arrayBuffer();
|
|
38
|
+
}
|
|
39
|
+
const loading = /* @__PURE__ */ new WeakMap();
|
|
40
|
+
function loadGltf(url, request) {
|
|
41
|
+
const run = (request == null ? void 0 : request.fetch) ?? globalThis.fetch;
|
|
42
|
+
const loads = loading.get(run) ?? /* @__PURE__ */ new Map();
|
|
43
|
+
loading.set(run, loads);
|
|
44
|
+
const key = `${requestKey(request)} ${url}`;
|
|
45
|
+
let load = loads.get(key);
|
|
46
|
+
if (!load) {
|
|
47
|
+
load = readGltf(url, request).finally(() => loads.delete(key));
|
|
48
|
+
loads.set(key, load);
|
|
49
|
+
}
|
|
50
|
+
return load;
|
|
51
|
+
}
|
|
52
|
+
async function readGltf(url, request) {
|
|
53
|
+
const data = await fetchBytes(url, location.href, request);
|
|
54
|
+
const glb = new DataView(data).getUint32(0, true) === GLB;
|
|
55
|
+
const { json, bin } = glb ? parseGlb(data) : { json: JSON.parse(new TextDecoder().decode(data)) };
|
|
56
|
+
const missing = (json.extensionsRequired ?? []).filter(
|
|
57
|
+
(name) => !EXTENSIONS.includes(name)
|
|
58
|
+
);
|
|
59
|
+
if (missing.length)
|
|
60
|
+
throw new Error(
|
|
61
|
+
`Clover's renderer cannot draw this model: it requires ${missing.join(", ")}.`
|
|
62
|
+
);
|
|
63
|
+
const buffers = await Promise.all(
|
|
64
|
+
(json.buffers ?? []).map((buffer, index) => {
|
|
65
|
+
if (buffer.uri !== void 0) return fetchBytes(buffer.uri, url, request);
|
|
66
|
+
if (index === 0 && bin) return bin;
|
|
67
|
+
throw new Error("A buffer of the model has no data.");
|
|
68
|
+
})
|
|
69
|
+
);
|
|
70
|
+
const images = await Promise.all(
|
|
71
|
+
(json.images ?? []).map(async (image) => {
|
|
72
|
+
try {
|
|
73
|
+
let blob;
|
|
74
|
+
if (image.bufferView !== void 0) {
|
|
75
|
+
const view = json.bufferViews[image.bufferView];
|
|
76
|
+
blob = new Blob(
|
|
77
|
+
[
|
|
78
|
+
new Uint8Array(
|
|
79
|
+
buffers[view.buffer],
|
|
80
|
+
view.byteOffset ?? 0,
|
|
81
|
+
view.byteLength
|
|
82
|
+
)
|
|
83
|
+
],
|
|
84
|
+
{ type: image.mimeType }
|
|
85
|
+
);
|
|
86
|
+
} else if (image.uri !== void 0) {
|
|
87
|
+
blob = new Blob([await fetchBytes(image.uri, url, request)], {
|
|
88
|
+
type: image.mimeType
|
|
89
|
+
});
|
|
90
|
+
} else return null;
|
|
91
|
+
return await createImageBitmap(blob, {
|
|
92
|
+
premultiplyAlpha: "none",
|
|
93
|
+
colorSpaceConversion: "none"
|
|
94
|
+
});
|
|
95
|
+
} catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
})
|
|
99
|
+
);
|
|
100
|
+
return { json, buffers, images };
|
|
101
|
+
}
|
|
102
|
+
const COMPONENTS = {
|
|
103
|
+
SCALAR: 1,
|
|
104
|
+
VEC2: 2,
|
|
105
|
+
VEC3: 3,
|
|
106
|
+
VEC4: 4,
|
|
107
|
+
MAT2: 4,
|
|
108
|
+
MAT3: 9,
|
|
109
|
+
MAT4: 16
|
|
110
|
+
};
|
|
111
|
+
const COMPONENT_BYTES = {
|
|
112
|
+
5120: 1,
|
|
113
|
+
5121: 1,
|
|
114
|
+
5122: 2,
|
|
115
|
+
5123: 2,
|
|
116
|
+
5125: 4,
|
|
117
|
+
5126: 4
|
|
118
|
+
};
|
|
119
|
+
const componentsOf = (type) => COMPONENTS[type];
|
|
120
|
+
function readAccessor(asset, index) {
|
|
121
|
+
const accessor = asset.json.accessors[index];
|
|
122
|
+
const size = componentsOf(accessor.type);
|
|
123
|
+
const out = new Float32Array(accessor.count * size);
|
|
124
|
+
if (accessor.bufferView === void 0) return out;
|
|
125
|
+
const view = asset.json.bufferViews[accessor.bufferView];
|
|
126
|
+
const bytes = COMPONENT_BYTES[accessor.componentType];
|
|
127
|
+
const stride = view.byteStride || bytes * size;
|
|
128
|
+
const data = new DataView(
|
|
129
|
+
asset.buffers[view.buffer],
|
|
130
|
+
(view.byteOffset ?? 0) + (accessor.byteOffset ?? 0)
|
|
131
|
+
);
|
|
132
|
+
const read = {
|
|
133
|
+
5120: (o) => data.getInt8(o),
|
|
134
|
+
5121: (o) => data.getUint8(o),
|
|
135
|
+
5122: (o) => data.getInt16(o, true),
|
|
136
|
+
5123: (o) => data.getUint16(o, true),
|
|
137
|
+
5125: (o) => data.getUint32(o, true),
|
|
138
|
+
5126: (o) => data.getFloat32(o, true)
|
|
139
|
+
}[accessor.componentType] ?? (() => 0);
|
|
140
|
+
const scale = accessor.normalized ? { 5120: 127, 5121: 255, 5122: 32767, 5123: 65535 }[accessor.componentType] : void 0;
|
|
141
|
+
for (let element = 0; element < accessor.count; element++) {
|
|
142
|
+
for (let component = 0; component < size; component++) {
|
|
143
|
+
const value = read(element * stride + component * bytes);
|
|
144
|
+
out[element * size + component] = scale ? Math.max(value / scale, -1) : value;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return out;
|
|
148
|
+
}
|
|
149
|
+
export {
|
|
150
|
+
COMPONENT_BYTES,
|
|
151
|
+
EXTENSIONS,
|
|
152
|
+
componentsOf,
|
|
153
|
+
loadGltf,
|
|
154
|
+
parseGlb,
|
|
155
|
+
readAccessor
|
|
156
|
+
};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const identity = () => new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
|
|
3
|
+
function multiply(a, b) {
|
|
4
|
+
const out = new Float32Array(16);
|
|
5
|
+
for (let column = 0; column < 4; column++) {
|
|
6
|
+
for (let row = 0; row < 4; row++) {
|
|
7
|
+
let sum = 0;
|
|
8
|
+
for (let k = 0; k < 4; k++) sum += a[k * 4 + row] * b[column * 4 + k];
|
|
9
|
+
out[column * 4 + row] = sum;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return out;
|
|
13
|
+
}
|
|
14
|
+
function compose([tx, ty, tz], [x, y, z, w], [sx, sy, sz]) {
|
|
15
|
+
const x2 = x + x;
|
|
16
|
+
const y2 = y + y;
|
|
17
|
+
const z2 = z + z;
|
|
18
|
+
const xx = x * x2;
|
|
19
|
+
const xy = x * y2;
|
|
20
|
+
const xz = x * z2;
|
|
21
|
+
const yy = y * y2;
|
|
22
|
+
const yz = y * z2;
|
|
23
|
+
const zz = z * z2;
|
|
24
|
+
const wx = w * x2;
|
|
25
|
+
const wy = w * y2;
|
|
26
|
+
const wz = w * z2;
|
|
27
|
+
return new Float32Array([
|
|
28
|
+
(1 - (yy + zz)) * sx,
|
|
29
|
+
(xy + wz) * sx,
|
|
30
|
+
(xz - wy) * sx,
|
|
31
|
+
0,
|
|
32
|
+
(xy - wz) * sy,
|
|
33
|
+
(1 - (xx + zz)) * sy,
|
|
34
|
+
(yz + wx) * sy,
|
|
35
|
+
0,
|
|
36
|
+
(xz + wy) * sz,
|
|
37
|
+
(yz - wx) * sz,
|
|
38
|
+
(1 - (xx + yy)) * sz,
|
|
39
|
+
0,
|
|
40
|
+
tx,
|
|
41
|
+
ty,
|
|
42
|
+
tz,
|
|
43
|
+
1
|
|
44
|
+
]);
|
|
45
|
+
}
|
|
46
|
+
const translation = (move) => compose(move, [0, 0, 0, 1], [1, 1, 1]);
|
|
47
|
+
const scaling = (scale) => compose([0, 0, 0], [0, 0, 0, 1], scale);
|
|
48
|
+
function rotation([x, y, z]) {
|
|
49
|
+
const about = (axis, degrees) => {
|
|
50
|
+
const angle = degrees * Math.PI / 180;
|
|
51
|
+
const c = Math.cos(angle);
|
|
52
|
+
const s = Math.sin(angle);
|
|
53
|
+
const m = identity();
|
|
54
|
+
const [i, j] = axis === 0 ? [1, 2] : axis === 1 ? [2, 0] : [0, 1];
|
|
55
|
+
m[i * 4 + i] = c;
|
|
56
|
+
m[i * 4 + j] = s;
|
|
57
|
+
m[j * 4 + i] = -s;
|
|
58
|
+
m[j * 4 + j] = c;
|
|
59
|
+
return m;
|
|
60
|
+
};
|
|
61
|
+
return multiply(about(2, z), multiply(about(1, y), about(0, x)));
|
|
62
|
+
}
|
|
63
|
+
function perspective(fieldOfView, aspect, near, far) {
|
|
64
|
+
const f = 1 / Math.tan(fieldOfView / 2);
|
|
65
|
+
const range = 1 / (near - far);
|
|
66
|
+
return new Float32Array([
|
|
67
|
+
f / aspect,
|
|
68
|
+
0,
|
|
69
|
+
0,
|
|
70
|
+
0,
|
|
71
|
+
0,
|
|
72
|
+
f,
|
|
73
|
+
0,
|
|
74
|
+
0,
|
|
75
|
+
0,
|
|
76
|
+
0,
|
|
77
|
+
(far + near) * range,
|
|
78
|
+
-1,
|
|
79
|
+
0,
|
|
80
|
+
0,
|
|
81
|
+
2 * far * near * range,
|
|
82
|
+
0
|
|
83
|
+
]);
|
|
84
|
+
}
|
|
85
|
+
function lookAt(eye, target) {
|
|
86
|
+
const unit = (v) => {
|
|
87
|
+
const length = Math.hypot(...v) || 1;
|
|
88
|
+
return [v[0] / length, v[1] / length, v[2] / length];
|
|
89
|
+
};
|
|
90
|
+
const cross = (a, b) => [
|
|
91
|
+
a[1] * b[2] - a[2] * b[1],
|
|
92
|
+
a[2] * b[0] - a[0] * b[2],
|
|
93
|
+
a[0] * b[1] - a[1] * b[0]
|
|
94
|
+
];
|
|
95
|
+
const dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
96
|
+
const back = unit([
|
|
97
|
+
eye[0] - target[0],
|
|
98
|
+
eye[1] - target[1],
|
|
99
|
+
eye[2] - target[2]
|
|
100
|
+
]);
|
|
101
|
+
const right = unit(cross([0, 1, 0], back));
|
|
102
|
+
const up = cross(back, right);
|
|
103
|
+
return new Float32Array([
|
|
104
|
+
right[0],
|
|
105
|
+
up[0],
|
|
106
|
+
back[0],
|
|
107
|
+
0,
|
|
108
|
+
right[1],
|
|
109
|
+
up[1],
|
|
110
|
+
back[1],
|
|
111
|
+
0,
|
|
112
|
+
right[2],
|
|
113
|
+
up[2],
|
|
114
|
+
back[2],
|
|
115
|
+
0,
|
|
116
|
+
-dot(right, eye),
|
|
117
|
+
-dot(up, eye),
|
|
118
|
+
-dot(back, eye),
|
|
119
|
+
1
|
|
120
|
+
]);
|
|
121
|
+
}
|
|
122
|
+
function normalMatrix(m) {
|
|
123
|
+
const [a, b, c, , d, e, f, , g, h, i] = m;
|
|
124
|
+
const A = e * i - f * h;
|
|
125
|
+
const B = f * g - d * i;
|
|
126
|
+
const C = d * h - e * g;
|
|
127
|
+
const det = a * A + b * B + c * C || 1;
|
|
128
|
+
return new Float32Array([
|
|
129
|
+
A / det,
|
|
130
|
+
B / det,
|
|
131
|
+
C / det,
|
|
132
|
+
(c * h - b * i) / det,
|
|
133
|
+
(a * i - c * g) / det,
|
|
134
|
+
(b * g - a * h) / det,
|
|
135
|
+
(b * f - c * e) / det,
|
|
136
|
+
(c * d - a * f) / det,
|
|
137
|
+
(a * e - b * d) / det
|
|
138
|
+
]);
|
|
139
|
+
}
|
|
140
|
+
export {
|
|
141
|
+
compose,
|
|
142
|
+
identity,
|
|
143
|
+
lookAt,
|
|
144
|
+
multiply,
|
|
145
|
+
normalMatrix,
|
|
146
|
+
perspective,
|
|
147
|
+
rotation,
|
|
148
|
+
scaling,
|
|
149
|
+
translation
|
|
150
|
+
};
|