@videojs/react 10.0.0-beta.2 → 10.0.0-beta.22

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 (802) hide show
  1. package/dist/default/_virtual/_rolldown/runtime.js +6 -11
  2. package/dist/default/icons/dist/react/default/captions-off.js +1 -3
  3. package/dist/default/icons/dist/react/default/captions-off.js.map +1 -1
  4. package/dist/default/icons/dist/react/default/captions-on.js +1 -3
  5. package/dist/default/icons/dist/react/default/captions-on.js.map +1 -1
  6. package/dist/default/icons/dist/react/default/cast-enter.js +32 -0
  7. package/dist/default/icons/dist/react/default/cast-enter.js.map +1 -0
  8. package/dist/default/icons/dist/react/default/cast-exit.js +36 -0
  9. package/dist/default/icons/dist/react/default/cast-exit.js.map +1 -0
  10. package/dist/default/icons/dist/react/default/fullscreen-enter.js +1 -3
  11. package/dist/default/icons/dist/react/default/fullscreen-enter.js.map +1 -1
  12. package/dist/default/icons/dist/react/default/fullscreen-exit.js +1 -3
  13. package/dist/default/icons/dist/react/default/fullscreen-exit.js.map +1 -1
  14. package/dist/default/icons/dist/react/default/pause.js +1 -3
  15. package/dist/default/icons/dist/react/default/pause.js.map +1 -1
  16. package/dist/default/icons/dist/react/default/pip-enter.js +32 -0
  17. package/dist/default/icons/dist/react/default/pip-enter.js.map +1 -0
  18. package/dist/default/icons/dist/react/default/pip-exit.js +32 -0
  19. package/dist/default/icons/dist/react/default/pip-exit.js.map +1 -0
  20. package/dist/default/icons/dist/react/default/play.js +1 -3
  21. package/dist/default/icons/dist/react/default/play.js.map +1 -1
  22. package/dist/default/icons/dist/react/default/restart.js +1 -3
  23. package/dist/default/icons/dist/react/default/restart.js.map +1 -1
  24. package/dist/default/icons/dist/react/default/seek.js +1 -3
  25. package/dist/default/icons/dist/react/default/seek.js.map +1 -1
  26. package/dist/default/icons/dist/react/default/spinner.js +1 -3
  27. package/dist/default/icons/dist/react/default/spinner.js.map +1 -1
  28. package/dist/default/icons/dist/react/default/volume-high.js +1 -3
  29. package/dist/default/icons/dist/react/default/volume-high.js.map +1 -1
  30. package/dist/default/icons/dist/react/default/volume-low.js +1 -3
  31. package/dist/default/icons/dist/react/default/volume-low.js.map +1 -1
  32. package/dist/default/icons/dist/react/default/volume-off.js +1 -3
  33. package/dist/default/icons/dist/react/default/volume-off.js.map +1 -1
  34. package/dist/default/icons/dist/react/minimal/captions-off.js +1 -3
  35. package/dist/default/icons/dist/react/minimal/captions-off.js.map +1 -1
  36. package/dist/default/icons/dist/react/minimal/captions-on.js +1 -3
  37. package/dist/default/icons/dist/react/minimal/captions-on.js.map +1 -1
  38. package/dist/default/icons/dist/react/minimal/cast-enter.js +28 -0
  39. package/dist/default/icons/dist/react/minimal/cast-enter.js.map +1 -0
  40. package/dist/default/icons/dist/react/minimal/cast-exit.js +32 -0
  41. package/dist/default/icons/dist/react/minimal/cast-exit.js.map +1 -0
  42. package/dist/default/icons/dist/react/minimal/fullscreen-enter.js +1 -3
  43. package/dist/default/icons/dist/react/minimal/fullscreen-enter.js.map +1 -1
  44. package/dist/default/icons/dist/react/minimal/fullscreen-exit.js +1 -3
  45. package/dist/default/icons/dist/react/minimal/fullscreen-exit.js.map +1 -1
  46. package/dist/default/icons/dist/react/minimal/pause.js +1 -3
  47. package/dist/default/icons/dist/react/minimal/pause.js.map +1 -1
  48. package/dist/default/icons/dist/react/minimal/pip-enter.js +36 -0
  49. package/dist/default/icons/dist/react/minimal/pip-enter.js.map +1 -0
  50. package/dist/default/icons/dist/react/minimal/pip-exit.js +36 -0
  51. package/dist/default/icons/dist/react/minimal/pip-exit.js.map +1 -0
  52. package/dist/default/icons/dist/react/minimal/play.js +1 -3
  53. package/dist/default/icons/dist/react/minimal/play.js.map +1 -1
  54. package/dist/default/icons/dist/react/minimal/restart.js +1 -3
  55. package/dist/default/icons/dist/react/minimal/restart.js.map +1 -1
  56. package/dist/default/icons/dist/react/minimal/seek.js +1 -3
  57. package/dist/default/icons/dist/react/minimal/seek.js.map +1 -1
  58. package/dist/default/icons/dist/react/minimal/spinner.js +1 -3
  59. package/dist/default/icons/dist/react/minimal/spinner.js.map +1 -1
  60. package/dist/default/icons/dist/react/minimal/volume-high.js +1 -3
  61. package/dist/default/icons/dist/react/minimal/volume-high.js.map +1 -1
  62. package/dist/default/icons/dist/react/minimal/volume-low.js +1 -3
  63. package/dist/default/icons/dist/react/minimal/volume-low.js.map +1 -1
  64. package/dist/default/icons/dist/react/minimal/volume-off.js +1 -3
  65. package/dist/default/icons/dist/react/minimal/volume-off.js.map +1 -1
  66. package/dist/default/index.js +26 -14
  67. package/dist/default/media/audio.js +5 -10
  68. package/dist/default/media/audio.js.map +1 -1
  69. package/dist/default/media/background-video/index.js +4 -6
  70. package/dist/default/media/background-video/index.js.map +1 -1
  71. package/dist/default/media/dash-video/index.js +21 -0
  72. package/dist/default/media/dash-video/index.js.map +1 -0
  73. package/dist/default/media/hls-video/index.js +8 -13
  74. package/dist/default/media/hls-video/index.js.map +1 -1
  75. package/dist/default/media/mux-audio/index.js +20 -0
  76. package/dist/default/media/mux-audio/index.js.map +1 -0
  77. package/dist/default/media/mux-video/index.js +21 -0
  78. package/dist/default/media/mux-video/index.js.map +1 -0
  79. package/dist/default/media/native-hls-video/index.js +21 -0
  80. package/dist/default/media/native-hls-video/index.js.map +1 -0
  81. package/dist/default/media/simple-hls-video/index.js +8 -12
  82. package/dist/default/media/simple-hls-video/index.js.map +1 -1
  83. package/dist/default/media/video.js +5 -10
  84. package/dist/default/media/video.js.map +1 -1
  85. package/dist/default/player/context.js +27 -15
  86. package/dist/default/player/context.js.map +1 -1
  87. package/dist/default/player/create-player.js +18 -6
  88. package/dist/default/player/create-player.js.map +1 -1
  89. package/dist/default/presets/audio/index.js +1 -2
  90. package/dist/default/presets/audio/minimal-skin.css +293 -194
  91. package/dist/default/presets/audio/minimal-skin.js +144 -123
  92. package/dist/default/presets/audio/minimal-skin.js.map +1 -1
  93. package/dist/default/presets/audio/minimal-skin.tailwind.js +156 -137
  94. package/dist/default/presets/audio/minimal-skin.tailwind.js.map +1 -1
  95. package/dist/default/presets/audio/skin.css +276 -186
  96. package/dist/default/presets/audio/skin.js +218 -126
  97. package/dist/default/presets/audio/skin.js.map +1 -1
  98. package/dist/default/presets/audio/skin.tailwind.js +166 -141
  99. package/dist/default/presets/audio/skin.tailwind.js.map +1 -1
  100. package/dist/default/presets/background/index.js +1 -2
  101. package/dist/default/presets/background/skin.js +1 -2
  102. package/dist/default/presets/background/skin.js.map +1 -1
  103. package/dist/default/presets/video/index.js +1 -2
  104. package/dist/default/presets/video/minimal-skin.css +593 -340
  105. package/dist/default/presets/video/minimal-skin.js +149 -122
  106. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  107. package/dist/default/presets/video/minimal-skin.tailwind.js +160 -138
  108. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  109. package/dist/default/presets/video/skin.css +561 -323
  110. package/dist/default/presets/video/skin.js +310 -171
  111. package/dist/default/presets/video/skin.js.map +1 -1
  112. package/dist/default/presets/video/skin.tailwind.js +215 -186
  113. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  114. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +17 -32
  115. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  116. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js +1 -1
  117. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js.map +1 -1
  118. package/dist/default/skins/dist/default/default/tailwind/components/button-group.js +7 -0
  119. package/dist/default/skins/dist/default/default/tailwind/components/button-group.js.map +1 -0
  120. package/dist/default/skins/dist/default/default/tailwind/components/button.js +5 -5
  121. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  122. package/dist/default/skins/dist/default/default/tailwind/components/controls.js +2 -3
  123. package/dist/default/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  124. package/dist/default/skins/dist/default/default/tailwind/components/error.js +4 -5
  125. package/dist/default/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  126. package/dist/default/skins/dist/default/default/tailwind/components/icon.js +1 -2
  127. package/dist/default/skins/dist/default/default/tailwind/components/icon.js.map +1 -1
  128. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js +2 -3
  129. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  130. package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js +1 -1
  131. package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -1
  132. package/dist/default/skins/dist/default/default/tailwind/components/popup.js +5 -6
  133. package/dist/default/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  134. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +15 -0
  135. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  136. package/dist/default/skins/dist/default/default/tailwind/components/preview.js +12 -0
  137. package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  138. package/dist/default/skins/dist/default/default/tailwind/components/root.js +2 -3
  139. package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  140. package/dist/default/skins/dist/default/default/tailwind/components/seek.js +2 -3
  141. package/dist/default/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  142. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +2 -3
  143. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  144. package/dist/default/skins/dist/default/default/tailwind/components/surface.js +2 -3
  145. package/dist/default/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  146. package/dist/default/skins/dist/default/default/tailwind/components/time.js +1 -1
  147. package/dist/default/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  148. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +41 -25
  149. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  150. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +18 -27
  151. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  152. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js +1 -1
  153. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -1
  154. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js +1 -2
  155. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -1
  156. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +5 -5
  157. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  158. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js +2 -3
  159. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  160. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js +4 -5
  161. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js.map +1 -1
  162. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js +1 -2
  163. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -1
  164. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js +2 -3
  165. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  166. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +5 -5
  167. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  168. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +15 -0
  169. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  170. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js +13 -0
  171. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  172. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +2 -3
  173. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  174. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js +2 -3
  175. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  176. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +2 -3
  177. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  178. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js +5 -6
  179. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  180. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +44 -23
  181. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  182. package/dist/{dev/skins/dist/default/default/tailwind/components → default/skins/dist/default/shared/tailwind}/icon-state.js +12 -2
  183. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
  184. package/dist/default/ui/alert-dialog/alert-dialog-close.js +2 -4
  185. package/dist/default/ui/alert-dialog/alert-dialog-close.js.map +1 -1
  186. package/dist/default/ui/alert-dialog/alert-dialog-description.js +2 -4
  187. package/dist/default/ui/alert-dialog/alert-dialog-description.js.map +1 -1
  188. package/dist/default/ui/alert-dialog/alert-dialog-popup.js +2 -4
  189. package/dist/default/ui/alert-dialog/alert-dialog-popup.js.map +1 -1
  190. package/dist/default/ui/alert-dialog/alert-dialog-root.js +5 -7
  191. package/dist/default/ui/alert-dialog/alert-dialog-root.js.map +1 -1
  192. package/dist/default/ui/alert-dialog/alert-dialog-title.js +2 -4
  193. package/dist/default/ui/alert-dialog/alert-dialog-title.js.map +1 -1
  194. package/dist/default/ui/alert-dialog/context.js +2 -4
  195. package/dist/default/ui/alert-dialog/context.js.map +1 -1
  196. package/dist/default/ui/alert-dialog/index.js +1 -2
  197. package/dist/default/ui/alert-dialog/index.parts.js +1 -2
  198. package/dist/default/ui/buffering-indicator/buffering-indicator.js +4 -4
  199. package/dist/default/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  200. package/dist/default/ui/buffering-indicator/index.js +1 -2
  201. package/dist/default/ui/captions-button/captions-button.js +4 -5
  202. package/dist/default/ui/captions-button/captions-button.js.map +1 -1
  203. package/dist/default/ui/captions-button/index.js +1 -2
  204. package/dist/default/ui/cast-button/cast-button.js +17 -0
  205. package/dist/default/ui/cast-button/cast-button.js.map +1 -0
  206. package/dist/default/ui/cast-button/index.js +2 -0
  207. package/dist/default/ui/controls/context.js +2 -4
  208. package/dist/default/ui/controls/context.js.map +1 -1
  209. package/dist/default/ui/controls/controls-group.js +2 -4
  210. package/dist/default/ui/controls/controls-group.js.map +1 -1
  211. package/dist/default/ui/controls/controls-root.js +2 -4
  212. package/dist/default/ui/controls/controls-root.js.map +1 -1
  213. package/dist/default/ui/controls/index.js +1 -2
  214. package/dist/default/ui/controls/index.parts.js +1 -2
  215. package/dist/default/ui/create-context-part.js +2 -4
  216. package/dist/default/ui/create-context-part.js.map +1 -1
  217. package/dist/default/ui/create-media-button.js +22 -10
  218. package/dist/default/ui/create-media-button.js.map +1 -1
  219. package/dist/default/ui/error-dialog/context.js +14 -0
  220. package/dist/default/ui/error-dialog/context.js.map +1 -0
  221. package/dist/default/ui/error-dialog/error-dialog-description.js +28 -0
  222. package/dist/default/ui/error-dialog/error-dialog-description.js.map +1 -0
  223. package/dist/default/ui/error-dialog/error-dialog-root.js +57 -0
  224. package/dist/default/ui/error-dialog/error-dialog-root.js.map +1 -0
  225. package/dist/default/ui/error-dialog/index.js +3 -0
  226. package/dist/default/ui/error-dialog/index.parts.js +18 -0
  227. package/dist/default/ui/error-dialog/index.parts.js.map +1 -0
  228. package/dist/default/ui/fullscreen-button/fullscreen-button.js +4 -5
  229. package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  230. package/dist/default/ui/fullscreen-button/index.js +1 -2
  231. package/dist/default/ui/gesture/media-gesture.js +42 -0
  232. package/dist/default/ui/gesture/media-gesture.js.map +1 -0
  233. package/dist/default/ui/gesture/use-doubletap-gesture.js +29 -0
  234. package/dist/default/ui/gesture/use-doubletap-gesture.js.map +1 -0
  235. package/dist/default/ui/gesture/use-tap-gesture.js +29 -0
  236. package/dist/default/ui/gesture/use-tap-gesture.js.map +1 -0
  237. package/dist/default/ui/hooks/use-button.js +2 -4
  238. package/dist/default/ui/hooks/use-button.js.map +1 -1
  239. package/dist/default/ui/hooks/use-slider.js +4 -6
  240. package/dist/default/ui/hooks/use-slider.js.map +1 -1
  241. package/dist/default/ui/hotkey/media-hotkey.js +41 -0
  242. package/dist/default/ui/hotkey/media-hotkey.js.map +1 -0
  243. package/dist/default/ui/hotkey/use-aria-key-shortcuts.js +16 -0
  244. package/dist/default/ui/hotkey/use-aria-key-shortcuts.js.map +1 -0
  245. package/dist/default/ui/hotkey/use-hotkey.js +32 -0
  246. package/dist/default/ui/hotkey/use-hotkey.js.map +1 -0
  247. package/dist/default/ui/mute-button/index.js +1 -2
  248. package/dist/default/ui/mute-button/mute-button.js +4 -5
  249. package/dist/default/ui/mute-button/mute-button.js.map +1 -1
  250. package/dist/default/ui/pip-button/index.js +1 -2
  251. package/dist/default/ui/pip-button/pip-button.js +4 -5
  252. package/dist/default/ui/pip-button/pip-button.js.map +1 -1
  253. package/dist/default/ui/play-button/index.js +1 -2
  254. package/dist/default/ui/play-button/play-button.js +4 -5
  255. package/dist/default/ui/play-button/play-button.js.map +1 -1
  256. package/dist/default/ui/playback-rate-button/index.js +1 -2
  257. package/dist/default/ui/playback-rate-button/playback-rate-button.js +2 -4
  258. package/dist/default/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  259. package/dist/default/ui/popover/context.js +2 -4
  260. package/dist/default/ui/popover/context.js.map +1 -1
  261. package/dist/default/ui/popover/index.js +1 -2
  262. package/dist/default/ui/popover/index.parts.js +1 -2
  263. package/dist/default/ui/popover/popover-arrow.js +2 -4
  264. package/dist/default/ui/popover/popover-arrow.js.map +1 -1
  265. package/dist/default/ui/popover/popover-popup.js +13 -6
  266. package/dist/default/ui/popover/popover-popup.js.map +1 -1
  267. package/dist/default/ui/popover/popover-root.js +4 -6
  268. package/dist/default/ui/popover/popover-root.js.map +1 -1
  269. package/dist/default/ui/popover/popover-trigger.js +2 -4
  270. package/dist/default/ui/popover/popover-trigger.js.map +1 -1
  271. package/dist/default/ui/poster/index.js +1 -2
  272. package/dist/default/ui/poster/poster.js +2 -4
  273. package/dist/default/ui/poster/poster.js.map +1 -1
  274. package/dist/default/ui/seek-button/index.js +1 -2
  275. package/dist/default/ui/seek-button/seek-button.js +2 -4
  276. package/dist/default/ui/seek-button/seek-button.js.map +1 -1
  277. package/dist/default/ui/slider/context.js +2 -4
  278. package/dist/default/ui/slider/context.js.map +1 -1
  279. package/dist/default/ui/slider/index.js +1 -2
  280. package/dist/default/ui/slider/index.parts.js +1 -2
  281. package/dist/default/ui/slider/slider-buffer.js +2 -4
  282. package/dist/default/ui/slider/slider-buffer.js.map +1 -1
  283. package/dist/default/ui/slider/slider-fill.js +2 -4
  284. package/dist/default/ui/slider/slider-fill.js.map +1 -1
  285. package/dist/default/ui/slider/slider-preview.js +2 -4
  286. package/dist/default/ui/slider/slider-preview.js.map +1 -1
  287. package/dist/default/ui/slider/slider-root.js +2 -4
  288. package/dist/default/ui/slider/slider-root.js.map +1 -1
  289. package/dist/default/ui/slider/slider-thumb.js +2 -4
  290. package/dist/default/ui/slider/slider-thumb.js.map +1 -1
  291. package/dist/default/ui/slider/slider-thumbnail.js +2 -4
  292. package/dist/default/ui/slider/slider-thumbnail.js.map +1 -1
  293. package/dist/default/ui/slider/slider-track.js +2 -4
  294. package/dist/default/ui/slider/slider-track.js.map +1 -1
  295. package/dist/default/ui/slider/slider-value.js +2 -4
  296. package/dist/default/ui/slider/slider-value.js.map +1 -1
  297. package/dist/default/ui/thumbnail/index.js +2 -0
  298. package/dist/default/ui/thumbnail/thumbnail.js +3 -6
  299. package/dist/default/ui/thumbnail/thumbnail.js.map +1 -1
  300. package/dist/default/ui/time/index.js +1 -2
  301. package/dist/default/ui/time/index.parts.js +1 -2
  302. package/dist/default/ui/time/time-group.js +2 -4
  303. package/dist/default/ui/time/time-group.js.map +1 -1
  304. package/dist/default/ui/time/time-separator.js +2 -4
  305. package/dist/default/ui/time/time-separator.js.map +1 -1
  306. package/dist/default/ui/time/time-value.js +2 -4
  307. package/dist/default/ui/time/time-value.js.map +1 -1
  308. package/dist/default/ui/time-slider/index.js +1 -2
  309. package/dist/default/ui/time-slider/index.parts.js +1 -2
  310. package/dist/default/ui/time-slider/time-slider-root.js +6 -8
  311. package/dist/default/ui/time-slider/time-slider-root.js.map +1 -1
  312. package/dist/default/ui/tooltip/context.js +6 -5
  313. package/dist/default/ui/tooltip/context.js.map +1 -1
  314. package/dist/default/ui/tooltip/group-context.js +2 -4
  315. package/dist/default/ui/tooltip/group-context.js.map +1 -1
  316. package/dist/default/ui/tooltip/index.js +2 -3
  317. package/dist/default/ui/tooltip/index.parts.js +1 -2
  318. package/dist/default/ui/tooltip/tooltip-arrow.js +2 -4
  319. package/dist/default/ui/tooltip/tooltip-arrow.js.map +1 -1
  320. package/dist/default/ui/tooltip/tooltip-popup.js +15 -7
  321. package/dist/default/ui/tooltip/tooltip-popup.js.map +1 -1
  322. package/dist/default/ui/tooltip/tooltip-provider.js +2 -4
  323. package/dist/default/ui/tooltip/tooltip-provider.js.map +1 -1
  324. package/dist/default/ui/tooltip/tooltip-root.js +9 -7
  325. package/dist/default/ui/tooltip/tooltip-root.js.map +1 -1
  326. package/dist/default/ui/tooltip/tooltip-trigger.js +4 -9
  327. package/dist/default/ui/tooltip/tooltip-trigger.js.map +1 -1
  328. package/dist/default/ui/volume-slider/index.js +1 -2
  329. package/dist/default/ui/volume-slider/index.parts.js +1 -2
  330. package/dist/default/ui/volume-slider/volume-slider-root.js +36 -20
  331. package/dist/default/ui/volume-slider/volume-slider-root.js.map +1 -1
  332. package/dist/default/utils/attach-media-element.js +1 -1
  333. package/dist/default/utils/media-props.js +14 -6
  334. package/dist/default/utils/media-props.js.map +1 -1
  335. package/dist/default/utils/merge-props.js +2 -3
  336. package/dist/default/utils/merge-props.js.map +1 -1
  337. package/dist/default/utils/use-composed-refs.js +2 -4
  338. package/dist/default/utils/use-composed-refs.js.map +1 -1
  339. package/dist/default/utils/use-destroy.js +14 -8
  340. package/dist/default/utils/use-destroy.js.map +1 -1
  341. package/dist/default/utils/use-force-render.js +2 -4
  342. package/dist/default/utils/use-force-render.js.map +1 -1
  343. package/dist/default/utils/use-latest-ref.js +2 -4
  344. package/dist/default/utils/use-latest-ref.js.map +1 -1
  345. package/dist/default/utils/use-media-instance.js +22 -0
  346. package/dist/default/utils/use-media-instance.js.map +1 -0
  347. package/dist/default/utils/use-render.js +7 -5
  348. package/dist/default/utils/use-render.js.map +1 -1
  349. package/dist/default/utils/use-safe-id.js +3 -5
  350. package/dist/default/utils/use-safe-id.js.map +1 -1
  351. package/dist/dev/_virtual/_rolldown/runtime.js +6 -11
  352. package/dist/dev/icons/dist/react/default/captions-off.js +1 -3
  353. package/dist/dev/icons/dist/react/default/captions-off.js.map +1 -1
  354. package/dist/dev/icons/dist/react/default/captions-on.js +1 -3
  355. package/dist/dev/icons/dist/react/default/captions-on.js.map +1 -1
  356. package/dist/dev/icons/dist/react/default/cast-enter.js +32 -0
  357. package/dist/dev/icons/dist/react/default/cast-enter.js.map +1 -0
  358. package/dist/dev/icons/dist/react/default/cast-exit.js +36 -0
  359. package/dist/dev/icons/dist/react/default/cast-exit.js.map +1 -0
  360. package/dist/dev/icons/dist/react/default/fullscreen-enter.js +1 -3
  361. package/dist/dev/icons/dist/react/default/fullscreen-enter.js.map +1 -1
  362. package/dist/dev/icons/dist/react/default/fullscreen-exit.js +1 -3
  363. package/dist/dev/icons/dist/react/default/fullscreen-exit.js.map +1 -1
  364. package/dist/dev/icons/dist/react/default/pause.js +1 -3
  365. package/dist/dev/icons/dist/react/default/pause.js.map +1 -1
  366. package/dist/dev/icons/dist/react/default/pip-enter.js +32 -0
  367. package/dist/dev/icons/dist/react/default/pip-enter.js.map +1 -0
  368. package/dist/dev/icons/dist/react/default/pip-exit.js +32 -0
  369. package/dist/dev/icons/dist/react/default/pip-exit.js.map +1 -0
  370. package/dist/dev/icons/dist/react/default/play.js +1 -3
  371. package/dist/dev/icons/dist/react/default/play.js.map +1 -1
  372. package/dist/dev/icons/dist/react/default/restart.js +1 -3
  373. package/dist/dev/icons/dist/react/default/restart.js.map +1 -1
  374. package/dist/dev/icons/dist/react/default/seek.js +1 -3
  375. package/dist/dev/icons/dist/react/default/seek.js.map +1 -1
  376. package/dist/dev/icons/dist/react/default/spinner.js +1 -3
  377. package/dist/dev/icons/dist/react/default/spinner.js.map +1 -1
  378. package/dist/dev/icons/dist/react/default/volume-high.js +1 -3
  379. package/dist/dev/icons/dist/react/default/volume-high.js.map +1 -1
  380. package/dist/dev/icons/dist/react/default/volume-low.js +1 -3
  381. package/dist/dev/icons/dist/react/default/volume-low.js.map +1 -1
  382. package/dist/dev/icons/dist/react/default/volume-off.js +1 -3
  383. package/dist/dev/icons/dist/react/default/volume-off.js.map +1 -1
  384. package/dist/dev/icons/dist/react/minimal/captions-off.js +1 -3
  385. package/dist/dev/icons/dist/react/minimal/captions-off.js.map +1 -1
  386. package/dist/dev/icons/dist/react/minimal/captions-on.js +1 -3
  387. package/dist/dev/icons/dist/react/minimal/captions-on.js.map +1 -1
  388. package/dist/dev/icons/dist/react/minimal/cast-enter.js +28 -0
  389. package/dist/dev/icons/dist/react/minimal/cast-enter.js.map +1 -0
  390. package/dist/dev/icons/dist/react/minimal/cast-exit.js +32 -0
  391. package/dist/dev/icons/dist/react/minimal/cast-exit.js.map +1 -0
  392. package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js +1 -3
  393. package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js.map +1 -1
  394. package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js +1 -3
  395. package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js.map +1 -1
  396. package/dist/dev/icons/dist/react/minimal/pause.js +1 -3
  397. package/dist/dev/icons/dist/react/minimal/pause.js.map +1 -1
  398. package/dist/dev/icons/dist/react/minimal/pip-enter.js +36 -0
  399. package/dist/dev/icons/dist/react/minimal/pip-enter.js.map +1 -0
  400. package/dist/dev/icons/dist/react/minimal/pip-exit.js +36 -0
  401. package/dist/dev/icons/dist/react/minimal/pip-exit.js.map +1 -0
  402. package/dist/dev/icons/dist/react/minimal/play.js +1 -3
  403. package/dist/dev/icons/dist/react/minimal/play.js.map +1 -1
  404. package/dist/dev/icons/dist/react/minimal/restart.js +1 -3
  405. package/dist/dev/icons/dist/react/minimal/restart.js.map +1 -1
  406. package/dist/dev/icons/dist/react/minimal/seek.js +1 -3
  407. package/dist/dev/icons/dist/react/minimal/seek.js.map +1 -1
  408. package/dist/dev/icons/dist/react/minimal/spinner.js +1 -3
  409. package/dist/dev/icons/dist/react/minimal/spinner.js.map +1 -1
  410. package/dist/dev/icons/dist/react/minimal/volume-high.js +1 -3
  411. package/dist/dev/icons/dist/react/minimal/volume-high.js.map +1 -1
  412. package/dist/dev/icons/dist/react/minimal/volume-low.js +1 -3
  413. package/dist/dev/icons/dist/react/minimal/volume-low.js.map +1 -1
  414. package/dist/dev/icons/dist/react/minimal/volume-off.js +1 -3
  415. package/dist/dev/icons/dist/react/minimal/volume-off.js.map +1 -1
  416. package/dist/dev/index.d.ts +23 -8
  417. package/dist/dev/index.js +26 -14
  418. package/dist/dev/media/audio.d.ts.map +1 -1
  419. package/dist/dev/media/audio.js +5 -10
  420. package/dist/dev/media/audio.js.map +1 -1
  421. package/dist/dev/media/background-video/index.js +4 -6
  422. package/dist/dev/media/background-video/index.js.map +1 -1
  423. package/dist/dev/media/dash-video/index.d.ts +16 -0
  424. package/dist/dev/media/dash-video/index.d.ts.map +1 -0
  425. package/dist/dev/media/dash-video/index.js +21 -0
  426. package/dist/dev/media/dash-video/index.js.map +1 -0
  427. package/dist/dev/media/hls-video/index.d.ts +8 -3
  428. package/dist/dev/media/hls-video/index.d.ts.map +1 -1
  429. package/dist/dev/media/hls-video/index.js +8 -13
  430. package/dist/dev/media/hls-video/index.js.map +1 -1
  431. package/dist/dev/media/mux-audio/index.d.ts +13 -0
  432. package/dist/dev/media/mux-audio/index.d.ts.map +1 -0
  433. package/dist/dev/media/mux-audio/index.js +20 -0
  434. package/dist/dev/media/mux-audio/index.js.map +1 -0
  435. package/dist/dev/media/mux-video/index.d.ts +16 -0
  436. package/dist/dev/media/mux-video/index.d.ts.map +1 -0
  437. package/dist/dev/media/mux-video/index.js +21 -0
  438. package/dist/dev/media/mux-video/index.js.map +1 -0
  439. package/dist/dev/media/native-hls-video/index.d.ts +16 -0
  440. package/dist/dev/media/native-hls-video/index.d.ts.map +1 -0
  441. package/dist/dev/media/native-hls-video/index.js +21 -0
  442. package/dist/dev/media/native-hls-video/index.js.map +1 -0
  443. package/dist/dev/media/simple-hls-video/index.d.ts +4 -1
  444. package/dist/dev/media/simple-hls-video/index.d.ts.map +1 -1
  445. package/dist/dev/media/simple-hls-video/index.js +8 -12
  446. package/dist/dev/media/simple-hls-video/index.js.map +1 -1
  447. package/dist/dev/media/video.d.ts.map +1 -1
  448. package/dist/dev/media/video.js +5 -10
  449. package/dist/dev/media/video.js.map +1 -1
  450. package/dist/dev/player/context.d.ts +24 -7
  451. package/dist/dev/player/context.d.ts.map +1 -1
  452. package/dist/dev/player/context.js +27 -15
  453. package/dist/dev/player/context.js.map +1 -1
  454. package/dist/dev/player/create-player.js +18 -6
  455. package/dist/dev/player/create-player.js.map +1 -1
  456. package/dist/dev/presets/audio/index.js +1 -2
  457. package/dist/dev/presets/audio/minimal-skin.css +293 -194
  458. package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -1
  459. package/dist/dev/presets/audio/minimal-skin.js +144 -123
  460. package/dist/dev/presets/audio/minimal-skin.js.map +1 -1
  461. package/dist/dev/presets/audio/minimal-skin.tailwind.d.ts.map +1 -1
  462. package/dist/dev/presets/audio/minimal-skin.tailwind.js +156 -137
  463. package/dist/dev/presets/audio/minimal-skin.tailwind.js.map +1 -1
  464. package/dist/dev/presets/audio/skin.css +276 -186
  465. package/dist/dev/presets/audio/skin.d.ts.map +1 -1
  466. package/dist/dev/presets/audio/skin.js +218 -126
  467. package/dist/dev/presets/audio/skin.js.map +1 -1
  468. package/dist/dev/presets/audio/skin.tailwind.d.ts.map +1 -1
  469. package/dist/dev/presets/audio/skin.tailwind.js +166 -141
  470. package/dist/dev/presets/audio/skin.tailwind.js.map +1 -1
  471. package/dist/dev/presets/background/index.js +1 -2
  472. package/dist/dev/presets/background/skin.js +1 -2
  473. package/dist/dev/presets/background/skin.js.map +1 -1
  474. package/dist/dev/presets/types.d.ts +6 -1
  475. package/dist/dev/presets/types.d.ts.map +1 -1
  476. package/dist/dev/presets/video/index.js +1 -2
  477. package/dist/dev/presets/video/minimal-skin.css +593 -340
  478. package/dist/dev/presets/video/minimal-skin.d.ts +2 -2
  479. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
  480. package/dist/dev/presets/video/minimal-skin.js +149 -122
  481. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  482. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
  483. package/dist/dev/presets/video/minimal-skin.tailwind.js +160 -138
  484. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  485. package/dist/dev/presets/video/skin.css +561 -323
  486. package/dist/dev/presets/video/skin.d.ts +2 -2
  487. package/dist/dev/presets/video/skin.d.ts.map +1 -1
  488. package/dist/dev/presets/video/skin.js +310 -171
  489. package/dist/dev/presets/video/skin.js.map +1 -1
  490. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
  491. package/dist/dev/presets/video/skin.tailwind.js +215 -186
  492. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  493. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +17 -32
  494. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  495. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js +1 -1
  496. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js.map +1 -1
  497. package/dist/dev/skins/dist/default/default/tailwind/components/button-group.js +7 -0
  498. package/dist/dev/skins/dist/default/default/tailwind/components/button-group.js.map +1 -0
  499. package/dist/dev/skins/dist/default/default/tailwind/components/button.js +5 -5
  500. package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  501. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js +2 -3
  502. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  503. package/dist/dev/skins/dist/default/default/tailwind/components/error.js +4 -5
  504. package/dist/dev/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  505. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js +1 -2
  506. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js.map +1 -1
  507. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js +2 -3
  508. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  509. package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js +1 -1
  510. package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -1
  511. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +5 -6
  512. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  513. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +15 -0
  514. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
  515. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js +12 -0
  516. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  517. package/dist/dev/skins/dist/default/default/tailwind/components/root.js +2 -3
  518. package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  519. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js +2 -3
  520. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  521. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +2 -3
  522. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  523. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js +2 -3
  524. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  525. package/dist/dev/skins/dist/default/default/tailwind/components/time.js +1 -1
  526. package/dist/dev/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  527. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +41 -25
  528. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  529. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +18 -27
  530. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  531. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js +1 -1
  532. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -1
  533. package/dist/dev/skins/dist/default/minimal/tailwind/components/button-group.js +1 -2
  534. package/dist/dev/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -1
  535. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +5 -5
  536. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  537. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js +2 -3
  538. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  539. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js +4 -5
  540. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js.map +1 -1
  541. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js +1 -2
  542. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -1
  543. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js +2 -3
  544. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  545. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +5 -5
  546. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  547. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +15 -0
  548. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
  549. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js +13 -0
  550. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  551. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +2 -3
  552. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  553. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js +2 -3
  554. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  555. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +2 -3
  556. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  557. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js +5 -6
  558. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  559. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +44 -23
  560. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  561. package/dist/{default/skins/dist/default/default/tailwind/components → dev/skins/dist/default/shared/tailwind}/icon-state.js +12 -2
  562. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
  563. package/dist/dev/ui/alert-dialog/alert-dialog-close.js +2 -4
  564. package/dist/dev/ui/alert-dialog/alert-dialog-close.js.map +1 -1
  565. package/dist/dev/ui/alert-dialog/alert-dialog-description.js +2 -4
  566. package/dist/dev/ui/alert-dialog/alert-dialog-description.js.map +1 -1
  567. package/dist/dev/ui/alert-dialog/alert-dialog-popup.js +2 -4
  568. package/dist/dev/ui/alert-dialog/alert-dialog-popup.js.map +1 -1
  569. package/dist/dev/ui/alert-dialog/alert-dialog-root.js +5 -7
  570. package/dist/dev/ui/alert-dialog/alert-dialog-root.js.map +1 -1
  571. package/dist/dev/ui/alert-dialog/alert-dialog-title.js +2 -4
  572. package/dist/dev/ui/alert-dialog/alert-dialog-title.js.map +1 -1
  573. package/dist/dev/ui/alert-dialog/context.js +2 -4
  574. package/dist/dev/ui/alert-dialog/context.js.map +1 -1
  575. package/dist/dev/ui/alert-dialog/index.js +1 -2
  576. package/dist/dev/ui/alert-dialog/index.parts.js +1 -2
  577. package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts.map +1 -1
  578. package/dist/dev/ui/buffering-indicator/buffering-indicator.js +4 -4
  579. package/dist/dev/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  580. package/dist/dev/ui/buffering-indicator/index.js +1 -2
  581. package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -1
  582. package/dist/dev/ui/captions-button/captions-button.js +4 -5
  583. package/dist/dev/ui/captions-button/captions-button.js.map +1 -1
  584. package/dist/dev/ui/captions-button/index.js +1 -2
  585. package/dist/dev/ui/cast-button/cast-button.d.ts +15 -0
  586. package/dist/dev/ui/cast-button/cast-button.d.ts.map +1 -0
  587. package/dist/dev/ui/cast-button/cast-button.js +17 -0
  588. package/dist/dev/ui/cast-button/cast-button.js.map +1 -0
  589. package/dist/dev/ui/cast-button/index.d.ts +2 -0
  590. package/dist/dev/ui/cast-button/index.js +2 -0
  591. package/dist/dev/ui/controls/context.js +2 -4
  592. package/dist/dev/ui/controls/context.js.map +1 -1
  593. package/dist/dev/ui/controls/controls-group.js +2 -4
  594. package/dist/dev/ui/controls/controls-group.js.map +1 -1
  595. package/dist/dev/ui/controls/controls-root.js +2 -4
  596. package/dist/dev/ui/controls/controls-root.js.map +1 -1
  597. package/dist/dev/ui/controls/index.js +1 -2
  598. package/dist/dev/ui/controls/index.parts.js +1 -2
  599. package/dist/dev/ui/create-context-part.js +2 -4
  600. package/dist/dev/ui/create-context-part.js.map +1 -1
  601. package/dist/dev/ui/create-media-button.js +22 -10
  602. package/dist/dev/ui/create-media-button.js.map +1 -1
  603. package/dist/dev/ui/error-dialog/context.d.ts +10 -0
  604. package/dist/dev/ui/error-dialog/context.d.ts.map +1 -0
  605. package/dist/dev/ui/error-dialog/context.js +14 -0
  606. package/dist/dev/ui/error-dialog/context.js.map +1 -0
  607. package/dist/dev/ui/error-dialog/error-dialog-description.d.ts +14 -0
  608. package/dist/dev/ui/error-dialog/error-dialog-description.d.ts.map +1 -0
  609. package/dist/dev/ui/error-dialog/error-dialog-description.js +28 -0
  610. package/dist/dev/ui/error-dialog/error-dialog-description.js.map +1 -0
  611. package/dist/dev/ui/error-dialog/error-dialog-root.d.ts +15 -0
  612. package/dist/dev/ui/error-dialog/error-dialog-root.d.ts.map +1 -0
  613. package/dist/dev/ui/error-dialog/error-dialog-root.js +57 -0
  614. package/dist/dev/ui/error-dialog/error-dialog-root.js.map +1 -0
  615. package/dist/dev/ui/error-dialog/index.d.ts +3 -0
  616. package/dist/dev/ui/error-dialog/index.js +3 -0
  617. package/dist/dev/ui/error-dialog/index.parts.d.ts +13 -0
  618. package/dist/dev/ui/error-dialog/index.parts.d.ts.map +1 -0
  619. package/dist/dev/ui/error-dialog/index.parts.js +18 -0
  620. package/dist/dev/ui/error-dialog/index.parts.js.map +1 -0
  621. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -1
  622. package/dist/dev/ui/fullscreen-button/fullscreen-button.js +4 -5
  623. package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  624. package/dist/dev/ui/fullscreen-button/index.js +1 -2
  625. package/dist/dev/ui/gesture/media-gesture.d.ts +23 -0
  626. package/dist/dev/ui/gesture/media-gesture.d.ts.map +1 -0
  627. package/dist/dev/ui/gesture/media-gesture.js +42 -0
  628. package/dist/dev/ui/gesture/media-gesture.js.map +1 -0
  629. package/dist/dev/ui/gesture/use-doubletap-gesture.d.ts +14 -0
  630. package/dist/dev/ui/gesture/use-doubletap-gesture.d.ts.map +1 -0
  631. package/dist/dev/ui/gesture/use-doubletap-gesture.js +29 -0
  632. package/dist/dev/ui/gesture/use-doubletap-gesture.js.map +1 -0
  633. package/dist/dev/ui/gesture/use-tap-gesture.d.ts +14 -0
  634. package/dist/dev/ui/gesture/use-tap-gesture.d.ts.map +1 -0
  635. package/dist/dev/ui/gesture/use-tap-gesture.js +29 -0
  636. package/dist/dev/ui/gesture/use-tap-gesture.js.map +1 -0
  637. package/dist/dev/ui/hooks/use-button.js +2 -4
  638. package/dist/dev/ui/hooks/use-button.js.map +1 -1
  639. package/dist/dev/ui/hooks/use-slider.d.ts +1 -1
  640. package/dist/dev/ui/hooks/use-slider.js +4 -6
  641. package/dist/dev/ui/hooks/use-slider.js.map +1 -1
  642. package/dist/dev/ui/hotkey/media-hotkey.d.ts +21 -0
  643. package/dist/dev/ui/hotkey/media-hotkey.d.ts.map +1 -0
  644. package/dist/dev/ui/hotkey/media-hotkey.js +41 -0
  645. package/dist/dev/ui/hotkey/media-hotkey.js.map +1 -0
  646. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.d.ts +5 -0
  647. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.d.ts.map +1 -0
  648. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.js +16 -0
  649. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.js.map +1 -0
  650. package/dist/dev/ui/hotkey/use-hotkey.d.ts +12 -0
  651. package/dist/dev/ui/hotkey/use-hotkey.d.ts.map +1 -0
  652. package/dist/dev/ui/hotkey/use-hotkey.js +32 -0
  653. package/dist/dev/ui/hotkey/use-hotkey.js.map +1 -0
  654. package/dist/dev/ui/mute-button/index.js +1 -2
  655. package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -1
  656. package/dist/dev/ui/mute-button/mute-button.js +4 -5
  657. package/dist/dev/ui/mute-button/mute-button.js.map +1 -1
  658. package/dist/dev/ui/pip-button/index.js +1 -2
  659. package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -1
  660. package/dist/dev/ui/pip-button/pip-button.js +4 -5
  661. package/dist/dev/ui/pip-button/pip-button.js.map +1 -1
  662. package/dist/dev/ui/play-button/index.js +1 -2
  663. package/dist/dev/ui/play-button/play-button.d.ts.map +1 -1
  664. package/dist/dev/ui/play-button/play-button.js +4 -5
  665. package/dist/dev/ui/play-button/play-button.js.map +1 -1
  666. package/dist/dev/ui/playback-rate-button/index.js +1 -2
  667. package/dist/dev/ui/playback-rate-button/playback-rate-button.js +2 -4
  668. package/dist/dev/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  669. package/dist/dev/ui/popover/context.js +2 -4
  670. package/dist/dev/ui/popover/context.js.map +1 -1
  671. package/dist/dev/ui/popover/index.js +1 -2
  672. package/dist/dev/ui/popover/index.parts.js +1 -2
  673. package/dist/dev/ui/popover/popover-arrow.js +2 -4
  674. package/dist/dev/ui/popover/popover-arrow.js.map +1 -1
  675. package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -1
  676. package/dist/dev/ui/popover/popover-popup.js +13 -6
  677. package/dist/dev/ui/popover/popover-popup.js.map +1 -1
  678. package/dist/dev/ui/popover/popover-root.js +4 -6
  679. package/dist/dev/ui/popover/popover-root.js.map +1 -1
  680. package/dist/dev/ui/popover/popover-trigger.js +2 -4
  681. package/dist/dev/ui/popover/popover-trigger.js.map +1 -1
  682. package/dist/dev/ui/poster/index.js +1 -2
  683. package/dist/dev/ui/poster/poster.js +2 -4
  684. package/dist/dev/ui/poster/poster.js.map +1 -1
  685. package/dist/dev/ui/seek-button/index.js +1 -2
  686. package/dist/dev/ui/seek-button/seek-button.js +2 -4
  687. package/dist/dev/ui/seek-button/seek-button.js.map +1 -1
  688. package/dist/dev/ui/slider/context.js +2 -4
  689. package/dist/dev/ui/slider/context.js.map +1 -1
  690. package/dist/dev/ui/slider/index.js +1 -2
  691. package/dist/dev/ui/slider/index.parts.js +1 -2
  692. package/dist/dev/ui/slider/slider-buffer.js +2 -4
  693. package/dist/dev/ui/slider/slider-buffer.js.map +1 -1
  694. package/dist/dev/ui/slider/slider-fill.js +2 -4
  695. package/dist/dev/ui/slider/slider-fill.js.map +1 -1
  696. package/dist/dev/ui/slider/slider-preview.js +2 -4
  697. package/dist/dev/ui/slider/slider-preview.js.map +1 -1
  698. package/dist/dev/ui/slider/slider-root.js +2 -4
  699. package/dist/dev/ui/slider/slider-root.js.map +1 -1
  700. package/dist/dev/ui/slider/slider-thumb.js +2 -4
  701. package/dist/dev/ui/slider/slider-thumb.js.map +1 -1
  702. package/dist/dev/ui/slider/slider-thumbnail.js +2 -4
  703. package/dist/dev/ui/slider/slider-thumbnail.js.map +1 -1
  704. package/dist/dev/ui/slider/slider-track.js +2 -4
  705. package/dist/dev/ui/slider/slider-track.js.map +1 -1
  706. package/dist/dev/ui/slider/slider-value.js +2 -4
  707. package/dist/dev/ui/slider/slider-value.js.map +1 -1
  708. package/dist/dev/ui/thumbnail/index.d.ts +2 -0
  709. package/dist/dev/ui/thumbnail/index.js +2 -0
  710. package/dist/dev/ui/thumbnail/thumbnail.d.ts.map +1 -1
  711. package/dist/dev/ui/thumbnail/thumbnail.js +3 -6
  712. package/dist/dev/ui/thumbnail/thumbnail.js.map +1 -1
  713. package/dist/dev/ui/time/index.js +1 -2
  714. package/dist/dev/ui/time/index.parts.js +1 -2
  715. package/dist/dev/ui/time/time-group.js +2 -4
  716. package/dist/dev/ui/time/time-group.js.map +1 -1
  717. package/dist/dev/ui/time/time-separator.js +2 -4
  718. package/dist/dev/ui/time/time-separator.js.map +1 -1
  719. package/dist/dev/ui/time/time-value.js +2 -4
  720. package/dist/dev/ui/time/time-value.js.map +1 -1
  721. package/dist/dev/ui/time-slider/index.js +1 -2
  722. package/dist/dev/ui/time-slider/index.parts.js +1 -2
  723. package/dist/dev/ui/time-slider/time-slider-root.js +6 -8
  724. package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -1
  725. package/dist/dev/ui/tooltip/context.d.ts +4 -1
  726. package/dist/dev/ui/tooltip/context.d.ts.map +1 -1
  727. package/dist/dev/ui/tooltip/context.js +6 -5
  728. package/dist/dev/ui/tooltip/context.js.map +1 -1
  729. package/dist/dev/ui/tooltip/group-context.js +2 -4
  730. package/dist/dev/ui/tooltip/group-context.js.map +1 -1
  731. package/dist/dev/ui/tooltip/index.d.ts +2 -2
  732. package/dist/dev/ui/tooltip/index.js +2 -3
  733. package/dist/dev/ui/tooltip/index.parts.js +1 -2
  734. package/dist/dev/ui/tooltip/tooltip-arrow.js +2 -4
  735. package/dist/dev/ui/tooltip/tooltip-arrow.js.map +1 -1
  736. package/dist/dev/ui/tooltip/tooltip-popup.d.ts.map +1 -1
  737. package/dist/dev/ui/tooltip/tooltip-popup.js +15 -7
  738. package/dist/dev/ui/tooltip/tooltip-popup.js.map +1 -1
  739. package/dist/dev/ui/tooltip/tooltip-provider.js +2 -4
  740. package/dist/dev/ui/tooltip/tooltip-provider.js.map +1 -1
  741. package/dist/dev/ui/tooltip/tooltip-root.d.ts.map +1 -1
  742. package/dist/dev/ui/tooltip/tooltip-root.js +9 -7
  743. package/dist/dev/ui/tooltip/tooltip-root.js.map +1 -1
  744. package/dist/dev/ui/tooltip/tooltip-trigger.d.ts.map +1 -1
  745. package/dist/dev/ui/tooltip/tooltip-trigger.js +4 -9
  746. package/dist/dev/ui/tooltip/tooltip-trigger.js.map +1 -1
  747. package/dist/dev/ui/volume-slider/index.js +1 -2
  748. package/dist/dev/ui/volume-slider/index.parts.js +1 -2
  749. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts.map +1 -1
  750. package/dist/dev/ui/volume-slider/volume-slider-root.js +36 -20
  751. package/dist/dev/ui/volume-slider/volume-slider-root.js.map +1 -1
  752. package/dist/dev/utils/attach-media-element.d.ts +9 -0
  753. package/dist/dev/utils/attach-media-element.d.ts.map +1 -0
  754. package/dist/dev/utils/attach-media-element.js +1 -1
  755. package/dist/dev/utils/media-props.d.ts +8 -0
  756. package/dist/dev/utils/media-props.d.ts.map +1 -0
  757. package/dist/dev/utils/media-props.js +14 -6
  758. package/dist/dev/utils/media-props.js.map +1 -1
  759. package/dist/dev/utils/merge-props.js +2 -3
  760. package/dist/dev/utils/merge-props.js.map +1 -1
  761. package/dist/dev/utils/use-composed-refs.d.ts +29 -0
  762. package/dist/dev/utils/use-composed-refs.d.ts.map +1 -0
  763. package/dist/dev/utils/use-composed-refs.js +2 -4
  764. package/dist/dev/utils/use-composed-refs.js.map +1 -1
  765. package/dist/dev/utils/use-destroy.d.ts +22 -0
  766. package/dist/dev/utils/use-destroy.d.ts.map +1 -0
  767. package/dist/dev/utils/use-destroy.js +14 -8
  768. package/dist/dev/utils/use-destroy.js.map +1 -1
  769. package/dist/dev/utils/use-force-render.js +2 -4
  770. package/dist/dev/utils/use-force-render.js.map +1 -1
  771. package/dist/dev/utils/use-latest-ref.d.ts +18 -0
  772. package/dist/dev/utils/use-latest-ref.d.ts.map +1 -0
  773. package/dist/dev/utils/use-latest-ref.js +2 -4
  774. package/dist/dev/utils/use-latest-ref.js.map +1 -1
  775. package/dist/dev/utils/use-media-instance.d.ts +16 -0
  776. package/dist/dev/utils/use-media-instance.d.ts.map +1 -0
  777. package/dist/dev/utils/use-media-instance.js +22 -0
  778. package/dist/dev/utils/use-media-instance.js.map +1 -0
  779. package/dist/dev/utils/use-render.d.ts.map +1 -1
  780. package/dist/dev/utils/use-render.js +7 -5
  781. package/dist/dev/utils/use-render.js.map +1 -1
  782. package/dist/dev/utils/use-safe-id.js +3 -5
  783. package/dist/dev/utils/use-safe-id.js.map +1 -1
  784. package/package.json +15 -15
  785. package/dist/default/icons/dist/react/default/pip.js +0 -27
  786. package/dist/default/icons/dist/react/default/pip.js.map +0 -1
  787. package/dist/default/icons/dist/react/minimal/pip.js +0 -27
  788. package/dist/default/icons/dist/react/minimal/pip.js.map +0 -1
  789. package/dist/default/presets/video/error-dialog.js +0 -51
  790. package/dist/default/presets/video/error-dialog.js.map +0 -1
  791. package/dist/default/skins/dist/default/default/tailwind/components/icon-state.js.map +0 -1
  792. package/dist/default/skins/dist/default/minimal/tailwind/components/icon-state.js +0 -29
  793. package/dist/default/skins/dist/default/minimal/tailwind/components/icon-state.js.map +0 -1
  794. package/dist/dev/icons/dist/react/default/pip.js +0 -27
  795. package/dist/dev/icons/dist/react/default/pip.js.map +0 -1
  796. package/dist/dev/icons/dist/react/minimal/pip.js +0 -27
  797. package/dist/dev/icons/dist/react/minimal/pip.js.map +0 -1
  798. package/dist/dev/presets/video/error-dialog.js +0 -51
  799. package/dist/dev/presets/video/error-dialog.js.map +0 -1
  800. package/dist/dev/skins/dist/default/default/tailwind/components/icon-state.js.map +0 -1
  801. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon-state.js +0 -29
  802. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon-state.js.map +0 -1
