@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.
Files changed (413) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +120 -2
  3. package/dist/components/Annotations/Annotations.mjs +674 -0
  4. package/dist/components/Annotations/EntryBodies.mjs +52 -0
  5. package/dist/components/Annotations/languages.mjs +43 -0
  6. package/dist/components/Body/Body.mjs +51 -0
  7. package/dist/components/Body/BodyAlert.mjs +25 -0
  8. package/dist/components/Body/Caption.mjs +90 -0
  9. package/dist/components/Body/CaptionDetails.mjs +50 -0
  10. package/dist/components/Body/Pending.mjs +9 -0
  11. package/dist/components/Body/glyphs.mjs +66 -0
  12. package/dist/components/Body/renderers.mjs +30 -0
  13. package/dist/components/Body/useControlsVisibility.mjs +204 -0
  14. package/dist/components/Body/useNearViewport.mjs +27 -0
  15. package/dist/components/Canvas/AnnotationMenu.mjs +128 -0
  16. package/dist/components/Canvas/AnnotationState.mjs +338 -0
  17. package/dist/components/Canvas/Annotations.mjs +497 -0
  18. package/dist/components/Canvas/CanvasView.mjs +669 -0
  19. package/dist/components/Canvas/ChoiceMenu.mjs +77 -0
  20. package/dist/components/Canvas/Connected.mjs +228 -0
  21. package/dist/components/Canvas/ControlMenu.mjs +67 -0
  22. package/dist/components/Canvas/Controls.mjs +233 -0
  23. package/dist/components/Canvas/FrameAnimation.mjs +344 -0
  24. package/dist/components/Canvas/LoadedCanvas.mjs +177 -0
  25. package/dist/components/Canvas/Placeholder.mjs +105 -0
  26. package/dist/components/Canvas/fromManifest.mjs +44 -0
  27. package/dist/components/Canvas/index.mjs +19 -0
  28. package/dist/components/Canvas/layout.mjs +369 -0
  29. package/dist/components/Canvas/media/MediaBody.mjs +285 -0
  30. package/dist/components/Canvas/media/Player.mjs +193 -0
  31. package/dist/components/Canvas/media/Transport.mjs +511 -0
  32. package/dist/components/Canvas/media/TransportButton.mjs +39 -0
  33. package/dist/components/Canvas/media/useBarHeight.mjs +28 -0
  34. package/dist/components/Canvas/media/useCaptionTracks.mjs +131 -0
  35. package/dist/components/Canvas/media/useMediaController.mjs +77 -0
  36. package/dist/components/Canvas/media/useMediaElement.mjs +100 -0
  37. package/dist/components/Canvas/panClearOfControls.mjs +92 -0
  38. package/dist/components/Canvas/rendererSurface.mjs +6 -0
  39. package/dist/components/Canvas/surface.mjs +5 -0
  40. package/dist/components/Canvas/track.mjs +43 -0
  41. package/dist/components/Canvas/useSvgReader.mjs +23 -0
  42. package/dist/components/Collection/Collection.mjs +76 -0
  43. package/dist/components/CollectionSelect/CollectionSelect.mjs +114 -0
  44. package/dist/components/Contents/Contents.mjs +120 -0
  45. package/dist/components/Download/Download.mjs +105 -0
  46. package/dist/components/Items/Item.mjs +184 -0
  47. package/dist/components/Items/Items.mjs +455 -0
  48. package/dist/components/Items/Pager.mjs +190 -0
  49. package/dist/components/Items/StandaloneItems.mjs +80 -0
  50. package/dist/components/Items/clamped.mjs +90 -0
  51. package/dist/components/Label/Label.mjs +39 -0
  52. package/dist/components/Map/LoadedMap.mjs +26 -0
  53. package/dist/components/Map/Map.mjs +38 -0
  54. package/dist/components/Map/MapView.mjs +539 -0
  55. package/dist/components/Map/basemap.mjs +50 -0
  56. package/dist/components/Map/maplibre-worker.mjs +7 -0
  57. package/dist/components/Map/overlayImage.mjs +17 -0
  58. package/dist/components/Map/worker.mjs +22 -0
  59. package/dist/components/Panel/About.mjs +148 -0
  60. package/dist/components/Panel/Panel.mjs +259 -0
  61. package/dist/components/Panel/PanelToggle.mjs +43 -0
  62. package/dist/components/Panel/PartOfManifest.mjs +52 -0
  63. package/dist/components/Primitives/Primitives.mjs +263 -0
  64. package/dist/components/Primitives/resource.mjs +11 -0
  65. package/dist/components/Provider/Provider.mjs +174 -0
  66. package/dist/components/Root/Announcer.mjs +58 -0
  67. package/dist/components/Root/Root.mjs +29 -0
  68. package/dist/components/Root/useRootState.mjs +188 -0
  69. package/dist/components/Scene/Connected.mjs +48 -0
  70. package/dist/components/Scene/Loaded.mjs +56 -0
  71. package/dist/components/Scene/RotatePad.mjs +204 -0
  72. package/dist/components/Scene/Scene.mjs +20 -0
  73. package/dist/components/Scene/SceneView.mjs +539 -0
  74. package/dist/components/Scene/cloverEngine.mjs +105 -0
  75. package/dist/components/Scene/engine.mjs +141 -0
  76. package/dist/components/Scene/engines.mjs +23 -0
  77. package/dist/components/Scene/gestures.mjs +74 -0
  78. package/dist/components/Scene/models.mjs +78 -0
  79. package/dist/components/Scene/orbit.mjs +60 -0
  80. package/dist/components/Search/Search.mjs +246 -0
  81. package/dist/components/Split/Split.mjs +210 -0
  82. package/dist/components/Split/splitting.mjs +203 -0
  83. package/dist/components/Status/Status.mjs +47 -0
  84. package/dist/components/Timeline/Connected.mjs +25 -0
  85. package/dist/components/Timeline/Timeline.mjs +40 -0
  86. package/dist/components/Timeline/playerSurface.mjs +84 -0
  87. package/dist/components/Transcript/Transcript.mjs +377 -0
  88. package/dist/components/Viewer/Viewer.mjs +19 -0
  89. package/dist/core/annotation-bodies.mjs +29 -0
  90. package/dist/core/annotation-collection.mjs +55 -0
  91. package/dist/core/annotation-name.mjs +31 -0
  92. package/dist/core/annotation-sets.mjs +155 -0
  93. package/dist/core/annotations-content.mjs +27 -0
  94. package/dist/core/annotations.mjs +73 -0
  95. package/dist/core/clover.mjs +393 -0
  96. package/dist/core/content-state-reader.mjs +82 -0
  97. package/dist/core/content-state.mjs +43 -0
  98. package/dist/core/direction.mjs +12 -0
  99. package/dist/core/geo-detect.mjs +30 -0
  100. package/dist/core/geo.mjs +283 -0
  101. package/dist/core/items.mjs +76 -0
  102. package/dist/core/keep-fragments.mjs +40 -0
  103. package/dist/core/link.mjs +28 -0
  104. package/dist/core/load.mjs +183 -0
  105. package/dist/core/map-config.mjs +12 -0
  106. package/dist/core/markdown.mjs +139 -0
  107. package/dist/core/pages.mjs +51 -0
  108. package/dist/core/painted-bodies.mjs +20 -0
  109. package/dist/core/painting.mjs +17 -0
  110. package/dist/core/presentation.mjs +27 -0
  111. package/dist/core/ranges.mjs +133 -0
  112. package/dist/core/region.mjs +32 -0
  113. package/dist/core/request.mjs +40 -0
  114. package/dist/core/sanitize.mjs +72 -0
  115. package/dist/core/search-service.mjs +22 -0
  116. package/dist/core/search.mjs +154 -0
  117. package/dist/core/selectors.mjs +94 -0
  118. package/dist/core/sequence.mjs +70 -0
  119. package/dist/core/show-link.mjs +16 -0
  120. package/dist/core/store.mjs +40 -0
  121. package/dist/core/svg-shape.mjs +183 -0
  122. package/dist/core/text.mjs +36 -0
  123. package/dist/core/thumbnail.mjs +55 -0
  124. package/dist/core/value.mjs +39 -0
  125. package/dist/core/vtt.mjs +111 -0
  126. package/dist/hooks/useFullscreen.mjs +21 -0
  127. package/dist/hooks/useFullscreenSupported.mjs +11 -0
  128. package/dist/hooks/useLoaded.mjs +27 -0
  129. package/dist/hooks/useWithinFullscreen.mjs +24 -0
  130. package/dist/i18n/config.mjs +170 -0
  131. package/dist/i18n/hostLanguage.mjs +6 -0
  132. package/dist/i18n/locales/en.json.mjs +5 -0
  133. package/dist/i18n/locales/es.json.mjs +5 -0
  134. package/dist/i18n/locales/fi.json.mjs +5 -0
  135. package/dist/i18n/locales/fr.json.mjs +5 -0
  136. package/dist/i18n/locales/index.mjs +13 -0
  137. package/dist/i18n/locales/nb.json.mjs +5 -0
  138. package/dist/i18n/locales/nn.json.mjs +5 -0
  139. package/dist/i18n/locales/no.json.mjs +5 -0
  140. package/dist/i18n/locales/pt.json.mjs +5 -0
  141. package/dist/i18n/reader.mjs +13 -0
  142. package/dist/i18n/useCloverTranslation.mjs +28 -0
  143. package/dist/index.d.mts +2215 -0
  144. package/dist/index.mjs +133 -0
  145. package/dist/lib/asArray.mjs +5 -0
  146. package/dist/lib/classnames.mjs +5 -0
  147. package/dist/lib/fullscreen.mjs +65 -0
  148. package/dist/lib/gltf/bounds.mjs +44 -0
  149. package/dist/lib/gltf/load.mjs +156 -0
  150. package/dist/lib/gltf/mat4.mjs +150 -0
  151. package/dist/lib/gltf/renderer.mjs +342 -0
  152. package/dist/lib/gltf/shaders.mjs +192 -0
  153. package/dist/lib/hls.mjs +6 -0
  154. package/dist/lib/pointer.mjs +38 -0
  155. package/dist/lib/renderer/CanvasRenderer.mjs +857 -0
  156. package/dist/lib/renderer/backends/backend.mjs +21 -0
  157. package/dist/lib/renderer/backends/canvas2d/Canvas2DBackend.mjs +91 -0
  158. package/dist/lib/renderer/backends/contexts.mjs +27 -0
  159. package/dist/lib/renderer/backends/dom/DomLayers.mjs +91 -0
  160. package/dist/lib/renderer/backends/webgl2/WebGL2Backend.mjs +248 -0
  161. package/dist/lib/renderer/backends/webgl2/shaders.mjs +28 -0
  162. package/dist/lib/renderer/camera/Camera.mjs +64 -0
  163. package/dist/lib/renderer/camera/CameraAnimator.mjs +90 -0
  164. package/dist/lib/renderer/input/GestureController.mjs +252 -0
  165. package/dist/lib/renderer/io/TileCache.mjs +207 -0
  166. package/dist/lib/renderer/io/decode.mjs +156 -0
  167. package/dist/lib/renderer/loop/FrameLoop.mjs +50 -0
  168. package/dist/lib/renderer/math/affine.mjs +68 -0
  169. package/dist/lib/renderer/math/rect.mjs +45 -0
  170. package/dist/lib/renderer/overlays/Navigator.mjs +141 -0
  171. package/dist/lib/renderer/overlays/OverlayLayer.mjs +94 -0
  172. package/dist/lib/renderer/scene/planFrame.mjs +168 -0
  173. package/dist/lib/renderer/scene/regions.mjs +30 -0
  174. package/dist/lib/renderer/scene/sceneItem.mjs +114 -0
  175. package/dist/lib/renderer/scene/uploadBudget.mjs +30 -0
  176. package/dist/lib/renderer/sources/imageService.mjs +160 -0
  177. package/dist/lib/renderer/sources/sizedImage.mjs +38 -0
  178. package/dist/lib/renderer/sources/tilePyramid.mjs +172 -0
  179. package/dist/lib/time.mjs +21 -0
  180. package/dist/map/index.d.mts +195 -0
  181. package/dist/map/index.mjs +16 -0
  182. package/dist/react/context.mjs +46 -0
  183. package/dist/react/hooks.mjs +69 -0
  184. package/dist/react/language.mjs +30 -0
  185. package/dist/styles.css +1 -0
  186. package/dist/templates/default/Default.mjs +229 -0
  187. package/dist/templates/document/Document.mjs +286 -0
  188. package/dist/templates/document/DocumentPanel.mjs +9 -0
  189. package/dist/templates/document/Sheets.mjs +360 -0
  190. package/dist/templates/gallery/Gallery.mjs +62 -0
  191. package/dist/templates/index.d.mts +276 -0
  192. package/dist/templates/index.mjs +11 -0
  193. package/dist/templates/shared/Lightbox.mjs +111 -0
  194. package/dist/templates/shared/LightboxBody.mjs +9 -0
  195. package/dist/templates/shared/dragToClose.mjs +129 -0
  196. package/dist/templates/shared/useDragToClose.mjs +35 -0
  197. package/dist/templates/shared/useDrawer.mjs +113 -0
  198. package/dist/templates/shared/useFollowFocus.mjs +24 -0
  199. package/dist/templates/shared/useSlide.mjs +52 -0
  200. package/dist/templates/shared/useSpine.mjs +26 -0
  201. package/dist/templates.css +1 -0
  202. package/dist/three/index.d.mts +6 -0
  203. package/dist/three/index.mjs +8 -0
  204. package/dist/ui/Button.mjs +53 -0
  205. package/dist/ui/ControlCluster.mjs +87 -0
  206. package/dist/ui/Cue.mjs +13 -0
  207. package/dist/ui/ErrorBoundary.mjs +26 -0
  208. package/dist/ui/ExitFullscreen.mjs +46 -0
  209. package/dist/ui/FieldPill.mjs +153 -0
  210. package/dist/ui/HideToggle.mjs +57 -0
  211. package/dist/ui/Loading.mjs +20 -0
  212. package/dist/ui/Markup.mjs +95 -0
  213. package/dist/ui/ReadMore.mjs +84 -0
  214. package/dist/ui/Sections.mjs +448 -0
  215. package/dist/ui/Steps.mjs +84 -0
  216. package/dist/ui/Tip.mjs +196 -0
  217. package/dist/ui/bringIntoView.mjs +27 -0
  218. package/dist/ui/controlGlyphs.mjs +120 -0
  219. package/dist/ui/heading.mjs +19 -0
  220. package/dist/ui/languageCode.mjs +8 -0
  221. package/dist/ui/mediaIcons.mjs +104 -0
  222. package/dist/ui/useClusterReach.mjs +50 -0
  223. package/dist/ui/useContainerName.mjs +19 -0
  224. package/dist/ui/useOneOpen.mjs +22 -0
  225. package/dist/ui/useRovingFocus.mjs +64 -0
  226. package/dist/ui/useScrollTrack.mjs +150 -0
  227. package/dist/ui/useUniqueId.mjs +10 -0
  228. package/dist/ui/visuallyHidden.mjs +15 -0
  229. package/dist/web-components/About-DbrFSVBm.mjs +1 -0
  230. package/dist/web-components/AnnotationMenu-EBjIQpQl.mjs +1 -0
  231. package/dist/web-components/AnnotationState-DQTaO6Gz.mjs +1 -0
  232. package/dist/web-components/Annotations-Cb9U7HJ_.mjs +2 -0
  233. package/dist/web-components/Annotations-Dl0SgHBS.mjs +1 -0
  234. package/dist/web-components/Body-DxSz3iST.mjs +1 -0
  235. package/dist/web-components/BodyAlert-C8EOXz24.mjs +1 -0
  236. package/dist/web-components/Button-uWgfvqsL.mjs +1 -0
  237. package/dist/web-components/Camera-cdCqKMup.mjs +1 -0
  238. package/dist/web-components/Canvas2DBackend-CnLEHRs4.mjs +1 -0
  239. package/dist/web-components/CanvasView-BI3YzNdK.mjs +1 -0
  240. package/dist/web-components/CaptionDetails-B80ZhZ7v.mjs +1 -0
  241. package/dist/web-components/ChoiceMenu-DCp7-co7.mjs +1 -0
  242. package/dist/web-components/Collection-B1Le2_TU.mjs +1 -0
  243. package/dist/web-components/CollectionSelect-BL_jQog-.mjs +1 -0
  244. package/dist/web-components/Connected-BxqaRL9o.mjs +1 -0
  245. package/dist/web-components/Connected-DCBI-j9H.mjs +1 -0
  246. package/dist/web-components/Connected-DkhfVWxd.mjs +1 -0
  247. package/dist/web-components/Contents-zYEGHLfe.mjs +1 -0
  248. package/dist/web-components/ControlMenu-CAHiLAtl.mjs +1 -0
  249. package/dist/web-components/Cue-BT2V9VAq.mjs +1 -0
  250. package/dist/web-components/Document-BdCjGnJN.mjs +1 -0
  251. package/dist/web-components/DocumentPanel-X_Rta0Wu.mjs +1 -0
  252. package/dist/web-components/DomLayers-BD4QPbl6.mjs +1 -0
  253. package/dist/web-components/Download-DqU-goFi.mjs +1 -0
  254. package/dist/web-components/EntryBodies-DXAQH0vR.mjs +1 -0
  255. package/dist/web-components/ErrorBoundary-chQaO-Up.mjs +1 -0
  256. package/dist/web-components/FieldPill-CyEssPVm.mjs +1 -0
  257. package/dist/web-components/FrameAnimation-Bb0pOoRl.mjs +1 -0
  258. package/dist/web-components/Gallery-BXU3TcT3.mjs +1 -0
  259. package/dist/web-components/HideToggle-BwMrOBMu.mjs +1 -0
  260. package/dist/web-components/Items-DRj1UEpC.mjs +1 -0
  261. package/dist/web-components/Label-D6aVJB9s.mjs +1 -0
  262. package/dist/web-components/LightboxBody-BzXQGMDn.mjs +1 -0
  263. package/dist/web-components/Loaded-D5xmFRSo.mjs +1 -0
  264. package/dist/web-components/LoadedCanvas-DOjtxLSe.mjs +1 -0
  265. package/dist/web-components/LoadedMap-DouDS2lO.mjs +1 -0
  266. package/dist/web-components/Loading-CBKfwsML.mjs +1 -0
  267. package/dist/web-components/Map-Bcgp_R8H.mjs +1 -0
  268. package/dist/web-components/MapView-CD5zkTs8.mjs +1 -0
  269. package/dist/web-components/Markup-C1hMA8wk.mjs +2 -0
  270. package/dist/web-components/MediaBody-B_Gii4we.mjs +1 -0
  271. package/dist/web-components/MediaBody-BfrKIPte.mjs +1 -0
  272. package/dist/web-components/Navigator-BSJbEbuJ.mjs +1 -0
  273. package/dist/web-components/Pager-Di_2hHM3.mjs +1 -0
  274. package/dist/web-components/Panel-DbsC8A9V.mjs +1 -0
  275. package/dist/web-components/PanelToggle-mUDw73zI.mjs +1 -0
  276. package/dist/web-components/PartOfManifest-7eOwURrF.mjs +1 -0
  277. package/dist/web-components/Pending-BPOQ2z1L.mjs +1 -0
  278. package/dist/web-components/Primitives-XQO3m1wG.mjs +1 -0
  279. package/dist/web-components/Provider-B61118lU.mjs +1 -0
  280. package/dist/web-components/ReadMore-BJH-qqte.mjs +1 -0
  281. package/dist/web-components/Root-Dj277K6p.mjs +1 -0
  282. package/dist/web-components/Scene-BTWpLeec.mjs +1 -0
  283. package/dist/web-components/SceneView-BYo7WmPt.mjs +1 -0
  284. package/dist/web-components/Search-ZV8FFN4p.mjs +1 -0
  285. package/dist/web-components/Sections-ejwu1_Sm.mjs +2 -0
  286. package/dist/web-components/StandaloneItems-BYaiyCca.mjs +1 -0
  287. package/dist/web-components/Status-YbQK2KzY.mjs +1 -0
  288. package/dist/web-components/Timeline-ByyVSd7B.mjs +1 -0
  289. package/dist/web-components/Tip-IO11xX4x.mjs +1 -0
  290. package/dist/web-components/Transcript-D0gUxUoA.mjs +1 -0
  291. package/dist/web-components/annotation-collection-Csv7WIlm.mjs +1 -0
  292. package/dist/web-components/annotations-content-BS_OFz5Z.mjs +1 -0
  293. package/dist/web-components/assets/maplibre-gl-worker-kTz9OPxr.js +13831 -0
  294. package/dist/web-components/body-CKjwwFep.mjs +1 -0
  295. package/dist/web-components/bringIntoView-CQH5ZgMM.mjs +1 -0
  296. package/dist/web-components/canvas-CIzpp-Uz.mjs +1 -0
  297. package/dist/web-components/classnames-DukgfdpI.mjs +1 -0
  298. package/dist/web-components/cloverEngine-B4LinbSt.mjs +164 -0
  299. package/dist/web-components/content-state-reader-D1BkpICh.mjs +1 -0
  300. package/dist/web-components/contexts-ByL3eA_T.mjs +1 -0
  301. package/dist/web-components/controls-Dj2BybWb.mjs +1 -0
  302. package/dist/web-components/custom-elements.json +2739 -0
  303. package/dist/web-components/dragToClose-C-Pf1IeO.mjs +1 -0
  304. package/dist/web-components/engine-BSt8LTso.mjs +4228 -0
  305. package/dist/web-components/engines-CC0OEsVE.mjs +1 -0
  306. package/dist/web-components/es-BwMkoRod.mjs +1 -0
  307. package/dist/web-components/fi-gPFOn9RK.mjs +1 -0
  308. package/dist/web-components/fr-DUHmgdJo.mjs +1 -0
  309. package/dist/web-components/fromManifest-BhemHaoA.mjs +1 -0
  310. package/dist/web-components/glyphs-drROkef9.mjs +1 -0
  311. package/dist/web-components/heading-Cjt0f-Eu.mjs +1 -0
  312. package/dist/web-components/hls-CdKrthkC.mjs +40 -0
  313. package/dist/web-components/hooks-BXzQSllm.mjs +1 -0
  314. package/dist/web-components/imageService-dsdmcegU.mjs +1 -0
  315. package/dist/web-components/index-B7nZdqLg.mjs +1 -0
  316. package/dist/web-components/index.d.mts +604 -0
  317. package/dist/web-components/index.mjs +1 -0
  318. package/dist/web-components/index.umd.js +18 -0
  319. package/dist/web-components/items-CB2Uk7ts.mjs +1 -0
  320. package/dist/web-components/items-jfQ5XzEj.mjs +1 -0
  321. package/dist/web-components/keep-fragments-B5nlv2ck.mjs +1 -0
  322. package/dist/web-components/label-Vbg_cMOJ.mjs +1 -0
  323. package/dist/web-components/languageCode-cCpiU0b0.mjs +1 -0
  324. package/dist/web-components/layout-mMHI0lsj.mjs +1 -0
  325. package/dist/web-components/link-ZRnv5NFR.mjs +1 -0
  326. package/dist/web-components/logo-Boy6u4m2.mjs +1 -0
  327. package/dist/web-components/maplibre-gl-CQ4OueXY.mjs +823 -0
  328. package/dist/web-components/markdown-CCYJwzFn.mjs +5 -0
  329. package/dist/web-components/models-D1EE_CmH.mjs +1 -0
  330. package/dist/web-components/nb-BSvnQ6jd.mjs +1 -0
  331. package/dist/web-components/nn-Dg2_HdZu.mjs +1 -0
  332. package/dist/web-components/no-BSvnQ6jd.mjs +1 -0
  333. package/dist/web-components/nodes-B7JRwBgl.mjs +1 -0
  334. package/dist/web-components/overlayImage-0OgQl1TL.mjs +1 -0
  335. package/dist/web-components/panClearOfControls-ac9uf-Qs.mjs +1 -0
  336. package/dist/web-components/panel-CjXfre-g.mjs +1 -0
  337. package/dist/web-components/part-cUiPs2-y.mjs +1 -0
  338. package/dist/web-components/playerSurface-CU5XxI1j.mjs +1 -0
  339. package/dist/web-components/provider-C1wKfdjb.mjs +1 -0
  340. package/dist/web-components/pt-B3J80JgO.mjs +1 -0
  341. package/dist/web-components/read-more-DNHNtG-a.mjs +1 -0
  342. package/dist/web-components/rendererSurface-DhIlOjGT.mjs +22 -0
  343. package/dist/web-components/renderers-BMSWEFUR.mjs +1 -0
  344. package/dist/web-components/resource-DLHocQ1C.mjs +1 -0
  345. package/dist/web-components/sanitize-Dc7nOsgO.mjs +3 -0
  346. package/dist/web-components/search-CLy2Wj01.mjs +1 -0
  347. package/dist/web-components/shared-YUjOSBKO.mjs +1 -0
  348. package/dist/web-components/show-link-CyzYE1eS.mjs +1 -0
  349. package/dist/web-components/sizedImage-uv_NlE0l.mjs +1 -0
  350. package/dist/web-components/split-CYuMjp89.mjs +1 -0
  351. package/dist/web-components/splitting-BnQUxxgH.mjs +1 -0
  352. package/dist/web-components/status-Ms5L0ghK.mjs +1 -0
  353. package/dist/web-components/styles-CyuM_fB1.mjs +1 -0
  354. package/dist/web-components/svg-shape-DLY3g7oq.mjs +1 -0
  355. package/dist/web-components/text-BTAkxEfQ.mjs +5 -0
  356. package/dist/web-components/three.mjs +1 -0
  357. package/dist/web-components/thumbnail-c2K_iQsD.mjs +1 -0
  358. package/dist/web-components/time-B9GZoYcm.mjs +1 -0
  359. package/dist/web-components/tip-dWhupWSr.mjs +1 -0
  360. package/dist/web-components/toggle-BQTjR1I3.mjs +1 -0
  361. package/dist/web-components/upgrader-XNxI-5jo.mjs +1 -0
  362. package/dist/web-components/useContainerName-BpJ3IWY0.mjs +1 -0
  363. package/dist/web-components/useNearViewport-CtLyYg9n.mjs +1 -0
  364. package/dist/web-components/useScrollTrack-WbG28FPD.mjs +1 -0
  365. package/dist/web-components/viewer/AnnotationMenu-ZKyBeyUU.mjs +1 -0
  366. package/dist/web-components/viewer/AnnotationState-DO33zokc.mjs +1 -0
  367. package/dist/web-components/viewer/Annotations-BOjhr5ks.mjs +1 -0
  368. package/dist/web-components/viewer/Annotations-DkLueFLK.mjs +2 -0
  369. package/dist/web-components/viewer/Canvas2DBackend-CAmzJD5P.mjs +1 -0
  370. package/dist/web-components/viewer/CaptionDetails-DOJlUtOn.mjs +1 -0
  371. package/dist/web-components/viewer/ChoiceMenu-BDq6H34G.mjs +1 -0
  372. package/dist/web-components/viewer/Collection-By3puO0V.mjs +1 -0
  373. package/dist/web-components/viewer/Connected-DZNO2CPf.mjs +1 -0
  374. package/dist/web-components/viewer/Connected-ESg5y49m.mjs +1 -0
  375. package/dist/web-components/viewer/Contents-B_FqDwTW.mjs +1 -0
  376. package/dist/web-components/viewer/ControlMenu-DdQl-dTf.mjs +1 -0
  377. package/dist/web-components/viewer/Cue-BTRHfiWQ.mjs +1 -0
  378. package/dist/web-components/viewer/Document-B9_PyD2w.mjs +1 -0
  379. package/dist/web-components/viewer/DocumentPanel-CtEJVPoE.mjs +1 -0
  380. package/dist/web-components/viewer/DomLayers-DRdQSEtN.mjs +1 -0
  381. package/dist/web-components/viewer/EntryBodies-CJuTRcTq.mjs +1 -0
  382. package/dist/web-components/viewer/FieldPill-06uwrNwE.mjs +1 -0
  383. package/dist/web-components/viewer/FrameAnimation-3dcDHf5q.mjs +1 -0
  384. package/dist/web-components/viewer/Gallery-BYasTqZc.mjs +1 -0
  385. package/dist/web-components/viewer/HideToggle-BxkNMX-T.mjs +1 -0
  386. package/dist/web-components/viewer/LightboxBody-CXMc1xOH.mjs +1 -0
  387. package/dist/web-components/viewer/MapView-DCerrRRV.mjs +1 -0
  388. package/dist/web-components/viewer/MediaBody-BdkJcyGy.mjs +1 -0
  389. package/dist/web-components/viewer/MediaBody-waF4KvHp.mjs +1 -0
  390. package/dist/web-components/viewer/Navigator-CKwDgG2x.mjs +1 -0
  391. package/dist/web-components/viewer/PartOfManifest-DalHJFwC.mjs +1 -0
  392. package/dist/web-components/viewer/Search-Di_QQfDb.mjs +1 -0
  393. package/dist/web-components/viewer/StandaloneItems-B9J6nnWn.mjs +1 -0
  394. package/dist/web-components/viewer/Transcript-aHOixfna.mjs +1 -0
  395. package/dist/web-components/viewer/annotation-collection-I2UkdobR.mjs +1 -0
  396. package/dist/web-components/viewer/annotations-content-D-i4j9pD.mjs +1 -0
  397. package/dist/web-components/viewer/cloverEngine-CynoKdta.mjs +164 -0
  398. package/dist/web-components/viewer/content-state-reader-D7GIMcKK.mjs +1 -0
  399. package/dist/web-components/viewer/host-DlCltI_c.mjs +1 -0
  400. package/dist/web-components/viewer/index.d.mts +7 -0
  401. package/dist/web-components/viewer/index.mjs +1 -0
  402. package/dist/web-components/viewer/index.umd.js +18 -0
  403. package/dist/web-components/viewer/link-BX-wzj1u.mjs +1 -0
  404. package/dist/web-components/viewer/overlayImage-CHqn1fG8.mjs +1 -0
  405. package/dist/web-components/viewer/renderers-C_wdmw9v.mjs +1 -0
  406. package/dist/web-components/viewer/search-BHLyNxZ6.mjs +1 -0
  407. package/dist/web-components/viewer/styles-BRCkEU3w.mjs +1 -0
  408. package/dist/web-components/viewer/viewer-ipqAA-xQ.mjs +28 -0
  409. package/dist/web-components/viewer/vtt-XiS_-5Ao.mjs +5 -0
  410. package/dist/web-components/viewer-DEHIsIHd.mjs +1 -0
  411. package/dist/web-components/vtt-DYAOuQoK.mjs +5 -0
  412. package/dist/web-components/worker-CjXN0dku.mjs +1 -0
  413. 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,5 @@
1
+ "use client";
2
+ const asArray = (value) => Array.isArray(value) ? value : value == null ? [] : [value];
3
+ export {
4
+ asArray
5
+ };
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ const join = (...names) => names.filter(Boolean).join(" ");
3
+ export {
4
+ join
5
+ };
@@ -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
+ };