@nulib/clover 4.0.0-beta.1 → 4.1.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 (523) 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/Body.mjs +16 -1
  6. package/dist/components/Body/BodyAlert.mjs +2 -1
  7. package/dist/components/Body/Caption.mjs +2 -1
  8. package/dist/components/Body/CaptionDetails.mjs +2 -1
  9. package/dist/components/Body/glyphs.mjs +24 -0
  10. package/dist/components/Canvas/AnnotationMenu.mjs +76 -60
  11. package/dist/components/Canvas/AnnotationState.mjs +9 -2
  12. package/dist/components/Canvas/Annotations.mjs +16 -7
  13. package/dist/components/Canvas/CanvasView.mjs +287 -42
  14. package/dist/components/Canvas/ChaptersMenu.mjs +105 -0
  15. package/dist/components/Canvas/ChoiceMenu.mjs +51 -31
  16. package/dist/components/Canvas/Connected.mjs +38 -4
  17. package/dist/components/Canvas/ControlMenu.mjs +29 -8
  18. package/dist/components/Canvas/Controls.mjs +227 -48
  19. package/dist/components/Canvas/ControlsFade.mjs +16 -0
  20. package/dist/components/Canvas/FrameAnimation.mjs +568 -167
  21. package/dist/components/Canvas/ImageControls.mjs +209 -0
  22. package/dist/components/Canvas/LoadedCanvas.mjs +5 -3
  23. package/dist/components/Canvas/PlaceBox.mjs +74 -0
  24. package/dist/components/Canvas/Placeholder.mjs +46 -13
  25. package/dist/components/Canvas/RowFits.mjs +85 -0
  26. package/dist/components/Canvas/fromManifest.mjs +2 -1
  27. package/dist/components/Canvas/layout.mjs +132 -32
  28. package/dist/components/Canvas/media/MediaBody.mjs +130 -45
  29. package/dist/components/Canvas/media/Player.mjs +9 -78
  30. package/dist/components/Canvas/media/Transport.mjs +102 -78
  31. package/dist/components/Canvas/media/TransportButton.mjs +2 -1
  32. package/dist/components/Canvas/media/placeMenu.mjs +19 -0
  33. package/dist/components/Canvas/media/seekGaps.mjs +43 -0
  34. package/dist/components/Canvas/media/sequence.mjs +96 -0
  35. package/dist/components/Canvas/media/useMediaElement.mjs +22 -3
  36. package/dist/components/Canvas/panClearOfControls.mjs +1 -1
  37. package/dist/components/Collection/Collection.mjs +3 -2
  38. package/dist/components/CollectionSelect/CollectionSelect.mjs +5 -2
  39. package/dist/components/Contents/Contents.mjs +163 -34
  40. package/dist/components/Download/Download.mjs +34 -38
  41. package/dist/components/Download/downloads.mjs +40 -0
  42. package/dist/components/Items/AnnotationItems.mjs +165 -0
  43. package/dist/components/Items/CountMenu.mjs +90 -0
  44. package/dist/components/Items/Item.mjs +27 -19
  45. package/dist/components/Items/Items.mjs +93 -45
  46. package/dist/components/Items/Pager.mjs +39 -79
  47. package/dist/components/Items/PagerLayout.mjs +43 -0
  48. package/dist/components/Items/Position.mjs +103 -0
  49. package/dist/components/Items/StandaloneItems.mjs +12 -4
  50. package/dist/components/Items/TargetItems.mjs +202 -0
  51. package/dist/components/Items/masonry.mjs +35 -0
  52. package/dist/components/Label/Label.mjs +2 -1
  53. package/dist/components/Map/MapView.mjs +367 -57
  54. package/dist/components/Panel/About.mjs +61 -15
  55. package/dist/components/Panel/AboutActions.mjs +117 -0
  56. package/dist/components/Panel/Panel.mjs +58 -18
  57. package/dist/components/Panel/PartOfManifest.mjs +4 -3
  58. package/dist/components/Panel/ReadingLanguages.mjs +20 -0
  59. package/dist/components/Primitives/Primitives.mjs +18 -3
  60. package/dist/components/Provider/Provider.mjs +19 -5
  61. package/dist/components/Root/Announcer.mjs +3 -2
  62. package/dist/components/Root/Root.mjs +5 -2
  63. package/dist/components/Root/useRootState.mjs +16 -51
  64. package/dist/components/Scene/SceneView.mjs +36 -8
  65. package/dist/components/Scene/cloverEngine.mjs +2 -1
  66. package/dist/components/Search/Search.mjs +3 -2
  67. package/dist/components/Split/Split.mjs +4 -1
  68. package/dist/components/Status/Status.mjs +10 -2
  69. package/dist/components/Timeline/playerSurface.mjs +4 -1
  70. package/dist/components/Transcript/Transcript.mjs +42 -23
  71. package/dist/core/annotation-bodies.mjs +25 -5
  72. package/dist/core/annotation-collection.mjs +3 -2
  73. package/dist/core/annotation-name.mjs +12 -9
  74. package/dist/core/annotation-sets.mjs +139 -10
  75. package/dist/core/annotations-content.mjs +8 -1
  76. package/dist/core/annotations.mjs +8 -1
  77. package/dist/core/choice-key.mjs +5 -0
  78. package/dist/core/clover.mjs +112 -24
  79. package/dist/core/content-state-reader.mjs +33 -2
  80. package/dist/core/content-state.mjs +5 -3
  81. package/dist/core/dates-format.mjs +30 -0
  82. package/dist/core/dates.mjs +19 -0
  83. package/dist/core/geo.mjs +46 -5
  84. package/dist/core/image-layers.mjs +96 -0
  85. package/dist/core/items.mjs +4 -2
  86. package/dist/core/language-choice.mjs +30 -0
  87. package/dist/core/link.mjs +15 -1
  88. package/dist/core/load.mjs +4 -2
  89. package/dist/core/pages.mjs +20 -1
  90. package/dist/core/presentation.mjs +6 -4
  91. package/dist/core/range-regions.mjs +70 -0
  92. package/dist/core/ranges.mjs +52 -18
  93. package/dist/core/region.mjs +7 -2
  94. package/dist/core/sanitize.mjs +86 -1
  95. package/dist/core/save-file.mjs +33 -0
  96. package/dist/core/selectors.mjs +12 -0
  97. package/dist/core/upgrade.mjs +23 -0
  98. package/dist/core/value.mjs +11 -23
  99. package/dist/hooks/useFullscreenExit.mjs +26 -0
  100. package/dist/hooks/useHighContrast.mjs +27 -0
  101. package/dist/i18n/autonym.mjs +11 -0
  102. package/dist/i18n/config.mjs +3 -8
  103. package/dist/{core → i18n}/direction.mjs +5 -1
  104. package/dist/i18n/languages.mjs +44 -0
  105. package/dist/i18n/locales/en.json.mjs +1 -1
  106. package/dist/i18n/locales/es.json.mjs +1 -1
  107. package/dist/i18n/locales/fi.json.mjs +1 -1
  108. package/dist/i18n/locales/fr.json.mjs +1 -1
  109. package/dist/i18n/locales/nb.json.mjs +1 -1
  110. package/dist/i18n/locales/nn.json.mjs +1 -1
  111. package/dist/i18n/locales/no.json.mjs +1 -1
  112. package/dist/i18n/locales/pt.json.mjs +1 -1
  113. package/dist/{ui → i18n}/useContainerName.mjs +5 -4
  114. package/dist/{react/language.mjs → i18n/useRootLanguage.mjs} +2 -2
  115. package/dist/index.d.mts +476 -78
  116. package/dist/index.mjs +6 -2
  117. package/dist/lib/fullscreen.mjs +6 -1
  118. package/dist/lib/gltf/load.mjs +26 -6
  119. package/dist/lib/renderer/CanvasRenderer.mjs +71 -36
  120. package/dist/lib/renderer/camera/Camera.mjs +1 -1
  121. package/dist/lib/renderer/math/affine.mjs +14 -0
  122. package/dist/lib/renderer/scene/planFrame.mjs +12 -12
  123. package/dist/lib/renderer/scene/regions.mjs +11 -1
  124. package/dist/lib/renderer/scene/sceneItem.mjs +72 -9
  125. package/dist/lib/time.mjs +10 -0
  126. package/dist/map/index.d.mts +26 -4
  127. package/dist/react/fetchManifest.mjs +19 -0
  128. package/dist/react/hooks.mjs +7 -1
  129. package/dist/react/readingLanguages.mjs +16 -0
  130. package/dist/react/useContentStateOutput.mjs +71 -0
  131. package/dist/react/usePagesReached.mjs +42 -0
  132. package/dist/styles.css +1 -1
  133. package/dist/templates/default/Default.mjs +122 -135
  134. package/dist/templates/document/Document.mjs +45 -64
  135. package/dist/templates/document/Sheets.mjs +13 -5
  136. package/dist/templates/gallery/Gallery.mjs +90 -18
  137. package/dist/templates/index.d.mts +318 -18
  138. package/dist/templates/shared/Lightbox.mjs +161 -69
  139. package/dist/templates/shared/LightboxView.mjs +118 -0
  140. package/dist/templates/shared/PanelPane.mjs +104 -0
  141. package/dist/templates/{document/DocumentPanel.mjs → shared/PanelPart.mjs} +2 -2
  142. package/dist/templates/shared/dragToClose.mjs +51 -8
  143. package/dist/templates/shared/givenAnnotations.mjs +13 -0
  144. package/dist/templates/shared/useDragToClose.mjs +6 -3
  145. package/dist/templates/shared/useLazyPanelPane.mjs +16 -0
  146. package/dist/templates/shared/useSlide.mjs +6 -0
  147. package/dist/templates.css +1 -1
  148. package/dist/ui/BodyUnloadable.mjs +34 -0
  149. package/dist/ui/Button.mjs +2 -1
  150. package/dist/ui/Chevron.mjs +34 -0
  151. package/dist/ui/ControlCluster.mjs +15 -14
  152. package/dist/ui/EntryThumbnail.mjs +60 -0
  153. package/dist/ui/ExitFullscreen.mjs +2 -1
  154. package/dist/ui/FieldPill.mjs +5 -4
  155. package/dist/ui/HideToggle.mjs +2 -1
  156. package/dist/ui/LanguageChoice.mjs +45 -0
  157. package/dist/ui/ListEnd.mjs +29 -0
  158. package/dist/ui/Markup.mjs +27 -8
  159. package/dist/ui/NavDate.mjs +29 -0
  160. package/dist/ui/ReadMore.mjs +3 -2
  161. package/dist/ui/Sections.mjs +22 -31
  162. package/dist/ui/Steps.mjs +4 -3
  163. package/dist/ui/Tip.mjs +9 -4
  164. package/dist/ui/mediaIcons.mjs +35 -8
  165. package/dist/ui/useScrollTrack.mjs +2 -1
  166. package/dist/web-components/About-DvyvVUK5.mjs +1 -0
  167. package/dist/web-components/AnnotationItems-BpRcSrOM.mjs +1 -0
  168. package/dist/web-components/AnnotationMenu-BDPec3iI.mjs +1 -0
  169. package/dist/web-components/AnnotationState-Chs_37Kk.mjs +1 -0
  170. package/dist/web-components/Annotations-6E-oD_wg.mjs +2 -0
  171. package/dist/web-components/Annotations-CLPEq7Ro.mjs +1 -0
  172. package/dist/web-components/Body-Ct61yxI7.mjs +1 -0
  173. package/dist/web-components/BodyAlert-C_Qh3Up_.mjs +1 -0
  174. package/dist/web-components/Button-L8ZMy5lY.mjs +1 -0
  175. package/dist/web-components/{Camera-cdCqKMup.mjs → Camera-BPyLzZjP.mjs} +1 -1
  176. package/dist/web-components/{Canvas2DBackend-CnLEHRs4.mjs → Canvas2DBackend-8wFavYdl.mjs} +1 -1
  177. package/dist/web-components/CanvasView-2Fj9nT06.mjs +2 -0
  178. package/dist/web-components/CaptionDetails-DuwS-grE.mjs +1 -0
  179. package/dist/web-components/ChaptersMenu-Bj2EqtVJ.mjs +1 -0
  180. package/dist/web-components/Chevron-Cyr_cc9X.mjs +1 -0
  181. package/dist/web-components/ChoiceMenu-ConzybVH.mjs +1 -0
  182. package/dist/web-components/Collection-CLayN8sv.mjs +1 -0
  183. package/dist/web-components/CollectionSelect-D2d8dGJ4.mjs +1 -0
  184. package/dist/web-components/Connected-CBQ6xyhr.mjs +1 -0
  185. package/dist/web-components/Connected-DMXG3imZ.mjs +1 -0
  186. package/dist/web-components/Connected-pyd0EBD3.mjs +1 -0
  187. package/dist/web-components/Contents-tCMXBYDK.mjs +1 -0
  188. package/dist/web-components/ControlMenu-D1zkB0qX.mjs +1 -0
  189. package/dist/web-components/ControlsFade-BNXVTL_Q.mjs +1 -0
  190. package/dist/web-components/CountMenu-Dnzb7lKo.mjs +1 -0
  191. package/dist/web-components/Cue-CUGmPS3k.mjs +1 -0
  192. package/dist/web-components/Document-D-8nalCX.mjs +1 -0
  193. package/dist/web-components/{DomLayers-BD4QPbl6.mjs → DomLayers-BxPU05-D.mjs} +1 -1
  194. package/dist/web-components/Download-Bku9Vptk.mjs +1 -0
  195. package/dist/web-components/EntryBodies-77vDudCb.mjs +1 -0
  196. package/dist/web-components/EntryThumbnail-BxQWKW6e.mjs +1 -0
  197. package/dist/web-components/FieldPill-nFGsaru9.mjs +1 -0
  198. package/dist/web-components/FrameAnimation-BvKiSXcm.mjs +1 -0
  199. package/dist/web-components/Gallery-4Hd58afA.mjs +1 -0
  200. package/dist/web-components/HideToggle-TEhY4TS4.mjs +1 -0
  201. package/dist/web-components/ImageControls-CZO7WoPb.mjs +1 -0
  202. package/dist/web-components/Items-CudZ4Lnb.mjs +1 -0
  203. package/dist/web-components/Label-f07N5Fld.mjs +1 -0
  204. package/dist/web-components/LanguageChoice-B5VM21DV.mjs +1 -0
  205. package/dist/web-components/LightboxView-C4OASmkg.mjs +1 -0
  206. package/dist/web-components/ListEnd-M39M62Cl.mjs +1 -0
  207. package/dist/web-components/{Loaded-D5xmFRSo.mjs → Loaded-oGFyBuos.mjs} +1 -1
  208. package/dist/web-components/LoadedCanvas-IvpSzPO6.mjs +1 -0
  209. package/dist/web-components/LoadedMap-WATGNLxl.mjs +1 -0
  210. package/dist/web-components/{Loading-CBKfwsML.mjs → Loading-YxuKrDAM.mjs} +1 -1
  211. package/dist/web-components/{Map-Bcgp_R8H.mjs → Map-Cw9j3gi3.mjs} +1 -1
  212. package/dist/web-components/MapView-3OxoCr5l.mjs +3 -0
  213. package/dist/web-components/Markup-DW75Jx3j.mjs +2 -0
  214. package/dist/web-components/MediaBody-CLtd0bf0.mjs +1 -0
  215. package/dist/web-components/MediaBody-JnKnoIqY.mjs +1 -0
  216. package/dist/web-components/NavDate-BCCOyycx.mjs +1 -0
  217. package/dist/web-components/{Navigator-BSJbEbuJ.mjs → Navigator-Bx4zS0Yr.mjs} +1 -1
  218. package/dist/web-components/Pager-B9GvQ64b.mjs +1 -0
  219. package/dist/web-components/PagerLayout-BF33VZL_.mjs +1 -0
  220. package/dist/web-components/Panel-BvDpCn6K.mjs +1 -0
  221. package/dist/web-components/PanelPart-Bd4lSUrP.mjs +1 -0
  222. package/dist/web-components/{PanelToggle-mUDw73zI.mjs → PanelToggle-bPcIULGZ.mjs} +1 -1
  223. package/dist/web-components/PartOfManifest-HLg-r00O.mjs +1 -0
  224. package/dist/web-components/{Pending-BPOQ2z1L.mjs → Pending-BxGjjnqq.mjs} +1 -1
  225. package/dist/web-components/PlaceBox-D-Zhe9-U.mjs +1 -0
  226. package/dist/web-components/Placeholder-DzY5hcbk.mjs +1 -0
  227. package/dist/web-components/Position-TYnzcm8e.mjs +1 -0
  228. package/dist/web-components/Primitives-C6VJXxZD.mjs +1 -0
  229. package/dist/web-components/Provider-DyB0wpeO.mjs +1 -0
  230. package/dist/web-components/ReadMore-De_0T7lc.mjs +1 -0
  231. package/dist/web-components/Root-Bt3NNBFb.mjs +1 -0
  232. package/dist/web-components/Scene-DrOM9YlD.mjs +1 -0
  233. package/dist/web-components/SceneView-DA7Yg20p.mjs +1 -0
  234. package/dist/web-components/Search-DgT8OPsK.mjs +1 -0
  235. package/dist/web-components/Sections-d1acn7qm.mjs +2 -0
  236. package/dist/web-components/StandaloneItems-DUb4YKCB.mjs +1 -0
  237. package/dist/web-components/Status-CcU3u6P4.mjs +1 -0
  238. package/dist/web-components/Steps-nlSCzbDQ.mjs +1 -0
  239. package/dist/web-components/TargetItems-BDJM3Ar-.mjs +1 -0
  240. package/dist/web-components/Timeline-BfdN3lIv.mjs +1 -0
  241. package/dist/web-components/Tip-OCB88zwY.mjs +1 -0
  242. package/dist/web-components/Transcript-bSA3cx_K.mjs +1 -0
  243. package/dist/web-components/Transport-DaIhfZqC.mjs +1 -0
  244. package/dist/web-components/Transport-DjOYI-fR.mjs +1 -0
  245. package/dist/web-components/annotation-collection-D8emkElk.mjs +1 -0
  246. package/dist/web-components/annotation-name-DbWjhgra.mjs +1 -0
  247. package/dist/web-components/annotations-content-Bg6aVAGC.mjs +1 -0
  248. package/dist/web-components/body-Ct8dmQdW.mjs +1 -0
  249. package/dist/web-components/canvas-goEZLqEd.mjs +1 -0
  250. package/dist/web-components/choice-key-BUNebLKe.mjs +1 -0
  251. package/dist/web-components/cloverEngine-Df7cMwOP.mjs +164 -0
  252. package/dist/web-components/content-state-reader-CNmBpG1L.mjs +1 -0
  253. package/dist/web-components/{controls-Dj2BybWb.mjs → controls-BZr16sYQ.mjs} +1 -1
  254. package/dist/web-components/custom-elements.json +260 -48
  255. package/dist/web-components/dates-DR3gfcON.mjs +1 -0
  256. package/dist/web-components/downloads-EjJ6Hpip.mjs +1 -0
  257. package/dist/web-components/dragToClose-X9NbZOhA.mjs +1 -0
  258. package/dist/web-components/{engine-BSt8LTso.mjs → engine-DMoc0tff.mjs} +1 -1
  259. package/dist/web-components/{engines-CC0OEsVE.mjs → engines-BmB81VXR.mjs} +1 -1
  260. package/dist/web-components/es-B1NvdYp-.mjs +1 -0
  261. package/dist/web-components/fetchManifest-CwQC6cCh.mjs +1 -0
  262. package/dist/web-components/fi-BjtYZNLo.mjs +1 -0
  263. package/dist/web-components/fr-Cd22Lziw.mjs +1 -0
  264. package/dist/web-components/fromManifest-DrAmY1lB.mjs +1 -0
  265. package/dist/web-components/glyphs-BFK_hvJJ.mjs +1 -0
  266. package/dist/web-components/hooks-BhtNDs_1.mjs +1 -0
  267. package/dist/web-components/image-layers-D2nQC4R-.mjs +1 -0
  268. package/dist/web-components/{imageService-dsdmcegU.mjs → imageService-iFElsopt.mjs} +1 -1
  269. package/dist/web-components/index-FJEpXukG.mjs +1 -0
  270. package/dist/web-components/index.d.mts +99 -14
  271. package/dist/web-components/index.mjs +1 -1
  272. package/dist/web-components/items-BPPrqbeh.mjs +1 -0
  273. package/dist/web-components/items-BnEnc5ot.mjs +1 -0
  274. package/dist/web-components/label-DauFa5sg.mjs +1 -0
  275. package/dist/web-components/layout-Djwu8f4R.mjs +1 -0
  276. package/dist/web-components/link-0lUlTZlw.mjs +1 -0
  277. package/dist/web-components/logo-DWPxaZaG.mjs +1 -0
  278. package/dist/web-components/masonry-0QfzOgbB.mjs +1 -0
  279. package/dist/web-components/models-BF2pqufA.mjs +1 -0
  280. package/dist/web-components/nb-CEwZDBiR.mjs +1 -0
  281. package/dist/web-components/nn-jYQhr9RI.mjs +1 -0
  282. package/dist/web-components/no-CEwZDBiR.mjs +1 -0
  283. package/dist/web-components/{nodes-B7JRwBgl.mjs → nodes-ChQRLDGU.mjs} +1 -1
  284. package/dist/web-components/{overlayImage-0OgQl1TL.mjs → overlayImage-MKrcgDep.mjs} +1 -1
  285. package/dist/web-components/panClearOfControls-Cn2ZXsZi.mjs +1 -0
  286. package/dist/web-components/{panel-CjXfre-g.mjs → panel-C13V6w6E.mjs} +1 -1
  287. package/dist/web-components/part-CekFWrtz.mjs +1 -0
  288. package/dist/web-components/playerSurface-DG1XipTq.mjs +1 -0
  289. package/dist/web-components/pointer-YQppt0at.mjs +1 -0
  290. package/dist/web-components/presentation-2-C-U79S_T.mjs +1 -0
  291. package/dist/web-components/{provider-C1wKfdjb.mjs → provider-DiUkZYiW.mjs} +1 -1
  292. package/dist/web-components/pt-CWR30SzS.mjs +1 -0
  293. package/dist/web-components/range-regions-CqGjyM76.mjs +1 -0
  294. package/dist/web-components/read-more-D8RJYdtQ.mjs +1 -0
  295. package/dist/web-components/readingLanguages-BWOLZK2k.mjs +1 -0
  296. package/dist/web-components/rendererSurface-BkbGDL_Z.mjs +22 -0
  297. package/dist/web-components/{renderers-BMSWEFUR.mjs → renderers-LtRX5pT0.mjs} +1 -1
  298. package/dist/web-components/{resource-DLHocQ1C.mjs → resource-Cfydiy4m.mjs} +1 -1
  299. package/dist/web-components/sanitize-qIOeyIww.mjs +3 -0
  300. package/dist/web-components/save-file-dZyOpXgY.mjs +1 -0
  301. package/dist/web-components/search-BfUZJM3a.mjs +1 -0
  302. package/dist/web-components/sequence-C28xoNmD.mjs +1 -0
  303. package/dist/web-components/shared-DkY2a89G.mjs +1 -0
  304. package/dist/web-components/{show-link-CyzYE1eS.mjs → show-link-DgLJzG7k.mjs} +1 -1
  305. package/dist/web-components/{sizedImage-uv_NlE0l.mjs → sizedImage-NHzhcBYk.mjs} +1 -1
  306. package/dist/web-components/{split-CYuMjp89.mjs → split-CuFiKjin.mjs} +1 -1
  307. package/dist/web-components/{status-Ms5L0ghK.mjs → status-C3etlkhY.mjs} +1 -1
  308. package/dist/web-components/styles-DkkVOSUQ.mjs +1 -0
  309. package/dist/web-components/three.mjs +1 -1
  310. package/dist/web-components/thumbnail-DecrVnpj.mjs +1 -0
  311. package/dist/web-components/{tip-dWhupWSr.mjs → tip-D5YgaIWW.mjs} +1 -1
  312. package/dist/web-components/{toggle-BQTjR1I3.mjs → toggle-CZGB65VZ.mjs} +1 -1
  313. package/dist/web-components/upgrade-eNW0DPXq.mjs +1 -0
  314. package/dist/web-components/upgrader-BlbMUEH6.mjs +1 -0
  315. package/dist/web-components/useContainerName-hKQjEt7a.mjs +1 -0
  316. package/dist/web-components/useControlsVisibility-DPg8uAkW.mjs +1 -0
  317. package/dist/web-components/useLazyPanelPane-eby-OI1V.mjs +1 -0
  318. package/dist/web-components/useNearViewport-CDbHQUBk.mjs +1 -0
  319. package/dist/web-components/useScrollTrack-D9l_P3_B.mjs +1 -0
  320. package/dist/web-components/viewer/AnnotationItems-DtsnDXPM.mjs +1 -0
  321. package/dist/web-components/viewer/AnnotationMenu-C-Mz6CCn.mjs +1 -0
  322. package/dist/web-components/viewer/AnnotationState-5pim5K72.mjs +1 -0
  323. package/dist/web-components/viewer/Annotations-Cqn1TkzD.mjs +2 -0
  324. package/dist/web-components/viewer/Annotations-CxwN9FkB.mjs +1 -0
  325. package/dist/web-components/viewer/{Canvas2DBackend-CAmzJD5P.mjs → Canvas2DBackend-C-ZMSCak.mjs} +1 -1
  326. package/dist/web-components/viewer/CaptionDetails-CRD-gSZP.mjs +1 -0
  327. package/dist/web-components/viewer/ChaptersMenu-Brcq3yJv.mjs +1 -0
  328. package/dist/web-components/viewer/ChoiceMenu-ByGzQQx1.mjs +1 -0
  329. package/dist/web-components/viewer/Collection-m0GCcsfQ.mjs +1 -0
  330. package/dist/web-components/viewer/Connected-Bmc_CdUD.mjs +1 -0
  331. package/dist/web-components/viewer/Connected-Dvx7wtot.mjs +1 -0
  332. package/dist/web-components/viewer/Contents-CwDpfiJY.mjs +1 -0
  333. package/dist/web-components/viewer/ControlMenu-TcO85hDf.mjs +1 -0
  334. package/dist/web-components/viewer/ControlsFade-BoZ4ABAE.mjs +1 -0
  335. package/dist/web-components/viewer/CountMenu-0-ie8kIZ.mjs +1 -0
  336. package/dist/web-components/viewer/Cue-DxmAS9Gx.mjs +1 -0
  337. package/dist/web-components/viewer/Document-BsryuYJ1.mjs +1 -0
  338. package/dist/web-components/viewer/{DomLayers-DRdQSEtN.mjs → DomLayers-hc0qARQc.mjs} +1 -1
  339. package/dist/web-components/viewer/Download-MO-1Rik4.mjs +1 -0
  340. package/dist/web-components/viewer/EntryBodies-g-OEwEsk.mjs +1 -0
  341. package/dist/web-components/viewer/EntryThumbnail-DcIDYATi.mjs +1 -0
  342. package/dist/web-components/viewer/FieldPill-B9S21lxw.mjs +1 -0
  343. package/dist/web-components/viewer/FrameAnimation-qI9cZPEs.mjs +1 -0
  344. package/dist/web-components/viewer/Gallery-BOgUqfqw.mjs +1 -0
  345. package/dist/web-components/viewer/HideToggle-D8wH49mq.mjs +1 -0
  346. package/dist/web-components/viewer/ImageControls-ZoEC9jWd.mjs +1 -0
  347. package/dist/web-components/viewer/LanguageChoice-CRqsCBAp.mjs +1 -0
  348. package/dist/web-components/viewer/LightboxView-BB-GcbYr.mjs +1 -0
  349. package/dist/web-components/viewer/ListEnd-D9Obxie4.mjs +1 -0
  350. package/dist/web-components/viewer/MapView-DQSwUzd7.mjs +3 -0
  351. package/dist/web-components/viewer/MediaBody-CIw2nTlj.mjs +1 -0
  352. package/dist/web-components/viewer/MediaBody-D5ff6xy-.mjs +1 -0
  353. package/dist/web-components/viewer/NavDate-BnfDG57h.mjs +1 -0
  354. package/dist/web-components/viewer/{Navigator-CKwDgG2x.mjs → Navigator-BNwjmkXY.mjs} +1 -1
  355. package/dist/web-components/viewer/PagerLayout-C8jraHqs.mjs +1 -0
  356. package/dist/web-components/viewer/PanelPart-YNbBI9SQ.mjs +1 -0
  357. package/dist/web-components/viewer/PartOfManifest-DX7H0V4g.mjs +1 -0
  358. package/dist/web-components/viewer/PlaceBox-CCWfzsNU.mjs +1 -0
  359. package/dist/web-components/viewer/Placeholder-CsEkLhz7.mjs +1 -0
  360. package/dist/web-components/viewer/Search-CsdYzdq1.mjs +1 -0
  361. package/dist/web-components/viewer/StandaloneItems-BfvBxbUm.mjs +1 -0
  362. package/dist/web-components/viewer/Steps-BH8ZApS4.mjs +1 -0
  363. package/dist/web-components/viewer/TargetItems-BebPFr-c.mjs +1 -0
  364. package/dist/web-components/viewer/Transcript-DXLv5WR9.mjs +1 -0
  365. package/dist/web-components/viewer/Transport-C-fh7Kx2.mjs +1 -0
  366. package/dist/web-components/viewer/Transport-CY6BWfMi.mjs +1 -0
  367. package/dist/web-components/viewer/annotation-collection-Cjd8Dgyl.mjs +1 -0
  368. package/dist/web-components/viewer/annotation-name-CwmgQFia.mjs +1 -0
  369. package/dist/web-components/viewer/annotations-content-BARXoAz-.mjs +1 -0
  370. package/dist/web-components/viewer/cloverEngine-CumnJPKO.mjs +164 -0
  371. package/dist/web-components/viewer/content-state-reader-DuvyLThu.mjs +1 -0
  372. package/dist/web-components/viewer/dragToClose-CFCxhUxn.mjs +1 -0
  373. package/dist/web-components/viewer/fetchManifest-qNB_KgxL.mjs +1 -0
  374. package/dist/web-components/viewer/{host-DlCltI_c.mjs → host-GTHX2fPK.mjs} +1 -1
  375. package/dist/web-components/viewer/image-layers-DKOuaRTj.mjs +1 -0
  376. package/dist/web-components/viewer/index.mjs +1 -1
  377. package/dist/web-components/viewer/link-BlaM0tCa.mjs +1 -0
  378. package/dist/web-components/viewer/overlayImage-RVpv69R5.mjs +1 -0
  379. package/dist/web-components/viewer/range-regions-CIZiAHOp.mjs +1 -0
  380. package/dist/web-components/viewer/{renderers-C_wdmw9v.mjs → renderers-Dw1klwlx.mjs} +1 -1
  381. package/dist/web-components/viewer/save-file-EvzaBEJN.mjs +1 -0
  382. package/dist/web-components/viewer/{search-BHLyNxZ6.mjs → search-x1QL_bth.mjs} +1 -1
  383. package/dist/web-components/viewer/styles-I7_LWFGj.mjs +1 -0
  384. package/dist/web-components/viewer/useControlsVisibility-C_SQHIVR.mjs +1 -0
  385. package/dist/web-components/viewer/useLazyPanelPane-UuGDJrf_.mjs +1 -0
  386. package/dist/web-components/viewer/viewer-DJrQuNs1.mjs +29 -0
  387. package/dist/web-components/viewer/{vtt-XiS_-5Ao.mjs → vtt-C2G89SWH.mjs} +1 -1
  388. package/dist/web-components/viewer-Br44EEba.mjs +1 -0
  389. package/dist/web-components/{vtt-DYAOuQoK.mjs → vtt-Dd0c7psH.mjs} +1 -1
  390. package/package.json +8 -4
  391. package/dist/i18n/reader.mjs +0 -13
  392. package/dist/templates/shared/LightboxBody.mjs +0 -9
  393. package/dist/web-components/About-DbrFSVBm.mjs +0 -1
  394. package/dist/web-components/AnnotationMenu-EBjIQpQl.mjs +0 -1
  395. package/dist/web-components/AnnotationState-DQTaO6Gz.mjs +0 -1
  396. package/dist/web-components/Annotations-Cb9U7HJ_.mjs +0 -2
  397. package/dist/web-components/Annotations-Dl0SgHBS.mjs +0 -1
  398. package/dist/web-components/Body-DxSz3iST.mjs +0 -1
  399. package/dist/web-components/BodyAlert-C8EOXz24.mjs +0 -1
  400. package/dist/web-components/Button-uWgfvqsL.mjs +0 -1
  401. package/dist/web-components/CanvasView-BI3YzNdK.mjs +0 -1
  402. package/dist/web-components/CaptionDetails-B80ZhZ7v.mjs +0 -1
  403. package/dist/web-components/ChoiceMenu-DCp7-co7.mjs +0 -1
  404. package/dist/web-components/Collection-B1Le2_TU.mjs +0 -1
  405. package/dist/web-components/CollectionSelect-BL_jQog-.mjs +0 -1
  406. package/dist/web-components/Connected-BxqaRL9o.mjs +0 -1
  407. package/dist/web-components/Connected-DCBI-j9H.mjs +0 -1
  408. package/dist/web-components/Connected-DkhfVWxd.mjs +0 -1
  409. package/dist/web-components/Contents-zYEGHLfe.mjs +0 -1
  410. package/dist/web-components/ControlMenu-CAHiLAtl.mjs +0 -1
  411. package/dist/web-components/Cue-BT2V9VAq.mjs +0 -1
  412. package/dist/web-components/Document-BdCjGnJN.mjs +0 -1
  413. package/dist/web-components/DocumentPanel-X_Rta0Wu.mjs +0 -1
  414. package/dist/web-components/Download-DqU-goFi.mjs +0 -1
  415. package/dist/web-components/EntryBodies-DXAQH0vR.mjs +0 -1
  416. package/dist/web-components/ErrorBoundary-chQaO-Up.mjs +0 -1
  417. package/dist/web-components/FieldPill-CyEssPVm.mjs +0 -1
  418. package/dist/web-components/FrameAnimation-Bb0pOoRl.mjs +0 -1
  419. package/dist/web-components/Gallery-BXU3TcT3.mjs +0 -1
  420. package/dist/web-components/HideToggle-BwMrOBMu.mjs +0 -1
  421. package/dist/web-components/Items-DRj1UEpC.mjs +0 -1
  422. package/dist/web-components/Label-D6aVJB9s.mjs +0 -1
  423. package/dist/web-components/LightboxBody-BzXQGMDn.mjs +0 -1
  424. package/dist/web-components/LoadedCanvas-DOjtxLSe.mjs +0 -1
  425. package/dist/web-components/LoadedMap-DouDS2lO.mjs +0 -1
  426. package/dist/web-components/MapView-CD5zkTs8.mjs +0 -1
  427. package/dist/web-components/Markup-C1hMA8wk.mjs +0 -2
  428. package/dist/web-components/MediaBody-B_Gii4we.mjs +0 -1
  429. package/dist/web-components/MediaBody-BfrKIPte.mjs +0 -1
  430. package/dist/web-components/Pager-Di_2hHM3.mjs +0 -1
  431. package/dist/web-components/Panel-DbsC8A9V.mjs +0 -1
  432. package/dist/web-components/PartOfManifest-7eOwURrF.mjs +0 -1
  433. package/dist/web-components/Primitives-XQO3m1wG.mjs +0 -1
  434. package/dist/web-components/Provider-B61118lU.mjs +0 -1
  435. package/dist/web-components/ReadMore-BJH-qqte.mjs +0 -1
  436. package/dist/web-components/Root-Dj277K6p.mjs +0 -1
  437. package/dist/web-components/Scene-BTWpLeec.mjs +0 -1
  438. package/dist/web-components/SceneView-BYo7WmPt.mjs +0 -1
  439. package/dist/web-components/Search-ZV8FFN4p.mjs +0 -1
  440. package/dist/web-components/Sections-ejwu1_Sm.mjs +0 -2
  441. package/dist/web-components/StandaloneItems-BYaiyCca.mjs +0 -1
  442. package/dist/web-components/Status-YbQK2KzY.mjs +0 -1
  443. package/dist/web-components/Timeline-ByyVSd7B.mjs +0 -1
  444. package/dist/web-components/Tip-IO11xX4x.mjs +0 -1
  445. package/dist/web-components/Transcript-D0gUxUoA.mjs +0 -1
  446. package/dist/web-components/annotation-collection-Csv7WIlm.mjs +0 -1
  447. package/dist/web-components/annotations-content-BS_OFz5Z.mjs +0 -1
  448. package/dist/web-components/body-CKjwwFep.mjs +0 -1
  449. package/dist/web-components/canvas-CIzpp-Uz.mjs +0 -1
  450. package/dist/web-components/cloverEngine-B4LinbSt.mjs +0 -164
  451. package/dist/web-components/content-state-reader-D1BkpICh.mjs +0 -1
  452. package/dist/web-components/dragToClose-C-Pf1IeO.mjs +0 -1
  453. package/dist/web-components/es-BwMkoRod.mjs +0 -1
  454. package/dist/web-components/fi-gPFOn9RK.mjs +0 -1
  455. package/dist/web-components/fr-DUHmgdJo.mjs +0 -1
  456. package/dist/web-components/fromManifest-BhemHaoA.mjs +0 -1
  457. package/dist/web-components/glyphs-drROkef9.mjs +0 -1
  458. package/dist/web-components/hooks-BXzQSllm.mjs +0 -1
  459. package/dist/web-components/index-B7nZdqLg.mjs +0 -1
  460. package/dist/web-components/items-CB2Uk7ts.mjs +0 -1
  461. package/dist/web-components/items-jfQ5XzEj.mjs +0 -1
  462. package/dist/web-components/keep-fragments-B5nlv2ck.mjs +0 -1
  463. package/dist/web-components/label-Vbg_cMOJ.mjs +0 -1
  464. package/dist/web-components/layout-mMHI0lsj.mjs +0 -1
  465. package/dist/web-components/link-ZRnv5NFR.mjs +0 -1
  466. package/dist/web-components/logo-Boy6u4m2.mjs +0 -1
  467. package/dist/web-components/models-D1EE_CmH.mjs +0 -1
  468. package/dist/web-components/nb-BSvnQ6jd.mjs +0 -1
  469. package/dist/web-components/nn-Dg2_HdZu.mjs +0 -1
  470. package/dist/web-components/no-BSvnQ6jd.mjs +0 -1
  471. package/dist/web-components/panClearOfControls-ac9uf-Qs.mjs +0 -1
  472. package/dist/web-components/part-cUiPs2-y.mjs +0 -1
  473. package/dist/web-components/playerSurface-CU5XxI1j.mjs +0 -1
  474. package/dist/web-components/pt-B3J80JgO.mjs +0 -1
  475. package/dist/web-components/read-more-DNHNtG-a.mjs +0 -1
  476. package/dist/web-components/rendererSurface-DhIlOjGT.mjs +0 -22
  477. package/dist/web-components/sanitize-Dc7nOsgO.mjs +0 -3
  478. package/dist/web-components/search-CLy2Wj01.mjs +0 -1
  479. package/dist/web-components/shared-YUjOSBKO.mjs +0 -1
  480. package/dist/web-components/styles-CyuM_fB1.mjs +0 -1
  481. package/dist/web-components/thumbnail-c2K_iQsD.mjs +0 -1
  482. package/dist/web-components/time-B9GZoYcm.mjs +0 -1
  483. package/dist/web-components/upgrader-XNxI-5jo.mjs +0 -1
  484. package/dist/web-components/useContainerName-BpJ3IWY0.mjs +0 -1
  485. package/dist/web-components/useNearViewport-CtLyYg9n.mjs +0 -1
  486. package/dist/web-components/useScrollTrack-WbG28FPD.mjs +0 -1
  487. package/dist/web-components/viewer/AnnotationMenu-ZKyBeyUU.mjs +0 -1
  488. package/dist/web-components/viewer/AnnotationState-DO33zokc.mjs +0 -1
  489. package/dist/web-components/viewer/Annotations-BOjhr5ks.mjs +0 -1
  490. package/dist/web-components/viewer/Annotations-DkLueFLK.mjs +0 -2
  491. package/dist/web-components/viewer/CaptionDetails-DOJlUtOn.mjs +0 -1
  492. package/dist/web-components/viewer/ChoiceMenu-BDq6H34G.mjs +0 -1
  493. package/dist/web-components/viewer/Collection-By3puO0V.mjs +0 -1
  494. package/dist/web-components/viewer/Connected-DZNO2CPf.mjs +0 -1
  495. package/dist/web-components/viewer/Connected-ESg5y49m.mjs +0 -1
  496. package/dist/web-components/viewer/Contents-B_FqDwTW.mjs +0 -1
  497. package/dist/web-components/viewer/ControlMenu-DdQl-dTf.mjs +0 -1
  498. package/dist/web-components/viewer/Cue-BTRHfiWQ.mjs +0 -1
  499. package/dist/web-components/viewer/Document-B9_PyD2w.mjs +0 -1
  500. package/dist/web-components/viewer/DocumentPanel-CtEJVPoE.mjs +0 -1
  501. package/dist/web-components/viewer/EntryBodies-CJuTRcTq.mjs +0 -1
  502. package/dist/web-components/viewer/FieldPill-06uwrNwE.mjs +0 -1
  503. package/dist/web-components/viewer/FrameAnimation-3dcDHf5q.mjs +0 -1
  504. package/dist/web-components/viewer/Gallery-BYasTqZc.mjs +0 -1
  505. package/dist/web-components/viewer/HideToggle-BxkNMX-T.mjs +0 -1
  506. package/dist/web-components/viewer/LightboxBody-CXMc1xOH.mjs +0 -1
  507. package/dist/web-components/viewer/MapView-DCerrRRV.mjs +0 -1
  508. package/dist/web-components/viewer/MediaBody-BdkJcyGy.mjs +0 -1
  509. package/dist/web-components/viewer/MediaBody-waF4KvHp.mjs +0 -1
  510. package/dist/web-components/viewer/PartOfManifest-DalHJFwC.mjs +0 -1
  511. package/dist/web-components/viewer/Search-Di_QQfDb.mjs +0 -1
  512. package/dist/web-components/viewer/StandaloneItems-B9J6nnWn.mjs +0 -1
  513. package/dist/web-components/viewer/Transcript-aHOixfna.mjs +0 -1
  514. package/dist/web-components/viewer/annotation-collection-I2UkdobR.mjs +0 -1
  515. package/dist/web-components/viewer/annotations-content-D-i4j9pD.mjs +0 -1
  516. package/dist/web-components/viewer/cloverEngine-CynoKdta.mjs +0 -164
  517. package/dist/web-components/viewer/content-state-reader-D7GIMcKK.mjs +0 -1
  518. package/dist/web-components/viewer/link-BX-wzj1u.mjs +0 -1
  519. package/dist/web-components/viewer/overlayImage-CHqn1fG8.mjs +0 -1
  520. package/dist/web-components/viewer/styles-BRCkEU3w.mjs +0 -1
  521. package/dist/web-components/viewer/viewer-ipqAA-xQ.mjs +0 -28
  522. package/dist/web-components/viewer-DEHIsIHd.mjs +0 -1
  523. /package/dist/{ui → i18n}/languageCode.mjs +0 -0
