@videojs/react 10.0.0-beta.27 → 10.0.0-beta.29

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 (865) hide show
  1. package/dist/default/__generated__/skins/default-video/styles/buttons.css +132 -18
  2. package/dist/default/__generated__/skins/default-video/styles/captions.css +22 -0
  3. package/dist/default/__generated__/skins/default-video/styles/container.css +121 -8
  4. package/dist/default/__generated__/skins/default-video/styles/controls.css +436 -21
  5. package/dist/default/__generated__/skins/default-video/styles/dialog.css +169 -0
  6. package/dist/default/__generated__/skins/default-video/styles/indicator.css +459 -0
  7. package/dist/default/__generated__/skins/default-video/styles/menus.css +254 -0
  8. package/dist/default/__generated__/skins/default-video/styles/overlays.css +26 -2
  9. package/dist/default/__generated__/skins/default-video/styles/popups.css +338 -12
  10. package/dist/default/__generated__/skins/default-video/styles/poster.css +4 -4
  11. package/dist/default/__generated__/skins/default-video/styles/sliders.css +355 -31
  12. package/dist/default/__generated__/skins/default-video/styles/styles.css +2455 -216
  13. package/dist/default/__generated__/skins/default-video/styles/theme.css +4 -19
  14. package/dist/default/__generated__/skins/default-video/styles/video.css +29 -0
  15. package/dist/default/__generated__/skins/minimal-video/styles/base.css +25 -0
  16. package/dist/default/__generated__/skins/minimal-video/styles/buttons.css +266 -0
  17. package/dist/default/__generated__/skins/minimal-video/styles/captions.css +22 -0
  18. package/dist/default/__generated__/skins/minimal-video/styles/container.css +158 -0
  19. package/dist/default/__generated__/skins/minimal-video/styles/controls.css +182 -0
  20. package/dist/default/__generated__/skins/minimal-video/styles/dialog.css +77 -0
  21. package/dist/default/__generated__/skins/minimal-video/styles/indicator.css +322 -0
  22. package/dist/default/__generated__/skins/minimal-video/styles/menus.css +254 -0
  23. package/dist/default/__generated__/skins/minimal-video/styles/overlays.css +35 -0
  24. package/dist/default/__generated__/skins/minimal-video/styles/popups.css +371 -0
  25. package/dist/default/__generated__/skins/minimal-video/styles/poster.css +47 -0
  26. package/dist/default/__generated__/skins/minimal-video/styles/sliders.css +436 -0
  27. package/dist/default/__generated__/skins/minimal-video/styles/styles.css +2246 -0
  28. package/dist/default/__generated__/skins/minimal-video/styles/theme.css +7 -0
  29. package/dist/default/__generated__/skins/minimal-video/styles/video.css +29 -0
  30. package/dist/default/i18n/context.js +0 -1
  31. package/dist/default/i18n/context.js.map +1 -1
  32. package/dist/default/i18n/create-i18n.js +0 -1
  33. package/dist/default/i18n/create-i18n.js.map +1 -1
  34. package/dist/default/i18n/index.js +2 -1
  35. package/dist/default/i18n/text.js +20 -0
  36. package/dist/default/i18n/text.js.map +1 -0
  37. package/dist/default/icons/dist/react/default/airplay-exit.js +3 -3
  38. package/dist/default/icons/dist/react/default/airplay-exit.js.map +1 -1
  39. package/dist/default/icons/dist/react/minimal/airplay-exit.js +3 -3
  40. package/dist/default/icons/dist/react/minimal/airplay-exit.js.map +1 -1
  41. package/dist/default/index.js +2 -1
  42. package/dist/default/media/audio.js +0 -1
  43. package/dist/default/media/audio.js.map +1 -1
  44. package/dist/default/media/hls-background-video/media.js +18 -3
  45. package/dist/default/media/hls-background-video/media.js.map +1 -1
  46. package/dist/default/media/video.js +0 -1
  47. package/dist/default/media/video.js.map +1 -1
  48. package/dist/default/player/container.js +0 -1
  49. package/dist/default/player/container.js.map +1 -1
  50. package/dist/default/player/context.js +0 -1
  51. package/dist/default/player/context.js.map +1 -1
  52. package/dist/default/player/create-player.js +0 -1
  53. package/dist/default/player/create-player.js.map +1 -1
  54. package/dist/default/player/popup-group-context.js +0 -1
  55. package/dist/default/player/popup-group-context.js.map +1 -1
  56. package/dist/default/presets/audio/minimal-skin.css +117 -118
  57. package/dist/default/presets/audio/minimal-skin.js +2 -1
  58. package/dist/default/presets/audio/minimal-skin.js.map +1 -1
  59. package/dist/default/presets/audio/minimal-skin.tailwind.js +2 -1
  60. package/dist/default/presets/audio/minimal-skin.tailwind.js.map +1 -1
  61. package/dist/default/presets/audio/skin.css +95 -99
  62. package/dist/default/presets/audio/skin.js +2 -1
  63. package/dist/default/presets/audio/skin.js.map +1 -1
  64. package/dist/default/presets/audio/skin.tailwind.js +2 -1
  65. package/dist/default/presets/audio/skin.tailwind.js.map +1 -1
  66. package/dist/default/presets/background/skin.js +1 -0
  67. package/dist/default/presets/background/skin.js.map +1 -1
  68. package/dist/default/presets/live-audio/minimal-skin.css +117 -118
  69. package/dist/default/presets/live-audio/minimal-skin.js +1 -0
  70. package/dist/default/presets/live-audio/minimal-skin.js.map +1 -1
  71. package/dist/default/presets/live-audio/minimal-skin.tailwind.js +1 -0
  72. package/dist/default/presets/live-audio/minimal-skin.tailwind.js.map +1 -1
  73. package/dist/default/presets/live-audio/skin.css +95 -99
  74. package/dist/default/presets/live-audio/skin.js +1 -0
  75. package/dist/default/presets/live-audio/skin.js.map +1 -1
  76. package/dist/default/presets/live-audio/skin.tailwind.js +1 -0
  77. package/dist/default/presets/live-audio/skin.tailwind.js.map +1 -1
  78. package/dist/default/presets/live-video/minimal-skin.css +158 -137
  79. package/dist/default/presets/live-video/minimal-skin.js +4 -8
  80. package/dist/default/presets/live-video/minimal-skin.js.map +1 -1
  81. package/dist/default/presets/live-video/minimal-skin.tailwind.js +6 -8
  82. package/dist/default/presets/live-video/minimal-skin.tailwind.js.map +1 -1
  83. package/dist/default/presets/live-video/skin.css +120 -106
  84. package/dist/default/presets/live-video/skin.js +4 -8
  85. package/dist/default/presets/live-video/skin.js.map +1 -1
  86. package/dist/default/presets/live-video/skin.tailwind.js +8 -10
  87. package/dist/default/presets/live-video/skin.tailwind.js.map +1 -1
  88. package/dist/default/presets/video/minimal-skin.css +158 -137
  89. package/dist/default/presets/video/minimal-skin.js +4 -8
  90. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  91. package/dist/default/presets/video/minimal-skin.tailwind.js +6 -8
  92. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  93. package/dist/default/presets/video/skin.css +120 -106
  94. package/dist/default/presets/video/skin.js +4 -8
  95. package/dist/default/presets/video/skin.js.map +1 -1
  96. package/dist/default/presets/video/skin.tailwind.js +7 -9
  97. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  98. package/dist/default/skins/dist/default/default/tailwind/components/button.js +3 -1
  99. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  100. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +8 -1
  101. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  102. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +13 -13
  103. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  104. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
  105. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
  106. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +3 -3
  107. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  108. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
  109. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  110. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
  111. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  112. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
  113. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
  114. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +7 -6
  115. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  116. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +4 -4
  117. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  118. package/dist/default/ui/airplay-button/airplay-button.js +0 -1
  119. package/dist/default/ui/airplay-button/airplay-button.js.map +1 -1
  120. package/dist/default/ui/alert-dialog/alert-dialog-close.js +0 -1
  121. package/dist/default/ui/alert-dialog/alert-dialog-close.js.map +1 -1
  122. package/dist/default/ui/alert-dialog/alert-dialog-description.js +0 -1
  123. package/dist/default/ui/alert-dialog/alert-dialog-description.js.map +1 -1
  124. package/dist/default/ui/alert-dialog/alert-dialog-popup.js +0 -1
  125. package/dist/default/ui/alert-dialog/alert-dialog-popup.js.map +1 -1
  126. package/dist/default/ui/alert-dialog/alert-dialog-root.js +0 -1
  127. package/dist/default/ui/alert-dialog/alert-dialog-root.js.map +1 -1
  128. package/dist/default/ui/alert-dialog/alert-dialog-title.js +0 -1
  129. package/dist/default/ui/alert-dialog/alert-dialog-title.js.map +1 -1
  130. package/dist/default/ui/alert-dialog/context.js +0 -1
  131. package/dist/default/ui/alert-dialog/context.js.map +1 -1
  132. package/dist/default/ui/audio-track/use-audio-track-options.js +0 -1
  133. package/dist/default/ui/audio-track/use-audio-track-options.js.map +1 -1
  134. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group.js +0 -1
  135. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group.js.map +1 -1
  136. package/dist/default/ui/buffering-indicator/buffering-indicator.js +0 -1
  137. package/dist/default/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  138. package/dist/default/ui/captions-button/captions-button.js +0 -1
  139. package/dist/default/ui/captions-button/captions-button.js.map +1 -1
  140. package/dist/default/ui/captions-radio-group/captions-radio-group.js +0 -1
  141. package/dist/default/ui/captions-radio-group/captions-radio-group.js.map +1 -1
  142. package/dist/default/ui/captions-radio-group/use-captions-options.js +0 -1
  143. package/dist/default/ui/captions-radio-group/use-captions-options.js.map +1 -1
  144. package/dist/default/ui/cast-button/cast-button.js +0 -1
  145. package/dist/default/ui/cast-button/cast-button.js.map +1 -1
  146. package/dist/default/ui/controls/context.js +0 -1
  147. package/dist/default/ui/controls/context.js.map +1 -1
  148. package/dist/default/ui/controls/controls-group.js +0 -1
  149. package/dist/default/ui/controls/controls-group.js.map +1 -1
  150. package/dist/default/ui/controls/controls-root.js +0 -1
  151. package/dist/default/ui/controls/controls-root.js.map +1 -1
  152. package/dist/default/ui/create-context-part.js +0 -1
  153. package/dist/default/ui/create-context-part.js.map +1 -1
  154. package/dist/default/ui/create-media-button.js +0 -1
  155. package/dist/default/ui/create-media-button.js.map +1 -1
  156. package/dist/default/ui/error-dialog/context.js +0 -1
  157. package/dist/default/ui/error-dialog/context.js.map +1 -1
  158. package/dist/default/ui/error-dialog/error-dialog-close.js +0 -1
  159. package/dist/default/ui/error-dialog/error-dialog-close.js.map +1 -1
  160. package/dist/default/ui/error-dialog/error-dialog-description.js +0 -1
  161. package/dist/default/ui/error-dialog/error-dialog-description.js.map +1 -1
  162. package/dist/default/ui/error-dialog/error-dialog-root.js +0 -1
  163. package/dist/default/ui/error-dialog/error-dialog-root.js.map +1 -1
  164. package/dist/default/ui/error-dialog/error-dialog-title.js +0 -1
  165. package/dist/default/ui/error-dialog/error-dialog-title.js.map +1 -1
  166. package/dist/default/ui/fullscreen-button/fullscreen-button.js +0 -1
  167. package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  168. package/dist/default/ui/gesture/gesture.js +0 -1
  169. package/dist/default/ui/gesture/gesture.js.map +1 -1
  170. package/dist/default/ui/gesture/use-doubletap-gesture.js +0 -1
  171. package/dist/default/ui/gesture/use-doubletap-gesture.js.map +1 -1
  172. package/dist/default/ui/gesture/use-tap-gesture.js +0 -1
  173. package/dist/default/ui/gesture/use-tap-gesture.js.map +1 -1
  174. package/dist/default/ui/hooks/create-radio-options-hook.js +0 -1
  175. package/dist/default/ui/hooks/create-radio-options-hook.js.map +1 -1
  176. package/dist/default/ui/hooks/use-button.js +0 -1
  177. package/dist/default/ui/hooks/use-button.js.map +1 -1
  178. package/dist/default/ui/hooks/use-positioned-state.js +0 -1
  179. package/dist/default/ui/hooks/use-positioned-state.js.map +1 -1
  180. package/dist/default/ui/hooks/use-slider.js +0 -1
  181. package/dist/default/ui/hooks/use-slider.js.map +1 -1
  182. package/dist/default/ui/hotkey/hotkey.js +0 -1
  183. package/dist/default/ui/hotkey/hotkey.js.map +1 -1
  184. package/dist/default/ui/hotkey/use-hotkey-shortcut.js +0 -1
  185. package/dist/default/ui/hotkey/use-hotkey-shortcut.js.map +1 -1
  186. package/dist/default/ui/hotkey/use-hotkey.js +0 -1
  187. package/dist/default/ui/hotkey/use-hotkey.js.map +1 -1
  188. package/dist/default/ui/input-indicator/use-indicator-visibility.js +0 -1
  189. package/dist/default/ui/input-indicator/use-indicator-visibility.js.map +1 -1
  190. package/dist/default/ui/input-indicator/use-input-action-subscription.js +0 -1
  191. package/dist/default/ui/input-indicator/use-input-action-subscription.js.map +1 -1
  192. package/dist/default/ui/input-indicator/use-input-indicator-root.js +0 -1
  193. package/dist/default/ui/input-indicator/use-input-indicator-root.js.map +1 -1
  194. package/dist/default/ui/input-indicator/use-rendered-indicator-state.js +0 -1
  195. package/dist/default/ui/input-indicator/use-rendered-indicator-state.js.map +1 -1
  196. package/dist/default/ui/live-button/live-button.js +0 -1
  197. package/dist/default/ui/live-button/live-button.js.map +1 -1
  198. package/dist/default/ui/menu/context.js +6 -2
  199. package/dist/default/ui/menu/context.js.map +1 -1
  200. package/dist/default/ui/menu/menu-checkbox-item.js +0 -1
  201. package/dist/default/ui/menu/menu-checkbox-item.js.map +1 -1
  202. package/dist/default/ui/menu/menu-content.js +0 -1
  203. package/dist/default/ui/menu/menu-content.js.map +1 -1
  204. package/dist/default/ui/menu/menu-group-label.js +0 -1
  205. package/dist/default/ui/menu/menu-group-label.js.map +1 -1
  206. package/dist/default/ui/menu/menu-group.js +0 -1
  207. package/dist/default/ui/menu/menu-group.js.map +1 -1
  208. package/dist/default/ui/menu/menu-item-indicator.js +3 -3
  209. package/dist/default/ui/menu/menu-item-indicator.js.map +1 -1
  210. package/dist/default/ui/menu/menu-item.js +0 -1
  211. package/dist/default/ui/menu/menu-item.js.map +1 -1
  212. package/dist/default/ui/menu/menu-radio-group.js +0 -1
  213. package/dist/default/ui/menu/menu-radio-group.js.map +1 -1
  214. package/dist/default/ui/menu/menu-radio-item.js +19 -16
  215. package/dist/default/ui/menu/menu-radio-item.js.map +1 -1
  216. package/dist/default/ui/menu/menu-root.js +5 -7
  217. package/dist/default/ui/menu/menu-root.js.map +1 -1
  218. package/dist/default/ui/menu/menu-separator.js +0 -1
  219. package/dist/default/ui/menu/menu-separator.js.map +1 -1
  220. package/dist/default/ui/menu/menu-trigger.js +26 -12
  221. package/dist/default/ui/menu/menu-trigger.js.map +1 -1
  222. package/dist/default/ui/menu/use-menu-group.js +0 -1
  223. package/dist/default/ui/menu/use-menu-group.js.map +1 -1
  224. package/dist/default/ui/mute-button/mute-button.js +0 -1
  225. package/dist/default/ui/mute-button/mute-button.js.map +1 -1
  226. package/dist/default/ui/pip-button/pip-button.js +0 -1
  227. package/dist/default/ui/pip-button/pip-button.js.map +1 -1
  228. package/dist/default/ui/play-button/play-button.js +0 -1
  229. package/dist/default/ui/play-button/play-button.js.map +1 -1
  230. package/dist/default/ui/playback-rate/use-playback-rate-options.js +0 -1
  231. package/dist/default/ui/playback-rate/use-playback-rate-options.js.map +1 -1
  232. package/dist/default/ui/playback-rate-button/playback-rate-button.js +0 -1
  233. package/dist/default/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  234. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group.js +0 -1
  235. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group.js.map +1 -1
  236. package/dist/default/ui/popover/context.js +0 -1
  237. package/dist/default/ui/popover/context.js.map +1 -1
  238. package/dist/default/ui/popover/popover-arrow.js +0 -1
  239. package/dist/default/ui/popover/popover-arrow.js.map +1 -1
  240. package/dist/default/ui/popover/popover-popup.js +0 -1
  241. package/dist/default/ui/popover/popover-popup.js.map +1 -1
  242. package/dist/default/ui/popover/popover-root.js +0 -1
  243. package/dist/default/ui/popover/popover-root.js.map +1 -1
  244. package/dist/default/ui/popover/popover-trigger.js +0 -1
  245. package/dist/default/ui/popover/popover-trigger.js.map +1 -1
  246. package/dist/default/ui/popover/use-popup-position.js +0 -1
  247. package/dist/default/ui/popover/use-popup-position.js.map +1 -1
  248. package/dist/default/ui/poster/poster.js +64 -18
  249. package/dist/default/ui/poster/poster.js.map +1 -1
  250. package/dist/default/ui/quality/use-quality-options.js +0 -1
  251. package/dist/default/ui/quality/use-quality-options.js.map +1 -1
  252. package/dist/default/ui/quality-radio-group/quality-radio-group.js +0 -1
  253. package/dist/default/ui/quality-radio-group/quality-radio-group.js.map +1 -1
  254. package/dist/default/ui/seek-button/seek-button.js +0 -1
  255. package/dist/default/ui/seek-button/seek-button.js.map +1 -1
  256. package/dist/default/ui/seek-indicator/context.js +0 -1
  257. package/dist/default/ui/seek-indicator/context.js.map +1 -1
  258. package/dist/default/ui/seek-indicator/seek-indicator-root.js +0 -1
  259. package/dist/default/ui/seek-indicator/seek-indicator-root.js.map +1 -1
  260. package/dist/default/ui/seek-indicator/seek-indicator-value.js +0 -1
  261. package/dist/default/ui/seek-indicator/seek-indicator-value.js.map +1 -1
  262. package/dist/default/ui/slider/context.js +0 -1
  263. package/dist/default/ui/slider/context.js.map +1 -1
  264. package/dist/default/ui/slider/slider-buffer.js +0 -1
  265. package/dist/default/ui/slider/slider-buffer.js.map +1 -1
  266. package/dist/default/ui/slider/slider-fill.js +0 -1
  267. package/dist/default/ui/slider/slider-fill.js.map +1 -1
  268. package/dist/default/ui/slider/slider-preview.js +0 -1
  269. package/dist/default/ui/slider/slider-preview.js.map +1 -1
  270. package/dist/default/ui/slider/slider-root.js +0 -1
  271. package/dist/default/ui/slider/slider-root.js.map +1 -1
  272. package/dist/default/ui/slider/slider-thumb.js +0 -1
  273. package/dist/default/ui/slider/slider-thumb.js.map +1 -1
  274. package/dist/default/ui/slider/slider-thumbnail.js +0 -1
  275. package/dist/default/ui/slider/slider-thumbnail.js.map +1 -1
  276. package/dist/default/ui/slider/slider-track.js +0 -1
  277. package/dist/default/ui/slider/slider-track.js.map +1 -1
  278. package/dist/default/ui/slider/slider-value.js +0 -1
  279. package/dist/default/ui/slider/slider-value.js.map +1 -1
  280. package/dist/default/ui/status-announcer/status-announcer.js +0 -1
  281. package/dist/default/ui/status-announcer/status-announcer.js.map +1 -1
  282. package/dist/default/ui/status-indicator/context.js +0 -1
  283. package/dist/default/ui/status-indicator/context.js.map +1 -1
  284. package/dist/default/ui/status-indicator/status-indicator-root.js +0 -1
  285. package/dist/default/ui/status-indicator/status-indicator-root.js.map +1 -1
  286. package/dist/default/ui/status-indicator/status-indicator-value.js +0 -1
  287. package/dist/default/ui/status-indicator/status-indicator-value.js.map +1 -1
  288. package/dist/default/ui/thumbnail/thumbnail.js +0 -1
  289. package/dist/default/ui/thumbnail/thumbnail.js.map +1 -1
  290. package/dist/default/ui/time/time-group.js +0 -1
  291. package/dist/default/ui/time/time-group.js.map +1 -1
  292. package/dist/default/ui/time/time-separator.js +0 -1
  293. package/dist/default/ui/time/time-separator.js.map +1 -1
  294. package/dist/default/ui/time/time-value.js +0 -1
  295. package/dist/default/ui/time/time-value.js.map +1 -1
  296. package/dist/default/ui/time-slider/time-slider-chapters/slider-segments.js +0 -1
  297. package/dist/default/ui/time-slider/time-slider-chapters/slider-segments.js.map +1 -1
  298. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js +0 -1
  299. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js.map +1 -1
  300. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapters.js +0 -1
  301. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapters.js.map +1 -1
  302. package/dist/default/ui/time-slider/time-slider-root.js +0 -1
  303. package/dist/default/ui/time-slider/time-slider-root.js.map +1 -1
  304. package/dist/default/ui/tooltip/context.js +0 -1
  305. package/dist/default/ui/tooltip/context.js.map +1 -1
  306. package/dist/default/ui/tooltip/group-context.js +0 -1
  307. package/dist/default/ui/tooltip/group-context.js.map +1 -1
  308. package/dist/default/ui/tooltip/tooltip-arrow.js +0 -1
  309. package/dist/default/ui/tooltip/tooltip-arrow.js.map +1 -1
  310. package/dist/default/ui/tooltip/tooltip-label.js +0 -1
  311. package/dist/default/ui/tooltip/tooltip-label.js.map +1 -1
  312. package/dist/default/ui/tooltip/tooltip-popup.js +0 -1
  313. package/dist/default/ui/tooltip/tooltip-popup.js.map +1 -1
  314. package/dist/default/ui/tooltip/tooltip-provider.js +0 -1
  315. package/dist/default/ui/tooltip/tooltip-provider.js.map +1 -1
  316. package/dist/default/ui/tooltip/tooltip-root.js +0 -1
  317. package/dist/default/ui/tooltip/tooltip-root.js.map +1 -1
  318. package/dist/default/ui/tooltip/tooltip-shortcut.js +0 -1
  319. package/dist/default/ui/tooltip/tooltip-shortcut.js.map +1 -1
  320. package/dist/default/ui/tooltip/tooltip-trigger.js +0 -1
  321. package/dist/default/ui/tooltip/tooltip-trigger.js.map +1 -1
  322. package/dist/default/ui/volume-indicator/context.js +0 -1
  323. package/dist/default/ui/volume-indicator/context.js.map +1 -1
  324. package/dist/default/ui/volume-indicator/volume-indicator-fill.js +0 -1
  325. package/dist/default/ui/volume-indicator/volume-indicator-fill.js.map +1 -1
  326. package/dist/default/ui/volume-indicator/volume-indicator-root.js +0 -1
  327. package/dist/default/ui/volume-indicator/volume-indicator-root.js.map +1 -1
  328. package/dist/default/ui/volume-indicator/volume-indicator-value.js +0 -1
  329. package/dist/default/ui/volume-indicator/volume-indicator-value.js.map +1 -1
  330. package/dist/default/ui/volume-slider/volume-slider-root.js +0 -1
  331. package/dist/default/ui/volume-slider/volume-slider-root.js.map +1 -1
  332. package/dist/default/utils/merge-props.js +0 -1
  333. package/dist/default/utils/merge-props.js.map +1 -1
  334. package/dist/default/utils/use-attach-iframe.js +0 -1
  335. package/dist/default/utils/use-attach-iframe.js.map +1 -1
  336. package/dist/default/utils/use-attach-media.js +0 -1
  337. package/dist/default/utils/use-attach-media.js.map +1 -1
  338. package/dist/default/utils/use-composed-refs.js +0 -1
  339. package/dist/default/utils/use-composed-refs.js.map +1 -1
  340. package/dist/default/utils/use-destroy.js +0 -1
  341. package/dist/default/utils/use-destroy.js.map +1 -1
  342. package/dist/default/utils/use-force-render.js +0 -1
  343. package/dist/default/utils/use-force-render.js.map +1 -1
  344. package/dist/default/utils/use-latest-ref.js +0 -1
  345. package/dist/default/utils/use-latest-ref.js.map +1 -1
  346. package/dist/default/utils/use-media-component.js +0 -1
  347. package/dist/default/utils/use-media-component.js.map +1 -1
  348. package/dist/default/utils/use-media-instance.js +0 -1
  349. package/dist/default/utils/use-media-instance.js.map +1 -1
  350. package/dist/default/utils/use-render.js +2 -9
  351. package/dist/default/utils/use-render.js.map +1 -1
  352. package/dist/default/utils/use-safe-id.js +0 -1
  353. package/dist/default/utils/use-safe-id.js.map +1 -1
  354. package/dist/dev/__generated__/skins/default-video/styles/buttons.css +132 -18
  355. package/dist/dev/__generated__/skins/default-video/styles/captions.css +22 -0
  356. package/dist/dev/__generated__/skins/default-video/styles/container.css +121 -8
  357. package/dist/dev/__generated__/skins/default-video/styles/controls.css +436 -21
  358. package/dist/dev/__generated__/skins/default-video/styles/dialog.css +169 -0
  359. package/dist/dev/__generated__/skins/default-video/styles/indicator.css +459 -0
  360. package/dist/dev/__generated__/skins/default-video/styles/menus.css +254 -0
  361. package/dist/dev/__generated__/skins/default-video/styles/overlays.css +26 -2
  362. package/dist/dev/__generated__/skins/default-video/styles/popups.css +338 -12
  363. package/dist/dev/__generated__/skins/default-video/styles/poster.css +4 -4
  364. package/dist/dev/__generated__/skins/default-video/styles/sliders.css +355 -31
  365. package/dist/dev/__generated__/skins/default-video/styles/styles.css +2455 -216
  366. package/dist/dev/__generated__/skins/default-video/styles/theme.css +4 -19
  367. package/dist/dev/__generated__/skins/default-video/styles/video.css +29 -0
  368. package/dist/dev/__generated__/skins/minimal-video/styles/base.css +25 -0
  369. package/dist/dev/__generated__/skins/minimal-video/styles/buttons.css +266 -0
  370. package/dist/dev/__generated__/skins/minimal-video/styles/captions.css +22 -0
  371. package/dist/dev/__generated__/skins/minimal-video/styles/container.css +158 -0
  372. package/dist/dev/__generated__/skins/minimal-video/styles/controls.css +182 -0
  373. package/dist/dev/__generated__/skins/minimal-video/styles/dialog.css +77 -0
  374. package/dist/dev/__generated__/skins/minimal-video/styles/indicator.css +322 -0
  375. package/dist/dev/__generated__/skins/minimal-video/styles/menus.css +254 -0
  376. package/dist/dev/__generated__/skins/minimal-video/styles/overlays.css +35 -0
  377. package/dist/dev/__generated__/skins/minimal-video/styles/popups.css +371 -0
  378. package/dist/dev/__generated__/skins/minimal-video/styles/poster.css +47 -0
  379. package/dist/dev/__generated__/skins/minimal-video/styles/sliders.css +436 -0
  380. package/dist/dev/__generated__/skins/minimal-video/styles/styles.css +2246 -0
  381. package/dist/dev/__generated__/skins/minimal-video/styles/theme.css +7 -0
  382. package/dist/dev/__generated__/skins/minimal-video/styles/video.css +29 -0
  383. package/dist/dev/i18n/context.d.ts.map +1 -1
  384. package/dist/dev/i18n/context.js +0 -1
  385. package/dist/dev/i18n/context.js.map +1 -1
  386. package/dist/dev/i18n/create-i18n.d.ts.map +1 -1
  387. package/dist/dev/i18n/create-i18n.js +0 -1
  388. package/dist/dev/i18n/create-i18n.js.map +1 -1
  389. package/dist/dev/i18n/index.d.ts +2 -1
  390. package/dist/dev/i18n/index.js +2 -1
  391. package/dist/dev/i18n/text.d.ts +11 -0
  392. package/dist/dev/i18n/text.d.ts.map +1 -0
  393. package/dist/dev/i18n/text.js +20 -0
  394. package/dist/dev/i18n/text.js.map +1 -0
  395. package/dist/dev/icons/dist/react/default/airplay-exit.js +3 -3
  396. package/dist/dev/icons/dist/react/default/airplay-exit.js.map +1 -1
  397. package/dist/dev/icons/dist/react/minimal/airplay-exit.js +3 -3
  398. package/dist/dev/icons/dist/react/minimal/airplay-exit.js.map +1 -1
  399. package/dist/dev/icons/index.d.ts +6 -1
  400. package/dist/dev/icons/index.d.ts.map +1 -0
  401. package/dist/dev/icons/minimal/index.d.ts +6 -1
  402. package/dist/dev/icons/minimal/index.d.ts.map +1 -0
  403. package/dist/dev/index.d.ts +3 -2
  404. package/dist/dev/index.js +2 -1
  405. package/dist/dev/media/audio.d.ts.map +1 -1
  406. package/dist/dev/media/audio.js +0 -1
  407. package/dist/dev/media/audio.js.map +1 -1
  408. package/dist/dev/media/hls-background-video/media.d.ts +8 -0
  409. package/dist/dev/media/hls-background-video/media.d.ts.map +1 -1
  410. package/dist/dev/media/hls-background-video/media.js +18 -3
  411. package/dist/dev/media/hls-background-video/media.js.map +1 -1
  412. package/dist/dev/media/video.d.ts.map +1 -1
  413. package/dist/dev/media/video.js +0 -1
  414. package/dist/dev/media/video.js.map +1 -1
  415. package/dist/dev/player/container.d.ts.map +1 -1
  416. package/dist/dev/player/container.js +0 -1
  417. package/dist/dev/player/container.js.map +1 -1
  418. package/dist/dev/player/context.d.ts.map +1 -1
  419. package/dist/dev/player/context.js +0 -1
  420. package/dist/dev/player/context.js.map +1 -1
  421. package/dist/dev/player/create-player.d.ts.map +1 -1
  422. package/dist/dev/player/create-player.js +0 -1
  423. package/dist/dev/player/create-player.js.map +1 -1
  424. package/dist/dev/player/popup-group-context.js +0 -1
  425. package/dist/dev/player/popup-group-context.js.map +1 -1
  426. package/dist/dev/presets/audio/minimal-skin.css +117 -118
  427. package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -1
  428. package/dist/dev/presets/audio/minimal-skin.js +2 -1
  429. package/dist/dev/presets/audio/minimal-skin.js.map +1 -1
  430. package/dist/dev/presets/audio/minimal-skin.tailwind.d.ts.map +1 -1
  431. package/dist/dev/presets/audio/minimal-skin.tailwind.js +2 -1
  432. package/dist/dev/presets/audio/minimal-skin.tailwind.js.map +1 -1
  433. package/dist/dev/presets/audio/player.d.ts +2 -2
  434. package/dist/dev/presets/audio/skin.css +95 -99
  435. package/dist/dev/presets/audio/skin.d.ts.map +1 -1
  436. package/dist/dev/presets/audio/skin.js +2 -1
  437. package/dist/dev/presets/audio/skin.js.map +1 -1
  438. package/dist/dev/presets/audio/skin.tailwind.d.ts.map +1 -1
  439. package/dist/dev/presets/audio/skin.tailwind.js +2 -1
  440. package/dist/dev/presets/audio/skin.tailwind.js.map +1 -1
  441. package/dist/dev/presets/background/skin.d.ts.map +1 -1
  442. package/dist/dev/presets/background/skin.js +1 -0
  443. package/dist/dev/presets/background/skin.js.map +1 -1
  444. package/dist/dev/presets/live-audio/minimal-skin.css +117 -118
  445. package/dist/dev/presets/live-audio/minimal-skin.d.ts.map +1 -1
  446. package/dist/dev/presets/live-audio/minimal-skin.js +1 -0
  447. package/dist/dev/presets/live-audio/minimal-skin.js.map +1 -1
  448. package/dist/dev/presets/live-audio/minimal-skin.tailwind.d.ts.map +1 -1
  449. package/dist/dev/presets/live-audio/minimal-skin.tailwind.js +1 -0
  450. package/dist/dev/presets/live-audio/minimal-skin.tailwind.js.map +1 -1
  451. package/dist/dev/presets/live-audio/player.d.ts +2 -2
  452. package/dist/dev/presets/live-audio/skin.css +95 -99
  453. package/dist/dev/presets/live-audio/skin.d.ts.map +1 -1
  454. package/dist/dev/presets/live-audio/skin.js +1 -0
  455. package/dist/dev/presets/live-audio/skin.js.map +1 -1
  456. package/dist/dev/presets/live-audio/skin.tailwind.d.ts.map +1 -1
  457. package/dist/dev/presets/live-audio/skin.tailwind.js +1 -0
  458. package/dist/dev/presets/live-audio/skin.tailwind.js.map +1 -1
  459. package/dist/dev/presets/live-video/minimal-skin.css +158 -137
  460. package/dist/dev/presets/live-video/minimal-skin.js +4 -8
  461. package/dist/dev/presets/live-video/minimal-skin.js.map +1 -1
  462. package/dist/dev/presets/live-video/minimal-skin.tailwind.js +6 -8
  463. package/dist/dev/presets/live-video/minimal-skin.tailwind.js.map +1 -1
  464. package/dist/dev/presets/live-video/player.d.ts +2 -2
  465. package/dist/dev/presets/live-video/skin.css +120 -106
  466. package/dist/dev/presets/live-video/skin.js +4 -8
  467. package/dist/dev/presets/live-video/skin.js.map +1 -1
  468. package/dist/dev/presets/live-video/skin.tailwind.js +8 -10
  469. package/dist/dev/presets/live-video/skin.tailwind.js.map +1 -1
  470. package/dist/dev/presets/types.d.ts +15 -2
  471. package/dist/dev/presets/types.d.ts.map +1 -1
  472. package/dist/dev/presets/video/minimal-skin.css +158 -137
  473. package/dist/dev/presets/video/minimal-skin.js +4 -8
  474. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  475. package/dist/dev/presets/video/minimal-skin.tailwind.js +6 -8
  476. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  477. package/dist/dev/presets/video/player.d.ts +2 -2
  478. package/dist/dev/presets/video/skin.css +120 -106
  479. package/dist/dev/presets/video/skin.js +4 -8
  480. package/dist/dev/presets/video/skin.js.map +1 -1
  481. package/dist/dev/presets/video/skin.tailwind.js +7 -9
  482. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  483. package/dist/dev/skins/dist/default/default/tailwind/components/button.js +3 -1
  484. package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  485. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +8 -1
  486. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  487. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +13 -13
  488. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  489. package/dist/dev/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
  490. package/dist/dev/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
  491. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +3 -3
  492. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  493. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
  494. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  495. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
  496. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  497. package/dist/dev/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
  498. package/dist/dev/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
  499. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +7 -6
  500. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  501. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js +4 -4
  502. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  503. package/dist/dev/ui/airplay-button/airplay-button.d.ts.map +1 -1
  504. package/dist/dev/ui/airplay-button/airplay-button.js +0 -1
  505. package/dist/dev/ui/airplay-button/airplay-button.js.map +1 -1
  506. package/dist/dev/ui/alert-dialog/alert-dialog-close.d.ts.map +1 -1
  507. package/dist/dev/ui/alert-dialog/alert-dialog-close.js +0 -1
  508. package/dist/dev/ui/alert-dialog/alert-dialog-close.js.map +1 -1
  509. package/dist/dev/ui/alert-dialog/alert-dialog-description.d.ts.map +1 -1
  510. package/dist/dev/ui/alert-dialog/alert-dialog-description.js +0 -1
  511. package/dist/dev/ui/alert-dialog/alert-dialog-description.js.map +1 -1
  512. package/dist/dev/ui/alert-dialog/alert-dialog-popup.d.ts.map +1 -1
  513. package/dist/dev/ui/alert-dialog/alert-dialog-popup.js +0 -1
  514. package/dist/dev/ui/alert-dialog/alert-dialog-popup.js.map +1 -1
  515. package/dist/dev/ui/alert-dialog/alert-dialog-root.d.ts.map +1 -1
  516. package/dist/dev/ui/alert-dialog/alert-dialog-root.js +0 -1
  517. package/dist/dev/ui/alert-dialog/alert-dialog-root.js.map +1 -1
  518. package/dist/dev/ui/alert-dialog/alert-dialog-title.d.ts.map +1 -1
  519. package/dist/dev/ui/alert-dialog/alert-dialog-title.js +0 -1
  520. package/dist/dev/ui/alert-dialog/alert-dialog-title.js.map +1 -1
  521. package/dist/dev/ui/alert-dialog/context.d.ts.map +1 -1
  522. package/dist/dev/ui/alert-dialog/context.js +0 -1
  523. package/dist/dev/ui/alert-dialog/context.js.map +1 -1
  524. package/dist/dev/ui/audio-track/use-audio-track-options.d.ts.map +1 -1
  525. package/dist/dev/ui/audio-track/use-audio-track-options.js +0 -1
  526. package/dist/dev/ui/audio-track/use-audio-track-options.js.map +1 -1
  527. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group.d.ts.map +1 -1
  528. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group.js +0 -1
  529. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group.js.map +1 -1
  530. package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts.map +1 -1
  531. package/dist/dev/ui/buffering-indicator/buffering-indicator.js +0 -1
  532. package/dist/dev/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  533. package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -1
  534. package/dist/dev/ui/captions-button/captions-button.js +0 -1
  535. package/dist/dev/ui/captions-button/captions-button.js.map +1 -1
  536. package/dist/dev/ui/captions-radio-group/captions-radio-group.d.ts.map +1 -1
  537. package/dist/dev/ui/captions-radio-group/captions-radio-group.js +0 -1
  538. package/dist/dev/ui/captions-radio-group/captions-radio-group.js.map +1 -1
  539. package/dist/dev/ui/captions-radio-group/use-captions-options.d.ts.map +1 -1
  540. package/dist/dev/ui/captions-radio-group/use-captions-options.js +0 -1
  541. package/dist/dev/ui/captions-radio-group/use-captions-options.js.map +1 -1
  542. package/dist/dev/ui/cast-button/cast-button.d.ts.map +1 -1
  543. package/dist/dev/ui/cast-button/cast-button.js +0 -1
  544. package/dist/dev/ui/cast-button/cast-button.js.map +1 -1
  545. package/dist/dev/ui/controls/context.js +0 -1
  546. package/dist/dev/ui/controls/context.js.map +1 -1
  547. package/dist/dev/ui/controls/controls-group.d.ts.map +1 -1
  548. package/dist/dev/ui/controls/controls-group.js +0 -1
  549. package/dist/dev/ui/controls/controls-group.js.map +1 -1
  550. package/dist/dev/ui/controls/controls-root.d.ts.map +1 -1
  551. package/dist/dev/ui/controls/controls-root.js +0 -1
  552. package/dist/dev/ui/controls/controls-root.js.map +1 -1
  553. package/dist/dev/ui/create-context-part.js +0 -1
  554. package/dist/dev/ui/create-context-part.js.map +1 -1
  555. package/dist/dev/ui/create-media-button.js +0 -1
  556. package/dist/dev/ui/create-media-button.js.map +1 -1
  557. package/dist/dev/ui/error-dialog/context.d.ts.map +1 -1
  558. package/dist/dev/ui/error-dialog/context.js +0 -1
  559. package/dist/dev/ui/error-dialog/context.js.map +1 -1
  560. package/dist/dev/ui/error-dialog/error-dialog-close.d.ts.map +1 -1
  561. package/dist/dev/ui/error-dialog/error-dialog-close.js +0 -1
  562. package/dist/dev/ui/error-dialog/error-dialog-close.js.map +1 -1
  563. package/dist/dev/ui/error-dialog/error-dialog-description.d.ts.map +1 -1
  564. package/dist/dev/ui/error-dialog/error-dialog-description.js +0 -1
  565. package/dist/dev/ui/error-dialog/error-dialog-description.js.map +1 -1
  566. package/dist/dev/ui/error-dialog/error-dialog-root.d.ts.map +1 -1
  567. package/dist/dev/ui/error-dialog/error-dialog-root.js +0 -1
  568. package/dist/dev/ui/error-dialog/error-dialog-root.js.map +1 -1
  569. package/dist/dev/ui/error-dialog/error-dialog-title.d.ts.map +1 -1
  570. package/dist/dev/ui/error-dialog/error-dialog-title.js +0 -1
  571. package/dist/dev/ui/error-dialog/error-dialog-title.js.map +1 -1
  572. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -1
  573. package/dist/dev/ui/fullscreen-button/fullscreen-button.js +0 -1
  574. package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  575. package/dist/dev/ui/gesture/gesture.d.ts +6 -13
  576. package/dist/dev/ui/gesture/gesture.d.ts.map +1 -1
  577. package/dist/dev/ui/gesture/gesture.js +0 -1
  578. package/dist/dev/ui/gesture/gesture.js.map +1 -1
  579. package/dist/dev/ui/gesture/use-doubletap-gesture.d.ts +2 -5
  580. package/dist/dev/ui/gesture/use-doubletap-gesture.d.ts.map +1 -1
  581. package/dist/dev/ui/gesture/use-doubletap-gesture.js +0 -1
  582. package/dist/dev/ui/gesture/use-doubletap-gesture.js.map +1 -1
  583. package/dist/dev/ui/gesture/use-tap-gesture.d.ts +2 -5
  584. package/dist/dev/ui/gesture/use-tap-gesture.d.ts.map +1 -1
  585. package/dist/dev/ui/gesture/use-tap-gesture.js +0 -1
  586. package/dist/dev/ui/gesture/use-tap-gesture.js.map +1 -1
  587. package/dist/dev/ui/hooks/create-radio-options-hook.d.ts.map +1 -1
  588. package/dist/dev/ui/hooks/create-radio-options-hook.js +0 -1
  589. package/dist/dev/ui/hooks/create-radio-options-hook.js.map +1 -1
  590. package/dist/dev/ui/hooks/use-button.d.ts.map +1 -1
  591. package/dist/dev/ui/hooks/use-button.js +0 -1
  592. package/dist/dev/ui/hooks/use-button.js.map +1 -1
  593. package/dist/dev/ui/hooks/use-positioned-state.js +0 -1
  594. package/dist/dev/ui/hooks/use-positioned-state.js.map +1 -1
  595. package/dist/dev/ui/hooks/use-slider.d.ts.map +1 -1
  596. package/dist/dev/ui/hooks/use-slider.js +0 -1
  597. package/dist/dev/ui/hooks/use-slider.js.map +1 -1
  598. package/dist/dev/ui/hotkey/hotkey.d.ts +6 -12
  599. package/dist/dev/ui/hotkey/hotkey.d.ts.map +1 -1
  600. package/dist/dev/ui/hotkey/hotkey.js +0 -1
  601. package/dist/dev/ui/hotkey/hotkey.js.map +1 -1
  602. package/dist/dev/ui/hotkey/use-hotkey-shortcut.d.ts.map +1 -1
  603. package/dist/dev/ui/hotkey/use-hotkey-shortcut.js +0 -1
  604. package/dist/dev/ui/hotkey/use-hotkey-shortcut.js.map +1 -1
  605. package/dist/dev/ui/hotkey/use-hotkey.d.ts.map +1 -1
  606. package/dist/dev/ui/hotkey/use-hotkey.js +0 -1
  607. package/dist/dev/ui/hotkey/use-hotkey.js.map +1 -1
  608. package/dist/dev/ui/input-indicator/use-indicator-visibility.js +0 -1
  609. package/dist/dev/ui/input-indicator/use-indicator-visibility.js.map +1 -1
  610. package/dist/dev/ui/input-indicator/use-input-action-subscription.js +0 -1
  611. package/dist/dev/ui/input-indicator/use-input-action-subscription.js.map +1 -1
  612. package/dist/dev/ui/input-indicator/use-input-indicator-root.js +0 -1
  613. package/dist/dev/ui/input-indicator/use-input-indicator-root.js.map +1 -1
  614. package/dist/dev/ui/input-indicator/use-rendered-indicator-state.js +0 -1
  615. package/dist/dev/ui/input-indicator/use-rendered-indicator-state.js.map +1 -1
  616. package/dist/dev/ui/live-button/live-button.d.ts.map +1 -1
  617. package/dist/dev/ui/live-button/live-button.js +0 -1
  618. package/dist/dev/ui/live-button/live-button.js.map +1 -1
  619. package/dist/dev/ui/menu/context.d.ts.map +1 -1
  620. package/dist/dev/ui/menu/context.js +6 -2
  621. package/dist/dev/ui/menu/context.js.map +1 -1
  622. package/dist/dev/ui/menu/menu-checkbox-item.d.ts.map +1 -1
  623. package/dist/dev/ui/menu/menu-checkbox-item.js +0 -1
  624. package/dist/dev/ui/menu/menu-checkbox-item.js.map +1 -1
  625. package/dist/dev/ui/menu/menu-content.d.ts.map +1 -1
  626. package/dist/dev/ui/menu/menu-content.js +0 -1
  627. package/dist/dev/ui/menu/menu-content.js.map +1 -1
  628. package/dist/dev/ui/menu/menu-group-label.d.ts.map +1 -1
  629. package/dist/dev/ui/menu/menu-group-label.js +0 -1
  630. package/dist/dev/ui/menu/menu-group-label.js.map +1 -1
  631. package/dist/dev/ui/menu/menu-group.d.ts.map +1 -1
  632. package/dist/dev/ui/menu/menu-group.js +0 -1
  633. package/dist/dev/ui/menu/menu-group.js.map +1 -1
  634. package/dist/dev/ui/menu/menu-item-indicator.d.ts.map +1 -1
  635. package/dist/dev/ui/menu/menu-item-indicator.js +3 -3
  636. package/dist/dev/ui/menu/menu-item-indicator.js.map +1 -1
  637. package/dist/dev/ui/menu/menu-item.d.ts.map +1 -1
  638. package/dist/dev/ui/menu/menu-item.js +0 -1
  639. package/dist/dev/ui/menu/menu-item.js.map +1 -1
  640. package/dist/dev/ui/menu/menu-radio-group.d.ts.map +1 -1
  641. package/dist/dev/ui/menu/menu-radio-group.js +0 -1
  642. package/dist/dev/ui/menu/menu-radio-group.js.map +1 -1
  643. package/dist/dev/ui/menu/menu-radio-item.d.ts.map +1 -1
  644. package/dist/dev/ui/menu/menu-radio-item.js +19 -16
  645. package/dist/dev/ui/menu/menu-radio-item.js.map +1 -1
  646. package/dist/dev/ui/menu/menu-root.d.ts.map +1 -1
  647. package/dist/dev/ui/menu/menu-root.js +5 -7
  648. package/dist/dev/ui/menu/menu-root.js.map +1 -1
  649. package/dist/dev/ui/menu/menu-separator.d.ts.map +1 -1
  650. package/dist/dev/ui/menu/menu-separator.js +0 -1
  651. package/dist/dev/ui/menu/menu-separator.js.map +1 -1
  652. package/dist/dev/ui/menu/menu-trigger.d.ts.map +1 -1
  653. package/dist/dev/ui/menu/menu-trigger.js +26 -12
  654. package/dist/dev/ui/menu/menu-trigger.js.map +1 -1
  655. package/dist/dev/ui/menu/use-menu-group.js +0 -1
  656. package/dist/dev/ui/menu/use-menu-group.js.map +1 -1
  657. package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -1
  658. package/dist/dev/ui/mute-button/mute-button.js +0 -1
  659. package/dist/dev/ui/mute-button/mute-button.js.map +1 -1
  660. package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -1
  661. package/dist/dev/ui/pip-button/pip-button.js +0 -1
  662. package/dist/dev/ui/pip-button/pip-button.js.map +1 -1
  663. package/dist/dev/ui/play-button/play-button.d.ts.map +1 -1
  664. package/dist/dev/ui/play-button/play-button.js +0 -1
  665. package/dist/dev/ui/play-button/play-button.js.map +1 -1
  666. package/dist/dev/ui/playback-rate/use-playback-rate-options.d.ts.map +1 -1
  667. package/dist/dev/ui/playback-rate/use-playback-rate-options.js +0 -1
  668. package/dist/dev/ui/playback-rate/use-playback-rate-options.js.map +1 -1
  669. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts.map +1 -1
  670. package/dist/dev/ui/playback-rate-button/playback-rate-button.js +0 -1
  671. package/dist/dev/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  672. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group.d.ts.map +1 -1
  673. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group.js +0 -1
  674. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group.js.map +1 -1
  675. package/dist/dev/ui/popover/context.d.ts.map +1 -1
  676. package/dist/dev/ui/popover/context.js +0 -1
  677. package/dist/dev/ui/popover/context.js.map +1 -1
  678. package/dist/dev/ui/popover/popover-arrow.d.ts.map +1 -1
  679. package/dist/dev/ui/popover/popover-arrow.js +0 -1
  680. package/dist/dev/ui/popover/popover-arrow.js.map +1 -1
  681. package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -1
  682. package/dist/dev/ui/popover/popover-popup.js +0 -1
  683. package/dist/dev/ui/popover/popover-popup.js.map +1 -1
  684. package/dist/dev/ui/popover/popover-root.d.ts.map +1 -1
  685. package/dist/dev/ui/popover/popover-root.js +0 -1
  686. package/dist/dev/ui/popover/popover-root.js.map +1 -1
  687. package/dist/dev/ui/popover/popover-trigger.d.ts.map +1 -1
  688. package/dist/dev/ui/popover/popover-trigger.js +0 -1
  689. package/dist/dev/ui/popover/popover-trigger.js.map +1 -1
  690. package/dist/dev/ui/popover/use-popup-position.js +0 -1
  691. package/dist/dev/ui/popover/use-popup-position.js.map +1 -1
  692. package/dist/dev/ui/poster/poster.d.ts +15 -4
  693. package/dist/dev/ui/poster/poster.d.ts.map +1 -1
  694. package/dist/dev/ui/poster/poster.js +64 -18
  695. package/dist/dev/ui/poster/poster.js.map +1 -1
  696. package/dist/dev/ui/quality/use-quality-options.d.ts.map +1 -1
  697. package/dist/dev/ui/quality/use-quality-options.js +0 -1
  698. package/dist/dev/ui/quality/use-quality-options.js.map +1 -1
  699. package/dist/dev/ui/quality-radio-group/quality-radio-group.d.ts.map +1 -1
  700. package/dist/dev/ui/quality-radio-group/quality-radio-group.js +0 -1
  701. package/dist/dev/ui/quality-radio-group/quality-radio-group.js.map +1 -1
  702. package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -1
  703. package/dist/dev/ui/seek-button/seek-button.js +0 -1
  704. package/dist/dev/ui/seek-button/seek-button.js.map +1 -1
  705. package/dist/dev/ui/seek-indicator/context.js +0 -1
  706. package/dist/dev/ui/seek-indicator/context.js.map +1 -1
  707. package/dist/dev/ui/seek-indicator/seek-indicator-root.d.ts.map +1 -1
  708. package/dist/dev/ui/seek-indicator/seek-indicator-root.js +0 -1
  709. package/dist/dev/ui/seek-indicator/seek-indicator-root.js.map +1 -1
  710. package/dist/dev/ui/seek-indicator/seek-indicator-value.d.ts.map +1 -1
  711. package/dist/dev/ui/seek-indicator/seek-indicator-value.js +0 -1
  712. package/dist/dev/ui/seek-indicator/seek-indicator-value.js.map +1 -1
  713. package/dist/dev/ui/slider/context.js +0 -1
  714. package/dist/dev/ui/slider/context.js.map +1 -1
  715. package/dist/dev/ui/slider/slider-buffer.d.ts.map +1 -1
  716. package/dist/dev/ui/slider/slider-buffer.js +0 -1
  717. package/dist/dev/ui/slider/slider-buffer.js.map +1 -1
  718. package/dist/dev/ui/slider/slider-fill.d.ts.map +1 -1
  719. package/dist/dev/ui/slider/slider-fill.js +0 -1
  720. package/dist/dev/ui/slider/slider-fill.js.map +1 -1
  721. package/dist/dev/ui/slider/slider-preview.d.ts +5 -9
  722. package/dist/dev/ui/slider/slider-preview.d.ts.map +1 -1
  723. package/dist/dev/ui/slider/slider-preview.js +0 -1
  724. package/dist/dev/ui/slider/slider-preview.js.map +1 -1
  725. package/dist/dev/ui/slider/slider-root.d.ts.map +1 -1
  726. package/dist/dev/ui/slider/slider-root.js +0 -1
  727. package/dist/dev/ui/slider/slider-root.js.map +1 -1
  728. package/dist/dev/ui/slider/slider-thumb.d.ts.map +1 -1
  729. package/dist/dev/ui/slider/slider-thumb.js +0 -1
  730. package/dist/dev/ui/slider/slider-thumb.js.map +1 -1
  731. package/dist/dev/ui/slider/slider-thumbnail.d.ts.map +1 -1
  732. package/dist/dev/ui/slider/slider-thumbnail.js +0 -1
  733. package/dist/dev/ui/slider/slider-thumbnail.js.map +1 -1
  734. package/dist/dev/ui/slider/slider-track.d.ts.map +1 -1
  735. package/dist/dev/ui/slider/slider-track.js +0 -1
  736. package/dist/dev/ui/slider/slider-track.js.map +1 -1
  737. package/dist/dev/ui/slider/slider-value.d.ts.map +1 -1
  738. package/dist/dev/ui/slider/slider-value.js +0 -1
  739. package/dist/dev/ui/slider/slider-value.js.map +1 -1
  740. package/dist/dev/ui/status-announcer/status-announcer.d.ts.map +1 -1
  741. package/dist/dev/ui/status-announcer/status-announcer.js +0 -1
  742. package/dist/dev/ui/status-announcer/status-announcer.js.map +1 -1
  743. package/dist/dev/ui/status-indicator/context.js +0 -1
  744. package/dist/dev/ui/status-indicator/context.js.map +1 -1
  745. package/dist/dev/ui/status-indicator/status-indicator-root.d.ts.map +1 -1
  746. package/dist/dev/ui/status-indicator/status-indicator-root.js +0 -1
  747. package/dist/dev/ui/status-indicator/status-indicator-root.js.map +1 -1
  748. package/dist/dev/ui/status-indicator/status-indicator-value.d.ts.map +1 -1
  749. package/dist/dev/ui/status-indicator/status-indicator-value.js +0 -1
  750. package/dist/dev/ui/status-indicator/status-indicator-value.js.map +1 -1
  751. package/dist/dev/ui/thumbnail/thumbnail.d.ts.map +1 -1
  752. package/dist/dev/ui/thumbnail/thumbnail.js +0 -1
  753. package/dist/dev/ui/thumbnail/thumbnail.js.map +1 -1
  754. package/dist/dev/ui/time/time-group.d.ts.map +1 -1
  755. package/dist/dev/ui/time/time-group.js +0 -1
  756. package/dist/dev/ui/time/time-group.js.map +1 -1
  757. package/dist/dev/ui/time/time-separator.d.ts.map +1 -1
  758. package/dist/dev/ui/time/time-separator.js +0 -1
  759. package/dist/dev/ui/time/time-separator.js.map +1 -1
  760. package/dist/dev/ui/time/time-value.d.ts.map +1 -1
  761. package/dist/dev/ui/time/time-value.js +0 -1
  762. package/dist/dev/ui/time/time-value.js.map +1 -1
  763. package/dist/dev/ui/time-slider/time-slider-chapters/slider-segments.js +0 -1
  764. package/dist/dev/ui/time-slider/time-slider-chapters/slider-segments.js.map +1 -1
  765. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapter-title.d.ts.map +1 -1
  766. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js +0 -1
  767. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js.map +1 -1
  768. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapters.d.ts.map +1 -1
  769. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapters.js +0 -1
  770. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapters.js.map +1 -1
  771. package/dist/dev/ui/time-slider/time-slider-root.d.ts.map +1 -1
  772. package/dist/dev/ui/time-slider/time-slider-root.js +0 -1
  773. package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -1
  774. package/dist/dev/ui/tooltip/context.d.ts.map +1 -1
  775. package/dist/dev/ui/tooltip/context.js +0 -1
  776. package/dist/dev/ui/tooltip/context.js.map +1 -1
  777. package/dist/dev/ui/tooltip/group-context.js +0 -1
  778. package/dist/dev/ui/tooltip/group-context.js.map +1 -1
  779. package/dist/dev/ui/tooltip/tooltip-arrow.d.ts.map +1 -1
  780. package/dist/dev/ui/tooltip/tooltip-arrow.js +0 -1
  781. package/dist/dev/ui/tooltip/tooltip-arrow.js.map +1 -1
  782. package/dist/dev/ui/tooltip/tooltip-label.d.ts.map +1 -1
  783. package/dist/dev/ui/tooltip/tooltip-label.js +0 -1
  784. package/dist/dev/ui/tooltip/tooltip-label.js.map +1 -1
  785. package/dist/dev/ui/tooltip/tooltip-popup.d.ts.map +1 -1
  786. package/dist/dev/ui/tooltip/tooltip-popup.js +0 -1
  787. package/dist/dev/ui/tooltip/tooltip-popup.js.map +1 -1
  788. package/dist/dev/ui/tooltip/tooltip-provider.d.ts.map +1 -1
  789. package/dist/dev/ui/tooltip/tooltip-provider.js +0 -1
  790. package/dist/dev/ui/tooltip/tooltip-provider.js.map +1 -1
  791. package/dist/dev/ui/tooltip/tooltip-root.d.ts.map +1 -1
  792. package/dist/dev/ui/tooltip/tooltip-root.js +0 -1
  793. package/dist/dev/ui/tooltip/tooltip-root.js.map +1 -1
  794. package/dist/dev/ui/tooltip/tooltip-shortcut.d.ts.map +1 -1
  795. package/dist/dev/ui/tooltip/tooltip-shortcut.js +0 -1
  796. package/dist/dev/ui/tooltip/tooltip-shortcut.js.map +1 -1
  797. package/dist/dev/ui/tooltip/tooltip-trigger.d.ts.map +1 -1
  798. package/dist/dev/ui/tooltip/tooltip-trigger.js +0 -1
  799. package/dist/dev/ui/tooltip/tooltip-trigger.js.map +1 -1
  800. package/dist/dev/ui/volume-indicator/context.js +0 -1
  801. package/dist/dev/ui/volume-indicator/context.js.map +1 -1
  802. package/dist/dev/ui/volume-indicator/volume-indicator-fill.d.ts.map +1 -1
  803. package/dist/dev/ui/volume-indicator/volume-indicator-fill.js +0 -1
  804. package/dist/dev/ui/volume-indicator/volume-indicator-fill.js.map +1 -1
  805. package/dist/dev/ui/volume-indicator/volume-indicator-root.d.ts.map +1 -1
  806. package/dist/dev/ui/volume-indicator/volume-indicator-root.js +0 -1
  807. package/dist/dev/ui/volume-indicator/volume-indicator-root.js.map +1 -1
  808. package/dist/dev/ui/volume-indicator/volume-indicator-value.d.ts.map +1 -1
  809. package/dist/dev/ui/volume-indicator/volume-indicator-value.js +0 -1
  810. package/dist/dev/ui/volume-indicator/volume-indicator-value.js.map +1 -1
  811. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts.map +1 -1
  812. package/dist/dev/ui/volume-slider/volume-slider-root.js +0 -1
  813. package/dist/dev/ui/volume-slider/volume-slider-root.js.map +1 -1
  814. package/dist/dev/utils/merge-props.d.ts.map +1 -1
  815. package/dist/dev/utils/merge-props.js +0 -1
  816. package/dist/dev/utils/merge-props.js.map +1 -1
  817. package/dist/dev/utils/use-attach-iframe.js +0 -1
  818. package/dist/dev/utils/use-attach-iframe.js.map +1 -1
  819. package/dist/dev/utils/use-attach-media.d.ts.map +1 -1
  820. package/dist/dev/utils/use-attach-media.js +0 -1
  821. package/dist/dev/utils/use-attach-media.js.map +1 -1
  822. package/dist/dev/utils/use-composed-refs.d.ts.map +1 -1
  823. package/dist/dev/utils/use-composed-refs.js +0 -1
  824. package/dist/dev/utils/use-composed-refs.js.map +1 -1
  825. package/dist/dev/utils/use-destroy.d.ts.map +1 -1
  826. package/dist/dev/utils/use-destroy.js +0 -1
  827. package/dist/dev/utils/use-destroy.js.map +1 -1
  828. package/dist/dev/utils/use-force-render.js +0 -1
  829. package/dist/dev/utils/use-force-render.js.map +1 -1
  830. package/dist/dev/utils/use-latest-ref.d.ts.map +1 -1
  831. package/dist/dev/utils/use-latest-ref.js +0 -1
  832. package/dist/dev/utils/use-latest-ref.js.map +1 -1
  833. package/dist/dev/utils/use-media-component.d.ts.map +1 -1
  834. package/dist/dev/utils/use-media-component.js +0 -1
  835. package/dist/dev/utils/use-media-component.js.map +1 -1
  836. package/dist/dev/utils/use-media-instance.d.ts.map +1 -1
  837. package/dist/dev/utils/use-media-instance.js +0 -1
  838. package/dist/dev/utils/use-media-instance.js.map +1 -1
  839. package/dist/dev/utils/use-render.d.ts.map +1 -1
  840. package/dist/dev/utils/use-render.js +2 -9
  841. package/dist/dev/utils/use-render.js.map +1 -1
  842. package/dist/dev/utils/use-safe-id.js +0 -1
  843. package/dist/dev/utils/use-safe-id.js.map +1 -1
  844. package/docs/README.md +1 -1
  845. package/docs/concepts/features.md +2 -2
  846. package/docs/concepts/media-sources.md +79 -1
  847. package/docs/concepts/skins.md +128 -126
  848. package/docs/how-to/build-your-own-component.md +1 -1
  849. package/docs/how-to/customize-skins.md +511 -505
  850. package/docs/how-to/migrate-from-media-chrome.md +412 -0
  851. package/docs/how-to/migrate-from-mux-player.md +551 -0
  852. package/docs/how-to/migrate-from-plyr.md +385 -0
  853. package/docs/how-to/migrate-from-video-js-8.md +594 -0
  854. package/docs/llms.txt +9 -0
  855. package/docs/reference/create-player.md +2 -2
  856. package/docs/reference/feature-volume.md +4 -2
  857. package/docs/reference/menu.md +6 -18
  858. package/docs/reference/mute-button.md +34 -0
  859. package/docs/reference/popover.md +6 -6
  860. package/docs/reference/poster.md +187 -13
  861. package/docs/reference/slider.md +1 -1
  862. package/docs/reference/time-slider.md +1 -1
  863. package/docs/reference/tooltip.md +10 -10
  864. package/docs/reference/volume-slider.md +2 -2
  865. package/package.json +13 -8
