@nulib/clover 0.0.0-stage → 4.0.0-beta.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.
Files changed (410) 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 +538 -0
  55. package/dist/components/Map/basemap.mjs +50 -0
  56. package/dist/components/Map/overlayImage.mjs +17 -0
  57. package/dist/components/Panel/About.mjs +143 -0
  58. package/dist/components/Panel/Panel.mjs +259 -0
  59. package/dist/components/Panel/PanelToggle.mjs +43 -0
  60. package/dist/components/Panel/PartOfManifest.mjs +52 -0
  61. package/dist/components/Primitives/Primitives.mjs +263 -0
  62. package/dist/components/Primitives/resource.mjs +11 -0
  63. package/dist/components/Provider/Provider.mjs +174 -0
  64. package/dist/components/Root/Announcer.mjs +58 -0
  65. package/dist/components/Root/Root.mjs +29 -0
  66. package/dist/components/Root/useRootState.mjs +188 -0
  67. package/dist/components/Scene/Connected.mjs +48 -0
  68. package/dist/components/Scene/Loaded.mjs +56 -0
  69. package/dist/components/Scene/RotatePad.mjs +204 -0
  70. package/dist/components/Scene/Scene.mjs +20 -0
  71. package/dist/components/Scene/SceneView.mjs +539 -0
  72. package/dist/components/Scene/cloverEngine.mjs +105 -0
  73. package/dist/components/Scene/engine.mjs +141 -0
  74. package/dist/components/Scene/engines.mjs +23 -0
  75. package/dist/components/Scene/gestures.mjs +74 -0
  76. package/dist/components/Scene/models.mjs +78 -0
  77. package/dist/components/Scene/orbit.mjs +60 -0
  78. package/dist/components/Search/Search.mjs +246 -0
  79. package/dist/components/Split/Split.mjs +203 -0
  80. package/dist/components/Split/splitting.mjs +203 -0
  81. package/dist/components/Status/Status.mjs +47 -0
  82. package/dist/components/Timeline/Connected.mjs +25 -0
  83. package/dist/components/Timeline/Timeline.mjs +40 -0
  84. package/dist/components/Timeline/playerSurface.mjs +84 -0
  85. package/dist/components/Transcript/Transcript.mjs +377 -0
  86. package/dist/components/Viewer/Viewer.mjs +19 -0
  87. package/dist/core/annotation-bodies.mjs +29 -0
  88. package/dist/core/annotation-collection.mjs +55 -0
  89. package/dist/core/annotation-name.mjs +31 -0
  90. package/dist/core/annotation-sets.mjs +155 -0
  91. package/dist/core/annotations-content.mjs +27 -0
  92. package/dist/core/annotations.mjs +73 -0
  93. package/dist/core/clover.mjs +393 -0
  94. package/dist/core/content-state-reader.mjs +82 -0
  95. package/dist/core/content-state.mjs +43 -0
  96. package/dist/core/direction.mjs +12 -0
  97. package/dist/core/geo-detect.mjs +30 -0
  98. package/dist/core/geo.mjs +283 -0
  99. package/dist/core/items.mjs +74 -0
  100. package/dist/core/keep-fragments.mjs +40 -0
  101. package/dist/core/link.mjs +28 -0
  102. package/dist/core/load.mjs +176 -0
  103. package/dist/core/map-config.mjs +12 -0
  104. package/dist/core/markdown.mjs +139 -0
  105. package/dist/core/pages.mjs +51 -0
  106. package/dist/core/painted-bodies.mjs +20 -0
  107. package/dist/core/painting.mjs +17 -0
  108. package/dist/core/presentation.mjs +27 -0
  109. package/dist/core/ranges.mjs +133 -0
  110. package/dist/core/region.mjs +32 -0
  111. package/dist/core/request.mjs +40 -0
  112. package/dist/core/sanitize.mjs +72 -0
  113. package/dist/core/search-service.mjs +22 -0
  114. package/dist/core/search.mjs +154 -0
  115. package/dist/core/selectors.mjs +94 -0
  116. package/dist/core/sequence.mjs +70 -0
  117. package/dist/core/show-link.mjs +16 -0
  118. package/dist/core/store.mjs +40 -0
  119. package/dist/core/svg-shape.mjs +183 -0
  120. package/dist/core/text.mjs +36 -0
  121. package/dist/core/thumbnail.mjs +55 -0
  122. package/dist/core/value.mjs +39 -0
  123. package/dist/core/vtt.mjs +111 -0
  124. package/dist/hooks/useFullscreen.mjs +21 -0
  125. package/dist/hooks/useFullscreenSupported.mjs +11 -0
  126. package/dist/hooks/useLoaded.mjs +27 -0
  127. package/dist/hooks/useWithinFullscreen.mjs +24 -0
  128. package/dist/i18n/config.mjs +170 -0
  129. package/dist/i18n/hostLanguage.mjs +6 -0
  130. package/dist/i18n/locales/en.json.mjs +5 -0
  131. package/dist/i18n/locales/es.json.mjs +5 -0
  132. package/dist/i18n/locales/fi.json.mjs +5 -0
  133. package/dist/i18n/locales/fr.json.mjs +5 -0
  134. package/dist/i18n/locales/index.mjs +13 -0
  135. package/dist/i18n/locales/nb.json.mjs +5 -0
  136. package/dist/i18n/locales/nn.json.mjs +5 -0
  137. package/dist/i18n/locales/no.json.mjs +5 -0
  138. package/dist/i18n/locales/pt.json.mjs +5 -0
  139. package/dist/i18n/reader.mjs +13 -0
  140. package/dist/i18n/useCloverTranslation.mjs +28 -0
  141. package/dist/index.d.mts +2204 -0
  142. package/dist/index.mjs +133 -0
  143. package/dist/lib/asArray.mjs +5 -0
  144. package/dist/lib/classnames.mjs +5 -0
  145. package/dist/lib/fullscreen.mjs +65 -0
  146. package/dist/lib/gltf/bounds.mjs +44 -0
  147. package/dist/lib/gltf/load.mjs +156 -0
  148. package/dist/lib/gltf/mat4.mjs +150 -0
  149. package/dist/lib/gltf/renderer.mjs +342 -0
  150. package/dist/lib/gltf/shaders.mjs +192 -0
  151. package/dist/lib/hls.mjs +6 -0
  152. package/dist/lib/pointer.mjs +38 -0
  153. package/dist/lib/renderer/CanvasRenderer.mjs +857 -0
  154. package/dist/lib/renderer/backends/backend.mjs +21 -0
  155. package/dist/lib/renderer/backends/canvas2d/Canvas2DBackend.mjs +91 -0
  156. package/dist/lib/renderer/backends/contexts.mjs +27 -0
  157. package/dist/lib/renderer/backends/dom/DomLayers.mjs +91 -0
  158. package/dist/lib/renderer/backends/webgl2/WebGL2Backend.mjs +248 -0
  159. package/dist/lib/renderer/backends/webgl2/shaders.mjs +28 -0
  160. package/dist/lib/renderer/camera/Camera.mjs +64 -0
  161. package/dist/lib/renderer/camera/CameraAnimator.mjs +90 -0
  162. package/dist/lib/renderer/input/GestureController.mjs +252 -0
  163. package/dist/lib/renderer/io/TileCache.mjs +207 -0
  164. package/dist/lib/renderer/io/decode.mjs +156 -0
  165. package/dist/lib/renderer/loop/FrameLoop.mjs +50 -0
  166. package/dist/lib/renderer/math/affine.mjs +68 -0
  167. package/dist/lib/renderer/math/rect.mjs +45 -0
  168. package/dist/lib/renderer/overlays/Navigator.mjs +141 -0
  169. package/dist/lib/renderer/overlays/OverlayLayer.mjs +94 -0
  170. package/dist/lib/renderer/scene/planFrame.mjs +168 -0
  171. package/dist/lib/renderer/scene/regions.mjs +30 -0
  172. package/dist/lib/renderer/scene/sceneItem.mjs +114 -0
  173. package/dist/lib/renderer/scene/uploadBudget.mjs +30 -0
  174. package/dist/lib/renderer/sources/imageService.mjs +160 -0
  175. package/dist/lib/renderer/sources/sizedImage.mjs +38 -0
  176. package/dist/lib/renderer/sources/tilePyramid.mjs +172 -0
  177. package/dist/lib/time.mjs +21 -0
  178. package/dist/map/index.d.mts +184 -0
  179. package/dist/map/index.mjs +16 -0
  180. package/dist/react/context.mjs +46 -0
  181. package/dist/react/hooks.mjs +69 -0
  182. package/dist/react/language.mjs +30 -0
  183. package/dist/styles.css +1 -0
  184. package/dist/templates/default/Default.mjs +229 -0
  185. package/dist/templates/document/Document.mjs +286 -0
  186. package/dist/templates/document/DocumentPanel.mjs +9 -0
  187. package/dist/templates/document/Sheets.mjs +360 -0
  188. package/dist/templates/gallery/Gallery.mjs +62 -0
  189. package/dist/templates/index.d.mts +273 -0
  190. package/dist/templates/index.mjs +11 -0
  191. package/dist/templates/shared/Lightbox.mjs +111 -0
  192. package/dist/templates/shared/LightboxBody.mjs +9 -0
  193. package/dist/templates/shared/dragToClose.mjs +129 -0
  194. package/dist/templates/shared/useDragToClose.mjs +35 -0
  195. package/dist/templates/shared/useDrawer.mjs +113 -0
  196. package/dist/templates/shared/useFollowFocus.mjs +24 -0
  197. package/dist/templates/shared/useSlide.mjs +52 -0
  198. package/dist/templates/shared/useSpine.mjs +26 -0
  199. package/dist/templates.css +1 -0
  200. package/dist/three/index.d.mts +6 -0
  201. package/dist/three/index.mjs +8 -0
  202. package/dist/ui/Button.mjs +53 -0
  203. package/dist/ui/ControlCluster.mjs +87 -0
  204. package/dist/ui/Cue.mjs +13 -0
  205. package/dist/ui/ErrorBoundary.mjs +26 -0
  206. package/dist/ui/ExitFullscreen.mjs +46 -0
  207. package/dist/ui/FieldPill.mjs +153 -0
  208. package/dist/ui/HideToggle.mjs +57 -0
  209. package/dist/ui/Loading.mjs +20 -0
  210. package/dist/ui/Markup.mjs +95 -0
  211. package/dist/ui/ReadMore.mjs +84 -0
  212. package/dist/ui/Sections.mjs +448 -0
  213. package/dist/ui/Steps.mjs +84 -0
  214. package/dist/ui/Tip.mjs +196 -0
  215. package/dist/ui/bringIntoView.mjs +27 -0
  216. package/dist/ui/controlGlyphs.mjs +120 -0
  217. package/dist/ui/heading.mjs +19 -0
  218. package/dist/ui/languageCode.mjs +8 -0
  219. package/dist/ui/mediaIcons.mjs +104 -0
  220. package/dist/ui/useClusterReach.mjs +50 -0
  221. package/dist/ui/useContainerName.mjs +19 -0
  222. package/dist/ui/useOneOpen.mjs +22 -0
  223. package/dist/ui/useRovingFocus.mjs +64 -0
  224. package/dist/ui/useScrollTrack.mjs +150 -0
  225. package/dist/ui/useUniqueId.mjs +10 -0
  226. package/dist/ui/visuallyHidden.mjs +15 -0
  227. package/dist/web-components/About-uKa1wfDr.mjs +1 -0
  228. package/dist/web-components/AnnotationMenu-BGIYRXW6.mjs +1 -0
  229. package/dist/web-components/AnnotationState-D2UIgIEC.mjs +1 -0
  230. package/dist/web-components/Annotations-BhwAv3ah.mjs +1 -0
  231. package/dist/web-components/Annotations-C_tBJHo3.mjs +2 -0
  232. package/dist/web-components/Body-DMEERFuB.mjs +1 -0
  233. package/dist/web-components/BodyAlert-BP8voSLv.mjs +1 -0
  234. package/dist/web-components/Button-Cl02BFDd.mjs +1 -0
  235. package/dist/web-components/Camera-Dw51CAfF.mjs +1 -0
  236. package/dist/web-components/Canvas2DBackend-RRN2bEkc.mjs +1 -0
  237. package/dist/web-components/CanvasView-B8lMMSou.mjs +1 -0
  238. package/dist/web-components/CaptionDetails-KLMDv-ec.mjs +1 -0
  239. package/dist/web-components/ChoiceMenu-CXrVOmJl.mjs +1 -0
  240. package/dist/web-components/Collection-DL4Ui4hF.mjs +1 -0
  241. package/dist/web-components/CollectionSelect-DL-bbpwJ.mjs +1 -0
  242. package/dist/web-components/Connected-B0S1HXQb.mjs +1 -0
  243. package/dist/web-components/Connected-BcjRA5si.mjs +1 -0
  244. package/dist/web-components/Connected-Q7iizBb8.mjs +1 -0
  245. package/dist/web-components/Contents-ZC8TiGaW.mjs +1 -0
  246. package/dist/web-components/ControlMenu-DIoU797-.mjs +1 -0
  247. package/dist/web-components/Cue-CJxnDMEy.mjs +1 -0
  248. package/dist/web-components/Document-DHBRAFEK.mjs +1 -0
  249. package/dist/web-components/DocumentPanel-CqvE2pu9.mjs +1 -0
  250. package/dist/web-components/DomLayers-BsR2AOy-.mjs +1 -0
  251. package/dist/web-components/Download-DBksL1C0.mjs +1 -0
  252. package/dist/web-components/EntryBodies-VwEkTVrw.mjs +1 -0
  253. package/dist/web-components/ErrorBoundary-Cy9PGoZv.mjs +1 -0
  254. package/dist/web-components/FieldPill-DCJBz6Vj.mjs +1 -0
  255. package/dist/web-components/FrameAnimation-DRbmgGpF.mjs +1 -0
  256. package/dist/web-components/Gallery-BM7-VJkB.mjs +1 -0
  257. package/dist/web-components/HideToggle-BdYgG7us.mjs +1 -0
  258. package/dist/web-components/Items-_1Jz3FMs.mjs +1 -0
  259. package/dist/web-components/Label-CAiJ49eA.mjs +1 -0
  260. package/dist/web-components/LightboxBody-DyhUZiDf.mjs +1 -0
  261. package/dist/web-components/Loaded-wQurAeJz.mjs +1 -0
  262. package/dist/web-components/LoadedCanvas-DWz5IK5m.mjs +1 -0
  263. package/dist/web-components/LoadedMap-DIeW313M.mjs +1 -0
  264. package/dist/web-components/Loading-BmA--pzr.mjs +1 -0
  265. package/dist/web-components/Map-DzVGblIS.mjs +1 -0
  266. package/dist/web-components/MapView-BJaN7VBI.mjs +1 -0
  267. package/dist/web-components/Markup-D91DbxLk.mjs +2 -0
  268. package/dist/web-components/MediaBody-BYcVPo2X.mjs +1 -0
  269. package/dist/web-components/MediaBody-FEzH8VVw.mjs +1 -0
  270. package/dist/web-components/Navigator-CIJFA3q1.mjs +1 -0
  271. package/dist/web-components/Pager-BGwCurxE.mjs +1 -0
  272. package/dist/web-components/Panel-B-GXOkzF.mjs +1 -0
  273. package/dist/web-components/PanelToggle-BYjV2t1j.mjs +1 -0
  274. package/dist/web-components/PartOfManifest-ClbGepVM.mjs +1 -0
  275. package/dist/web-components/Pending-BspZajh5.mjs +1 -0
  276. package/dist/web-components/Primitives-CTh59wvs.mjs +1 -0
  277. package/dist/web-components/Provider-C6rIiDXH.mjs +1 -0
  278. package/dist/web-components/ReadMore-BJ2i-0uN.mjs +1 -0
  279. package/dist/web-components/Root-DkkYDtur.mjs +1 -0
  280. package/dist/web-components/Scene-B_PU_TiX.mjs +1 -0
  281. package/dist/web-components/SceneView-qcW_sT3j.mjs +1 -0
  282. package/dist/web-components/Search-UOneIUcP.mjs +1 -0
  283. package/dist/web-components/Sections-we9U9fXq.mjs +2 -0
  284. package/dist/web-components/StandaloneItems-DU8oCFc_.mjs +1 -0
  285. package/dist/web-components/Status-Cs5ZvFvL.mjs +1 -0
  286. package/dist/web-components/Timeline-WtYZ1bIJ.mjs +1 -0
  287. package/dist/web-components/Tip-C8J3qsIK.mjs +1 -0
  288. package/dist/web-components/Transcript-CRL2zToL.mjs +1 -0
  289. package/dist/web-components/annotation-collection-ZPyvpLFc.mjs +1 -0
  290. package/dist/web-components/annotations-content-BZChKhJZ.mjs +1 -0
  291. package/dist/web-components/assets/maplibre-gl-worker-kTz9OPxr.js +13831 -0
  292. package/dist/web-components/body-UntgrmoV.mjs +1 -0
  293. package/dist/web-components/bringIntoView-CQH5ZgMM.mjs +1 -0
  294. package/dist/web-components/canvas-d_U4v_mh.mjs +1 -0
  295. package/dist/web-components/classnames-DukgfdpI.mjs +1 -0
  296. package/dist/web-components/cloverEngine-Dbv-26NP.mjs +164 -0
  297. package/dist/web-components/content-state-reader-DjdKWjit.mjs +1 -0
  298. package/dist/web-components/contexts-ByL3eA_T.mjs +1 -0
  299. package/dist/web-components/controls-qRYf2jO2.mjs +1 -0
  300. package/dist/web-components/custom-elements.json +2739 -0
  301. package/dist/web-components/dragToClose-C-Pf1IeO.mjs +1 -0
  302. package/dist/web-components/engine-D8JLgzqq.mjs +4228 -0
  303. package/dist/web-components/engines-BwVb9R_A.mjs +1 -0
  304. package/dist/web-components/es-BwMkoRod.mjs +1 -0
  305. package/dist/web-components/fi-gPFOn9RK.mjs +1 -0
  306. package/dist/web-components/fr-DUHmgdJo.mjs +1 -0
  307. package/dist/web-components/fromManifest-UrMJgktp.mjs +1 -0
  308. package/dist/web-components/glyphs-BoX0a88P.mjs +1 -0
  309. package/dist/web-components/heading-Cjt0f-Eu.mjs +1 -0
  310. package/dist/web-components/hls-CdKrthkC.mjs +40 -0
  311. package/dist/web-components/hooks-Dp8pjU8l.mjs +1 -0
  312. package/dist/web-components/imageService-C3yg9DxB.mjs +1 -0
  313. package/dist/web-components/index-DWxMuwDL.mjs +1 -0
  314. package/dist/web-components/index.d.mts +604 -0
  315. package/dist/web-components/index.mjs +1 -0
  316. package/dist/web-components/index.umd.js +18 -0
  317. package/dist/web-components/items--Tu7ZM3L.mjs +1 -0
  318. package/dist/web-components/items-W2vrwArM.mjs +1 -0
  319. package/dist/web-components/keep-fragments-B5nlv2ck.mjs +1 -0
  320. package/dist/web-components/label-CYQ7tVl6.mjs +1 -0
  321. package/dist/web-components/languageCode-cCpiU0b0.mjs +1 -0
  322. package/dist/web-components/layout-KL0V-iJu.mjs +1 -0
  323. package/dist/web-components/link-DRRTY4lY.mjs +1 -0
  324. package/dist/web-components/logo-CnQUCB3Y.mjs +1 -0
  325. package/dist/web-components/maplibre-gl-CQ4OueXY.mjs +823 -0
  326. package/dist/web-components/markdown-CCYJwzFn.mjs +5 -0
  327. package/dist/web-components/models-BP2qp9nT.mjs +1 -0
  328. package/dist/web-components/nb-BSvnQ6jd.mjs +1 -0
  329. package/dist/web-components/nn-Dg2_HdZu.mjs +1 -0
  330. package/dist/web-components/no-BSvnQ6jd.mjs +1 -0
  331. package/dist/web-components/nodes-Bf-Fb7e5.mjs +1 -0
  332. package/dist/web-components/overlayImage-DdPs2EGY.mjs +1 -0
  333. package/dist/web-components/panClearOfControls-ac9uf-Qs.mjs +1 -0
  334. package/dist/web-components/panel-CiqEFDzv.mjs +1 -0
  335. package/dist/web-components/part-CUBY90_b.mjs +1 -0
  336. package/dist/web-components/playerSurface-i2TJz-F4.mjs +1 -0
  337. package/dist/web-components/provider-LUmAQSoP.mjs +1 -0
  338. package/dist/web-components/pt-B3J80JgO.mjs +1 -0
  339. package/dist/web-components/read-more-BaaO77el.mjs +1 -0
  340. package/dist/web-components/rendererSurface-DAvatpMF.mjs +22 -0
  341. package/dist/web-components/renderers-Bg4QqawN.mjs +1 -0
  342. package/dist/web-components/resource-DzIvB_4m.mjs +1 -0
  343. package/dist/web-components/sanitize-Dc7nOsgO.mjs +3 -0
  344. package/dist/web-components/search-DgcgsI3I.mjs +1 -0
  345. package/dist/web-components/shared-J3w3gnXD.mjs +1 -0
  346. package/dist/web-components/show-link-DWRRXSBy.mjs +1 -0
  347. package/dist/web-components/sizedImage-DfjlV2-i.mjs +1 -0
  348. package/dist/web-components/split-m-_XivaW.mjs +1 -0
  349. package/dist/web-components/splitting-BnQUxxgH.mjs +1 -0
  350. package/dist/web-components/status-DDS7jLNd.mjs +1 -0
  351. package/dist/web-components/styles-Ypl9KrSK.mjs +1 -0
  352. package/dist/web-components/svg-shape-DLY3g7oq.mjs +1 -0
  353. package/dist/web-components/text-BTAkxEfQ.mjs +5 -0
  354. package/dist/web-components/three.mjs +1 -0
  355. package/dist/web-components/thumbnail-BZvLSwWW.mjs +1 -0
  356. package/dist/web-components/time-B9GZoYcm.mjs +1 -0
  357. package/dist/web-components/tip-BXByhOJ9.mjs +1 -0
  358. package/dist/web-components/toggle-AS72kq6v.mjs +1 -0
  359. package/dist/web-components/upgrader-XNxI-5jo.mjs +1 -0
  360. package/dist/web-components/useContainerName-DCbE5JXi.mjs +1 -0
  361. package/dist/web-components/useNearViewport-CyoK3l8W.mjs +1 -0
  362. package/dist/web-components/useScrollTrack-dLFWnT8N.mjs +1 -0
  363. package/dist/web-components/viewer/AnnotationMenu-Dd4tnzNV.mjs +1 -0
  364. package/dist/web-components/viewer/AnnotationState-DZaSy5lH.mjs +1 -0
  365. package/dist/web-components/viewer/Annotations-D1h-Yi5J.mjs +1 -0
  366. package/dist/web-components/viewer/Annotations-sj79EMen.mjs +2 -0
  367. package/dist/web-components/viewer/Canvas2DBackend-CkvI0wUT.mjs +1 -0
  368. package/dist/web-components/viewer/CaptionDetails-B_JdNjJ7.mjs +1 -0
  369. package/dist/web-components/viewer/ChoiceMenu-xa51a1DV.mjs +1 -0
  370. package/dist/web-components/viewer/Collection-CxuLCspj.mjs +1 -0
  371. package/dist/web-components/viewer/Connected-BSUBc3Ci.mjs +1 -0
  372. package/dist/web-components/viewer/Connected-CPIxNjF2.mjs +1 -0
  373. package/dist/web-components/viewer/Contents-DNh9mnsF.mjs +1 -0
  374. package/dist/web-components/viewer/ControlMenu-DdgIvBdf.mjs +1 -0
  375. package/dist/web-components/viewer/Cue-90H9_dXz.mjs +1 -0
  376. package/dist/web-components/viewer/Document-CNCpzkiN.mjs +1 -0
  377. package/dist/web-components/viewer/DocumentPanel-BdG4TVLE.mjs +1 -0
  378. package/dist/web-components/viewer/DomLayers-Dybz_aJv.mjs +1 -0
  379. package/dist/web-components/viewer/EntryBodies-DGXjFP3N.mjs +1 -0
  380. package/dist/web-components/viewer/FieldPill-Icmd98OY.mjs +1 -0
  381. package/dist/web-components/viewer/FrameAnimation-DJZN3Rd4.mjs +1 -0
  382. package/dist/web-components/viewer/Gallery-CEp3-bh2.mjs +1 -0
  383. package/dist/web-components/viewer/HideToggle-DB6HTmAO.mjs +1 -0
  384. package/dist/web-components/viewer/LightboxBody-ClQ4yrTh.mjs +1 -0
  385. package/dist/web-components/viewer/MapView-BVSdybIC.mjs +1 -0
  386. package/dist/web-components/viewer/MediaBody-BBbSMT1i.mjs +1 -0
  387. package/dist/web-components/viewer/MediaBody-BzMXMHIF.mjs +1 -0
  388. package/dist/web-components/viewer/Navigator-Duc69Yes.mjs +1 -0
  389. package/dist/web-components/viewer/PartOfManifest-X9_q-2t6.mjs +1 -0
  390. package/dist/web-components/viewer/Search-S4N5QU4R.mjs +1 -0
  391. package/dist/web-components/viewer/StandaloneItems-BO4VyWRW.mjs +1 -0
  392. package/dist/web-components/viewer/Transcript-BbDaS064.mjs +1 -0
  393. package/dist/web-components/viewer/annotation-collection-BjZ1DAHq.mjs +1 -0
  394. package/dist/web-components/viewer/annotations-content-jn3n5Y2-.mjs +1 -0
  395. package/dist/web-components/viewer/cloverEngine-CjuYjUhI.mjs +164 -0
  396. package/dist/web-components/viewer/content-state-reader-CPiShIjP.mjs +1 -0
  397. package/dist/web-components/viewer/host-yWi4R1bP.mjs +1 -0
  398. package/dist/web-components/viewer/index.d.mts +7 -0
  399. package/dist/web-components/viewer/index.mjs +1 -0
  400. package/dist/web-components/viewer/index.umd.js +18 -0
  401. package/dist/web-components/viewer/link-CwE-fg5G.mjs +1 -0
  402. package/dist/web-components/viewer/overlayImage-BpOgqsZ0.mjs +1 -0
  403. package/dist/web-components/viewer/renderers-L-IlGI1r.mjs +1 -0
  404. package/dist/web-components/viewer/search-DWkwRPo_.mjs +1 -0
  405. package/dist/web-components/viewer/styles-BRCkEU3w.mjs +1 -0
  406. package/dist/web-components/viewer/viewer--TreVlJ_.mjs +28 -0
  407. package/dist/web-components/viewer/vtt-1ZJwtElI.mjs +5 -0
  408. package/dist/web-components/viewer-DyV864Qe.mjs +1 -0
  409. package/dist/web-components/vtt-GFssZH8Y.mjs +5 -0
  410. package/package.json +110 -4