@@ -1,15 +1,16 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import React, { useRef, useState, useMemo, useCallback, useEffect, useLayoutEffect, Suspense, lazy } from "react";
3
+ import React, { useRef, useState, useMemo, useEffect, useCallback, useLayoutEffect, Suspense, lazy } from "react";
4
4
  import Caption, { hasInformation, captionLabelId } from "../Body/Caption.mjs";
5
5
  import Controls from "./Controls.mjs";
6
- import Placeholder from "./Placeholder.mjs";
7
- import { findChoices, animationFrames, canvasScene, placeholderStill, frameKey, canvasRectToWorld, canvasSize } from "./layout.mjs";
6
+ import { findChoices, startingChoices, animationFrames, canvasScene, paintedType, placeholderStill, frameKey, canvasSize, canvasRectToWorld } from "./layout.mjs";
8
7
  import ExitFullscreen from "../../ui/ExitFullscreen.mjs";
9
- import { useControlsVisibility } from "../Body/useControlsVisibility.mjs";
10
8
  import { useNearViewport } from "../Body/useNearViewport.mjs";
11
9
  import useFullscreen from "../../hooks/useFullscreen.mjs";
10
+ import useWithinFullscreen from "../../hooks/useWithinFullscreen.mjs";
11
+ import useFullscreenExit from "../../hooks/useFullscreenExit.mjs";
12
12
  import { useLoaded } from "../../hooks/useLoaded.mjs";
