@nulib/clover 4.0.0-beta.0 → 4.0.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 (476) hide show
  1. package/README.md +7 -7
  2. package/dist/components/Annotations/Annotations.mjs +165 -204
  3. package/dist/components/Annotations/EntryBodies.mjs +28 -3
  4. package/dist/components/Annotations/languages.mjs +1 -17
  5. package/dist/components/Body/BodyAlert.mjs +2 -1
  6. package/dist/components/Body/Caption.mjs +2 -1
  7. package/dist/components/Body/CaptionDetails.mjs +2 -1
  8. package/dist/components/Body/glyphs.mjs +9 -0
  9. package/dist/components/Canvas/AnnotationMenu.mjs +76 -60
  10. package/dist/components/Canvas/AnnotationState.mjs +9 -2
  11. package/dist/components/Canvas/Annotations.mjs +16 -7
  12. package/dist/components/Canvas/CanvasView.mjs +173 -32
  13. package/dist/components/Canvas/ChoiceMenu.mjs +51 -31
  14. package/dist/components/Canvas/Connected.mjs +38 -4
  15. package/dist/components/Canvas/ControlMenu.mjs +6 -4
  16. package/dist/components/Canvas/Controls.mjs +17 -1
  17. package/dist/components/Canvas/FrameAnimation.mjs +568 -167
  18. package/dist/components/Canvas/LoadedCanvas.mjs +5 -3
  19. package/dist/components/Canvas/PlaceBox.mjs +74 -0
  20. package/dist/components/Canvas/Placeholder.mjs +2 -1
  21. package/dist/components/Canvas/fromManifest.mjs +2 -1
  22. package/dist/components/Canvas/layout.mjs +121 -32
  23. package/dist/components/Canvas/media/MediaBody.mjs +32 -6
  24. package/dist/components/Canvas/media/Player.mjs +11 -25
  25. package/dist/components/Canvas/media/Transport.mjs +94 -61
  26. package/dist/components/Canvas/media/TransportButton.mjs +2 -1
  27. package/dist/components/Canvas/media/placeMenu.mjs +19 -0
  28. package/dist/components/Canvas/media/seekGaps.mjs +43 -0
  29. package/dist/components/Canvas/media/sequence.mjs +96 -0
  30. package/dist/components/Canvas/media/useMediaElement.mjs +22 -3
  31. package/dist/components/Collection/Collection.mjs +2 -1
  32. package/dist/components/CollectionSelect/CollectionSelect.mjs +5 -2
  33. package/dist/components/Contents/Contents.mjs +163 -34
  34. package/dist/components/Download/Download.mjs +34 -38
  35. package/dist/components/Download/downloads.mjs +40 -0
  36. package/dist/components/Items/AnnotationItems.mjs +165 -0
  37. package/dist/components/Items/CountMenu.mjs +89 -0
  38. package/dist/components/Items/Item.mjs +24 -17
  39. package/dist/components/Items/Items.mjs +65 -37
  40. package/dist/components/Items/Pager.mjs +39 -79
  41. package/dist/components/Items/PagerLayout.mjs +41 -0
  42. package/dist/components/Items/Position.mjs +103 -0
  43. package/dist/components/Items/StandaloneItems.mjs +12 -4
  44. package/dist/components/Items/TargetItems.mjs +202 -0
  45. package/dist/components/Label/Label.mjs +2 -1
  46. package/dist/components/Map/MapView.mjs +375 -64
  47. package/dist/components/Map/maplibre-worker.mjs +7 -0
  48. package/dist/components/Map/worker.mjs +22 -0
  49. package/dist/components/Panel/About.mjs +50 -16
  50. package/dist/components/Panel/AboutActions.mjs +117 -0
  51. package/dist/components/Panel/Panel.mjs +58 -18
  52. package/dist/components/Panel/PartOfManifest.mjs +4 -3
  53. package/dist/components/Panel/ReadingLanguages.mjs +20 -0
  54. package/dist/components/Primitives/Primitives.mjs +18 -3
  55. package/dist/components/Provider/Provider.mjs +19 -5
  56. package/dist/components/Root/Announcer.mjs +3 -2
  57. package/dist/components/Root/Root.mjs +5 -2
  58. package/dist/components/Root/useRootState.mjs +14 -2
  59. package/dist/components/Scene/SceneView.mjs +23 -6
  60. package/dist/components/Search/Search.mjs +3 -2
  61. package/dist/components/Split/Split.mjs +13 -3
  62. package/dist/components/Status/Status.mjs +10 -2
  63. package/dist/components/Timeline/playerSurface.mjs +2 -1
  64. package/dist/components/Transcript/Transcript.mjs +42 -23
  65. package/dist/core/annotation-bodies.mjs +25 -5
  66. package/dist/core/annotation-collection.mjs +3 -2
  67. package/dist/core/annotation-name.mjs +12 -9
  68. package/dist/core/annotation-sets.mjs +139 -10
  69. package/dist/core/annotations-content.mjs +8 -1
  70. package/dist/core/annotations.mjs +8 -1
  71. package/dist/core/choice-key.mjs +5 -0
  72. package/dist/core/clover.mjs +105 -20
  73. package/dist/core/content-state-reader.mjs +33 -2
  74. package/dist/core/dates-format.mjs +30 -0
  75. package/dist/core/dates.mjs +19 -0
  76. package/dist/core/geo.mjs +46 -5
  77. package/dist/core/image-layers.mjs +96 -0
  78. package/dist/core/items.mjs +7 -3
  79. package/dist/core/language-choice.mjs +30 -0
  80. package/dist/core/link.mjs +15 -1
  81. package/dist/core/load.mjs +14 -5
  82. package/dist/core/pages.mjs +20 -1
  83. package/dist/core/presentation.mjs +6 -4
  84. package/dist/core/range-regions.mjs +70 -0
  85. package/dist/core/ranges.mjs +52 -18
  86. package/dist/core/region.mjs +7 -2
  87. package/dist/core/sanitize.mjs +86 -1
  88. package/dist/core/save-file.mjs +33 -0
  89. package/dist/core/selectors.mjs +12 -0
  90. package/dist/core/upgrade.mjs +23 -0
  91. package/dist/core/value.mjs +11 -23
  92. package/dist/hooks/useFullscreenExit.mjs +26 -0
  93. package/dist/hooks/useHighContrast.mjs +27 -0
  94. package/dist/i18n/autonym.mjs +11 -0
  95. package/dist/i18n/config.mjs +3 -8
  96. package/dist/{core → i18n}/direction.mjs +5 -1
  97. package/dist/i18n/languages.mjs +44 -0
  98. package/dist/i18n/locales/en.json.mjs +1 -1
  99. package/dist/i18n/locales/es.json.mjs +1 -1
  100. package/dist/i18n/locales/fi.json.mjs +1 -1
  101. package/dist/i18n/locales/fr.json.mjs +1 -1
  102. package/dist/i18n/locales/nb.json.mjs +1 -1
  103. package/dist/i18n/locales/nn.json.mjs +1 -1
  104. package/dist/i18n/locales/no.json.mjs +1 -1
  105. package/dist/i18n/locales/pt.json.mjs +1 -1
  106. package/dist/{ui → i18n}/useContainerName.mjs +5 -4
  107. package/dist/{react/language.mjs → i18n/useRootLanguage.mjs} +2 -2
  108. package/dist/index.d.mts +415 -64
  109. package/dist/index.mjs +6 -2
  110. package/dist/lib/fullscreen.mjs +6 -1
  111. package/dist/lib/renderer/CanvasRenderer.mjs +28 -5
  112. package/dist/lib/renderer/math/affine.mjs +14 -0
  113. package/dist/lib/renderer/scene/planFrame.mjs +12 -12
  114. package/dist/lib/renderer/scene/regions.mjs +11 -1
  115. package/dist/lib/renderer/scene/sceneItem.mjs +72 -9
  116. package/dist/lib/time.mjs +10 -0
  117. package/dist/map/index.d.mts +40 -7
  118. package/dist/react/fetchManifest.mjs +19 -0
  119. package/dist/react/hooks.mjs +7 -1
  120. package/dist/react/readingLanguages.mjs +16 -0
  121. package/dist/react/usePagesReached.mjs +42 -0
  122. package/dist/styles.css +1 -1
  123. package/dist/templates/default/Default.mjs +87 -9
  124. package/dist/templates/document/Document.mjs +5 -1
  125. package/dist/templates/index.d.mts +26 -5
  126. package/dist/templates.css +1 -1
  127. package/dist/ui/BodyUnloadable.mjs +34 -0
  128. package/dist/ui/Button.mjs +2 -1
  129. package/dist/ui/Chevron.mjs +34 -0
  130. package/dist/ui/ControlCluster.mjs +6 -3
  131. package/dist/ui/EntryThumbnail.mjs +60 -0
  132. package/dist/ui/ExitFullscreen.mjs +2 -1
  133. package/dist/ui/FieldPill.mjs +5 -4
  134. package/dist/ui/HideToggle.mjs +2 -1
  135. package/dist/ui/LanguageChoice.mjs +45 -0
  136. package/dist/ui/ListEnd.mjs +29 -0
  137. package/dist/ui/Markup.mjs +27 -8
  138. package/dist/ui/NavDate.mjs +29 -0
  139. package/dist/ui/ReadMore.mjs +4 -3
  140. package/dist/ui/Sections.mjs +19 -28
  141. package/dist/ui/Steps.mjs +4 -3
  142. package/dist/ui/Tip.mjs +9 -4
  143. package/dist/web-components/About-DhOGPFaI.mjs +1 -0
  144. package/dist/web-components/AnnotationItems-CNP4CJiT.mjs +1 -0
  145. package/dist/web-components/AnnotationMenu-BCwwwfbb.mjs +1 -0
  146. package/dist/web-components/AnnotationState-CavxnAAq.mjs +1 -0
  147. package/dist/web-components/Annotations-DDjSrBL5.mjs +2 -0
  148. package/dist/web-components/Annotations-rBmeI5sR.mjs +1 -0
  149. package/dist/web-components/Body-DaY1UJIy.mjs +1 -0
  150. package/dist/web-components/BodyAlert-COKp19lq.mjs +1 -0
  151. package/dist/web-components/BodyUnloadable-DcTM7hHF.mjs +1 -0
  152. package/dist/web-components/Button-DLFYqtz9.mjs +1 -0
  153. package/dist/web-components/{Camera-Dw51CAfF.mjs → Camera-Cp5ma-6C.mjs} +1 -1
  154. package/dist/web-components/{Canvas2DBackend-RRN2bEkc.mjs → Canvas2DBackend-3PToh87Z.mjs} +1 -1
  155. package/dist/web-components/CanvasView-BWQ4SK2b.mjs +2 -0
  156. package/dist/web-components/CaptionDetails-DSziiuQV.mjs +1 -0
  157. package/dist/web-components/Chevron-r-_hUPn8.mjs +1 -0
  158. package/dist/web-components/ChoiceMenu-DTuEEUeM.mjs +1 -0
  159. package/dist/web-components/Collection-B9swJtPW.mjs +1 -0
  160. package/dist/web-components/CollectionSelect-CBWUbqQi.mjs +1 -0
  161. package/dist/web-components/Connected-B2d6EoFl.mjs +1 -0
  162. package/dist/web-components/Connected-BSRM9FJY.mjs +1 -0
  163. package/dist/web-components/Connected-BnpxYeJN.mjs +1 -0
  164. package/dist/web-components/Contents-D7FPxSH-.mjs +1 -0
  165. package/dist/web-components/ControlMenu-Crtho2cs.mjs +1 -0
  166. package/dist/web-components/CountMenu-DyTp_J4k.mjs +1 -0
  167. package/dist/web-components/Cue-CbZaGwZh.mjs +1 -0
  168. package/dist/web-components/Document-BfltLWZZ.mjs +1 -0
  169. package/dist/web-components/DocumentPanel-ZSe40cV4.mjs +1 -0
  170. package/dist/web-components/{DomLayers-BsR2AOy-.mjs → DomLayers-CTGub6wo.mjs} +1 -1
  171. package/dist/web-components/Download-BOYNIb7C.mjs +1 -0
  172. package/dist/web-components/EntryBodies-Bfd2Z42z.mjs +1 -0
  173. package/dist/web-components/EntryThumbnail-DQE8ajI9.mjs +1 -0
  174. package/dist/web-components/FieldPill-D5DNJWLy.mjs +1 -0
  175. package/dist/web-components/FrameAnimation-IfR1czfc.mjs +1 -0
  176. package/dist/web-components/Gallery-DD06BDQo.mjs +1 -0
  177. package/dist/web-components/HideToggle-DL911R1Z.mjs +1 -0
  178. package/dist/web-components/Items-BHzT9A73.mjs +1 -0
  179. package/dist/web-components/Label-KabnxuMN.mjs +1 -0
  180. package/dist/web-components/LanguageChoice-DT1UPiDn.mjs +1 -0
  181. package/dist/web-components/LightboxBody-BhRhdXo6.mjs +1 -0
  182. package/dist/web-components/ListEnd-CbwNlty-.mjs +1 -0
  183. package/dist/web-components/{Loaded-wQurAeJz.mjs → Loaded-BWfEBJyg.mjs} +1 -1
  184. package/dist/web-components/LoadedCanvas-CdZ5WOWz.mjs +1 -0
  185. package/dist/web-components/LoadedMap-DQyQVRVQ.mjs +1 -0
  186. package/dist/web-components/{Loading-BmA--pzr.mjs → Loading-zw74TdAz.mjs} +1 -1
  187. package/dist/web-components/{Map-DzVGblIS.mjs → Map--dJhk0_0.mjs} +1 -1
  188. package/dist/web-components/MapView-duA5WGsu.mjs +3 -0
  189. package/dist/web-components/Markup-D-kioDf9.mjs +2 -0
  190. package/dist/web-components/MediaBody-CoOiVXcv.mjs +1 -0
  191. package/dist/web-components/MediaBody-d8ErTuwT.mjs +1 -0
  192. package/dist/web-components/NavDate-BQHuyLOC.mjs +1 -0
  193. package/dist/web-components/{Navigator-CIJFA3q1.mjs → Navigator-B3U21_ti.mjs} +1 -1
  194. package/dist/web-components/Pager-DnJknq92.mjs +1 -0
  195. package/dist/web-components/PagerLayout-CvOmKtSW.mjs +1 -0
  196. package/dist/web-components/Panel-CIdjOznL.mjs +1 -0
  197. package/dist/web-components/{PanelToggle-BYjV2t1j.mjs → PanelToggle-CFtWIeWv.mjs} +1 -1
  198. package/dist/web-components/PartOfManifest-F87jIrf9.mjs +1 -0
  199. package/dist/web-components/{Pending-BspZajh5.mjs → Pending-CYAQajKu.mjs} +1 -1
  200. package/dist/web-components/PlaceBox-BtIbIotm.mjs +1 -0
  201. package/dist/web-components/Placeholder-TIyj4ZjR.mjs +1 -0
  202. package/dist/web-components/Position-BkWBRBfW.mjs +1 -0
  203. package/dist/web-components/Primitives-BmODPlnK.mjs +1 -0
  204. package/dist/web-components/Provider-C8se8i4I.mjs +1 -0
  205. package/dist/web-components/ReadMore-BwGFsLS2.mjs +1 -0
  206. package/dist/web-components/Root-CAJB0-Mh.mjs +1 -0
  207. package/dist/web-components/Scene-Ctcdt7CD.mjs +1 -0
  208. package/dist/web-components/SceneView-B6bEx_7x.mjs +1 -0
  209. package/dist/web-components/Search-CbmK9vLp.mjs +1 -0
  210. package/dist/web-components/Sections-Dy5_pkyQ.mjs +2 -0
  211. package/dist/web-components/StandaloneItems-BmUnBp0H.mjs +1 -0
  212. package/dist/web-components/Status-Dww3Pyf4.mjs +1 -0
  213. package/dist/web-components/Steps-o_UprQfZ.mjs +1 -0
  214. package/dist/web-components/TargetItems-BBOGDubv.mjs +1 -0
  215. package/dist/web-components/Timeline-CfIF4APc.mjs +1 -0
  216. package/dist/web-components/Tip-BbexILXs.mjs +1 -0
  217. package/dist/web-components/Transcript-ZVXM3ZDA.mjs +1 -0
  218. package/dist/web-components/annotation-collection-7SS1ELcO.mjs +1 -0
  219. package/dist/web-components/annotation-name-CYkZopdd.mjs +1 -0
  220. package/dist/web-components/annotations-content-Bdtn50sf.mjs +1 -0
  221. package/dist/web-components/body-CkOBHlJ0.mjs +1 -0
  222. package/dist/web-components/canvas-CWf_Fag8.mjs +1 -0
  223. package/dist/web-components/choice-key-BUNebLKe.mjs +1 -0
  224. package/dist/web-components/{cloverEngine-Dbv-26NP.mjs → cloverEngine-6djEHNCD.mjs} +2 -2
  225. package/dist/web-components/content-state-reader-Ahh6artg.mjs +1 -0
  226. package/dist/web-components/{controls-qRYf2jO2.mjs → controls-BJrZVQkS.mjs} +1 -1
  227. package/dist/web-components/custom-elements.json +109 -13
  228. package/dist/web-components/dates-DR3gfcON.mjs +1 -0
  229. package/dist/web-components/downloads-CqVWo-yn.mjs +1 -0
  230. package/dist/web-components/{engine-D8JLgzqq.mjs → engine-B-sscpLa.mjs} +1 -1
  231. package/dist/web-components/{engines-BwVb9R_A.mjs → engines-DfCHjbt3.mjs} +1 -1
  232. package/dist/web-components/es-BYfHUZ7P.mjs +1 -0
  233. package/dist/web-components/fetchManifest-BIzne1Pj.mjs +1 -0
  234. package/dist/web-components/fi-B5y2qr8T.mjs +1 -0
  235. package/dist/web-components/fr-ChezCx6V.mjs +1 -0
  236. package/dist/web-components/fromManifest-gg5Wx14y.mjs +1 -0
  237. package/dist/web-components/glyphs-JYl2STEr.mjs +1 -0
  238. package/dist/web-components/hooks-x7rO95CS.mjs +1 -0
  239. package/dist/web-components/image-layers-BjbeyHBS.mjs +1 -0
  240. package/dist/web-components/{imageService-C3yg9DxB.mjs → imageService-0eTvQ-3h.mjs} +1 -1
  241. package/dist/web-components/index-BZ7b9k0N.mjs +1 -0
  242. package/dist/web-components/index.d.mts +95 -10
  243. package/dist/web-components/index.mjs +1 -1
  244. package/dist/web-components/items-CnAIl9fS.mjs +1 -0
  245. package/dist/web-components/items-F6hJgdAS.mjs +1 -0
  246. package/dist/web-components/label-CI88KH2_.mjs +1 -0
  247. package/dist/web-components/layout-De1MOSYe.mjs +1 -0
  248. package/dist/web-components/link-GEdiEwlR.mjs +1 -0
  249. package/dist/web-components/logo-Ckwj7FlP.mjs +1 -0
  250. package/dist/web-components/models-59cEeiAA.mjs +1 -0
  251. package/dist/web-components/nb-8J22f9Td.mjs +1 -0
  252. package/dist/web-components/nn-Dv1EvzI1.mjs +1 -0
  253. package/dist/web-components/no-8J22f9Td.mjs +1 -0
  254. package/dist/web-components/{nodes-Bf-Fb7e5.mjs → nodes-CTw9OqlA.mjs} +1 -1
  255. package/dist/web-components/{overlayImage-DdPs2EGY.mjs → overlayImage-BMt4UTlR.mjs} +1 -1
  256. package/dist/web-components/{panel-CiqEFDzv.mjs → panel-C17Rl9Ya.mjs} +1 -1
  257. package/dist/web-components/part-CXts97_M.mjs +1 -0
  258. package/dist/web-components/playerSurface-HYwEwPK6.mjs +1 -0
  259. package/dist/web-components/presentation-2-C-U79S_T.mjs +1 -0
  260. package/dist/web-components/{provider-LUmAQSoP.mjs → provider-BpxorEiq.mjs} +1 -1
  261. package/dist/web-components/pt-DWYQkATt.mjs +1 -0
  262. package/dist/web-components/range-regions-BGQy4E9U.mjs +1 -0
  263. package/dist/web-components/read-more-BDM_6CVc.mjs +1 -0
  264. package/dist/web-components/readingLanguages-fs_HqvqQ.mjs +1 -0
  265. package/dist/web-components/rendererSurface-C0aKlE0v.mjs +22 -0
  266. package/dist/web-components/{renderers-Bg4QqawN.mjs → renderers-CiB74bQh.mjs} +1 -1
  267. package/dist/web-components/{resource-DzIvB_4m.mjs → resource-CRbpf9pX.mjs} +1 -1
  268. package/dist/web-components/sanitize-qIOeyIww.mjs +3 -0
  269. package/dist/web-components/save-file-CCuZEuQr.mjs +1 -0
  270. package/dist/web-components/search-CkM0O0Z1.mjs +1 -0
  271. package/dist/web-components/sequence-C28xoNmD.mjs +1 -0
  272. package/dist/web-components/shared-MTsMddHx.mjs +1 -0
  273. package/dist/web-components/{show-link-DWRRXSBy.mjs → show-link-BXm7SNIC.mjs} +1 -1
  274. package/dist/web-components/{sizedImage-DfjlV2-i.mjs → sizedImage-k4Q-eyOB.mjs} +1 -1
  275. package/dist/web-components/{split-m-_XivaW.mjs → split-Hp6z-v4h.mjs} +1 -1
  276. package/dist/web-components/{status-DDS7jLNd.mjs → status-BmtuKfAG.mjs} +1 -1
  277. package/dist/web-components/styles-CZV1nbBQ.mjs +1 -0
  278. package/dist/web-components/three.mjs +1 -1
  279. package/dist/web-components/thumbnail-Dp7a8oom.mjs +1 -0
  280. package/dist/web-components/{tip-BXByhOJ9.mjs → tip-C-oovDZK.mjs} +1 -1
  281. package/dist/web-components/{toggle-AS72kq6v.mjs → toggle-C7ODWDEZ.mjs} +1 -1
  282. package/dist/web-components/upgrade-eNW0DPXq.mjs +1 -0
  283. package/dist/web-components/upgrader-BlbMUEH6.mjs +1 -0
  284. package/dist/web-components/useContainerName-CrOmY-km.mjs +1 -0
  285. package/dist/web-components/useNearViewport-BqXi9Gn4.mjs +1 -0
  286. package/dist/web-components/{useScrollTrack-dLFWnT8N.mjs → useScrollTrack-CEsOU2yT.mjs} +1 -1
  287. package/dist/web-components/viewer/AnnotationItems-CyhVcRFc.mjs +1 -0
  288. package/dist/web-components/viewer/AnnotationMenu-DPOSehBo.mjs +1 -0
  289. package/dist/web-components/viewer/AnnotationState-Bjztkobn.mjs +1 -0
  290. package/dist/web-components/viewer/Annotations-Dh_8Tzi0.mjs +2 -0
  291. package/dist/web-components/viewer/Annotations-wwuOCxzI.mjs +1 -0
  292. package/dist/web-components/viewer/{Canvas2DBackend-CkvI0wUT.mjs → Canvas2DBackend-BTK6ZJh0.mjs} +1 -1
  293. package/dist/web-components/viewer/CaptionDetails-BwCTovy_.mjs +1 -0
  294. package/dist/web-components/viewer/ChoiceMenu-DQ1x572Y.mjs +1 -0
  295. package/dist/web-components/viewer/Collection-DSBxCmXw.mjs +1 -0
  296. package/dist/web-components/viewer/Connected-CL3N8F2J.mjs +1 -0
  297. package/dist/web-components/viewer/Connected-DTk1jlyI.mjs +1 -0
  298. package/dist/web-components/viewer/Contents-DrXckx7d.mjs +1 -0
  299. package/dist/web-components/viewer/ControlMenu-Bp91s-g_.mjs +1 -0
  300. package/dist/web-components/viewer/CountMenu-4u6U6yqb.mjs +1 -0
  301. package/dist/web-components/viewer/Cue-C-aF8peC.mjs +1 -0
  302. package/dist/web-components/viewer/Document-BN1rICu3.mjs +1 -0
  303. package/dist/web-components/viewer/DocumentPanel-CEesxdeY.mjs +1 -0
  304. package/dist/web-components/viewer/{DomLayers-Dybz_aJv.mjs → DomLayers-CGkDtemL.mjs} +1 -1
  305. package/dist/web-components/viewer/Download-CawEl9MN.mjs +1 -0
  306. package/dist/web-components/viewer/EntryBodies-nYHMwSSM.mjs +1 -0
  307. package/dist/web-components/viewer/EntryThumbnail-DrO_0SzR.mjs +1 -0
  308. package/dist/web-components/viewer/FieldPill-DFXGWrvB.mjs +1 -0
  309. package/dist/web-components/viewer/FrameAnimation-CZfzpxaD.mjs +1 -0
  310. package/dist/web-components/viewer/Gallery-MWHtvjti.mjs +1 -0
  311. package/dist/web-components/viewer/HideToggle-DP5kHzWM.mjs +1 -0
  312. package/dist/web-components/viewer/LanguageChoice-C50T7dPI.mjs +1 -0
  313. package/dist/web-components/viewer/{LightboxBody-ClQ4yrTh.mjs → LightboxBody-C2T7IC29.mjs} +1 -1
  314. package/dist/web-components/viewer/ListEnd-BDuOx__m.mjs +1 -0
  315. package/dist/web-components/viewer/MapView-BN9wXQKV.mjs +3 -0
  316. package/dist/web-components/viewer/MediaBody-CEyswliX.mjs +1 -0
  317. package/dist/web-components/viewer/MediaBody-Dw3DWDjc.mjs +1 -0
  318. package/dist/web-components/viewer/NavDate-C2-wwLuB.mjs +1 -0
  319. package/dist/web-components/viewer/{Navigator-Duc69Yes.mjs → Navigator-C3jghOd3.mjs} +1 -1
  320. package/dist/web-components/viewer/PagerLayout-Cg2NpqoD.mjs +1 -0
  321. package/dist/web-components/viewer/PartOfManifest-D22yMgCf.mjs +1 -0
  322. package/dist/web-components/viewer/PlaceBox-Dckw4Sfk.mjs +1 -0
  323. package/dist/web-components/viewer/Placeholder-NYVWYg5Q.mjs +1 -0
  324. package/dist/web-components/viewer/Search-DC259m4f.mjs +1 -0
  325. package/dist/web-components/viewer/StandaloneItems-E4kpMne9.mjs +1 -0
  326. package/dist/web-components/viewer/Steps-Bw32X5xO.mjs +1 -0
  327. package/dist/web-components/viewer/TargetItems-DLhUH1Gq.mjs +1 -0
  328. package/dist/web-components/viewer/Transcript-D_VGJQxn.mjs +1 -0
  329. package/dist/web-components/viewer/annotation-collection-DZHa18ir.mjs +1 -0
  330. package/dist/web-components/viewer/annotation-name-BaNdW2Xk.mjs +1 -0
  331. package/dist/web-components/viewer/annotations-content-CbA3eOIC.mjs +1 -0
  332. package/dist/web-components/viewer/{cloverEngine-CjuYjUhI.mjs → cloverEngine-C04bCSFR.mjs} +2 -2
  333. package/dist/web-components/viewer/content-state-reader-C7UBMOq3.mjs +1 -0
  334. package/dist/web-components/viewer/fetchManifest-C2Yxg3x9.mjs +1 -0
  335. package/dist/web-components/viewer/{host-yWi4R1bP.mjs → host-CZeyjCKR.mjs} +1 -1
  336. package/dist/web-components/viewer/image-layers-B09fporZ.mjs +1 -0
  337. package/dist/web-components/viewer/index.mjs +1 -1
  338. package/dist/web-components/viewer/link-DssZ0Z2N.mjs +1 -0
  339. package/dist/web-components/viewer/overlayImage-BR3eJCKq.mjs +1 -0
  340. package/dist/web-components/viewer/range-regions-By6L5JOK.mjs +1 -0
  341. package/dist/web-components/viewer/{renderers-L-IlGI1r.mjs → renderers-DLoqv3QO.mjs} +1 -1
  342. package/dist/web-components/viewer/save-file-CJT5p5Hg.mjs +1 -0
  343. package/dist/web-components/viewer/{search-DWkwRPo_.mjs → search-PhOwMKHi.mjs} +1 -1
  344. package/dist/web-components/viewer/styles-NZLnZPAC.mjs +1 -0
  345. package/dist/web-components/viewer/viewer-D30YHqyF.mjs +29 -0
  346. package/dist/web-components/viewer/{vtt-1ZJwtElI.mjs → vtt-1Pk7Dhsj.mjs} +1 -1
  347. package/dist/web-components/viewer-CH7re5OO.mjs +1 -0
  348. package/dist/web-components/{vtt-GFssZH8Y.mjs → vtt-CacHieeN.mjs} +1 -1
  349. package/dist/web-components/worker-CjXN0dku.mjs +1 -0
  350. package/package.json +10 -5
  351. package/dist/i18n/reader.mjs +0 -13
  352. package/dist/web-components/About-uKa1wfDr.mjs +0 -1
  353. package/dist/web-components/AnnotationMenu-BGIYRXW6.mjs +0 -1
  354. package/dist/web-components/AnnotationState-D2UIgIEC.mjs +0 -1
  355. package/dist/web-components/Annotations-BhwAv3ah.mjs +0 -1
  356. package/dist/web-components/Annotations-C_tBJHo3.mjs +0 -2
  357. package/dist/web-components/Body-DMEERFuB.mjs +0 -1
  358. package/dist/web-components/BodyAlert-BP8voSLv.mjs +0 -1
  359. package/dist/web-components/Button-Cl02BFDd.mjs +0 -1
  360. package/dist/web-components/CanvasView-B8lMMSou.mjs +0 -1
  361. package/dist/web-components/CaptionDetails-KLMDv-ec.mjs +0 -1
  362. package/dist/web-components/ChoiceMenu-CXrVOmJl.mjs +0 -1
  363. package/dist/web-components/Collection-DL4Ui4hF.mjs +0 -1
  364. package/dist/web-components/CollectionSelect-DL-bbpwJ.mjs +0 -1
  365. package/dist/web-components/Connected-B0S1HXQb.mjs +0 -1
  366. package/dist/web-components/Connected-BcjRA5si.mjs +0 -1
  367. package/dist/web-components/Connected-Q7iizBb8.mjs +0 -1
  368. package/dist/web-components/Contents-ZC8TiGaW.mjs +0 -1
  369. package/dist/web-components/ControlMenu-DIoU797-.mjs +0 -1
  370. package/dist/web-components/Cue-CJxnDMEy.mjs +0 -1
  371. package/dist/web-components/Document-DHBRAFEK.mjs +0 -1
  372. package/dist/web-components/DocumentPanel-CqvE2pu9.mjs +0 -1
  373. package/dist/web-components/Download-DBksL1C0.mjs +0 -1
  374. package/dist/web-components/EntryBodies-VwEkTVrw.mjs +0 -1
  375. package/dist/web-components/ErrorBoundary-Cy9PGoZv.mjs +0 -1
  376. package/dist/web-components/FieldPill-DCJBz6Vj.mjs +0 -1
  377. package/dist/web-components/FrameAnimation-DRbmgGpF.mjs +0 -1
  378. package/dist/web-components/Gallery-BM7-VJkB.mjs +0 -1
  379. package/dist/web-components/HideToggle-BdYgG7us.mjs +0 -1
  380. package/dist/web-components/Items-_1Jz3FMs.mjs +0 -1
  381. package/dist/web-components/Label-CAiJ49eA.mjs +0 -1
  382. package/dist/web-components/LightboxBody-DyhUZiDf.mjs +0 -1
  383. package/dist/web-components/LoadedCanvas-DWz5IK5m.mjs +0 -1
  384. package/dist/web-components/LoadedMap-DIeW313M.mjs +0 -1
  385. package/dist/web-components/MapView-BJaN7VBI.mjs +0 -1
  386. package/dist/web-components/Markup-D91DbxLk.mjs +0 -2
  387. package/dist/web-components/MediaBody-BYcVPo2X.mjs +0 -1
  388. package/dist/web-components/MediaBody-FEzH8VVw.mjs +0 -1
  389. package/dist/web-components/Pager-BGwCurxE.mjs +0 -1
  390. package/dist/web-components/Panel-B-GXOkzF.mjs +0 -1
  391. package/dist/web-components/PartOfManifest-ClbGepVM.mjs +0 -1
  392. package/dist/web-components/Primitives-CTh59wvs.mjs +0 -1
  393. package/dist/web-components/Provider-C6rIiDXH.mjs +0 -1
  394. package/dist/web-components/ReadMore-BJ2i-0uN.mjs +0 -1
  395. package/dist/web-components/Root-DkkYDtur.mjs +0 -1
  396. package/dist/web-components/Scene-B_PU_TiX.mjs +0 -1
  397. package/dist/web-components/SceneView-qcW_sT3j.mjs +0 -1
  398. package/dist/web-components/Search-UOneIUcP.mjs +0 -1
  399. package/dist/web-components/Sections-we9U9fXq.mjs +0 -2
  400. package/dist/web-components/StandaloneItems-DU8oCFc_.mjs +0 -1
  401. package/dist/web-components/Status-Cs5ZvFvL.mjs +0 -1
  402. package/dist/web-components/Timeline-WtYZ1bIJ.mjs +0 -1
  403. package/dist/web-components/Tip-C8J3qsIK.mjs +0 -1
  404. package/dist/web-components/Transcript-CRL2zToL.mjs +0 -1
  405. package/dist/web-components/annotation-collection-ZPyvpLFc.mjs +0 -1
  406. package/dist/web-components/annotations-content-BZChKhJZ.mjs +0 -1
  407. package/dist/web-components/body-UntgrmoV.mjs +0 -1
  408. package/dist/web-components/canvas-d_U4v_mh.mjs +0 -1
  409. package/dist/web-components/content-state-reader-DjdKWjit.mjs +0 -1
  410. package/dist/web-components/es-BwMkoRod.mjs +0 -1
  411. package/dist/web-components/fi-gPFOn9RK.mjs +0 -1
  412. package/dist/web-components/fr-DUHmgdJo.mjs +0 -1
  413. package/dist/web-components/fromManifest-UrMJgktp.mjs +0 -1
  414. package/dist/web-components/glyphs-BoX0a88P.mjs +0 -1
  415. package/dist/web-components/hooks-Dp8pjU8l.mjs +0 -1
  416. package/dist/web-components/index-DWxMuwDL.mjs +0 -1
  417. package/dist/web-components/items--Tu7ZM3L.mjs +0 -1
  418. package/dist/web-components/items-W2vrwArM.mjs +0 -1
  419. package/dist/web-components/keep-fragments-B5nlv2ck.mjs +0 -1
  420. package/dist/web-components/label-CYQ7tVl6.mjs +0 -1
  421. package/dist/web-components/layout-KL0V-iJu.mjs +0 -1
  422. package/dist/web-components/link-DRRTY4lY.mjs +0 -1
  423. package/dist/web-components/logo-CnQUCB3Y.mjs +0 -1
  424. package/dist/web-components/models-BP2qp9nT.mjs +0 -1
  425. package/dist/web-components/nb-BSvnQ6jd.mjs +0 -1
  426. package/dist/web-components/nn-Dg2_HdZu.mjs +0 -1
  427. package/dist/web-components/no-BSvnQ6jd.mjs +0 -1
  428. package/dist/web-components/part-CUBY90_b.mjs +0 -1
  429. package/dist/web-components/playerSurface-i2TJz-F4.mjs +0 -1
  430. package/dist/web-components/pt-B3J80JgO.mjs +0 -1
  431. package/dist/web-components/read-more-BaaO77el.mjs +0 -1
  432. package/dist/web-components/rendererSurface-DAvatpMF.mjs +0 -22
  433. package/dist/web-components/sanitize-Dc7nOsgO.mjs +0 -3
  434. package/dist/web-components/search-DgcgsI3I.mjs +0 -1
  435. package/dist/web-components/shared-J3w3gnXD.mjs +0 -1
  436. package/dist/web-components/styles-Ypl9KrSK.mjs +0 -1
  437. package/dist/web-components/thumbnail-BZvLSwWW.mjs +0 -1
  438. package/dist/web-components/time-B9GZoYcm.mjs +0 -1
  439. package/dist/web-components/upgrader-XNxI-5jo.mjs +0 -1
  440. package/dist/web-components/useContainerName-DCbE5JXi.mjs +0 -1
  441. package/dist/web-components/useNearViewport-CyoK3l8W.mjs +0 -1
  442. package/dist/web-components/viewer/AnnotationMenu-Dd4tnzNV.mjs +0 -1
  443. package/dist/web-components/viewer/AnnotationState-DZaSy5lH.mjs +0 -1
  444. package/dist/web-components/viewer/Annotations-D1h-Yi5J.mjs +0 -1
  445. package/dist/web-components/viewer/Annotations-sj79EMen.mjs +0 -2
  446. package/dist/web-components/viewer/CaptionDetails-B_JdNjJ7.mjs +0 -1
  447. package/dist/web-components/viewer/ChoiceMenu-xa51a1DV.mjs +0 -1
  448. package/dist/web-components/viewer/Collection-CxuLCspj.mjs +0 -1
  449. package/dist/web-components/viewer/Connected-BSUBc3Ci.mjs +0 -1
  450. package/dist/web-components/viewer/Connected-CPIxNjF2.mjs +0 -1
  451. package/dist/web-components/viewer/Contents-DNh9mnsF.mjs +0 -1
  452. package/dist/web-components/viewer/ControlMenu-DdgIvBdf.mjs +0 -1
  453. package/dist/web-components/viewer/Cue-90H9_dXz.mjs +0 -1
  454. package/dist/web-components/viewer/Document-CNCpzkiN.mjs +0 -1
  455. package/dist/web-components/viewer/DocumentPanel-BdG4TVLE.mjs +0 -1
  456. package/dist/web-components/viewer/EntryBodies-DGXjFP3N.mjs +0 -1
  457. package/dist/web-components/viewer/FieldPill-Icmd98OY.mjs +0 -1
  458. package/dist/web-components/viewer/FrameAnimation-DJZN3Rd4.mjs +0 -1
  459. package/dist/web-components/viewer/Gallery-CEp3-bh2.mjs +0 -1
  460. package/dist/web-components/viewer/HideToggle-DB6HTmAO.mjs +0 -1
  461. package/dist/web-components/viewer/MapView-BVSdybIC.mjs +0 -1
  462. package/dist/web-components/viewer/MediaBody-BBbSMT1i.mjs +0 -1
  463. package/dist/web-components/viewer/MediaBody-BzMXMHIF.mjs +0 -1
  464. package/dist/web-components/viewer/PartOfManifest-X9_q-2t6.mjs +0 -1
  465. package/dist/web-components/viewer/Search-S4N5QU4R.mjs +0 -1
  466. package/dist/web-components/viewer/StandaloneItems-BO4VyWRW.mjs +0 -1
  467. package/dist/web-components/viewer/Transcript-BbDaS064.mjs +0 -1
  468. package/dist/web-components/viewer/annotation-collection-BjZ1DAHq.mjs +0 -1
  469. package/dist/web-components/viewer/annotations-content-jn3n5Y2-.mjs +0 -1
  470. package/dist/web-components/viewer/content-state-reader-CPiShIjP.mjs +0 -1
  471. package/dist/web-components/viewer/link-CwE-fg5G.mjs +0 -1
  472. package/dist/web-components/viewer/overlayImage-BpOgqsZ0.mjs +0 -1
  473. package/dist/web-components/viewer/styles-BRCkEU3w.mjs +0 -1
  474. package/dist/web-components/viewer/viewer--TreVlJ_.mjs +0 -28
  475. package/dist/web-components/viewer-DyV864Qe.mjs +0 -1
  476. /package/dist/{ui → i18n}/languageCode.mjs +0 -0
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
3
  import React, { useRef, useState, useEffect, useLayoutEffect } from "react";