@@ -0,0 +1,286 @@
1
+ "use client";
2
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
+ import { useRef, useState, useEffect } from "react";
4
+ import { useDrawer } from "../shared/useDrawer.mjs";
5
+ import { useFollowFocus } from "../shared/useFollowFocus.mjs";
6
+ import { useWideEnough } from "../shared/useSlide.mjs";
7
+ import { Sheets } from "./Sheets.mjs";
8
+ import { titled } from "../../ui/heading.mjs";
9
+ import { useUniqueId } from "../../ui/useUniqueId.mjs";
10
+ import { Root } from "../../components/Root/Root.mjs";
11
+ import { useT, useLangOf, useNavigation } from "../../react/hooks.mjs";
12
+ import { visuallyHidden } from "../../ui/visuallyHidden.mjs";
13
+ import { Position } from "../../components/Items/Pager.mjs";
14
+ import { Tip } from "../../ui/Tip.mjs";
15
+ import { Label } from "../../components/Label/Label.mjs";
16
+ import { Download } from "../../components/Download/Download.mjs";
17
+ import { Provider, Logo } from "../../components/Provider/Provider.mjs";
18
+ import { Status } from "../../components/Status/Status.mjs";
19
+ import { Split, SplitPane, SplitHandle } from "../../components/Split/Split.mjs";
20
+ import { Items } from "../../components/Items/Items.mjs";
21
+ import { PanelToggle } from "../../components/Panel/PanelToggle.mjs";
22
+ const loadPanel = () => import("./DocumentPanel.mjs");
23
+ function Document({
24
+ className,
25
+ defaultSidebarOpen,
26
+ defaultPanelOpen = false,
27
+ panelLayout = "accordion",
28
+ download = true,
29
+ headingLevel = 2,
30
+ storageKey = "clover-template-document",
31
+ ...root
32
+ }) {
33
+ const title = titled(
34
+ headingLevel,
35
+ `${useUniqueId().replace(/:/g, "")}-title`
36
+ );
37
+ return /* @__PURE__ */ jsx(
38
+ Root,
39
+ {
40
+ className: ["clover-template-document", className].filter(Boolean).join(" "),
41
+ ...title.group,
42
+ ...root,
43
+ children: /* @__PURE__ */ jsx(
44
+ DocumentLayout,
45
+ {
46
+ title,
47
+ defaultSidebarOpen,
48
+ defaultPanelOpen,
49
+ panelLayout,
50
+ download,
51
+ headingLevel,
52
+ storageKey
53
+ }
54
+ )
55
+ }
56
+ );
57
+ }
58
+ const below = (level) => level + 1;
59
+ const PAGE_MIN = "16rem";
60
+ const PANEL_MIN = "14rem";
61
+ const BESIDE_REM = 16 + 14 + 1;
62
+ const SIDEBAR_REM = 8 + 1;
63
+ const SIDEBAR_BESIDE_REM = 40;
64
+ function DocumentLayout({
65
+ defaultSidebarOpen,
66
+ defaultPanelOpen,
67
+ download,
68
+ headingLevel = 2,
69
+ storageKey,
70
+ panelLayout,
71
+ title
72
+ }) {
73
+ const t = useT();
74
+ const langOf = useLangOf();
75
+ const sidebarLang = langOf("templateSidebar");
76
+ const id = useUniqueId().replace(/:/g, "");
77
+ const navigation = useNavigation();
78
+ const panes = useRef(null);
79
+ const sidebarSpine = useRef(null);
80
+ const followFocus = useFollowFocus();
81
+ const sidebar = useDrawer({
82
+ id: `${id}-sidebar`,
83
+ beside: useWideEnough(panes, SIDEBAR_BESIDE_REM),
84
+ defaultOpen: defaultSidebarOpen ?? true,
85
+ side: "start",
86
+ focus: (pane) => pane.querySelector('[role="option"][aria-selected="true"]'),
87
+ slides: false,
88
+ alongside: sidebarSpine,
89
+ followFocus
90
+ });
91
+ const pages = navigation.total > 1;
92
+ const showSidebar = pages && sidebar.open;
93
+ const panel = useDrawer({
94
+ id: `${id}-panel`,
95
+ beside: useWideEnough(panes, BESIDE_REM + (showSidebar ? SIDEBAR_REM : 0)),
96
+ defaultOpen: Boolean(defaultPanelOpen),
97
+ side: "end",
98
+ followFocus
99
+ });
100
+ const over = panel.over;
101
+ const [PanelPart, setPanelPart] = useState();
102
+ const loadPart = () => loadPanel().then((module) => setPanelPart(() => module.default));
103
+ useEffect(() => {
104
+ if (panel.open) void loadPart();
105
+ }, [panel.open]);
106
+ const reach = (event) => {
107
+ var _a, _b;
108
+ if (!PanelPart && ((_b = (_a = event.target).closest) == null ? void 0 : _b.call(_a, `[aria-controls~="${id}-panel"]`)))
109
+ void loadPart();
110
+ };
111
+ const choose = () => {
112
+ if (sidebar.over) sidebar.close();
113
+ };
114
+ const docked = !over && panel.open;
115
+ const panelToggle = /* @__PURE__ */ jsx(
116
+ PanelToggle,
117
+ {
118
+ open: panel.open,
119
+ onOpenChange: (next) => next && !PanelPart ? loadPart().then(() => panel.setOpen(true)) : panel.setOpen(next),
120
+ controls: `${id}-panel`
121
+ }
122
+ );
123
+ const toggle = pages && /* @__PURE__ */ jsxs(
124
+ "button",
125
+ {
126
+ type: "button",
127
+ className: "clover-template-document-sidebar-toggle",
128
+ "aria-expanded": sidebar.open,
129
+ "aria-controls": `${id}-sidebar`,
130
+ lang: langOf("templateSidebarToggle"),
131
+ onClick: () => sidebar.setOpen(!sidebar.open),
132
+ children: [
133
+ /* @__PURE__ */ jsxs(
134
+ "svg",
135
+ {
136
+ "aria-hidden": "true",
137
+ focusable: "false",
138
+ width: "16",
139
+ height: "16",
140
+ viewBox: "0 0 16 16",
141
+ fill: sidebar.open ? "currentColor" : "none",
142
+ stroke: "currentColor",
143
+ strokeWidth: "1.25",
144
+ strokeLinecap: "round",
145
+ strokeLinejoin: "round",
146
+ children: [
147
+ /* @__PURE__ */ jsx("rect", { x: "1.5", y: "2", width: "5.5", height: "4.5", rx: "1" }),
148
+ /* @__PURE__ */ jsx("rect", { x: "1.5", y: "9.5", width: "5.5", height: "4.5", rx: "1" }),
149
+ /* @__PURE__ */ jsx("path", { d: "M9.5 4.25h5M9.5 11.75h5", fill: "none" })
150
+ ]
151
+ }
152
+ ),
153
+ /* @__PURE__ */ jsx("span", { style: visuallyHidden, children: t("templateSidebarToggle") }),
154
+ /* @__PURE__ */ jsx(Position, { className: "clover-template-document-position" }),
155
+ /* @__PURE__ */ jsx(Tip, { label: t("templateSidebarToggle") })
156
+ ]
157
+ }
158
+ );
159
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
160
+ /* @__PURE__ */ jsxs("header", { className: "clover-template-document-toolbar", children: [
161
+ /* @__PURE__ */ jsx(
162
+ Label,
163
+ {
164
+ as: title.as,
165
+ className: "clover-template-document-title",
166
+ ...title.title
167
+ }
168
+ ),
169
+ download && /* @__PURE__ */ jsx(Download, { headingLevel: below(headingLevel) }),
170
+ /* @__PURE__ */ jsx(Provider, { className: "clover-template-document-provider", children: /* @__PURE__ */ jsx(Logo, {}) })
171
+ ] }),
172
+ /* @__PURE__ */ jsx(Status, { loading: false }),
173
+ /* @__PURE__ */ jsxs(
174
+ Split,
175
+ {
176
+ ref: panes,
177
+ className: "clover-template-document-panes clover-template-panes",
178
+ "data-sidebar": showSidebar ? "open" : "closed",
179
+ "data-narrow": sidebar.over || void 0,
180
+ "data-panel": over ? "over" : "beside",
181
+ storageKey: storageKey || void 0,
182
+ onKeyDown: (event) => {
183
+ panel.onKeyDown(event);
184
+ sidebar.onKeyDown(event);
185
+ },
186
+ onPointerOver: reach,
187
+ onFocus: reach,
188
+ children: [
189
+ /* @__PURE__ */ jsxs(
190
+ SplitPane,
191
+ {
192
+ ref: sidebar.pane,
193
+ as: "aside",
194
+ id: `${id}-sidebar`,
195
+ name: "sidebar",
196
+ className: "clover-template-document-sidebar",
197
+ "aria-label": sidebarLang ? void 0 : t("templateSidebar"),
198
+ "aria-labelledby": sidebarLang ? `${id}-sidebar-name` : void 0,
199
+ size: "13rem",
200
+ min: sidebar.over ? void 0 : "8rem",
201
+ max: "24rem",
202
+ hidden: !showSidebar,
203
+ children: [
204
+ sidebarLang && /* @__PURE__ */ jsx("span", { hidden: true, id: `${id}-sidebar-name`, lang: sidebarLang, children: t("templateSidebar") }),
205
+ /* @__PURE__ */ jsx(
206
+ Items,
207
+ {
208
+ layout: "list",
209
+ "aria-label": sidebarLang ? void 0 : t("templateSidebar"),
210
+ thumbnailSize: 320,
211
+ onSelect: choose
212
+ }
213
+ )
214
+ ]
215
+ }
216
+ ),
217
+ showSidebar && !sidebar.over && /* @__PURE__ */ jsx(SplitHandle, { "aria-controls": `${id}-sidebar` }),
218
+ showSidebar && /* @__PURE__ */ jsx(
219
+ "div",
220
+ {
221
+ ref: sidebarSpine,
222
+ className: "clover-template-document-spine",
223
+ "data-for": "sidebar",
224
+ children: toggle
225
+ }
226
+ ),
227
+ /* @__PURE__ */ jsxs(
228
+ SplitPane,
229
+ {
230
+ className: "clover-template-document-main",
231
+ min: showSidebar && !sidebar.over || docked ? PAGE_MIN : void 0,
232
+ children: [
233
+ pages && !sidebar.open && /* @__PURE__ */ jsx("div", { className: "clover-template-document-sidebar-closed", children: toggle }),
234
+ /* @__PURE__ */ jsx(Sheets, { children: !docked && panelToggle })
235
+ ]
236
+ }
237
+ ),
238
+ docked && /* @__PURE__ */ jsx(SplitHandle, { "aria-controls": `${id}-panel` }),
239
+ docked && /* @__PURE__ */ jsx("div", { className: "clover-template-document-spine", children: panelToggle }),
240
+ /* @__PURE__ */ jsx(
241
+ SplitPane,
242
+ {
243
+ ref: panel.pane,
244
+ id: `${id}-panel`,
245
+ "data-spine": over || void 0,
246
+ name: "panel",
247
+ className: "clover-template-document-panel clover-template-drawer",
248
+ size: "24rem",
249
+ min: over ? void 0 : PANEL_MIN,
250
+ "data-open": panel.opened,
251
+ hidden: !panel.shown,
252
+ children: PanelPart && /* @__PURE__ */ jsx(
253
+ PanelPart,
254
+ {
255
+ layout: panelLayout,
256
+ headingLevel: below(headingLevel),
257
+ download: false,
258
+ onClose: over ? panel.close : void 0,
259
+ closeOnEscape: over
260
+ }
261
+ )
262
+ }
263
+ ),
264
+ panel.scrim && /* @__PURE__ */ jsx(
265
+ "div",
266
+ {
267
+ className: "clover-template-document-scrim clover-template-scrim",
268
+ ...panel.scrim
269
+ }
270
+ ),
271
+ pages && sidebar.scrim && /* @__PURE__ */ jsx(
272
+ "div",
273
+ {
274
+ className: "clover-template-document-scrim clover-template-scrim",
275
+ "data-for": "sidebar",
276
+ ...sidebar.scrim
277
+ }
278
+ )
279
+ ]
280
+ }
281
+ )
282
+ ] });
283
+ }
284
+ export {
285
+ Document
286
+ };
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { Panel } from "../../components/Panel/Panel.mjs";
4
+ function DocumentPanel(props) {
5
+ return /* @__PURE__ */ jsx(Panel, { ...props });
6
+ }
7
+ export {
8
+ DocumentPanel as default
9
+ };
@@ -0,0 +1,360 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useRef, useMemo, useEffect, useLayoutEffect, useState } from "react";
4
+ import { useClover } from "../../react/context.mjs";
5
+ import { useSequence, useNavigation } from "../../react/hooks.mjs";
6
+ import { Body } from "../../components/Body/Body.mjs";
7
+ import { stillSource, resolveThumbnail } from "../../core/thumbnail.mjs";
8
+ const STILL_SIZE = 1600;
9
+ const SETTLE_MS = 200;
10
+ const THRESHOLD = 0.25;
11
+ const REVEAL_MS = 1500;
12
+ const useLayout = typeof window === "undefined" ? useEffect : useLayoutEffect;
13
+ const ratioOf = (canvas) => {
14
+ const width = Number(canvas == null ? void 0 : canvas.width);
15
+ const height = Number(canvas == null ? void 0 : canvas.height);
16
+ return width > 0 && height > 0 ? width / height : 16 / 9;
17
+ };
18
+ function Sheets({ children }) {
19
+ const { clover } = useClover("Document");
20
+ const sequence = useSequence();
21
+ const navigation = useNavigation();
22
+ const column = useRef(null);
23
+ const sheetsBox = useRef(null);
24
+ const live = useRef(null);
25
+ const reversed = sequence.direction === "right-to-left" || sequence.direction === "bottom-to-top";
26
+ const sheets = useMemo(
27
+ () => sequence.views.map((view) => {
28
+ var _a;
29
+ const canvases = view.map((index) => sequence.canvases[index]);
30
+ const shown = reversed ? [...canvases].reverse() : canvases;
31
+ return {
32
+ key: canvases.map((canvas) => canvas.id).join("|"),
33
+ first: (_a = canvases[0]) == null ? void 0 : _a.id,
34
+ canvases: shown,
35
+ ratio: shown.reduce((sum, canvas) => sum + ratioOf(canvas), 0)
36
+ };
37
+ }),
38
+ [sequence, reversed]
39
+ );
40
+ const position = Math.max(0, navigation.position);
41
+ const latest = useRef({ sheets, position });
42
+ latest.current = { sheets, position };
43
+ const followed = useRef(null);
44
+ const aiming = useRef(null);
45
+ const rested = useRef(0);
46
+ const stopReveal = useRef(() => void 0);
47
+ const quiet = useRef(false);
48
+ const sheetAt = (index) => {
49
+ var _a;
50
+ return (_a = sheetsBox.current) == null ? void 0 : _a.children[index];
51
+ };
52
+ const placeOf = (index) => {
53
+ const element = column.current;
54
+ const sheet = sheetAt(index);
55
+ if (!element || !sheet || sheet === live.current) return 0;
56
+ return Math.min(
57
+ sheet.offsetTop,
58
+ element.scrollHeight - element.clientHeight
59
+ );
60
+ };
61
+ const place = () => {
62
+ const layer = live.current;
63
+ const sheet = sheetAt(latest.current.position);
64
+ if (!layer) return;
65
+ if (!sheet || sheet === layer) {
66
+ layer.style.top = "0px";
67
+ layer.style.height = "100%";
68
+ return;
69
+ }
70
+ layer.style.top = `${sheet.offsetTop}px`;
71
+ layer.style.height = `${sheet.offsetHeight}px`;
72
+ };
73
+ function pin() {
74
+ const element = column.current;
75
+ if (!element || element.hasAttribute("data-scrolling") || aiming.current !== null)
76
+ return;
77
+ const top = placeOf(latest.current.position);
78
+ rested.current = top;
79
+ if (Math.abs(element.scrollTop - top) <= 1) return;
80
+ quiet.current = true;
81
+ element.scrollTop = top;
82
+ requestAnimationFrame(
83
+ () => requestAnimationFrame(() => quiet.current = false)
84
+ );
85
+ }
86
+ useLayout(place);
87
+ useEffect(() => {
88
+ const resized = new ResizeObserver(() => {
89
+ place();
90
+ pin();
91
+ });
92
+ if (sheetsBox.current) resized.observe(sheetsBox.current);
93
+ if (column.current) resized.observe(column.current);
94
+ return () => resized.disconnect();
95
+ }, []);
96
+ const hold = () => {
97
+ stopReveal.current();
98
+ for (const [element, name] of [
99
+ [column.current, "data-scrolling"],
100
+ [live.current, "data-moved"]
101
+ ])
102
+ if (element && !element.hasAttribute(name))
103
+ element.setAttribute(name, "");
104
+ };
105
+ const reveal = () => {
106
+ const element = column.current;
107
+ const layer = live.current;
108
+ if (!element || !layer) return;
109
+ stopReveal.current();
110
+ rested.current = element.scrollTop;
111
+ const drawn = () => {
112
+ const figure = layer.querySelector(".clover-canvas");
113
+ return !figure || figure.getAttribute("data-status") !== "loading" || figure.getAttribute("data-placeholder") === "true";
114
+ };
115
+ let frame = 0;
116
+ const watch = new MutationObserver(() => drawn() && show());
117
+ const late = setTimeout(() => show(), REVEAL_MS);
118
+ const stop = () => {
119
+ cancelAnimationFrame(frame);
120
+ clearTimeout(late);
121
+ watch.disconnect();
122
+ };
123
+ const show = () => {
124
+ stop();
125
+ layer.removeAttribute("data-moved");
126
+ element.removeAttribute("data-scrolling");
127
+ };
128
+ stopReveal.current = stop;
129
+ frame = requestAnimationFrame(() => {
130
+ frame = requestAnimationFrame(() => {
131
+ if (drawn()) return show();
132
+ watch.observe(layer, {
133
+ attributes: true,
134
+ subtree: true,
135
+ attributeFilter: ["data-status", "data-placeholder"]
136
+ });
137
+ });
138
+ });
139
+ };
140
+ const bring = (index, instantly = false) => {
141
+ var _a;
142
+ const element = column.current;
143
+ if (!element) return;
144
+ const top = placeOf(index);
145
+ if (Math.abs(element.scrollTop - top) <= 1) return reveal();
146
+ hold();
147
+ aiming.current = index;
148
+ const still = instantly || ((_a = window.matchMedia) == null ? void 0 : _a.call(window, "(prefers-reduced-motion: reduce)").matches);
149
+ element.scrollTo({ top, behavior: still ? "auto" : "smooth" });
150
+ };
151
+ const shownSheets = useRef(null);
152
+ useLayout(() => {
153
+ const fresh = shownSheets.current !== sheets;
154
+ shownSheets.current = sheets;
155
+ zoom(false);
156
+ if (followed.current === position && !fresh) {
157
+ followed.current = null;
158
+ return;
159
+ }
160
+ followed.current = null;
161
+ bring(position, fresh);
162
+ }, [position, sheets]);
163
+ useEffect(() => {
164
+ const element = column.current;
165
+ if (!element) return;
166
+ let frame = 0;
167
+ let rest;
168
+ let held = false;
169
+ const choose = (top) => {
170
+ const count = latest.current.sheets.length;
171
+ if (count < 2) return 0;
172
+ let at = 0;
173
+ for (let index = 0; index < count; index++) {
174
+ if (placeOf(index) <= top + 0.5) at = index;
175
+ else break;
176
+ }
177
+ if (at >= count - 1) return count - 1;
178
+ const from = placeOf(at);
179
+ const share = (top - from) / Math.max(1, placeOf(at + 1) - from);
180
+ return top >= rested.current ? share > THRESHOLD ? at + 1 : at : share < 1 - THRESHOLD ? at : at + 1;
181
+ };
182
+ const follow = () => {
183
+ frame = 0;
184
+ if (aiming.current !== null) return;
185
+ const index = choose(element.scrollTop);
186
+ const { sheets: sheets2, position: position2 } = latest.current;
187
+ if (index === position2 || !sheets2[index]) return;
188
+ hold();
189
+ zoom(false);
190
+ followed.current = index;
191
+ clover.goTo(sheets2[index].first);
192
+ };
193
+ const settle = () => {
194
+ if (held) return;
195
+ const { sheets: sheets2, position: position2 } = latest.current;
196
+ const top = element.scrollTop;
197
+ const aimed = aiming.current;
198
+ aiming.current = null;
199
+ const target = aimed !== null && Math.abs(top - placeOf(aimed)) <= 1 ? aimed : choose(top);
200
+ if (!sheets2[target]) return reveal();
201
+ if (target !== position2) {
202
+ hold();
203
+ zoom(false);
204
+ followed.current = target;
205
+ clover.goTo(sheets2[target].first);
206
+ }
207
+ bring(target);
208
+ };
209
+ const later = () => {
210
+ clearTimeout(rest);
211
+ rest = setTimeout(settle, SETTLE_MS);
212
+ };
213
+ const onScroll = () => {
214
+ if (quiet.current) return;
215
+ hold();
216
+ later();
217
+ if (!frame) frame = requestAnimationFrame(follow);
218
+ };
219
+ const take = (event) => {
220
+ aiming.current = null;
221
+ if (event.type === "touchstart" || event.type === "pointerdown" && event.target === element)
222
+ held = true;
223
+ };
224
+ const release = () => {
225
+ if (!held) return;
226
+ held = false;
227
+ later();
228
+ };
229
+ element.addEventListener("scroll", onScroll, { passive: true });
230
+ element.addEventListener("wheel", take, { passive: true });
231
+ element.addEventListener("touchstart", take, { passive: true });
232
+ element.addEventListener("pointerdown", take);
233
+ window.addEventListener("touchend", release);
234
+ window.addEventListener("touchcancel", release);
235
+ window.addEventListener("pointerup", release);
236
+ return () => {
237
+ cancelAnimationFrame(frame);
238
+ clearTimeout(rest);
239
+ stopReveal.current();
240
+ element.removeEventListener("scroll", onScroll);
241
+ element.removeEventListener("wheel", take);
242
+ element.removeEventListener("touchstart", take);
243
+ element.removeEventListener("pointerdown", take);
244
+ window.removeEventListener("touchend", release);
245
+ window.removeEventListener("touchcancel", release);
246
+ window.removeEventListener("pointerup", release);
247
+ };
248
+ }, [clover]);
249
+ const [handle, setHandle] = useState(null);
250
+ function zoom(zoomed) {
251
+ const element = column.current;
252
+ if (!element || element.hasAttribute("data-zoomed") === zoomed) return;
253
+ element.toggleAttribute("data-zoomed", zoomed);
254
+ if (zoomed) pin();
255
+ }
256
+ useEffect(() => {
257
+ if (!handle) return;
258
+ return handle.on("viewport", () => zoom(!handle.atHome));
259
+ }, [handle]);
260
+ return /* @__PURE__ */ jsx(
261
+ "div",
262
+ {
263
+ ref: column,
264
+ className: "clover-template-document-column",
265
+ onKeyDown: (event) => {
266
+ if (event.defaultPrevented || event.altKey || event.ctrlKey) return;
267
+ if (event.key === "PageDown" && navigation.hasNext) navigation.next();
268
+ else if (event.key === "PageUp" && navigation.hasPrevious)
269
+ navigation.previous();
270
+ else return;
271
+ event.preventDefault();
272
+ },
273
+ children: /* @__PURE__ */ jsxs(
274
+ "div",
275
+ {
276
+ ref: sheetsBox,
277
+ className: "clover-template-document-sheets",
278
+ "data-single": sheets.length < 2 || void 0,
279
+ children: [
280
+ sheets.map((sheet, index) => (
281
+ /*
282
+ * A press on a sheet not active brings it to the top: a pointer's way, beside
283
+ * the thumbnails, the pager and PageUp and PageDown, which a keyboard has.
284
+ */
285
+ // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
286
+ /* @__PURE__ */ jsx(
287
+ "div",
288
+ {
289
+ "aria-hidden": "true",
290
+ className: "clover-template-document-sheet",
291
+ "data-active": index === position || void 0,
292
+ onClick: () => index !== position && clover.goTo(sheet.first),
293
+ style: { "--ratio": sheet.ratio },
294
+ children: sheet.canvases.map((canvas) => /* @__PURE__ */ jsx(Still, { canvas }, canvas.id))
295
+ },
296
+ sheet.key
297
+ )
298
+ )),
299
+ /* @__PURE__ */ jsx("div", { ref: live, className: "clover-template-document-live", children: /* @__PURE__ */ jsx(
300
+ Body,
301
+ {
302
+ className: "clover-template-document-body",
303
+ onReady: setHandle,
304
+ children
305
+ }
306
+ ) })
307
+ ]
308
+ }
309
+ )
310
+ }
311
+ );
312
+ }
313
+ function useNearColumn(element) {
314
+ const [near, setNear] = useState(
315
+ () => typeof IntersectionObserver === "undefined"
316
+ );
317
+ useEffect(() => {
318
+ if (near || !element) return;
319
+ const observer = new IntersectionObserver(
320
+ (entries) => {
321
+ if (!entries.some((entry) => entry.isIntersecting)) return;
322
+ setNear(true);
323
+ observer.disconnect();
324
+ },
325
+ {
326
+ root: element.closest(".clover-template-document-column"),
327
+ rootMargin: "100% 0px"
328
+ }
329
+ );
330
+ observer.observe(element);
331
+ return () => observer.disconnect();
332
+ }, [element, near]);
333
+ return near;
334
+ }
335
+ function Still({ canvas }) {
336
+ const { clover } = useClover("Document");
337
+ const source = useMemo(() => stillSource(canvas), [canvas]);
338
+ const [page, setPage] = useState(null);
339
+ const near = useNearColumn(page);
340
+ const [src, setSrc] = useState(source == null ? void 0 : source.src);
341
+ useEffect(() => {
342
+ if (!source || source.src) return setSrc(source == null ? void 0 : source.src);
343
+ if (!near) return;
344
+ let current = true;
345
+ void resolveThumbnail(source, STILL_SIZE, clover.request).then(
346
+ (url) => current && setSrc(url)
347
+ );
348
+ return () => {
349
+ current = false;
350
+ };
351
+ }, [source, clover, near]);
352
+ const style = { aspectRatio: String(ratioOf(canvas)) };
353
+ return src ? (
354
+ // eslint-disable-next-line @next/next/no-img-element
355
+ /* @__PURE__ */ jsx("img", { alt: "", decoding: "async", loading: "lazy", src, style })
356
+ ) : /* @__PURE__ */ jsx("span", { ref: setPage, style });
357
+ }
358
+ export {
359
+ Sheets
360
+ };