13
+ import { useHighContrast, highContrastProps } from "../../hooks/useHighContrast.mjs";
13
14
  import { ErrorBoundary } from "../../ui/ErrorBoundary.mjs";
14
15
  import { Loading } from "../../ui/Loading.mjs";
15
16
  import { SHORTCUTS, forwardShortcut } from "../../ui/Tip.mjs";
@@ -18,12 +19,16 @@ import { visuallyHidden } from "../../ui/visuallyHidden.mjs";
18
19
  import { join } from "../../lib/classnames.mjs";
19
20
  import { localize } from "../../core/value.mjs";
20
21
  import { useCloverTranslation } from "../../i18n/useCloverTranslation.mjs";
22
+ import { BodyUnloadable, BodyNote } from "../../ui/BodyUnloadable.mjs";
21
23
  import { HostLanguageContext } from "../../i18n/hostLanguage.mjs";
22
- import { useRootLanguage } from "../../react/language.mjs";
23
- import { useContainerName } from "../../ui/useContainerName.mjs";
24
+ import { useRootLanguage } from "../../i18n/useRootLanguage.mjs";
25
+ import { useContainerName } from "../../i18n/useContainerName.mjs";
24
26
  import { union } from "../../lib/renderer/math/rect.mjs";
25
27
  import { findImageServiceId } from "../../lib/renderer/sources/imageService.mjs";