@@ -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, content } = 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 // Forwarded content as default children — explicit children override.\n { children: content },\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,SAAS,YAAY,mBAAmB;CAChG,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,KAAA,GACA,KAAA,GACA,KAAA,GACA,KAAA,GACA,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;GAED,EAAE,UAAU,SAAS;GACrB;IAAE,GAAG;IAAgB,QAAQ;IAAY;GACzC;GACD;EACF,CACF;EACD"}
@@ -1,10 +1,8 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { TooltipGroupContextProvider } from "./group-context.js";
4
3
  import { useState } from "react";
5
4
  import { jsx } from "react/jsx-runtime";
6
5
  import { TooltipGroupCore } from "@videojs/core";
7
-
8
6
  //#region src/ui/tooltip/tooltip-provider.tsx
9
7
  function TooltipProvider({ delay, closeDelay, timeout, children }) {
10
8
  const [group] = useState(() => new TooltipGroupCore({
@@ -22,7 +20,7 @@ function TooltipProvider({ delay, closeDelay, timeout, children }) {
22
20
  children
23
21
  });
24
22
  }
25
-
26
23
  //#endregion
27
24
  export { TooltipProvider };
25
+
28
26
  //# sourceMappingURL=tooltip-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-provider.js","names":[],"sources":["../../../../src/ui/tooltip/tooltip-provider.tsx"],"sourcesContent":["'use client';\n\nimport { TooltipGroupCore, type TooltipGroupProps } from '@videojs/core';\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\n\nimport { TooltipGroupContextProvider } from './group-context';\n\nexport interface TooltipProviderProps extends TooltipGroupProps {\n children?: ReactNode;\n}\n\nexport function TooltipProvider({ delay, closeDelay, timeout, children }: TooltipProviderProps): ReactNode {\n const [group] = useState(() => new TooltipGroupCore({ delay, closeDelay, timeout }));\n group.setProps({ delay, closeDelay, timeout });\n\n return <TooltipGroupContextProvider value={{ group }}>{children}</TooltipGroupContextProvider>;\n}\n\nexport namespace TooltipProvider {\n export type Props = TooltipProviderProps;\n}\n"],"mappings":";;;;;;;;AAYA,SAAgB,gBAAgB,EAAE,OAAO,YAAY,SAAS,YAA6C;CACzG,MAAM,CAAC,SAAS,eAAe,IAAI,iBAAiB;EAAE;EAAO;EAAY;EAAS,CAAC,CAAC;AACpF,OAAM,SAAS;EAAE;EAAO;EAAY;EAAS,CAAC;AAE9C,QAAO,oBAAC;EAA4B,OAAO,EAAE,OAAO;EAAG;GAAuC"}
1
+ {"version":3,"file":"tooltip-provider.js","names":[],"sources":["../../../../src/ui/tooltip/tooltip-provider.tsx"],"sourcesContent":["'use client';\n\nimport { TooltipGroupCore, type TooltipGroupProps } from '@videojs/core';\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\n\nimport { TooltipGroupContextProvider } from './group-context';\n\nexport interface TooltipProviderProps extends TooltipGroupProps {\n children?: ReactNode;\n}\n\nexport function TooltipProvider({ delay, closeDelay, timeout, children }: TooltipProviderProps): ReactNode {\n const [group] = useState(() => new TooltipGroupCore({ delay, closeDelay, timeout }));\n group.setProps({ delay, closeDelay, timeout });\n\n return <TooltipGroupContextProvider value={{ group }}>{children}</TooltipGroupContextProvider>;\n}\n\nexport namespace TooltipProvider {\n export type Props = TooltipProviderProps;\n}\n"],"mappings":";;;;;;AAYA,SAAgB,gBAAgB,EAAE,OAAO,YAAY,SAAS,YAA6C;CACzG,MAAM,CAAC,SAAS,eAAe,IAAI,iBAAiB;EAAE;EAAO;EAAY;EAAS,CAAC,CAAC;AACpF,OAAM,SAAS;EAAE;EAAO;EAAY;EAAS,CAAC;AAE9C,QAAO,oBAAC,6BAAD;EAA6B,OAAO,EAAE,OAAO;EAAG;EAAuC,CAAA"}
@@ -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,kBA4EL,WAAA;EAAA,KACH,KAAA,GAAQ,gBAAA;AAAA"}
@@ -1,6 +1,6 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { useLatestRef } from "../../utils/use-latest-ref.js";
3
+ import { useDestroy } from "../../utils/use-destroy.js";
4
4
  import { useSafeId } from "../../utils/use-safe-id.js";
5
5
  import { TooltipContextProvider } from "./context.js";
6
6
  import { useTooltipGroup } from "./group-context.js";
@@ -9,7 +9,6 @@ import { useSnapshot } from "@videojs/store/react";
9
9
  import { useEffect, useState } from "react";
10
10
  import { jsx } from "react/jsx-runtime";
11
11
  import { TooltipCore, TooltipDataAttrs } from "@videojs/core";
12
-
13
12
  //#region src/ui/tooltip/tooltip-root.tsx
14
13
  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 }) {
15
14
  const [core] = useState(() => new TooltipCore(coreProps));
@@ -41,8 +40,9 @@ function TooltipRoot({ open: controlledOpen, defaultOpen = TooltipCore.defaultPr
41
40
  if (!isControlled && defaultOpen) instance.open();
42
41
  return instance;
43
42
  });
43
+ const [content, setContent] = useState();
44
44
  const anchorName = useSafeId();
45
- const popupId = useSafeId("tooltip-");
45
+ const popupId = useSafeId("tooltip");
46
46
  useEffect(() => {
47
47
  if (controlledOpen === void 0) return;
48
48
  const { active: inputOpen } = tooltip.input.current;
@@ -50,7 +50,7 @@ function TooltipRoot({ open: controlledOpen, defaultOpen = TooltipCore.defaultPr
50
50
  if (controlledOpen) tooltip.open();
51
51
  else tooltip.close();
52
52
  }, [controlledOpen, tooltip]);
53
- useEffect(() => () => tooltip.destroy(), [tooltip]);
53
+ useDestroy(tooltip);
54
54
  const input = useSnapshot(tooltip.input);
55
55
  core.setInput(input);
56
56
  return /* @__PURE__ */ jsx(TooltipContextProvider, {
@@ -60,12 +60,14 @@ function TooltipRoot({ open: controlledOpen, defaultOpen = TooltipCore.defaultPr
60
60
  state: core.getState(),
61
61
  stateAttrMap: TooltipDataAttrs,
62
62
  anchorName,
63
- popupId
63
+ popupId,
64
+ content,
65
+ setContent
64
66
  },
65
67
  children
66
68
  });
67
69
  }
68
-
69
70
  //#endregion
70
71
  export { TooltipRoot };
72
+
71
73
  //# sourceMappingURL=tooltip-root.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-root.js","names":[],"sources":["../../../../src/ui/tooltip/tooltip-root.tsx"],"sourcesContent":["'use client';\n\nimport { type TooltipProps as CoreTooltipProps, TooltipCore, TooltipDataAttrs } from '@videojs/core';\nimport { createTooltip, createTransition, type TooltipChangeDetails } from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\n\nimport { useLatestRef } from '../../utils/use-latest-ref';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { TooltipContextProvider } from './context';\nimport { useTooltipGroup } from './group-context';\n\nexport interface TooltipRootProps extends CoreTooltipProps {\n /** Called when the tooltip open state changes (fires immediately, before animations). */\n onOpenChange?: (open: boolean, details: TooltipChangeDetails) => void;\n /** Called after open/close animations complete. */\n onOpenChangeComplete?: (open: boolean) => void;\n children?: ReactNode;\n}\n\nexport function TooltipRoot({\n open: controlledOpen,\n defaultOpen = TooltipCore.defaultProps.defaultOpen,\n onOpenChange: onOpenChangeProp,\n onOpenChangeComplete: onOpenChangeCompleteProp,\n delay = TooltipCore.defaultProps.delay,\n closeDelay = TooltipCore.defaultProps.closeDelay,\n disableHoverablePopup = TooltipCore.defaultProps.disableHoverablePopup,\n disabled = TooltipCore.defaultProps.disabled,\n children,\n ...coreProps\n}: TooltipRootProps): ReactNode {\n const [core] = useState(() => new TooltipCore(coreProps));\n core.setProps(coreProps);\n\n const isControlled = controlledOpen !== undefined;\n\n const groupFromContext = useTooltipGroup();\n\n // Keep refs that always point to the latest values so the\n // createTooltip closure never reads stale props.\n const onOpenChangeRef = useLatestRef(onOpenChangeProp);\n const onOpenChangeCompleteRef = useLatestRef(onOpenChangeCompleteProp);\n const delayRef = useLatestRef(delay);\n const closeDelayRef = useLatestRef(closeDelay);\n const disableHoverablePopupRef = useLatestRef(disableHoverablePopup);\n const disabledRef = useLatestRef(disabled);\n const groupRef = useLatestRef(groupFromContext);\n\n const [tooltip] = useState(() => {\n const instance = createTooltip({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: TooltipChangeDetails) => {\n onOpenChangeRef.current?.(nextOpen, details);\n },\n onOpenChangeComplete: (nextOpen: boolean) => {\n onOpenChangeCompleteRef.current?.(nextOpen);\n },\n delay: () => delayRef.current,\n closeDelay: () => closeDelayRef.current,\n disableHoverablePopup: () => disableHoverablePopupRef.current,\n disabled: () => disabledRef.current,\n group: () => groupRef.current,\n });\n\n // Apply defaultOpen on creation (uncontrolled only)\n if (!isControlled && defaultOpen) {\n instance.open();\n }\n\n return instance;\n });\n\n const anchorName = useSafeId();\n const popupId = useSafeId('tooltip-');\n\n // Sync controlled open prop -> internal input state.\n useEffect(() => {\n if (controlledOpen === undefined) return;\n\n const { active: inputOpen } = tooltip.input.current;\n if (controlledOpen === inputOpen) return;\n\n if (controlledOpen) {\n tooltip.open();\n } else {\n tooltip.close();\n }\n }, [controlledOpen, tooltip]);\n\n // Cleanup on unmount\n useEffect(() => () => tooltip.destroy(), [tooltip]);\n\n const input = useSnapshot(tooltip.input);\n core.setInput(input);\n const state = core.getState();\n\n return (\n <TooltipContextProvider value={{ core, tooltip, state, stateAttrMap: TooltipDataAttrs, anchorName, popupId }}>\n {children}\n </TooltipContextProvider>\n );\n}\n\nexport namespace TooltipRoot {\n export type Props = TooltipRootProps;\n}\n"],"mappings":";;;;;;;;;;;;;AAqBA,SAAgB,YAAY,EAC1B,MAAM,gBACN,cAAc,YAAY,aAAa,aACvC,cAAc,kBACd,sBAAsB,0BACtB,QAAQ,YAAY,aAAa,OACjC,aAAa,YAAY,aAAa,YACtC,wBAAwB,YAAY,aAAa,uBACjD,WAAW,YAAY,aAAa,UACpC,UACA,GAAG,aAC2B;CAC9B,MAAM,CAAC,QAAQ,eAAe,IAAI,YAAY,UAAU,CAAC;AACzD,MAAK,SAAS,UAAU;CAExB,MAAM,eAAe,mBAAmB;CAExC,MAAM,mBAAmB,iBAAiB;CAI1C,MAAM,kBAAkB,aAAa,iBAAiB;CACtD,MAAM,0BAA0B,aAAa,yBAAyB;CACtE,MAAM,WAAW,aAAa,MAAM;CACpC,MAAM,gBAAgB,aAAa,WAAW;CAC9C,MAAM,2BAA2B,aAAa,sBAAsB;CACpE,MAAM,cAAc,aAAa,SAAS;CAC1C,MAAM,WAAW,aAAa,iBAAiB;CAE/C,MAAM,CAAC,WAAW,eAAe;EAC/B,MAAM,WAAW,cAAc;GAC7B,YAAY,kBAAkB;GAC9B,eAAe,UAAmB,YAAkC;AAClE,oBAAgB,UAAU,UAAU,QAAQ;;GAE9C,uBAAuB,aAAsB;AAC3C,4BAAwB,UAAU,SAAS;;GAE7C,aAAa,SAAS;GACtB,kBAAkB,cAAc;GAChC,6BAA6B,yBAAyB;GACtD,gBAAgB,YAAY;GAC5B,aAAa,SAAS;GACvB,CAAC;AAGF,MAAI,CAAC,gBAAgB,YACnB,UAAS,MAAM;AAGjB,SAAO;GACP;CAEF,MAAM,aAAa,WAAW;CAC9B,MAAM,UAAU,UAAU,WAAW;AAGrC,iBAAgB;AACd,MAAI,mBAAmB,OAAW;EAElC,MAAM,EAAE,QAAQ,cAAc,QAAQ,MAAM;AAC5C,MAAI,mBAAmB,UAAW;AAElC,MAAI,eACF,SAAQ,MAAM;MAEd,SAAQ,OAAO;IAEhB,CAAC,gBAAgB,QAAQ,CAAC;AAG7B,uBAAsB,QAAQ,SAAS,EAAE,CAAC,QAAQ,CAAC;CAEnD,MAAM,QAAQ,YAAY,QAAQ,MAAM;AACxC,MAAK,SAAS,MAAM;AAGpB,QACE,oBAAC;EAAuB,OAAO;GAAE;GAAM;GAAS,OAHpC,KAAK,UAAU;GAG4B,cAAc;GAAkB;GAAY;GAAS;EACzG;GACsB"}
1
+ {"version":3,"file":"tooltip-root.js","names":[],"sources":["../../../../src/ui/tooltip/tooltip-root.tsx"],"sourcesContent":["'use client';\n\nimport { type TooltipProps as CoreTooltipProps, TooltipCore, TooltipDataAttrs } from '@videojs/core';\nimport { createTooltip, createTransition, type TooltipChangeDetails } from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\n\nimport { useDestroy } from '../../utils/use-destroy';\nimport { useLatestRef } from '../../utils/use-latest-ref';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { TooltipContextProvider } from './context';\nimport { useTooltipGroup } from './group-context';\n\nexport interface TooltipRootProps extends CoreTooltipProps {\n /** Called when the tooltip open state changes (fires immediately, before animations). */\n onOpenChange?: (open: boolean, details: TooltipChangeDetails) => void;\n /** Called after open/close animations complete. */\n onOpenChangeComplete?: (open: boolean) => void;\n children?: ReactNode;\n}\n\nexport function TooltipRoot({\n open: controlledOpen,\n defaultOpen = TooltipCore.defaultProps.defaultOpen,\n onOpenChange: onOpenChangeProp,\n onOpenChangeComplete: onOpenChangeCompleteProp,\n delay = TooltipCore.defaultProps.delay,\n closeDelay = TooltipCore.defaultProps.closeDelay,\n disableHoverablePopup = TooltipCore.defaultProps.disableHoverablePopup,\n disabled = TooltipCore.defaultProps.disabled,\n children,\n ...coreProps\n}: TooltipRootProps): ReactNode {\n const [core] = useState(() => new TooltipCore(coreProps));\n core.setProps(coreProps);\n\n const isControlled = controlledOpen !== undefined;\n\n const groupFromContext = useTooltipGroup();\n\n // Keep refs that always point to the latest values so the\n // createTooltip closure never reads stale props.\n const onOpenChangeRef = useLatestRef(onOpenChangeProp);\n const onOpenChangeCompleteRef = useLatestRef(onOpenChangeCompleteProp);\n const delayRef = useLatestRef(delay);\n const closeDelayRef = useLatestRef(closeDelay);\n const disableHoverablePopupRef = useLatestRef(disableHoverablePopup);\n const disabledRef = useLatestRef(disabled);\n const groupRef = useLatestRef(groupFromContext);\n\n const [tooltip] = useState(() => {\n const instance = createTooltip({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: TooltipChangeDetails) => {\n onOpenChangeRef.current?.(nextOpen, details);\n },\n onOpenChangeComplete: (nextOpen: boolean) => {\n onOpenChangeCompleteRef.current?.(nextOpen);\n },\n delay: () => delayRef.current,\n closeDelay: () => closeDelayRef.current,\n disableHoverablePopup: () => disableHoverablePopupRef.current,\n disabled: () => disabledRef.current,\n group: () => groupRef.current,\n });\n\n // Apply defaultOpen on creation (uncontrolled only)\n if (!isControlled && defaultOpen) {\n instance.open();\n }\n\n return instance;\n });\n\n const [content, setContent] = useState<string | undefined>();\n\n const anchorName = useSafeId();\n const popupId = useSafeId('tooltip');\n\n // Sync controlled open prop -> internal input state.\n useEffect(() => {\n if (controlledOpen === undefined) return;\n\n const { active: inputOpen } = tooltip.input.current;\n if (controlledOpen === inputOpen) return;\n\n if (controlledOpen) {\n tooltip.open();\n } else {\n tooltip.close();\n }\n }, [controlledOpen, tooltip]);\n\n useDestroy(tooltip);\n\n const input = useSnapshot(tooltip.input);\n core.setInput(input);\n const state = core.getState();\n\n return (\n <TooltipContextProvider\n value={{ core, tooltip, state, stateAttrMap: TooltipDataAttrs, anchorName, popupId, content, setContent }}\n >\n {children}\n </TooltipContextProvider>\n );\n}\n\nexport namespace TooltipRoot {\n export type Props = TooltipRootProps;\n}\n"],"mappings":";;;;;;;;;;;;AAsBA,SAAgB,YAAY,EAC1B,MAAM,gBACN,cAAc,YAAY,aAAa,aACvC,cAAc,kBACd,sBAAsB,0BACtB,QAAQ,YAAY,aAAa,OACjC,aAAa,YAAY,aAAa,YACtC,wBAAwB,YAAY,aAAa,uBACjD,WAAW,YAAY,aAAa,UACpC,UACA,GAAG,aAC2B;CAC9B,MAAM,CAAC,QAAQ,eAAe,IAAI,YAAY,UAAU,CAAC;AACzD,MAAK,SAAS,UAAU;CAExB,MAAM,eAAe,mBAAmB,KAAA;CAExC,MAAM,mBAAmB,iBAAiB;CAI1C,MAAM,kBAAkB,aAAa,iBAAiB;CACtD,MAAM,0BAA0B,aAAa,yBAAyB;CACtE,MAAM,WAAW,aAAa,MAAM;CACpC,MAAM,gBAAgB,aAAa,WAAW;CAC9C,MAAM,2BAA2B,aAAa,sBAAsB;CACpE,MAAM,cAAc,aAAa,SAAS;CAC1C,MAAM,WAAW,aAAa,iBAAiB;CAE/C,MAAM,CAAC,WAAW,eAAe;EAC/B,MAAM,WAAW,cAAc;GAC7B,YAAY,kBAAkB;GAC9B,eAAe,UAAmB,YAAkC;AAClE,oBAAgB,UAAU,UAAU,QAAQ;;GAE9C,uBAAuB,aAAsB;AAC3C,4BAAwB,UAAU,SAAS;;GAE7C,aAAa,SAAS;GACtB,kBAAkB,cAAc;GAChC,6BAA6B,yBAAyB;GACtD,gBAAgB,YAAY;GAC5B,aAAa,SAAS;GACvB,CAAC;AAGF,MAAI,CAAC,gBAAgB,YACnB,UAAS,MAAM;AAGjB,SAAO;GACP;CAEF,MAAM,CAAC,SAAS,cAAc,UAA8B;CAE5D,MAAM,aAAa,WAAW;CAC9B,MAAM,UAAU,UAAU,UAAU;AAGpC,iBAAgB;AACd,MAAI,mBAAmB,KAAA,EAAW;EAElC,MAAM,EAAE,QAAQ,cAAc,QAAQ,MAAM;AAC5C,MAAI,mBAAmB,UAAW;AAElC,MAAI,eACF,SAAQ,MAAM;MAEd,SAAQ,OAAO;IAEhB,CAAC,gBAAgB,QAAQ,CAAC;AAE7B,YAAW,QAAQ;CAEnB,MAAM,QAAQ,YAAY,QAAQ,MAAM;AACxC,MAAK,SAAS,MAAM;AAGpB,QACE,oBAAC,wBAAD;EACE,OAAO;GAAE;GAAM;GAAS,OAJd,KAAK,UAAU;GAIM,cAAc;GAAkB;GAAY;GAAS;GAAS;GAAY;EAExG;EACsB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-trigger.d.ts","names":[],"sources":["../../../../src/ui/tooltip/tooltip-trigger.tsx"],"mappings":";;;;;UAUiB,mBAAA,SAA4B,gBAAA,WAA2B,YAAA;;cAG3D,cAAA,EAAc,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,mBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,iBAAA;AAAA,kBAwCV,cAAA;EAAA,KACH,KAAA,GAAQ,mBAAA;EAAA,KACR,KAAA,GAAQ,YAAA;AAAA"}
1
+ {"version":3,"file":"tooltip-trigger.d.ts","names":[],"sources":["../../../../src/ui/tooltip/tooltip-trigger.tsx"],"mappings":";;;;;UAUiB,mBAAA,SAA4B,gBAAA,WAA2B,YAAA;;cAG3D,cAAA,EAAc,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,mBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,iBAAA;AAAA,kBAuCV,cAAA;EAAA,KACH,KAAA,GAAQ,mBAAA;EAAA,KACR,KAAA,GAAQ,YAAA;AAAA"}
@@ -1,14 +1,12 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { renderElement } from "../../utils/use-render.js";
4
3
  import { useTooltipContext } from "./context.js";
5
4
  import { forwardRef, useCallback } from "react";
6
5
  import { supportsAnchorPositioning } from "@videojs/utils/dom";
7
-
8
6
  //#region src/ui/tooltip/tooltip-trigger.tsx
9
7
  /** Element that triggers the tooltip on hover and focus. Renders a `<button>` element. */
10
8
  const TooltipTrigger = forwardRef(function TooltipTrigger({ render, className, style, ...elementProps }, forwardedRef) {
11
- const { core, tooltip, state, stateAttrMap, anchorName, popupId } = useTooltipContext();
9
+ const { tooltip, state, stateAttrMap, anchorName } = useTooltipContext();
12
10
  const triggerRef = useCallback((el) => {
13
11
  tooltip.setTriggerElement(el);
14
12
  if (el && supportsAnchorPositioning()) el.style.setProperty("anchor-name", `--${anchorName}`);
@@ -23,10 +21,7 @@ const TooltipTrigger = forwardRef(function TooltipTrigger({ render, className, s
23
21
  stateAttrMap,
24
22
  ref: [forwardedRef, triggerRef],
25
23
  props: [
26
- {
27
- type: "button",
28
- ...core.getTriggerAttrs(state, popupId)
29
- },
24
+ { type: "button" },
30
25
  {
31
26
  ...restTriggerProps,
32
27
  onFocus: onFocusIn,
@@ -36,7 +31,7 @@ const TooltipTrigger = forwardRef(function TooltipTrigger({ render, className, s
36
31
  ]
37
32
  });
38
33
  });
39
-
40
34
  //#endregion
41
35
  export { TooltipTrigger };
36
+
42
37
  //# sourceMappingURL=tooltip-trigger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-trigger.js","names":[],"sources":["../../../../src/ui/tooltip/tooltip-trigger.tsx"],"sourcesContent":["'use client';\n\nimport type { TooltipState } from '@videojs/core';\nimport { supportsAnchorPositioning } from '@videojs/utils/dom';\nimport { forwardRef, useCallback } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useTooltipContext } from './context';\n\nexport interface TooltipTriggerProps extends UIComponentProps<'button', TooltipState> {}\n\n/** Element that triggers the tooltip on hover and focus. Renders a `<button>` element. */\nexport const TooltipTrigger = forwardRef<HTMLButtonElement, TooltipTriggerProps>(function TooltipTrigger(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { core, tooltip, state, stateAttrMap, anchorName, popupId } = useTooltipContext();\n\n const triggerRef = useCallback(\n (el: HTMLButtonElement | null) => {\n tooltip.setTriggerElement(el);\n if (el && supportsAnchorPositioning()) {\n el.style.setProperty('anchor-name', `--${anchorName}`);\n }\n },\n [tooltip, anchorName]\n );\n\n // Remap DOM focus events to React synthetic event names.\n // createTooltip() uses onFocusIn/onFocusOut (matching DOM focusin/focusout),\n // but React maps those to onFocus/onBlur.\n const { onFocusIn, onFocusOut, ...restTriggerProps } = tooltip.triggerProps;\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: [forwardedRef, triggerRef],\n props: [\n {\n type: 'button' as const,\n ...core.getTriggerAttrs(state, popupId),\n },\n { ...restTriggerProps, onFocus: onFocusIn, onBlur: onFocusOut },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace TooltipTrigger {\n export type Props = TooltipTriggerProps;\n export type State = TooltipState;\n}\n"],"mappings":";;;;;;;;;AAaA,MAAa,iBAAiB,WAAmD,SAAS,eACxF,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,MAAM,SAAS,OAAO,cAAc,YAAY,YAAY,mBAAmB;CAEvF,MAAM,aAAa,aAChB,OAAiC;AAChC,UAAQ,kBAAkB,GAAG;AAC7B,MAAI,MAAM,2BAA2B,CACnC,IAAG,MAAM,YAAY,eAAe,KAAK,aAAa;IAG1D,CAAC,SAAS,WAAW,CACtB;CAKD,MAAM,EAAE,WAAW,YAAY,GAAG,qBAAqB,QAAQ;AAE/D,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK,CAAC,cAAc,WAAW;EAC/B,OAAO;GACL;IACE,MAAM;IACN,GAAG,KAAK,gBAAgB,OAAO,QAAQ;IACxC;GACD;IAAE,GAAG;IAAkB,SAAS;IAAW,QAAQ;IAAY;GAC/D;GACD;EACF,CACF;EACD"}
1
+ {"version":3,"file":"tooltip-trigger.js","names":[],"sources":["../../../../src/ui/tooltip/tooltip-trigger.tsx"],"sourcesContent":["'use client';\n\nimport type { TooltipState } from '@videojs/core';\nimport { supportsAnchorPositioning } from '@videojs/utils/dom';\nimport { forwardRef, useCallback } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useTooltipContext } from './context';\n\nexport interface TooltipTriggerProps extends UIComponentProps<'button', TooltipState> {}\n\n/** Element that triggers the tooltip on hover and focus. Renders a `<button>` element. */\nexport const TooltipTrigger = forwardRef<HTMLButtonElement, TooltipTriggerProps>(function TooltipTrigger(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { tooltip, state, stateAttrMap, anchorName } = useTooltipContext();\n\n const triggerRef = useCallback(\n (el: HTMLButtonElement | null) => {\n tooltip.setTriggerElement(el);\n if (el && supportsAnchorPositioning()) {\n el.style.setProperty('anchor-name', `--${anchorName}`);\n }\n },\n [tooltip, anchorName]\n );\n\n // Remap DOM focus events to React synthetic event names.\n // createTooltip() uses onFocusIn/onFocusOut (matching DOM focusin/focusout),\n // but React maps those to onFocus/onBlur.\n const { onFocusIn, onFocusOut, ...restTriggerProps } = tooltip.triggerProps;\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: [forwardedRef, triggerRef],\n props: [\n {\n type: 'button' as const,\n },\n { ...restTriggerProps, onFocus: onFocusIn, onBlur: onFocusOut },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace TooltipTrigger {\n export type Props = TooltipTriggerProps;\n export type State = TooltipState;\n}\n"],"mappings":";;;;;;;AAaA,MAAa,iBAAiB,WAAmD,SAAS,eACxF,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,SAAS,OAAO,cAAc,eAAe,mBAAmB;CAExE,MAAM,aAAa,aAChB,OAAiC;AAChC,UAAQ,kBAAkB,GAAG;AAC7B,MAAI,MAAM,2BAA2B,CACnC,IAAG,MAAM,YAAY,eAAe,KAAK,aAAa;IAG1D,CAAC,SAAS,WAAW,CACtB;CAKD,MAAM,EAAE,WAAW,YAAY,GAAG,qBAAqB,QAAQ;AAE/D,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK,CAAC,cAAc,WAAW;EAC/B,OAAO;GACL,EACE,MAAM,UACP;GACD;IAAE,GAAG;IAAkB,SAAS;IAAW,QAAQ;IAAY;GAC/D;GACD;EACF,CACF;EACD"}
@@ -1,3 +1,2 @@
1
1
  import { index_parts_exports } from "./index.parts.js";
2
-
3
- export { index_parts_exports as VolumeSlider };
2
+ export { index_parts_exports as VolumeSlider };
@@ -5,7 +5,6 @@ import { SliderThumb } from "../slider/slider-thumb.js";
5
5
  import { SliderTrack } from "../slider/slider-track.js";
6
6
  import { SliderValue } from "../slider/slider-value.js";
7
7
  import { VolumeSliderRoot } from "./volume-slider-root.js";
8
-
9
8
  //#region src/ui/volume-slider/index.parts.ts
10
9
  var index_parts_exports = /* @__PURE__ */ __exportAll({
11
10
  Fill: () => SliderFill,
@@ -15,7 +14,7 @@ var index_parts_exports = /* @__PURE__ */ __exportAll({
15
14
  Track: () => SliderTrack,
16
15
  Value: () => SliderValue
17
16
  });
18
-
19
17
  //#endregion
20
18
  export { index_parts_exports };
19
+
21
20
  //# sourceMappingURL=index.parts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"volume-slider-root.d.ts","names":[],"sources":["../../../../src/ui/volume-slider/volume-slider-root.tsx"],"mappings":";;;;;UAqBiB,qBAAA,SAA8B,gBAAA,QAAwB,gBAAA,CAAiB,KAAA,GAAQ,gBAAA,CAAiB,KAAA;EAC/G,WAAA;EACA,SAAA;AAAA;AAAA,cAGW,gBAAA,EAAgB,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,qBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAiFZ,gBAAA;EAAA,KACH,KAAA,GAAQ,qBAAA;EAAA,KACR,KAAA,GAAQ,gBAAA,CAAiB,KAAA;AAAA"}
1
+ {"version":3,"file":"volume-slider-root.d.ts","names":[],"sources":["../../../../src/ui/volume-slider/volume-slider-root.tsx"],"mappings":";;;;;UAsBiB,qBAAA,SAA8B,gBAAA,QAAwB,gBAAA,CAAiB,KAAA,GAAQ,gBAAA,CAAiB,KAAA;EAC/G,WAAA;EACA,SAAA;AAAA;AAAA,cAGW,gBAAA,EAAgB,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,qBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBA0GZ,gBAAA;EAAA,KACH,KAAA,GAAQ,qBAAA;EAAA,KACR,KAAA,GAAQ,gBAAA,CAAiB,KAAA;AAAA"}
@@ -1,15 +1,14 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { usePlayer } from "../../player/context.js";
4
- import { renderElement } from "../../utils/use-render.js";
5
3
  import { useLatestRef } from "../../utils/use-latest-ref.js";
4
+ import { renderElement } from "../../utils/use-render.js";
6
5
  import { useSlider } from "../hooks/use-slider.js";
7
6
  import { SliderProvider } from "../slider/context.js";
8
- import { getSliderCSSVars, logMissingFeature, selectVolume } from "@videojs/core/dom";
9
- import { forwardRef, useState } from "react";
7
+ import { createWheelStep, getSliderCSSVars, logMissingFeature, selectVolume } from "@videojs/core/dom";
8
+ import { forwardRef, useCallback, useRef, useState } from "react";
10
9
  import { jsx } from "react/jsx-runtime";
11
- import { SliderDataAttrs, VolumeSliderCore } from "@videojs/core";
12
-
10
+ import { VolumeSliderCore, VolumeSliderDataAttrs } from "@videojs/core";
11
+ import { listen } from "@videojs/utils/dom";
13
12
  //#region src/ui/volume-slider/volume-slider-root.tsx
14
13
  const noopVolume = {
15
14
  volume: 0,
@@ -19,7 +18,7 @@ const noopVolume = {
19
18
  toggleMuted: () => false
20
19
  };
21
20
  const VolumeSliderRoot = forwardRef(function VolumeSliderRoot(componentProps, forwardedRef) {
22
- const { render, className, style, label, orientation, step = VolumeSliderCore.defaultProps.step, largeStep = VolumeSliderCore.defaultProps.largeStep, disabled, thumbAlignment, onDragStart, onDragEnd, ...elementProps } = componentProps;
21
+ const { render, className, style, label, orientation, step = VolumeSliderCore.defaultProps.step, largeStep = VolumeSliderCore.defaultProps.largeStep, wheelStep = VolumeSliderCore.defaultProps.wheelStep, disabled, thumbAlignment, onDragStart, onDragEnd, ...elementProps } = componentProps;
23
22
  const volume = usePlayer(selectVolume);
24
23
  const [core] = useState(() => new VolumeSliderCore());
25
24
  core.setProps({
@@ -27,32 +26,45 @@ const VolumeSliderRoot = forwardRef(function VolumeSliderRoot(componentProps, fo
27
26
  orientation,
28
27
  step,
29
28
  largeStep,
29
+ wheelStep,
30
30
  disabled,
31
31
  thumbAlignment
32
32
  });
33
33
  const volumeRef = useLatestRef(volume);
34
+ const disabledRef = useLatestRef(disabled);
35
+ const getPercent = () => (volumeRef.current?.volume ?? 0) * 100;
36
+ const getStepPercent = () => core.getStepPercent();
37
+ const setVolume = (percent) => volumeRef.current?.setVolume(percent / 100);
34
38
  const { state, cssVars, rootRef, thumbRef, rootProps, rootStyle, thumbProps } = useSlider({
35
39
  computeState: (input) => {
36
40
  core.setInput(input);
37
41
  core.setMedia(volume ?? noopVolume);
38
42
  return core.getState();
39
43
  },
40
- getPercent: () => volume ? volume.volume * 100 : 0,
41
- getStepPercent: () => core.getStepPercent(),
44
+ getPercent,
45
+ getStepPercent,
42
46
  getLargeStepPercent: () => core.getLargeStepPercent(),
43
47
  orientation,
44
48
  disabled,
45
49
  adjustPercent: (rawPercent, thumbSize, trackSize) => core.adjustPercentForAlignment(rawPercent, thumbSize, trackSize),
46
50
  getCSSVars: getSliderCSSVars,
47
- onValueChange: (percent) => {
48
- volumeRef.current?.setVolume(percent / 100);
49
- },
50
- onValueCommit: (percent) => {
51
- volumeRef.current?.setVolume(percent / 100);
52
- },
51
+ onValueChange: setVolume,
52
+ onValueCommit: setVolume,
53
53
  onDragStart,
54
54
  onDragEnd
55
55
  });
56
+ const [wheelHandler] = useState(() => createWheelStep({
57
+ isDisabled: () => !!disabledRef.current || !volumeRef.current,
58
+ getPercent: () => (volumeRef.current?.volume ?? 0) * 100,
59
+ getStepPercent: () => core.getWheelStepPercent(),
60
+ onValueChange: (percent) => volumeRef.current?.setVolume(percent / 100)
61
+ }));
62
+ const wheelCleanupRef = useRef(null);
63
+ const wheelRef = useCallback((element) => {
64
+ wheelCleanupRef.current?.();
65
+ wheelCleanupRef.current = null;
66
+ if (element) wheelCleanupRef.current = listen(element, "wheel", wheelHandler.onWheel, { passive: false });
67
+ }, [wheelHandler]);
56
68
  if (!volume) {
57
69
  logMissingFeature("VolumeSlider", "volume");
58
70
  return null;
@@ -63,7 +75,7 @@ const VolumeSliderRoot = forwardRef(function VolumeSliderRoot(componentProps, fo
63
75
  pointerValue: core.valueFromPercent(state.pointerPercent),
64
76
  thumbRef,
65
77
  thumbProps,
66
- stateAttrMap: SliderDataAttrs,
78
+ stateAttrMap: VolumeSliderDataAttrs,
67
79
  getAttrs: (sliderState) => core.getAttrs(sliderState),
68
80
  formatValue: (value) => `${Math.round(value)}%`
69
81
  },
@@ -73,8 +85,12 @@ const VolumeSliderRoot = forwardRef(function VolumeSliderRoot(componentProps, fo
73
85
  style
74
86
  }, {
75
87
  state,
76
- stateAttrMap: SliderDataAttrs,
77
- ref: [forwardedRef, rootRef],
88
+ stateAttrMap: VolumeSliderDataAttrs,
89
+ ref: [
90
+ forwardedRef,
91
+ rootRef,
92
+ wheelRef
93
+ ],
78
94
  props: [
79
95
  { style: {
80
96
  ...cssVars,
@@ -86,7 +102,7 @@ const VolumeSliderRoot = forwardRef(function VolumeSliderRoot(componentProps, fo
86
102
  })
87
103
  });
88
104
  });
89
-
90
105
  //#endregion
91
106
  export { VolumeSliderRoot };
107
+
92
108
  //# sourceMappingURL=volume-slider-root.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"volume-slider-root.js","names":[],"sources":["../../../../src/ui/volume-slider/volume-slider-root.tsx"],"sourcesContent":["'use client';\n\nimport { SliderDataAttrs, VolumeSliderCore } from '@videojs/core';\nimport { getSliderCSSVars, logMissingFeature, selectVolume } from '@videojs/core/dom';\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 noopVolume = {\n volume: 0,\n muted: false,\n volumeAvailability: 'unsupported' as const,\n setVolume: () => 0,\n toggleMuted: () => false,\n};\n\nexport interface VolumeSliderRootProps extends UIComponentProps<'div', VolumeSliderCore.State>, VolumeSliderCore.Props {\n onDragStart?: (() => void) | undefined;\n onDragEnd?: (() => void) | undefined;\n}\n\nexport const VolumeSliderRoot = forwardRef<HTMLDivElement, VolumeSliderRootProps>(\n function VolumeSliderRoot(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n label,\n orientation,\n step = VolumeSliderCore.defaultProps.step,\n largeStep = VolumeSliderCore.defaultProps.largeStep,\n disabled,\n thumbAlignment,\n onDragStart,\n onDragEnd,\n ...elementProps\n } = componentProps;\n\n const volume = usePlayer(selectVolume);\n\n const [core] = useState(() => new VolumeSliderCore());\n core.setProps({ label, orientation, step, largeStep, disabled, thumbAlignment });\n\n // Keep a ref to the latest volume state for callbacks.\n const volumeRef = useLatestRef(volume);\n\n const { state, cssVars, rootRef, thumbRef, rootProps, rootStyle, thumbProps } = useSlider<VolumeSliderCore.State>({\n computeState: (input) => {\n core.setInput(input);\n core.setMedia(volume ?? noopVolume);\n return core.getState();\n },\n getPercent: () => (volume ? volume.volume * 100 : 0),\n getStepPercent: () => core.getStepPercent(),\n getLargeStepPercent: () => core.getLargeStepPercent(),\n orientation,\n disabled,\n adjustPercent: (rawPercent, thumbSize, trackSize) =>\n core.adjustPercentForAlignment(rawPercent, thumbSize, trackSize),\n getCSSVars: getSliderCSSVars,\n onValueChange: (percent) => {\n volumeRef.current?.setVolume(percent / 100);\n },\n onValueCommit: (percent) => {\n volumeRef.current?.setVolume(percent / 100);\n },\n onDragStart,\n onDragEnd,\n });\n\n if (!volume) {\n if (__DEV__) logMissingFeature('VolumeSlider', 'volume');\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: SliderDataAttrs,\n getAttrs: (sliderState) => core.getAttrs(sliderState as VolumeSliderCore.State),\n formatValue: (value) => `${Math.round(value)}%`,\n }}\n >\n {renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap: SliderDataAttrs,\n ref: [forwardedRef, rootRef],\n props: [{ style: { ...cssVars, ...rootStyle } }, rootProps, elementProps],\n }\n )}\n </SliderProvider>\n );\n }\n);\n\nexport namespace VolumeSliderRoot {\n export type Props = VolumeSliderRootProps;\n export type State = VolumeSliderCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAM,aAAa;CACjB,QAAQ;CACR,OAAO;CACP,oBAAoB;CACpB,iBAAiB;CACjB,mBAAmB;CACpB;AAOD,MAAa,mBAAmB,WAC9B,SAAS,iBAAiB,gBAAgB,cAAc;CACtD,MAAM,EACJ,QACA,WACA,OACA,OACA,aACA,OAAO,iBAAiB,aAAa,MACrC,YAAY,iBAAiB,aAAa,WAC1C,UACA,gBACA,aACA,WACA,GAAG,iBACD;CAEJ,MAAM,SAAS,UAAU,aAAa;CAEtC,MAAM,CAAC,QAAQ,eAAe,IAAI,kBAAkB,CAAC;AACrD,MAAK,SAAS;EAAE;EAAO;EAAa;EAAM;EAAW;EAAU;EAAgB,CAAC;CAGhF,MAAM,YAAY,aAAa,OAAO;CAEtC,MAAM,EAAE,OAAO,SAAS,SAAS,UAAU,WAAW,WAAW,eAAe,UAAkC;EAChH,eAAe,UAAU;AACvB,QAAK,SAAS,MAAM;AACpB,QAAK,SAAS,UAAU,WAAW;AACnC,UAAO,KAAK,UAAU;;EAExB,kBAAmB,SAAS,OAAO,SAAS,MAAM;EAClD,sBAAsB,KAAK,gBAAgB;EAC3C,2BAA2B,KAAK,qBAAqB;EACrD;EACA;EACA,gBAAgB,YAAY,WAAW,cACrC,KAAK,0BAA0B,YAAY,WAAW,UAAU;EAClE,YAAY;EACZ,gBAAgB,YAAY;AAC1B,aAAU,SAAS,UAAU,UAAU,IAAI;;EAE7C,gBAAgB,YAAY;AAC1B,aAAU,SAAS,UAAU,UAAU,IAAI;;EAE7C;EACA;EACD,CAAC;AAEF,KAAI,CAAC,QAAQ;AACE,oBAAkB,gBAAgB,SAAS;AACxD,SAAO;;AAGT,QACE,oBAAC;EACC,OAAO;GACL;GACA,cAAc,KAAK,iBAAiB,MAAM,eAAe;GACzD;GACA;GACA,cAAc;GACd,WAAW,gBAAgB,KAAK,SAAS,YAAsC;GAC/E,cAAc,UAAU,GAAG,KAAK,MAAM,MAAM,CAAC;GAC9C;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":"volume-slider-root.js","names":[],"sources":["../../../../src/ui/volume-slider/volume-slider-root.tsx"],"sourcesContent":["'use client';\n\nimport { VolumeSliderCore, VolumeSliderDataAttrs } from '@videojs/core';\nimport { createWheelStep, getSliderCSSVars, logMissingFeature, selectVolume } from '@videojs/core/dom';\nimport { listen } from '@videojs/utils/dom';\nimport { forwardRef, useCallback, useRef, 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 noopVolume = {\n volume: 0,\n muted: false,\n volumeAvailability: 'unsupported' as const,\n setVolume: () => 0,\n toggleMuted: () => false,\n};\n\nexport interface VolumeSliderRootProps extends UIComponentProps<'div', VolumeSliderCore.State>, VolumeSliderCore.Props {\n onDragStart?: (() => void) | undefined;\n onDragEnd?: (() => void) | undefined;\n}\n\nexport const VolumeSliderRoot = forwardRef<HTMLDivElement, VolumeSliderRootProps>(\n function VolumeSliderRoot(componentProps, forwardedRef) {\n const {\n render,\n className,\n style,\n label,\n orientation,\n step = VolumeSliderCore.defaultProps.step,\n largeStep = VolumeSliderCore.defaultProps.largeStep,\n wheelStep = VolumeSliderCore.defaultProps.wheelStep,\n disabled,\n thumbAlignment,\n onDragStart,\n onDragEnd,\n ...elementProps\n } = componentProps;\n\n const volume = usePlayer(selectVolume);\n\n const [core] = useState(() => new VolumeSliderCore());\n core.setProps({ label, orientation, step, largeStep, wheelStep, disabled, thumbAlignment });\n\n // Keep refs to the latest dynamic values for stable closures.\n const volumeRef = useLatestRef(volume);\n const disabledRef = useLatestRef(disabled);\n\n const getPercent = () => (volumeRef.current?.volume ?? 0) * 100;\n const getStepPercent = () => core.getStepPercent();\n const setVolume = (percent: number) => volumeRef.current?.setVolume(percent / 100);\n\n const { state, cssVars, rootRef, thumbRef, rootProps, rootStyle, thumbProps } = useSlider<VolumeSliderCore.State>({\n computeState: (input) => {\n core.setInput(input);\n core.setMedia(volume ?? noopVolume);\n return core.getState();\n },\n getPercent,\n getStepPercent,\n getLargeStepPercent: () => core.getLargeStepPercent(),\n orientation,\n disabled,\n adjustPercent: (rawPercent, thumbSize, trackSize) =>\n core.adjustPercentForAlignment(rawPercent, thumbSize, trackSize),\n getCSSVars: getSliderCSSVars,\n onValueChange: setVolume,\n onValueCommit: setVolume,\n onDragStart,\n onDragEnd,\n });\n\n const [wheelHandler] = useState(() =>\n createWheelStep({\n isDisabled: () => !!disabledRef.current || !volumeRef.current,\n getPercent: () => (volumeRef.current?.volume ?? 0) * 100,\n getStepPercent: () => core.getWheelStepPercent(),\n onValueChange: (percent) => volumeRef.current?.setVolume(percent / 100),\n })\n );\n\n // Attach non-passive wheel listener via callback ref so it covers\n // late-mounted elements (null → mounted after volume appears).\n const wheelCleanupRef = useRef<(() => void) | null>(null);\n const wheelRef = useCallback(\n (element: HTMLDivElement | null) => {\n wheelCleanupRef.current?.();\n wheelCleanupRef.current = null;\n if (element) {\n wheelCleanupRef.current = listen(element, 'wheel', wheelHandler.onWheel, { passive: false });\n }\n },\n [wheelHandler]\n );\n\n if (!volume) {\n if (__DEV__) logMissingFeature('VolumeSlider', 'volume');\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: VolumeSliderDataAttrs,\n getAttrs: (sliderState) => core.getAttrs(sliderState as VolumeSliderCore.State),\n formatValue: (value) => `${Math.round(value)}%`,\n }}\n >\n {renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap: VolumeSliderDataAttrs,\n ref: [forwardedRef, rootRef, wheelRef],\n props: [{ style: { ...cssVars, ...rootStyle } }, rootProps, elementProps],\n }\n )}\n </SliderProvider>\n );\n }\n);\n\nexport namespace VolumeSliderRoot {\n export type Props = VolumeSliderRootProps;\n export type State = VolumeSliderCore.State;\n}\n"],"mappings":";;;;;;;;;;;;AAcA,MAAM,aAAa;CACjB,QAAQ;CACR,OAAO;CACP,oBAAoB;CACpB,iBAAiB;CACjB,mBAAmB;CACpB;AAOD,MAAa,mBAAmB,WAC9B,SAAS,iBAAiB,gBAAgB,cAAc;CACtD,MAAM,EACJ,QACA,WACA,OACA,OACA,aACA,OAAO,iBAAiB,aAAa,MACrC,YAAY,iBAAiB,aAAa,WAC1C,YAAY,iBAAiB,aAAa,WAC1C,UACA,gBACA,aACA,WACA,GAAG,iBACD;CAEJ,MAAM,SAAS,UAAU,aAAa;CAEtC,MAAM,CAAC,QAAQ,eAAe,IAAI,kBAAkB,CAAC;AACrD,MAAK,SAAS;EAAE;EAAO;EAAa;EAAM;EAAW;EAAW;EAAU;EAAgB,CAAC;CAG3F,MAAM,YAAY,aAAa,OAAO;CACtC,MAAM,cAAc,aAAa,SAAS;CAE1C,MAAM,oBAAoB,UAAU,SAAS,UAAU,KAAK;CAC5D,MAAM,uBAAuB,KAAK,gBAAgB;CAClD,MAAM,aAAa,YAAoB,UAAU,SAAS,UAAU,UAAU,IAAI;CAElF,MAAM,EAAE,OAAO,SAAS,SAAS,UAAU,WAAW,WAAW,eAAe,UAAkC;EAChH,eAAe,UAAU;AACvB,QAAK,SAAS,MAAM;AACpB,QAAK,SAAS,UAAU,WAAW;AACnC,UAAO,KAAK,UAAU;;EAExB;EACA;EACA,2BAA2B,KAAK,qBAAqB;EACrD;EACA;EACA,gBAAgB,YAAY,WAAW,cACrC,KAAK,0BAA0B,YAAY,WAAW,UAAU;EAClE,YAAY;EACZ,eAAe;EACf,eAAe;EACf;EACA;EACD,CAAC;CAEF,MAAM,CAAC,gBAAgB,eACrB,gBAAgB;EACd,kBAAkB,CAAC,CAAC,YAAY,WAAW,CAAC,UAAU;EACtD,mBAAmB,UAAU,SAAS,UAAU,KAAK;EACrD,sBAAsB,KAAK,qBAAqB;EAChD,gBAAgB,YAAY,UAAU,SAAS,UAAU,UAAU,IAAI;EACxE,CAAC,CACH;CAID,MAAM,kBAAkB,OAA4B,KAAK;CACzD,MAAM,WAAW,aACd,YAAmC;AAClC,kBAAgB,WAAW;AAC3B,kBAAgB,UAAU;AAC1B,MAAI,QACF,iBAAgB,UAAU,OAAO,SAAS,SAAS,aAAa,SAAS,EAAE,SAAS,OAAO,CAAC;IAGhG,CAAC,aAAa,CACf;AAED,KAAI,CAAC,QAAQ;AACE,oBAAkB,gBAAgB,SAAS;AACxD,SAAO;;AAGT,QACE,oBAAC,gBAAD;EACE,OAAO;GACL;GACA,cAAc,KAAK,iBAAiB,MAAM,eAAe;GACzD;GACA;GACA,cAAc;GACd,WAAW,gBAAgB,KAAK,SAAS,YAAsC;GAC/E,cAAc,UAAU,GAAG,KAAK,MAAM,MAAM,CAAC;GAC9C;YAEA,cACC,OACA;GAAE;GAAQ;GAAW;GAAO,EAC5B;GACE;GACA,cAAc;GACd,KAAK;IAAC;IAAc;IAAS;IAAS;GACtC,OAAO;IAAC,EAAE,OAAO;KAAE,GAAG;KAAS,GAAG;KAAW,EAAE;IAAE;IAAW;IAAa;GAC1E,CACF;EACc,CAAA;EAGtB"}
@@ -0,0 +1,9 @@
1
+ //#region src/utils/attach-media-element.d.ts
2
+ interface Attachable {
3
+ attach(target: EventTarget): void;
4
+ detach(): void;
5
+ }
6
+ declare function attachMediaElement<T extends HTMLVideoElement>(media: Attachable): (element: T | null) => void;
7
+ //#endregion
8
+ export { attachMediaElement };
9
+ //# sourceMappingURL=attach-media-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attach-media-element.d.ts","names":[],"sources":["../../../src/utils/attach-media-element.ts"],"mappings":";UAAU,UAAA;EACR,MAAA,CAAO,MAAA,EAAQ,WAAA;EACf,MAAA;AAAA;AAAA,iBAGc,kBAAA,WAA6B,gBAAA,CAAA,CAAkB,KAAA,EAAO,UAAA,IAAc,OAAA,EAAS,CAAA"}
@@ -6,7 +6,7 @@ function attachMediaElement(media) {
6
6
  return () => media.detach();
7
7
  };
8
8
  }
9
-
10
9
  //#endregion
11
10
  export { attachMediaElement };
11
+
12
12
  //# sourceMappingURL=attach-media-element.js.map
@@ -0,0 +1,8 @@
1
+ import { Media } from "@videojs/core";
2
+
3
+ //#region src/utils/media-props.d.ts
4
+ type AnyClass = abstract new (...args: any[]) => any;
5
+ declare function mediaProps(media: Media, DelegateClass: AnyClass, props: Record<string, any>): Record<string, any>;
6
+ //#endregion
7
+ export { mediaProps };
8
+ //# sourceMappingURL=media-props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-props.d.ts","names":[],"sources":["../../../src/utils/media-props.ts"],"mappings":";;;KAEK,QAAA,oBAA4B,IAAA;AAAA,iBAajB,UAAA,CAAW,KAAA,EAAO,KAAA,EAAO,aAAA,EAAe,QAAA,EAAU,KAAA,EAAO,MAAA,gBAAmB,MAAA"}
@@ -1,11 +1,19 @@
1
1
  //#region src/utils/media-props.ts
2
- function mediaProps(media, props) {
3
- const { src, ...remainingProps } = props;
4
- if (props.preload && media.preload !== props.preload) media.preload = props.preload;
5
- if (media.src !== src) media.src = src ?? "";
6
- return remainingProps;
2
+ function getSettableProps(DelegateClass) {
3
+ const props = /* @__PURE__ */ new Set();
4
+ for (let proto = DelegateClass.prototype; proto && proto !== Object.prototype; proto = Object.getPrototypeOf(proto)) for (const key of Object.getOwnPropertyNames(proto)) if (Object.getOwnPropertyDescriptor(proto, key)?.set) props.add(key);
5
+ return props;
6
+ }
7
+ function mediaProps(media, DelegateClass, props) {
8
+ const delegateKeys = getSettableProps(DelegateClass);
9
+ const rest = {};
10
+ for (const key of Object.keys(props)) if (delegateKeys.has(key)) {
11
+ const value = props[key];
12
+ if (media[key] !== value) media[key] = value;
13
+ } else rest[key] = props[key];
14
+ return rest;
7
15
  }
8
-
9
16
  //#endregion
10
17
  export { mediaProps };
18
+
11
19
  //# sourceMappingURL=media-props.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"media-props.js","names":[],"sources":["../../../src/utils/media-props.ts"],"sourcesContent":["import type { MediaApi } from '@videojs/core/dom';\nimport type { VideoHTMLAttributes } from 'react';\n\ninterface VideoProps extends VideoHTMLAttributes<HTMLVideoElement> {}\n\nexport function mediaProps(media: MediaApi, props: VideoProps) {\n const { src, ...remainingProps } = props;\n\n // Preload can still be passed as a prop to the native media element\n if (props.preload && media.preload !== props.preload) {\n media.preload = props.preload as '' | 'none' | 'metadata' | 'auto';\n }\n\n if (media.src !== src) {\n media.src = src ?? '';\n }\n\n // The remaining props are passed to the native media element\n return remainingProps;\n}\n"],"mappings":";AAKA,SAAgB,WAAW,OAAiB,OAAmB;CAC7D,MAAM,EAAE,KAAK,GAAG,mBAAmB;AAGnC,KAAI,MAAM,WAAW,MAAM,YAAY,MAAM,QAC3C,OAAM,UAAU,MAAM;AAGxB,KAAI,MAAM,QAAQ,IAChB,OAAM,MAAM,OAAO;AAIrB,QAAO"}
1
+ {"version":3,"file":"media-props.js","names":[],"sources":["../../../src/utils/media-props.ts"],"sourcesContent":["import type { Media } from '@videojs/core';\n\ntype AnyClass = abstract new (...args: any[]) => any;\n\nfunction getSettableProps(DelegateClass: AnyClass): Set<string> {\n const props = new Set<string>();\n for (let proto = DelegateClass.prototype; proto && proto !== Object.prototype; proto = Object.getPrototypeOf(proto)) {\n for (const key of Object.getOwnPropertyNames(proto)) {\n const desc = Object.getOwnPropertyDescriptor(proto, key);\n if (desc?.set) props.add(key);\n }\n }\n return props;\n}\n\nexport function mediaProps(media: Media, DelegateClass: AnyClass, props: Record<string, any>) {\n const delegateKeys = getSettableProps(DelegateClass);\n const rest: Record<string, any> = {};\n\n for (const key of Object.keys(props)) {\n if (delegateKeys.has(key)) {\n const value = props[key];\n if ((media as any)[key] !== value) {\n (media as any)[key] = value;\n }\n } else {\n rest[key] = props[key];\n }\n }\n\n return rest;\n}\n"],"mappings":";AAIA,SAAS,iBAAiB,eAAsC;CAC9D,MAAM,wBAAQ,IAAI,KAAa;AAC/B,MAAK,IAAI,QAAQ,cAAc,WAAW,SAAS,UAAU,OAAO,WAAW,QAAQ,OAAO,eAAe,MAAM,CACjH,MAAK,MAAM,OAAO,OAAO,oBAAoB,MAAM,CAEjD,KADa,OAAO,yBAAyB,OAAO,IAAI,EAC9C,IAAK,OAAM,IAAI,IAAI;AAGjC,QAAO;;AAGT,SAAgB,WAAW,OAAc,eAAyB,OAA4B;CAC5F,MAAM,eAAe,iBAAiB,cAAc;CACpD,MAAM,OAA4B,EAAE;AAEpC,MAAK,MAAM,OAAO,OAAO,KAAK,MAAM,CAClC,KAAI,aAAa,IAAI,IAAI,EAAE;EACzB,MAAM,QAAQ,MAAM;AACpB,MAAK,MAAc,SAAS,MACzB,OAAc,OAAO;OAGxB,MAAK,OAAO,MAAM;AAItB,QAAO"}
@@ -1,5 +1,4 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  //#region src/utils/merge-props.ts
4
3
  /**
5
4
  * Check if a key is an event handler key (on* with capital letter).
@@ -79,7 +78,7 @@ function mergeProps(...propSets) {
79
78
  for (const props of propSets) merged = mergeOne(merged, props);
80
79
  return merged;
81
80
  }
82
-
83
81
  //#endregion
84
82
  export { mergeProps };
83
+
85
84
  //# sourceMappingURL=merge-props.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge-props.js","names":[],"sources":["../../../src/utils/merge-props.ts"],"sourcesContent":["'use client';\n\nimport type { ComponentPropsWithRef, CSSProperties, ElementType, SyntheticEvent } from 'react';\n\ntype Props<T extends ElementType = ElementType> = ComponentPropsWithRef<T>;\n\n/**\n * Check if a key is an event handler key (on* with capital letter).\n */\nfunction isEventHandlerKey(key: string): boolean {\n return (\n key.charCodeAt(0) === 111 /* o */ &&\n key.charCodeAt(1) === 110 /* n */ &&\n key.charCodeAt(2) >= 65 /* A */ &&\n key.charCodeAt(2) <= 90 /* Z */\n );\n}\n\n/**\n * Check if a key/value pair is an event handler (includes undefined values).\n */\nfunction isEventHandler(key: string, value: unknown): boolean {\n return isEventHandlerKey(key) && (typeof value === 'function' || typeof value === 'undefined');\n}\n\n/**\n * Merge two event handlers - external runs first, ours runs second.\n */\nfunction mergeEventHandlers(\n ours: ((event: SyntheticEvent) => void) | undefined,\n theirs: ((event: SyntheticEvent) => void) | undefined\n): ((event: SyntheticEvent) => void) | undefined {\n if (!theirs) return ours;\n if (!ours) return theirs;\n\n return (event: SyntheticEvent) => {\n theirs(event);\n ours(event);\n };\n}\n\n/**\n * Merge two className values - concatenate strings.\n */\nfunction mergeClassNames(ours: string | undefined, theirs: string | undefined): string | undefined {\n if (theirs && ours) return `${theirs} ${ours}`;\n return theirs || ours;\n}\n\n/**\n * Merge two style objects - theirs overwrites conflicts.\n */\nfunction mergeStyles(ours: CSSProperties | undefined, theirs: CSSProperties | undefined): CSSProperties | undefined {\n if (!theirs) return ours;\n if (!ours) return theirs;\n return { ...ours, ...theirs };\n}\n\n/**\n * Merge a single props object into accumulated result.\n */\nfunction mergeOne<T extends ElementType>(\n merged: Record<string, unknown>,\n props: Props<T> | undefined\n): Record<string, unknown> {\n if (!props) return merged;\n\n for (const key in props) {\n const value = props[key as keyof typeof props];\n\n if (key === 'className') {\n merged.className = mergeClassNames(merged.className as string | undefined, value as string);\n } else if (key === 'style') {\n merged.style = mergeStyles(merged.style as CSSProperties | undefined, value as CSSProperties);\n } else if (isEventHandler(key, value)) {\n merged[key] = mergeEventHandlers(\n merged[key] as ((event: SyntheticEvent) => void) | undefined,\n value as (event: SyntheticEvent) => void\n );\n } else {\n merged[key] = value;\n }\n }\n\n return merged;\n}\n\n/**\n * Merge multiple props objects.\n *\n * - Event handlers (on*): chained - external first, ours second\n * - className: concatenated\n * - style: merged objects (external wins conflicts)\n * - other: last one wins\n *\n * @public\n * @example\n * ```ts\n * const merged = mergeProps(\n * { onClick: ourHandler, className: 'base' },\n * { onClick: theirHandler, className: 'custom' }\n * );\n * // { onClick: chainedHandler, className: 'custom base' }\n * ```\n */\nexport function mergeProps<T extends ElementType>(...propSets: (Props<T> | undefined)[]): Props<T> {\n let merged: Record<string, unknown> = {};\n\n for (const props of propSets) {\n merged = mergeOne(merged, props);\n }\n\n return merged as Props<T>;\n}\n"],"mappings":";;;;;;AASA,SAAS,kBAAkB,KAAsB;AAC/C,QACE,IAAI,WAAW,EAAE,KAAK,OACtB,IAAI,WAAW,EAAE,KAAK,OACtB,IAAI,WAAW,EAAE,IAAI,MACrB,IAAI,WAAW,EAAE,IAAI;;;;;AAOzB,SAAS,eAAe,KAAa,OAAyB;AAC5D,QAAO,kBAAkB,IAAI,KAAK,OAAO,UAAU,cAAc,OAAO,UAAU;;;;;AAMpF,SAAS,mBACP,MACA,QAC+C;AAC/C,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,CAAC,KAAM,QAAO;AAElB,SAAQ,UAA0B;AAChC,SAAO,MAAM;AACb,OAAK,MAAM;;;;;;AAOf,SAAS,gBAAgB,MAA0B,QAAgD;AACjG,KAAI,UAAU,KAAM,QAAO,GAAG,OAAO,GAAG;AACxC,QAAO,UAAU;;;;;AAMnB,SAAS,YAAY,MAAiC,QAA8D;AAClH,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,CAAC,KAAM,QAAO;AAClB,QAAO;EAAE,GAAG;EAAM,GAAG;EAAQ;;;;;AAM/B,SAAS,SACP,QACA,OACyB;AACzB,KAAI,CAAC,MAAO,QAAO;AAEnB,MAAK,MAAM,OAAO,OAAO;EACvB,MAAM,QAAQ,MAAM;AAEpB,MAAI,QAAQ,YACV,QAAO,YAAY,gBAAgB,OAAO,WAAiC,MAAgB;WAClF,QAAQ,QACjB,QAAO,QAAQ,YAAY,OAAO,OAAoC,MAAuB;WACpF,eAAe,KAAK,MAAM,CACnC,QAAO,OAAO,mBACZ,OAAO,MACP,MACD;MAED,QAAO,OAAO;;AAIlB,QAAO;;;;;;;;;;;;;;;;;;;;AAqBT,SAAgB,WAAkC,GAAG,UAA8C;CACjG,IAAI,SAAkC,EAAE;AAExC,MAAK,MAAM,SAAS,SAClB,UAAS,SAAS,QAAQ,MAAM;AAGlC,QAAO"}
1
+ {"version":3,"file":"merge-props.js","names":[],"sources":["../../../src/utils/merge-props.ts"],"sourcesContent":["'use client';\n\nimport type { ComponentPropsWithRef, CSSProperties, ElementType, SyntheticEvent } from 'react';\n\ntype Props<T extends ElementType = ElementType> = ComponentPropsWithRef<T>;\n\n/**\n * Check if a key is an event handler key (on* with capital letter).\n */\nfunction isEventHandlerKey(key: string): boolean {\n return (\n key.charCodeAt(0) === 111 /* o */ &&\n key.charCodeAt(1) === 110 /* n */ &&\n key.charCodeAt(2) >= 65 /* A */ &&\n key.charCodeAt(2) <= 90 /* Z */\n );\n}\n\n/**\n * Check if a key/value pair is an event handler (includes undefined values).\n */\nfunction isEventHandler(key: string, value: unknown): boolean {\n return isEventHandlerKey(key) && (typeof value === 'function' || typeof value === 'undefined');\n}\n\n/**\n * Merge two event handlers - external runs first, ours runs second.\n */\nfunction mergeEventHandlers(\n ours: ((event: SyntheticEvent) => void) | undefined,\n theirs: ((event: SyntheticEvent) => void) | undefined\n): ((event: SyntheticEvent) => void) | undefined {\n if (!theirs) return ours;\n if (!ours) return theirs;\n\n return (event: SyntheticEvent) => {\n theirs(event);\n ours(event);\n };\n}\n\n/**\n * Merge two className values - concatenate strings.\n */\nfunction mergeClassNames(ours: string | undefined, theirs: string | undefined): string | undefined {\n if (theirs && ours) return `${theirs} ${ours}`;\n return theirs || ours;\n}\n\n/**\n * Merge two style objects - theirs overwrites conflicts.\n */\nfunction mergeStyles(ours: CSSProperties | undefined, theirs: CSSProperties | undefined): CSSProperties | undefined {\n if (!theirs) return ours;\n if (!ours) return theirs;\n return { ...ours, ...theirs };\n}\n\n/**\n * Merge a single props object into accumulated result.\n */\nfunction mergeOne<T extends ElementType>(\n merged: Record<string, unknown>,\n props: Props<T> | undefined\n): Record<string, unknown> {\n if (!props) return merged;\n\n for (const key in props) {\n const value = props[key as keyof typeof props];\n\n if (key === 'className') {\n merged.className = mergeClassNames(merged.className as string | undefined, value as string);\n } else if (key === 'style') {\n merged.style = mergeStyles(merged.style as CSSProperties | undefined, value as CSSProperties);\n } else if (isEventHandler(key, value)) {\n merged[key] = mergeEventHandlers(\n merged[key] as ((event: SyntheticEvent) => void) | undefined,\n value as (event: SyntheticEvent) => void\n );\n } else {\n merged[key] = value;\n }\n }\n\n return merged;\n}\n\n/**\n * Merge multiple props objects.\n *\n * - Event handlers (on*): chained - external first, ours second\n * - className: concatenated\n * - style: merged objects (external wins conflicts)\n * - other: last one wins\n *\n * @public\n * @example\n * ```ts\n * const merged = mergeProps(\n * { onClick: ourHandler, className: 'base' },\n * { onClick: theirHandler, className: 'custom' }\n * );\n * // { onClick: chainedHandler, className: 'custom base' }\n * ```\n */\nexport function mergeProps<T extends ElementType>(...propSets: (Props<T> | undefined)[]): Props<T> {\n let merged: Record<string, unknown> = {};\n\n for (const props of propSets) {\n merged = mergeOne(merged, props);\n }\n\n return merged as Props<T>;\n}\n"],"mappings":";;;;;AASA,SAAS,kBAAkB,KAAsB;AAC/C,QACE,IAAI,WAAW,EAAE,KAAK,OACtB,IAAI,WAAW,EAAE,KAAK,OACtB,IAAI,WAAW,EAAE,IAAI,MACrB,IAAI,WAAW,EAAE,IAAI;;;;;AAOzB,SAAS,eAAe,KAAa,OAAyB;AAC5D,QAAO,kBAAkB,IAAI,KAAK,OAAO,UAAU,cAAc,OAAO,UAAU;;;;;AAMpF,SAAS,mBACP,MACA,QAC+C;AAC/C,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,CAAC,KAAM,QAAO;AAElB,SAAQ,UAA0B;AAChC,SAAO,MAAM;AACb,OAAK,MAAM;;;;;;AAOf,SAAS,gBAAgB,MAA0B,QAAgD;AACjG,KAAI,UAAU,KAAM,QAAO,GAAG,OAAO,GAAG;AACxC,QAAO,UAAU;;;;;AAMnB,SAAS,YAAY,MAAiC,QAA8D;AAClH,KAAI,CAAC,OAAQ,QAAO;AACpB,KAAI,CAAC,KAAM,QAAO;AAClB,QAAO;EAAE,GAAG;EAAM,GAAG;EAAQ;;;;;AAM/B,SAAS,SACP,QACA,OACyB;AACzB,KAAI,CAAC,MAAO,QAAO;AAEnB,MAAK,MAAM,OAAO,OAAO;EACvB,MAAM,QAAQ,MAAM;AAEpB,MAAI,QAAQ,YACV,QAAO,YAAY,gBAAgB,OAAO,WAAiC,MAAgB;WAClF,QAAQ,QACjB,QAAO,QAAQ,YAAY,OAAO,OAAoC,MAAuB;WACpF,eAAe,KAAK,MAAM,CACnC,QAAO,OAAO,mBACZ,OAAO,MACP,MACD;MAED,QAAO,OAAO;;AAIlB,QAAO;;;;;;;;;;;;;;;;;;;;AAqBT,SAAgB,WAAkC,GAAG,UAA8C;CACjG,IAAI,SAAkC,EAAE;AAExC,MAAK,MAAM,SAAS,SAClB,UAAS,SAAS,QAAQ,MAAM;AAGlC,QAAO"}
@@ -0,0 +1,29 @@
1
+ import { Ref, RefCallback } from "react";
2
+
3
+ //#region src/utils/use-composed-refs.d.ts
4
+ type OptionalRef<T> = Ref<T> | undefined;
5
+ /**
6
+ * Compose multiple refs into a single callback ref.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const composedRef = composeRefs(ref1, ref2, ref3);
11
+ * return <div ref={composedRef} />;
12
+ * ```
13
+ */
14
+ declare function composeRefs<T>(...refs: (OptionalRef<T> | OptionalRef<T>[])[]): RefCallback<T>;
15
+ /**
16
+ * Hook that composes multiple refs into a single callback ref.
17
+ *
18
+ * Memoized for stable reference.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * const composedRef = useComposedRefs(forwardedRef, localRef);
23
+ * return <div ref={composedRef} />;
24
+ * ```
25
+ */
26
+ declare function useComposedRefs<T>(...refs: OptionalRef<T>[]): RefCallback<T>;
27
+ //#endregion
28
+ export { composeRefs, useComposedRefs };
29
+ //# sourceMappingURL=use-composed-refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-composed-refs.d.ts","names":[],"sources":["../../../src/utils/use-composed-refs.ts"],"mappings":";;;KAOK,WAAA,MAAiB,GAAA,CAAI,CAAA;;AAJoB;;;;;;;;iBA8B9B,WAAA,GAAA,CAAA,GAAkB,IAAA,GAAO,WAAA,CAAY,CAAA,IAAK,WAAA,CAAY,CAAA,SAAU,WAAA,CAAY,CAAA;AAA5F;;;;;;;;;;;AAAA,iBAkCgB,eAAA,GAAA,CAAA,GAAsB,IAAA,EAAM,WAAA,CAAY,CAAA,MAAO,WAAA,CAAY,CAAA"}
@@ -1,8 +1,6 @@
1
- 'use client';
2
-
1
+ "use client";
3
2
  import { useCallback } from "react";
4
3
  import { isFunction } from "@videojs/utils/predicate";
5
-
6
4
  //#region src/utils/use-composed-refs.ts
7
5
  /**
8
6
  * Set a given ref to a given value.
@@ -51,7 +49,7 @@ function composeRefs(...refs) {
51
49
  function useComposedRefs(...refs) {
52
50
  return useCallback(composeRefs(...refs), [...refs]);
53
51
  }
54
-
55
52
  //#endregion
56
53
  export { composeRefs, useComposedRefs };
54
+
57
55
  //# sourceMappingURL=use-composed-refs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-composed-refs.js","names":[],"sources":["../../../src/utils/use-composed-refs.ts"],"sourcesContent":["'use client';\n\nimport { isFunction } from '@videojs/utils/predicate';\nimport type { Ref, RefCallback } from 'react';\n\nimport { useCallback } from 'react';\n\ntype OptionalRef<T> = Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value.\n *\n * Handles both callback refs and RefObject(s).\n *\n * @returns Cleanup function if the ref callback returned one (React 19+)\n */\nfunction setRef<T>(ref: OptionalRef<T>, value: T): (() => void) | void | undefined {\n if (isFunction(ref)) {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * Compose multiple refs into a single callback ref.\n *\n * @example\n * ```tsx\n * const composedRef = composeRefs(ref1, ref2, ref3);\n * return <div ref={composedRef} />;\n * ```\n */\nexport function composeRefs<T>(...refs: (OptionalRef<T> | OptionalRef<T>[])[]): RefCallback<T> {\n const flatRefs = refs.flat();\n\n return (node): (() => void) | void => {\n const cleanups = flatRefs.map((ref) => setRef(ref, node));\n\n // Only return cleanup if any refs returned one (React 19+).\n // React 18 handles cleanup by calling the ref callback with null.\n if (cleanups.some(isFunction)) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (isFunction(cleanup)) {\n cleanup();\n } else {\n setRef(flatRefs[i], null);\n }\n }\n };\n }\n };\n}\n\n/**\n * Hook that composes multiple refs into a single callback ref.\n *\n * Memoized for stable reference.\n *\n * @example\n * ```tsx\n * const composedRef = useComposedRefs(forwardedRef, localRef);\n * return <div ref={composedRef} />;\n * ```\n */\nexport function useComposedRefs<T>(...refs: OptionalRef<T>[]): RefCallback<T> {\n return useCallback(composeRefs(...refs), [...refs]);\n}\n"],"mappings":";;;;;;;;;;;;;AAgBA,SAAS,OAAU,KAAqB,OAA2C;AACjF,KAAI,WAAW,IAAI,CACjB,QAAO,IAAI,MAAM;UACR,QAAQ,QAAQ,QAAQ,OACjC,KAAI,UAAU;;;;;;;;;;;AAalB,SAAgB,YAAe,GAAG,MAA6D;CAC7F,MAAM,WAAW,KAAK,MAAM;AAE5B,SAAQ,SAA8B;EACpC,MAAM,WAAW,SAAS,KAAK,QAAQ,OAAO,KAAK,KAAK,CAAC;AAIzD,MAAI,SAAS,KAAK,WAAW,CAC3B,cAAa;AACX,QAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;IACxC,MAAM,UAAU,SAAS;AACzB,QAAI,WAAW,QAAQ,CACrB,UAAS;QAET,QAAO,SAAS,IAAI,KAAK;;;;;;;;;;;;;;;;AAmBrC,SAAgB,gBAAmB,GAAG,MAAwC;AAC5E,QAAO,YAAY,YAAY,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"use-composed-refs.js","names":[],"sources":["../../../src/utils/use-composed-refs.ts"],"sourcesContent":["'use client';\n\nimport { isFunction } from '@videojs/utils/predicate';\nimport type { Ref, RefCallback } from 'react';\n\nimport { useCallback } from 'react';\n\ntype OptionalRef<T> = Ref<T> | undefined;\n\n/**\n * Set a given ref to a given value.\n *\n * Handles both callback refs and RefObject(s).\n *\n * @returns Cleanup function if the ref callback returned one (React 19+)\n */\nfunction setRef<T>(ref: OptionalRef<T>, value: T): (() => void) | void | undefined {\n if (isFunction(ref)) {\n return ref(value);\n } else if (ref !== null && ref !== undefined) {\n ref.current = value;\n }\n}\n\n/**\n * Compose multiple refs into a single callback ref.\n *\n * @example\n * ```tsx\n * const composedRef = composeRefs(ref1, ref2, ref3);\n * return <div ref={composedRef} />;\n * ```\n */\nexport function composeRefs<T>(...refs: (OptionalRef<T> | OptionalRef<T>[])[]): RefCallback<T> {\n const flatRefs = refs.flat();\n\n return (node): (() => void) | void => {\n const cleanups = flatRefs.map((ref) => setRef(ref, node));\n\n // Only return cleanup if any refs returned one (React 19+).\n // React 18 handles cleanup by calling the ref callback with null.\n if (cleanups.some(isFunction)) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (isFunction(cleanup)) {\n cleanup();\n } else {\n setRef(flatRefs[i], null);\n }\n }\n };\n }\n };\n}\n\n/**\n * Hook that composes multiple refs into a single callback ref.\n *\n * Memoized for stable reference.\n *\n * @example\n * ```tsx\n * const composedRef = useComposedRefs(forwardedRef, localRef);\n * return <div ref={composedRef} />;\n * ```\n */\nexport function useComposedRefs<T>(...refs: OptionalRef<T>[]): RefCallback<T> {\n return useCallback(composeRefs(...refs), [...refs]);\n}\n"],"mappings":";;;;;;;;;;;AAgBA,SAAS,OAAU,KAAqB,OAA2C;AACjF,KAAI,WAAW,IAAI,CACjB,QAAO,IAAI,MAAM;UACR,QAAQ,QAAQ,QAAQ,KAAA,EACjC,KAAI,UAAU;;;;;;;;;;;AAalB,SAAgB,YAAe,GAAG,MAA6D;CAC7F,MAAM,WAAW,KAAK,MAAM;AAE5B,SAAQ,SAA8B;EACpC,MAAM,WAAW,SAAS,KAAK,QAAQ,OAAO,KAAK,KAAK,CAAC;AAIzD,MAAI,SAAS,KAAK,WAAW,CAC3B,cAAa;AACX,QAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;IACxC,MAAM,UAAU,SAAS;AACzB,QAAI,WAAW,QAAQ,CACrB,UAAS;QAET,QAAO,SAAS,IAAI,KAAK;;;;;;;;;;;;;;;;AAmBrC,SAAgB,gBAAmB,GAAG,MAAwC;AAC5E,QAAO,YAAY,YAAY,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC"}
@@ -0,0 +1,22 @@
1
+ //#region src/utils/use-destroy.d.ts
2
+ interface Destroyable {
3
+ destroy(): void;
4
+ }
5
+ /**
6
+ * Destroy an instance on unmount, deferring destruction to survive React
7
+ * StrictMode's simulated unmount/re-mount cycle.
8
+ *
9
+ * StrictMode runs effects, then immediately runs cleanup, then re-runs
10
+ * effects — all synchronously. By deferring `destroy()` to a macrotask,
11
+ * the re-mount effect can cancel it before it fires.
12
+ *
13
+ * @param instance - Object with a `destroy()` method.
14
+ * @param setup - Optional setup called on first mount. Skipped on StrictMode
15
+ * re-mount since the previous setup was never torn down.
16
+ * @param teardown - Optional teardown called right before `destroy()` on real
17
+ * unmount. Skipped on StrictMode simulated unmount.
18
+ */
19
+ declare function useDestroy(instance: Destroyable, setup?: () => void, teardown?: () => void): void;
20
+ //#endregion
21
+ export { useDestroy };
22
+ //# sourceMappingURL=use-destroy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-destroy.d.ts","names":[],"sources":["../../../src/utils/use-destroy.ts"],"mappings":";UAMU,WAAA;EACR,OAAA;AAAA;;;;AAiBF;;;;;;;;;;;iBAAgB,UAAA,CAAW,QAAA,EAAU,WAAA,EAAa,KAAA,eAAoB,QAAA"}