@videojs/react 10.0.0-beta.1 → 10.0.0-beta.11

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 (468) hide show
  1. package/dist/default/icons/dist/react/default/captions-off.js +0 -1
  2. package/dist/default/icons/dist/react/default/captions-off.js.map +1 -1
  3. package/dist/default/icons/dist/react/default/captions-on.js +0 -1
  4. package/dist/default/icons/dist/react/default/captions-on.js.map +1 -1
  5. package/dist/default/icons/dist/react/default/fullscreen-enter.js +0 -1
  6. package/dist/default/icons/dist/react/default/fullscreen-enter.js.map +1 -1
  7. package/dist/default/icons/dist/react/default/fullscreen-exit.js +0 -1
  8. package/dist/default/icons/dist/react/default/fullscreen-exit.js.map +1 -1
  9. package/dist/default/icons/dist/react/default/pause.js +0 -1
  10. package/dist/default/icons/dist/react/default/pause.js.map +1 -1
  11. package/dist/default/icons/dist/react/default/pip-enter.js +33 -0
  12. package/dist/default/icons/dist/react/default/pip-enter.js.map +1 -0
  13. package/dist/default/icons/dist/react/default/pip-exit.js +33 -0
  14. package/dist/default/icons/dist/react/default/pip-exit.js.map +1 -0
  15. package/dist/default/icons/dist/react/default/play.js +0 -1
  16. package/dist/default/icons/dist/react/default/play.js.map +1 -1
  17. package/dist/default/icons/dist/react/default/restart.js +0 -1
  18. package/dist/default/icons/dist/react/default/restart.js.map +1 -1
  19. package/dist/default/icons/dist/react/default/seek.js +0 -1
  20. package/dist/default/icons/dist/react/default/seek.js.map +1 -1
  21. package/dist/default/icons/dist/react/default/spinner.js +0 -1
  22. package/dist/default/icons/dist/react/default/spinner.js.map +1 -1
  23. package/dist/default/icons/dist/react/default/volume-high.js +0 -1
  24. package/dist/default/icons/dist/react/default/volume-high.js.map +1 -1
  25. package/dist/default/icons/dist/react/default/volume-low.js +0 -1
  26. package/dist/default/icons/dist/react/default/volume-low.js.map +1 -1
  27. package/dist/default/icons/dist/react/default/volume-off.js +0 -1
  28. package/dist/default/icons/dist/react/default/volume-off.js.map +1 -1
  29. package/dist/default/icons/dist/react/minimal/captions-off.js +0 -1
  30. package/dist/default/icons/dist/react/minimal/captions-off.js.map +1 -1
  31. package/dist/default/icons/dist/react/minimal/captions-on.js +0 -1
  32. package/dist/default/icons/dist/react/minimal/captions-on.js.map +1 -1
  33. package/dist/default/icons/dist/react/minimal/fullscreen-enter.js +0 -1
  34. package/dist/default/icons/dist/react/minimal/fullscreen-enter.js.map +1 -1
  35. package/dist/default/icons/dist/react/minimal/fullscreen-exit.js +0 -1
  36. package/dist/default/icons/dist/react/minimal/fullscreen-exit.js.map +1 -1
  37. package/dist/default/icons/dist/react/minimal/pause.js +0 -1
  38. package/dist/default/icons/dist/react/minimal/pause.js.map +1 -1
  39. package/dist/default/icons/dist/react/minimal/pip-enter.js +37 -0
  40. package/dist/default/icons/dist/react/minimal/pip-enter.js.map +1 -0
  41. package/dist/default/icons/dist/react/minimal/pip-exit.js +37 -0
  42. package/dist/default/icons/dist/react/minimal/pip-exit.js.map +1 -0
  43. package/dist/default/icons/dist/react/minimal/play.js +0 -1
  44. package/dist/default/icons/dist/react/minimal/play.js.map +1 -1
  45. package/dist/default/icons/dist/react/minimal/restart.js +0 -1
  46. package/dist/default/icons/dist/react/minimal/restart.js.map +1 -1
  47. package/dist/default/icons/dist/react/minimal/seek.js +0 -1
  48. package/dist/default/icons/dist/react/minimal/seek.js.map +1 -1
  49. package/dist/default/icons/dist/react/minimal/spinner.js +0 -1
  50. package/dist/default/icons/dist/react/minimal/spinner.js.map +1 -1
  51. package/dist/default/icons/dist/react/minimal/volume-high.js +0 -1
  52. package/dist/default/icons/dist/react/minimal/volume-high.js.map +1 -1
  53. package/dist/default/icons/dist/react/minimal/volume-low.js +0 -1
  54. package/dist/default/icons/dist/react/minimal/volume-low.js.map +1 -1
  55. package/dist/default/icons/dist/react/minimal/volume-off.js +0 -1
  56. package/dist/default/icons/dist/react/minimal/volume-off.js.map +1 -1
  57. package/dist/default/index.js +9 -2
  58. package/dist/default/media/audio.js +3 -6
  59. package/dist/default/media/audio.js.map +1 -1
  60. package/dist/default/media/background-video/index.js +2 -2
  61. package/dist/default/media/background-video/index.js.map +1 -1
  62. package/dist/default/media/dash-video/index.js +21 -0
  63. package/dist/default/media/dash-video/index.js.map +1 -0
  64. package/dist/default/media/hls-video/index.js +3 -8
  65. package/dist/default/media/hls-video/index.js.map +1 -1
  66. package/dist/default/media/simple-hls-video/index.js +3 -7
  67. package/dist/default/media/simple-hls-video/index.js.map +1 -1
  68. package/dist/default/media/video.js +3 -6
  69. package/dist/default/media/video.js.map +1 -1
  70. package/dist/default/player/context.js +16 -10
  71. package/dist/default/player/context.js.map +1 -1
  72. package/dist/default/player/create-player.js +16 -2
  73. package/dist/default/player/create-player.js.map +1 -1
  74. package/dist/default/presets/audio/minimal-skin.css +237 -157
  75. package/dist/default/presets/audio/minimal-skin.js +136 -119
  76. package/dist/default/presets/audio/minimal-skin.js.map +1 -1
  77. package/dist/default/presets/audio/minimal-skin.tailwind.js +148 -131
  78. package/dist/default/presets/audio/minimal-skin.tailwind.js.map +1 -1
  79. package/dist/default/presets/audio/skin.css +234 -153
  80. package/dist/default/presets/audio/skin.js +129 -112
  81. package/dist/default/presets/audio/skin.js.map +1 -1
  82. package/dist/default/presets/audio/skin.tailwind.js +141 -125
  83. package/dist/default/presets/audio/skin.tailwind.js.map +1 -1
  84. package/dist/default/presets/{video/error-dialog.js → error-dialog.js} +18 -18
  85. package/dist/default/presets/error-dialog.js.map +1 -0
  86. package/dist/default/presets/video/minimal-skin.css +486 -301
  87. package/dist/default/presets/video/minimal-skin.js +127 -97
  88. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  89. package/dist/default/presets/video/minimal-skin.tailwind.js +141 -112
  90. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  91. package/dist/default/presets/video/skin.css +484 -289
  92. package/dist/default/presets/video/skin.js +121 -94
  93. package/dist/default/presets/video/skin.js.map +1 -1
  94. package/dist/default/presets/video/skin.tailwind.js +135 -109
  95. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  96. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +9 -20
  97. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  98. package/dist/default/skins/dist/default/default/tailwind/components/button.js +4 -3
  99. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  100. package/dist/default/skins/dist/default/default/tailwind/components/controls.js +1 -1
  101. package/dist/default/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  102. package/dist/default/skins/dist/default/default/tailwind/components/error.js +3 -3
  103. package/dist/default/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  104. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js +1 -1
  105. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  106. package/dist/default/skins/dist/default/default/tailwind/components/popup.js +3 -3
  107. package/dist/default/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  108. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +16 -0
  109. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  110. package/dist/default/skins/dist/default/default/tailwind/components/preview.js +13 -0
  111. package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  112. package/dist/default/skins/dist/default/default/tailwind/components/root.js +1 -1
  113. package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  114. package/dist/default/skins/dist/default/default/tailwind/components/seek.js +1 -1
  115. package/dist/default/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  116. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +1 -1
  117. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  118. package/dist/default/skins/dist/default/default/tailwind/components/surface.js +1 -1
  119. package/dist/default/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  120. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +26 -15
  121. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  122. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +10 -18
  123. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  124. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +4 -3
  125. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  126. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
  127. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  128. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js +3 -3
  129. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js.map +1 -1
  130. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
  131. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  132. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +4 -3
  133. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  134. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +16 -0
  135. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  136. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js +14 -0
  137. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  138. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +1 -1
  139. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  140. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js +1 -1
  141. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  142. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
  143. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  144. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js +1 -1
  145. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  146. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +31 -15
  147. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  148. package/dist/{dev/skins/dist/default/default/tailwind/components → default/skins/dist/default/shared/tailwind}/icon-state.js +6 -1
  149. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
  150. package/dist/default/ui/alert-dialog/alert-dialog-root.js +2 -2
  151. package/dist/default/ui/buffering-indicator/buffering-indicator.js +3 -1
  152. package/dist/default/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  153. package/dist/default/ui/captions-button/captions-button.js +1 -1
  154. package/dist/default/ui/controls/controls-root.js +1 -1
  155. package/dist/default/ui/fullscreen-button/fullscreen-button.js +1 -1
  156. package/dist/default/ui/hooks/use-slider.js +1 -1
  157. package/dist/default/ui/mute-button/mute-button.js +1 -1
  158. package/dist/default/ui/pip-button/pip-button.js +1 -1
  159. package/dist/default/ui/play-button/play-button.js +1 -1
  160. package/dist/default/ui/playback-rate-button/playback-rate-button.js +1 -1
  161. package/dist/default/ui/popover/popover-popup.js +11 -2
  162. package/dist/default/ui/popover/popover-popup.js.map +1 -1
  163. package/dist/default/ui/popover/popover-root.js +2 -2
  164. package/dist/default/ui/poster/poster.js +1 -1
  165. package/dist/default/ui/seek-button/seek-button.js +1 -1
  166. package/dist/default/ui/slider/slider-root.js +1 -1
  167. package/dist/default/ui/thumbnail/index.js +3 -0
  168. package/dist/default/ui/thumbnail/thumbnail.js +1 -1
  169. package/dist/default/ui/time/time-value.js +1 -1
  170. package/dist/default/ui/time-slider/time-slider-root.js +3 -3
  171. package/dist/default/ui/time-slider/time-slider-root.js.map +1 -1
  172. package/dist/default/ui/tooltip/tooltip-popup.js +12 -3
  173. package/dist/default/ui/tooltip/tooltip-popup.js.map +1 -1
  174. package/dist/default/ui/tooltip/tooltip-provider.js +1 -1
  175. package/dist/default/ui/tooltip/tooltip-root.js +3 -2
  176. package/dist/default/ui/tooltip/tooltip-root.js.map +1 -1
  177. package/dist/default/ui/volume-slider/volume-slider-root.js +4 -4
  178. package/dist/default/ui/volume-slider/volume-slider-root.js.map +1 -1
  179. package/dist/default/utils/use-destroy.js +12 -4
  180. package/dist/default/utils/use-destroy.js.map +1 -1
  181. package/dist/default/utils/use-media-instance.js +24 -0
  182. package/dist/default/utils/use-media-instance.js.map +1 -0
  183. package/dist/default/utils/use-render.js +5 -1
  184. package/dist/default/utils/use-render.js.map +1 -1
  185. package/dist/dev/icons/dist/react/default/captions-off.js +0 -1
  186. package/dist/dev/icons/dist/react/default/captions-off.js.map +1 -1
  187. package/dist/dev/icons/dist/react/default/captions-on.js +0 -1
  188. package/dist/dev/icons/dist/react/default/captions-on.js.map +1 -1
  189. package/dist/dev/icons/dist/react/default/fullscreen-enter.js +0 -1
  190. package/dist/dev/icons/dist/react/default/fullscreen-enter.js.map +1 -1
  191. package/dist/dev/icons/dist/react/default/fullscreen-exit.js +0 -1
  192. package/dist/dev/icons/dist/react/default/fullscreen-exit.js.map +1 -1
  193. package/dist/dev/icons/dist/react/default/pause.js +0 -1
  194. package/dist/dev/icons/dist/react/default/pause.js.map +1 -1
  195. package/dist/dev/icons/dist/react/default/pip-enter.js +33 -0
  196. package/dist/dev/icons/dist/react/default/pip-enter.js.map +1 -0
  197. package/dist/dev/icons/dist/react/default/pip-exit.js +33 -0
  198. package/dist/dev/icons/dist/react/default/pip-exit.js.map +1 -0
  199. package/dist/dev/icons/dist/react/default/play.js +0 -1
  200. package/dist/dev/icons/dist/react/default/play.js.map +1 -1
  201. package/dist/dev/icons/dist/react/default/restart.js +0 -1
  202. package/dist/dev/icons/dist/react/default/restart.js.map +1 -1
  203. package/dist/dev/icons/dist/react/default/seek.js +0 -1
  204. package/dist/dev/icons/dist/react/default/seek.js.map +1 -1
  205. package/dist/dev/icons/dist/react/default/spinner.js +0 -1
  206. package/dist/dev/icons/dist/react/default/spinner.js.map +1 -1
  207. package/dist/dev/icons/dist/react/default/volume-high.js +0 -1
  208. package/dist/dev/icons/dist/react/default/volume-high.js.map +1 -1
  209. package/dist/dev/icons/dist/react/default/volume-low.js +0 -1
  210. package/dist/dev/icons/dist/react/default/volume-low.js.map +1 -1
  211. package/dist/dev/icons/dist/react/default/volume-off.js +0 -1
  212. package/dist/dev/icons/dist/react/default/volume-off.js.map +1 -1
  213. package/dist/dev/icons/dist/react/minimal/captions-off.js +0 -1
  214. package/dist/dev/icons/dist/react/minimal/captions-off.js.map +1 -1
  215. package/dist/dev/icons/dist/react/minimal/captions-on.js +0 -1
  216. package/dist/dev/icons/dist/react/minimal/captions-on.js.map +1 -1
  217. package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js +0 -1
  218. package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js.map +1 -1
  219. package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js +0 -1
  220. package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js.map +1 -1
  221. package/dist/dev/icons/dist/react/minimal/pause.js +0 -1
  222. package/dist/dev/icons/dist/react/minimal/pause.js.map +1 -1
  223. package/dist/dev/icons/dist/react/minimal/pip-enter.js +37 -0
  224. package/dist/dev/icons/dist/react/minimal/pip-enter.js.map +1 -0
  225. package/dist/dev/icons/dist/react/minimal/pip-exit.js +37 -0
  226. package/dist/dev/icons/dist/react/minimal/pip-exit.js.map +1 -0
  227. package/dist/dev/icons/dist/react/minimal/play.js +0 -1
  228. package/dist/dev/icons/dist/react/minimal/play.js.map +1 -1
  229. package/dist/dev/icons/dist/react/minimal/restart.js +0 -1
  230. package/dist/dev/icons/dist/react/minimal/restart.js.map +1 -1
  231. package/dist/dev/icons/dist/react/minimal/seek.js +0 -1
  232. package/dist/dev/icons/dist/react/minimal/seek.js.map +1 -1
  233. package/dist/dev/icons/dist/react/minimal/spinner.js +0 -1
  234. package/dist/dev/icons/dist/react/minimal/spinner.js.map +1 -1
  235. package/dist/dev/icons/dist/react/minimal/volume-high.js +0 -1
  236. package/dist/dev/icons/dist/react/minimal/volume-high.js.map +1 -1
  237. package/dist/dev/icons/dist/react/minimal/volume-low.js +0 -1
  238. package/dist/dev/icons/dist/react/minimal/volume-low.js.map +1 -1
  239. package/dist/dev/icons/dist/react/minimal/volume-off.js +0 -1
  240. package/dist/dev/icons/dist/react/minimal/volume-off.js.map +1 -1
  241. package/dist/dev/index.d.ts +9 -2
  242. package/dist/dev/index.js +9 -2
  243. package/dist/dev/media/audio.d.ts.map +1 -1
  244. package/dist/dev/media/audio.js +3 -6
  245. package/dist/dev/media/audio.js.map +1 -1
  246. package/dist/dev/media/background-video/index.js +2 -2
  247. package/dist/dev/media/background-video/index.js.map +1 -1
  248. package/dist/dev/media/dash-video/index.d.ts +11 -0
  249. package/dist/dev/media/dash-video/index.d.ts.map +1 -0
  250. package/dist/dev/media/dash-video/index.js +21 -0
  251. package/dist/dev/media/dash-video/index.js.map +1 -0
  252. package/dist/dev/media/hls-video/index.d.ts.map +1 -1
  253. package/dist/dev/media/hls-video/index.js +3 -8
  254. package/dist/dev/media/hls-video/index.js.map +1 -1
  255. package/dist/dev/media/simple-hls-video/index.d.ts.map +1 -1
  256. package/dist/dev/media/simple-hls-video/index.js +3 -7
  257. package/dist/dev/media/simple-hls-video/index.js.map +1 -1
  258. package/dist/dev/media/video.d.ts.map +1 -1
  259. package/dist/dev/media/video.js +3 -6
  260. package/dist/dev/media/video.js.map +1 -1
  261. package/dist/dev/player/context.d.ts +20 -4
  262. package/dist/dev/player/context.d.ts.map +1 -1
  263. package/dist/dev/player/context.js +16 -10
  264. package/dist/dev/player/context.js.map +1 -1
  265. package/dist/dev/player/create-player.js +16 -2
  266. package/dist/dev/player/create-player.js.map +1 -1
  267. package/dist/dev/presets/audio/minimal-skin.css +237 -157
  268. package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -1
  269. package/dist/dev/presets/audio/minimal-skin.js +136 -119
  270. package/dist/dev/presets/audio/minimal-skin.js.map +1 -1
  271. package/dist/dev/presets/audio/minimal-skin.tailwind.d.ts.map +1 -1
  272. package/dist/dev/presets/audio/minimal-skin.tailwind.js +148 -131
  273. package/dist/dev/presets/audio/minimal-skin.tailwind.js.map +1 -1
  274. package/dist/dev/presets/audio/skin.css +234 -153
  275. package/dist/dev/presets/audio/skin.d.ts.map +1 -1
  276. package/dist/dev/presets/audio/skin.js +129 -112
  277. package/dist/dev/presets/audio/skin.js.map +1 -1
  278. package/dist/dev/presets/audio/skin.tailwind.d.ts.map +1 -1
  279. package/dist/dev/presets/audio/skin.tailwind.js +141 -125
  280. package/dist/dev/presets/audio/skin.tailwind.js.map +1 -1
  281. package/dist/dev/presets/{video/error-dialog.js → error-dialog.js} +18 -18
  282. package/dist/dev/presets/error-dialog.js.map +1 -0
  283. package/dist/dev/presets/types.d.ts +6 -1
  284. package/dist/dev/presets/types.d.ts.map +1 -1
  285. package/dist/dev/presets/video/minimal-skin.css +486 -301
  286. package/dist/dev/presets/video/minimal-skin.d.ts +2 -2
  287. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
  288. package/dist/dev/presets/video/minimal-skin.js +127 -97
  289. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  290. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
  291. package/dist/dev/presets/video/minimal-skin.tailwind.js +141 -112
  292. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  293. package/dist/dev/presets/video/skin.css +484 -289
  294. package/dist/dev/presets/video/skin.d.ts +2 -2
  295. package/dist/dev/presets/video/skin.d.ts.map +1 -1
  296. package/dist/dev/presets/video/skin.js +121 -94
  297. package/dist/dev/presets/video/skin.js.map +1 -1
  298. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
  299. package/dist/dev/presets/video/skin.tailwind.js +135 -109
  300. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  301. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +9 -20
  302. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  303. package/dist/dev/skins/dist/default/default/tailwind/components/button.js +4 -3
  304. package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  305. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js +1 -1
  306. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  307. package/dist/dev/skins/dist/default/default/tailwind/components/error.js +3 -3
  308. package/dist/dev/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  309. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js +1 -1
  310. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  311. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +3 -3
  312. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  313. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +16 -0
  314. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  315. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js +13 -0
  316. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  317. package/dist/dev/skins/dist/default/default/tailwind/components/root.js +1 -1
  318. package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  319. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js +1 -1
  320. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  321. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +1 -1
  322. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  323. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js +1 -1
  324. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  325. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +26 -15
  326. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  327. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +10 -18
  328. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  329. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +4 -3
  330. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  331. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
  332. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  333. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js +3 -3
  334. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js.map +1 -1
  335. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
  336. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  337. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +4 -3
  338. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  339. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +16 -0
  340. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  341. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js +14 -0
  342. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  343. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +1 -1
  344. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  345. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js +1 -1
  346. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  347. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
  348. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  349. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js +1 -1
  350. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  351. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +31 -15
  352. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  353. package/dist/{default/skins/dist/default/default/tailwind/components → dev/skins/dist/default/shared/tailwind}/icon-state.js +6 -1
  354. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
  355. package/dist/dev/ui/alert-dialog/alert-dialog-close.d.ts +1 -1
  356. package/dist/dev/ui/alert-dialog/alert-dialog-description.d.ts +1 -1
  357. package/dist/dev/ui/alert-dialog/alert-dialog-popup.d.ts +1 -1
  358. package/dist/dev/ui/alert-dialog/alert-dialog-root.d.ts +1 -1
  359. package/dist/dev/ui/alert-dialog/alert-dialog-root.js +2 -2
  360. package/dist/dev/ui/alert-dialog/alert-dialog-title.d.ts +1 -1
  361. package/dist/dev/ui/alert-dialog/context.d.ts +2 -3
  362. package/dist/dev/ui/alert-dialog/context.d.ts.map +1 -1
  363. package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts +1 -1
  364. package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts.map +1 -1
  365. package/dist/dev/ui/buffering-indicator/buffering-indicator.js +3 -1
  366. package/dist/dev/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  367. package/dist/dev/ui/captions-button/captions-button.d.ts +1 -1
  368. package/dist/dev/ui/captions-button/captions-button.js +1 -1
  369. package/dist/dev/ui/controls/controls-group.d.ts +1 -1
  370. package/dist/dev/ui/controls/controls-root.d.ts +1 -1
  371. package/dist/dev/ui/controls/controls-root.js +1 -1
  372. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts +1 -1
  373. package/dist/dev/ui/fullscreen-button/fullscreen-button.js +1 -1
  374. package/dist/dev/ui/hooks/use-slider.d.ts +1 -1
  375. package/dist/dev/ui/hooks/use-slider.js +1 -1
  376. package/dist/dev/ui/mute-button/mute-button.d.ts +1 -1
  377. package/dist/dev/ui/mute-button/mute-button.js +1 -1
  378. package/dist/dev/ui/pip-button/pip-button.d.ts +1 -1
  379. package/dist/dev/ui/pip-button/pip-button.js +1 -1
  380. package/dist/dev/ui/play-button/play-button.d.ts +1 -1
  381. package/dist/dev/ui/play-button/play-button.js +1 -1
  382. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts +1 -1
  383. package/dist/dev/ui/playback-rate-button/playback-rate-button.js +1 -1
  384. package/dist/dev/ui/popover/context.d.ts +2 -3
  385. package/dist/dev/ui/popover/context.d.ts.map +1 -1
  386. package/dist/dev/ui/popover/popover-arrow.d.ts +1 -1
  387. package/dist/dev/ui/popover/popover-popup.d.ts +1 -1
  388. package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -1
  389. package/dist/dev/ui/popover/popover-popup.js +11 -2
  390. package/dist/dev/ui/popover/popover-popup.js.map +1 -1
  391. package/dist/dev/ui/popover/popover-root.d.ts +1 -1
  392. package/dist/dev/ui/popover/popover-root.js +2 -2
  393. package/dist/dev/ui/popover/popover-trigger.d.ts +1 -1
  394. package/dist/dev/ui/poster/poster.d.ts +1 -1
  395. package/dist/dev/ui/poster/poster.js +1 -1
  396. package/dist/dev/ui/seek-button/seek-button.d.ts +1 -1
  397. package/dist/dev/ui/seek-button/seek-button.js +1 -1
  398. package/dist/dev/ui/slider/slider-buffer.d.ts +1 -1
  399. package/dist/dev/ui/slider/slider-fill.d.ts +1 -1
  400. package/dist/dev/ui/slider/slider-preview.d.ts +1 -1
  401. package/dist/dev/ui/slider/slider-root.d.ts +1 -1
  402. package/dist/dev/ui/slider/slider-root.js +1 -1
  403. package/dist/dev/ui/slider/slider-thumb.d.ts +1 -1
  404. package/dist/dev/ui/slider/slider-thumbnail.d.ts +1 -1
  405. package/dist/dev/ui/slider/slider-track.d.ts +1 -1
  406. package/dist/dev/ui/slider/slider-value.d.ts +1 -1
  407. package/dist/dev/ui/thumbnail/index.d.ts +2 -0
  408. package/dist/dev/ui/thumbnail/index.js +3 -0
  409. package/dist/dev/ui/thumbnail/thumbnail.d.ts +1 -1
  410. package/dist/dev/ui/thumbnail/thumbnail.js +1 -1
  411. package/dist/dev/ui/time/time-value.d.ts +1 -1
  412. package/dist/dev/ui/time/time-value.js +1 -1
  413. package/dist/dev/ui/time-slider/time-slider-root.d.ts +1 -1
  414. package/dist/dev/ui/time-slider/time-slider-root.js +3 -3
  415. package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -1
  416. package/dist/dev/ui/tooltip/context.d.ts +2 -3
  417. package/dist/dev/ui/tooltip/context.d.ts.map +1 -1
  418. package/dist/dev/ui/tooltip/tooltip-arrow.d.ts +1 -1
  419. package/dist/dev/ui/tooltip/tooltip-popup.d.ts +1 -1
  420. package/dist/dev/ui/tooltip/tooltip-popup.d.ts.map +1 -1
  421. package/dist/dev/ui/tooltip/tooltip-popup.js +12 -3
  422. package/dist/dev/ui/tooltip/tooltip-popup.js.map +1 -1
  423. package/dist/dev/ui/tooltip/tooltip-provider.d.ts +1 -1
  424. package/dist/dev/ui/tooltip/tooltip-provider.js +1 -1
  425. package/dist/dev/ui/tooltip/tooltip-root.d.ts +1 -1
  426. package/dist/dev/ui/tooltip/tooltip-root.d.ts.map +1 -1
  427. package/dist/dev/ui/tooltip/tooltip-root.js +3 -2
  428. package/dist/dev/ui/tooltip/tooltip-root.js.map +1 -1
  429. package/dist/dev/ui/tooltip/tooltip-trigger.d.ts +1 -1
  430. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts +1 -1
  431. package/dist/dev/ui/volume-slider/volume-slider-root.js +4 -4
  432. package/dist/dev/ui/volume-slider/volume-slider-root.js.map +1 -1
  433. package/dist/dev/utils/attach-media-element.d.ts +9 -0
  434. package/dist/dev/utils/attach-media-element.d.ts.map +1 -0
  435. package/dist/dev/utils/media-props.d.ts +307 -0
  436. package/dist/dev/utils/media-props.d.ts.map +1 -0
  437. package/dist/dev/utils/use-composed-refs.d.ts +29 -0
  438. package/dist/dev/utils/use-composed-refs.d.ts.map +1 -0
  439. package/dist/dev/utils/use-destroy.d.ts +22 -0
  440. package/dist/dev/utils/use-destroy.d.ts.map +1 -0
  441. package/dist/dev/utils/use-destroy.js +12 -4
  442. package/dist/dev/utils/use-destroy.js.map +1 -1
  443. package/dist/dev/utils/use-latest-ref.d.ts +18 -0
  444. package/dist/dev/utils/use-latest-ref.d.ts.map +1 -0
  445. package/dist/dev/utils/use-media-instance.d.ts +16 -0
  446. package/dist/dev/utils/use-media-instance.d.ts.map +1 -0
  447. package/dist/dev/utils/use-media-instance.js +24 -0
  448. package/dist/dev/utils/use-media-instance.js.map +1 -0
  449. package/dist/dev/utils/use-render.d.ts.map +1 -1
  450. package/dist/dev/utils/use-render.js +5 -1
  451. package/dist/dev/utils/use-render.js.map +1 -1
  452. package/package.json +9 -9
  453. package/dist/default/icons/dist/react/default/pip.js +0 -27
  454. package/dist/default/icons/dist/react/default/pip.js.map +0 -1
  455. package/dist/default/icons/dist/react/minimal/pip.js +0 -27
  456. package/dist/default/icons/dist/react/minimal/pip.js.map +0 -1
  457. package/dist/default/presets/video/error-dialog.js.map +0 -1
  458. package/dist/default/skins/dist/default/default/tailwind/components/icon-state.js.map +0 -1
  459. package/dist/default/skins/dist/default/minimal/tailwind/components/icon-state.js +0 -29
  460. package/dist/default/skins/dist/default/minimal/tailwind/components/icon-state.js.map +0 -1
  461. package/dist/dev/icons/dist/react/default/pip.js +0 -27
  462. package/dist/dev/icons/dist/react/default/pip.js.map +0 -1
  463. package/dist/dev/icons/dist/react/minimal/pip.js +0 -27
  464. package/dist/dev/icons/dist/react/minimal/pip.js.map +0 -1
  465. package/dist/dev/presets/video/error-dialog.js.map +0 -1
  466. package/dist/dev/skins/dist/default/default/tailwind/components/icon-state.js.map +0 -1
  467. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon-state.js +0 -29
  468. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon-state.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import { createMediaButton } from "../create-media-button.js";