26
28
  import { hasCamera } from "./surface.mjs";
29
+ import { languageProps } from "../../i18n/direction.mjs";
30
+ import { buildContentState } from "../../core/content-state.mjs";
31
+ import { useContentStateOutput, watchMedia } from "../../react/useContentStateOutput.mjs";
27
32
  import { resolveDirection } from "../../core/sequence.mjs";
28
33
  const MediaBody = lazy(() => import("./media/MediaBody.mjs"));
29
34
  const loadHotspots = () => import("./AnnotationState.mjs");
@@ -43,13 +48,32 @@ const NO_MODEL = {
43
48
  quietlyOpened: null
44
49
  };
45
50
  const FrameAnimation = lazy(() => import("./FrameAnimation.mjs"));
51
+ const PlaceBox = lazy(() => import("./PlaceBox.mjs"));
52
+ const Placeholder = lazy(() => import("./Placeholder.mjs"));
53
+ const ControlsFade = lazy(() => import("./ControlsFade.mjs"));
54
+ const inSight = () => true;
55
+ const PlaceholderToggle = lazy(
56
+ () => import("./Placeholder.mjs").then(({ PlaceholderToggle: PlaceholderToggle2 }) => ({
57
+ default: PlaceholderToggle2
58
+ }))
59
+ );
46
60
  const ALL_CONTROLS = {
47
61
  zoom: true,
48
62
  fullPage: true,
49
63
  rotation: true,
50
64
  reset: true,
51
65
  annotations: true,
52
- information: true
66
+ information: true,
67
+ map: true
68
+ };
69
+ const NO_CONTROLS = {
70
+ zoom: false,
71
+ fullPage: false,
72
+ rotation: false,
73
+ reset: false,
74
+ annotations: false,
75
+ information: false,
76
+ map: false
53
77
  };