4
4
  import { useDragToClose } from "../shared/useDragToClose.mjs";
5
5
  import { useWideEnough, panelFocus, useSlide } from "../shared/useSlide.mjs";
@@ -9,15 +9,16 @@ import { useUniqueId } from "../../ui/useUniqueId.mjs";
9
9
  import { Root } from "../../components/Root/Root.mjs";
10
10
  import { titled } from "../../ui/heading.mjs";
11
11
  import { Split, SplitPane, SplitHandle } from "../../components/Split/Split.mjs";
12
- import { Label } from "../../components/Label/Label.mjs";
12
+ import { Items } from "../../components/Items/Items.mjs";
13
13
  import { Provider, Logo } from "../../components/Provider/Provider.mjs";
14
14
  import { Status } from "../../components/Status/Status.mjs";
15
15
  import { Body } from "../../components/Body/Body.mjs";
16
- import { Position } from "../../components/Items/Pager.mjs";
17
- import { Items } from "../../components/Items/Items.mjs";
16
+ import { Position } from "../../components/Items/Position.mjs";
18
17
  import { Panel } from "../../components/Panel/Panel.mjs";
18
+ import { useCloverSelector, useClover } from "../../react/context.mjs";
19
+ import { useAnnotationCollection, useVisibleCanvases } from "../../react/hooks.mjs";
20
+ import { Label } from "../../components/Label/Label.mjs";
19
21
  import { PanelToggle } from "../../components/Panel/PanelToggle.mjs";
