@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,448 @@
1
+ "use client";
2
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
3
+ import { useRef, useState, useEffect, useLayoutEffect, createContext, useContext } from "react";
4
+ import { useUniqueId } from "./useUniqueId.mjs";
5
+ import { titleTag } from "./heading.mjs";
6
+ import { Tip } from "./Tip.mjs";
7
+ import { useContainerName } from "./useContainerName.mjs";
8
+ import { useScrollTrack } from "./useScrollTrack.mjs";
9
+ import { useCloverTranslation } from "../i18n/useCloverTranslation.mjs";
10
+ const useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
11
+ const SectionActionsContext = createContext(null);
12
+ function useSectionActions() {
13
+ return useContext(SectionActionsContext);
14
+ }
15
+ const SectionOpenedContext = createContext(0);
16
+ function useSectionOpened() {
17
+ return useContext(SectionOpenedContext);
18
+ }
19
+ function Sections({
20
+ items,
21
+ layout = "tabs",
22
+ value,
23
+ onValueChange,
24
+ label,
25
+ labelLang,
26
+ headingLevel = 3
27
+ }) {
28
+ var _a;
29
+ const id = useUniqueId();
30
+ const name = useContainerName(label ?? "", labelLang, label === void 0);
31
+ const buttons = useRef([]);
32
+ const tabs = layout === "tabs";
33
+ const { t, langOf } = useCloverTranslation();
34
+ const track = useScrollTrack({ dragFree: true, itemCount: items.length });
35
+ const open = items.some((item) => item.value === value) ? value : ((_a = items[0]) == null ? void 0 : _a.value) ?? null;
36
+ const mounted = useRef(/* @__PURE__ */ new Set());
37
+ if (open) mounted.current.add(open);
38
+ const pressed = useRef(null);
39
+ const [opened, setOpened] = useState(
40
+ { value: null, count: 0 }
41
+ );
42
+ useEffect(() => {
43
+ var _a2;
44
+ if (tabs || !open || pressed.current !== open) return;
45
+ pressed.current = null;
46
+ const index = items.findIndex((item) => item.value === open);
47
+ const panel = document.getElementById(`${id}-panel-${index}`);
48
+ const heading = (_a2 = buttons.current[index]) == null ? void 0 : _a2.parentElement;
49
+ if (!panel || !heading) return;
50
+ const hidden = heading.getBoundingClientRect().bottom - panel.getBoundingClientRect().top;
51
+ if (hidden <= 0) return;
52
+ const scroller2 = scrollerOf(panel);
53
+ if (scroller2) scroller2.scrollTop -= hidden;
54
+ }, [open, tabs, items, id]);
55
+ const keepInSight = (event) => {
56
+ var _a2, _b, _c, _d;
57
+ const index = items.findIndex((item) => item.value === open);
58
+ const panel = document.getElementById(`${id}-panel-${index}`);
59
+ const target = event.target;
60
+ if (!panel || target === panel || !panel.contains(target)) return;
61
+ if (!focusShows(target)) return;
62
+ const above = (_b = (_a2 = buttons.current[index]) == null ? void 0 : _a2.parentElement) == null ? void 0 : _b.getBoundingClientRect();
63
+ const below = index + 1 < items.length ? (_d = (_c = buttons.current[index + 1]) == null ? void 0 : _c.parentElement) == null ? void 0 : _d.getBoundingClientRect() : void 0;
64
+ if (!above) return;
65
+ const box = target.getBoundingClientRect();
66
+ const shift = box.top < above.bottom ? Math.floor(box.top - above.bottom) : below && box.bottom > below.top ? Math.ceil(Math.min(box.bottom - below.top, box.top - above.bottom)) : 0;
67
+ const scroller2 = shift ? scrollerOf(panel) : null;
68
+ if (scroller2) scroller2.scrollTop += shift;
69
+ };
70
+ const list = useRef(null);
71
+ const values = items.map((item) => item.value).join("\n");
72
+ useIsomorphicLayoutEffect(() => {
73
+ const root = list.current;
74
+ if (tabs || !root || typeof ResizeObserver === "undefined") return;
75
+ const sections = [
76
+ ...root.querySelectorAll(":scope > .clover-sections-item")
77
+ ];
78
+ const headings = sections.map((section) => section.firstElementChild);
79
+ const first = headings[0];
80
+ const last = headings[headings.length - 1];
81
+ const heights = /* @__PURE__ */ new Map();
82
+ const height = (heading) => (heading && heights.get(heading)) ?? 0;
83
+ const page = document.scrollingElement;
84
+ let scroller2 = null;
85
+ let insets = 0;
86
+ const measure = () => {
87
+ const total = headings.reduce((sum, heading) => sum + height(heading), 0);
88
+ let before = 0;
89
+ sections.forEach((section, index) => {
90
+ section.style.setProperty("--clover-sections-before", `${before}px`);
91
+ before += height(headings[index]);
92
+ section.style.setProperty(
93
+ "--clover-sections-after",
94
+ `${total - before}px`
95
+ );
96
+ });
97
+ root.style.setProperty("--clover-sections-total", `${total}px`);
98
+ const style = first && getComputedStyle(first);
99
+ if ((style == null ? void 0 : style.position) === "sticky" && last) {
100
+ insets = parseFloat(style.top) + parseFloat(getComputedStyle(last).bottom) || 0;
101
+ }
102
+ const text = getComputedStyle(root);
103
+ const line = parseFloat(text.lineHeight) || 1.2 * parseFloat(text.fontSize);
104
+ const room = (scroller2 == null ? void 0 : scroller2.clientHeight) ?? 0;
105
+ if (room > 0 && room - insets - total < 2 * line) {
106
+ root.dataset.stacks = "off";
107
+ } else {
108
+ delete root.dataset.stacks;
109
+ }
110
+ };
111
+ const observer = new ResizeObserver((entries) => {
112
+ var _a2, _b;
113
+ for (const entry of entries) {
114
+ if (!headings.includes(entry.target)) continue;
115
+ heights.set(
116
+ entry.target,
117
+ ((_b = (_a2 = entry.borderBoxSize) == null ? void 0 : _a2[0]) == null ? void 0 : _b.blockSize) ?? entry.target.getBoundingClientRect().height
118
+ );
119
+ }
120
+ measure();
121
+ });
122
+ const watch = () => {
123
+ const next = scrollerOf(root);
124
+ if (next === scroller2) return;
125
+ if (scroller2 && scroller2 !== page) observer.unobserve(scroller2);
126
+ if (next && next !== page) observer.observe(next);
127
+ scroller2 = next;
128
+ };
129
+ const resize = () => {
130
+ watch();
131
+ measure();
132
+ };
133
+ watch();
134
+ for (const heading of headings) {
135
+ if (heading) observer.observe(heading, { box: "border-box" });
136
+ }
137
+ window.addEventListener("resize", resize);
138
+ return () => {
139
+ observer.disconnect();
140
+ window.removeEventListener("resize", resize);
141
+ for (const section of sections) {
142
+ section.style.removeProperty("--clover-sections-before");
143
+ section.style.removeProperty("--clover-sections-after");
144
+ }
145
+ root.style.removeProperty("--clover-sections-total");
146
+ delete root.dataset.stacks;
147
+ };
148
+ }, [tabs, values, headingLevel]);
149
+ useEffect(() => {
150
+ if (tabs) return;
151
+ const headings = buttons.current.map((button2) => button2 == null ? void 0 : button2.parentElement).filter((heading) => Boolean(heading));
152
+ const onWheel = (event) => {
153
+ var _a2;
154
+ if (event.ctrlKey) return;
155
+ const heading = event.currentTarget;
156
+ const inner = scrolling(heading);
157
+ if (!inner || inner === document.scrollingElement) return;
158
+ event.preventDefault();
159
+ const unit = event.deltaMode === 1 ? parseFloat(getComputedStyle(heading).lineHeight) || 16 : event.deltaMode === 2 ? inner.clientHeight : 1;
160
+ (_a2 = scrolling(inner) ?? document.scrollingElement) == null ? void 0 : _a2.scrollBy({
161
+ left: event.deltaX * unit,
162
+ top: event.deltaY * unit,
163
+ behavior: "instant"
164
+ });
165
+ };
166
+ for (const heading of headings)
167
+ heading.addEventListener("wheel", onWheel, { passive: false });
168
+ return () => {
169
+ for (const heading of headings)
170
+ heading.removeEventListener("wheel", onWheel);
171
+ };
172
+ }, [tabs, values]);
173
+ const choose = (item) => {
174
+ if (item === open) return;
175
+ pressed.current = item;
176
+ if (!tabs) setOpened((last) => ({ value: item, count: last.count + 1 }));
177
+ onValueChange == null ? void 0 : onValueChange(item);
178
+ };
179
+ const onKeyDown = (event, index) => {
180
+ var _a2;
181
+ const last = items.length - 1;
182
+ const [back, forward] = tabs ? ["ArrowLeft", "ArrowRight"] : ["ArrowUp", "ArrowDown"];
183
+ const next = event.key === forward ? (index + 1) % items.length : event.key === back ? (index - 1 + items.length) % items.length : event.key === "Home" ? 0 : event.key === "End" ? last : null;
184
+ if (next === null) return;
185
+ event.preventDefault();
186
+ (_a2 = buttons.current[next]) == null ? void 0 : _a2.focus();
187
+ if (tabs) choose(items[next].value);
188
+ };
189
+ const placed = useRef(false);
190
+ useEffect(() => {
191
+ if (!tabs) return;
192
+ const index = items.findIndex((item) => item.value === open);
193
+ const tab = buttons.current[index];
194
+ const row = tab == null ? void 0 : tab.parentElement;
195
+ if (!tab || !row) return;
196
+ const style = getComputedStyle(row);
197
+ const room = row.getBoundingClientRect();
198
+ const box = tab.getBoundingClientRect();
199
+ const start = room.left + (parseFloat(style.scrollPaddingLeft) || 0);
200
+ const end = room.right - (parseFloat(style.scrollPaddingRight) || 0);
201
+ if (box.left < start - 1 || box.right > end + 1)
202
+ track.scrollToIndex(index, { instant: !placed.current });
203
+ placed.current = true;
204
+ }, [open, tabs, items.length, track.scrollToIndex]);
205
+ const scroller = (step) => {
206
+ const more = step === "prev" ? track.canScrollPrev : track.canScrollNext;
207
+ const key = step === "prev" ? "sectionsScrollBack" : "sectionsScrollForward";
208
+ return /* @__PURE__ */ jsxs(
209
+ "button",
210
+ {
211
+ type: "button",
212
+ className: `clover-sections-scroll-${step}`,
213
+ "aria-hidden": "true",
214
+ tabIndex: -1,
215
+ hidden: !more,
216
+ lang: langOf(key),
217
+ onMouseDown: (event) => event.preventDefault(),
218
+ onClick: step === "prev" ? track.scrollPrev : track.scrollNext,
219
+ children: [
220
+ /* @__PURE__ */ jsx(
221
+ "svg",
222
+ {
223
+ "aria-hidden": "true",
224
+ focusable: "false",
225
+ width: "16",
226
+ height: "16",
227
+ viewBox: "0 0 16 16",
228
+ children: /* @__PURE__ */ jsx(
229
+ "path",
230
+ {
231
+ d: step === "next" ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5",
232
+ fill: "none",
233
+ stroke: "currentColor",
234
+ strokeWidth: "2",
235
+ strokeLinecap: "round",
236
+ strokeLinejoin: "round"
237
+ }
238
+ )
239
+ }
240
+ ),
241
+ /* @__PURE__ */ jsx(Tip, { label: t(key) })
242
+ ]
243
+ }
244
+ );
245
+ };
246
+ const Heading = titleTag(headingLevel, "div");
247
+ const button = (item, index) => {
248
+ const isOpen = item.value === open;
249
+ return /* @__PURE__ */ jsxs(
250
+ "button",
251
+ {
252
+ ref: (element) => {
253
+ buttons.current[index] = element;
254
+ },
255
+ type: "button",
256
+ id: `${id}-button-${index}`,
257
+ className: "clover-sections-button",
258
+ "data-value": item.value,
259
+ "data-track-index": tabs ? index : void 0,
260
+ "aria-controls": `${id}-panel-${index}`,
261
+ ...tabs ? {
262
+ role: "tab",
263
+ "aria-selected": isOpen,
264
+ tabIndex: isOpen ? 0 : -1
265
+ } : {
266
+ "aria-expanded": isOpen,
267
+ // WAI-ARIA's accordion: an open panel that cannot collapse is disabled.
268
+ "aria-disabled": isOpen || void 0
269
+ },
270
+ onClick: () => choose(item.value),
271
+ onKeyDown: (event) => onKeyDown(event, index),
272
+ children: [
273
+ /* @__PURE__ */ jsx("span", { className: "clover-sections-label", children: item.label }),
274
+ !tabs && !isOpen && /* @__PURE__ */ jsx(
275
+ "svg",
276
+ {
277
+ "aria-hidden": "true",
278
+ focusable: "false",
279
+ width: "12",
280
+ height: "12",
281
+ viewBox: "0 0 12 12",
282
+ className: "clover-sections-chevron",
283
+ children: /* @__PURE__ */ jsx(
284
+ "path",
285
+ {
286
+ d: "M3 4.5l3 3 3-3",
287
+ fill: "none",
288
+ stroke: "currentColor",
289
+ strokeWidth: "1.5",
290
+ strokeLinecap: "round",
291
+ strokeLinejoin: "round"
292
+ }
293
+ )
294
+ }
295
+ )
296
+ ]
297
+ },
298
+ item.value
299
+ );
300
+ };
301
+ return /* @__PURE__ */ jsxs(
302
+ "div",
303
+ {
304
+ ref: list,
305
+ className: "clover-sections",
306
+ "data-layout": layout,
307
+ onFocus: tabs ? void 0 : keepInSight,
308
+ style: tabs ? void 0 : {
309
+ "--clover-sections-count": items.length
310
+ },
311
+ children: [
312
+ tabs && /* @__PURE__ */ jsx(
313
+ "div",
314
+ {
315
+ className: "clover-sections-tabs",
316
+ "data-more": [track.canScrollPrev && "start", track.canScrollNext && "end"].filter(Boolean).join(" ") || void 0,
317
+ children: /* @__PURE__ */ jsxs("div", { className: "clover-sections-row", children: [
318
+ /* @__PURE__ */ jsx(
319
+ "div",
320
+ {
321
+ role: "tablist",
322
+ ref: track.ref,
323
+ ...name.props,
324
+ className: "clover-sections-list",
325
+ children: items.map(button)
326
+ }
327
+ ),
328
+ scroller("prev"),
329
+ scroller("next")
330
+ ] })
331
+ }
332
+ ),
333
+ tabs && name.node,
334
+ items.map((item, index) => {
335
+ const isOpen = item.value === open;
336
+ return /* @__PURE__ */ jsxs(
337
+ "section",
338
+ {
339
+ className: "clover-sections-item",
340
+ "data-value": item.value,
341
+ "data-open": isOpen,
342
+ style: tabs ? void 0 : {
343
+ "--clover-sections-index": index
344
+ },
345
+ children: [
346
+ !tabs && /* @__PURE__ */ jsxs(Heading, { className: "clover-sections-heading", children: [
347
+ button(item, index),
348
+ /* @__PURE__ */ jsx("span", { className: "clover-sections-reach", "aria-hidden": "true" })
349
+ ] }),
350
+ /* @__PURE__ */ jsx(
351
+ SectionOpenedContext.Provider,
352
+ {
353
+ value: opened.value === item.value ? opened.count : 0,
354
+ children: /* @__PURE__ */ jsx(
355
+ Panel,
356
+ {
357
+ id: `${id}-panel-${index}`,
358
+ tabs,
359
+ labelledBy: `${id}-button-${index}`,
360
+ hidden: !isOpen,
361
+ children: mounted.current.has(item.value) ? item.content : null
362
+ }
363
+ )
364
+ }
365
+ )
366
+ ]
367
+ },
368
+ item.value
369
+ );
370
+ })
371
+ ]
372
+ }
373
+ );
374
+ }
375
+ function Panel({
376
+ id,
377
+ tabs,
378
+ labelledBy,
379
+ hidden,
380
+ children
381
+ }) {
382
+ const [actions, setActions] = useState(null);
383
+ useIsomorphicLayoutEffect(() => {
384
+ const section = actions == null ? void 0 : actions.parentElement;
385
+ if (hidden || !actions || !section || typeof ResizeObserver === "undefined")
386
+ return;
387
+ const observer = new ResizeObserver(() => {
388
+ const width = actions.offsetWidth;
389
+ if (width) {
390
+ section.style.setProperty("--clover-sections-actions", `${width}px`);
391
+ } else {
392
+ section.style.removeProperty("--clover-sections-actions");
393
+ }
394
+ });
395
+ observer.observe(actions);
396
+ return () => {
397
+ observer.disconnect();
398
+ section.style.removeProperty("--clover-sections-actions");
399
+ };
400
+ }, [actions, hidden]);
401
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
402
+ !tabs && /* @__PURE__ */ jsx(
403
+ "div",
404
+ {
405
+ ref: setActions,
406
+ className: "clover-sections-actions",
407
+ hidden
408
+ }
409
+ ),
410
+ /* @__PURE__ */ jsx(
411
+ "div",
412
+ {
413
+ id,
414
+ role: tabs ? "tabpanel" : "region",
415
+ "aria-labelledby": labelledBy,
416
+ tabIndex: tabs ? 0 : void 0,
417
+ className: "clover-sections-panel",
418
+ hidden,
419
+ children: /* @__PURE__ */ jsx(SectionActionsContext.Provider, { value: tabs ? null : actions, children })
420
+ }
421
+ )
422
+ ] });
423
+ }
424
+ function scrollerOf(node) {
425
+ for (let at = node.parentElement; at && at !== document.body; at = at.parentElement) {
426
+ if (/auto|scroll|hidden/.test(getComputedStyle(at).overflowY)) return at;
427
+ }
428
+ return document.scrollingElement;
429
+ }
430
+ function scrolling(node) {
431
+ for (let at = node.parentElement; at && at !== document.body; at = at.parentElement) {
432
+ if (/auto|scroll/.test(getComputedStyle(at).overflowY) && at.scrollHeight > at.clientHeight)
433
+ return at;
434
+ }
435
+ return document.scrollingElement;
436
+ }
437
+ function focusShows(node) {
438
+ try {
439
+ return node.matches(":focus-visible");
440
+ } catch {
441
+ return true;
442
+ }
443
+ }
444
+ export {
445
+ Sections,
446
+ useSectionActions,
447
+ useSectionOpened
448
+ };
@@ -0,0 +1,84 @@
1
+ "use client";
2
+ import { jsxs, jsx } from "react/jsx-runtime";
3
+ import { useCloverTranslation } from "../i18n/useCloverTranslation.mjs";
4
+ import { join } from "../lib/classnames.mjs";
5
+ import { Tip } from "./Tip.mjs";
6
+ import { visuallyHidden } from "./visuallyHidden.mjs";
7
+ function Steps({
8
+ steps,
9
+ sentence,
10
+ className
11
+ }) {
12
+ const { t, langOf } = useCloverTranslation();
13
+ const { position, total } = steps;
14
+ if (total < 1) return null;
15
+ const current = position + 1;
16
+ return /* @__PURE__ */ jsxs("div", { className: join("clover-steps", className), children: [
17
+ /* @__PURE__ */ jsxs("span", { "aria-live": "polite", className: "clover-steps-position", children: [
18
+ /* @__PURE__ */ jsxs("span", { "aria-hidden": "true", children: [
19
+ current > 0 ? current : "–",
20
+ " / ",
21
+ total
22
+ ] }),
23
+ /* @__PURE__ */ jsxs("span", { className: "clover-steps-room", "aria-hidden": "true", hidden: true, children: [
24
+ total,
25
+ " / ",
26
+ total
27
+ ] }),
28
+ current > 0 && /* @__PURE__ */ jsx("span", { style: visuallyHidden, lang: langOf(sentence), children: t(sentence, { index: current, total }) })
29
+ ] }),
30
+ /* @__PURE__ */ jsx(Step, { steps, step: "previous" }),
31
+ /* @__PURE__ */ jsx(Step, { steps, step: "next" })
32
+ ] });
33
+ }
34
+ function Step({
35
+ steps,
36
+ step
37
+ }) {
38
+ const { t, langOf } = useCloverTranslation();
39
+ const isNext = step === "next";
40
+ const available = isNext ? steps.position + 1 < steps.total : steps.position > 0;
41
+ const key = isNext ? "commonNext" : "commonPrevious";
42
+ return /* @__PURE__ */ jsxs(
43
+ "button",
44
+ {
45
+ type: "button",
46
+ className: "clover-steps-step",
47
+ "data-step": step,
48
+ lang: langOf(key),
49
+ "aria-disabled": !available || void 0,
50
+ tabIndex: available ? void 0 : -1,
51
+ onClick: () => {
52
+ if (available) steps.step(isNext ? 1 : -1);
53
+ },
54
+ children: [
55
+ /* @__PURE__ */ jsx(
56
+ "svg",
57
+ {
58
+ "aria-hidden": "true",
59
+ focusable: "false",
60
+ width: "12",
61
+ height: "12",
62
+ viewBox: "0 0 16 16",
63
+ children: /* @__PURE__ */ jsx(
64
+ "path",
65
+ {
66
+ d: isNext ? "M6 3l5 5-5 5" : "M10 3L5 8l5 5",
67
+ fill: "none",
68
+ stroke: "currentColor",
69
+ strokeWidth: "2",
70
+ strokeLinecap: "round",
71
+ strokeLinejoin: "round"
72
+ }
73
+ )
74
+ }
75
+ ),
76
+ /* @__PURE__ */ jsx("span", { style: visuallyHidden, children: t(key) }),
77
+ /* @__PURE__ */ jsx(Tip, { label: t(key) })
78
+ ]
79
+ }
80
+ );
81
+ }
82
+ export {
83
+ Steps
84
+ };