54
78
  const CAMERA_KEYS = {
55
79
  description: "canvasKeysImage",
@@ -77,7 +101,7 @@ const CanvasView = (props) => {
77
101
  return /* @__PURE__ */ jsx(ErrorBoundary, { children: /* @__PURE__ */ jsx(CanvasBody, { ...props }) });
78
102
  };
79
103
  const CanvasBody = (props) => {
80
- var _a, _b, _c, _d, _e;
104
+ var _a, _b, _c, _d, _e, _f;
81
105
  const {
82
106
  surface: makeSurface,
83
107
  manifestId,
@@ -89,15 +113,18 @@ const CanvasBody = (props) => {
89
113
  label,
90
114
  partOf,
91
115
  language,
116
+ highContrast,
92
117
  instanceId,
93
118
  className,
94
119
  options,
95
120
  navigator = false,
96
121
  controls = true,
122
+ collapseControls = "auto",
97
123
  controlButtons,
98
124
  annotations: allAnnotations,
99
125
  onReady,
100
126
  onViewportChange,
127
+ onContentStateChange,
101
128
  onMediaElement,
102
129
  onCaptionChange,
103
130
  caption,
@@ -114,14 +141,20 @@ const CanvasBody = (props) => {
114
141
  null
115
142
  );
116
143
  const isFullscreen = useFullscreen(wrapperElement);
144
+ const withinFullscreen = useWithinFullscreen(wrapperElement);
145
+ const exitShown = useFullscreenExit(wrapperElement);
117
146
  const root = useRootLanguage(
118
147
  setWrapperElement
119
148
  );
120
- const controlsVisible = useControlsVisibility(
121
- wrapperElement,
149
+ const contrast = useHighContrast(highContrast);
150
+ const surfaceFades = Boolean(makeSurface.controlsVisibility);
151
+ const useVisibility = makeSurface.controlsVisibility ?? inSight;
152
+ const surfaceVisible = useVisibility(
153
+ surfaceFades ? wrapperElement : null,
122
154
  options == null ? void 0 : options.hideDelay,
123
155
  hostRef
124
156
  );
157
+ const [videoVisible, setVideoVisible] = useState(false);
125
158
  const nearViewport = useNearViewport(wrapperElement);
126
159
  const made = useUniqueId();
127
160
  const [instance] = useState(() => instanceId ?? `clover-canvas-${made}`);
@@ -131,6 +164,7 @@ const CanvasBody = (props) => {
131
164
  const [navigatorElement, setNavigatorElement] = useState(null);
132
165
  const controlsConfig = controls === false ? null : controls === true ? ALL_CONTROLS : { ...ALL_CONTROLS, ...controls };
133
166
  const [status, setStatus] = useState("loading");
167
+ const [unloadable, setUnloadable] = useState(false);
134
168
  const [sceneVersion, setSceneVersion] = useState(0);
135
169
  const onReadyRef = useRef(onReady);
136
170
  const onViewportChangeRef = useRef(onViewportChange);
@@ -140,13 +174,64 @@ const CanvasBody = (props) => {
140
174
  optionsRef.current = options;
141
175
  const direction = resolveDirection(viewingDirection);
142
176
  const choices = useMemo(() => findChoices(canvases ?? []), [canvases]);
143
- const [selections, setSelections] = useState({});
177
+ const starting = useMemo(() => startingChoices(choices), [choices]);
178
+ const [picked, setSelections] = useState({});
179
+ const selections = useMemo(
180
+ () => ({ ...starting, ...picked }),
181
+ [starting, picked]
182
+ );
144
183
  const selectChoice = (key, index) => setSelections((current) => ({ ...current, [key]: index }));
184
+ const layered = useMemo(
185
+ () => allAnnotations == null ? void 0 : allAnnotations.filter(
186
+ (each) => !each.layer || (selections[each.layer.key] ?? 0) === each.layer.item
187
+ ),
188
+ [allAnnotations, selections]
189
+ );
190
+ const pickedLayer = (_a = allAnnotations == null ? void 0 : allAnnotations.find(
191
+ (each) => each.layer && each.annotation.id === props.selectedAnnotation
192
+ )) == null ? void 0 : _a.layer;
193
+ useEffect(() => {
194
+ if (pickedLayer && (selections[pickedLayer.key] ?? 0) !== pickedLayer.item)
195
+ selectChoice(pickedLayer.key, pickedLayer.item);
196
+ }, [pickedLayer == null ? void 0 : pickedLayer.key, pickedLayer == null ? void 0 : pickedLayer.item, props.selectedAnnotation]);
145
197
  const showInformation = Boolean(controlsConfig == null ? void 0 : controlsConfig.information);
146
198
  const hasAnnotations = Boolean(allAnnotations == null ? void 0 : allAnnotations.length);
147
199
  const hotspots = useLoaded(loadHotspots, hasAnnotations);
148
200
  const [annotationModel, setAnnotationModel] = useState(null);
149
201
  const model = hasAnnotations && annotationModel || NO_MODEL;
202
+ const pickedPlace = useMemo(() => {
203
+ var _a2, _b2;
204
+ const picked2 = (_a2 = allAnnotations == null ? void 0 : allAnnotations.find(
205
+ (each) => each.annotation.id === model.selected
206
+ )) == null ? void 0 : _a2.annotation;
207
+ const body2 = (Array.isArray(picked2 == null ? void 0 : picked2.body) ? picked2 == null ? void 0 : picked2.body : [picked2 == null ? void 0 : picked2.body]).find((each) => (each == null ? void 0 : each.type) === "Feature");
208
+ return picked2 && body2 ? {
209
+ id: String(picked2.id),
210
+ feature: body2,
211
+ name: ((_b2 = body2.properties) == null ? void 0 : _b2.label) ?? picked2.label
212
+ } : null;
213
+ }, [allAnnotations, model.selected]);
214
+ const pickKey = pickedPlace ? `${pickedPlace.id}:${props.refind ?? 0}` : null;
215
+ const [closedPick, setClosedPick] = useState(null);
216
+ const pickOpen = pickKey !== null && closedPick !== pickKey;
217
+ const places = useMemo(() => {
218
+ var _a2, _b2;
219
+ const own = (canvases ?? []).map((canvas) => canvas.navPlace).filter(Boolean);
220
+ const source = own.length ? own : props.navPlace ? [props.navPlace] : [];
221
+ if (!source.length) return null;
222
+ const features = source.flatMap(
223
+ (place) => (place == null ? void 0 : place.type) === "FeatureCollection" ? place.features ?? [] : (place == null ? void 0 : place.type) === "Feature" ? [place] : []
224
+ );
225
+ if (!features.length) return null;
226
+ const named = features.length === 1 ? (_b2 = (_a2 = features[0]) == null ? void 0 : _a2.properties) == null ? void 0 : _b2.label : void 0;
227
+ return {
228
+ feature: { type: "FeatureCollection", features },
229
+ name: named ?? props.label
230
+ };
231
+ }, [canvases, props.navPlace, props.label]);
232
+ const placeId = `place-box-${instance}`;
233
+ const [placeOpen, setPlaceOpen] = useState(false);
234
+ const [placeShown, setPlaceShown] = useState(false);
150
235
  const modelRef = useRef(model);
151
236
  modelRef.current = model;
152
237
  const releaseAnnotation = useCallback(() => modelRef.current.release(), []);
@@ -185,6 +270,15 @@ const CanvasBody = (props) => {
185
270
  [body, src, isTiledImage]
186
271
  );
187
272
  const media = (scene == null ? void 0 : scene.media[0]) ?? null;
273
+ const videoFades = !surfaceFades && (media == null ? void 0 : media.kind) === "video";
274
+ const fades = surfaceFades || videoFades;
275
+ const controlsVisible = surfaceFades ? surfaceVisible : videoVisible;
276
+ const painted = useMemo(() => {
277
+ if (canvases == null ? void 0 : canvases.length) return paintedType(canvases, selections);
278
+ const handed = (Array.isArray(body) ? body : body ? [body] : [])[0];
279
+ if (typeof (handed == null ? void 0 : handed.type) === "string") return handed.type.toLowerCase();
280
+ return src ? "image" : void 0;
281
+ }, [canvases, selections, body, src]);
188
282
  const [mediaElement, setMediaElement] = useState(
189
283
  null
190
284
  );
@@ -198,8 +292,11 @@ const CanvasBody = (props) => {
198
292
  const baseImages = scene ? scene.images : bodyImages;
199
293
  const mediaOnly = Boolean(media) && (canvases == null ? void 0 : canvases.length) === 1;
200
294
  const player = mediaOnly && (media == null ? void 0 : media.kind) === "audio";
201
- const navigable = !mediaOnly && ((_a = options == null ? void 0 : options.gestures) == null ? void 0 : _a.navigable) !== false;
202
- const canvasKey = (canvases == null ? void 0 : canvases.map((canvas) => canvas.id).join("|")) ?? null;
295
+ const fillable = mediaOnly && (media == null ? void 0 : media.kind) === "video";
296
+ const empty = (canvases == null ? void 0 : canvases.length) === 1 && !media && !animated && baseImages.length === 0;
297
+ const navigable = !mediaOnly && !empty && ((_b = options == null ? void 0 : options.gestures) == null ? void 0 : _b.navigable) !== false;
298
+ const canvasKey = canvases ? `${manifestId ?? ""}
299
+ ${canvases.map((canvas) => canvas.id).join("|")}` : null;
203
300
  const stills = useMemo(() => {
204
301
  if (!canvases || !placeholder) return [];
205
302
  const found = canvases.flatMap((canvas) => {
@@ -212,21 +309,29 @@ const CanvasBody = (props) => {
212
309
  const [imagesOpen, setImagesOpen] = useState(false);
213
310
  const [mediaOpenedFor, setMediaOpenedFor] = useState(null);
214
311
  const showPlaceholder = !player && stills.length > 0 && (media ? mediaOpenedFor !== canvasKey : !imagesOpen);
215
- const onlyInformation = (config, { annotations = false } = {}) => ({
312
+ const onlyInformation = (config, { annotations = false, fullPage = false } = {}) => ({
216
313
  ...config,
217
314
  zoom: false,
218
315
  rotation: false,
219
316
  reset: false,
220
- fullPage: false,
317
+ fullPage: fullPage && config.fullPage,
221
318
  annotations: annotations && config.annotations
222
319
  });
320
+ const fullscreenExit = empty && withinFullscreen;
223
321
  const hostControls = React.Children.count(children) > 0;
224
- const shownControls = !controlsConfig ? null : showPlaceholder ? captioned.length || hostControls || listedCount ? onlyInformation(controlsConfig, { annotations: true }) : null : mediaOnly ? choices.length || captioned.length || hostControls || listedCount ? onlyInformation(controlsConfig, { annotations: true }) : null : controlsConfig;
322
+ const cornerToggle = stills.length > 0 && !player && !media;
323
+ const shownControls = !controlsConfig ? null : showPlaceholder ? captioned.length || hostControls || listedCount || // A recording's chapters, offered over its still too.
324
+ media && (chapters == null ? void 0 : chapters.length) ? onlyInformation(controlsConfig, { annotations: true }) : null : mediaOnly || empty ? choices.length || captioned.length || hostControls || listedCount || // A recording's chapters, listed by a control of its own (`ChaptersMenu`).
325
+ media && (chapters == null ? void 0 : chapters.length) || fullscreenExit && controlsConfig.fullPage ? onlyInformation(controlsConfig, {
326
+ annotations: true,
327
+ fullPage: fullscreenExit
328
+ }) : null : controlsConfig;
225
329
  const showNavigator = navigator && !showPlaceholder && (media ? media.kind === "audio" && !mediaOnly && baseImages.length > 0 : true);
226
330
  const [fitted, setFitted] = useState(null);
227
331
  const videoPlacement = media ? fitted ?? media.placement : null;
228
- const images = useMemo(
229
- () => (media == null ? void 0 : media.kind) === "video" && mediaElement && videoPlacement ? [
332
+ const [frameItems, setFrameItems] = useState(NO_ITEMS);
333
+ const images = useMemo(() => {
334
+ const withVideo = (media == null ? void 0 : media.kind) === "video" && mediaElement && videoPlacement ? [
230
335
  ...baseImages,
231
336
  {
232
337
  id: media.id,
@@ -235,14 +340,15 @@ const CanvasBody = (props) => {
235
340
  height: videoPlacement.height,
236
341
  media: { element: mediaElement }
237
342
  }
238
- ] : baseImages,
239
- [baseImages, media, mediaElement, videoPlacement]
240
- );
343
+ ] : baseImages;
344
+ return frameItems.length ? [...withVideo, ...frameItems] : withVideo;
345
+ }, [baseImages, media, mediaElement, videoPlacement, frameItems]);
241
346
  const world = mediaOnly && (media == null ? void 0 : media.kind) === "video" && fitted ? fitted : scene ? union(scene.placements) : null;
242
347
  const imagesKey = JSON.stringify([
243
348
  baseImages,
244
349
  world,
245
- images.length !== baseImages.length && [media == null ? void 0 : media.id, videoPlacement]
350
+ images.length !== baseImages.length && [media == null ? void 0 : media.id, videoPlacement],
351
+ frameItems.map((item) => item.id)
246
352
  ]);
247
353
  const shownCanvases = useRef(null);
248
354
  const placeholderShown = useRef(false);
@@ -251,8 +357,22 @@ const CanvasBody = (props) => {
251
357
  else setImagesOpen(showPlaceholder);
252
358
  if (!showPlaceholder) releaseAnnotation();
253
359
  };
360
+ const pendingChapter = useRef(null);
361
+ const goToChapter = (start) => {
362
+ if (mediaElement && !showPlaceholder) {
363
+ mediaElement.currentTime = start;
364
+ return;
365
+ }
366
+ pendingChapter.current = start;
367
+ if (showPlaceholder) togglePlaceholder();
368
+ };
369
+ useEffect(() => {
370
+ if (!mediaElement || pendingChapter.current === null) return;
371
+ mediaElement.currentTime = pendingChapter.current;
372
+ pendingChapter.current = null;
373
+ }, [mediaElement]);
254
374
  const firstBody = Array.isArray(body) ? body[0] : body;
255
- const ownName = [label, (_b = canvases == null ? void 0 : canvases[0]) == null ? void 0 : _b.label, firstBody == null ? void 0 : firstBody.label].map((value) => localize(value, language)).find((value) => value.text);
375
+ const ownName = [label, (_c = canvases == null ? void 0 : canvases[0]) == null ? void 0 : _c.label, firstBody == null ? void 0 : firstBody.label].map((value) => localize(value, language)).find((value) => value.text);
256
376
  const partOfName = useMemo(() => {
257
377
  const name = localize(partOf, language);
258
378
  return name.text && name.text !== (ownName == null ? void 0 : ownName.text) ? name : void 0;
@@ -281,7 +401,32 @@ const CanvasBody = (props) => {
281
401
  const { canvases: canvases2, scene: scene2, canvasKey: canvasKey2 } = latestScene.current;
282
402
  drawnScene.current = canvases2 && scene2 && shownCanvases.current === canvasKey2 ? { key: canvasKey2, canvases: canvases2, placements: scene2.placements } : null;
283
403
  }, []);
284
- const drawn = !canvases || ((_c = drawnScene.current) == null ? void 0 : _c.key) === canvasKey;
404
+ const drawn = !canvases || ((_d = drawnScene.current) == null ? void 0 : _d.key) === canvasKey;
405
+ const contentStateChanged = useContentStateOutput(() => {
406
+ const shown = drawnScene.current;
407
+ const surface2 = surfaceRef.current;
408
+ if (!shown || manifestId === "loading") return null;
409
+ const time = mediaElement && mediaElement.currentTime > 0 ? mediaElement.currentTime : null;
410
+ const region = !time && surface2 && hasCamera(surface2) ? canvasRegion(surface2.getBounds(), shown.canvases, shown.placements) : null;
411
+ const canvas = shown.canvases.find((each) => each.id === (region == null ? void 0 : region.canvasId)) ?? shown.canvases[0];
412
+ if (!canvas) return null;
413
+ return buildContentState({
414
+ manifestId,
415
+ canvasId: canvas.id,
416
+ type: canvas.type,
417
+ region: region && {
418
+ x: region.rect.x,
419
+ y: region.rect.y,
420
+ w: region.rect.width,
421
+ h: region.rect.height
422
+ },
423
+ time
424
+ });
425
+ }, onContentStateChange);
426
+ useEffect(
427
+ () => watchMedia(mediaElement, contentStateChanged),
428
+ [mediaElement, contentStateChanged]
429
+ );
285
430
  useEffect(() => {
286
431
  const host = hostRef.current;
287
432
  if (!host) return;
@@ -294,6 +439,7 @@ const CanvasBody = (props) => {
294
439
  var _a2;
295
440
  setCleared(false);
296
441
  markDrawn();
442
+ contentStateChanged();
297
443
  setStatus("ready");
298
444
  setSceneVersion((v) => v + 1);
299
445
  if (!renderer2) return;
@@ -320,20 +466,27 @@ const CanvasBody = (props) => {
320
466
  const offChange = surface2.on("change", () => {
321
467
  setCleared(false);
322
468
  markDrawn();
469
+ contentStateChanged();
323
470
  setStatus("ready");
324
471
  setSceneVersion((v) => v + 1);
325
472
  });
326
473
  const offError = surface2.on("error", () => {
327
474
  if (!surface2.isOpen) setStatus("error");
328
475
  });
476
+ const offUnloadable = surface2.on(
477
+ "unloadable",
478
+ (failed) => setUnloadable(Boolean(failed))
479
+ );
329
480
  const offViewport = surface2.on("viewport", () => {
330
481
  var _a2;
331
482
  if (renderer2) (_a2 = onViewportChangeRef.current) == null ? void 0 : _a2.call(onViewportChangeRef, renderer2.getBounds());
483
+ contentStateChanged();
332
484
  });
333
485
  return () => {
334
486
  offOpen();
335
487
  offChange();
336
488
  offError();
489
+ offUnloadable();
337
490
  offViewport();
338
491
  surface2.dispose();
339
492
  surfaceRef.current = null;
@@ -344,6 +497,19 @@ const CanvasBody = (props) => {
344
497
  if (!renderer || !navigatorElement) return;
345
498
  return renderer.attachNavigator(navigatorElement);
346
499
  }, [renderer, navigatorElement]);
500
+ useEffect(() => {
501
+ if (!surface || !empty) return;
502
+ surface.setGestures({ navigable: false });
503
+ return () => surface.setGestures({});
504
+ }, [surface, empty]);
505
+ const exitFocused = useRef(false);
506
+ useEffect(() => {
507
+ var _a2;
508
+ if (fullscreenExit) return;
509
+ const lost = !document.activeElement || document.activeElement === document.body;
510
+ if (exitFocused.current && lost) (_a2 = hostRef.current) == null ? void 0 : _a2.focus();
511
+ exitFocused.current = false;
512
+ }, [fullscreenExit]);
347
513
  useEffect(() => {
348
514
  const surface2 = surfaceRef.current;
349
515
  if (showPlaceholder) placeholderShown.current = true;
@@ -373,15 +539,22 @@ const CanvasBody = (props) => {
373
539
  className: join("clover-canvas", className),
374
540
  "data-testid": "clover-canvas",
375
541
  "data-status": status,
542
+ ...highContrastProps(contrast),
543
+ "data-unloadable": unloadable || void 0,
376
544
  "data-has-navigator": showNavigator,
377
545
  "data-fullscreen": isFullscreen,
378
- "data-controls": controlsVisible ? "visible" : "hidden",
379
- "data-media": media == null ? void 0 : media.kind,
546
+ "data-exit": exitShown || void 0,
547
+ "data-controls": fades ? controlsVisible ? "visible" : "hidden" : void 0,
548
+ "data-media": painted,
549
+ "data-recording": media ? "" : void 0,
380
550
  "data-player": player ? "" : void 0,
381
551
  "data-animated": animated ? "" : void 0,
382
552
  "data-navigable": navigable,
383
553
  "data-placeholder": stills.length && !player ? showPlaceholder : void 0,
384
554
  ref: root.ref,
555
+ onFocus: (event) => {
556
+ exitFocused.current = fullscreenExit && event.target.id === `fullPage-${instance}`;
557
+ },
385
558
  onKeyDown: (event) => {
386
559
  if (event.key === "Escape" && isCaptionOpen && !event.defaultPrevented) {
387
560
  event.preventDefault();
@@ -403,16 +576,41 @@ const CanvasBody = (props) => {
403
576
  isolation: "isolate"
404
577
  },
405
578
  children: [
406
- (shownControls || showNavigator) && /* @__PURE__ */ jsx("div", { className: "clover-canvas-scrim", "aria-hidden": "true" }),
407
- /* @__PURE__ */ jsx(ExitFullscreen, { hidden: !isFullscreen }),
408
- surface && shownControls && /* @__PURE__ */ jsx(
579
+ (shownControls || showNavigator) && media && /* @__PURE__ */ jsx("div", { className: "clover-canvas-scrim", "aria-hidden": "true" }),
580
+ videoFades && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
581
+ ControlsFade,
582
+ {
583
+ element: wrapperElement,
584
+ hideDelay: options == null ? void 0 : options.hideDelay,
585
+ picture: hostRef,
586
+ onChange: setVideoVisible
587
+ }
588
+ ) }),
589
+ /* @__PURE__ */ jsx(ExitFullscreen, { hidden: !exitShown }),
590
+ surface && (shownControls || cornerToggle) && /* @__PURE__ */ jsx(
409
591
  Controls,
410
592
  {
411
593
  renderer,
412
594
  instance,
413
- config: shownControls,
595
+ config: shownControls ?? NO_CONTROLS,
414
596
  controlButtons,
415
- hasPlaceholder: stills.length > 0,
597
+ placeholderIsMore: cornerToggle && !media,
598
+ chapters: media ? chapters : void 0,
599
+ mediaElement,
600
+ onChapter: goToChapter,
601
+ request: options == null ? void 0 : options.request,
602
+ placeholder: cornerToggle && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
603
+ PlaceholderToggle,
604
+ {
605
+ instance,
606
+ media: Boolean(media),
607
+ active: showPlaceholder,
608
+ onToggle: togglePlaceholder,
609
+ more: !!controlsConfig && (controlsConfig.zoom || controlsConfig.rotation || controlsConfig.reset || controlsConfig.fullPage)
610
+ }
611
+ ) }),
612
+ fit: !surfaceFades,
613
+ more: collapseControls,
416
614
  choices: showPlaceholder ? [] : choices,
417
615
  selections,
418
616
  onSelect: selectChoice,
@@ -425,8 +623,14 @@ const CanvasBody = (props) => {
425
623
  captionId: hasCaption ? captionId : void 0,
426
624
  captionOpen: isCaptionOpen,
427
625
  onCaptionToggle: () => setCaptionOpen((open) => !open),
626
+ placeId: places ? placeId : void 0,
627
+ placeOpen,
628
+ onPlaceToggle: () => {
629
+ setPlaceShown(true);
630
+ setPlaceOpen((open) => !open);
631
+ },
428
632
  language,
429
- children
633
+ children: shownControls && children
430
634
  }
431
635
  ),
432
636
  showNavigator && /* @__PURE__ */ jsx(
@@ -462,18 +666,20 @@ const CanvasBody = (props) => {
462
666
  viewportName.node,
463
667
  viewportKeys.length > 0 && /* @__PURE__ */ jsx("span", { id: keysId, style: visuallyHidden, children: viewportKeys.map(({ description }, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
464
668
  index > 0 && " ",
465
- /* @__PURE__ */ jsx("span", { lang: root.langOf(description), children: t(description) })
669
+ /* @__PURE__ */ jsx("span", { ...languageProps(root.langOf(description)), children: t(description) })
466
670
  ] }, description)) }),
671
+ /* @__PURE__ */ jsx(BodyUnloadable, { kind: "image", shown: unloadable && !showPlaceholder }),
672
+ empty && !showPlaceholder && (ownName == null ? void 0 : ownName.text) && /* @__PURE__ */ jsx(BodyNote, { text: ownName.text, lang: ownName.lang || void 0 }),
467
673
  (media == null ? void 0 : media.kind) === "audio" && !player && baseImages.length === 0 && !showPlaceholder && (ownName == null ? void 0 : ownName.text) && /* @__PURE__ */ jsx(
468
674
  "p",
469
675
  {
470
676
  className: "clover-canvas-sound-label",
471
677
  "aria-hidden": "true",
472
- lang: ownName.lang || void 0,
678
+ ...languageProps(ownName.lang || void 0),
473
679
  children: ownName.text
474
680
  }
475
681
  ),
476
- stills.length > 0 && !player && /* @__PURE__ */ jsx(
682
+ stills.length > 0 && !player && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
477
683
  Placeholder,
478
684
  {
479
685
  instance,
@@ -485,12 +691,13 @@ const CanvasBody = (props) => {
485
691
  onToggle: togglePlaceholder,
486
692
  request: options == null ? void 0 : options.request
487
693
  }
488
- ),
694
+ ) }),
489
695
  surface && media && nearViewport && !showPlaceholder && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
490
696
  MediaBody,
491
697
  {
492
698
  media,
493
699
  request: options == null ? void 0 : options.request,
700
+ fillable,
494
701
  surface,
495
702
  instance,
496
703
  onElement: handleMediaElement,
@@ -499,7 +706,7 @@ const CanvasBody = (props) => {
499
706
  caption,
500
707
  navigable,
501
708
  fullscreen: mediaOnly && Boolean(controlsConfig == null ? void 0 : controlsConfig.fullPage),
502
- isFullscreen,
709
+ isFullscreen: withinFullscreen,
503
710
  onEnded,
504
711
  chapters,
505
712
  highlightedChapter,
@@ -522,10 +729,14 @@ const CanvasBody = (props) => {
522
729
  byFrame: scene.frames[frameKey(animated)],
523
730
  animationKey: animated.id,
524
731
  sceneVersion,
525
- autoplay: (_d = options == null ? void 0 : options.animation) == null ? void 0 : _d.autoplay,
526
- loop: (_e = options == null ? void 0 : options.animation) == null ? void 0 : _e.loop,
732
+ autoplay: (_e = options == null ? void 0 : options.animation) == null ? void 0 : _e.autoplay,
733
+ loop: (_f = options == null ? void 0 : options.animation) == null ? void 0 : _f.loop,
527
734
  onEnded,
528
- language
735
+ language,
736
+ duration: Number(animated.duration),
737
+ canvas: animated,
738
+ place: scene.placements[canvases.indexOf(animated)],
739
+ onItems: setFrameItems
529
740
  },
530
741
  animated.id
531
742
  ) }),
@@ -533,7 +744,7 @@ const CanvasBody = (props) => {
533
744
  hotspots.AnnotationState,
534
745
  {
535
746
  given: props,
536
- annotations: allAnnotations,
747
+ annotations: layered ?? allAnnotations,
537
748
  scene,
538
749
  renderer,
539
750
  sceneVersion,
@@ -545,10 +756,43 @@ const CanvasBody = (props) => {
545
756
  openImages: setImagesOpen,
546
757
  openMedia: setMediaOpenedFor,
547
758
  host: hostRef,
548
- onModel: setAnnotationModel
759
+ onModel: setAnnotationModel,
760
+ refind: props.refind ?? 0
549
761
  }
550
762
  ),
551
763
  loading && /* @__PURE__ */ jsx(Loading, { overlay: true }),
764
+ pickedPlace && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
765
+ PlaceBox,
766
+ {
767
+ id: `place-of-${instance}`,
768
+ open: pickOpen,
769
+ onClose: (restoreFocus) => {
770
+ var _a2;
771
+ setClosedPick(pickKey);
772
+ if (restoreFocus)
773
+ (_a2 = document.getElementById(pickedPlace.id)) == null ? void 0 : _a2.focus();
774
+ },
775
+ feature: pickedPlace.feature,
776
+ name: pickedPlace.name,
777
+ language
778
+ }
779
+ ) }),
780
+ places && placeShown && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
781
+ PlaceBox,
782
+ {
783
+ id: placeId,
784
+ open: placeOpen,
785
+ onClose: (restoreFocus) => {
786
+ var _a2;
787
+ setPlaceOpen(false);
788
+ if (restoreFocus)
789
+ (_a2 = document.getElementById(`place-${instance}`)) == null ? void 0 : _a2.focus();
790
+ },
791
+ feature: places.feature,
792
+ name: places.name,
793
+ language
794
+ }
795
+ ) }),
552
796
  hasCaption && /* @__PURE__ */ jsx(
553
797
  Caption,
554
798
  {
@@ -610,6 +854,7 @@ function canvasHandle(renderer, drawn, zoomToAnnotation) {
610
854
  };
611
855
  }
612
856
  const NO_FRAMES = [];
857
+ const NO_ITEMS = [];
613
858
  function toSceneImages(body, src, isTiledImage = false) {
614
859
  const bodies = Array.isArray(body) ? body : body ? [body] : [];
615
860
  if (bodies.length) {