20
- import { useVisibleCanvases } from "../../react/hooks.mjs";
21
22
  const BODY_MIN = "16rem";
22
23
  const PANEL_MIN = "14rem";
23
24
  const BESIDE_REM = 16 + 14 + 1;
@@ -30,6 +31,7 @@ function Default({
30
31
  defaultPanelOpen,
31
32
  panelLayout = "accordion",
32
33
  download = true,
34
+ languages = true,
33
35
  items = "slider",
34
36
  storageKey = "clover-template-default",
35
37
  fill = false,
@@ -138,12 +140,14 @@ function Default({
138
140
  min: over ? void 0 : BODY_MIN,
139
141
  children: [
140
142
  header && /* @__PURE__ */ jsxs("header", { className: "clover-template-default-header", children: [
143
+ /* @__PURE__ */ jsx(HeaderTitle, { title }),
141
144
  /* @__PURE__ */ jsx(
142
- Label,
145
+ Items,
143
146
  {
144
- as: title.as,
145
- className: "clover-template-default-title",
146
- ...title.title
147
+ of: "targets",
148
+ layout: "pager",
149
+ size: "small",
150
+ className: "clover-template-default-pager"
147
151
  }
148
152
  ),
149
153
  /* @__PURE__ */ jsx(Provider, { className: "clover-template-default-provider", children: /* @__PURE__ */ jsx(Logo, {}) })
@@ -179,6 +183,7 @@ function Default({
179
183
  {
180
184
  layout: panelLayout,
181
185
  download,
186
+ languages,
182
187
  headingLevel: header ? below(headingLevel) : headingLevel,
183
188
  onClose: over ? () => setOpen(false) : void 0,
184
189
  closeOnEscape: over
@@ -209,6 +214,79 @@ function Default({
209
214
  }
210
215
  );
211
216
  }
217
+ function HeaderTitle({ title }) {
218
+ const collection = useCloverSelector(
219
+ (state) => {
220
+ var _a;
221
+ return state.throughCollection ? (_a = state.collection) == null ? void 0 : _a.label : void 0;
222
+ }
223
+ );
224
+ const annotations = useAnnotationCollection();
225
+ usePickFirst(annotations == null ? void 0 : annotations.entries[0]);
226
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
227
+ /* @__PURE__ */ jsx(
228
+ Label,
229
+ {
230
+ as: title.as,
231
+ className: "clover-template-default-title",
232
+ ...title.title
233
+ }
234
+ ),
235
+ collection && /* @__PURE__ */ jsxs("div", { className: "clover-template-default-collection-row", children: [
236
+ /* @__PURE__ */ jsx(
237
+ Label,
238
+ {
239
+ as: "p",
240
+ label: collection,
241
+ className: "clover-template-default-collection"
242
+ }
243
+ ),
244
+ /* @__PURE__ */ jsx(
245
+ Items,
246
+ {
247
+ of: "members",
248
+ layout: "pager",
249
+ size: "small",
250
+ className: "clover-template-default-pager"
251
+ }
252
+ )
253
+ ] }),
254
+ annotations && /* @__PURE__ */ jsxs("div", { className: "clover-template-default-collection-row", children: [
255
+ annotations.label && /* @__PURE__ */ jsx(
256
+ Label,
257
+ {
258
+ as: "p",
259
+ label: annotations.label,
260
+ className: "clover-template-default-collection"
261
+ }
262
+ ),
263
+ /* @__PURE__ */ jsx(
264
+ Items,
265
+ {
266
+ of: "annotations",
267
+ layout: "pager",
268
+ size: "small",
269
+ className: "clover-template-default-pager"
270
+ }
271
+ )
272
+ ] })
273
+ ] });
274
+ }
275
+ function usePickFirst(first) {
276
+ const { clover } = useClover();
277
+ const manifestId = useCloverSelector((state) => {
278
+ var _a;
279
+ return (_a = state.manifest) == null ? void 0 : _a.id;
280
+ });
281
+ const started = useRef(null);
282
+ useEffect(() => {
283
+ if (!first || !manifestId || started.current === manifestId) return;
284
+ started.current = manifestId;
285
+ const { annotationId, canvasId } = clover.store.get();
286
+ if (!annotationId && canvasId === first.canvasId)
287
+ clover.selectAnnotation(first.id);
288
+ }, [clover, first, manifestId]);
289
+ }
212
290
  const below = (level) => level + 1;
213
291
  function ViewTitles() {
214
292
  const canvases = useVisibleCanvases();
@@ -10,7 +10,7 @@ import { useUniqueId } from "../../ui/useUniqueId.mjs";
10
10
  import { Root } from "../../components/Root/Root.mjs";
11
11
  import { useT, useLangOf, useNavigation } from "../../react/hooks.mjs";
12
12
  import { visuallyHidden } from "../../ui/visuallyHidden.mjs";
13
- import { Position } from "../../components/Items/Pager.mjs";
13
+ import { Position } from "../../components/Items/Position.mjs";
14
14
  import { Tip } from "../../ui/Tip.mjs";
15
15
  import { Label } from "../../components/Label/Label.mjs";
16
16
  import { Download } from "../../components/Download/Download.mjs";
@@ -26,6 +26,7 @@ function Document({
26
26
  defaultPanelOpen = false,
27
27
  panelLayout = "accordion",
28
28
  download = true,
29
+ languages = true,
29
30
  headingLevel = 2,
30
31
  storageKey = "clover-template-document",
31
32
  ...root
@@ -48,6 +49,7 @@ function Document({
48
49
  defaultPanelOpen,
49
50
  panelLayout,
50
51
  download,
52
+ languages,
51
53
  headingLevel,
52
54
  storageKey
53
55
  }
@@ -65,6 +67,7 @@ function DocumentLayout({
65
67
  defaultSidebarOpen,
66
68
  defaultPanelOpen,
67
69
  download,
70
+ languages,
68
71
  headingLevel = 2,
69
72
  storageKey,
70
73
  panelLayout,
@@ -255,6 +258,7 @@ function DocumentLayout({
255
258
  layout: panelLayout,
256
259
  headingLevel: below(headingLevel),
257
260
  download: false,
261
+ languages,
258
262
  onClose: over ? panel.close : void 0,
259
263
  closeOnEscape: over
260
264
  }
@@ -1,13 +1,16 @@
1
1
  // Generated by dts-bundle-generator v8.0.1
2
2
 
3
- import { Canvas, Scene, Timeline } from '@iiif/parser/presentation-4/types';
3
+ import * as P4 from '@iiif/parser/presentation-4/types';
4
4
  import React from 'react';
5
5
 
6
+ export type Presentation4Canvas = P4.Canvas;
7
+ export type Presentation4Scene = P4.Scene;
8
+ export type Presentation4Timeline = P4.Timeline;
6
9
  /**
7
10
  * A IIIF resource Clover can show directly, a Manifest's item: a Canvas (`Canvas`), a
8
11
  * Timeline (`Timeline`, sound) or a Scene (`Scene`, 3D).
9
12
  */
10
- export type Container = Canvas | Timeline | Scene;
13
+ export type Container = Presentation4Canvas | Presentation4Timeline | Presentation4Scene;
11
14
  /**
12
15
  * How Clover asks for things: one setting for every request it makes — the IIIF resource,
13
16
  * referenced annotation pages, `info.json`, tiles, captions and HLS segments.
@@ -115,6 +118,14 @@ export interface RootProps extends Omit<React.HTMLAttributes<HTMLElement>, "chil
115
118
  request?: CloverRequest;
116
119
  /** The language to read IIIF text in. The reader's, by default. */
117
120
  language?: string;
121
+ /**
122
+ * Clover's higher-contrast mode, for every part inside: the accent kept to rings,
123
+ * outlines and marks, and never under words or a glyph, where the controls' dark fill
124
+ * takes its place, edged in the accent. For an accent that cannot carry white text at
125
+ * 4.5:1. It is on wherever the reader's system asks for more contrast, too. Default
126
+ * `false`.
127
+ */
128
+ highContrast?: boolean;
118
129
  /**
119
130
  * Renderers of your own for some views — by Canvas id, painting format, or a test —
120
131
  * drawn by every `Body` inside in place of `Canvas` (3.x's `customDisplays`).
@@ -169,8 +180,13 @@ export type DefaultProps = Omit<RootProps, "children"> & {
169
180
  * stacked boxes each opened by its heading, or `"tabs"`.
170
181
  */
171
182
  panelLayout?: PanelLayout;
172
- /** The downloads in the panel's About, as links. Default `true`. */
183
+ /** The downloads, from a Download button beside the panel's About heading. Default `true`. */
173
184
  download?: boolean;
185
+ /**
186
+ * The languages to read the resource in, beside the panel's About heading, where what
187
+ * it says of itself comes in several (the Panel's `languages`). Default `true`.
188
+ */
189
+ languages?: boolean;
174
190
  /** The thumbnails under the Body: a layout, or `false` for none. Default `slider`. */
175
191
  items?: Exclude<ItemsLayout, "pager"> | false;
176
192
  /**
@@ -198,7 +214,7 @@ export type DefaultProps = Omit<RootProps, "children"> & {
198
214
  * uncovered: a click there, Escape or the panel's close button puts it away. Size it with
199
215
  * `--clover-body-height`.
200
216
  */
201
- export declare function Default({ className, header, headingLevel, panel, defaultPanelOpen, panelLayout, download, items, storageKey, fill, ...root }: DefaultProps): React.JSX.Element;
217
+ export declare function Default({ className, header, headingLevel, panel, defaultPanelOpen, panelLayout, download, languages, items, storageKey, fill, ...root }: DefaultProps): React.JSX.Element;
202
218
  export type DocumentProps = Omit<RootProps, "children"> & {
203
219
  /**
204
220
  * Whether the page thumbnails start shown beside the page. Default `true`. On a phone,
@@ -217,6 +233,11 @@ export type DocumentProps = Omit<RootProps, "children"> & {
217
233
  panelLayout?: PanelLayout;
218
234
  /** The downloads in the toolbar, as links: the page's and the Manifest's `rendering`. Default `true`. */
219
235
  download?: boolean;
236
+ /**
237
+ * The languages to read the resource in, beside the panel's About heading, where what
238
+ * it says of itself comes in several (the Panel's `languages`). Default `true`.
239
+ */
240
+ languages?: boolean;
220
241
  /**
221
242
  * The title's heading level, to fit the outline of the page around the layout (under
222
243
  * an `h2`, 3). The panel's sections, and the downloads' groups, are a level below
@@ -238,7 +259,7 @@ export type DocumentProps = Omit<RootProps, "children"> & {
238
259
  * where there is room for both, and slides out over the page where there is not. Size
239
260
  * it with `--clover-template-document-height`.
240
261
  */
241
- export declare function Document({ className, defaultSidebarOpen, defaultPanelOpen, panelLayout, download, headingLevel, storageKey, ...root }: DocumentProps): React.JSX.Element;
262
+ export declare function Document({ className, defaultSidebarOpen, defaultPanelOpen, panelLayout, download, languages, headingLevel, storageKey, ...root }: DocumentProps): React.JSX.Element;
242
263
  export type GalleryProps = Omit<RootProps, "children"> & {
243
264
  /** The size of a grid cell. Default `10rem`, through `--clover-items-size`. */
244
265
  size?: string;
@@ -1 +1 @@
1
- @layer clover{.clover-template-lightbox{width:min(96vw,72rem);max-height:94vh;padding:0;border:0;border-radius:var(--clover-radius, 3px);background:var(--clover-color-secondary, #fff);color:var(--clover-color-primary, #1a1d1e);box-shadow:0 8px 40px #00000059}.clover-template-lightbox::backdrop{background:#0009}.clover-template-lightbox-content{display:flex;flex-direction:column;gap:var(--clover-space-m);padding:var(--clover-inset);--clover-body-height: min(70vh, 48rem)}.clover-template-lightbox-pending{height:var(--clover-body-height, 60vh);background-color:#0001}.clover-template-lightbox-header{display:flex;align-items:center;gap:var(--clover-space-m)}.clover-template-lightbox-title{flex:1 1 auto;min-width:0;margin:0;font-size:var(--clover-text-l);font-weight:700}button.clover-template-lightbox-close{display:inline-flex;align-items:center;justify-content:center;width:var(--clover-control);height:var(--clover-control);padding:0;border:0;border-radius:var(--clover-radius-pill, 2rem);background:var(--clover-color-secondary-muted, #f1f1f1);color:inherit;cursor:pointer}button.clover-template-lightbox-close:is(:hover,:focus-visible){background:var(--clover-color-accent, #0065c3);color:var(--clover-color-control-glyph, #fff)}.clover-template-document{--clover-template-document-height: min(85vh, 56rem);display:flex;flex-direction:column;height:var(--clover-template-document-height);overflow:hidden;background-color:var(--clover-color-secondary, #fff);color:var(--clover-color-primary, #1a1d1e)}.clover-template-document-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--clover-space-s);padding:var(--clover-space-m) var(--clover-inset);border-bottom:1px solid var(--clover-color-secondary-muted, #e6e8eb)}.clover-template-document-provider{max-width:100%;margin-inline-start:auto}.clover-template-document-toolbar .clover-download-groups{flex-direction:row;flex-wrap:wrap;column-gap:var(--clover-space-m)}.clover-template-document-toolbar .clover-download-group{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:var(--clover-space-s)}.clover-template-document-toolbar .clover-download-title{margin:0}.clover-template-document-toolbar .clover-download-list{display:flex;flex-wrap:wrap;column-gap:var(--clover-space-s)}.clover-template-document-title{flex:1 1 6rem;min-width:0;margin:0;font-size:var(--clover-text-l);line-height:1.25;font-weight:400;overflow-wrap:anywhere}button.clover-template-document-sidebar-toggle{display:inline-flex;flex:none;align-items:center;gap:var(--clover-space-xs);min-height:var(--clover-control);padding-block:0;padding-inline:var(--clover-space-s) calc(var(--clover-space-xs) + var(--clover-space-3xs));border:0;border-radius:var(--clover-radius-pill, 2rem);background-color:var(--clover-color-control, #1a1d1e);color:var(--clover-color-control-glyph, #fff);cursor:pointer;transition:var(--clover-transition, all .2s cubic-bezier(.16, 1, .3, 1))}button.clover-template-document-sidebar-toggle:is(:hover,:focus-visible){background-color:var(--clover-color-accent, #0065c3)}button.clover-template-document-sidebar-toggle:focus-visible{outline:2px solid var(--clover-color-accent, #0065c3);outline-offset:2px}.clover-template-document-sidebar-toggle .clover-template-document-position{color:inherit;font-size:var(--clover-text-xs)}.clover-template-document-sidebar-toggle .clover-template-document-position>.clover-pager-room[hidden]{display:none}.clover-template-document-panes{position:relative;flex:1 1 auto;min-height:0}.clover-template-document-sidebar{overflow-y:auto;overscroll-behavior:contain;padding:var(--clover-inset);scroll-padding-top:calc(2 * var(--clover-inset) + var(--clover-control));background-color:var(--clover-color-secondary, #fff)}.clover-template-document-sidebar-closed{position:absolute;top:var(--clover-inset);inset-inline-start:var(--clover-inset);z-index:3}.clover-template-document-sidebar[hidden]{display:none}.clover-template-document-sidebar+.clover-split-handle:before{inset-inline-start:0;inset-inline-end:calc(3px - var(--clover-space-l))}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-figure{grid-template-columns:repeat(var(--parts, 1),minmax(0,1fr));gap:var(--clover-space-xs) 0}.clover-template-document-sidebar .clover-items[data-layout] :is(.clover-items-pictures,.clover-items-caption){grid-column:1 / -1;grid-template-columns:subgrid}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-label{contain:inline-size}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-picture[data-empty],.clover-template-document-sidebar .clover-items[data-layout] .clover-items-picture img{width:100%;height:auto;max-height:20rem;aspect-ratio:var(--clover-items-ratio, auto);object-fit:contain}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-caption{font-size:var(--clover-text-s)}.clover-template-document-main{position:relative;overflow:hidden;background-color:var(--clover-color-secondary-muted, #e6e8eb)}.clover-template-document-column{position:absolute;inset:0;overflow-x:hidden;overflow-y:auto;container-type:size}.clover-template-document-sheets{position:relative}.clover-template-document-sheet{--clover-template-document-tease: calc(2 * var(--clover-inset));display:flex;justify-content:center;box-sizing:border-box;height:min(100cqh - var(--clover-template-document-tease),(100cqw - 2 * var(--clover-inset)) / var(--ratio) + 2 * var(--clover-inset));padding:var(--clover-inset);transition:opacity .2s ease,height .24s cubic-bezier(.16,1,.3,1)}.clover-template-document-column[data-zoomed] .clover-template-document-sheet[data-active]{height:100cqh}.clover-template-document-column[data-zoomed] .clover-template-document-sheet[data-active]>*{visibility:hidden}.clover-template-document-column[data-zoomed] .clover-template-document-sheet:not([data-active]){--clover-template-document-muted: 0;pointer-events:none}.clover-template-document-sheet:not([data-active]){--clover-template-document-muted: .618;cursor:pointer;opacity:var(--clover-template-document-muted)}.clover-template-document-sheet:not([data-active]):hover{--clover-template-document-muted: .809}@media (prefers-reduced-motion: reduce){.clover-template-document-sheet{transition:none}}.clover-template-document-sheets[data-single]>.clover-template-document-sheet{--clover-template-document-tease: 0px}.clover-template-document-sheet>*{display:block;height:100%;min-width:0}.clover-template-document-live{--clover-body-height: 100%;position:absolute;inset-inline:0;top:0;height:100%;transition:opacity .16s ease}.clover-template-document-body .clover-canvas{--clover-canvas-inset: var(--clover-inset);background-color:transparent}.clover-template-document-live[data-moved]:not(:focus-within){opacity:0;pointer-events:none}.clover-template-document-column[data-scrolling] .clover-template-document-live:not(:focus-within) .clover-canvas-controls>*{--clover-controls-shown: 0;--clover-controls-events: none}.clover-template-document-column:not([data-zoomed]) .clover-canvas-viewport{touch-action:pan-y}.clover-template-document-panel{contain:size;overflow-y:auto;overscroll-behavior:contain;background-color:var(--clover-color-secondary, #fff)}.clover-template-document-panel[hidden]{display:none}.clover-template-document-scrim[data-for=sidebar]{z-index:2}.clover-template-document{--clover-grip: color-mix( in srgb, var(--clover-color-primary-muted, #26292b) 30%, transparent )}.clover-template-document-panes[data-narrow]{--clover-template-sidebar-width: min(14rem, 80%)}.clover-template-document-panes[data-narrow]>.clover-template-document-sidebar{position:absolute;inset-block:0;inset-inline-start:0;z-index:3;width:var(--clover-template-sidebar-width);border-inline-end:1px solid var(--clover-color-secondary-muted, #e6e8eb);background:linear-gradient(var(--clover-grip),var(--clover-grip)) no-repeat right var(--clover-space-2xs) center / 4px var(--clover-space-xl),var(--clover-color-secondary, #fff);touch-action:pan-y;box-shadow:var(--clover-space-s) 0 var(--clover-space-l) #0000001f}.clover-template-document-spine{position:relative;z-index:4;flex:none;width:0}.clover-template-document-spine>*{position:absolute;top:var(--clover-inset);inset-inline-start:-1.5px;translate:-50%}.clover-template-document-spine:dir(rtl)>*{translate:50%}.clover-template-document-spine[data-for=sidebar]>*{inset-inline:auto calc(1.5px - var(--clover-control) / 2);translate:none}.clover-template-document-panes[data-narrow]>.clover-template-document-spine[data-for=sidebar]{inset-inline-start:var(--clover-template-sidebar-width)}.clover-template-document-panes[data-narrow]>.clover-template-document-spine[data-for=sidebar]>*{inset-inline-end:calc(var(--clover-control) / -2)}.clover-template-gallery{display:flex;flex-direction:column;gap:var(--clover-space-m);color:var(--clover-color-primary, #1a1d1e)}.clover-template-gallery-header{display:flex;flex-direction:column;gap:var(--clover-space-2xs)}.clover-template-gallery-title{margin:0;font-size:var(--clover-text-l);line-height:1.25;font-weight:700}.clover-template-gallery-summary{margin:0}}
1
+ @layer clover{.clover-template-lightbox{width:min(96vw,72rem);max-height:94vh;padding:0;border:0;border-radius:var(--clover-radius, 3px);background:var(--clover-color-secondary, #fff);color:var(--clover-color-primary, #1a1d1e);box-shadow:0 8px 40px #00000059}.clover-template-lightbox::backdrop{background:#0009}.clover-template-lightbox-content{display:flex;flex-direction:column;gap:var(--clover-space-m);padding:var(--clover-inset);--clover-body-height: min(70vh, 48rem)}.clover-template-lightbox-pending{height:var(--clover-body-height, 60vh);background-color:#0001}.clover-template-lightbox-header{display:flex;align-items:center;gap:var(--clover-space-m)}.clover-template-lightbox-title{flex:1 1 auto;min-width:0;margin:0;font-size:var(--clover-text-l);font-weight:700}button.clover-template-lightbox-close{display:inline-flex;align-items:center;justify-content:center;width:var(--clover-control);height:var(--clover-control);padding:0;border:0;border-radius:var(--clover-radius-pill, 2rem);background:var(--clover-color-secondary-muted, #f1f1f1);color:inherit;cursor:pointer}button.clover-template-lightbox-close:is(:hover,:focus-visible){background:var(--clover-color-accent, #0065c3);color:var(--clover-color-control-glyph, #fff)}:where([data-high-contrast]) button.clover-template-lightbox-close:is(:hover,:focus-visible){background:var(--clover-accent-fill)}:where([data-high-contrast]) button.clover-template-lightbox-close:hover:not(:focus-visible){outline:var(--clover-accent-ring-hover);outline-offset:1px}.clover-template-document{--clover-template-document-height: min(85vh, 56rem);display:flex;flex-direction:column;height:var(--clover-template-document-height);overflow:hidden;background-color:var(--clover-color-secondary, #fff);color:var(--clover-color-primary, #1a1d1e)}.clover-template-document-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--clover-space-s);padding:var(--clover-space-m) var(--clover-inset);border-bottom:1px solid var(--clover-color-secondary-muted, #e6e8eb)}.clover-template-document-provider{max-width:100%;margin-inline-start:auto}.clover-template-document-toolbar .clover-download-groups{flex-direction:row;flex-wrap:wrap;column-gap:var(--clover-space-m)}.clover-template-document-toolbar .clover-download-group{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:var(--clover-space-s)}.clover-template-document-toolbar .clover-download-title{margin:0}.clover-template-document-toolbar .clover-download-list{display:flex;flex-wrap:wrap;column-gap:var(--clover-space-s)}.clover-template-document-title{flex:1 1 6rem;min-width:0;margin:0;font-size:var(--clover-text-l);line-height:1.25;font-weight:400;overflow-wrap:anywhere}button.clover-template-document-sidebar-toggle{display:inline-flex;flex:none;align-items:center;gap:var(--clover-space-xs);min-height:var(--clover-control);padding-block:0;padding-inline:var(--clover-space-s) calc(var(--clover-space-xs) + var(--clover-space-3xs));border:0;border-radius:var(--clover-radius-pill, 2rem);background-color:var(--clover-color-control, #1a1d1e);color:var(--clover-color-control-glyph, #fff);cursor:pointer;transition:var(--clover-transition, all .2s cubic-bezier(.16, 1, .3, 1))}button.clover-template-document-sidebar-toggle:is(:hover,:focus-visible){background-color:var(--clover-color-accent, #0065c3)}:where([data-high-contrast]) button.clover-template-document-sidebar-toggle:is(:hover,:focus-visible){background-color:var(--clover-accent-fill)}:where([data-high-contrast]) button.clover-template-document-sidebar-toggle:hover:not(:focus-visible){outline:var(--clover-accent-ring-hover);outline-offset:1px}button.clover-template-document-sidebar-toggle:focus-visible{outline:2px solid var(--clover-color-accent, #0065c3);outline-offset:2px}.clover-template-document-sidebar-toggle .clover-template-document-position{color:inherit;font-size:var(--clover-text-xs);white-space:nowrap}.clover-template-document-sidebar-toggle .clover-template-document-position>.clover-pager-room[hidden]{display:none}.clover-template-document-panes{position:relative;flex:1 1 auto;min-height:0}.clover-template-document-sidebar{overflow-y:auto;overscroll-behavior:contain;padding:var(--clover-inset);scroll-padding-top:calc(2 * var(--clover-inset) + var(--clover-control));background-color:var(--clover-color-secondary, #fff)}.clover-template-document-sidebar-closed{position:absolute;top:var(--clover-inset);inset-inline-start:var(--clover-inset);z-index:3}.clover-template-document-sidebar[hidden]{display:none}.clover-template-document-sidebar+.clover-split-handle:before{inset-inline-start:0;inset-inline-end:calc(3px - var(--clover-space-l))}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-figure{grid-template-columns:repeat(var(--parts, 1),minmax(0,1fr));gap:var(--clover-space-xs) 0}.clover-template-document-sidebar .clover-items[data-layout] :is(.clover-items-pictures,.clover-items-caption){grid-column:1 / -1;grid-template-columns:subgrid}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-label{contain:inline-size}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-picture[data-empty],.clover-template-document-sidebar .clover-items[data-layout] .clover-items-picture img{width:100%;height:auto;max-height:20rem;aspect-ratio:var(--clover-items-ratio, auto);object-fit:contain}.clover-template-document-sidebar .clover-items[data-layout] .clover-items-caption{font-size:var(--clover-text-s)}.clover-template-document-main{position:relative;overflow:hidden;background-color:var(--clover-color-secondary-muted, #e6e8eb)}.clover-template-document-column{position:absolute;inset:0;overflow-x:hidden;overflow-y:auto;container-type:size}.clover-template-document-sheets{position:relative}.clover-template-document-sheet{--clover-template-document-tease: calc(2 * var(--clover-inset));display:flex;justify-content:center;box-sizing:border-box;height:min(100cqh - var(--clover-template-document-tease),(100cqw - 2 * var(--clover-inset)) / var(--ratio) + 2 * var(--clover-inset));padding:var(--clover-inset);transition:opacity .2s ease,height .24s cubic-bezier(.16,1,.3,1)}.clover-template-document-column[data-zoomed] .clover-template-document-sheet[data-active]{height:100cqh}.clover-template-document-column[data-zoomed] .clover-template-document-sheet[data-active]>*{visibility:hidden}.clover-template-document-column[data-zoomed] .clover-template-document-sheet:not([data-active]){--clover-template-document-muted: 0;pointer-events:none}.clover-template-document-sheet:not([data-active]){--clover-template-document-muted: .618;cursor:pointer;opacity:var(--clover-template-document-muted)}.clover-template-document-sheet:not([data-active]):hover{--clover-template-document-muted: .809}@media (prefers-reduced-motion: reduce){.clover-template-document-sheet{transition:none}}.clover-template-document-sheets[data-single]>.clover-template-document-sheet{--clover-template-document-tease: 0px}.clover-template-document-sheet>*{display:block;height:100%;min-width:0}.clover-template-document-live{--clover-body-height: 100%;position:absolute;inset-inline:0;top:0;height:100%;transition:opacity .16s ease}.clover-template-document-body .clover-canvas{--clover-canvas-inset: var(--clover-inset);background-color:transparent}.clover-template-document-live[data-moved]:not(:focus-within){opacity:0;pointer-events:none}.clover-template-document-column[data-scrolling] .clover-template-document-live:not(:focus-within) .clover-canvas-controls>*{--clover-controls-shown: 0;--clover-controls-events: none}.clover-template-document-column:not([data-zoomed]) .clover-canvas-viewport{touch-action:pan-y}.clover-template-document-panel{contain:size;overflow-y:auto;overscroll-behavior:contain;background-color:var(--clover-color-secondary, #fff)}.clover-template-document-panel[hidden]{display:none}.clover-template-document-scrim[data-for=sidebar]{z-index:2}.clover-template-document{--clover-grip: color-mix( in srgb, var(--clover-color-primary-muted, #26292b) 30%, transparent )}.clover-template-document-panes[data-narrow]{--clover-template-sidebar-width: min(14rem, 80%)}.clover-template-document-panes[data-narrow]>.clover-template-document-sidebar{position:absolute;inset-block:0;inset-inline-start:0;z-index:3;width:var(--clover-template-sidebar-width);border-inline-end:1px solid var(--clover-color-secondary-muted, #e6e8eb);background:linear-gradient(var(--clover-grip),var(--clover-grip)) no-repeat right var(--clover-space-2xs) center / 4px var(--clover-space-xl),var(--clover-color-secondary, #fff);touch-action:pan-y;box-shadow:var(--clover-space-s) 0 var(--clover-space-l) #0000001f}.clover-template-document-spine{position:relative;z-index:4;flex:none;width:0}.clover-template-document-spine>*{position:absolute;top:var(--clover-inset);inset-inline-start:-1.5px;translate:-50%}.clover-template-document-spine:dir(rtl)>*{translate:50%}.clover-template-document-spine[data-for=sidebar]>*{inset-inline:auto calc(1.5px - var(--clover-control) / 2);translate:none}.clover-template-document-panes[data-narrow]>.clover-template-document-spine[data-for=sidebar]{inset-inline-start:var(--clover-template-sidebar-width)}.clover-template-document-panes[data-narrow]>.clover-template-document-spine[data-for=sidebar]>*{inset-inline-end:calc(var(--clover-control) / -2)}.clover-template-gallery{display:flex;flex-direction:column;gap:var(--clover-space-m);color:var(--clover-color-primary, #1a1d1e)}.clover-template-gallery-header{display:flex;flex-direction:column;gap:var(--clover-space-2xs)}.clover-template-gallery-title{margin:0;font-size:var(--clover-text-l);line-height:1.25;font-weight:700}.clover-template-gallery-summary{margin:0}}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useCloverTranslation } from "../i18n/useCloverTranslation.mjs";
4
+ import { languageProps } from "../i18n/direction.mjs";
5
+ const KEYS = {
6
+ image: "bodyUnloadableImage",
7
+ video: "bodyUnloadableVideo",
8
+ audio: "bodyUnloadableAudio",
9
+ model: "bodyUnloadableModel"
10
+ };
11
+ function BodyUnloadable({
12
+ kind,
13
+ shown,
14
+ room = false
15
+ }) {
16
+ const { t, langOf } = useCloverTranslation();
17
+ const key = KEYS[kind];
18
+ return /* @__PURE__ */ jsx(
19
+ "div",
20
+ {
21
+ className: "clover-body-unloadable",
22
+ "data-room": room || void 0,
23
+ role: "status",
24
+ children: shown && /* @__PURE__ */ jsx("p", { ...languageProps(langOf(key)), children: t(key) })
25
+ }
26
+ );
27
+ }
28
+ function BodyNote({ text, lang }) {
29
+ return /* @__PURE__ */ jsx("div", { className: "clover-body-note", "aria-hidden": "true", children: /* @__PURE__ */ jsx("p", { ...languageProps(lang), children: text }) });
30
+ }
31
+ export {
32
+ BodyNote,
33
+ BodyUnloadable
34
+ };
@@ -2,6 +2,7 @@
2
2
  import { jsxs, jsx } from "react/jsx-runtime";
3
3
  import { join } from "../lib/classnames.mjs";
4
4
  import { Tip } from "./Tip.mjs";
5
+ import { languageProps } from "../i18n/direction.mjs";
5
6
  const Button = ({
6
7
  className,
7
8
  id,
@@ -27,7 +28,7 @@ const Button = ({
27
28
  "aria-controls": controls,
28
29
  "aria-label": label,
29
30
  "aria-keyshortcuts": shortcut == null ? void 0 : shortcut.keys,
30
- lang,
31
+ ...languageProps(lang),
31
32
  type: "button",
32
33
  children: [
33
34
  /* @__PURE__ */ jsx(
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { join } from "../lib/classnames.mjs";
4
+ function Chevron({
5
+ open = false,
6
+ className
7
+ }) {
8
+ return /* @__PURE__ */ jsx(
9
+ "svg",
10
+ {
11
+ "aria-hidden": "true",
12
+ focusable: "false",
13
+ width: "12",
14
+ height: "12",
15
+ viewBox: "0 0 12 12",
16
+ className: join("clover-chevron", className),
17
+ "data-open": open || void 0,
18
+ children: /* @__PURE__ */ jsx(
19
+ "path",
20
+ {
21
+ d: "M3 4.5l3 3 3-3",
22
+ fill: "none",
23
+ stroke: "currentColor",
24
+ strokeWidth: "1.5",
25
+ strokeLinecap: "round",
26
+ strokeLinejoin: "round"
27
+ }
28
+ )
29
+ }
30
+ );
31
+ }
32
+ export {
33
+ Chevron
34
+ };
@@ -64,6 +64,11 @@ const ControlCluster = ({
64
64
  const [element, setElement] = useState(null);
65
65
  const isFullscreen = useWithinFullscreen(element);
66
66
  useClusterReach(element);
67
+ const specs = controls(isFullscreen);
68
+ const ordered = [
69
+ ...specs.filter((spec) => spec.key !== "fullPage"),
70
+ ...specs.filter((spec) => spec.key === "fullPage")
71
+ ];
67
72
  return /* @__PURE__ */ jsxs(
68
73
  "div",
69
74
  {
@@ -73,9 +78,7 @@ const ControlCluster = ({
73
78
  "data-testid": "clover-canvas-controls",
74
79
  ref: setElement,
75
80
  children: [
76
- controls(isFullscreen).map(
77
- (spec) => renderControl(spec, controlButtons)
78
- ),
81
+ ordered.map((spec) => renderControl(spec, controlButtons)),
79
82
  children
80
83
  ]
81
84
  }
@@ -0,0 +1,60 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useState, useEffect } from "react";
4
+ import { resolveThumbnail } from "../core/thumbnail.mjs";
5
+ import { join } from "../lib/classnames.mjs";
6
+ const ENTRY_THUMBNAIL_SIZE = 52;
7
+ const PICTURE_SIZE = 336;
8
+ function useThumbnail(source, size, request, hold = false) {
9
+ const [src, setSrc] = useState(source == null ? void 0 : source.src);
10
+ const key = source ? JSON.stringify(source) : "";
11
+ useEffect(() => {
12
+ if (!source || source.src) return setSrc(source == null ? void 0 : source.src);
13
+ if (!hold) setSrc(void 0);
14
+ let live = true;
15
+ void resolveThumbnail(source, size, request).then(
16
+ (url) => live && setSrc(url)
17
+ );
18
+ return () => {
19
+ live = false;
20
+ };
21
+ }, [key, size]);
22
+ return src;
23
+ }
24
+ function EntryThumbnail({
25
+ source,
26
+ request,
27
+ large = false,
28
+ className
29
+ }) {
30
+ const src = useThumbnail(
31
+ source,
32
+ large ? PICTURE_SIZE : ENTRY_THUMBNAIL_SIZE,
33
+ request
34
+ );
35
+ if (!src) return null;
36
+ return (
37
+ // eslint-disable-next-line @next/next/no-img-element -- This library also renders outside Next.js.
38
+ /* @__PURE__ */ jsx(
39
+ "img",
40
+ {
41
+ className: join("clover-entry-thumbnail", className),
42
+ "data-large": large ? "" : void 0,
43
+ src,
44
+ alt: "",
45
+ ...!large && {
46
+ width: ENTRY_THUMBNAIL_SIZE / 2,
47
+ height: ENTRY_THUMBNAIL_SIZE / 2
48
+ },
49
+ loading: "lazy",
50
+ decoding: "async"
51
+ }
52
+ )
53
+ );
54
+ }
55
+ export {
56
+ ENTRY_THUMBNAIL_SIZE,
57
+ EntryThumbnail,
58
+ PICTURE_SIZE,
59
+ useThumbnail
60
+ };
@@ -2,6 +2,7 @@
2
2
  import { jsxs, jsx } from "react/jsx-runtime";
3
3
  import { toggleFullscreen } from "../lib/fullscreen.mjs";
4
4
  import { useCloverTranslation } from "../i18n/useCloverTranslation.mjs";
5
+ import { languageProps } from "../i18n/direction.mjs";
5
6
  const ExitFullscreen = ({ hidden }) => {
6
7
  const { t, langOf } = useCloverTranslation();
7
8
  const label = t("imageExitFullScreen");
@@ -9,7 +10,7 @@ const ExitFullscreen = ({ hidden }) => {
9
10
  "button",
10
11
  {
11
12
  "aria-label": label,
12
- lang: langOf("imageExitFullScreen"),
13
+ ...languageProps(langOf("imageExitFullScreen")),
13
14
  className: "clover-canvas-exit-full-screen",
14
15
  hidden,
15
16
  onClick: (event) => void toggleFullscreen(event.currentTarget),
@@ -6,6 +6,7 @@ import { join } from "../lib/classnames.mjs";
6
6
  import { Steps } from "./Steps.mjs";
7
7
  import { Tip } from "./Tip.mjs";
8
8
  import { visuallyHidden } from "./visuallyHidden.mjs";
9
+ import { languageProps } from "../i18n/direction.mjs";
9
10
  const FieldPill = forwardRef(
10
11
  function FieldPill2({
11
12
  id,
@@ -36,7 +37,7 @@ const FieldPill = forwardRef(
36
37
  {
37
38
  htmlFor: id,
38
39
  style: visuallyHidden,
39
- lang: langOf("informationPanelTabsSearch"),
40
+ ...languageProps(langOf("informationPanelTabsSearch")),
40
41
  children: t("informationPanelTabsSearch")
41
42
  }
42
43
  ),
@@ -60,7 +61,7 @@ const FieldPill = forwardRef(
60
61
  {
61
62
  className: "clover-field-pill-note",
62
63
  "aria-hidden": "true",
63
- lang: langOf("contentSearchResultsNone"),
64
+ ...languageProps(langOf("contentSearchResultsNone")),
64
65
  children: t("contentSearchResultsNone")
65
66
  }
66
67
  )
@@ -70,7 +71,7 @@ const FieldPill = forwardRef(
70
71
  {
71
72
  type: "button",
72
73
  className: join("clover-field-pill-clear", classes.clear),
73
- lang: langOf("contentSearchClear"),
74
+ ...languageProps(langOf("contentSearchClear")),
74
75
  onClick: onClear,
75
76
  children: [
76
77
  /* @__PURE__ */ jsx(
@@ -103,7 +104,7 @@ const FieldPill = forwardRef(
103
104
  {
104
105
  type: "submit",
105
106
  className: join("clover-field-pill-submit", classes.submit),
106
- lang: langOf("commonSearch"),
107
+ ...languageProps(langOf("commonSearch")),
107
108
  children: [
108
109
  /* @__PURE__ */ jsxs(
109
110
  "svg",
@@ -3,6 +3,7 @@ import { jsxs, jsx } from "react/jsx-runtime";
3
3
  import { useUniqueId } from "./useUniqueId.mjs";
4
4
  import { Tip } from "./Tip.mjs";
5
5
  import { useCloverTranslation } from "../i18n/useCloverTranslation.mjs";
6
+ import { languageProps } from "../i18n/direction.mjs";
6
7
  function HideToggle({
7
8
  hidden,
8
9
  onChange,
@@ -42,7 +43,7 @@ function HideToggle({
42
43
  ]
43
44
  }
44
45
  ),
45
- /* @__PURE__ */ jsx("span", { id, hidden: true, lang: langOf(key), children: t(key) }),
46
+ /* @__PURE__ */ jsx("span", { id, hidden: true, ...languageProps(langOf(key)), children: t(key) }),
46
47
  /* @__PURE__ */ jsx(
47
48
  Tip,
48
49
  {
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
3
+ import { useCloverTranslation } from "../i18n/useCloverTranslation.mjs";
4
+ import { autonym } from "../i18n/autonym.mjs";
5
+ import { languageCode } from "../i18n/languageCode.mjs";
6
+ import { Tip } from "./Tip.mjs";
7
+ import { useContainerName } from "../i18n/useContainerName.mjs";
8
+ import { useUniqueId } from "./useUniqueId.mjs";
9
+ import { visuallyHidden } from "./visuallyHidden.mjs";
10
+ import { languageProps } from "../i18n/direction.mjs";
11
+ function LanguageChoice({
12
+ languages,
13
+ chosen,
14
+ onChange,
15
+ nameKey,
16
+ part
17
+ }) {
18
+ const { t, langOf } = useCloverTranslation();
19
+ const id = useUniqueId();
20
+ const name = useContainerName(t(nameKey), langOf(nameKey));
21
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
22
+ name.node,
23
+ /* @__PURE__ */ jsx("fieldset", { ...name.props, className: `${part}-languages`, children: languages.map((tag) => {
24
+ const own = autonym(tag);
25
+ return /* @__PURE__ */ jsxs("label", { className: `${part}-language`, children: [
26
+ /* @__PURE__ */ jsx(
27
+ "input",
28
+ {
29
+ type: "radio",
30
+ name: `${id}-language`,
31
+ checked: tag === chosen,
32
+ onChange: () => onChange(tag)
33
+ }
34
+ ),
35
+ /* @__PURE__ */ jsx("span", { className: `${part}-language-code`, children: languageCode(tag) }),
36
+ " ",
37
+ /* @__PURE__ */ jsx("span", { style: visuallyHidden, ...languageProps(tag), children: own }),
38
+ /* @__PURE__ */ jsx(Tip, { label: own, lang: tag })
39
+ ] }, tag);
40
+ }) })
41
+ ] });
42
+ }
43
+ export {
44
+ LanguageChoice
45
+ };
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useRef, useEffect } from "react";
4
+ function ListEnd({ onReached }) {
5
+ const end = useRef(null);
6
+ const reached = useRef(onReached);
7
+ reached.current = onReached;
8
+ useEffect(() => {
9
+ const element = end.current;
10
+ if (!element || typeof IntersectionObserver === "undefined") return;
11
+ const observer = new IntersectionObserver((seen) => {
12
+ if (seen.some((each) => each.isIntersecting)) reached.current();
13
+ });
14
+ observer.observe(element);
15
+ return () => observer.disconnect();
16
+ }, []);
17
+ return /* @__PURE__ */ jsx(
18
+ "span",
19
+ {
20
+ ref: end,
21
+ className: "clover-list-end",
22
+ "aria-hidden": "true",
23
+ style: { display: "block", height: 1 }
24
+ }
25
+ );
26
+ }
27
+ export {
28
+ ListEnd
29
+ };