@@ -1 +1 @@
1
- {"version":3,"file":"captions-radio-group.js","names":[],"sources":["../../../../src/ui/captions-radio-group/captions-radio-group.tsx"],"sourcesContent":["'use client';\n\nimport { type CaptionsRadioGroupCore, CaptionsRadioGroupDataAttrs } from '@videojs/core';\nimport { getStateDataAttrs } from '@videojs/core/dom';\nimport { isFunction } from '@videojs/utils/predicate';\nimport type { ReactElement } from 'react';\nimport { Fragment, forwardRef } from 'react';\n\nimport type { HTMLProps, UIComponentProps } from '../../utils/types';\nimport { MenuRadioGroup } from '../menu/menu-radio-group';\nimport type { MenuRadioItemProps } from '../menu/menu-radio-item';\nimport { type CaptionsOption, type CaptionsOptionsProps, useCaptionsOptions } from './use-captions-options';\n\nexport type CaptionsRadioGroupItemState = CaptionsOption & {\n /** Whether this option is currently selected. */\n checked: boolean;\n};\n\nexport interface CaptionsRadioGroupItemProps extends Omit<MenuRadioItemProps, 'ref'> {\n /** Text track value represented by the item. */\n 'data-track': string;\n}\n\nexport interface CaptionsRadioGroupProps\n extends Omit<UIComponentProps<'div', CaptionsRadioGroupCore.State>, 'children'>,\n CaptionsOptionsProps {\n /** Render one consumer-owned menu radio item for every captions option. */\n renderItem: (props: CaptionsRadioGroupItemProps, state: CaptionsRadioGroupItemState) => ReactElement;\n}\n\n/**\n * Renders menu radio items for the player's captions and subtitles tracks.\n *\n * @example\n * ```tsx\n * <CaptionsRadioGroup\n * renderItem={(props, item) => (\n * <Menu.RadioItem {...props}>\n * {item.label}\n * <Menu.ItemIndicator checked={item.checked} />\n * </Menu.RadioItem>\n * )}\n * />\n * ```\n */\nexport const CaptionsRadioGroup = forwardRef<HTMLDivElement, CaptionsRadioGroupProps>(\n function CaptionsRadioGroup(componentProps, forwardedRef) {\n const {\n renderItem,\n render,\n className,\n style,\n label,\n formatTrack,\n disabled,\n 'aria-label': ariaLabelProp,\n 'aria-labelledby': ariaLabelledBy,\n ...elementProps\n } = componentProps;\n const captions = useCaptionsOptions({ label, formatTrack, disabled });\n if (!captions) return null;\n\n const { state, value, options, setValue } = captions;\n const ariaLabel = ariaLabelProp ?? (ariaLabelledBy === undefined ? captions.label : undefined);\n\n return (\n <MenuRadioGroup\n {...getStateDataAttrs(state, CaptionsRadioGroupDataAttrs)}\n {...elementProps}\n ref={forwardedRef}\n className={isFunction(className) ? className(state) : className}\n style={isFunction(style) ? style(state) : style}\n render={isFunction(render) ? (props: HTMLProps) => render(props, state) : render}\n value={value}\n onValueChange={setValue}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-disabled={state.disabled || undefined}\n hidden={state.hidden}\n >\n {options.map((option) => {\n const itemState = { ...option, checked: option.value === value };\n\n return (\n <Fragment key={option.value}>\n {renderItem(\n {\n value: option.value,\n disabled: option.disabled,\n 'data-track': option.value,\n children: option.label,\n },\n itemState\n )}\n </Fragment>\n );\n })}\n </MenuRadioGroup>\n );\n }\n);\n\nexport namespace CaptionsRadioGroup {\n export type Props = CaptionsRadioGroupProps;\n export type State = CaptionsRadioGroupCore.State;\n export type ItemProps = CaptionsRadioGroupItemProps;\n export type ItemState = CaptionsRadioGroupItemState;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA6CA,MAAa,qBAAqB,WAChC,SAAS,mBAAmB,gBAAgB,cAAc;CACxD,MAAM,EACJ,YACA,QACA,WACA,OACA,OACA,aACA,UACA,cAAc,eACd,mBAAmB,gBACnB,GAAG,iBACD;CACJ,MAAM,WAAW,mBAAmB;EAAE;EAAO;EAAa;CAAS,CAAC;CACpE,IAAI,CAAC,UAAU,OAAO;CAEtB,MAAM,EAAE,OAAO,OAAO,SAAS,aAAa;CAC5C,MAAM,YAAY,kBAAkB,mBAAmB,KAAA,IAAY,SAAS,QAAQ,KAAA;CAEpF,OACE,oBAAC,gBAAD;EACE,GAAI,kBAAkB,OAAO,2BAA2B;EACxD,GAAI;EACJ,KAAK;EACL,WAAW,WAAW,SAAS,IAAI,UAAU,KAAK,IAAI;EACtD,OAAO,WAAW,KAAK,IAAI,MAAM,KAAK,IAAI;EAC1C,QAAQ,WAAW,MAAM,KAAK,UAAqB,OAAO,OAAO,KAAK,IAAI;EACnE;EACP,eAAe;EACf,cAAY;EACZ,mBAAiB;EACjB,iBAAe,MAAM,YAAY,KAAA;EACjC,QAAQ,MAAM;EAEb,UAAA,QAAQ,KAAK,WAAW;GACvB,MAAM,YAAY;IAAE,GAAG;IAAQ,SAAS,OAAO,UAAU;GAAM;GAE/D,OACE,oBAAC,UAAD,EAAA,UACG,WACC;IACE,OAAO,OAAO;IACd,UAAU,OAAO;IACjB,cAAc,OAAO;IACrB,UAAU,OAAO;GACnB,GACA,SACF,EACQ,GAVK,OAAO,KAUZ;EAEd,CAAC;CACa,CAAA;AAEpB,CACF"}
1
+ {"version":3,"file":"captions-radio-group.js","names":[],"sources":["../../../../src/ui/captions-radio-group/captions-radio-group.tsx"],"sourcesContent":["import { type CaptionsRadioGroupCore, CaptionsRadioGroupDataAttrs } from '@videojs/core';\nimport { getStateDataAttrs } from '@videojs/core/dom';\nimport { isFunction } from '@videojs/utils/predicate';\nimport type { ReactElement } from 'react';\nimport { Fragment, forwardRef } from 'react';\n\nimport type { HTMLProps, UIComponentProps } from '../../utils/types';\nimport { MenuRadioGroup } from '../menu/menu-radio-group';\nimport type { MenuRadioItemProps } from '../menu/menu-radio-item';\nimport { type CaptionsOption, type CaptionsOptionsProps, useCaptionsOptions } from './use-captions-options';\n\nexport type CaptionsRadioGroupItemState = CaptionsOption & {\n /** Whether this option is currently selected. */\n checked: boolean;\n};\n\nexport interface CaptionsRadioGroupItemProps extends Omit<MenuRadioItemProps, 'ref'> {\n /** Text track value represented by the item. */\n 'data-track': string;\n}\n\nexport interface CaptionsRadioGroupProps\n extends Omit<UIComponentProps<'div', CaptionsRadioGroupCore.State>, 'children'>,\n CaptionsOptionsProps {\n /** Render one consumer-owned menu radio item for every captions option. */\n renderItem: (props: CaptionsRadioGroupItemProps, state: CaptionsRadioGroupItemState) => ReactElement;\n}\n\n/**\n * Renders menu radio items for the player's captions and subtitles tracks.\n *\n * @example\n * ```tsx\n * <CaptionsRadioGroup\n * renderItem={(props, item) => (\n * <Menu.RadioItem {...props}>\n * {item.label}\n * <Menu.ItemIndicator checked={item.checked} />\n * </Menu.RadioItem>\n * )}\n * />\n * ```\n */\nexport const CaptionsRadioGroup = forwardRef<HTMLDivElement, CaptionsRadioGroupProps>(\n function CaptionsRadioGroup(componentProps, forwardedRef) {\n const {\n renderItem,\n render,\n className,\n style,\n label,\n formatTrack,\n disabled,\n 'aria-label': ariaLabelProp,\n 'aria-labelledby': ariaLabelledBy,\n ...elementProps\n } = componentProps;\n const captions = useCaptionsOptions({ label, formatTrack, disabled });\n if (!captions) return null;\n\n const { state, value, options, setValue } = captions;\n const ariaLabel = ariaLabelProp ?? (ariaLabelledBy === undefined ? captions.label : undefined);\n\n return (\n <MenuRadioGroup\n {...getStateDataAttrs(state, CaptionsRadioGroupDataAttrs)}\n {...elementProps}\n ref={forwardedRef}\n className={isFunction(className) ? className(state) : className}\n style={isFunction(style) ? style(state) : style}\n render={isFunction(render) ? (props: HTMLProps) => render(props, state) : render}\n value={value}\n onValueChange={setValue}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-disabled={state.disabled || undefined}\n hidden={state.hidden}\n >\n {options.map((option) => {\n const itemState = { ...option, checked: option.value === value };\n\n return (\n <Fragment key={option.value}>\n {renderItem(\n {\n value: option.value,\n disabled: option.disabled,\n 'data-track': option.value,\n children: option.label,\n },\n itemState\n )}\n </Fragment>\n );\n })}\n </MenuRadioGroup>\n );\n }\n);\n\nexport namespace CaptionsRadioGroup {\n export type Props = CaptionsRadioGroupProps;\n export type State = CaptionsRadioGroupCore.State;\n export type ItemProps = CaptionsRadioGroupItemProps;\n export type ItemState = CaptionsRadioGroupItemState;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAa,qBAAqB,WAChC,SAAS,mBAAmB,gBAAgB,cAAc;CACxD,MAAM,EACJ,YACA,QACA,WACA,OACA,OACA,aACA,UACA,cAAc,eACd,mBAAmB,gBACnB,GAAG,iBACD;CACJ,MAAM,WAAW,mBAAmB;EAAE;EAAO;EAAa;CAAS,CAAC;CACpE,IAAI,CAAC,UAAU,OAAO;CAEtB,MAAM,EAAE,OAAO,OAAO,SAAS,aAAa;CAC5C,MAAM,YAAY,kBAAkB,mBAAmB,KAAA,IAAY,SAAS,QAAQ,KAAA;CAEpF,OACE,oBAAC,gBAAD;EACE,GAAI,kBAAkB,OAAO,2BAA2B;EACxD,GAAI;EACJ,KAAK;EACL,WAAW,WAAW,SAAS,IAAI,UAAU,KAAK,IAAI;EACtD,OAAO,WAAW,KAAK,IAAI,MAAM,KAAK,IAAI;EAC1C,QAAQ,WAAW,MAAM,KAAK,UAAqB,OAAO,OAAO,KAAK,IAAI;EACnE;EACP,eAAe;EACf,cAAY;EACZ,mBAAiB;EACjB,iBAAe,MAAM,YAAY,KAAA;EACjC,QAAQ,MAAM;EAEb,UAAA,QAAQ,KAAK,WAAW;GACvB,MAAM,YAAY;IAAE,GAAG;IAAQ,SAAS,OAAO,UAAU;GAAM;GAE/D,OACE,oBAAC,UAAD,EAAA,UACG,WACC;IACE,OAAO,OAAO;IACd,UAAU,OAAO;IACjB,cAAc,OAAO;IACrB,UAAU,OAAO;GACnB,GACA,SACF,EACQ,GAVK,OAAO,KAUZ;EAEd,CAAC;CACa,CAAA;AAEpB,CACF"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { createRadioOptionsHook } from "../hooks/create-radio-options-hook.js";
3
2
  import { selectTextTrack } from "@videojs/core/dom";
4
3
  import { CaptionsRadioGroupCore } from "@videojs/core";
@@ -1 +1 @@
1
- {"version":3,"file":"use-captions-options.js","names":[],"sources":["../../../../src/ui/captions-radio-group/use-captions-options.ts"],"sourcesContent":["'use client';\n\nimport { CaptionsRadioGroupCore, type CaptionsRadioGroupOption } from '@videojs/core';\nimport { selectTextTrack } from '@videojs/core/dom';\n\nimport { createRadioOptionsHook, type TranslatedRadioOption } from '../hooks/create-radio-options-hook';\n\nexport interface CaptionsOptionsProps extends CaptionsRadioGroupCore.Props {}\n\nexport type CaptionsOption = TranslatedRadioOption<CaptionsRadioGroupOption>;\n\nexport interface CaptionsOptionsResult {\n state: CaptionsRadioGroupCore.State;\n label: string;\n value: string;\n selectedLabel: string;\n options: CaptionsOption[];\n disabled: boolean;\n hidden: boolean;\n showMenu: boolean;\n setValue: (value: string) => void;\n}\n\nconst useCaptionsRadioOptions = createRadioOptionsHook({\n name: 'useCaptionsOptions',\n feature: 'textTrack',\n selector: selectTextTrack,\n createCore: () => new CaptionsRadioGroupCore(),\n});\n\n/**\n * Create captions menu options (including an `Off` option) from the player\n * text track state. Returns `null` when the text tracks feature is not\n * configured.\n *\n * @param props - Optional `label`, `formatTrack`, and `disabled` overrides.\n */\nexport function useCaptionsOptions(props?: CaptionsOptionsProps): CaptionsOptionsResult | null {\n 'use no memo';\n\n const result = useCaptionsRadioOptions(props);\n if (!result) return null;\n\n return { ...result, showMenu: result.state.options.length > 2 };\n}\n\nexport namespace useCaptionsOptions {\n export type Props = CaptionsOptionsProps;\n export type Result = CaptionsOptionsResult;\n export type Option = CaptionsOption;\n}\n"],"mappings":";;;;;AAuBA,MAAM,0BAA0B,uBAAuB;CACrD,MAAM;CACN,SAAS;CACT,UAAU;CACV,kBAAkB,IAAI,uBAAuB;AAC/C,CAAC;;;;;;;;AASD,SAAgB,mBAAmB,OAA4D;CAC7F;CAEA,MAAM,SAAS,wBAAwB,KAAK;CAC5C,IAAI,CAAC,QAAQ,OAAO;CAEpB,OAAO;EAAE,GAAG;EAAQ,UAAU,OAAO,MAAM,QAAQ,SAAS;CAAE;AAChE"}
1
+ {"version":3,"file":"use-captions-options.js","names":[],"sources":["../../../../src/ui/captions-radio-group/use-captions-options.ts"],"sourcesContent":["import { CaptionsRadioGroupCore, type CaptionsRadioGroupOption } from '@videojs/core';\nimport { selectTextTrack } from '@videojs/core/dom';\n\nimport { createRadioOptionsHook, type TranslatedRadioOption } from '../hooks/create-radio-options-hook';\n\nexport interface CaptionsOptionsProps extends CaptionsRadioGroupCore.Props {}\n\nexport type CaptionsOption = TranslatedRadioOption<CaptionsRadioGroupOption>;\n\nexport interface CaptionsOptionsResult {\n state: CaptionsRadioGroupCore.State;\n label: string;\n value: string;\n selectedLabel: string;\n options: CaptionsOption[];\n disabled: boolean;\n hidden: boolean;\n showMenu: boolean;\n setValue: (value: string) => void;\n}\n\nconst useCaptionsRadioOptions = createRadioOptionsHook({\n name: 'useCaptionsOptions',\n feature: 'textTrack',\n selector: selectTextTrack,\n createCore: () => new CaptionsRadioGroupCore(),\n});\n\n/**\n * Create captions menu options (including an `Off` option) from the player\n * text track state. Returns `null` when the text tracks feature is not\n * configured.\n *\n * @param props - Optional `label`, `formatTrack`, and `disabled` overrides.\n */\nexport function useCaptionsOptions(props?: CaptionsOptionsProps): CaptionsOptionsResult | null {\n 'use no memo';\n\n const result = useCaptionsRadioOptions(props);\n if (!result) return null;\n\n return { ...result, showMenu: result.state.options.length > 2 };\n}\n\nexport namespace useCaptionsOptions {\n export type Props = CaptionsOptionsProps;\n export type Result = CaptionsOptionsResult;\n export type Option = CaptionsOption;\n}\n"],"mappings":";;;;AAqBA,MAAM,0BAA0B,uBAAuB;CACrD,MAAM;CACN,SAAS;CACT,UAAU;CACV,kBAAkB,IAAI,uBAAuB;AAC/C,CAAC;;;;;;;;AASD,SAAgB,mBAAmB,OAA4D;CAC7F;CAEA,MAAM,SAAS,wBAAwB,KAAK;CAC5C,IAAI,CAAC,QAAQ,OAAO;CAEpB,OAAO;EAAE,GAAG;EAAQ,UAAU,OAAO,MAAM,QAAQ,SAAS;CAAE;AAChE"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { createMediaButton } from "../create-media-button.js";
3
2
  import { selectRemotePlayback } from "@videojs/core/dom";
4
3
  import { CastButtonCore, CastButtonDataAttrs } from "@videojs/core";
@@ -1 +1 @@
1
- {"version":3,"file":"cast-button.js","names":[],"sources":["../../../../src/ui/cast-button/cast-button.tsx"],"sourcesContent":["'use client';\n\nimport { CastButtonCore, CastButtonDataAttrs } from '@videojs/core';\nimport { selectRemotePlayback } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface CastButtonProps extends UIComponentProps<'button', CastButtonCore.State>, CastButtonCore.Props {}\n\n/** A button that toggles casting to a remote device. */\nexport const CastButton = createMediaButton<CastButtonCore, CastButtonProps>({\n displayName: 'CastButton',\n core: CastButtonCore,\n stateAttrMap: CastButtonDataAttrs,\n selector: selectRemotePlayback,\n action: (core, state) => core.toggle(state),\n isSupported: (state) => !state.hidden,\n});\n\nexport namespace CastButton {\n export type Props = CastButtonProps;\n export type State = CastButtonCore.State;\n}\n"],"mappings":";;;;;;AAWA,MAAa,aAAa,kBAAmD;CAC3E,aAAa;CACb,MAAM;CACN,cAAc;CACd,UAAU;CACV,SAAS,MAAM,UAAU,KAAK,OAAO,KAAK;CAC1C,cAAc,UAAU,CAAC,MAAM;AACjC,CAAC"}
1
+ {"version":3,"file":"cast-button.js","names":[],"sources":["../../../../src/ui/cast-button/cast-button.tsx"],"sourcesContent":["import { CastButtonCore, CastButtonDataAttrs } from '@videojs/core';\nimport { selectRemotePlayback } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface CastButtonProps extends UIComponentProps<'button', CastButtonCore.State>, CastButtonCore.Props {}\n\n/** A button that toggles casting to a remote device. */\nexport const CastButton = createMediaButton<CastButtonCore, CastButtonProps>({\n displayName: 'CastButton',\n core: CastButtonCore,\n stateAttrMap: CastButtonDataAttrs,\n selector: selectRemotePlayback,\n action: (core, state) => core.toggle(state),\n isSupported: (state) => !state.hidden,\n});\n\nexport namespace CastButton {\n export type Props = CastButtonProps;\n export type State = CastButtonCore.State;\n}\n"],"mappings":";;;;;AASA,MAAa,aAAa,kBAAmD;CAC3E,aAAa;CACb,MAAM;CACN,cAAc;CACd,UAAU;CACV,SAAS,MAAM,UAAU,KAAK,OAAO,KAAK;CAC1C,cAAc,UAAU,CAAC,MAAM;AACjC,CAAC"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { createContext, useContext } from "react";
3
2
  //#region src/ui/controls/context.tsx
4
3
  const ControlsContext = createContext(null);
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../../src/ui/controls/context.tsx"],"sourcesContent":["'use client';\n\nimport type { ControlsState, StateAttrMap } from '@videojs/core';\nimport { createContext, useContext } from 'react';\n\nexport interface ControlsContextValue {\n state: ControlsState;\n stateAttrMap: StateAttrMap<ControlsState>;\n}\n\nconst ControlsContext = createContext<ControlsContextValue | null>(null);\n\nexport const ControlsContextProvider = ControlsContext.Provider;\n\nexport function useControlsContext(): ControlsContextValue {\n const ctx = useContext(ControlsContext);\n if (!ctx) throw new Error('Controls compound components must be used within a Controls.Root');\n return ctx;\n}\n\nexport function useOptionalControlsContext(): ControlsContextValue | null {\n return useContext(ControlsContext);\n}\n"],"mappings":";;;AAUA,MAAM,kBAAkB,cAA2C,IAAI;AAEvE,MAAa,0BAA0B,gBAAgB;AAEvD,SAAgB,qBAA2C;CACzD,MAAM,MAAM,WAAW,eAAe;CACtC,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,kEAAkE;CAC5F,OAAO;AACT;AAEA,SAAgB,6BAA0D;CACxE,OAAO,WAAW,eAAe;AACnC"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../../src/ui/controls/context.tsx"],"sourcesContent":["import type { ControlsState, StateAttrMap } from '@videojs/core';\nimport { createContext, useContext } from 'react';\n\nexport interface ControlsContextValue {\n state: ControlsState;\n stateAttrMap: StateAttrMap<ControlsState>;\n}\n\nconst ControlsContext = createContext<ControlsContextValue | null>(null);\n\nexport const ControlsContextProvider = ControlsContext.Provider;\n\nexport function useControlsContext(): ControlsContextValue {\n const ctx = useContext(ControlsContext);\n if (!ctx) throw new Error('Controls compound components must be used within a Controls.Root');\n return ctx;\n}\n\nexport function useOptionalControlsContext(): ControlsContextValue | null {\n return useContext(ControlsContext);\n}\n"],"mappings":";;AAQA,MAAM,kBAAkB,cAA2C,IAAI;AAEvE,MAAa,0BAA0B,gBAAgB;AAEvD,SAAgB,qBAA2C;CACzD,MAAM,MAAM,WAAW,eAAe;CACtC,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,kEAAkE;CAC5F,OAAO;AACT;AAEA,SAAgB,6BAA0D;CACxE,OAAO,WAAW,eAAe;AACnC"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { renderElement } from "../../utils/use-render.js";
3
2
  import { useControlsContext } from "./context.js";
4
3
  import { forwardRef } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"controls-group.js","names":[],"sources":["../../../../src/ui/controls/controls-group.tsx"],"sourcesContent":["'use client';\n\nimport type { ControlsCore } from '@videojs/core';\nimport type { ForwardedRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useControlsContext } from './context';\n\nexport interface ControlsGroupProps extends UIComponentProps<'div', ControlsCore.State> {\n children?: ReactNode | undefined;\n}\n\n/** Layout group for related controls; sets `role=\"group\"` when labeled. */\nexport const ControlsGroup = forwardRef(function ControlsGroup(\n componentProps: ControlsGroupProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { render, className, style, children, ...elementProps } = componentProps;\n\n const { state, stateAttrMap } = useControlsContext();\n const role = elementProps['aria-label'] || elementProps['aria-labelledby'] ? 'group' : undefined;\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: [forwardedRef],\n props: [{ role, children }, elementProps],\n }\n );\n});\n\nexport namespace ControlsGroup {\n export type Props = ControlsGroupProps;\n}\n"],"mappings":";;;;;;AAeA,MAAa,gBAAgB,WAAW,SAAS,cAC/C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,iBAAiB;CAEhE,MAAM,EAAE,OAAO,iBAAiB,mBAAmB;CACnD,MAAM,OAAO,aAAa,iBAAiB,aAAa,qBAAqB,UAAU,KAAA;CAEvF,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA;EACA,KAAK,CAAC,YAAY;EAClB,OAAO,CAAC;GAAE;GAAM;EAAS,GAAG,YAAY;CAC1C,CACF;AACF,CAAC"}
1
+ {"version":3,"file":"controls-group.js","names":[],"sources":["../../../../src/ui/controls/controls-group.tsx"],"sourcesContent":["import type { ControlsCore } from '@videojs/core';\nimport type { ForwardedRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useControlsContext } from './context';\n\nexport interface ControlsGroupProps extends UIComponentProps<'div', ControlsCore.State> {\n children?: ReactNode | undefined;\n}\n\n/** Layout group for related controls; sets `role=\"group\"` when labeled. */\nexport const ControlsGroup = forwardRef(function ControlsGroup(\n componentProps: ControlsGroupProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { render, className, style, children, ...elementProps } = componentProps;\n\n const { state, stateAttrMap } = useControlsContext();\n const role = elementProps['aria-label'] || elementProps['aria-labelledby'] ? 'group' : undefined;\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: [forwardedRef],\n props: [{ role, children }, elementProps],\n }\n );\n});\n\nexport namespace ControlsGroup {\n export type Props = ControlsGroupProps;\n}\n"],"mappings":";;;;;AAaA,MAAa,gBAAgB,WAAW,SAAS,cAC/C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,iBAAiB;CAEhE,MAAM,EAAE,OAAO,iBAAiB,mBAAmB;CACnD,MAAM,OAAO,aAAa,iBAAiB,aAAa,qBAAqB,UAAU,KAAA;CAEvF,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA;EACA,KAAK,CAAC,YAAY;EAClB,OAAO,CAAC;GAAE;GAAM;EAAS,GAAG,YAAY;CAC1C,CACF;AACF,CAAC"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { usePlayer } from "../../player/context.js";
3
2
  import { renderElement } from "../../utils/use-render.js";
4
3
  import { ControlsContextProvider } from "./context.js";
@@ -1 +1 @@
1
- {"version":3,"file":"controls-root.js","names":[],"sources":["../../../../src/ui/controls/controls-root.tsx"],"sourcesContent":["'use client';\n\nimport { ControlsCore, ControlsDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectControls } from '@videojs/core/dom';\nimport type { ForwardedRef, ReactNode } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { ControlsContextProvider } from './context';\n\nexport interface ControlsRootProps extends UIComponentProps<'div', ControlsCore.State> {\n children?: ReactNode | undefined;\n}\n\n/** Root container for player controls state and rendered control content. */\nexport const ControlsRoot = forwardRef(function ControlsRoot(\n componentProps: ControlsRootProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { render, className, style, children, ...elementProps } = componentProps;\n\n const controls = usePlayer(selectControls);\n\n const [core] = useState(() => new ControlsCore());\n\n if (!controls) {\n if (__DEV__) logMissingFeature('Controls.Root', 'controls');\n return null;\n }\n\n core.setMedia(controls);\n const state = core.getState();\n\n return (\n <ControlsContextProvider value={{ state, stateAttrMap: ControlsDataAttrs }}>\n {renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap: ControlsDataAttrs,\n ref: [forwardedRef],\n props: [{ children }, elementProps, { 'data-interactive': '' }],\n }\n )}\n </ControlsContextProvider>\n );\n});\n\nexport namespace ControlsRoot {\n export type Props = ControlsRootProps;\n export type State = ControlsCore.State;\n}\n"],"mappings":";;;;;;;;;;AAiBA,MAAa,eAAe,WAAW,SAAS,aAC9C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,iBAAiB;CAEhE,MAAM,WAAW,UAAU,cAAc;CAEzC,MAAM,CAAC,QAAQ,eAAe,IAAI,aAAa,CAAC;CAEhD,IAAI,CAAC,UAEH,OAAO;CAGT,KAAK,SAAS,QAAQ;CACtB,MAAM,QAAQ,KAAK,SAAS;CAE5B,OACE,oBAAC,yBAAD;EAAyB,OAAO;GAAE;GAAO,cAAc;EAAkB;EACtE,UAAA,cACC,OACA;GAAE;GAAQ;GAAW;EAAM,GAC3B;GACE;GACA,cAAc;GACd,KAAK,CAAC,YAAY;GAClB,OAAO;IAAC,EAAE,SAAS;IAAG;IAAc,EAAE,oBAAoB,GAAG;GAAC;EAChE,CACF;CACuB,CAAA;AAE7B,CAAC"}
1
+ {"version":3,"file":"controls-root.js","names":[],"sources":["../../../../src/ui/controls/controls-root.tsx"],"sourcesContent":["import { ControlsCore, ControlsDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectControls } from '@videojs/core/dom';\nimport type { ForwardedRef, ReactNode } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { ControlsContextProvider } from './context';\n\nexport interface ControlsRootProps extends UIComponentProps<'div', ControlsCore.State> {\n children?: ReactNode | undefined;\n}\n\n/** Root container for player controls state and rendered control content. */\nexport const ControlsRoot = forwardRef(function ControlsRoot(\n componentProps: ControlsRootProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { render, className, style, children, ...elementProps } = componentProps;\n\n const controls = usePlayer(selectControls);\n\n const [core] = useState(() => new ControlsCore());\n\n if (!controls) {\n if (__DEV__) logMissingFeature('Controls.Root', 'controls');\n return null;\n }\n\n core.setMedia(controls);\n const state = core.getState();\n\n return (\n <ControlsContextProvider value={{ state, stateAttrMap: ControlsDataAttrs }}>\n {renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap: ControlsDataAttrs,\n ref: [forwardedRef],\n props: [{ children }, elementProps, { 'data-interactive': '' }],\n }\n )}\n </ControlsContextProvider>\n );\n});\n\nexport namespace ControlsRoot {\n export type Props = ControlsRootProps;\n export type State = ControlsCore.State;\n}\n"],"mappings":";;;;;;;;;AAeA,MAAa,eAAe,WAAW,SAAS,aAC9C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,iBAAiB;CAEhE,MAAM,WAAW,UAAU,cAAc;CAEzC,MAAM,CAAC,QAAQ,eAAe,IAAI,aAAa,CAAC;CAEhD,IAAI,CAAC,UAEH,OAAO;CAGT,KAAK,SAAS,QAAQ;CACtB,MAAM,QAAQ,KAAK,SAAS;CAE5B,OACE,oBAAC,yBAAD;EAAyB,OAAO;GAAE;GAAO,cAAc;EAAkB;EACtE,UAAA,cACC,OACA;GAAE;GAAQ;GAAW;EAAM,GAC3B;GACE;GACA,cAAc;GACd,KAAK,CAAC,YAAY;GAClB,OAAO;IAAC,EAAE,SAAS;IAAG;IAAc,EAAE,oBAAoB,GAAG;GAAC;EAChE,CACF;CACuB,CAAA;AAE7B,CAAC"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { renderElement } from "../utils/use-render.js";
3
2
  import { forwardRef } from "react";
4
3
  //#region src/ui/create-context-part.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"create-context-part.js","names":[],"sources":["../../../src/ui/create-context-part.tsx"],"sourcesContent":["'use client';\n\nimport type { StateAttrMap } from '@videojs/core';\nimport type { ForwardRefExoticComponent } from 'react';\nimport { forwardRef } from 'react';\nimport type { UIComponentProps } from '@/utils/types';\nimport type { renderElement as renderElementFn } from '../utils/use-render';\nimport { renderElement } from '../utils/use-render';\n\ninterface ContextPartConfig<Props extends object, State extends object> {\n displayName: string;\n tag: keyof React.JSX.IntrinsicElements;\n useContext: () => { state: State; stateAttrMap: StateAttrMap<State> };\n staticProps?: Partial<Props>;\n /** Derive props from state on each render (e.g. `id` from a state field). */\n getProps?: (state: State) => Record<string, unknown>;\n}\n\nexport function createContextPart<Props extends UIComponentProps<any, any>, State extends object>(\n config: ContextPartConfig<Props, State>\n): ForwardRefExoticComponent<Props> {\n const { displayName, tag, useContext, staticProps, getProps } = config;\n\n const Component = forwardRef<HTMLElement, Props>(function ContextPart(componentProps, forwardedRef) {\n const { render, className, style, ...elementProps } = componentProps;\n const context = useContext();\n const dynamicProps = getProps?.(context.state);\n\n return renderElement(tag, { render, className, style } as renderElementFn.ComponentProps<State>, {\n state: context.state,\n stateAttrMap: context.stateAttrMap,\n ref: forwardedRef,\n props: [staticProps, dynamicProps, elementProps].filter(Boolean),\n });\n });\n\n Component.displayName = displayName;\n\n return Component as ForwardRefExoticComponent<Props>;\n}\n"],"mappings":";;;;AAkBA,SAAgB,kBACd,QACkC;CAClC,MAAM,EAAE,aAAa,KAAK,YAAY,aAAa,aAAa;CAEhE,MAAM,YAAY,WAA+B,SAAS,YAAY,gBAAgB,cAAc;EAClG,MAAM,EAAE,QAAQ,WAAW,OAAO,GAAG,iBAAiB;EACtD,MAAM,UAAU,WAAW;EAC3B,MAAM,eAAe,WAAW,QAAQ,KAAK;EAE7C,OAAO,cAAc,KAAK;GAAE;GAAQ;GAAW;EAAM,GAA4C;GAC/F,OAAO,QAAQ;GACf,cAAc,QAAQ;GACtB,KAAK;GACL,OAAO;IAAC;IAAa;IAAc;GAAY,CAAC,CAAC,OAAO,OAAO;EACjE,CAAC;CACH,CAAC;CAED,UAAU,cAAc;CAExB,OAAO;AACT"}
1
+ {"version":3,"file":"create-context-part.js","names":[],"sources":["../../../src/ui/create-context-part.tsx"],"sourcesContent":["import type { StateAttrMap } from '@videojs/core';\nimport type { ForwardRefExoticComponent } from 'react';\nimport { forwardRef } from 'react';\nimport type { UIComponentProps } from '@/utils/types';\nimport type { renderElement as renderElementFn } from '../utils/use-render';\nimport { renderElement } from '../utils/use-render';\n\ninterface ContextPartConfig<Props extends object, State extends object> {\n displayName: string;\n tag: keyof React.JSX.IntrinsicElements;\n useContext: () => { state: State; stateAttrMap: StateAttrMap<State> };\n staticProps?: Partial<Props>;\n /** Derive props from state on each render (e.g. `id` from a state field). */\n getProps?: (state: State) => Record<string, unknown>;\n}\n\nexport function createContextPart<Props extends UIComponentProps<any, any>, State extends object>(\n config: ContextPartConfig<Props, State>\n): ForwardRefExoticComponent<Props> {\n const { displayName, tag, useContext, staticProps, getProps } = config;\n\n const Component = forwardRef<HTMLElement, Props>(function ContextPart(componentProps, forwardedRef) {\n const { render, className, style, ...elementProps } = componentProps;\n const context = useContext();\n const dynamicProps = getProps?.(context.state);\n\n return renderElement(tag, { render, className, style } as renderElementFn.ComponentProps<State>, {\n state: context.state,\n stateAttrMap: context.stateAttrMap,\n ref: forwardedRef,\n props: [staticProps, dynamicProps, elementProps].filter(Boolean),\n });\n });\n\n Component.displayName = displayName;\n\n return Component as ForwardRefExoticComponent<Props>;\n}\n"],"mappings":";;;AAgBA,SAAgB,kBACd,QACkC;CAClC,MAAM,EAAE,aAAa,KAAK,YAAY,aAAa,aAAa;CAEhE,MAAM,YAAY,WAA+B,SAAS,YAAY,gBAAgB,cAAc;EAClG,MAAM,EAAE,QAAQ,WAAW,OAAO,GAAG,iBAAiB;EACtD,MAAM,UAAU,WAAW;EAC3B,MAAM,eAAe,WAAW,QAAQ,KAAK;EAE7C,OAAO,cAAc,KAAK;GAAE;GAAQ;GAAW;EAAM,GAA4C;GAC/F,OAAO,QAAQ;GACf,cAAc,QAAQ;GACtB,KAAK;GACL,OAAO;IAAC;IAAa;IAAc;GAAY,CAAC,CAAC,OAAO,OAAO;EACjE,CAAC;CACH,CAAC;CAED,UAAU,cAAc;CAExB,OAAO;AACT"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useTranslator } from "../i18n/context.js";
3
2
  import { usePlayer } from "../player/context.js";
4
3
  import { renderElement } from "../utils/use-render.js";
@@ -1 +1 @@
1
- {"version":3,"file":"create-media-button.js","names":[],"sources":["../../../src/ui/create-media-button.tsx"],"sourcesContent":["'use client';\n\nimport type { InferComponentState, InferMediaState, MediaButtonComponent, StateAttrMap } from '@videojs/core';\nimport { logMissingFeature } from '@videojs/core/dom';\nimport { isText, translateText } from '@videojs/core/i18n';\nimport type { Selector } from '@videojs/store';\nimport { isUndefined } from '@videojs/utils/predicate';\nimport type { ForwardedRef, ForwardRefExoticComponent, RefAttributes } from 'react';\nimport { forwardRef, useLayoutEffect, useState } from 'react';\n\nimport { useTranslator } from '../i18n/context';\nimport { usePlayer } from '../player/context';\nimport type { renderElement as renderElementFn } from '../utils/use-render';\nimport { renderElement } from '../utils/use-render';\nimport { useButton } from './hooks/use-button';\nimport { useHotkeyShortcut } from './hotkey/use-hotkey-shortcut';\nimport { useOptionalMenuTriggerChildContext } from './menu/context';\nimport { useOptionalTooltipContext } from './tooltip/context';\n\ninterface MediaButtonConfig<Core extends Required<MediaButtonComponent>> {\n displayName: string;\n core: { new (): Core; defaultProps: Record<string, unknown> };\n stateAttrMap: StateAttrMap<InferComponentState<Core>>;\n selector: Selector<object, InferMediaState<Core> | undefined>;\n action: (core: Core, state: InferMediaState<Core>) => void | Promise<void>;\n hotkeyAction?: string;\n hotkeyValue?: (props: Record<string, unknown>) => number | undefined;\n tooltipLabel?: (core: Core, state: InferComponentState<Core>) => string | undefined;\n /** Returns `false` to render `null` (e.g., when the underlying feature is unsupported). */\n isSupported?: (state: InferComponentState<Core>) => boolean;\n}\n\ntype LabelParams = Record<string, string | number>;\ntype LabelParamsCore<State> = {\n getLabelParams?: (state: State) => LabelParams | undefined;\n};\n\nfunction getLabelParams<Core extends MediaButtonComponent>(\n core: Core,\n state: InferComponentState<Core>\n): LabelParams | undefined {\n return (core as LabelParamsCore<InferComponentState<Core>>).getLabelParams?.(state);\n}\n\n/** Creates a media button React component from a core class and config. */\nexport function createMediaButton<Core extends Required<MediaButtonComponent>, Props extends object>(\n config: MediaButtonConfig<Core>\n): ForwardRefExoticComponent<Props & RefAttributes<HTMLButtonElement>> {\n const {\n displayName,\n core: CoreClass,\n stateAttrMap,\n selector,\n action,\n hotkeyAction,\n hotkeyValue,\n tooltipLabel,\n isSupported,\n } = config;\n\n // Props that exist in the core's defaultProps are routed to setProps; the rest go to the DOM element.\n const corePropKeys = new Set(Object.keys(CoreClass.defaultProps));\n\n const Component = forwardRef(function MediaButton(\n componentProps: Record<string, unknown>,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n ) {\n const { render, className, style, ...rest } = componentProps;\n\n const coreProps: Record<string, unknown> = {};\n const elementProps: Record<string, unknown> = {};\n\n for (const key of Object.keys(rest)) {\n if (corePropKeys.has(key)) {\n coreProps[key] = rest[key];\n } else {\n elementProps[key] = rest[key];\n }\n }\n\n const tooltipCtx = useOptionalTooltipContext();\n const menuTriggerChild = useOptionalMenuTriggerChildContext();\n const setTooltipContent = tooltipCtx?.setContent;\n const feature = usePlayer(selector);\n const shortcut = useHotkeyShortcut(hotkeyAction, hotkeyValue?.(coreProps));\n const translator = useTranslator();\n\n const [core] = useState(() => new CoreClass());\n\n if (corePropKeys.has('menuTrigger') && isUndefined(coreProps.menuTrigger)) {\n coreProps.menuTrigger = menuTriggerChild;\n }\n\n core.setProps(coreProps);\n\n const { getButtonProps, buttonRef } = useButton({\n displayName,\n // `useButton` invokes `onActivate` synchronously from click/keyup\n // handlers, so any rejection here would be unhandled. Log in dev for\n // visibility but absorb the failure at this UI boundary.\n onActivate: () => {\n Promise.resolve(action(core, feature!)).catch((error) => {\n if (__DEV__) console.error(`[${displayName}]`, error);\n });\n },\n isDisabled: () => !!coreProps.disabled || !feature,\n });\n\n // Derive state and label before the hooks boundary so the\n // useLayoutEffect below (called unconditionally) can reference them.\n type State = InferComponentState<Core>;\n if (feature) core.setMedia(feature);\n const state = feature ? (core.getState() as State) : null;\n const supported = state ? (isSupported?.(state) ?? true) : false;\n const label =\n state && supported ? translateText(core.getLabel(state), translator, getLabelParams(core, state)) : undefined;\n const tooltipText = state && supported ? (tooltipLabel?.(core, state) ?? label) : undefined;\n\n // Forward label to tooltip popup content when inside a Tooltip.Root.\n useLayoutEffect(() => {\n if (!setTooltipContent) return;\n setTooltipContent(tooltipText ? { label: tooltipText, shortcut: shortcut.shortcut } : undefined);\n return () => setTooltipContent(undefined);\n }, [setTooltipContent, tooltipText, shortcut.shortcut]);\n\n if (!feature || !state) {\n if (__DEV__) logMissingFeature(displayName, selector.displayName ?? displayName);\n return null;\n }\n\n if (!supported) return null;\n\n const attrs = core.getAttrs(state) as Record<string, unknown>;\n const ariaLabel = attrs['aria-label'];\n const resolvedAttrs = {\n ...attrs,\n ...(isText(ariaLabel)\n ? { 'aria-label': translateText(ariaLabel, translator, getLabelParams(core, state)) }\n : undefined),\n 'aria-keyshortcuts': shortcut.aria,\n };\n\n return renderElement(\n 'button',\n { render, className, style } as renderElementFn.ComponentProps<InferComponentState<Core>>,\n {\n state,\n stateAttrMap,\n ref: [forwardedRef, buttonRef],\n props: [getButtonProps(), resolvedAttrs, elementProps],\n }\n );\n });\n\n Component.displayName = displayName;\n\n return Component as unknown as ForwardRefExoticComponent<Props & RefAttributes<HTMLButtonElement>>;\n}\n"],"mappings":";;;;;;;;;;;;;AAqCA,SAAS,eACP,MACA,OACyB;CACzB,OAAQ,KAAoD,iBAAiB,KAAK;AACpF;;AAGA,SAAgB,kBACd,QACqE;CACrE,MAAM,EACJ,aACA,MAAM,WACN,cACA,UACA,QACA,cACA,aACA,cACA,gBACE;CAGJ,MAAM,eAAe,IAAI,IAAI,OAAO,KAAK,UAAU,YAAY,CAAC;CAEhE,MAAM,YAAY,WAAW,SAAS,YACpC,gBACA,cACA;EACA,MAAM,EAAE,QAAQ,WAAW,OAAO,GAAG,SAAS;EAE9C,MAAM,YAAqC,CAAC;EAC5C,MAAM,eAAwC,CAAC;EAE/C,KAAK,MAAM,OAAO,OAAO,KAAK,IAAI,GAChC,IAAI,aAAa,IAAI,GAAG,GACtB,UAAU,OAAO,KAAK;OAEtB,aAAa,OAAO,KAAK;EAI7B,MAAM,aAAa,0BAA0B;EAC7C,MAAM,mBAAmB,mCAAmC;EAC5D,MAAM,oBAAoB,YAAY;EACtC,MAAM,UAAU,UAAU,QAAQ;EAClC,MAAM,WAAW,kBAAkB,cAAc,cAAc,SAAS,CAAC;EACzE,MAAM,aAAa,cAAc;EAEjC,MAAM,CAAC,QAAQ,eAAe,IAAI,UAAU,CAAC;EAE7C,IAAI,aAAa,IAAI,aAAa,KAAK,YAAY,UAAU,WAAW,GACtE,UAAU,cAAc;EAG1B,KAAK,SAAS,SAAS;EAEvB,MAAM,EAAE,gBAAgB,cAAc,UAAU;GAC9C;GAIA,kBAAkB;IAChB,QAAQ,QAAQ,OAAO,MAAM,OAAQ,CAAC,CAAC,CAAC,OAAO,UAAU,CAEzD,CAAC;GACH;GACA,kBAAkB,CAAC,CAAC,UAAU,YAAY,CAAC;EAC7C,CAAC;EAKD,IAAI,SAAS,KAAK,SAAS,OAAO;EAClC,MAAM,QAAQ,UAAW,KAAK,SAAS,IAAc;EACrD,MAAM,YAAY,QAAS,cAAc,KAAK,KAAK,OAAQ;EAC3D,MAAM,QACJ,SAAS,YAAY,cAAc,KAAK,SAAS,KAAK,GAAG,YAAY,eAAe,MAAM,KAAK,CAAC,IAAI,KAAA;EACtG,MAAM,cAAc,SAAS,YAAa,eAAe,MAAM,KAAK,KAAK,QAAS,KAAA;EAGlF,sBAAsB;GACpB,IAAI,CAAC,mBAAmB;GACxB,kBAAkB,cAAc;IAAE,OAAO;IAAa,UAAU,SAAS;GAAS,IAAI,KAAA,CAAS;GAC/F,aAAa,kBAAkB,KAAA,CAAS;EAC1C,GAAG;GAAC;GAAmB;GAAa,SAAS;EAAQ,CAAC;EAEtD,IAAI,CAAC,WAAW,CAAC,OAEf,OAAO;EAGT,IAAI,CAAC,WAAW,OAAO;EAEvB,MAAM,QAAQ,KAAK,SAAS,KAAK;EACjC,MAAM,YAAY,MAAM;EACxB,MAAM,gBAAgB;GACpB,GAAG;GACH,GAAI,OAAO,SAAS,IAChB,EAAE,cAAc,cAAc,WAAW,YAAY,eAAe,MAAM,KAAK,CAAC,EAAE,IAClF,KAAA;GACJ,qBAAqB,SAAS;EAChC;EAEA,OAAO,cACL,UACA;GAAE;GAAQ;GAAW;EAAM,GAC3B;GACE;GACA;GACA,KAAK,CAAC,cAAc,SAAS;GAC7B,OAAO;IAAC,eAAe;IAAG;IAAe;GAAY;EACvD,CACF;CACF,CAAC;CAED,UAAU,cAAc;CAExB,OAAO;AACT"}
1
+ {"version":3,"file":"create-media-button.js","names":[],"sources":["../../../src/ui/create-media-button.tsx"],"sourcesContent":["import type { InferComponentState, InferMediaState, MediaButtonComponent, StateAttrMap } from '@videojs/core';\nimport { logMissingFeature } from '@videojs/core/dom';\nimport { isText, translateText } from '@videojs/core/i18n';\nimport type { Selector } from '@videojs/store';\nimport { isUndefined } from '@videojs/utils/predicate';\nimport type { ForwardedRef, ForwardRefExoticComponent, RefAttributes } from 'react';\nimport { forwardRef, useLayoutEffect, useState } from 'react';\n\nimport { useTranslator } from '../i18n/context';\nimport { usePlayer } from '../player/context';\nimport type { renderElement as renderElementFn } from '../utils/use-render';\nimport { renderElement } from '../utils/use-render';\nimport { useButton } from './hooks/use-button';\nimport { useHotkeyShortcut } from './hotkey/use-hotkey-shortcut';\nimport { useOptionalMenuTriggerChildContext } from './menu/context';\nimport { useOptionalTooltipContext } from './tooltip/context';\n\ninterface MediaButtonConfig<Core extends Required<MediaButtonComponent>> {\n displayName: string;\n core: { new (): Core; defaultProps: Record<string, unknown> };\n stateAttrMap: StateAttrMap<InferComponentState<Core>>;\n selector: Selector<object, InferMediaState<Core> | undefined>;\n action: (core: Core, state: InferMediaState<Core>) => void | Promise<void>;\n hotkeyAction?: string;\n hotkeyValue?: (props: Record<string, unknown>) => number | undefined;\n tooltipLabel?: (core: Core, state: InferComponentState<Core>) => string | undefined;\n /** Returns `false` to render `null` (e.g., when the underlying feature is unsupported). */\n isSupported?: (state: InferComponentState<Core>) => boolean;\n}\n\ntype LabelParams = Record<string, string | number>;\ntype LabelParamsCore<State> = {\n getLabelParams?: (state: State) => LabelParams | undefined;\n};\n\nfunction getLabelParams<Core extends MediaButtonComponent>(\n core: Core,\n state: InferComponentState<Core>\n): LabelParams | undefined {\n return (core as LabelParamsCore<InferComponentState<Core>>).getLabelParams?.(state);\n}\n\n/** Creates a media button React component from a core class and config. */\nexport function createMediaButton<Core extends Required<MediaButtonComponent>, Props extends object>(\n config: MediaButtonConfig<Core>\n): ForwardRefExoticComponent<Props & RefAttributes<HTMLButtonElement>> {\n const {\n displayName,\n core: CoreClass,\n stateAttrMap,\n selector,\n action,\n hotkeyAction,\n hotkeyValue,\n tooltipLabel,\n isSupported,\n } = config;\n\n // Props that exist in the core's defaultProps are routed to setProps; the rest go to the DOM element.\n const corePropKeys = new Set(Object.keys(CoreClass.defaultProps));\n\n const Component = forwardRef(function MediaButton(\n componentProps: Record<string, unknown>,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n ) {\n const { render, className, style, ...rest } = componentProps;\n\n const coreProps: Record<string, unknown> = {};\n const elementProps: Record<string, unknown> = {};\n\n for (const key of Object.keys(rest)) {\n if (corePropKeys.has(key)) {\n coreProps[key] = rest[key];\n } else {\n elementProps[key] = rest[key];\n }\n }\n\n const tooltipCtx = useOptionalTooltipContext();\n const menuTriggerChild = useOptionalMenuTriggerChildContext();\n const setTooltipContent = tooltipCtx?.setContent;\n const feature = usePlayer(selector);\n const shortcut = useHotkeyShortcut(hotkeyAction, hotkeyValue?.(coreProps));\n const translator = useTranslator();\n\n const [core] = useState(() => new CoreClass());\n\n if (corePropKeys.has('menuTrigger') && isUndefined(coreProps.menuTrigger)) {\n coreProps.menuTrigger = menuTriggerChild;\n }\n\n core.setProps(coreProps);\n\n const { getButtonProps, buttonRef } = useButton({\n displayName,\n // `useButton` invokes `onActivate` synchronously from click/keyup\n // handlers, so any rejection here would be unhandled. Log in dev for\n // visibility but absorb the failure at this UI boundary.\n onActivate: () => {\n Promise.resolve(action(core, feature!)).catch((error) => {\n if (__DEV__) console.error(`[${displayName}]`, error);\n });\n },\n isDisabled: () => !!coreProps.disabled || !feature,\n });\n\n // Derive state and label before the hooks boundary so the\n // useLayoutEffect below (called unconditionally) can reference them.\n type State = InferComponentState<Core>;\n if (feature) core.setMedia(feature);\n const state = feature ? (core.getState() as State) : null;\n const supported = state ? (isSupported?.(state) ?? true) : false;\n const label =\n state && supported ? translateText(core.getLabel(state), translator, getLabelParams(core, state)) : undefined;\n const tooltipText = state && supported ? (tooltipLabel?.(core, state) ?? label) : undefined;\n\n // Forward label to tooltip popup content when inside a Tooltip.Root.\n useLayoutEffect(() => {\n if (!setTooltipContent) return;\n setTooltipContent(tooltipText ? { label: tooltipText, shortcut: shortcut.shortcut } : undefined);\n return () => setTooltipContent(undefined);\n }, [setTooltipContent, tooltipText, shortcut.shortcut]);\n\n if (!feature || !state) {\n if (__DEV__) logMissingFeature(displayName, selector.displayName ?? displayName);\n return null;\n }\n\n if (!supported) return null;\n\n const attrs = core.getAttrs(state) as Record<string, unknown>;\n const ariaLabel = attrs['aria-label'];\n const resolvedAttrs = {\n ...attrs,\n ...(isText(ariaLabel)\n ? { 'aria-label': translateText(ariaLabel, translator, getLabelParams(core, state)) }\n : undefined),\n 'aria-keyshortcuts': shortcut.aria,\n };\n\n return renderElement(\n 'button',\n { render, className, style } as renderElementFn.ComponentProps<InferComponentState<Core>>,\n {\n state,\n stateAttrMap,\n ref: [forwardedRef, buttonRef],\n props: [getButtonProps(), resolvedAttrs, elementProps],\n }\n );\n });\n\n Component.displayName = displayName;\n\n return Component as unknown as ForwardRefExoticComponent<Props & RefAttributes<HTMLButtonElement>>;\n}\n"],"mappings":";;;;;;;;;;;;AAmCA,SAAS,eACP,MACA,OACyB;CACzB,OAAQ,KAAoD,iBAAiB,KAAK;AACpF;;AAGA,SAAgB,kBACd,QACqE;CACrE,MAAM,EACJ,aACA,MAAM,WACN,cACA,UACA,QACA,cACA,aACA,cACA,gBACE;CAGJ,MAAM,eAAe,IAAI,IAAI,OAAO,KAAK,UAAU,YAAY,CAAC;CAEhE,MAAM,YAAY,WAAW,SAAS,YACpC,gBACA,cACA;EACA,MAAM,EAAE,QAAQ,WAAW,OAAO,GAAG,SAAS;EAE9C,MAAM,YAAqC,CAAC;EAC5C,MAAM,eAAwC,CAAC;EAE/C,KAAK,MAAM,OAAO,OAAO,KAAK,IAAI,GAChC,IAAI,aAAa,IAAI,GAAG,GACtB,UAAU,OAAO,KAAK;OAEtB,aAAa,OAAO,KAAK;EAI7B,MAAM,aAAa,0BAA0B;EAC7C,MAAM,mBAAmB,mCAAmC;EAC5D,MAAM,oBAAoB,YAAY;EACtC,MAAM,UAAU,UAAU,QAAQ;EAClC,MAAM,WAAW,kBAAkB,cAAc,cAAc,SAAS,CAAC;EACzE,MAAM,aAAa,cAAc;EAEjC,MAAM,CAAC,QAAQ,eAAe,IAAI,UAAU,CAAC;EAE7C,IAAI,aAAa,IAAI,aAAa,KAAK,YAAY,UAAU,WAAW,GACtE,UAAU,cAAc;EAG1B,KAAK,SAAS,SAAS;EAEvB,MAAM,EAAE,gBAAgB,cAAc,UAAU;GAC9C;GAIA,kBAAkB;IAChB,QAAQ,QAAQ,OAAO,MAAM,OAAQ,CAAC,CAAC,CAAC,OAAO,UAAU,CAEzD,CAAC;GACH;GACA,kBAAkB,CAAC,CAAC,UAAU,YAAY,CAAC;EAC7C,CAAC;EAKD,IAAI,SAAS,KAAK,SAAS,OAAO;EAClC,MAAM,QAAQ,UAAW,KAAK,SAAS,IAAc;EACrD,MAAM,YAAY,QAAS,cAAc,KAAK,KAAK,OAAQ;EAC3D,MAAM,QACJ,SAAS,YAAY,cAAc,KAAK,SAAS,KAAK,GAAG,YAAY,eAAe,MAAM,KAAK,CAAC,IAAI,KAAA;EACtG,MAAM,cAAc,SAAS,YAAa,eAAe,MAAM,KAAK,KAAK,QAAS,KAAA;EAGlF,sBAAsB;GACpB,IAAI,CAAC,mBAAmB;GACxB,kBAAkB,cAAc;IAAE,OAAO;IAAa,UAAU,SAAS;GAAS,IAAI,KAAA,CAAS;GAC/F,aAAa,kBAAkB,KAAA,CAAS;EAC1C,GAAG;GAAC;GAAmB;GAAa,SAAS;EAAQ,CAAC;EAEtD,IAAI,CAAC,WAAW,CAAC,OAEf,OAAO;EAGT,IAAI,CAAC,WAAW,OAAO;EAEvB,MAAM,QAAQ,KAAK,SAAS,KAAK;EACjC,MAAM,YAAY,MAAM;EACxB,MAAM,gBAAgB;GACpB,GAAG;GACH,GAAI,OAAO,SAAS,IAChB,EAAE,cAAc,cAAc,WAAW,YAAY,eAAe,MAAM,KAAK,CAAC,EAAE,IAClF,KAAA;GACJ,qBAAqB,SAAS;EAChC;EAEA,OAAO,cACL,UACA;GAAE;GAAQ;GAAW;EAAM,GAC3B;GACE;GACA;GACA,KAAK,CAAC,cAAc,SAAS;GAC7B,OAAO;IAAC,eAAe;IAAG;IAAe;GAAY;EACvD,CACF;CACF,CAAC;CAED,UAAU,cAAc;CAExB,OAAO;AACT"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { createContext, useContext } from "react";
3
2
  //#region src/ui/error-dialog/context.tsx
4
3
  const ErrorDialogContext = createContext(null);
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../../src/ui/error-dialog/context.tsx"],"sourcesContent":["'use client';\n\nimport type { ErrorLike } from '@videojs/media';\nimport { createContext, useContext } from 'react';\n\nexport interface ErrorDialogContextValue {\n lastError: ErrorLike | null;\n}\n\nconst ErrorDialogContext = createContext<ErrorDialogContextValue | null>(null);\n\nexport const ErrorDialogContextProvider = ErrorDialogContext.Provider;\n\nexport function useErrorDialogContext(): ErrorDialogContextValue {\n const ctx = useContext(ErrorDialogContext);\n if (!ctx) throw new Error('ErrorDialog compound components must be used within an ErrorDialog.Root');\n return ctx;\n}\n"],"mappings":";;;AASA,MAAM,qBAAqB,cAA8C,IAAI;AAE7E,MAAa,6BAA6B,mBAAmB;AAE7D,SAAgB,wBAAiD;CAC/D,MAAM,MAAM,WAAW,kBAAkB;CACzC,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,yEAAyE;CACnG,OAAO;AACT"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../../src/ui/error-dialog/context.tsx"],"sourcesContent":["import type { ErrorLike } from '@videojs/media';\nimport { createContext, useContext } from 'react';\n\nexport interface ErrorDialogContextValue {\n lastError: ErrorLike | null;\n}\n\nconst ErrorDialogContext = createContext<ErrorDialogContextValue | null>(null);\n\nexport const ErrorDialogContextProvider = ErrorDialogContext.Provider;\n\nexport function useErrorDialogContext(): ErrorDialogContextValue {\n const ctx = useContext(ErrorDialogContext);\n if (!ctx) throw new Error('ErrorDialog compound components must be used within an ErrorDialog.Root');\n return ctx;\n}\n"],"mappings":";;AAOA,MAAM,qBAAqB,cAA8C,IAAI;AAE7E,MAAa,6BAA6B,mBAAmB;AAE7D,SAAgB,wBAAiD;CAC/D,MAAM,MAAM,WAAW,kBAAkB;CACzC,IAAI,CAAC,KAAK,MAAM,IAAI,MAAM,yEAAyE;CACnG,OAAO;AACT"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useTranslator } from "../../i18n/context.js";
3
2
  import { renderElement } from "../../utils/use-render.js";
4
3
  import { useAlertDialogContext } from "../alert-dialog/context.js";
@@ -1 +1 @@
1
- {"version":3,"file":"error-dialog-close.js","names":[],"sources":["../../../../src/ui/error-dialog/error-dialog-close.tsx"],"sourcesContent":["'use client';\n\nimport type { AlertDialogCore } from '@videojs/core';\nimport { getErrorDialogDismissText } from '@videojs/core';\nimport { translateText } from '@videojs/core/i18n';\nimport { forwardRef, type ReactNode, useCallback } from 'react';\nimport { useTranslator } from '../../i18n/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useAlertDialogContext } from '../alert-dialog/context';\n\nexport interface ErrorDialogCloseProps extends UIComponentProps<'button', AlertDialogCore.State> {}\n\nexport const ErrorDialogClose = forwardRef<HTMLButtonElement, ErrorDialogCloseProps>(function ErrorDialogClose(\n { render, className, style, disabled, children, ...elementProps },\n forwardedRef\n) {\n const t = useTranslator();\n const { dialog, state, stateAttrMap } = useAlertDialogContext();\n\n const handleClick = useCallback(() => {\n if (disabled) return;\n dialog.close();\n }, [dialog, disabled]);\n\n const content: ReactNode = children ?? translateText(getErrorDialogDismissText(), t);\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: forwardedRef,\n props: [{ type: 'button' as const, disabled, onClick: handleClick, children: content }, elementProps],\n }\n );\n});\n\nexport namespace ErrorDialogClose {\n export type Props = ErrorDialogCloseProps;\n export type State = AlertDialogCore.State;\n}\n"],"mappings":";;;;;;;;AAaA,MAAa,mBAAmB,WAAqD,SAAS,iBAC5F,EAAE,QAAQ,WAAW,OAAO,UAAU,UAAU,GAAG,gBACnD,cACA;CACA,MAAM,IAAI,cAAc;CACxB,MAAM,EAAE,QAAQ,OAAO,iBAAiB,sBAAsB;CAE9D,MAAM,cAAc,kBAAkB;EACpC,IAAI,UAAU;EACd,OAAO,MAAM;CACf,GAAG,CAAC,QAAQ,QAAQ,CAAC;CAErB,MAAM,UAAqB,YAAY,cAAc,0BAA0B,GAAG,CAAC;CAEnF,OAAO,cACL,UACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA;EACA,KAAK;EACL,OAAO,CAAC;GAAE,MAAM;GAAmB;GAAU,SAAS;GAAa,UAAU;EAAQ,GAAG,YAAY;CACtG,CACF;AACF,CAAC"}
1
+ {"version":3,"file":"error-dialog-close.js","names":[],"sources":["../../../../src/ui/error-dialog/error-dialog-close.tsx"],"sourcesContent":["import type { AlertDialogCore } from '@videojs/core';\nimport { getErrorDialogDismissText } from '@videojs/core';\nimport { translateText } from '@videojs/core/i18n';\nimport { forwardRef, type ReactNode, useCallback } from 'react';\nimport { useTranslator } from '../../i18n/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useAlertDialogContext } from '../alert-dialog/context';\n\nexport interface ErrorDialogCloseProps extends UIComponentProps<'button', AlertDialogCore.State> {}\n\nexport const ErrorDialogClose = forwardRef<HTMLButtonElement, ErrorDialogCloseProps>(function ErrorDialogClose(\n { render, className, style, disabled, children, ...elementProps },\n forwardedRef\n) {\n const t = useTranslator();\n const { dialog, state, stateAttrMap } = useAlertDialogContext();\n\n const handleClick = useCallback(() => {\n if (disabled) return;\n dialog.close();\n }, [dialog, disabled]);\n\n const content: ReactNode = children ?? translateText(getErrorDialogDismissText(), t);\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: forwardedRef,\n props: [{ type: 'button' as const, disabled, onClick: handleClick, children: content }, elementProps],\n }\n );\n});\n\nexport namespace ErrorDialogClose {\n export type Props = ErrorDialogCloseProps;\n export type State = AlertDialogCore.State;\n}\n"],"mappings":";;;;;;;AAWA,MAAa,mBAAmB,WAAqD,SAAS,iBAC5F,EAAE,QAAQ,WAAW,OAAO,UAAU,UAAU,GAAG,gBACnD,cACA;CACA,MAAM,IAAI,cAAc;CACxB,MAAM,EAAE,QAAQ,OAAO,iBAAiB,sBAAsB;CAE9D,MAAM,cAAc,kBAAkB;EACpC,IAAI,UAAU;EACd,OAAO,MAAM;CACf,GAAG,CAAC,QAAQ,QAAQ,CAAC;CAErB,MAAM,UAAqB,YAAY,cAAc,0BAA0B,GAAG,CAAC;CAEnF,OAAO,cACL,UACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA;EACA,KAAK;EACL,OAAO,CAAC;GAAE,MAAM;GAAmB;GAAU,SAAS;GAAa,UAAU;EAAQ,GAAG,YAAY;CACtG,CACF;AACF,CAAC"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useTranslator } from "../../i18n/context.js";
3
2
  import { renderElement } from "../../utils/use-render.js";
4
3
  import { useAlertDialogContext } from "../alert-dialog/context.js";
@@ -1 +1 @@
1
- {"version":3,"file":"error-dialog-description.js","names":[],"sources":["../../../../src/ui/error-dialog/error-dialog-description.tsx"],"sourcesContent":["'use client';\n\nimport type { AlertDialogCore } from '@videojs/core';\nimport { resolveErrorDialogDescription } from '@videojs/core';\nimport { translateText } from '@videojs/core/i18n';\nimport { forwardRef, type ReactNode } from 'react';\nimport { useTranslator } from '../../i18n/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useAlertDialogContext } from '../alert-dialog/context';\nimport { useErrorDialogContext } from './context';\n\nexport interface ErrorDialogDescriptionProps extends UIComponentProps<'p', AlertDialogCore.State> {}\n\nexport const ErrorDialogDescription = forwardRef<HTMLParagraphElement, ErrorDialogDescriptionProps>(\n function ErrorDialogDescription({ render, className, style, children, ...elementProps }, forwardedRef) {\n const t = useTranslator();\n const { state, stateAttrMap } = useAlertDialogContext();\n const { lastError } = useErrorDialogContext();\n const description = resolveErrorDialogDescription(lastError);\n const content: ReactNode = children ?? translateText(description, t);\n\n return renderElement(\n 'p',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: forwardedRef,\n props: [{ id: state.descriptionId, children: content }, elementProps],\n }\n );\n }\n);\n\nexport namespace ErrorDialogDescription {\n export type Props = ErrorDialogDescriptionProps;\n export type State = AlertDialogCore.State;\n}\n"],"mappings":";;;;;;;;;AAcA,MAAa,yBAAyB,WACpC,SAAS,uBAAuB,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,gBAAgB,cAAc;CACrG,MAAM,IAAI,cAAc;CACxB,MAAM,EAAE,OAAO,iBAAiB,sBAAsB;CACtD,MAAM,EAAE,cAAc,sBAAsB;CAC5C,MAAM,cAAc,8BAA8B,SAAS;CAC3D,MAAM,UAAqB,YAAY,cAAc,aAAa,CAAC;CAEnE,OAAO,cACL,KACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA;EACA,KAAK;EACL,OAAO,CAAC;GAAE,IAAI,MAAM;GAAe,UAAU;EAAQ,GAAG,YAAY;CACtE,CACF;AACF,CACF"}
1
+ {"version":3,"file":"error-dialog-description.js","names":[],"sources":["../../../../src/ui/error-dialog/error-dialog-description.tsx"],"sourcesContent":["import type { AlertDialogCore } from '@videojs/core';\nimport { resolveErrorDialogDescription } from '@videojs/core';\nimport { translateText } from '@videojs/core/i18n';\nimport { forwardRef, type ReactNode } from 'react';\nimport { useTranslator } from '../../i18n/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useAlertDialogContext } from '../alert-dialog/context';\nimport { useErrorDialogContext } from './context';\n\nexport interface ErrorDialogDescriptionProps extends UIComponentProps<'p', AlertDialogCore.State> {}\n\nexport const ErrorDialogDescription = forwardRef<HTMLParagraphElement, ErrorDialogDescriptionProps>(\n function ErrorDialogDescription({ render, className, style, children, ...elementProps }, forwardedRef) {\n const t = useTranslator();\n const { state, stateAttrMap } = useAlertDialogContext();\n const { lastError } = useErrorDialogContext();\n const description = resolveErrorDialogDescription(lastError);\n const content: ReactNode = children ?? translateText(description, t);\n\n return renderElement(\n 'p',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: forwardedRef,\n props: [{ id: state.descriptionId, children: content }, elementProps],\n }\n );\n }\n);\n\nexport namespace ErrorDialogDescription {\n export type Props = ErrorDialogDescriptionProps;\n export type State = AlertDialogCore.State;\n}\n"],"mappings":";;;;;;;;AAYA,MAAa,yBAAyB,WACpC,SAAS,uBAAuB,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,gBAAgB,cAAc;CACrG,MAAM,IAAI,cAAc;CACxB,MAAM,EAAE,OAAO,iBAAiB,sBAAsB;CACtD,MAAM,EAAE,cAAc,sBAAsB;CAC5C,MAAM,cAAc,8BAA8B,SAAS;CAC3D,MAAM,UAAqB,YAAY,cAAc,aAAa,CAAC;CAEnE,OAAO,cACL,KACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA;EACA,KAAK;EACL,OAAO,CAAC;GAAE,IAAI,MAAM;GAAe,UAAU;EAAQ,GAAG,YAAY;CACtE,CACF;AACF,CACF"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { usePlayer } from "../../player/context.js";
3
2
  import { useLatestRef } from "../../utils/use-latest-ref.js";
4
3
  import { useDestroy } from "../../utils/use-destroy.js";
@@ -1 +1 @@
1
- {"version":3,"file":"error-dialog-root.js","names":[],"sources":["../../../../src/ui/error-dialog/error-dialog-root.tsx"],"sourcesContent":["'use client';\n\nimport { AlertDialogDataAttrs, ErrorDialogCore } from '@videojs/core';\nimport { createAlertDialog, createTransition, selectError } from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport { useDestroy } from '../../utils/use-destroy';\nimport { useLatestRef } from '../../utils/use-latest-ref';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { AlertDialogContextProvider } from '../alert-dialog/context';\nimport { ErrorDialogContextProvider } from './context';\n\nexport interface ErrorDialogRootProps {\n children?: ReactNode;\n}\n\nexport function ErrorDialogRoot({ children }: ErrorDialogRootProps): ReactNode {\n const [core] = useState(() => new ErrorDialogCore());\n const errorState = usePlayer(selectError);\n const lastError = useRef(errorState?.error ?? null);\n\n if (errorState?.error) lastError.current = errorState.error;\n\n const errorStateRef = useLatestRef(errorState);\n\n const [dialog] = useState(() =>\n createAlertDialog({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen) {\n errorStateRef.current?.dismissError();\n }\n },\n })\n );\n\n const titleId = useSafeId('error-dialog-title');\n const descriptionId = useSafeId('error-dialog-desc');\n\n core.setTitleId(titleId);\n core.setDescriptionId(descriptionId);\n\n useEffect(() => {\n const hasError = Boolean(errorState?.error);\n const { active: isOpen } = dialog.input.current;\n\n if (hasError && !isOpen) {\n dialog.open();\n } else if (!hasError && isOpen) {\n dialog.close();\n }\n }, [errorState?.error, dialog]);\n\n useDestroy(dialog);\n\n const input = useSnapshot(dialog.input);\n core.setInput(input);\n const state = core.getState();\n\n if (!errorState) return null;\n\n return (\n <ErrorDialogContextProvider value={{ lastError: lastError.current }}>\n <AlertDialogContextProvider value={{ core, dialog, state, stateAttrMap: AlertDialogDataAttrs }}>\n {children}\n </AlertDialogContextProvider>\n </ErrorDialogContextProvider>\n );\n}\n\nexport namespace ErrorDialogRoot {\n export type Props = ErrorDialogRootProps;\n}\n"],"mappings":";;;;;;;;;;;;;AAmBA,SAAgB,gBAAgB,EAAE,YAA6C;CAC7E,MAAM,CAAC,QAAQ,eAAe,IAAI,gBAAgB,CAAC;CACnD,MAAM,aAAa,UAAU,WAAW;CACxC,MAAM,YAAY,OAAO,YAAY,SAAS,IAAI;CAElD,IAAI,YAAY,OAAO,UAAU,UAAU,WAAW;CAEtD,MAAM,gBAAgB,aAAa,UAAU;CAE7C,MAAM,CAAC,UAAU,eACf,kBAAkB;EAChB,YAAY,iBAAiB;EAC7B,eAAe,aAAsB;GACnC,IAAI,CAAC,UACH,cAAc,SAAS,aAAa;EAExC;CACF,CAAC,CACH;CAEA,MAAM,UAAU,UAAU,oBAAoB;CAC9C,MAAM,gBAAgB,UAAU,mBAAmB;CAEnD,KAAK,WAAW,OAAO;CACvB,KAAK,iBAAiB,aAAa;CAEnC,gBAAgB;EACd,MAAM,WAAW,QAAQ,YAAY,KAAK;EAC1C,MAAM,EAAE,QAAQ,WAAW,OAAO,MAAM;EAExC,IAAI,YAAY,CAAC,QACf,OAAO,KAAK;OACP,IAAI,CAAC,YAAY,QACtB,OAAO,MAAM;CAEjB,GAAG,CAAC,YAAY,OAAO,MAAM,CAAC;CAE9B,WAAW,MAAM;CAEjB,MAAM,QAAQ,YAAY,OAAO,KAAK;CACtC,KAAK,SAAS,KAAK;CACnB,MAAM,QAAQ,KAAK,SAAS;CAE5B,IAAI,CAAC,YAAY,OAAO;CAExB,OACE,oBAAC,4BAAD;EAA4B,OAAO,EAAE,WAAW,UAAU,QAAQ;EAChE,UAAA,oBAAC,4BAAD;GAA4B,OAAO;IAAE;IAAM;IAAQ;IAAO,cAAc;GAAqB;GAC1F;EACyB,CAAA;CACF,CAAA;AAEhC"}
1
+ {"version":3,"file":"error-dialog-root.js","names":[],"sources":["../../../../src/ui/error-dialog/error-dialog-root.tsx"],"sourcesContent":["import { AlertDialogDataAttrs, ErrorDialogCore } from '@videojs/core';\nimport { createAlertDialog, createTransition, selectError } from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport { useDestroy } from '../../utils/use-destroy';\nimport { useLatestRef } from '../../utils/use-latest-ref';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { AlertDialogContextProvider } from '../alert-dialog/context';\nimport { ErrorDialogContextProvider } from './context';\n\nexport interface ErrorDialogRootProps {\n children?: ReactNode;\n}\n\nexport function ErrorDialogRoot({ children }: ErrorDialogRootProps): ReactNode {\n const [core] = useState(() => new ErrorDialogCore());\n const errorState = usePlayer(selectError);\n const lastError = useRef(errorState?.error ?? null);\n\n if (errorState?.error) lastError.current = errorState.error;\n\n const errorStateRef = useLatestRef(errorState);\n\n const [dialog] = useState(() =>\n createAlertDialog({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen) {\n errorStateRef.current?.dismissError();\n }\n },\n })\n );\n\n const titleId = useSafeId('error-dialog-title');\n const descriptionId = useSafeId('error-dialog-desc');\n\n core.setTitleId(titleId);\n core.setDescriptionId(descriptionId);\n\n useEffect(() => {\n const hasError = Boolean(errorState?.error);\n const { active: isOpen } = dialog.input.current;\n\n if (hasError && !isOpen) {\n dialog.open();\n } else if (!hasError && isOpen) {\n dialog.close();\n }\n }, [errorState?.error, dialog]);\n\n useDestroy(dialog);\n\n const input = useSnapshot(dialog.input);\n core.setInput(input);\n const state = core.getState();\n\n if (!errorState) return null;\n\n return (\n <ErrorDialogContextProvider value={{ lastError: lastError.current }}>\n <AlertDialogContextProvider value={{ core, dialog, state, stateAttrMap: AlertDialogDataAttrs }}>\n {children}\n </AlertDialogContextProvider>\n </ErrorDialogContextProvider>\n );\n}\n\nexport namespace ErrorDialogRoot {\n export type Props = ErrorDialogRootProps;\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,SAAgB,gBAAgB,EAAE,YAA6C;CAC7E,MAAM,CAAC,QAAQ,eAAe,IAAI,gBAAgB,CAAC;CACnD,MAAM,aAAa,UAAU,WAAW;CACxC,MAAM,YAAY,OAAO,YAAY,SAAS,IAAI;CAElD,IAAI,YAAY,OAAO,UAAU,UAAU,WAAW;CAEtD,MAAM,gBAAgB,aAAa,UAAU;CAE7C,MAAM,CAAC,UAAU,eACf,kBAAkB;EAChB,YAAY,iBAAiB;EAC7B,eAAe,aAAsB;GACnC,IAAI,CAAC,UACH,cAAc,SAAS,aAAa;EAExC;CACF,CAAC,CACH;CAEA,MAAM,UAAU,UAAU,oBAAoB;CAC9C,MAAM,gBAAgB,UAAU,mBAAmB;CAEnD,KAAK,WAAW,OAAO;CACvB,KAAK,iBAAiB,aAAa;CAEnC,gBAAgB;EACd,MAAM,WAAW,QAAQ,YAAY,KAAK;EAC1C,MAAM,EAAE,QAAQ,WAAW,OAAO,MAAM;EAExC,IAAI,YAAY,CAAC,QACf,OAAO,KAAK;OACP,IAAI,CAAC,YAAY,QACtB,OAAO,MAAM;CAEjB,GAAG,CAAC,YAAY,OAAO,MAAM,CAAC;CAE9B,WAAW,MAAM;CAEjB,MAAM,QAAQ,YAAY,OAAO,KAAK;CACtC,KAAK,SAAS,KAAK;CACnB,MAAM,QAAQ,KAAK,SAAS;CAE5B,IAAI,CAAC,YAAY,OAAO;CAExB,OACE,oBAAC,4BAAD;EAA4B,OAAO,EAAE,WAAW,UAAU,QAAQ;EAChE,UAAA,oBAAC,4BAAD;GAA4B,OAAO;IAAE;IAAM;IAAQ;IAAO,cAAc;GAAqB;GAC1F;EACyB,CAAA;CACF,CAAA;AAEhC"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useTranslator } from "../../i18n/context.js";
3
2
  import { renderElement } from "../../utils/use-render.js";
4
3
  import { useAlertDialogContext } from "../alert-dialog/context.js";
@@ -1 +1 @@
1
- {"version":3,"file":"error-dialog-title.js","names":[],"sources":["../../../../src/ui/error-dialog/error-dialog-title.tsx"],"sourcesContent":["'use client';\n\nimport type { AlertDialogCore } from '@videojs/core';\nimport { getErrorDialogTitleText } from '@videojs/core';\nimport { translateText } from '@videojs/core/i18n';\nimport { forwardRef, type ReactNode } from 'react';\nimport { useTranslator } from '../../i18n/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useAlertDialogContext } from '../alert-dialog/context';\n\nexport interface ErrorDialogTitleProps extends UIComponentProps<'h2', AlertDialogCore.State> {}\n\nexport const ErrorDialogTitle = forwardRef<HTMLHeadingElement, ErrorDialogTitleProps>(function ErrorDialogTitle(\n { render, className, style, children, ...elementProps },\n forwardedRef\n) {\n const t = useTranslator();\n const { state, stateAttrMap } = useAlertDialogContext();\n const content: ReactNode = children ?? translateText(getErrorDialogTitleText(), t);\n\n return renderElement(\n 'h2',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: forwardedRef,\n props: [{ id: state.titleId, children: content }, elementProps],\n }\n );\n});\n\nexport namespace ErrorDialogTitle {\n export type Props = ErrorDialogTitleProps;\n export type State = AlertDialogCore.State;\n}\n"],"mappings":";;;;;;;;AAaA,MAAa,mBAAmB,WAAsD,SAAS,iBAC7F,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,gBACzC,cACA;CACA,MAAM,IAAI,cAAc;CACxB,MAAM,EAAE,OAAO,iBAAiB,sBAAsB;CACtD,MAAM,UAAqB,YAAY,cAAc,wBAAwB,GAAG,CAAC;CAEjF,OAAO,cACL,MACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA;EACA,KAAK;EACL,OAAO,CAAC;GAAE,IAAI,MAAM;GAAS,UAAU;EAAQ,GAAG,YAAY;CAChE,CACF;AACF,CAAC"}
1
+ {"version":3,"file":"error-dialog-title.js","names":[],"sources":["../../../../src/ui/error-dialog/error-dialog-title.tsx"],"sourcesContent":["import type { AlertDialogCore } from '@videojs/core';\nimport { getErrorDialogTitleText } from '@videojs/core';\nimport { translateText } from '@videojs/core/i18n';\nimport { forwardRef, type ReactNode } from 'react';\nimport { useTranslator } from '../../i18n/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useAlertDialogContext } from '../alert-dialog/context';\n\nexport interface ErrorDialogTitleProps extends UIComponentProps<'h2', AlertDialogCore.State> {}\n\nexport const ErrorDialogTitle = forwardRef<HTMLHeadingElement, ErrorDialogTitleProps>(function ErrorDialogTitle(\n { render, className, style, children, ...elementProps },\n forwardedRef\n) {\n const t = useTranslator();\n const { state, stateAttrMap } = useAlertDialogContext();\n const content: ReactNode = children ?? translateText(getErrorDialogTitleText(), t);\n\n return renderElement(\n 'h2',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: forwardedRef,\n props: [{ id: state.titleId, children: content }, elementProps],\n }\n );\n});\n\nexport namespace ErrorDialogTitle {\n export type Props = ErrorDialogTitleProps;\n export type State = AlertDialogCore.State;\n}\n"],"mappings":";;;;;;;AAWA,MAAa,mBAAmB,WAAsD,SAAS,iBAC7F,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,gBACzC,cACA;CACA,MAAM,IAAI,cAAc;CACxB,MAAM,EAAE,OAAO,iBAAiB,sBAAsB;CACtD,MAAM,UAAqB,YAAY,cAAc,wBAAwB,GAAG,CAAC;CAEjF,OAAO,cACL,MACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA;EACA,KAAK;EACL,OAAO,CAAC;GAAE,IAAI,MAAM;GAAS,UAAU;EAAQ,GAAG,YAAY;CAChE,CACF;AACF,CAAC"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { createMediaButton } from "../create-media-button.js";
3
2
  import { selectFullscreen } from "@videojs/core/dom";
4
3
  import { FullscreenButtonCore, FullscreenButtonDataAttrs } from "@videojs/core";
@@ -1 +1 @@
1
- {"version":3,"file":"fullscreen-button.js","names":[],"sources":["../../../../src/ui/fullscreen-button/fullscreen-button.tsx"],"sourcesContent":["'use client';\n\nimport { FullscreenButtonCore, FullscreenButtonDataAttrs } from '@videojs/core';\nimport { selectFullscreen } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface FullscreenButtonProps\n extends UIComponentProps<'button', FullscreenButtonCore.State>,\n FullscreenButtonCore.Props {}\n\n/** A button that toggles fullscreen. */\nexport const FullscreenButton = createMediaButton<FullscreenButtonCore, FullscreenButtonProps>({\n displayName: 'FullscreenButton',\n core: FullscreenButtonCore,\n stateAttrMap: FullscreenButtonDataAttrs,\n selector: selectFullscreen,\n action: (core, state) => core.toggle(state),\n hotkeyAction: 'toggleFullscreen',\n isSupported: (state) => !state.hidden,\n});\n\nexport namespace FullscreenButton {\n export type Props = FullscreenButtonProps;\n export type State = FullscreenButtonCore.State;\n}\n"],"mappings":";;;;;;AAaA,MAAa,mBAAmB,kBAA+D;CAC7F,aAAa;CACb,MAAM;CACN,cAAc;CACd,UAAU;CACV,SAAS,MAAM,UAAU,KAAK,OAAO,KAAK;CAC1C,cAAc;CACd,cAAc,UAAU,CAAC,MAAM;AACjC,CAAC"}
1
+ {"version":3,"file":"fullscreen-button.js","names":[],"sources":["../../../../src/ui/fullscreen-button/fullscreen-button.tsx"],"sourcesContent":["import { FullscreenButtonCore, FullscreenButtonDataAttrs } from '@videojs/core';\nimport { selectFullscreen } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface FullscreenButtonProps\n extends UIComponentProps<'button', FullscreenButtonCore.State>,\n FullscreenButtonCore.Props {}\n\n/** A button that toggles fullscreen. */\nexport const FullscreenButton = createMediaButton<FullscreenButtonCore, FullscreenButtonProps>({\n displayName: 'FullscreenButton',\n core: FullscreenButtonCore,\n stateAttrMap: FullscreenButtonDataAttrs,\n selector: selectFullscreen,\n action: (core, state) => core.toggle(state),\n hotkeyAction: 'toggleFullscreen',\n isSupported: (state) => !state.hidden,\n});\n\nexport namespace FullscreenButton {\n export type Props = FullscreenButtonProps;\n export type State = FullscreenButtonCore.State;\n}\n"],"mappings":";;;;;AAWA,MAAa,mBAAmB,kBAA+D;CAC7F,aAAa;CACb,MAAM;CACN,cAAc;CACd,UAAU;CACV,SAAS,MAAM,UAAU,KAAK,OAAO,KAAK;CAC1C,cAAc;CACd,cAAc,UAAU,CAAC,MAAM;AACjC,CAAC"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useContainer, usePlayer } from "../../player/context.js";
3
2
  import { createDoubleTapGesture, createTapGesture, resolveGestureAction } from "@videojs/core/dom";
4
3
  import { useEffect } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"gesture.js","names":[],"sources":["../../../../src/ui/gesture/gesture.tsx"],"sourcesContent":["'use client';\n\nimport type { AnyPlayerStore } from '@videojs/core/dom';\nimport {\n createDoubleTapGesture,\n createTapGesture,\n type GestureActionName,\n type GesturePointerType,\n type GestureRegion,\n resolveGestureAction,\n} from '@videojs/core/dom';\nimport type { ReactNode } from 'react';\nimport { useEffect } from 'react';\n\nimport { useContainer, usePlayer } from '../../player/context';\n\nexport interface GestureProps {\n type: 'tap' | 'doubletap' | (string & {});\n action: GestureActionName | (string & {});\n value?: number;\n pointer?: GesturePointerType;\n region?: GestureRegion;\n disabled?: boolean;\n}\n\nexport function Gesture({ type, action, value, pointer, region, disabled }: GestureProps): ReactNode {\n const store = usePlayer() as AnyPlayerStore;\n const container = useContainer();\n\n useEffect(() => {\n if (!container || !type || !action || disabled) return;\n\n const resolver = resolveGestureAction(action);\n if (!resolver) return;\n\n const onActivate = (event: PointerEvent) => {\n resolver({ store, value, event });\n };\n\n const options = { pointer, region, action, value };\n\n if (type === 'doubletap') {\n return createDoubleTapGesture(container, onActivate, options);\n }\n\n return createTapGesture(container, onActivate, options);\n }, [container, store, type, action, value, pointer, region, disabled]);\n\n return null;\n}\n\nexport namespace Gesture {\n export type Props = GestureProps;\n}\n\n/** @deprecated Use `GestureProps` instead. */\nexport type MediaGestureProps = GestureProps;\n\n/** @deprecated Use `Gesture` instead. */\nexport const MediaGesture = Gesture;\n"],"mappings":";;;;;AAyBA,SAAgB,QAAQ,EAAE,MAAM,QAAQ,OAAO,SAAS,QAAQ,YAAqC;CACnG,MAAM,QAAQ,UAAU;CACxB,MAAM,YAAY,aAAa;CAE/B,gBAAgB;EACd,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,UAAU;EAEhD,MAAM,WAAW,qBAAqB,MAAM;EAC5C,IAAI,CAAC,UAAU;EAEf,MAAM,cAAc,UAAwB;GAC1C,SAAS;IAAE;IAAO;IAAO;GAAM,CAAC;EAClC;EAEA,MAAM,UAAU;GAAE;GAAS;GAAQ;GAAQ;EAAM;EAEjD,IAAI,SAAS,aACX,OAAO,uBAAuB,WAAW,YAAY,OAAO;EAG9D,OAAO,iBAAiB,WAAW,YAAY,OAAO;CACxD,GAAG;EAAC;EAAW;EAAO;EAAM;EAAQ;EAAO;EAAS;EAAQ;CAAQ,CAAC;CAErE,OAAO;AACT;;AAUA,MAAa,eAAe"}
1
+ {"version":3,"file":"gesture.js","names":[],"sources":["../../../../src/ui/gesture/gesture.tsx"],"sourcesContent":["import type { GestureProps as CoreGestureProps } from '@videojs/core';\nimport type { AnyPlayerStore } from '@videojs/core/dom';\nimport { createDoubleTapGesture, createTapGesture, resolveGestureAction } from '@videojs/core/dom';\nimport type { ReactNode } from 'react';\nimport { useEffect } from 'react';\n\nimport { useContainer, usePlayer } from '../../player/context';\n\nexport interface GestureProps extends CoreGestureProps {}\n\nexport function Gesture({ type, action, value, pointer, region, disabled }: GestureProps): ReactNode {\n const store = usePlayer() as AnyPlayerStore;\n const container = useContainer();\n\n useEffect(() => {\n if (!container || !type || !action || disabled) return;\n\n const resolver = resolveGestureAction(action);\n if (!resolver) return;\n\n const onActivate = (event: PointerEvent) => {\n resolver({ store, value, event });\n };\n\n const options = { pointer, region, action, value };\n\n if (type === 'doubletap') {\n return createDoubleTapGesture(container, onActivate, options);\n }\n\n return createTapGesture(container, onActivate, options);\n }, [container, store, type, action, value, pointer, region, disabled]);\n\n return null;\n}\n\nexport namespace Gesture {\n export type Props = GestureProps;\n}\n\n/** @deprecated Use `GestureProps` instead. */\nexport type MediaGestureProps = GestureProps;\n\n/** @deprecated Use `Gesture` instead. */\nexport const MediaGesture = Gesture;\n"],"mappings":";;;;AAUA,SAAgB,QAAQ,EAAE,MAAM,QAAQ,OAAO,SAAS,QAAQ,YAAqC;CACnG,MAAM,QAAQ,UAAU;CACxB,MAAM,YAAY,aAAa;CAE/B,gBAAgB;EACd,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,UAAU;EAEhD,MAAM,WAAW,qBAAqB,MAAM;EAC5C,IAAI,CAAC,UAAU;EAEf,MAAM,cAAc,UAAwB;GAC1C,SAAS;IAAE;IAAO;IAAO;GAAM,CAAC;EAClC;EAEA,MAAM,UAAU;GAAE;GAAS;GAAQ;GAAQ;EAAM;EAEjD,IAAI,SAAS,aACX,OAAO,uBAAuB,WAAW,YAAY,OAAO;EAG9D,OAAO,iBAAiB,WAAW,YAAY,OAAO;CACxD,GAAG;EAAC;EAAW;EAAO;EAAM;EAAQ;EAAO;EAAS;EAAQ;CAAQ,CAAC;CAErE,OAAO;AACT;;AAUA,MAAa,eAAe"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useContainer } from "../../player/context.js";
3
2
  import { useLatestRef } from "../../utils/use-latest-ref.js";
4
3
  import { createDoubleTapGesture } from "@videojs/core/dom";
@@ -1 +1 @@
1
- {"version":3,"file":"use-doubletap-gesture.js","names":[],"sources":["../../../../src/ui/gesture/use-doubletap-gesture.ts"],"sourcesContent":["'use client';\n\nimport { createDoubleTapGesture, type GesturePointerType, type GestureRegion } from '@videojs/core/dom';\nimport type { RefObject } from 'react';\nimport { useEffect } from 'react';\n\nimport { useContainer } from '../../player/context';\nimport { useLatestRef } from '../../utils/use-latest-ref';\n\nexport interface UseDoubleTapGestureOptions {\n pointer?: GesturePointerType;\n region?: GestureRegion;\n disabled?: boolean;\n target?: RefObject<HTMLElement | null>;\n}\n\nexport function useDoubleTapGesture(\n onActivate: (event: PointerEvent) => void,\n options?: UseDoubleTapGestureOptions\n): void {\n const { pointer, region, disabled = false, target } = options ?? {};\n const contextContainer = useContainer();\n const container = target?.current ?? contextContainer;\n const onActivateRef = useLatestRef(onActivate);\n\n useEffect(() => {\n if (!container || disabled) return;\n\n return createDoubleTapGesture(container, (event) => onActivateRef.current(event), { pointer, region });\n }, [container, disabled, pointer, region]);\n}\n"],"mappings":";;;;;;AAgBA,SAAgB,oBACd,YACA,SACM;CACN,MAAM,EAAE,SAAS,QAAQ,WAAW,OAAO,WAAW,WAAW,CAAC;CAClE,MAAM,mBAAmB,aAAa;CACtC,MAAM,YAAY,QAAQ,WAAW;CACrC,MAAM,gBAAgB,aAAa,UAAU;CAE7C,gBAAgB;EACd,IAAI,CAAC,aAAa,UAAU;EAE5B,OAAO,uBAAuB,YAAY,UAAU,cAAc,QAAQ,KAAK,GAAG;GAAE;GAAS;EAAO,CAAC;CACvG,GAAG;EAAC;EAAW;EAAU;EAAS;CAAM,CAAC;AAC3C"}
1
+ {"version":3,"file":"use-doubletap-gesture.js","names":[],"sources":["../../../../src/ui/gesture/use-doubletap-gesture.ts"],"sourcesContent":["import type { GestureProps } from '@videojs/core';\nimport { createDoubleTapGesture } from '@videojs/core/dom';\nimport type { RefObject } from 'react';\nimport { useEffect } from 'react';\n\nimport { useContainer } from '../../player/context';\nimport { useLatestRef } from '../../utils/use-latest-ref';\n\nexport interface UseDoubleTapGestureOptions extends Pick<GestureProps, 'pointer' | 'region' | 'disabled'> {\n target?: RefObject<HTMLElement | null>;\n}\n\nexport function useDoubleTapGesture(\n onActivate: (event: PointerEvent) => void,\n options?: UseDoubleTapGestureOptions\n): void {\n const { pointer, region, disabled = false, target } = options ?? {};\n const contextContainer = useContainer();\n const container = target?.current ?? contextContainer;\n const onActivateRef = useLatestRef(onActivate);\n\n useEffect(() => {\n if (!container || disabled) return;\n\n return createDoubleTapGesture(container, (event) => onActivateRef.current(event), { pointer, region });\n }, [container, disabled, pointer, region]);\n}\n"],"mappings":";;;;;AAYA,SAAgB,oBACd,YACA,SACM;CACN,MAAM,EAAE,SAAS,QAAQ,WAAW,OAAO,WAAW,WAAW,CAAC;CAClE,MAAM,mBAAmB,aAAa;CACtC,MAAM,YAAY,QAAQ,WAAW;CACrC,MAAM,gBAAgB,aAAa,UAAU;CAE7C,gBAAgB;EACd,IAAI,CAAC,aAAa,UAAU;EAE5B,OAAO,uBAAuB,YAAY,UAAU,cAAc,QAAQ,KAAK,GAAG;GAAE;GAAS;EAAO,CAAC;CACvG,GAAG;EAAC;EAAW;EAAU;EAAS;CAAM,CAAC;AAC3C"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useContainer } from "../../player/context.js";
3
2
  import { useLatestRef } from "../../utils/use-latest-ref.js";
4
3
  import { createTapGesture } from "@videojs/core/dom";
@@ -1 +1 @@
1
- {"version":3,"file":"use-tap-gesture.js","names":[],"sources":["../../../../src/ui/gesture/use-tap-gesture.ts"],"sourcesContent":["'use client';\n\nimport { createTapGesture, type GesturePointerType, type GestureRegion } from '@videojs/core/dom';\nimport type { RefObject } from 'react';\nimport { useEffect } from 'react';\n\nimport { useContainer } from '../../player/context';\nimport { useLatestRef } from '../../utils/use-latest-ref';\n\nexport interface UseTapGestureOptions {\n pointer?: GesturePointerType;\n region?: GestureRegion;\n disabled?: boolean;\n target?: RefObject<HTMLElement | null>;\n}\n\nexport function useTapGesture(onActivate: (event: PointerEvent) => void, options?: UseTapGestureOptions): void {\n const { pointer, region, disabled = false, target } = options ?? {};\n const contextContainer = useContainer();\n const container = target?.current ?? contextContainer;\n const onActivateRef = useLatestRef(onActivate);\n\n useEffect(() => {\n if (!container || disabled) return;\n\n return createTapGesture(container, (event) => onActivateRef.current(event), { pointer, region });\n }, [container, disabled, pointer, region]);\n}\n"],"mappings":";;;;;;AAgBA,SAAgB,cAAc,YAA2C,SAAsC;CAC7G,MAAM,EAAE,SAAS,QAAQ,WAAW,OAAO,WAAW,WAAW,CAAC;CAClE,MAAM,mBAAmB,aAAa;CACtC,MAAM,YAAY,QAAQ,WAAW;CACrC,MAAM,gBAAgB,aAAa,UAAU;CAE7C,gBAAgB;EACd,IAAI,CAAC,aAAa,UAAU;EAE5B,OAAO,iBAAiB,YAAY,UAAU,cAAc,QAAQ,KAAK,GAAG;GAAE;GAAS;EAAO,CAAC;CACjG,GAAG;EAAC;EAAW;EAAU;EAAS;CAAM,CAAC;AAC3C"}
1
+ {"version":3,"file":"use-tap-gesture.js","names":[],"sources":["../../../../src/ui/gesture/use-tap-gesture.ts"],"sourcesContent":["import type { GestureProps } from '@videojs/core';\nimport { createTapGesture } from '@videojs/core/dom';\nimport type { RefObject } from 'react';\nimport { useEffect } from 'react';\n\nimport { useContainer } from '../../player/context';\nimport { useLatestRef } from '../../utils/use-latest-ref';\n\nexport interface UseTapGestureOptions extends Pick<GestureProps, 'pointer' | 'region' | 'disabled'> {\n target?: RefObject<HTMLElement | null>;\n}\n\nexport function useTapGesture(onActivate: (event: PointerEvent) => void, options?: UseTapGestureOptions): void {\n const { pointer, region, disabled = false, target } = options ?? {};\n const contextContainer = useContainer();\n const container = target?.current ?? contextContainer;\n const onActivateRef = useLatestRef(onActivate);\n\n useEffect(() => {\n if (!container || disabled) return;\n\n return createTapGesture(container, (event) => onActivateRef.current(event), { pointer, region });\n }, [container, disabled, pointer, region]);\n}\n"],"mappings":";;;;;AAYA,SAAgB,cAAc,YAA2C,SAAsC;CAC7G,MAAM,EAAE,SAAS,QAAQ,WAAW,OAAO,WAAW,WAAW,CAAC;CAClE,MAAM,mBAAmB,aAAa;CACtC,MAAM,YAAY,QAAQ,WAAW;CACrC,MAAM,gBAAgB,aAAa,UAAU;CAE7C,gBAAgB;EACd,IAAI,CAAC,aAAa,UAAU;EAE5B,OAAO,iBAAiB,YAAY,UAAU,cAAc,QAAQ,KAAK,GAAG;GAAE;GAAS;EAAO,CAAC;CACjG,GAAG;EAAC;EAAW;EAAU;EAAS;CAAM,CAAC;AAC3C"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useTranslator } from "../../i18n/context.js";
3
2
  import { usePlayer } from "../../player/context.js";
4
3
  import "@videojs/core/dom";
@@ -1 +1 @@
1
- {"version":3,"file":"create-radio-options-hook.js","names":[],"sources":["../../../../src/ui/hooks/create-radio-options-hook.ts"],"sourcesContent":["'use client';\n\nimport type { RadioOption, RadioOptionsState } from '@videojs/core';\nimport { logMissingFeature } from '@videojs/core/dom';\nimport { type Text, type TextParams, translateText } from '@videojs/core/i18n';\nimport type { UnknownState } from '@videojs/store';\nimport { useCallback, useState } from 'react';\n\nimport { useTranslator } from '../../i18n/context';\nimport { usePlayer } from '../../player/context';\n\ninterface RadioOptionsCore<Props, Media, State extends RadioOptionsState> {\n setProps(props: Props): void;\n setMedia(media: Media): void;\n getState(): State;\n getLabel(state: State): Text | string;\n getLabelParams?(state: State): TextParams | undefined;\n selectValue(media: Media, value: string): void;\n}\n\ninterface RadioOptionsHookConfig<Props, Media, State extends RadioOptionsState> {\n name: string;\n feature: string;\n selector: ((state: UnknownState) => Media | null) & { displayName?: string | undefined };\n createCore: () => RadioOptionsCore<Props, Media, State>;\n}\n\ntype StateOption<State extends RadioOptionsState> = State extends RadioOptionsState<infer Option> ? Option : never;\n\nexport type TranslatedRadioOption<Option extends RadioOption> = Omit<Option, 'label' | 'labelParams' | 'disabled'> & {\n label: string;\n disabled: boolean;\n};\n\nexport interface RadioOptionsHookResult<Option extends RadioOption, State extends RadioOptionsState> {\n state: State;\n label: string;\n value: string;\n selectedLabel: string;\n options: TranslatedRadioOption<Option>[];\n disabled: boolean;\n hidden: boolean;\n setValue: (value: string) => void;\n}\n\n/** Creates framework adapter mechanics shared by media-backed radio option hooks. */\nexport function createRadioOptionsHook<Props, Media, State extends RadioOptionsState>({\n name,\n feature,\n selector,\n createCore,\n}: RadioOptionsHookConfig<Props, Media, State>): (\n props?: Props\n) => RadioOptionsHookResult<StateOption<State>, State> | null {\n return function useRadioOptions(props?: Props): RadioOptionsHookResult<StateOption<State>, State> | null {\n 'use no memo';\n\n const media = usePlayer(selector);\n const t = useTranslator();\n const [core] = useState(createCore);\n\n core.setProps(props ?? ({} as Props));\n\n const setValue = useCallback((value: string) => core.selectValue(media!, value), [core, media]);\n\n if (!media) {\n if (__DEV__) logMissingFeature(name, selector.displayName ?? feature);\n return null;\n }\n\n core.setMedia(media);\n const state = core.getState();\n const options = state.options.map((option) => {\n const { label, labelParams, disabled, ...rest } = option;\n\n return {\n ...rest,\n label: translateText(label, t, labelParams),\n disabled: state.disabled || disabled,\n } as TranslatedRadioOption<StateOption<State>>;\n });\n\n return {\n state,\n label: translateText(core.getLabel(state), t, core.getLabelParams?.(state)),\n value: state.value,\n selectedLabel: options.find((option) => option.value === state.value)?.label ?? '',\n options,\n disabled: state.disabled,\n hidden: state.hidden,\n setValue,\n };\n };\n}\n"],"mappings":";;;;;;;;AA8CA,SAAgB,uBAAsE,EACpF,MACA,SACA,UACA,cAG4D;CAC5D,OAAO,SAAS,gBAAgB,OAAyE;EACvG;EAEA,MAAM,QAAQ,UAAU,QAAQ;EAChC,MAAM,IAAI,cAAc;EACxB,MAAM,CAAC,QAAQ,SAAS,UAAU;EAElC,KAAK,SAAS,SAAU,CAAC,CAAW;EAEpC,MAAM,WAAW,aAAa,UAAkB,KAAK,YAAY,OAAQ,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC;EAE9F,IAAI,CAAC,OAEH,OAAO;EAGT,KAAK,SAAS,KAAK;EACnB,MAAM,QAAQ,KAAK,SAAS;EAC5B,MAAM,UAAU,MAAM,QAAQ,KAAK,WAAW;GAC5C,MAAM,EAAE,OAAO,aAAa,UAAU,GAAG,SAAS;GAElD,OAAO;IACL,GAAG;IACH,OAAO,cAAc,OAAO,GAAG,WAAW;IAC1C,UAAU,MAAM,YAAY;GAC9B;EACF,CAAC;EAED,OAAO;GACL;GACA,OAAO,cAAc,KAAK,SAAS,KAAK,GAAG,GAAG,KAAK,iBAAiB,KAAK,CAAC;GAC1E,OAAO,MAAM;GACb,eAAe,QAAQ,MAAM,WAAW,OAAO,UAAU,MAAM,KAAK,CAAC,EAAE,SAAS;GAChF;GACA,UAAU,MAAM;GAChB,QAAQ,MAAM;GACd;EACF;CACF;AACF"}
1
+ {"version":3,"file":"create-radio-options-hook.js","names":[],"sources":["../../../../src/ui/hooks/create-radio-options-hook.ts"],"sourcesContent":["import type { RadioOption, RadioOptionsState } from '@videojs/core';\nimport { logMissingFeature } from '@videojs/core/dom';\nimport { type Text, type TextParams, translateText } from '@videojs/core/i18n';\nimport type { UnknownState } from '@videojs/store';\nimport { useCallback, useState } from 'react';\n\nimport { useTranslator } from '../../i18n/context';\nimport { usePlayer } from '../../player/context';\n\ninterface RadioOptionsCore<Props, Media, State extends RadioOptionsState> {\n setProps(props: Props): void;\n setMedia(media: Media): void;\n getState(): State;\n getLabel(state: State): Text | string;\n getLabelParams?(state: State): TextParams | undefined;\n selectValue(media: Media, value: string): void;\n}\n\ninterface RadioOptionsHookConfig<Props, Media, State extends RadioOptionsState> {\n name: string;\n feature: string;\n selector: ((state: UnknownState) => Media | null) & { displayName?: string | undefined };\n createCore: () => RadioOptionsCore<Props, Media, State>;\n}\n\ntype StateOption<State extends RadioOptionsState> = State extends RadioOptionsState<infer Option> ? Option : never;\n\nexport type TranslatedRadioOption<Option extends RadioOption> = Omit<Option, 'label' | 'labelParams' | 'disabled'> & {\n label: string;\n disabled: boolean;\n};\n\nexport interface RadioOptionsHookResult<Option extends RadioOption, State extends RadioOptionsState> {\n state: State;\n label: string;\n value: string;\n selectedLabel: string;\n options: TranslatedRadioOption<Option>[];\n disabled: boolean;\n hidden: boolean;\n setValue: (value: string) => void;\n}\n\n/** Creates framework adapter mechanics shared by media-backed radio option hooks. */\nexport function createRadioOptionsHook<Props, Media, State extends RadioOptionsState>({\n name,\n feature,\n selector,\n createCore,\n}: RadioOptionsHookConfig<Props, Media, State>): (\n props?: Props\n) => RadioOptionsHookResult<StateOption<State>, State> | null {\n return function useRadioOptions(props?: Props): RadioOptionsHookResult<StateOption<State>, State> | null {\n 'use no memo';\n\n const media = usePlayer(selector);\n const t = useTranslator();\n const [core] = useState(createCore);\n\n core.setProps(props ?? ({} as Props));\n\n const setValue = useCallback((value: string) => core.selectValue(media!, value), [core, media]);\n\n if (!media) {\n if (__DEV__) logMissingFeature(name, selector.displayName ?? feature);\n return null;\n }\n\n core.setMedia(media);\n const state = core.getState();\n const options = state.options.map((option) => {\n const { label, labelParams, disabled, ...rest } = option;\n\n return {\n ...rest,\n label: translateText(label, t, labelParams),\n disabled: state.disabled || disabled,\n } as TranslatedRadioOption<StateOption<State>>;\n });\n\n return {\n state,\n label: translateText(core.getLabel(state), t, core.getLabelParams?.(state)),\n value: state.value,\n selectedLabel: options.find((option) => option.value === state.value)?.label ?? '',\n options,\n disabled: state.disabled,\n hidden: state.hidden,\n setValue,\n };\n };\n}\n"],"mappings":";;;;;;;AA4CA,SAAgB,uBAAsE,EACpF,MACA,SACA,UACA,cAG4D;CAC5D,OAAO,SAAS,gBAAgB,OAAyE;EACvG;EAEA,MAAM,QAAQ,UAAU,QAAQ;EAChC,MAAM,IAAI,cAAc;EACxB,MAAM,CAAC,QAAQ,SAAS,UAAU;EAElC,KAAK,SAAS,SAAU,CAAC,CAAW;EAEpC,MAAM,WAAW,aAAa,UAAkB,KAAK,YAAY,OAAQ,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC;EAE9F,IAAI,CAAC,OAEH,OAAO;EAGT,KAAK,SAAS,KAAK;EACnB,MAAM,QAAQ,KAAK,SAAS;EAC5B,MAAM,UAAU,MAAM,QAAQ,KAAK,WAAW;GAC5C,MAAM,EAAE,OAAO,aAAa,UAAU,GAAG,SAAS;GAElD,OAAO;IACL,GAAG;IACH,OAAO,cAAc,OAAO,GAAG,WAAW;IAC1C,UAAU,MAAM,YAAY;GAC9B;EACF,CAAC;EAED,OAAO;GACL;GACA,OAAO,cAAc,KAAK,SAAS,KAAK,GAAG,GAAG,KAAK,iBAAiB,KAAK,CAAC;GAC1E,OAAO,MAAM;GACb,eAAe,QAAQ,MAAM,WAAW,OAAO,UAAU,MAAM,KAAK,CAAC,EAAE,SAAS;GAChF;GACA,UAAU,MAAM;GAChB,QAAQ,MAAM;GACd;EACF;CACF;AACF"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { mergeProps } from "../../utils/merge-props.js";
3
2
  import { createButton } from "@videojs/core/dom";
4
3
  import { useCallback } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"use-button.js","names":[],"sources":["../../../../src/ui/hooks/use-button.ts"],"sourcesContent":["'use client';\n\nimport { createButton, type UIEvent } from '@videojs/core/dom';\nimport type { ComponentPropsWithRef, Ref } from 'react';\nimport { useCallback } from 'react';\nimport { mergeProps } from '../../utils/merge-props';\n\nexport interface UseButtonParameters {\n displayName: string;\n onActivate: (event: UIEvent) => void;\n isDisabled: () => boolean;\n}\n\nexport interface UseButtonReturnValue {\n getButtonProps: (externalProps?: ComponentPropsWithRef<'button'>) => ComponentPropsWithRef<'button'>;\n buttonRef: Ref<HTMLElement>;\n}\n\n/**\n * Hook for button behavior with keyboard and pointer interaction.\n *\n * @example\n * ```tsx\n * const { getButtonProps, buttonRef } = useButton({\n * displayName: 'PlayButton',\n * onActivate: () => togglePlayback(),\n * isDisabled: () => disabled,\n * });\n *\n * return useRender('button', componentProps, {\n * state,\n * ref: [forwardedRef, buttonRef],\n * props: [elementProps, getButtonProps],\n * });\n * ```\n *\n * @param params - Button configuration with activation handler and disabled check.\n */\nexport function useButton(params: UseButtonParameters): UseButtonReturnValue {\n const { displayName, onActivate, isDisabled } = params;\n\n const buttonRef = useCallback(\n (element: HTMLElement | null) => {\n if (__DEV__ && element && element.tagName !== 'BUTTON') {\n console.warn(`${displayName} should render a <button> element for accessibility`);\n }\n },\n [displayName]\n );\n\n const getButtonProps = useCallback(\n (externalProps?: ComponentPropsWithRef<'button'>): ComponentPropsWithRef<'button'> => {\n const buttonProps = createButton({ onActivate, isDisabled });\n return mergeProps(buttonProps, externalProps);\n },\n [onActivate, isDisabled]\n );\n\n return { getButtonProps, buttonRef };\n}\n\nexport namespace useButton {\n export type Parameters = UseButtonParameters;\n export type ReturnValue = UseButtonReturnValue;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,SAAgB,UAAU,QAAmD;CAC3E,MAAM,EAAE,aAAa,YAAY,eAAe;CAEhD,MAAM,YAAY,aACf,YAAgC,CAIjC,GACA,CAAC,WAAW,CACd;CAUA,OAAO;EAAE,gBARc,aACpB,kBAAqF;GAEpF,OAAO,WADa,aAAa;IAAE;IAAY;GAAW,CAC9B,GAAG,aAAa;EAC9C,GACA,CAAC,YAAY,UAAU,CAGH;EAAG;CAAU;AACrC"}
1
+ {"version":3,"file":"use-button.js","names":[],"sources":["../../../../src/ui/hooks/use-button.ts"],"sourcesContent":["import { createButton, type UIEvent } from '@videojs/core/dom';\nimport type { ComponentPropsWithRef, Ref } from 'react';\nimport { useCallback } from 'react';\nimport { mergeProps } from '../../utils/merge-props';\n\nexport interface UseButtonParameters {\n displayName: string;\n onActivate: (event: UIEvent) => void;\n isDisabled: () => boolean;\n}\n\nexport interface UseButtonReturnValue {\n getButtonProps: (externalProps?: ComponentPropsWithRef<'button'>) => ComponentPropsWithRef<'button'>;\n buttonRef: Ref<HTMLElement>;\n}\n\n/**\n * Hook for button behavior with keyboard and pointer interaction.\n *\n * @example\n * ```tsx\n * const { getButtonProps, buttonRef } = useButton({\n * displayName: 'PlayButton',\n * onActivate: () => togglePlayback(),\n * isDisabled: () => disabled,\n * });\n *\n * return useRender('button', componentProps, {\n * state,\n * ref: [forwardedRef, buttonRef],\n * props: [elementProps, getButtonProps],\n * });\n * ```\n *\n * @param params - Button configuration with activation handler and disabled check.\n */\nexport function useButton(params: UseButtonParameters): UseButtonReturnValue {\n const { displayName, onActivate, isDisabled } = params;\n\n const buttonRef = useCallback(\n (element: HTMLElement | null) => {\n if (__DEV__ && element && element.tagName !== 'BUTTON') {\n console.warn(`${displayName} should render a <button> element for accessibility`);\n }\n },\n [displayName]\n );\n\n const getButtonProps = useCallback(\n (externalProps?: ComponentPropsWithRef<'button'>): ComponentPropsWithRef<'button'> => {\n const buttonProps = createButton({ onActivate, isDisabled });\n return mergeProps(buttonProps, externalProps);\n },\n [onActivate, isDisabled]\n );\n\n return { getButtonProps, buttonRef };\n}\n\nexport namespace useButton {\n export type Parameters = UseButtonParameters;\n export type ReturnValue = UseButtonReturnValue;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAoCA,SAAgB,UAAU,QAAmD;CAC3E,MAAM,EAAE,aAAa,YAAY,eAAe;CAEhD,MAAM,YAAY,aACf,YAAgC,CAIjC,GACA,CAAC,WAAW,CACd;CAUA,OAAO;EAAE,gBARc,aACpB,kBAAqF;GAEpF,OAAO,WADa,aAAa;IAAE;IAAY;GAAW,CAC9B,GAAG,aAAa;EAC9C,GACA,CAAC,YAAY,UAAU,CAGH;EAAG;CAAU;AACrC"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useCallback, useEffect, useMemo, useState } from "react";
3
2
  //#region src/ui/hooks/use-positioned-state.ts
4
3
  function usePositionedState(preferredState) {
@@ -1 +1 @@
1
- {"version":3,"file":"use-positioned-state.js","names":[],"sources":["../../../../src/ui/hooks/use-positioned-state.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\ninterface PopupState {\n open: boolean;\n side: string | undefined;\n}\n\ninterface PositionedState<State extends PopupState> {\n state: State;\n preferredSide: State['side'];\n setPositionedSide: (side: State['side']) => void;\n}\n\nexport function usePositionedState<State extends PopupState>(preferredState: State): PositionedState<State> {\n const preferredSide = preferredState.side;\n const [position, setPosition] = useState<{ preferred: State['side']; side: State['side'] }>({\n preferred: preferredSide,\n side: preferredSide,\n });\n\n const side = preferredState.open && position.preferred === preferredSide ? position.side : preferredSide;\n\n const state = useMemo(\n () => (side === preferredSide ? preferredState : { ...preferredState, side }),\n [side, preferredState, preferredSide]\n );\n\n const setPositionedSide = useCallback(\n (nextSide: State['side']) =>\n setPosition((prev) =>\n prev.preferred === preferredSide && prev.side === nextSide ? prev : { preferred: preferredSide, side: nextSide }\n ),\n [preferredSide]\n );\n\n useEffect(() => {\n if (!preferredState.open) setPositionedSide(preferredSide);\n }, [preferredState.open, preferredSide, setPositionedSide]);\n\n return { state, preferredSide, setPositionedSide };\n}\n"],"mappings":";;;AAeA,SAAgB,mBAA6C,gBAA+C;CAC1G,MAAM,gBAAgB,eAAe;CACrC,MAAM,CAAC,UAAU,eAAe,SAA4D;EAC1F,WAAW;EACX,MAAM;CACR,CAAC;CAED,MAAM,OAAO,eAAe,QAAQ,SAAS,cAAc,gBAAgB,SAAS,OAAO;CAE3F,MAAM,QAAQ,cACL,SAAS,gBAAgB,iBAAiB;EAAE,GAAG;EAAgB;CAAK,GAC3E;EAAC;EAAM;EAAgB;CAAa,CACtC;CAEA,MAAM,oBAAoB,aACvB,aACC,aAAa,SACX,KAAK,cAAc,iBAAiB,KAAK,SAAS,WAAW,OAAO;EAAE,WAAW;EAAe,MAAM;CAAS,CACjH,GACF,CAAC,aAAa,CAChB;CAEA,gBAAgB;EACd,IAAI,CAAC,eAAe,MAAM,kBAAkB,aAAa;CAC3D,GAAG;EAAC,eAAe;EAAM;EAAe;CAAiB,CAAC;CAE1D,OAAO;EAAE;EAAO;EAAe;CAAkB;AACnD"}
1
+ {"version":3,"file":"use-positioned-state.js","names":[],"sources":["../../../../src/ui/hooks/use-positioned-state.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo, useState } from 'react';\n\ninterface PopupState {\n open: boolean;\n side: string | undefined;\n}\n\ninterface PositionedState<State extends PopupState> {\n state: State;\n preferredSide: State['side'];\n setPositionedSide: (side: State['side']) => void;\n}\n\nexport function usePositionedState<State extends PopupState>(preferredState: State): PositionedState<State> {\n const preferredSide = preferredState.side;\n const [position, setPosition] = useState<{ preferred: State['side']; side: State['side'] }>({\n preferred: preferredSide,\n side: preferredSide,\n });\n\n const side = preferredState.open && position.preferred === preferredSide ? position.side : preferredSide;\n\n const state = useMemo(\n () => (side === preferredSide ? preferredState : { ...preferredState, side }),\n [side, preferredState, preferredSide]\n );\n\n const setPositionedSide = useCallback(\n (nextSide: State['side']) =>\n setPosition((prev) =>\n prev.preferred === preferredSide && prev.side === nextSide ? prev : { preferred: preferredSide, side: nextSide }\n ),\n [preferredSide]\n );\n\n useEffect(() => {\n if (!preferredState.open) setPositionedSide(preferredSide);\n }, [preferredState.open, preferredSide, setPositionedSide]);\n\n return { state, preferredSide, setPositionedSide };\n}\n"],"mappings":";;AAaA,SAAgB,mBAA6C,gBAA+C;CAC1G,MAAM,gBAAgB,eAAe;CACrC,MAAM,CAAC,UAAU,eAAe,SAA4D;EAC1F,WAAW;EACX,MAAM;CACR,CAAC;CAED,MAAM,OAAO,eAAe,QAAQ,SAAS,cAAc,gBAAgB,SAAS,OAAO;CAE3F,MAAM,QAAQ,cACL,SAAS,gBAAgB,iBAAiB;EAAE,GAAG;EAAgB;CAAK,GAC3E;EAAC;EAAM;EAAgB;CAAa,CACtC;CAEA,MAAM,oBAAoB,aACvB,aACC,aAAa,SACX,KAAK,cAAc,iBAAiB,KAAK,SAAS,WAAW,OAAO;EAAE,WAAW;EAAe,MAAM;CAAS,CACjH,GACF,CAAC,aAAa,CAChB;CAEA,gBAAgB;EACd,IAAI,CAAC,eAAe,MAAM,kBAAkB,aAAa;CAC3D,GAAG;EAAC,eAAe;EAAM;EAAe;CAAiB,CAAC;CAE1D,OAAO;EAAE;EAAO;EAAe;CAAkB;AACnD"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useOptionalPlayer } from "../../player/context.js";
3
2
  import { useLatestRef } from "../../utils/use-latest-ref.js";
4
3
  import { useDestroy } from "../../utils/use-destroy.js";
@@ -1 +1 @@
1
- {"version":3,"file":"use-slider.js","names":[],"sources":["../../../../src/ui/hooks/use-slider.ts"],"sourcesContent":["'use client';\n\nimport type { SliderInput, SliderState } from '@videojs/core';\nimport {\n createSlider,\n type SliderApi,\n type SliderOptions,\n type SliderRootProps,\n type SliderRootStyle,\n type SliderThumbProps,\n selectControls,\n} from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport { applyStyles, isRTL } from '@videojs/utils/dom';\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { useOptionalPlayer } from '../../player/context';\nimport { useDestroy } from '../../utils/use-destroy';\nimport { useForceRender } from '../../utils/use-force-render';\nimport { useLatestRef } from '../../utils/use-latest-ref';\n\nexport interface UseSliderOptions<State extends SliderState = SliderState>\n extends Pick<\n SliderOptions,\n | 'getPercent'\n | 'getStepPercent'\n | 'getLargeStepPercent'\n | 'changeThrottle'\n | 'onValueChange'\n | 'onValueCommit'\n | 'onDragStart'\n | 'onDragEnd'\n > {\n computeState: (input: SliderInput) => State;\n orientation?: 'horizontal' | 'vertical' | undefined;\n disabled?: boolean | undefined;\n /** Adjust a raw 0–100 percent for thumb alignment. Called for fill and pointer percents. */\n adjustPercent?: ((rawPercent: number, thumbSize: number, trackSize: number) => number) | undefined;\n /** Compute CSS variable map from the (possibly alignment-adjusted) state. */\n getCSSVars: (state: State) => Record<string, string>;\n}\n\nexport interface UseSliderReturnValue<State extends SliderState = SliderState> {\n state: State;\n input: SliderApi['input'];\n cssVars: Record<string, string>;\n rootRef: React.RefCallback<HTMLElement>;\n thumbRef: React.RefCallback<HTMLElement>;\n rootProps: SliderRootProps;\n rootStyle: SliderRootStyle;\n thumbProps: SliderThumbProps;\n}\n\n/**\n * Manages slider input lifecycle for React.\n *\n * Wraps `createSlider()` from `@videojs/core/dom` and subscribes to its\n * input state via `useSnapshot`. Returns split props for the root\n * (pointer events) and thumb (keyboard/focus) elements.\n */\nexport function useSlider<State extends SliderState = SliderState>(\n options: UseSliderOptions<State>\n): UseSliderReturnValue<State> {\n const optionsRef = useLatestRef(options);\n const controls = useOptionalPlayer(selectControls);\n const requestControlsLock = controls?.requestControlsLock;\n const releaseControlsLockRef = useRef<(() => void) | null>(null);\n\n const releaseControlsLock = useCallback(() => {\n releaseControlsLockRef.current?.();\n releaseControlsLockRef.current = null;\n }, []);\n\n useEffect(() => releaseControlsLock, [releaseControlsLock]);\n\n const rootElementRef = useRef<HTMLElement | null>(null);\n const thumbElementRef = useRef<HTMLElement | null>(null);\n const forceRender = useForceRender();\n\n // Lazy-init the slider handle. Stable across re-renders.\n const [slider] = useState<SliderApi>(() => {\n const stableOptions: SliderOptions = {\n getElement: () => rootElementRef.current!,\n getThumbElement: () => thumbElementRef.current,\n getOrientation: () => optionsRef.current.orientation ?? 'horizontal',\n isRTL: () => (rootElementRef.current ? isRTL(rootElementRef.current) : false),\n isDisabled: () => optionsRef.current.disabled ?? false,\n getPercent: () => optionsRef.current.getPercent(),\n getStepPercent: () => optionsRef.current.getStepPercent(),\n getLargeStepPercent: () => optionsRef.current.getLargeStepPercent(),\n changeThrottle: optionsRef.current.changeThrottle,\n adjustPercent: optionsRef.current.adjustPercent,\n onValueChange: (percent) => optionsRef.current.onValueChange?.(percent),\n onValueCommit: (percent) => optionsRef.current.onValueCommit?.(percent),\n onDragStart: () => {\n releaseControlsLockRef.current ??= requestControlsLock?.() ?? null;\n optionsRef.current.onDragStart?.();\n },\n onDragEnd: () => {\n releaseControlsLock();\n optionsRef.current.onDragEnd?.();\n },\n };\n\n return createSlider(stableOptions);\n });\n\n useDestroy(slider);\n\n // Percentage changes are rendered directly below. React only needs to\n // re-render when interaction state changes.\n const interaction = useSnapshot(slider.input, ({ dragging, pointing, focused }) => ({\n dragging,\n pointing,\n focused,\n }));\n const input = { ...slider.input.current, ...interaction };\n\n // Compute derived state from input + caller-provided projection.\n const state = options.computeState(input);\n\n // Force a synchronous re-render after mount so edge thumb alignment\n // can read DOM measurements from the now-populated element refs.\n useLayoutEffect(() => {\n if (state.thumbAlignment === 'edge' && rootElementRef.current && thumbElementRef.current) {\n forceRender();\n }\n }, [state.thumbAlignment]);\n\n // Adjust CSS var percents for edge thumb alignment using live DOM measurements.\n const cssVars = options.getCSSVars(slider.adjustForAlignment(state));\n\n const syncStyles = useCallback(\n (element = rootElementRef.current) => {\n if (!element) return;\n const next = optionsRef.current.computeState(slider.input.current);\n applyStyles(element, optionsRef.current.getCSSVars(slider.adjustForAlignment(next)));\n },\n [slider]\n );\n\n useLayoutEffect(() => {\n syncStyles();\n return slider.input.subscribe(syncStyles);\n }, [slider, syncStyles]);\n\n // Ref callbacks for root and thumb elements.\n const rootRef = useCallback(\n (element: HTMLElement | null) => {\n rootElementRef.current = element;\n syncStyles(element);\n },\n [syncStyles]\n );\n\n const thumbRef = useCallback((element: HTMLElement | null) => {\n thumbElementRef.current = element;\n }, []);\n\n return {\n state,\n input: slider.input,\n cssVars,\n rootRef,\n thumbRef,\n rootProps: slider.rootProps,\n rootStyle: slider.rootStyle,\n thumbProps: slider.thumbProps,\n };\n}\n\nexport namespace useSlider {\n export type Options = UseSliderOptions;\n export type ReturnValue = UseSliderReturnValue;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA2DA,SAAgB,UACd,SAC6B;CAC7B,MAAM,aAAa,aAAa,OAAO;CAEvC,MAAM,sBADW,kBAAkB,cACA,CAAC,EAAE;CACtC,MAAM,yBAAyB,OAA4B,IAAI;CAE/D,MAAM,sBAAsB,kBAAkB;EAC5C,uBAAuB,UAAU;EACjC,uBAAuB,UAAU;CACnC,GAAG,CAAC,CAAC;CAEL,gBAAgB,qBAAqB,CAAC,mBAAmB,CAAC;CAE1D,MAAM,iBAAiB,OAA2B,IAAI;CACtD,MAAM,kBAAkB,OAA2B,IAAI;CACvD,MAAM,cAAc,eAAe;CAGnC,MAAM,CAAC,UAAU,eAA0B;EAwBzC,OAAO,aAAa;GAtBlB,kBAAkB,eAAe;GACjC,uBAAuB,gBAAgB;GACvC,sBAAsB,WAAW,QAAQ,eAAe;GACxD,aAAc,eAAe,UAAU,MAAM,eAAe,OAAO,IAAI;GACvE,kBAAkB,WAAW,QAAQ,YAAY;GACjD,kBAAkB,WAAW,QAAQ,WAAW;GAChD,sBAAsB,WAAW,QAAQ,eAAe;GACxD,2BAA2B,WAAW,QAAQ,oBAAoB;GAClE,gBAAgB,WAAW,QAAQ;GACnC,eAAe,WAAW,QAAQ;GAClC,gBAAgB,YAAY,WAAW,QAAQ,gBAAgB,OAAO;GACtE,gBAAgB,YAAY,WAAW,QAAQ,gBAAgB,OAAO;GACtE,mBAAmB;IACjB,uBAAuB,YAAY,sBAAsB,KAAK;IAC9D,WAAW,QAAQ,cAAc;GACnC;GACA,iBAAiB;IACf,oBAAoB;IACpB,WAAW,QAAQ,YAAY;GACjC;EAG8B,CAAC;CACnC,CAAC;CAED,WAAW,MAAM;CAIjB,MAAM,cAAc,YAAY,OAAO,QAAQ,EAAE,UAAU,UAAU,eAAe;EAClF;EACA;EACA;CACF,EAAE;CACF,MAAM,QAAQ;EAAE,GAAG,OAAO,MAAM;EAAS,GAAG;CAAY;CAGxD,MAAM,QAAQ,QAAQ,aAAa,KAAK;CAIxC,sBAAsB;EACpB,IAAI,MAAM,mBAAmB,UAAU,eAAe,WAAW,gBAAgB,SAC/E,YAAY;CAEhB,GAAG,CAAC,MAAM,cAAc,CAAC;CAGzB,MAAM,UAAU,QAAQ,WAAW,OAAO,mBAAmB,KAAK,CAAC;CAEnE,MAAM,aAAa,aAChB,UAAU,eAAe,YAAY;EACpC,IAAI,CAAC,SAAS;EACd,MAAM,OAAO,WAAW,QAAQ,aAAa,OAAO,MAAM,OAAO;EACjE,YAAY,SAAS,WAAW,QAAQ,WAAW,OAAO,mBAAmB,IAAI,CAAC,CAAC;CACrF,GACA,CAAC,MAAM,CACT;CAEA,sBAAsB;EACpB,WAAW;EACX,OAAO,OAAO,MAAM,UAAU,UAAU;CAC1C,GAAG,CAAC,QAAQ,UAAU,CAAC;CAGvB,MAAM,UAAU,aACb,YAAgC;EAC/B,eAAe,UAAU;EACzB,WAAW,OAAO;CACpB,GACA,CAAC,UAAU,CACb;CAEA,MAAM,WAAW,aAAa,YAAgC;EAC5D,gBAAgB,UAAU;CAC5B,GAAG,CAAC,CAAC;CAEL,OAAO;EACL;EACA,OAAO,OAAO;EACd;EACA;EACA;EACA,WAAW,OAAO;EAClB,WAAW,OAAO;EAClB,YAAY,OAAO;CACrB;AACF"}
1
+ {"version":3,"file":"use-slider.js","names":[],"sources":["../../../../src/ui/hooks/use-slider.ts"],"sourcesContent":["import type { SliderInput, SliderState } from '@videojs/core';\nimport {\n createSlider,\n type SliderApi,\n type SliderOptions,\n type SliderRootProps,\n type SliderRootStyle,\n type SliderThumbProps,\n selectControls,\n} from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport { applyStyles, isRTL } from '@videojs/utils/dom';\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { useOptionalPlayer } from '../../player/context';\nimport { useDestroy } from '../../utils/use-destroy';\nimport { useForceRender } from '../../utils/use-force-render';\nimport { useLatestRef } from '../../utils/use-latest-ref';\n\nexport interface UseSliderOptions<State extends SliderState = SliderState>\n extends Pick<\n SliderOptions,\n | 'getPercent'\n | 'getStepPercent'\n | 'getLargeStepPercent'\n | 'changeThrottle'\n | 'onValueChange'\n | 'onValueCommit'\n | 'onDragStart'\n | 'onDragEnd'\n > {\n computeState: (input: SliderInput) => State;\n orientation?: 'horizontal' | 'vertical' | undefined;\n disabled?: boolean | undefined;\n /** Adjust a raw 0–100 percent for thumb alignment. Called for fill and pointer percents. */\n adjustPercent?: ((rawPercent: number, thumbSize: number, trackSize: number) => number) | undefined;\n /** Compute CSS variable map from the (possibly alignment-adjusted) state. */\n getCSSVars: (state: State) => Record<string, string>;\n}\n\nexport interface UseSliderReturnValue<State extends SliderState = SliderState> {\n state: State;\n input: SliderApi['input'];\n cssVars: Record<string, string>;\n rootRef: React.RefCallback<HTMLElement>;\n thumbRef: React.RefCallback<HTMLElement>;\n rootProps: SliderRootProps;\n rootStyle: SliderRootStyle;\n thumbProps: SliderThumbProps;\n}\n\n/**\n * Manages slider input lifecycle for React.\n *\n * Wraps `createSlider()` from `@videojs/core/dom` and subscribes to its\n * input state via `useSnapshot`. Returns split props for the root\n * (pointer events) and thumb (keyboard/focus) elements.\n */\nexport function useSlider<State extends SliderState = SliderState>(\n options: UseSliderOptions<State>\n): UseSliderReturnValue<State> {\n const optionsRef = useLatestRef(options);\n const controls = useOptionalPlayer(selectControls);\n const requestControlsLock = controls?.requestControlsLock;\n const releaseControlsLockRef = useRef<(() => void) | null>(null);\n\n const releaseControlsLock = useCallback(() => {\n releaseControlsLockRef.current?.();\n releaseControlsLockRef.current = null;\n }, []);\n\n useEffect(() => releaseControlsLock, [releaseControlsLock]);\n\n const rootElementRef = useRef<HTMLElement | null>(null);\n const thumbElementRef = useRef<HTMLElement | null>(null);\n const forceRender = useForceRender();\n\n // Lazy-init the slider handle. Stable across re-renders.\n const [slider] = useState<SliderApi>(() => {\n const stableOptions: SliderOptions = {\n getElement: () => rootElementRef.current!,\n getThumbElement: () => thumbElementRef.current,\n getOrientation: () => optionsRef.current.orientation ?? 'horizontal',\n isRTL: () => (rootElementRef.current ? isRTL(rootElementRef.current) : false),\n isDisabled: () => optionsRef.current.disabled ?? false,\n getPercent: () => optionsRef.current.getPercent(),\n getStepPercent: () => optionsRef.current.getStepPercent(),\n getLargeStepPercent: () => optionsRef.current.getLargeStepPercent(),\n changeThrottle: optionsRef.current.changeThrottle,\n adjustPercent: optionsRef.current.adjustPercent,\n onValueChange: (percent) => optionsRef.current.onValueChange?.(percent),\n onValueCommit: (percent) => optionsRef.current.onValueCommit?.(percent),\n onDragStart: () => {\n releaseControlsLockRef.current ??= requestControlsLock?.() ?? null;\n optionsRef.current.onDragStart?.();\n },\n onDragEnd: () => {\n releaseControlsLock();\n optionsRef.current.onDragEnd?.();\n },\n };\n\n return createSlider(stableOptions);\n });\n\n useDestroy(slider);\n\n // Percentage changes are rendered directly below. React only needs to\n // re-render when interaction state changes.\n const interaction = useSnapshot(slider.input, ({ dragging, pointing, focused }) => ({\n dragging,\n pointing,\n focused,\n }));\n const input = { ...slider.input.current, ...interaction };\n\n // Compute derived state from input + caller-provided projection.\n const state = options.computeState(input);\n\n // Force a synchronous re-render after mount so edge thumb alignment\n // can read DOM measurements from the now-populated element refs.\n useLayoutEffect(() => {\n if (state.thumbAlignment === 'edge' && rootElementRef.current && thumbElementRef.current) {\n forceRender();\n }\n }, [state.thumbAlignment]);\n\n // Adjust CSS var percents for edge thumb alignment using live DOM measurements.\n const cssVars = options.getCSSVars(slider.adjustForAlignment(state));\n\n const syncStyles = useCallback(\n (element = rootElementRef.current) => {\n if (!element) return;\n const next = optionsRef.current.computeState(slider.input.current);\n applyStyles(element, optionsRef.current.getCSSVars(slider.adjustForAlignment(next)));\n },\n [slider]\n );\n\n useLayoutEffect(() => {\n syncStyles();\n return slider.input.subscribe(syncStyles);\n }, [slider, syncStyles]);\n\n // Ref callbacks for root and thumb elements.\n const rootRef = useCallback(\n (element: HTMLElement | null) => {\n rootElementRef.current = element;\n syncStyles(element);\n },\n [syncStyles]\n );\n\n const thumbRef = useCallback((element: HTMLElement | null) => {\n thumbElementRef.current = element;\n }, []);\n\n return {\n state,\n input: slider.input,\n cssVars,\n rootRef,\n thumbRef,\n rootProps: slider.rootProps,\n rootStyle: slider.rootStyle,\n thumbProps: slider.thumbProps,\n };\n}\n\nexport namespace useSlider {\n export type Options = UseSliderOptions;\n export type ReturnValue = UseSliderReturnValue;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAyDA,SAAgB,UACd,SAC6B;CAC7B,MAAM,aAAa,aAAa,OAAO;CAEvC,MAAM,sBADW,kBAAkB,cACA,CAAC,EAAE;CACtC,MAAM,yBAAyB,OAA4B,IAAI;CAE/D,MAAM,sBAAsB,kBAAkB;EAC5C,uBAAuB,UAAU;EACjC,uBAAuB,UAAU;CACnC,GAAG,CAAC,CAAC;CAEL,gBAAgB,qBAAqB,CAAC,mBAAmB,CAAC;CAE1D,MAAM,iBAAiB,OAA2B,IAAI;CACtD,MAAM,kBAAkB,OAA2B,IAAI;CACvD,MAAM,cAAc,eAAe;CAGnC,MAAM,CAAC,UAAU,eAA0B;EAwBzC,OAAO,aAAa;GAtBlB,kBAAkB,eAAe;GACjC,uBAAuB,gBAAgB;GACvC,sBAAsB,WAAW,QAAQ,eAAe;GACxD,aAAc,eAAe,UAAU,MAAM,eAAe,OAAO,IAAI;GACvE,kBAAkB,WAAW,QAAQ,YAAY;GACjD,kBAAkB,WAAW,QAAQ,WAAW;GAChD,sBAAsB,WAAW,QAAQ,eAAe;GACxD,2BAA2B,WAAW,QAAQ,oBAAoB;GAClE,gBAAgB,WAAW,QAAQ;GACnC,eAAe,WAAW,QAAQ;GAClC,gBAAgB,YAAY,WAAW,QAAQ,gBAAgB,OAAO;GACtE,gBAAgB,YAAY,WAAW,QAAQ,gBAAgB,OAAO;GACtE,mBAAmB;IACjB,uBAAuB,YAAY,sBAAsB,KAAK;IAC9D,WAAW,QAAQ,cAAc;GACnC;GACA,iBAAiB;IACf,oBAAoB;IACpB,WAAW,QAAQ,YAAY;GACjC;EAG8B,CAAC;CACnC,CAAC;CAED,WAAW,MAAM;CAIjB,MAAM,cAAc,YAAY,OAAO,QAAQ,EAAE,UAAU,UAAU,eAAe;EAClF;EACA;EACA;CACF,EAAE;CACF,MAAM,QAAQ;EAAE,GAAG,OAAO,MAAM;EAAS,GAAG;CAAY;CAGxD,MAAM,QAAQ,QAAQ,aAAa,KAAK;CAIxC,sBAAsB;EACpB,IAAI,MAAM,mBAAmB,UAAU,eAAe,WAAW,gBAAgB,SAC/E,YAAY;CAEhB,GAAG,CAAC,MAAM,cAAc,CAAC;CAGzB,MAAM,UAAU,QAAQ,WAAW,OAAO,mBAAmB,KAAK,CAAC;CAEnE,MAAM,aAAa,aAChB,UAAU,eAAe,YAAY;EACpC,IAAI,CAAC,SAAS;EACd,MAAM,OAAO,WAAW,QAAQ,aAAa,OAAO,MAAM,OAAO;EACjE,YAAY,SAAS,WAAW,QAAQ,WAAW,OAAO,mBAAmB,IAAI,CAAC,CAAC;CACrF,GACA,CAAC,MAAM,CACT;CAEA,sBAAsB;EACpB,WAAW;EACX,OAAO,OAAO,MAAM,UAAU,UAAU;CAC1C,GAAG,CAAC,QAAQ,UAAU,CAAC;CAGvB,MAAM,UAAU,aACb,YAAgC;EAC/B,eAAe,UAAU;EACzB,WAAW,OAAO;CACpB,GACA,CAAC,UAAU,CACb;CAEA,MAAM,WAAW,aAAa,YAAgC;EAC5D,gBAAgB,UAAU;CAC5B,GAAG,CAAC,CAAC;CAEL,OAAO;EACL;EACA,OAAO,OAAO;EACd;EACA;EACA;EACA,WAAW,OAAO;EAClB,WAAW,OAAO;EAClB,YAAY,OAAO;CACrB;AACF"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useContainer, usePlayer } from "../../player/context.js";
3
2
  import { createHotkey, isHotkeyToggleAction, resolveHotkeyAction } from "@videojs/core/dom";
4
3
  import { useEffect } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"hotkey.js","names":[],"sources":["../../../../src/ui/hotkey/hotkey.tsx"],"sourcesContent":["'use client';\n\nimport type { AnyPlayerStore } from '@videojs/core/dom';\nimport { createHotkey, type HotkeyActionName, isHotkeyToggleAction, resolveHotkeyAction } from '@videojs/core/dom';\nimport type { ReactNode } from 'react';\nimport { useEffect } from 'react';\n\nimport { useContainer, usePlayer } from '../../player/context';\n\nexport interface HotkeyProps {\n keys: string;\n action: HotkeyActionName | (string & {});\n value?: number;\n disabled?: boolean;\n target?: 'player' | 'document';\n}\n\nexport function Hotkey({ keys, action, value, disabled, target }: HotkeyProps): ReactNode {\n const store = usePlayer() as AnyPlayerStore;\n const container = useContainer();\n\n useEffect(() => {\n if (!container || !keys || !action || disabled) return;\n\n const resolver = resolveHotkeyAction(action);\n if (!resolver) return;\n\n return createHotkey(container, {\n keys,\n action,\n value,\n target,\n disabled,\n repeatable: !isHotkeyToggleAction(action),\n onActivate: (_event, key) => {\n resolver({ store, key, value });\n },\n });\n }, [container, store, keys, action, value, disabled, target]);\n\n return null;\n}\n\nexport namespace Hotkey {\n export type Props = HotkeyProps;\n}\n\n/** @deprecated Use `HotkeyProps` instead. */\nexport type MediaHotkeyProps = HotkeyProps;\n\n/** @deprecated Use `Hotkey` instead. */\nexport const MediaHotkey = Hotkey;\n"],"mappings":";;;;;AAiBA,SAAgB,OAAO,EAAE,MAAM,QAAQ,OAAO,UAAU,UAAkC;CACxF,MAAM,QAAQ,UAAU;CACxB,MAAM,YAAY,aAAa;CAE/B,gBAAgB;EACd,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,UAAU;EAEhD,MAAM,WAAW,oBAAoB,MAAM;EAC3C,IAAI,CAAC,UAAU;EAEf,OAAO,aAAa,WAAW;GAC7B;GACA;GACA;GACA;GACA;GACA,YAAY,CAAC,qBAAqB,MAAM;GACxC,aAAa,QAAQ,QAAQ;IAC3B,SAAS;KAAE;KAAO;KAAK;IAAM,CAAC;GAChC;EACF,CAAC;CACH,GAAG;EAAC;EAAW;EAAO;EAAM;EAAQ;EAAO;EAAU;CAAM,CAAC;CAE5D,OAAO;AACT;;AAUA,MAAa,cAAc"}
1
+ {"version":3,"file":"hotkey.js","names":[],"sources":["../../../../src/ui/hotkey/hotkey.tsx"],"sourcesContent":["import type { HotkeyProps as CoreHotkeyProps } from '@videojs/core';\nimport type { AnyPlayerStore } from '@videojs/core/dom';\nimport { createHotkey, isHotkeyToggleAction, resolveHotkeyAction } from '@videojs/core/dom';\nimport type { ReactNode } from 'react';\nimport { useEffect } from 'react';\n\nimport { useContainer, usePlayer } from '../../player/context';\n\nexport interface HotkeyProps extends CoreHotkeyProps {}\n\nexport function Hotkey({ keys, action, value, disabled, target }: HotkeyProps): ReactNode {\n const store = usePlayer() as AnyPlayerStore;\n const container = useContainer();\n\n useEffect(() => {\n if (!container || !keys || !action || disabled) return;\n\n const resolver = resolveHotkeyAction(action);\n if (!resolver) return;\n\n return createHotkey(container, {\n keys,\n action,\n value,\n target,\n disabled,\n repeatable: !isHotkeyToggleAction(action),\n onActivate: (_event, key) => {\n resolver({ store, key, value });\n },\n });\n }, [container, store, keys, action, value, disabled, target]);\n\n return null;\n}\n\nexport namespace Hotkey {\n export type Props = HotkeyProps;\n}\n\n/** @deprecated Use `HotkeyProps` instead. */\nexport type MediaHotkeyProps = HotkeyProps;\n\n/** @deprecated Use `Hotkey` instead. */\nexport const MediaHotkey = Hotkey;\n"],"mappings":";;;;AAUA,SAAgB,OAAO,EAAE,MAAM,QAAQ,OAAO,UAAU,UAAkC;CACxF,MAAM,QAAQ,UAAU;CACxB,MAAM,YAAY,aAAa;CAE/B,gBAAgB;EACd,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,UAAU;EAEhD,MAAM,WAAW,oBAAoB,MAAM;EAC3C,IAAI,CAAC,UAAU;EAEf,OAAO,aAAa,WAAW;GAC7B;GACA;GACA;GACA;GACA;GACA,YAAY,CAAC,qBAAqB,MAAM;GACxC,aAAa,QAAQ,QAAQ;IAC3B,SAAS;KAAE;KAAO;KAAK;IAAM,CAAC;GAChC;EACF,CAAC;CACH,GAAG;EAAC;EAAW;EAAO;EAAM;EAAQ;EAAO;EAAU;CAAM,CAAC;CAE5D,OAAO;AACT;;AAUA,MAAa,cAAc"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useContainer } from "../../player/context.js";
3
2
  import { getHotkeyCoordinator } from "@videojs/core/dom";
4
3
  import { useEffect, useState } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"use-hotkey-shortcut.js","names":[],"sources":["../../../../src/ui/hotkey/use-hotkey-shortcut.ts"],"sourcesContent":["'use client';\n\nimport { getHotkeyCoordinator, type HotkeyShortcutDetails } from '@videojs/core/dom';\nimport { useEffect, useState } from 'react';\n\nimport { useContainer } from '../../player/context';\n\nexport function useHotkeyShortcut(action: string | undefined, value?: number | undefined): HotkeyShortcutDetails {\n const container = useContainer();\n\n const [shortcut, setShortcut] = useState<HotkeyShortcutDetails>({});\n\n useEffect(() => {\n if (!container || !action) {\n setShortcut({});\n return;\n }\n\n const coordinator = getHotkeyCoordinator(container);\n const update = () => setShortcut(coordinator.getShortcut(action, value));\n\n update();\n return coordinator.subscribeShortcutChanges(update);\n }, [container, action, value]);\n\n return shortcut;\n}\n"],"mappings":";;;;;AAOA,SAAgB,kBAAkB,QAA4B,OAAmD;CAC/G,MAAM,YAAY,aAAa;CAE/B,MAAM,CAAC,UAAU,eAAe,SAAgC,CAAC,CAAC;CAElE,gBAAgB;EACd,IAAI,CAAC,aAAa,CAAC,QAAQ;GACzB,YAAY,CAAC,CAAC;GACd;EACF;EAEA,MAAM,cAAc,qBAAqB,SAAS;EAClD,MAAM,eAAe,YAAY,YAAY,YAAY,QAAQ,KAAK,CAAC;EAEvE,OAAO;EACP,OAAO,YAAY,yBAAyB,MAAM;CACpD,GAAG;EAAC;EAAW;EAAQ;CAAK,CAAC;CAE7B,OAAO;AACT"}
1
+ {"version":3,"file":"use-hotkey-shortcut.js","names":[],"sources":["../../../../src/ui/hotkey/use-hotkey-shortcut.ts"],"sourcesContent":["import { getHotkeyCoordinator, type HotkeyShortcutDetails } from '@videojs/core/dom';\nimport { useEffect, useState } from 'react';\n\nimport { useContainer } from '../../player/context';\n\nexport function useHotkeyShortcut(action: string | undefined, value?: number | undefined): HotkeyShortcutDetails {\n const container = useContainer();\n\n const [shortcut, setShortcut] = useState<HotkeyShortcutDetails>({});\n\n useEffect(() => {\n if (!container || !action) {\n setShortcut({});\n return;\n }\n\n const coordinator = getHotkeyCoordinator(container);\n const update = () => setShortcut(coordinator.getShortcut(action, value));\n\n update();\n return coordinator.subscribeShortcutChanges(update);\n }, [container, action, value]);\n\n return shortcut;\n}\n"],"mappings":";;;;AAKA,SAAgB,kBAAkB,QAA4B,OAAmD;CAC/G,MAAM,YAAY,aAAa;CAE/B,MAAM,CAAC,UAAU,eAAe,SAAgC,CAAC,CAAC;CAElE,gBAAgB;EACd,IAAI,CAAC,aAAa,CAAC,QAAQ;GACzB,YAAY,CAAC,CAAC;GACd;EACF;EAEA,MAAM,cAAc,qBAAqB,SAAS;EAClD,MAAM,eAAe,YAAY,YAAY,YAAY,QAAQ,KAAK,CAAC;EAEvE,OAAO;EACP,OAAO,YAAY,yBAAyB,MAAM;CACpD,GAAG;EAAC;EAAW;EAAQ;CAAK,CAAC;CAE7B,OAAO;AACT"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useContainer } from "../../player/context.js";
3
2
  import { useLatestRef } from "../../utils/use-latest-ref.js";
4
3
  import { createHotkey } from "@videojs/core/dom";
@@ -1 +1 @@
1
- {"version":3,"file":"use-hotkey.js","names":[],"sources":["../../../../src/ui/hotkey/use-hotkey.ts"],"sourcesContent":["'use client';\n\nimport { createHotkey } from '@videojs/core/dom';\nimport { useEffect } from 'react';\n\nimport { useContainer } from '../../player/context';\nimport { useLatestRef } from '../../utils/use-latest-ref';\n\nexport interface UseHotkeyOptions {\n keys: string;\n onActivate: (event: KeyboardEvent, key: string) => void;\n target?: 'player' | 'document';\n repeatable?: boolean;\n disabled?: boolean;\n}\n\nexport function useHotkey(options: UseHotkeyOptions): void {\n const { keys, target = 'player', repeatable = true, disabled = false } = options;\n const container = useContainer();\n const onActivateRef = useLatestRef(options.onActivate);\n\n useEffect(() => {\n if (!container || !keys || disabled) return;\n\n return createHotkey(container, {\n keys,\n target,\n repeatable,\n disabled,\n onActivate: (event, key) => onActivateRef.current(event, key),\n });\n }, [container, keys, target, repeatable, disabled]);\n}\n"],"mappings":";;;;;;AAgBA,SAAgB,UAAU,SAAiC;CACzD,MAAM,EAAE,MAAM,SAAS,UAAU,aAAa,MAAM,WAAW,UAAU;CACzE,MAAM,YAAY,aAAa;CAC/B,MAAM,gBAAgB,aAAa,QAAQ,UAAU;CAErD,gBAAgB;EACd,IAAI,CAAC,aAAa,CAAC,QAAQ,UAAU;EAErC,OAAO,aAAa,WAAW;GAC7B;GACA;GACA;GACA;GACA,aAAa,OAAO,QAAQ,cAAc,QAAQ,OAAO,GAAG;EAC9D,CAAC;CACH,GAAG;EAAC;EAAW;EAAM;EAAQ;EAAY;CAAQ,CAAC;AACpD"}
1
+ {"version":3,"file":"use-hotkey.js","names":[],"sources":["../../../../src/ui/hotkey/use-hotkey.ts"],"sourcesContent":["import { createHotkey } from '@videojs/core/dom';\nimport { useEffect } from 'react';\n\nimport { useContainer } from '../../player/context';\nimport { useLatestRef } from '../../utils/use-latest-ref';\n\nexport interface UseHotkeyOptions {\n keys: string;\n onActivate: (event: KeyboardEvent, key: string) => void;\n target?: 'player' | 'document';\n repeatable?: boolean;\n disabled?: boolean;\n}\n\nexport function useHotkey(options: UseHotkeyOptions): void {\n const { keys, target = 'player', repeatable = true, disabled = false } = options;\n const container = useContainer();\n const onActivateRef = useLatestRef(options.onActivate);\n\n useEffect(() => {\n if (!container || !keys || disabled) return;\n\n return createHotkey(container, {\n keys,\n target,\n repeatable,\n disabled,\n onActivate: (event, key) => onActivateRef.current(event, key),\n });\n }, [container, keys, target, repeatable, disabled]);\n}\n"],"mappings":";;;;;AAcA,SAAgB,UAAU,SAAiC;CACzD,MAAM,EAAE,MAAM,SAAS,UAAU,aAAa,MAAM,WAAW,UAAU;CACzE,MAAM,YAAY,aAAa;CAC/B,MAAM,gBAAgB,aAAa,QAAQ,UAAU;CAErD,gBAAgB;EACd,IAAI,CAAC,aAAa,CAAC,QAAQ,UAAU;EAErC,OAAO,aAAa,WAAW;GAC7B;GACA;GACA;GACA;GACA,aAAa,OAAO,QAAQ,cAAc,QAAQ,OAAO,GAAG;EAC9D,CAAC;CACH,GAAG;EAAC;EAAW;EAAM;EAAQ;EAAY;CAAQ,CAAC;AACpD"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useContainer } from "../../player/context.js";
3
2
  import { useLatestRef } from "../../utils/use-latest-ref.js";
4
3
  import { getIndicatorVisibilityCoordinator } from "@videojs/core/dom";
@@ -1 +1 @@
1
- {"version":3,"file":"use-indicator-visibility.js","names":[],"sources":["../../../../src/ui/input-indicator/use-indicator-visibility.ts"],"sourcesContent":["'use client';\n\nimport type { IndicatorVisibilityHandle } from '@videojs/core';\nimport { getIndicatorVisibilityCoordinator } from '@videojs/core/dom';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useContainer } from '../../player/context';\nimport { useLatestRef } from '../../utils/use-latest-ref';\n\nexport function useIndicatorVisibility(close: () => void): () => void {\n const container = useContainer();\n const closeRef = useLatestRef(close);\n const coordinatorRef = useRef<ReturnType<typeof getIndicatorVisibilityCoordinator> | null>(null);\n const [handle] = useState<IndicatorVisibilityHandle>(() => ({\n close: () => closeRef.current(),\n }));\n\n useEffect(() => {\n if (!container) return;\n\n const coordinator = getIndicatorVisibilityCoordinator(container);\n coordinatorRef.current = coordinator;\n\n return coordinator.register(handle);\n }, [container, handle]);\n\n return useCallback(() => {\n coordinatorRef.current?.show(handle);\n }, [handle]);\n}\n"],"mappings":";;;;;;AASA,SAAgB,uBAAuB,OAA+B;CACpE,MAAM,YAAY,aAAa;CAC/B,MAAM,WAAW,aAAa,KAAK;CACnC,MAAM,iBAAiB,OAAoE,IAAI;CAC/F,MAAM,CAAC,UAAU,gBAA2C,EAC1D,aAAa,SAAS,QAAQ,EAChC,EAAE;CAEF,gBAAgB;EACd,IAAI,CAAC,WAAW;EAEhB,MAAM,cAAc,kCAAkC,SAAS;EAC/D,eAAe,UAAU;EAEzB,OAAO,YAAY,SAAS,MAAM;CACpC,GAAG,CAAC,WAAW,MAAM,CAAC;CAEtB,OAAO,kBAAkB;EACvB,eAAe,SAAS,KAAK,MAAM;CACrC,GAAG,CAAC,MAAM,CAAC;AACb"}
1
+ {"version":3,"file":"use-indicator-visibility.js","names":[],"sources":["../../../../src/ui/input-indicator/use-indicator-visibility.ts"],"sourcesContent":["import type { IndicatorVisibilityHandle } from '@videojs/core';\nimport { getIndicatorVisibilityCoordinator } from '@videojs/core/dom';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useContainer } from '../../player/context';\nimport { useLatestRef } from '../../utils/use-latest-ref';\n\nexport function useIndicatorVisibility(close: () => void): () => void {\n const container = useContainer();\n const closeRef = useLatestRef(close);\n const coordinatorRef = useRef<ReturnType<typeof getIndicatorVisibilityCoordinator> | null>(null);\n const [handle] = useState<IndicatorVisibilityHandle>(() => ({\n close: () => closeRef.current(),\n }));\n\n useEffect(() => {\n if (!container) return;\n\n const coordinator = getIndicatorVisibilityCoordinator(container);\n coordinatorRef.current = coordinator;\n\n return coordinator.register(handle);\n }, [container, handle]);\n\n return useCallback(() => {\n coordinatorRef.current?.show(handle);\n }, [handle]);\n}\n"],"mappings":";;;;;AAOA,SAAgB,uBAAuB,OAA+B;CACpE,MAAM,YAAY,aAAa;CAC/B,MAAM,WAAW,aAAa,KAAK;CACnC,MAAM,iBAAiB,OAAoE,IAAI;CAC/F,MAAM,CAAC,UAAU,gBAA2C,EAC1D,aAAa,SAAS,QAAQ,EAChC,EAAE;CAEF,gBAAgB;EACd,IAAI,CAAC,WAAW;EAEhB,MAAM,cAAc,kCAAkC,SAAS;EAC/D,eAAe,UAAU;EAEzB,OAAO,YAAY,SAAS,MAAM;CACpC,GAAG,CAAC,WAAW,MAAM,CAAC;CAEtB,OAAO,kBAAkB;EACvB,eAAe,SAAS,KAAK,MAAM;CACrC,GAAG,CAAC,MAAM,CAAC;AACb"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useContainer, usePlayer } from "../../player/context.js";
3
2
  import { useLatestRef } from "../../utils/use-latest-ref.js";
4
3
  import { getMediaSnapshot, subscribeToInputActions } from "@videojs/core/dom";