4
- import { selectPlaybackRate } from "@videojs/core/dom";
5
4
  import { PlaybackRateButtonCore, PlaybackRateButtonDataAttrs } from "@videojs/core";
5
+ import { selectPlaybackRate } from "@videojs/core/dom";
6
6
 
7
7
  //#region src/ui/playback-rate-button/playback-rate-button.tsx
8
8
  /**
@@ -1,12 +1,11 @@
1
+ import { PopoverCore, StateAttrMap } from "@videojs/core";
1
2
  import { PopoverApi } from "@videojs/core/dom";
2
- import { PopoverCore, StateAttrMap as StateAttrMap$1 } from "@videojs/core";
3
-
4
3
  //#region src/ui/popover/context.d.ts
5
4
  interface PopoverContextValue {
6
5
  core: PopoverCore;
7
6
  popover: PopoverApi;
8
7
  state: PopoverCore.State;
9
- stateAttrMap: StateAttrMap$1<PopoverCore.State>;
8
+ stateAttrMap: StateAttrMap<PopoverCore.State>;
10
9
  anchorName: string;
11
10
  popupId: string;
12
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","names":[],"sources":["../../../../src/ui/popover/context.tsx"],"mappings":";;;;UAMiB,mBAAA;EACf,IAAA,EAAM,WAAA;EACN,OAAA,EAAS,UAAA;EACT,KAAA,EAAO,WAAA,CAAY,KAAA;EACnB,YAAA,EAAc,cAAA,CAAa,WAAA,CAAY,KAAA;EACvC,UAAA;EACA,OAAA;AAAA;AAAA,iBAOc,iBAAA,CAAA,GAAqB,mBAAA"}
1
+ {"version":3,"file":"context.d.ts","names":[],"sources":["../../../../src/ui/popover/context.tsx"],"mappings":";;;UAMiB,mBAAA;EACf,IAAA,EAAM,WAAA;EACN,OAAA,EAAS,UAAA;EACT,KAAA,EAAO,WAAA,CAAY,KAAA;EACnB,YAAA,EAAc,YAAA,CAAa,WAAA,CAAY,KAAA;EACvC,UAAA;EACA,OAAA;AAAA;AAAA,iBAOc,iBAAA,CAAA,GAAqB,mBAAA"}
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { PopoverState } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/popover/popover-arrow.d.ts
6
6
  interface PopoverArrowProps extends UIComponentProps<'div', PopoverState> {}
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { PopoverState } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/popover/popover-popup.d.ts
6
6
  interface PopoverPopupProps extends UIComponentProps<'div', PopoverState> {}
@@ -1 +1 @@
1
- {"version":3,"file":"popover-popup.d.ts","names":[],"sources":["../../../../src/ui/popover/popover-popup.tsx"],"mappings":";;;;;UAaiB,iBAAA,SAA0B,gBAAA,QAAwB,YAAA;;cAKtD,YAAA,EAAY,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,iBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBA6GR,YAAA;EAAA,KACH,KAAA,GAAQ,iBAAA;EAAA,KACR,KAAA,GAAQ,YAAA;AAAA"}
1
+ {"version":3,"file":"popover-popup.d.ts","names":[],"sources":["../../../../src/ui/popover/popover-popup.tsx"],"mappings":";;;;;UAaiB,iBAAA,SAA0B,gBAAA,QAAwB,YAAA;;cAKtD,YAAA,EAAY,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,iBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAkIR,YAAA;EAAA,KACH,KAAA,GAAQ,iBAAA;EAAA,KACR,KAAA,GAAQ,YAAA;AAAA"}
@@ -3,7 +3,7 @@
3
3
  import { useComposedRefs } from "../../utils/use-composed-refs.js";
4
4
  import { renderElement } from "../../utils/use-render.js";
5
5
  import { usePopoverContext } from "./context.js";
6
- import { getAnchorPositionStyle, resolveOffsets } from "@videojs/core/dom";
6
+ import { getAnchorPositionStyle, getPopupPositionRect, resolveOffsets } from "@videojs/core/dom";
7
7
  import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
8
8
  import { supportsAnchorPositioning } from "@videojs/utils/dom";
9
9
 
@@ -41,14 +41,22 @@ const PopoverPopup = forwardRef(function PopoverPopup({ render, className, style
41
41
  const triggerEl = popover.triggerElement;
42
42
  const popupEl = internalRef.current;
43
43
  if (!triggerEl || !popupEl) return;
44
- setManualStyle(getAnchorPositionStyle(anchorName, posOpts, triggerEl.getBoundingClientRect(), popupEl.getBoundingClientRect(), document.documentElement.getBoundingClientRect(), resolveOffsets(popupEl)));
44
+ setManualStyle(getAnchorPositionStyle(anchorName, posOpts, triggerEl.getBoundingClientRect(), getPopupPositionRect(popupEl), document.documentElement.getBoundingClientRect(), resolveOffsets(popupEl)));
45
45
  }
46
46
  measure();
47
+ const triggerEl = popover.triggerElement;
48
+ const popupEl = internalRef.current;
47
49
  let rafId = 0;
48
50
  function reposition() {
49
51
  cancelAnimationFrame(rafId);
50
52
  rafId = requestAnimationFrame(measure);
51
53
  }
54
+ reposition();
55
+ const resizeObserver = typeof ResizeObserver === "function" ? new ResizeObserver(() => {
56
+ reposition();
57
+ }) : null;
58
+ if (triggerEl && resizeObserver) resizeObserver.observe(triggerEl);
59
+ if (popupEl && resizeObserver) resizeObserver.observe(popupEl);
52
60
  window.addEventListener("scroll", reposition, {
53
61
  capture: true,
54
62
  passive: true
@@ -56,6 +64,7 @@ const PopoverPopup = forwardRef(function PopoverPopup({ render, className, style
56
64
  window.addEventListener("resize", reposition);
57
65
  return () => {
58
66
  cancelAnimationFrame(rafId);
67
+ resizeObserver?.disconnect();
59
68
  window.removeEventListener("scroll", reposition, true);
60
69
  window.removeEventListener("resize", reposition);
61
70
  };
@@ -1 +1 @@
1
- {"version":3,"file":"popover-popup.js","names":[],"sources":["../../../../src/ui/popover/popover-popup.tsx"],"sourcesContent":["'use client';\n\nimport type { PopoverState } from '@videojs/core';\nimport { getAnchorPositionStyle, resolveOffsets } from '@videojs/core/dom';\nimport { supportsAnchorPositioning } from '@videojs/utils/dom';\nimport type { CSSProperties } from 'react';\nimport { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { useComposedRefs } from '../../utils/use-composed-refs';\nimport { renderElement } from '../../utils/use-render';\nimport { usePopoverContext } from './context';\n\nexport interface PopoverPopupProps extends UIComponentProps<'div', PopoverState> {}\n\nconst POPOVER_RESET: CSSProperties = { position: 'fixed', inset: 'auto', margin: 0 };\n\n/** Container for the popover content. Positioned relative to the trigger using CSS anchor positioning with a JavaScript fallback. */\nexport const PopoverPopup = forwardRef<HTMLDivElement, PopoverPopupProps>(function PopoverPopup(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { core, popover, state, stateAttrMap, anchorName, popupId } = usePopoverContext();\n const internalRef = useRef<HTMLDivElement>(null);\n\n const popupRef = useCallback(\n (el: HTMLDivElement | null) => {\n popover.setPopupElement(el);\n if (el && supportsAnchorPositioning()) {\n el.style.setProperty('position-anchor', `--${anchorName}`);\n }\n },\n [popover, anchorName]\n );\n\n const composedRef = useComposedRefs(forwardedRef, popupRef, internalRef);\n\n // --- Positioning ---\n\n const posOpts = useMemo(() => ({ side: state.side, align: state.align }), [state.side, state.align]);\n\n // CSS Anchor Positioning — computed from state, no measurement needed.\n // `position-anchor` is set imperatively in the ref callback above\n // because React's style prop silently drops unrecognised CSS properties.\n const anchorStyle = useMemo(() => {\n if (!supportsAnchorPositioning()) return null;\n const { positionAnchor: _, ...rest } = getAnchorPositionStyle(anchorName, posOpts);\n return rest as CSSProperties;\n }, [anchorName, posOpts]);\n\n // Manual fallback — measure rects after layout, before paint.\n const [manualStyle, setManualStyle] = useState<CSSProperties | null>(null);\n\n useLayoutEffect(() => {\n if (supportsAnchorPositioning()) return;\n if (!state.open) {\n setManualStyle(null);\n return;\n }\n\n function measure(): void {\n const triggerEl = popover.triggerElement;\n const popupEl = internalRef.current;\n if (!triggerEl || !popupEl) return;\n\n const triggerRect = triggerEl.getBoundingClientRect();\n const popupRect = popupEl.getBoundingClientRect();\n const boundaryRect = document.documentElement.getBoundingClientRect();\n const offsets = resolveOffsets(popupEl);\n\n setManualStyle(\n getAnchorPositionStyle(anchorName, posOpts, triggerRect, popupRect, boundaryRect, offsets) as CSSProperties\n );\n }\n\n measure();\n\n // Recompute on scroll/resize so the popover tracks its trigger.\n let rafId = 0;\n function reposition(): void {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(measure);\n }\n\n window.addEventListener('scroll', reposition, { capture: true, passive: true });\n window.addEventListener('resize', reposition);\n\n return () => {\n cancelAnimationFrame(rafId);\n window.removeEventListener('scroll', reposition, true);\n window.removeEventListener('resize', reposition);\n };\n }, [state.open, anchorName, posOpts, popover]);\n\n // Anchor path uses computed styles; manual path uses measured styles;\n // fallback resets UA [popover] defaults until positioning is computed.\n const positioningStyle = anchorStyle ?? manualStyle ?? POPOVER_RESET;\n\n // --- Visibility ---\n\n if (!state.open) {\n return null;\n }\n\n // Remap DOM focus events to React synthetic event names.\n const { onFocusOut, ...restPopupProps } = popover.popupProps;\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: composedRef,\n props: [\n {\n id: popupId,\n style: positioningStyle,\n ...core.getPopupAttrs(state),\n },\n { ...restPopupProps, onBlur: onFocusOut },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace PopoverPopup {\n export type Props = PopoverPopupProps;\n export type State = PopoverState;\n}\n"],"mappings":";;;;;;;;;;AAeA,MAAM,gBAA+B;CAAE,UAAU;CAAS,OAAO;CAAQ,QAAQ;CAAG;;AAGpF,MAAa,eAAe,WAA8C,SAAS,aACjF,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,MAAM,SAAS,OAAO,cAAc,YAAY,YAAY,mBAAmB;CACvF,MAAM,cAAc,OAAuB,KAAK;CAYhD,MAAM,cAAc,gBAAgB,cAVnB,aACd,OAA8B;AAC7B,UAAQ,gBAAgB,GAAG;AAC3B,MAAI,MAAM,2BAA2B,CACnC,IAAG,MAAM,YAAY,mBAAmB,KAAK,aAAa;IAG9D,CAAC,SAAS,WAAW,CACtB,EAE2D,YAAY;CAIxE,MAAM,UAAU,eAAe;EAAE,MAAM,MAAM;EAAM,OAAO,MAAM;EAAO,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,CAAC;CAKpG,MAAM,cAAc,cAAc;AAChC,MAAI,CAAC,2BAA2B,CAAE,QAAO;EACzC,MAAM,EAAE,gBAAgB,GAAG,GAAG,SAAS,uBAAuB,YAAY,QAAQ;AAClF,SAAO;IACN,CAAC,YAAY,QAAQ,CAAC;CAGzB,MAAM,CAAC,aAAa,kBAAkB,SAA+B,KAAK;AAE1E,uBAAsB;AACpB,MAAI,2BAA2B,CAAE;AACjC,MAAI,CAAC,MAAM,MAAM;AACf,kBAAe,KAAK;AACpB;;EAGF,SAAS,UAAgB;GACvB,MAAM,YAAY,QAAQ;GAC1B,MAAM,UAAU,YAAY;AAC5B,OAAI,CAAC,aAAa,CAAC,QAAS;AAO5B,kBACE,uBAAuB,YAAY,SANjB,UAAU,uBAAuB,EACnC,QAAQ,uBAAuB,EAC5B,SAAS,gBAAgB,uBAAuB,EACrD,eAAe,QAAQ,CAGqD,CAC3F;;AAGH,WAAS;EAGT,IAAI,QAAQ;EACZ,SAAS,aAAmB;AAC1B,wBAAqB,MAAM;AAC3B,WAAQ,sBAAsB,QAAQ;;AAGxC,SAAO,iBAAiB,UAAU,YAAY;GAAE,SAAS;GAAM,SAAS;GAAM,CAAC;AAC/E,SAAO,iBAAiB,UAAU,WAAW;AAE7C,eAAa;AACX,wBAAqB,MAAM;AAC3B,UAAO,oBAAoB,UAAU,YAAY,KAAK;AACtD,UAAO,oBAAoB,UAAU,WAAW;;IAEjD;EAAC,MAAM;EAAM;EAAY;EAAS;EAAQ,CAAC;CAI9C,MAAM,mBAAmB,eAAe,eAAe;AAIvD,KAAI,CAAC,MAAM,KACT,QAAO;CAIT,MAAM,EAAE,YAAY,GAAG,mBAAmB,QAAQ;AAElD,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK;EACL,OAAO;GACL;IACE,IAAI;IACJ,OAAO;IACP,GAAG,KAAK,cAAc,MAAM;IAC7B;GACD;IAAE,GAAG;IAAgB,QAAQ;IAAY;GACzC;GACD;EACF,CACF;EACD"}
1
+ {"version":3,"file":"popover-popup.js","names":[],"sources":["../../../../src/ui/popover/popover-popup.tsx"],"sourcesContent":["'use client';\n\nimport type { PopoverState } from '@videojs/core';\nimport { getAnchorPositionStyle, getPopupPositionRect, resolveOffsets } from '@videojs/core/dom';\nimport { supportsAnchorPositioning } from '@videojs/utils/dom';\nimport type { CSSProperties } from 'react';\nimport { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { useComposedRefs } from '../../utils/use-composed-refs';\nimport { renderElement } from '../../utils/use-render';\nimport { usePopoverContext } from './context';\n\nexport interface PopoverPopupProps extends UIComponentProps<'div', PopoverState> {}\n\nconst POPOVER_RESET: CSSProperties = { position: 'fixed', inset: 'auto', margin: 0 };\n\n/** Container for the popover content. Positioned relative to the trigger using CSS anchor positioning with a JavaScript fallback. */\nexport const PopoverPopup = forwardRef<HTMLDivElement, PopoverPopupProps>(function PopoverPopup(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { core, popover, state, stateAttrMap, anchorName, popupId } = usePopoverContext();\n const internalRef = useRef<HTMLDivElement>(null);\n\n const popupRef = useCallback(\n (el: HTMLDivElement | null) => {\n popover.setPopupElement(el);\n if (el && supportsAnchorPositioning()) {\n el.style.setProperty('position-anchor', `--${anchorName}`);\n }\n },\n [popover, anchorName]\n );\n\n const composedRef = useComposedRefs(forwardedRef, popupRef, internalRef);\n\n // --- Positioning ---\n\n const posOpts = useMemo(() => ({ side: state.side, align: state.align }), [state.side, state.align]);\n\n // CSS Anchor Positioning — computed from state, no measurement needed.\n // `position-anchor` is set imperatively in the ref callback above\n // because React's style prop silently drops unrecognised CSS properties.\n const anchorStyle = useMemo(() => {\n if (!supportsAnchorPositioning()) return null;\n const { positionAnchor: _, ...rest } = getAnchorPositionStyle(anchorName, posOpts);\n return rest as CSSProperties;\n }, [anchorName, posOpts]);\n\n // Manual fallback — measure rects after layout, before paint.\n const [manualStyle, setManualStyle] = useState<CSSProperties | null>(null);\n\n useLayoutEffect(() => {\n if (supportsAnchorPositioning()) return;\n if (!state.open) {\n setManualStyle(null);\n return;\n }\n\n function measure(): void {\n const triggerEl = popover.triggerElement;\n const popupEl = internalRef.current;\n if (!triggerEl || !popupEl) return;\n\n const triggerRect = triggerEl.getBoundingClientRect();\n const popupRect = getPopupPositionRect(popupEl);\n const boundaryRect = document.documentElement.getBoundingClientRect();\n const offsets = resolveOffsets(popupEl);\n\n setManualStyle(\n getAnchorPositionStyle(anchorName, posOpts, triggerRect, popupRect, boundaryRect, offsets) as CSSProperties\n );\n }\n\n measure();\n const triggerEl = popover.triggerElement;\n const popupEl = internalRef.current;\n\n let rafId = 0;\n function reposition(): void {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(measure);\n }\n\n // Re-measure after the popover has entered the top layer and whenever\n // its own size or the trigger size changes.\n reposition();\n\n const resizeObserver =\n typeof ResizeObserver === 'function'\n ? new ResizeObserver(() => {\n reposition();\n })\n : null;\n\n if (triggerEl && resizeObserver) {\n resizeObserver.observe(triggerEl);\n }\n\n if (popupEl && resizeObserver) {\n resizeObserver.observe(popupEl);\n }\n\n window.addEventListener('scroll', reposition, { capture: true, passive: true });\n window.addEventListener('resize', reposition);\n\n return () => {\n cancelAnimationFrame(rafId);\n resizeObserver?.disconnect();\n window.removeEventListener('scroll', reposition, true);\n window.removeEventListener('resize', reposition);\n };\n }, [state.open, anchorName, posOpts, popover]);\n\n // Anchor path uses computed styles; manual path uses measured styles;\n // fallback resets UA [popover] defaults until positioning is computed.\n const positioningStyle = anchorStyle ?? manualStyle ?? POPOVER_RESET;\n\n // --- Visibility ---\n\n if (!state.open) {\n return null;\n }\n\n // Remap DOM focus events to React synthetic event names.\n const { onFocusOut, ...restPopupProps } = popover.popupProps;\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: composedRef,\n props: [\n {\n id: popupId,\n style: positioningStyle,\n ...core.getPopupAttrs(state),\n },\n { ...restPopupProps, onBlur: onFocusOut },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace PopoverPopup {\n export type Props = PopoverPopupProps;\n export type State = PopoverState;\n}\n"],"mappings":";;;;;;;;;;AAeA,MAAM,gBAA+B;CAAE,UAAU;CAAS,OAAO;CAAQ,QAAQ;CAAG;;AAGpF,MAAa,eAAe,WAA8C,SAAS,aACjF,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,MAAM,SAAS,OAAO,cAAc,YAAY,YAAY,mBAAmB;CACvF,MAAM,cAAc,OAAuB,KAAK;CAYhD,MAAM,cAAc,gBAAgB,cAVnB,aACd,OAA8B;AAC7B,UAAQ,gBAAgB,GAAG;AAC3B,MAAI,MAAM,2BAA2B,CACnC,IAAG,MAAM,YAAY,mBAAmB,KAAK,aAAa;IAG9D,CAAC,SAAS,WAAW,CACtB,EAE2D,YAAY;CAIxE,MAAM,UAAU,eAAe;EAAE,MAAM,MAAM;EAAM,OAAO,MAAM;EAAO,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,CAAC;CAKpG,MAAM,cAAc,cAAc;AAChC,MAAI,CAAC,2BAA2B,CAAE,QAAO;EACzC,MAAM,EAAE,gBAAgB,GAAG,GAAG,SAAS,uBAAuB,YAAY,QAAQ;AAClF,SAAO;IACN,CAAC,YAAY,QAAQ,CAAC;CAGzB,MAAM,CAAC,aAAa,kBAAkB,SAA+B,KAAK;AAE1E,uBAAsB;AACpB,MAAI,2BAA2B,CAAE;AACjC,MAAI,CAAC,MAAM,MAAM;AACf,kBAAe,KAAK;AACpB;;EAGF,SAAS,UAAgB;GACvB,MAAM,YAAY,QAAQ;GAC1B,MAAM,UAAU,YAAY;AAC5B,OAAI,CAAC,aAAa,CAAC,QAAS;AAO5B,kBACE,uBAAuB,YAAY,SANjB,UAAU,uBAAuB,EACnC,qBAAqB,QAAQ,EAC1B,SAAS,gBAAgB,uBAAuB,EACrD,eAAe,QAAQ,CAGqD,CAC3F;;AAGH,WAAS;EACT,MAAM,YAAY,QAAQ;EAC1B,MAAM,UAAU,YAAY;EAE5B,IAAI,QAAQ;EACZ,SAAS,aAAmB;AAC1B,wBAAqB,MAAM;AAC3B,WAAQ,sBAAsB,QAAQ;;AAKxC,cAAY;EAEZ,MAAM,iBACJ,OAAO,mBAAmB,aACtB,IAAI,qBAAqB;AACvB,eAAY;IACZ,GACF;AAEN,MAAI,aAAa,eACf,gBAAe,QAAQ,UAAU;AAGnC,MAAI,WAAW,eACb,gBAAe,QAAQ,QAAQ;AAGjC,SAAO,iBAAiB,UAAU,YAAY;GAAE,SAAS;GAAM,SAAS;GAAM,CAAC;AAC/E,SAAO,iBAAiB,UAAU,WAAW;AAE7C,eAAa;AACX,wBAAqB,MAAM;AAC3B,mBAAgB,YAAY;AAC5B,UAAO,oBAAoB,UAAU,YAAY,KAAK;AACtD,UAAO,oBAAoB,UAAU,WAAW;;IAEjD;EAAC,MAAM;EAAM;EAAY;EAAS;EAAQ,CAAC;CAI9C,MAAM,mBAAmB,eAAe,eAAe;AAIvD,KAAI,CAAC,MAAM,KACT,QAAO;CAIT,MAAM,EAAE,YAAY,GAAG,mBAAmB,QAAQ;AAElD,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK;EACL,OAAO;GACL;IACE,IAAI;IACJ,OAAO;IACP,GAAG,KAAK,cAAc,MAAM;IAC7B;GACD;IAAE,GAAG;IAAgB,QAAQ;IAAY;GACzC;GACD;EACF,CACF;EACD"}
@@ -1,6 +1,6 @@
1
+ import { PopoverProps } from "@videojs/core";
1
2
  import { PopoverChangeDetails } from "@videojs/core/dom";
2
3
  import { ReactNode } from "react";
3
- import { PopoverProps } from "@videojs/core";
4
4
 
5
5
  //#region src/ui/popover/popover-root.d.ts
6
6
  interface PopoverRootProps extends PopoverProps {
@@ -1,14 +1,14 @@
1
1
  'use client';
2
2
 
3
- import { useDestroy } from "../../utils/use-destroy.js";
4
3
  import { useLatestRef } from "../../utils/use-latest-ref.js";
4
+ import { useDestroy } from "../../utils/use-destroy.js";
5
5
  import { useSafeId } from "../../utils/use-safe-id.js";
6
6
  import { PopoverContextProvider } from "./context.js";
7
+ import { PopoverCore, PopoverDataAttrs } from "@videojs/core";
7
8
  import { createPopover, createTransition } from "@videojs/core/dom";
8
9
  import { useSnapshot } from "@videojs/store/react";
9
10
  import { useEffect, useState } from "react";
10
11
  import { jsx } from "react/jsx-runtime";
11
- import { PopoverCore, PopoverDataAttrs } from "@videojs/core";
12
12
 
13
13
  //#region src/ui/popover/popover-root.tsx
14
14
  function PopoverRoot({ open: controlledOpen, defaultOpen = PopoverCore.defaultProps.defaultOpen, onOpenChange: onOpenChangeProp, onOpenChangeComplete: onOpenChangeCompleteProp, openOnHover = PopoverCore.defaultProps.openOnHover, delay = PopoverCore.defaultProps.delay, closeDelay = PopoverCore.defaultProps.closeDelay, children, ...coreProps }) {
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { PopoverState } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/popover/popover-trigger.d.ts
6
6
  interface PopoverTriggerProps extends UIComponentProps<'button', PopoverState> {}
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { PosterCore } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/poster/poster.d.ts
6
6
  interface PosterProps extends UIComponentProps<'img', PosterCore.State> {}
@@ -2,9 +2,9 @@
2
2
 
3
3
  import { usePlayer } from "../../player/context.js";
4
4
  import { renderElement } from "../../utils/use-render.js";
5
+ import { PosterCore, PosterDataAttrs } from "@videojs/core";
5
6
  import { logMissingFeature, selectPlayback } from "@videojs/core/dom";
6
7
  import { forwardRef, useState } from "react";
7
- import { PosterCore, PosterDataAttrs } from "@videojs/core";
8
8
 
9
9
  //#region src/ui/poster/poster.tsx
10
10
  /**
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { SeekButtonCore } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/seek-button/seek-button.d.ts
6
6
  interface SeekButtonProps extends UIComponentProps<'button', SeekButtonCore.State>, SeekButtonCore.Props {}
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import { createMediaButton } from "../create-media-button.js";
4
- import { selectTime } from "@videojs/core/dom";
5
4
  import { SeekButtonCore, SeekButtonDataAttrs } from "@videojs/core";
5
+ import { selectTime } from "@videojs/core/dom";
6
6
 
7
7
  //#region src/ui/seek-button/seek-button.tsx
8
8
  /**
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { SliderState } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/slider/slider-buffer.d.ts
6
6
  interface SliderBufferProps extends UIComponentProps<'div', SliderState> {}
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { SliderState } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/slider/slider-fill.d.ts
6
6
  interface SliderFillProps extends UIComponentProps<'div', SliderState> {}
@@ -1,7 +1,7 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
+ import { SliderState } from "@videojs/core";
2
3
  import { SliderPreviewOverflow } from "@videojs/core/dom";
3
4
  import * as react from "react";
4
- import { SliderState } from "@videojs/core";
5
5
 
6
6
  //#region src/ui/slider/slider-preview.d.ts
7
7
  interface SliderPreviewProps extends UIComponentProps<'div', SliderState> {
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { SliderCore } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/slider/slider-root.d.ts
6
6
  interface SliderRootProps extends UIComponentProps<'div', SliderCore.State>, SliderCore.Props {
@@ -3,10 +3,10 @@
3
3
  import { renderElement } from "../../utils/use-render.js";
4
4
  import { useSlider } from "../hooks/use-slider.js";
5
5
  import { SliderProvider } from "./context.js";
6
+ import { SliderCore, SliderDataAttrs } from "@videojs/core";
6
7
  import { getSliderCSSVars } from "@videojs/core/dom";
7
8
  import { forwardRef, useState } from "react";
8
9
  import { jsx } from "react/jsx-runtime";
9
- import { SliderCore, SliderDataAttrs } from "@videojs/core";
10
10
 
11
11
  //#region src/ui/slider/slider-root.tsx
12
12
  const SliderRoot = forwardRef(function SliderRoot(componentProps, forwardedRef) {
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { SliderState } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/slider/slider-thumb.d.ts
6
6
  interface SliderThumbProps extends UIComponentProps<'div', SliderState> {}
@@ -1,6 +1,6 @@
1
1
  import { ThumbnailProps } from "../thumbnail/thumbnail.js";
2
- import * as react from "react";
3
2
  import { ThumbnailCore } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/slider/slider-thumbnail.d.ts
6
6
  interface SliderThumbnailProps extends Omit<ThumbnailProps, 'time'> {}
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { SliderState } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/slider/slider-track.d.ts
6
6
  interface SliderTrackProps extends UIComponentProps<'div', SliderState> {}
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { SliderState } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/slider/slider-value.d.ts
6
6
  interface SliderValueProps extends UIComponentProps<'output', SliderState> {
@@ -0,0 +1,2 @@
1
+ import { Thumbnail, ThumbnailProps } from "./thumbnail.js";
2
+ export { Thumbnail, ThumbnailProps };
@@ -0,0 +1,3 @@
1
+ import { Thumbnail } from "./thumbnail.js";
2
+
3
+ export { Thumbnail };
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { ThumbnailCore, ThumbnailImage } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/thumbnail/thumbnail.d.ts
6
6
  interface ThumbnailProps extends UIComponentProps<'div', ThumbnailCore.State>, ThumbnailCore.Props {
@@ -3,10 +3,10 @@
3
3
  import { useOptionalPlayer } from "../../player/context.js";
4
4
  import { useDestroy } from "../../utils/use-destroy.js";
5
5
  import { renderElement } from "../../utils/use-render.js";
6
+ import { ThumbnailCore, ThumbnailDataAttrs, mapCuesToThumbnails } from "@videojs/core";
6
7
  import { createThumbnail, selectTextTrack } from "@videojs/core/dom";
7
8
  import { forwardRef, useMemo, useRef, useState } from "react";
8
9
  import { jsx } from "react/jsx-runtime";
9
- import { ThumbnailCore, ThumbnailDataAttrs, mapCuesToThumbnails } from "@videojs/core";
10
10
 
11
11
  //#region src/ui/thumbnail/thumbnail.tsx
12
12
  const Thumbnail = forwardRef(function Thumbnail(componentProps, forwardedRef) {
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { TimeCore } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/time/time-value.d.ts
6
6
  interface ValueProps extends Omit<UIComponentProps<'time', TimeCore.State>, 'children'>, TimeCore.Props {}
@@ -2,10 +2,10 @@
2
2
 
3
3
  import { usePlayer } from "../../player/context.js";
4
4
  import { renderElement } from "../../utils/use-render.js";
5
+ import { TimeCore, TimeDataAttrs } from "@videojs/core";
5
6
  import { logMissingFeature, selectTime } from "@videojs/core/dom";
6
7
  import { forwardRef, useState } from "react";
7
8
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
- import { TimeCore, TimeDataAttrs } from "@videojs/core";
9
9
 
10
10
  //#region src/ui/time/time-value.tsx
11
11
  /**
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { TimeSliderCore } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/time-slider/time-slider-root.d.ts
6
6
  interface TimeSliderRootProps extends UIComponentProps<'div', TimeSliderCore.State>, TimeSliderCore.Props {
@@ -1,14 +1,14 @@
1
1
  'use client';
2
2
 
3
3
  import { usePlayer } from "../../player/context.js";
4
- import { renderElement } from "../../utils/use-render.js";
5
4
  import { useLatestRef } from "../../utils/use-latest-ref.js";
5
+ import { renderElement } from "../../utils/use-render.js";
6
6
  import { useSlider } from "../hooks/use-slider.js";
7
7
  import { SliderProvider } from "../slider/context.js";
8
+ import { TimeSliderCore, TimeSliderDataAttrs } from "@videojs/core";
8
9
  import { getTimeSliderCSSVars, logMissingFeature, selectBuffer, selectTime } from "@videojs/core/dom";
9
10
  import { forwardRef, useState } from "react";
10
11
  import { jsx } from "react/jsx-runtime";
11
- import { TimeSliderCore, TimeSliderDataAttrs } from "@videojs/core";
12
12
  import { formatTime } from "@videojs/utils/time";
13
13
 
14
14
  //#region src/ui/time-slider/time-slider-root.tsx
@@ -58,7 +58,7 @@ const TimeSliderRoot = forwardRef(function TimeSliderRoot(componentProps, forwar
58
58
  getCSSVars: getTimeSliderCSSVars,
59
59
  onValueCommit: (percent) => {
60
60
  const media = mediaRef.current;
61
- if (media) media.seek(core.valueFromPercent(percent));
61
+ if (media) media.seek(core.rawValueFromPercent(percent));
62
62
  },
63
63
  onDragStart,
64
64
  onDragEnd
@@ -1 +1 @@
1
- {"version":3,"file":"time-slider-root.js","names":[],"sources":["../../../../src/ui/time-slider/time-slider-root.tsx"],"sourcesContent":["'use client';\n\nimport { TimeSliderCore, TimeSliderDataAttrs } from '@videojs/core';\nimport { getTimeSliderCSSVars, logMissingFeature, selectBuffer, selectTime } from '@videojs/core/dom';\nimport { formatTime } from '@videojs/utils/time';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { useLatestRef } from '../../utils/use-latest-ref';\nimport { renderElement } from '../../utils/use-render';\nimport { useSlider } from '../hooks/use-slider';\nimport { SliderProvider } from '../slider/context';\n\nconst noopSeek = (): Promise<number> => Promise.resolve(0);\n\nexport interface TimeSliderRootProps extends UIComponentProps<'div', TimeSliderCore.State>, TimeSliderCore.Props {\n onDragStart?: (() => void) | undefined;\n onDragEnd?: (() => void) | undefined;\n}\n\nexport const TimeSliderRoot = forwardRef<HTMLDivElement, TimeSliderRootProps>(\n function TimeSliderRoot(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n label,\n commitThrottle = TimeSliderCore.defaultProps.commitThrottle,\n step = TimeSliderCore.defaultProps.step,\n largeStep = TimeSliderCore.defaultProps.largeStep,\n orientation,\n disabled,\n thumbAlignment,\n onDragStart,\n onDragEnd,\n ...elementProps\n } = componentProps;\n\n const time = usePlayer(selectTime);\n const buffer = usePlayer(selectBuffer);\n\n const [core] = useState(() => new TimeSliderCore());\n core.setProps({ label, step, largeStep, orientation, disabled, thumbAlignment });\n\n // Keep a ref to the latest media state for callbacks that fire outside the render cycle.\n const mediaRef = useLatestRef(time && buffer ? { ...time, ...buffer } : null);\n\n const duration = time?.duration ?? 0;\n\n const { state, cssVars, rootRef, thumbRef, rootProps, rootStyle, thumbProps } = useSlider<TimeSliderCore.State>({\n computeState: (input) => {\n core.setInput(input);\n if (!time || !buffer) {\n core.setMedia({\n currentTime: 0,\n duration: 0,\n seeking: false,\n seek: noopSeek,\n buffered: [],\n seekable: [],\n });\n } else {\n core.setMedia({ ...time, ...buffer });\n }\n\n return core.getState();\n },\n getPercent: () => (duration > 0 ? ((time?.currentTime ?? 0) / duration) * 100 : 0),\n getStepPercent: () => core.getStepPercent(),\n getLargeStepPercent: () => core.getLargeStepPercent(),\n orientation,\n disabled,\n commitThrottle,\n adjustPercent: (rawPercent, thumbSize, trackSize) =>\n core.adjustPercentForAlignment(rawPercent, thumbSize, trackSize),\n getCSSVars: getTimeSliderCSSVars,\n onValueCommit: (percent) => {\n const media = mediaRef.current;\n if (media) media.seek(core.valueFromPercent(percent));\n },\n onDragStart,\n onDragEnd,\n });\n\n if (!time) {\n if (__DEV__) logMissingFeature('TimeSlider', 'time');\n return null;\n }\n\n return (\n <SliderProvider\n value={{\n state,\n pointerValue: core.valueFromPercent(state.pointerPercent),\n thumbRef,\n thumbProps,\n stateAttrMap: TimeSliderDataAttrs,\n getAttrs: (sliderState) => core.getAttrs(sliderState as TimeSliderCore.State),\n formatValue: (value) => formatTime(value, duration),\n }}\n >\n {renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap: TimeSliderDataAttrs,\n ref: [forwardedRef, rootRef],\n props: [{ style: { ...cssVars, ...rootStyle } }, rootProps, elementProps],\n }\n )}\n </SliderProvider>\n );\n }\n);\n\nexport namespace TimeSliderRoot {\n export type Props = TimeSliderRootProps;\n export type State = TimeSliderCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;AAcA,MAAM,iBAAkC,QAAQ,QAAQ,EAAE;AAO1D,MAAa,iBAAiB,WAC5B,SAAS,eAAe,gBAAgB,cAAc;CACpD,MAAM,EACJ,QACA,WACA,OACA,OACA,iBAAiB,eAAe,aAAa,gBAC7C,OAAO,eAAe,aAAa,MACnC,YAAY,eAAe,aAAa,WACxC,aACA,UACA,gBACA,aACA,WACA,GAAG,iBACD;CAEJ,MAAM,OAAO,UAAU,WAAW;CAClC,MAAM,SAAS,UAAU,aAAa;CAEtC,MAAM,CAAC,QAAQ,eAAe,IAAI,gBAAgB,CAAC;AACnD,MAAK,SAAS;EAAE;EAAO;EAAM;EAAW;EAAa;EAAU;EAAgB,CAAC;CAGhF,MAAM,WAAW,aAAa,QAAQ,SAAS;EAAE,GAAG;EAAM,GAAG;EAAQ,GAAG,KAAK;CAE7E,MAAM,WAAW,MAAM,YAAY;CAEnC,MAAM,EAAE,OAAO,SAAS,SAAS,UAAU,WAAW,WAAW,eAAe,UAAgC;EAC9G,eAAe,UAAU;AACvB,QAAK,SAAS,MAAM;AACpB,OAAI,CAAC,QAAQ,CAAC,OACZ,MAAK,SAAS;IACZ,aAAa;IACb,UAAU;IACV,SAAS;IACT,MAAM;IACN,UAAU,EAAE;IACZ,UAAU,EAAE;IACb,CAAC;OAEF,MAAK,SAAS;IAAE,GAAG;IAAM,GAAG;IAAQ,CAAC;AAGvC,UAAO,KAAK,UAAU;;EAExB,kBAAmB,WAAW,KAAM,MAAM,eAAe,KAAK,WAAY,MAAM;EAChF,sBAAsB,KAAK,gBAAgB;EAC3C,2BAA2B,KAAK,qBAAqB;EACrD;EACA;EACA;EACA,gBAAgB,YAAY,WAAW,cACrC,KAAK,0BAA0B,YAAY,WAAW,UAAU;EAClE,YAAY;EACZ,gBAAgB,YAAY;GAC1B,MAAM,QAAQ,SAAS;AACvB,OAAI,MAAO,OAAM,KAAK,KAAK,iBAAiB,QAAQ,CAAC;;EAEvD;EACA;EACD,CAAC;AAEF,KAAI,CAAC,MAAM;AACI,oBAAkB,cAAc,OAAO;AACpD,SAAO;;AAGT,QACE,oBAAC;EACC,OAAO;GACL;GACA,cAAc,KAAK,iBAAiB,MAAM,eAAe;GACzD;GACA;GACA,cAAc;GACd,WAAW,gBAAgB,KAAK,SAAS,YAAoC;GAC7E,cAAc,UAAU,WAAW,OAAO,SAAS;GACpD;YAEA,cACC,OACA;GAAE;GAAQ;GAAW;GAAO,EAC5B;GACE;GACA,cAAc;GACd,KAAK,CAAC,cAAc,QAAQ;GAC5B,OAAO;IAAC,EAAE,OAAO;KAAE,GAAG;KAAS,GAAG;KAAW,EAAE;IAAE;IAAW;IAAa;GAC1E,CACF;GACc;EAGtB"}
1
+ {"version":3,"file":"time-slider-root.js","names":[],"sources":["../../../../src/ui/time-slider/time-slider-root.tsx"],"sourcesContent":["'use client';\n\nimport { TimeSliderCore, TimeSliderDataAttrs } from '@videojs/core';\nimport { getTimeSliderCSSVars, logMissingFeature, selectBuffer, selectTime } from '@videojs/core/dom';\nimport { formatTime } from '@videojs/utils/time';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { useLatestRef } from '../../utils/use-latest-ref';\nimport { renderElement } from '../../utils/use-render';\nimport { useSlider } from '../hooks/use-slider';\nimport { SliderProvider } from '../slider/context';\n\nconst noopSeek = (): Promise<number> => Promise.resolve(0);\n\nexport interface TimeSliderRootProps extends UIComponentProps<'div', TimeSliderCore.State>, TimeSliderCore.Props {\n onDragStart?: (() => void) | undefined;\n onDragEnd?: (() => void) | undefined;\n}\n\nexport const TimeSliderRoot = forwardRef<HTMLDivElement, TimeSliderRootProps>(\n function TimeSliderRoot(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n label,\n commitThrottle = TimeSliderCore.defaultProps.commitThrottle,\n step = TimeSliderCore.defaultProps.step,\n largeStep = TimeSliderCore.defaultProps.largeStep,\n orientation,\n disabled,\n thumbAlignment,\n onDragStart,\n onDragEnd,\n ...elementProps\n } = componentProps;\n\n const time = usePlayer(selectTime);\n const buffer = usePlayer(selectBuffer);\n\n const [core] = useState(() => new TimeSliderCore());\n core.setProps({ label, step, largeStep, orientation, disabled, thumbAlignment });\n\n // Keep a ref to the latest media state for callbacks that fire outside the render cycle.\n const mediaRef = useLatestRef(time && buffer ? { ...time, ...buffer } : null);\n\n const duration = time?.duration ?? 0;\n\n const { state, cssVars, rootRef, thumbRef, rootProps, rootStyle, thumbProps } = useSlider<TimeSliderCore.State>({\n computeState: (input) => {\n core.setInput(input);\n if (!time || !buffer) {\n core.setMedia({\n currentTime: 0,\n duration: 0,\n seeking: false,\n seek: noopSeek,\n buffered: [],\n seekable: [],\n });\n } else {\n core.setMedia({ ...time, ...buffer });\n }\n\n return core.getState();\n },\n getPercent: () => (duration > 0 ? ((time?.currentTime ?? 0) / duration) * 100 : 0),\n getStepPercent: () => core.getStepPercent(),\n getLargeStepPercent: () => core.getLargeStepPercent(),\n orientation,\n disabled,\n commitThrottle,\n adjustPercent: (rawPercent, thumbSize, trackSize) =>\n core.adjustPercentForAlignment(rawPercent, thumbSize, trackSize),\n getCSSVars: getTimeSliderCSSVars,\n onValueCommit: (percent) => {\n const media = mediaRef.current;\n if (media) media.seek(core.rawValueFromPercent(percent));\n },\n onDragStart,\n onDragEnd,\n });\n\n if (!time) {\n if (__DEV__) logMissingFeature('TimeSlider', 'time');\n return null;\n }\n\n return (\n <SliderProvider\n value={{\n state,\n pointerValue: core.valueFromPercent(state.pointerPercent),\n thumbRef,\n thumbProps,\n stateAttrMap: TimeSliderDataAttrs,\n getAttrs: (sliderState) => core.getAttrs(sliderState as TimeSliderCore.State),\n formatValue: (value) => formatTime(value, duration),\n }}\n >\n {renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap: TimeSliderDataAttrs,\n ref: [forwardedRef, rootRef],\n props: [{ style: { ...cssVars, ...rootStyle } }, rootProps, elementProps],\n }\n )}\n </SliderProvider>\n );\n }\n);\n\nexport namespace TimeSliderRoot {\n export type Props = TimeSliderRootProps;\n export type State = TimeSliderCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;AAcA,MAAM,iBAAkC,QAAQ,QAAQ,EAAE;AAO1D,MAAa,iBAAiB,WAC5B,SAAS,eAAe,gBAAgB,cAAc;CACpD,MAAM,EACJ,QACA,WACA,OACA,OACA,iBAAiB,eAAe,aAAa,gBAC7C,OAAO,eAAe,aAAa,MACnC,YAAY,eAAe,aAAa,WACxC,aACA,UACA,gBACA,aACA,WACA,GAAG,iBACD;CAEJ,MAAM,OAAO,UAAU,WAAW;CAClC,MAAM,SAAS,UAAU,aAAa;CAEtC,MAAM,CAAC,QAAQ,eAAe,IAAI,gBAAgB,CAAC;AACnD,MAAK,SAAS;EAAE;EAAO;EAAM;EAAW;EAAa;EAAU;EAAgB,CAAC;CAGhF,MAAM,WAAW,aAAa,QAAQ,SAAS;EAAE,GAAG;EAAM,GAAG;EAAQ,GAAG,KAAK;CAE7E,MAAM,WAAW,MAAM,YAAY;CAEnC,MAAM,EAAE,OAAO,SAAS,SAAS,UAAU,WAAW,WAAW,eAAe,UAAgC;EAC9G,eAAe,UAAU;AACvB,QAAK,SAAS,MAAM;AACpB,OAAI,CAAC,QAAQ,CAAC,OACZ,MAAK,SAAS;IACZ,aAAa;IACb,UAAU;IACV,SAAS;IACT,MAAM;IACN,UAAU,EAAE;IACZ,UAAU,EAAE;IACb,CAAC;OAEF,MAAK,SAAS;IAAE,GAAG;IAAM,GAAG;IAAQ,CAAC;AAGvC,UAAO,KAAK,UAAU;;EAExB,kBAAmB,WAAW,KAAM,MAAM,eAAe,KAAK,WAAY,MAAM;EAChF,sBAAsB,KAAK,gBAAgB;EAC3C,2BAA2B,KAAK,qBAAqB;EACrD;EACA;EACA;EACA,gBAAgB,YAAY,WAAW,cACrC,KAAK,0BAA0B,YAAY,WAAW,UAAU;EAClE,YAAY;EACZ,gBAAgB,YAAY;GAC1B,MAAM,QAAQ,SAAS;AACvB,OAAI,MAAO,OAAM,KAAK,KAAK,oBAAoB,QAAQ,CAAC;;EAE1D;EACA;EACD,CAAC;AAEF,KAAI,CAAC,MAAM;AACI,oBAAkB,cAAc,OAAO;AACpD,SAAO;;AAGT,QACE,oBAAC;EACC,OAAO;GACL;GACA,cAAc,KAAK,iBAAiB,MAAM,eAAe;GACzD;GACA;GACA,cAAc;GACd,WAAW,gBAAgB,KAAK,SAAS,YAAoC;GAC7E,cAAc,UAAU,WAAW,OAAO,SAAS;GACpD;YAEA,cACC,OACA;GAAE;GAAQ;GAAW;GAAO,EAC5B;GACE;GACA,cAAc;GACd,KAAK,CAAC,cAAc,QAAQ;GAC5B,OAAO;IAAC,EAAE,OAAO;KAAE,GAAG;KAAS,GAAG;KAAW,EAAE;IAAE;IAAW;IAAa;GAC1E,CACF;GACc;EAGtB"}
@@ -1,12 +1,11 @@
1
+ import { StateAttrMap, TooltipCore } from "@videojs/core";
1
2
  import { TooltipApi } from "@videojs/core/dom";
2
- import { StateAttrMap as StateAttrMap$1, TooltipCore } from "@videojs/core";
3
-
4
3
  //#region src/ui/tooltip/context.d.ts
5
4
  interface TooltipContextValue {
6
5
  core: TooltipCore;
7
6
  tooltip: TooltipApi;
8
7
  state: TooltipCore.State;
9
- stateAttrMap: StateAttrMap$1<TooltipCore.State>;
8
+ stateAttrMap: StateAttrMap<TooltipCore.State>;
10
9
  anchorName: string;
11
10
  popupId: string;
12
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","names":[],"sources":["../../../../src/ui/tooltip/context.tsx"],"mappings":";;;;UAMiB,mBAAA;EACf,IAAA,EAAM,WAAA;EACN,OAAA,EAAS,UAAA;EACT,KAAA,EAAO,WAAA,CAAY,KAAA;EACnB,YAAA,EAAc,cAAA,CAAa,WAAA,CAAY,KAAA;EACvC,UAAA;EACA,OAAA;AAAA;AAAA,iBAOc,iBAAA,CAAA,GAAqB,mBAAA"}
1
+ {"version":3,"file":"context.d.ts","names":[],"sources":["../../../../src/ui/tooltip/context.tsx"],"mappings":";;;UAMiB,mBAAA;EACf,IAAA,EAAM,WAAA;EACN,OAAA,EAAS,UAAA;EACT,KAAA,EAAO,WAAA,CAAY,KAAA;EACnB,YAAA,EAAc,YAAA,CAAa,WAAA,CAAY,KAAA;EACvC,UAAA;EACA,OAAA;AAAA;AAAA,iBAOc,iBAAA,CAAA,GAAqB,mBAAA"}
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { TooltipState } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/tooltip/tooltip-arrow.d.ts
6
6
  interface TooltipArrowProps extends UIComponentProps<'div', TooltipState> {}
@@ -1,6 +1,6 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
- import * as react from "react";
3
2
  import { TooltipState } from "@videojs/core";
3
+ import * as react from "react";
4
4
 
5
5
  //#region src/ui/tooltip/tooltip-popup.d.ts
6
6
  interface TooltipPopupProps extends UIComponentProps<'div', TooltipState> {}
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-popup.d.ts","names":[],"sources":["../../../../src/ui/tooltip/tooltip-popup.tsx"],"mappings":";;;;;UAciB,iBAAA,SAA0B,gBAAA,QAAwB,YAAA;;cAKtD,YAAA,EAAY,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,iBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBA6HR,YAAA;EAAA,KACH,KAAA,GAAQ,iBAAA;EAAA,KACR,KAAA,GAAQ,YAAA;AAAA"}
1
+ {"version":3,"file":"tooltip-popup.d.ts","names":[],"sources":["../../../../src/ui/tooltip/tooltip-popup.tsx"],"mappings":";;;;;UAciB,iBAAA,SAA0B,gBAAA,QAAwB,YAAA;;cAKtD,YAAA,EAAY,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,iBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAkJR,YAAA;EAAA,KACH,KAAA,GAAQ,iBAAA;EAAA,KACR,KAAA,GAAQ,YAAA;AAAA"}
@@ -3,9 +3,9 @@
3
3
  import { useComposedRefs } from "../../utils/use-composed-refs.js";
4
4
  import { renderElement } from "../../utils/use-render.js";
5
5
  import { useTooltipContext } from "./context.js";
6
- import { getAnchorPositionStyle, resolveOffsets } from "@videojs/core/dom";
7
- import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
8
6
  import { TooltipCSSVars } from "@videojs/core";
7
+ import { getAnchorPositionStyle, getPopupPositionRect, resolveOffsets } from "@videojs/core/dom";
8
+ import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
9
9
  import { supportsAnchorPositioning } from "@videojs/utils/dom";
10
10
 
11
11
  //#region src/ui/tooltip/tooltip-popup.tsx
@@ -42,14 +42,22 @@ const TooltipPopup = forwardRef(function TooltipPopup({ render, className, style
42
42
  const triggerEl = tooltip.triggerElement;
43
43
  const popupEl = internalRef.current;
44
44
  if (!triggerEl || !popupEl) return;
45
- setManualStyle(getAnchorPositionStyle(anchorName, posOpts, triggerEl.getBoundingClientRect(), popupEl.getBoundingClientRect(), document.documentElement.getBoundingClientRect(), resolveOffsets(popupEl, TooltipCSSVars), TooltipCSSVars));
45
+ setManualStyle(getAnchorPositionStyle(anchorName, posOpts, triggerEl.getBoundingClientRect(), getPopupPositionRect(popupEl), document.documentElement.getBoundingClientRect(), resolveOffsets(popupEl, TooltipCSSVars), TooltipCSSVars));
46
46
  }
47
47
  measure();
48
+ const triggerEl = tooltip.triggerElement;
49
+ const popupEl = internalRef.current;
48
50
  let rafId = 0;
49
51
  function reposition() {
50
52
  cancelAnimationFrame(rafId);
51
53
  rafId = requestAnimationFrame(measure);
52
54
  }
55
+ reposition();
56
+ const resizeObserver = typeof ResizeObserver === "function" ? new ResizeObserver(() => {
57
+ reposition();
58
+ }) : null;
59
+ if (triggerEl && resizeObserver) resizeObserver.observe(triggerEl);
60
+ if (popupEl && resizeObserver) resizeObserver.observe(popupEl);
53
61
  window.addEventListener("scroll", reposition, {
54
62
  capture: true,
55
63
  passive: true
@@ -57,6 +65,7 @@ const TooltipPopup = forwardRef(function TooltipPopup({ render, className, style
57
65
  window.addEventListener("resize", reposition);
58
66
  return () => {
59
67
  cancelAnimationFrame(rafId);
68
+ resizeObserver?.disconnect();
60
69
  window.removeEventListener("scroll", reposition, true);
61
70
  window.removeEventListener("resize", reposition);
62
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-popup.js","names":[],"sources":["../../../../src/ui/tooltip/tooltip-popup.tsx"],"sourcesContent":["'use client';\n\nimport type { TooltipState } from '@videojs/core';\nimport { TooltipCSSVars } from '@videojs/core';\nimport { getAnchorPositionStyle, resolveOffsets } from '@videojs/core/dom';\nimport { supportsAnchorPositioning } from '@videojs/utils/dom';\nimport type { CSSProperties } from 'react';\nimport { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { useComposedRefs } from '../../utils/use-composed-refs';\nimport { renderElement } from '../../utils/use-render';\nimport { useTooltipContext } from './context';\n\nexport interface TooltipPopupProps extends UIComponentProps<'div', TooltipState> {}\n\nconst POPUP_RESET: CSSProperties = { position: 'fixed', inset: 'auto', margin: 0 };\n\n/** Container for the tooltip content. Positioned relative to the trigger using CSS anchor positioning with a JavaScript fallback. */\nexport const TooltipPopup = forwardRef<HTMLDivElement, TooltipPopupProps>(function TooltipPopup(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { core, tooltip, state, stateAttrMap, anchorName, popupId } = useTooltipContext();\n const internalRef = useRef<HTMLDivElement>(null);\n\n const popupRef = useCallback(\n (el: HTMLDivElement | null) => {\n tooltip.setPopupElement(el);\n if (el && supportsAnchorPositioning()) {\n el.style.setProperty('position-anchor', `--${anchorName}`);\n }\n },\n [tooltip, anchorName]\n );\n\n const composedRef = useComposedRefs(forwardedRef, popupRef, internalRef);\n\n // --- Positioning ---\n\n const posOpts = useMemo(() => ({ side: state.side, align: state.align }), [state.side, state.align]);\n\n // CSS Anchor Positioning — computed from state, no measurement needed.\n // `position-anchor` is set imperatively in the ref callback above\n // because React's style prop silently drops unrecognised CSS properties.\n const anchorStyle = useMemo(() => {\n if (!supportsAnchorPositioning()) return null;\n const { positionAnchor: _, ...rest } = getAnchorPositionStyle(\n anchorName,\n posOpts,\n undefined,\n undefined,\n undefined,\n undefined,\n TooltipCSSVars\n );\n return rest as CSSProperties;\n }, [anchorName, posOpts]);\n\n // Manual fallback — measure rects after layout, before paint.\n const [manualStyle, setManualStyle] = useState<CSSProperties | null>(null);\n\n useLayoutEffect(() => {\n if (supportsAnchorPositioning()) return;\n if (!state.open) {\n setManualStyle(null);\n return;\n }\n\n function measure(): void {\n const triggerEl = tooltip.triggerElement;\n const popupEl = internalRef.current;\n if (!triggerEl || !popupEl) return;\n\n const triggerRect = triggerEl.getBoundingClientRect();\n const popupRect = popupEl.getBoundingClientRect();\n const boundaryRect = document.documentElement.getBoundingClientRect();\n const offsets = resolveOffsets(popupEl, TooltipCSSVars);\n\n setManualStyle(\n getAnchorPositionStyle(\n anchorName,\n posOpts,\n triggerRect,\n popupRect,\n boundaryRect,\n offsets,\n TooltipCSSVars\n ) as CSSProperties\n );\n }\n\n measure();\n\n // Recompute on scroll/resize so the tooltip tracks its trigger.\n let rafId = 0;\n function reposition(): void {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(measure);\n }\n\n window.addEventListener('scroll', reposition, { capture: true, passive: true });\n window.addEventListener('resize', reposition);\n\n return () => {\n cancelAnimationFrame(rafId);\n window.removeEventListener('scroll', reposition, true);\n window.removeEventListener('resize', reposition);\n };\n }, [state.open, anchorName, posOpts, tooltip]);\n\n // Anchor path uses computed styles; manual path uses measured styles;\n // fallback resets UA [popover] defaults until positioning is computed.\n const positioningStyle = anchorStyle ?? manualStyle ?? POPUP_RESET;\n\n // --- Visibility ---\n\n if (!state.open) {\n return null;\n }\n\n // Remap DOM focus events to React synthetic event names.\n const { onFocusOut, ...restPopupProps } = tooltip.popupProps;\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: composedRef,\n props: [\n {\n id: popupId,\n style: positioningStyle,\n ...core.getPopupAttrs(state),\n },\n { ...restPopupProps, onBlur: onFocusOut },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace TooltipPopup {\n export type Props = TooltipPopupProps;\n export type State = TooltipState;\n}\n"],"mappings":";;;;;;;;;;;AAgBA,MAAM,cAA6B;CAAE,UAAU;CAAS,OAAO;CAAQ,QAAQ;CAAG;;AAGlF,MAAa,eAAe,WAA8C,SAAS,aACjF,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,MAAM,SAAS,OAAO,cAAc,YAAY,YAAY,mBAAmB;CACvF,MAAM,cAAc,OAAuB,KAAK;CAYhD,MAAM,cAAc,gBAAgB,cAVnB,aACd,OAA8B;AAC7B,UAAQ,gBAAgB,GAAG;AAC3B,MAAI,MAAM,2BAA2B,CACnC,IAAG,MAAM,YAAY,mBAAmB,KAAK,aAAa;IAG9D,CAAC,SAAS,WAAW,CACtB,EAE2D,YAAY;CAIxE,MAAM,UAAU,eAAe;EAAE,MAAM,MAAM;EAAM,OAAO,MAAM;EAAO,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,CAAC;CAKpG,MAAM,cAAc,cAAc;AAChC,MAAI,CAAC,2BAA2B,CAAE,QAAO;EACzC,MAAM,EAAE,gBAAgB,GAAG,GAAG,SAAS,uBACrC,YACA,SACA,QACA,QACA,QACA,QACA,eACD;AACD,SAAO;IACN,CAAC,YAAY,QAAQ,CAAC;CAGzB,MAAM,CAAC,aAAa,kBAAkB,SAA+B,KAAK;AAE1E,uBAAsB;AACpB,MAAI,2BAA2B,CAAE;AACjC,MAAI,CAAC,MAAM,MAAM;AACf,kBAAe,KAAK;AACpB;;EAGF,SAAS,UAAgB;GACvB,MAAM,YAAY,QAAQ;GAC1B,MAAM,UAAU,YAAY;AAC5B,OAAI,CAAC,aAAa,CAAC,QAAS;AAO5B,kBACE,uBACE,YACA,SARgB,UAAU,uBAAuB,EACnC,QAAQ,uBAAuB,EAC5B,SAAS,gBAAgB,uBAAuB,EACrD,eAAe,SAAS,eAAe,EAUnD,eACD,CACF;;AAGH,WAAS;EAGT,IAAI,QAAQ;EACZ,SAAS,aAAmB;AAC1B,wBAAqB,MAAM;AAC3B,WAAQ,sBAAsB,QAAQ;;AAGxC,SAAO,iBAAiB,UAAU,YAAY;GAAE,SAAS;GAAM,SAAS;GAAM,CAAC;AAC/E,SAAO,iBAAiB,UAAU,WAAW;AAE7C,eAAa;AACX,wBAAqB,MAAM;AAC3B,UAAO,oBAAoB,UAAU,YAAY,KAAK;AACtD,UAAO,oBAAoB,UAAU,WAAW;;IAEjD;EAAC,MAAM;EAAM;EAAY;EAAS;EAAQ,CAAC;CAI9C,MAAM,mBAAmB,eAAe,eAAe;AAIvD,KAAI,CAAC,MAAM,KACT,QAAO;CAIT,MAAM,EAAE,YAAY,GAAG,mBAAmB,QAAQ;AAElD,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK;EACL,OAAO;GACL;IACE,IAAI;IACJ,OAAO;IACP,GAAG,KAAK,cAAc,MAAM;IAC7B;GACD;IAAE,GAAG;IAAgB,QAAQ;IAAY;GACzC;GACD;EACF,CACF;EACD"}
1
+ {"version":3,"file":"tooltip-popup.js","names":[],"sources":["../../../../src/ui/tooltip/tooltip-popup.tsx"],"sourcesContent":["'use client';\n\nimport type { TooltipState } from '@videojs/core';\nimport { TooltipCSSVars } from '@videojs/core';\nimport { getAnchorPositionStyle, getPopupPositionRect, resolveOffsets } from '@videojs/core/dom';\nimport { supportsAnchorPositioning } from '@videojs/utils/dom';\nimport type { CSSProperties } from 'react';\nimport { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { useComposedRefs } from '../../utils/use-composed-refs';\nimport { renderElement } from '../../utils/use-render';\nimport { useTooltipContext } from './context';\n\nexport interface TooltipPopupProps extends UIComponentProps<'div', TooltipState> {}\n\nconst POPUP_RESET: CSSProperties = { position: 'fixed', inset: 'auto', margin: 0 };\n\n/** Container for the tooltip content. Positioned relative to the trigger using CSS anchor positioning with a JavaScript fallback. */\nexport const TooltipPopup = forwardRef<HTMLDivElement, TooltipPopupProps>(function TooltipPopup(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { core, tooltip, state, stateAttrMap, anchorName, popupId } = useTooltipContext();\n const internalRef = useRef<HTMLDivElement>(null);\n\n const popupRef = useCallback(\n (el: HTMLDivElement | null) => {\n tooltip.setPopupElement(el);\n if (el && supportsAnchorPositioning()) {\n el.style.setProperty('position-anchor', `--${anchorName}`);\n }\n },\n [tooltip, anchorName]\n );\n\n const composedRef = useComposedRefs(forwardedRef, popupRef, internalRef);\n\n // --- Positioning ---\n\n const posOpts = useMemo(() => ({ side: state.side, align: state.align }), [state.side, state.align]);\n\n // CSS Anchor Positioning — computed from state, no measurement needed.\n // `position-anchor` is set imperatively in the ref callback above\n // because React's style prop silently drops unrecognised CSS properties.\n const anchorStyle = useMemo(() => {\n if (!supportsAnchorPositioning()) return null;\n const { positionAnchor: _, ...rest } = getAnchorPositionStyle(\n anchorName,\n posOpts,\n undefined,\n undefined,\n undefined,\n undefined,\n TooltipCSSVars\n );\n return rest as CSSProperties;\n }, [anchorName, posOpts]);\n\n // Manual fallback — measure rects after layout, before paint.\n const [manualStyle, setManualStyle] = useState<CSSProperties | null>(null);\n\n useLayoutEffect(() => {\n if (supportsAnchorPositioning()) return;\n if (!state.open) {\n setManualStyle(null);\n return;\n }\n\n function measure(): void {\n const triggerEl = tooltip.triggerElement;\n const popupEl = internalRef.current;\n if (!triggerEl || !popupEl) return;\n\n const triggerRect = triggerEl.getBoundingClientRect();\n const popupRect = getPopupPositionRect(popupEl);\n const boundaryRect = document.documentElement.getBoundingClientRect();\n const offsets = resolveOffsets(popupEl, TooltipCSSVars);\n\n setManualStyle(\n getAnchorPositionStyle(\n anchorName,\n posOpts,\n triggerRect,\n popupRect,\n boundaryRect,\n offsets,\n TooltipCSSVars\n ) as CSSProperties\n );\n }\n\n measure();\n const triggerEl = tooltip.triggerElement;\n const popupEl = internalRef.current;\n\n let rafId = 0;\n function reposition(): void {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(measure);\n }\n\n // Re-measure after the tooltip has entered the top layer and whenever\n // its own size or the trigger size changes.\n reposition();\n\n const resizeObserver =\n typeof ResizeObserver === 'function'\n ? new ResizeObserver(() => {\n reposition();\n })\n : null;\n\n if (triggerEl && resizeObserver) {\n resizeObserver.observe(triggerEl);\n }\n\n if (popupEl && resizeObserver) {\n resizeObserver.observe(popupEl);\n }\n\n window.addEventListener('scroll', reposition, { capture: true, passive: true });\n window.addEventListener('resize', reposition);\n\n return () => {\n cancelAnimationFrame(rafId);\n resizeObserver?.disconnect();\n window.removeEventListener('scroll', reposition, true);\n window.removeEventListener('resize', reposition);\n };\n }, [state.open, anchorName, posOpts, tooltip]);\n\n // Anchor path uses computed styles; manual path uses measured styles;\n // fallback resets UA [popover] defaults until positioning is computed.\n const positioningStyle = anchorStyle ?? manualStyle ?? POPUP_RESET;\n\n // --- Visibility ---\n\n if (!state.open) {\n return null;\n }\n\n // Remap DOM focus events to React synthetic event names.\n const { onFocusOut, ...restPopupProps } = tooltip.popupProps;\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: composedRef,\n props: [\n {\n id: popupId,\n style: positioningStyle,\n ...core.getPopupAttrs(state),\n },\n { ...restPopupProps, onBlur: onFocusOut },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace TooltipPopup {\n export type Props = TooltipPopupProps;\n export type State = TooltipState;\n}\n"],"mappings":";;;;;;;;;;;AAgBA,MAAM,cAA6B;CAAE,UAAU;CAAS,OAAO;CAAQ,QAAQ;CAAG;;AAGlF,MAAa,eAAe,WAA8C,SAAS,aACjF,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,MAAM,SAAS,OAAO,cAAc,YAAY,YAAY,mBAAmB;CACvF,MAAM,cAAc,OAAuB,KAAK;CAYhD,MAAM,cAAc,gBAAgB,cAVnB,aACd,OAA8B;AAC7B,UAAQ,gBAAgB,GAAG;AAC3B,MAAI,MAAM,2BAA2B,CACnC,IAAG,MAAM,YAAY,mBAAmB,KAAK,aAAa;IAG9D,CAAC,SAAS,WAAW,CACtB,EAE2D,YAAY;CAIxE,MAAM,UAAU,eAAe;EAAE,MAAM,MAAM;EAAM,OAAO,MAAM;EAAO,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,CAAC;CAKpG,MAAM,cAAc,cAAc;AAChC,MAAI,CAAC,2BAA2B,CAAE,QAAO;EACzC,MAAM,EAAE,gBAAgB,GAAG,GAAG,SAAS,uBACrC,YACA,SACA,QACA,QACA,QACA,QACA,eACD;AACD,SAAO;IACN,CAAC,YAAY,QAAQ,CAAC;CAGzB,MAAM,CAAC,aAAa,kBAAkB,SAA+B,KAAK;AAE1E,uBAAsB;AACpB,MAAI,2BAA2B,CAAE;AACjC,MAAI,CAAC,MAAM,MAAM;AACf,kBAAe,KAAK;AACpB;;EAGF,SAAS,UAAgB;GACvB,MAAM,YAAY,QAAQ;GAC1B,MAAM,UAAU,YAAY;AAC5B,OAAI,CAAC,aAAa,CAAC,QAAS;AAO5B,kBACE,uBACE,YACA,SARgB,UAAU,uBAAuB,EACnC,qBAAqB,QAAQ,EAC1B,SAAS,gBAAgB,uBAAuB,EACrD,eAAe,SAAS,eAAe,EAUnD,eACD,CACF;;AAGH,WAAS;EACT,MAAM,YAAY,QAAQ;EAC1B,MAAM,UAAU,YAAY;EAE5B,IAAI,QAAQ;EACZ,SAAS,aAAmB;AAC1B,wBAAqB,MAAM;AAC3B,WAAQ,sBAAsB,QAAQ;;AAKxC,cAAY;EAEZ,MAAM,iBACJ,OAAO,mBAAmB,aACtB,IAAI,qBAAqB;AACvB,eAAY;IACZ,GACF;AAEN,MAAI,aAAa,eACf,gBAAe,QAAQ,UAAU;AAGnC,MAAI,WAAW,eACb,gBAAe,QAAQ,QAAQ;AAGjC,SAAO,iBAAiB,UAAU,YAAY;GAAE,SAAS;GAAM,SAAS;GAAM,CAAC;AAC/E,SAAO,iBAAiB,UAAU,WAAW;AAE7C,eAAa;AACX,wBAAqB,MAAM;AAC3B,mBAAgB,YAAY;AAC5B,UAAO,oBAAoB,UAAU,YAAY,KAAK;AACtD,UAAO,oBAAoB,UAAU,WAAW;;IAEjD;EAAC,MAAM;EAAM;EAAY;EAAS;EAAQ,CAAC;CAI9C,MAAM,mBAAmB,eAAe,eAAe;AAIvD,KAAI,CAAC,MAAM,KACT,QAAO;CAIT,MAAM,EAAE,YAAY,GAAG,mBAAmB,QAAQ;AAElD,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK;EACL,OAAO;GACL;IACE,IAAI;IACJ,OAAO;IACP,GAAG,KAAK,cAAc,MAAM;IAC7B;GACD;IAAE,GAAG;IAAgB,QAAQ;IAAY;GACzC;GACD;EACF,CACF;EACD"}
@@ -1,5 +1,5 @@
1
- import { ReactNode } from "react";
2
1
  import { TooltipGroupProps } from "@videojs/core";
2
+ import { ReactNode } from "react";
3
3
 
4
4
  //#region src/ui/tooltip/tooltip-provider.d.ts
5
5
  interface TooltipProviderProps extends TooltipGroupProps {
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
 
3
3
  import { TooltipGroupContextProvider } from "./group-context.js";
4
+ import { TooltipGroupCore } from "@videojs/core";
4
5
  import { useState } from "react";
5
6
  import { jsx } from "react/jsx-runtime";
6
- import { TooltipGroupCore } from "@videojs/core";
7
7
 
8
8
  //#region src/ui/tooltip/tooltip-provider.tsx
9
9
  function TooltipProvider({ delay, closeDelay, timeout, children }) {
@@ -1,6 +1,6 @@
1
+ import { TooltipProps } from "@videojs/core";
1
2
  import { TooltipChangeDetails } from "@videojs/core/dom";
2
3
  import { ReactNode } from "react";
3
- import { TooltipProps } from "@videojs/core";
4
4
 
5
5
  //#region src/ui/tooltip/tooltip-root.d.ts
6
6
  interface TooltipRootProps extends TooltipProps {
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-root.d.ts","names":[],"sources":["../../../../src/ui/tooltip/tooltip-root.tsx"],"mappings":";;;;;UAaiB,gBAAA,SAAyB,YAAA;;EAExC,YAAA,IAAgB,IAAA,WAAe,OAAA,EAAS,oBAAA;EAFR;EAIhC,oBAAA,IAAwB,IAAA;EACxB,QAAA,GAAW,SAAA;AAAA;AAAA,iBAGG,WAAA,CAAA;EACd,IAAA,EAAM,cAAA;EACN,WAAA;EACA,YAAA,EAAc,gBAAA;EACd,oBAAA,EAAsB,wBAAA;EACtB,KAAA;EACA,UAAA;EACA,qBAAA;EACA,QAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,gBAAA,GAAmB,SAAA;AAAA,kBAyEL,WAAA;EAAA,KACH,KAAA,GAAQ,gBAAA;AAAA"}
1
+ {"version":3,"file":"tooltip-root.d.ts","names":[],"sources":["../../../../src/ui/tooltip/tooltip-root.tsx"],"mappings":";;;;;UAciB,gBAAA,SAAyB,YAAA;;EAExC,YAAA,IAAgB,IAAA,WAAe,OAAA,EAAS,oBAAA;EAFR;EAIhC,oBAAA,IAAwB,IAAA;EACxB,QAAA,GAAW,SAAA;AAAA;AAAA,iBAGG,WAAA,CAAA;EACd,IAAA,EAAM,cAAA;EACN,WAAA;EACA,YAAA,EAAc,gBAAA;EACd,oBAAA,EAAsB,wBAAA;EACtB,KAAA;EACA,UAAA;EACA,qBAAA;EACA,QAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,gBAAA,GAAmB,SAAA;AAAA,kBAwEL,WAAA;EAAA,KACH,KAAA,GAAQ,gBAAA;AAAA"}
@@ -1,14 +1,15 @@
1
1
  'use client';
2
2
 
3
3
  import { useLatestRef } from "../../utils/use-latest-ref.js";
4
+ import { useDestroy } from "../../utils/use-destroy.js";
4
5
  import { useSafeId } from "../../utils/use-safe-id.js";
5
6
  import { TooltipContextProvider } from "./context.js";
6
7
  import { useTooltipGroup } from "./group-context.js";
8
+ import { TooltipCore, TooltipDataAttrs } from "@videojs/core";
7
9
  import { createTooltip, createTransition } from "@videojs/core/dom";
8
10
  import { useSnapshot } from "@videojs/store/react";
9
11
  import { useEffect, useState } from "react";
10
12
  import { jsx } from "react/jsx-runtime";
11
- import { TooltipCore, TooltipDataAttrs } from "@videojs/core";
12
13
 
13
14
  //#region src/ui/tooltip/tooltip-root.tsx
14
15
  function TooltipRoot({ open: controlledOpen, defaultOpen = TooltipCore.defaultProps.defaultOpen, onOpenChange: onOpenChangeProp, onOpenChangeComplete: onOpenChangeCompleteProp, delay = TooltipCore.defaultProps.delay, closeDelay = TooltipCore.defaultProps.closeDelay, disableHoverablePopup = TooltipCore.defaultProps.disableHoverablePopup, disabled = TooltipCore.defaultProps.disabled, children, ...coreProps }) {
@@ -50,7 +51,7 @@ function TooltipRoot({ open: controlledOpen, defaultOpen = TooltipCore.defaultPr
50
51
  if (controlledOpen) tooltip.open();
51
52
  else tooltip.close();
52
53
  }, [controlledOpen, tooltip]);
53
- useEffect(() => () => tooltip.destroy(), [tooltip]);
54
+ useDestroy(tooltip);
54
55
  const input = useSnapshot(tooltip.input);
55
56
  core.setInput(input);
56
57
  return /* @__PURE__ */ jsx(TooltipContextProvider, {