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

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 (742) hide show
  1. package/dist/default/i18n/context.js +0 -1
  2. package/dist/default/i18n/context.js.map +1 -1
  3. package/dist/default/i18n/create-i18n.js +0 -1
  4. package/dist/default/i18n/create-i18n.js.map +1 -1
  5. package/dist/default/media/audio.js +0 -1
  6. package/dist/default/media/audio.js.map +1 -1
  7. package/dist/default/media/video.js +0 -1
  8. package/dist/default/media/video.js.map +1 -1
  9. package/dist/default/player/container.js +0 -1
  10. package/dist/default/player/container.js.map +1 -1
  11. package/dist/default/player/context.js +0 -1
  12. package/dist/default/player/context.js.map +1 -1
  13. package/dist/default/player/create-player.js +0 -1
  14. package/dist/default/player/create-player.js.map +1 -1
  15. package/dist/default/player/popup-group-context.js +0 -1
  16. package/dist/default/player/popup-group-context.js.map +1 -1
  17. package/dist/default/presets/audio/minimal-skin.css +16 -19
  18. package/dist/default/presets/audio/minimal-skin.js +1 -0
  19. package/dist/default/presets/audio/minimal-skin.js.map +1 -1
  20. package/dist/default/presets/audio/minimal-skin.tailwind.js +1 -0
  21. package/dist/default/presets/audio/minimal-skin.tailwind.js.map +1 -1
  22. package/dist/default/presets/audio/skin.css +27 -30
  23. package/dist/default/presets/audio/skin.js +1 -0
  24. package/dist/default/presets/audio/skin.js.map +1 -1
  25. package/dist/default/presets/audio/skin.tailwind.js +1 -0
  26. package/dist/default/presets/audio/skin.tailwind.js.map +1 -1
  27. package/dist/default/presets/background/skin.js +1 -0
  28. package/dist/default/presets/background/skin.js.map +1 -1
  29. package/dist/default/presets/live-audio/minimal-skin.css +16 -19
  30. package/dist/default/presets/live-audio/minimal-skin.js +1 -0
  31. package/dist/default/presets/live-audio/minimal-skin.js.map +1 -1
  32. package/dist/default/presets/live-audio/minimal-skin.tailwind.js +1 -0
  33. package/dist/default/presets/live-audio/minimal-skin.tailwind.js.map +1 -1
  34. package/dist/default/presets/live-audio/skin.css +27 -30
  35. package/dist/default/presets/live-audio/skin.js +1 -0
  36. package/dist/default/presets/live-audio/skin.js.map +1 -1
  37. package/dist/default/presets/live-audio/skin.tailwind.js +1 -0
  38. package/dist/default/presets/live-audio/skin.tailwind.js.map +1 -1
  39. package/dist/default/presets/live-video/minimal-skin.css +20 -19
  40. package/dist/default/presets/live-video/minimal-skin.js +1 -0
  41. package/dist/default/presets/live-video/minimal-skin.js.map +1 -1
  42. package/dist/default/presets/live-video/minimal-skin.tailwind.js +1 -0
  43. package/dist/default/presets/live-video/minimal-skin.tailwind.js.map +1 -1
  44. package/dist/default/presets/live-video/skin.css +31 -30
  45. package/dist/default/presets/live-video/skin.js +1 -0
  46. package/dist/default/presets/live-video/skin.js.map +1 -1
  47. package/dist/default/presets/live-video/skin.tailwind.js +1 -0
  48. package/dist/default/presets/live-video/skin.tailwind.js.map +1 -1
  49. package/dist/default/presets/video/minimal-skin.css +20 -19
  50. package/dist/default/presets/video/minimal-skin.js +1 -0
  51. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  52. package/dist/default/presets/video/minimal-skin.tailwind.js +1 -0
  53. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  54. package/dist/default/presets/video/skin.css +31 -30
  55. package/dist/default/presets/video/skin.js +1 -0
  56. package/dist/default/presets/video/skin.js.map +1 -1
  57. package/dist/default/presets/video/skin.tailwind.js +1 -0
  58. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  59. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +6 -6
  60. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  61. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +1 -1
  62. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  63. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +4 -4
  64. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  65. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -1
  66. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  67. package/dist/default/ui/airplay-button/airplay-button.js +0 -1
  68. package/dist/default/ui/airplay-button/airplay-button.js.map +1 -1
  69. package/dist/default/ui/alert-dialog/alert-dialog-close.js +0 -1
  70. package/dist/default/ui/alert-dialog/alert-dialog-close.js.map +1 -1
  71. package/dist/default/ui/alert-dialog/alert-dialog-description.js +0 -1
  72. package/dist/default/ui/alert-dialog/alert-dialog-description.js.map +1 -1
  73. package/dist/default/ui/alert-dialog/alert-dialog-popup.js +0 -1
  74. package/dist/default/ui/alert-dialog/alert-dialog-popup.js.map +1 -1
  75. package/dist/default/ui/alert-dialog/alert-dialog-root.js +0 -1
  76. package/dist/default/ui/alert-dialog/alert-dialog-root.js.map +1 -1
  77. package/dist/default/ui/alert-dialog/alert-dialog-title.js +0 -1
  78. package/dist/default/ui/alert-dialog/alert-dialog-title.js.map +1 -1
  79. package/dist/default/ui/alert-dialog/context.js +0 -1
  80. package/dist/default/ui/alert-dialog/context.js.map +1 -1
  81. package/dist/default/ui/audio-track/use-audio-track-options.js +0 -1
  82. package/dist/default/ui/audio-track/use-audio-track-options.js.map +1 -1
  83. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group.js +0 -1
  84. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group.js.map +1 -1
  85. package/dist/default/ui/buffering-indicator/buffering-indicator.js +0 -1
  86. package/dist/default/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  87. package/dist/default/ui/captions-button/captions-button.js +0 -1
  88. package/dist/default/ui/captions-button/captions-button.js.map +1 -1
  89. package/dist/default/ui/captions-radio-group/captions-radio-group.js +0 -1
  90. package/dist/default/ui/captions-radio-group/captions-radio-group.js.map +1 -1
  91. package/dist/default/ui/captions-radio-group/use-captions-options.js +0 -1
  92. package/dist/default/ui/captions-radio-group/use-captions-options.js.map +1 -1
  93. package/dist/default/ui/cast-button/cast-button.js +0 -1
  94. package/dist/default/ui/cast-button/cast-button.js.map +1 -1
  95. package/dist/default/ui/controls/context.js +0 -1
  96. package/dist/default/ui/controls/context.js.map +1 -1
  97. package/dist/default/ui/controls/controls-group.js +0 -1
  98. package/dist/default/ui/controls/controls-group.js.map +1 -1
  99. package/dist/default/ui/controls/controls-root.js +0 -1
  100. package/dist/default/ui/controls/controls-root.js.map +1 -1
  101. package/dist/default/ui/create-context-part.js +0 -1
  102. package/dist/default/ui/create-context-part.js.map +1 -1
  103. package/dist/default/ui/create-media-button.js +0 -1
  104. package/dist/default/ui/create-media-button.js.map +1 -1
  105. package/dist/default/ui/error-dialog/context.js +0 -1
  106. package/dist/default/ui/error-dialog/context.js.map +1 -1
  107. package/dist/default/ui/error-dialog/error-dialog-close.js +0 -1
  108. package/dist/default/ui/error-dialog/error-dialog-close.js.map +1 -1
  109. package/dist/default/ui/error-dialog/error-dialog-description.js +0 -1
  110. package/dist/default/ui/error-dialog/error-dialog-description.js.map +1 -1
  111. package/dist/default/ui/error-dialog/error-dialog-root.js +0 -1
  112. package/dist/default/ui/error-dialog/error-dialog-root.js.map +1 -1
  113. package/dist/default/ui/error-dialog/error-dialog-title.js +0 -1
  114. package/dist/default/ui/error-dialog/error-dialog-title.js.map +1 -1
  115. package/dist/default/ui/fullscreen-button/fullscreen-button.js +0 -1
  116. package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  117. package/dist/default/ui/gesture/gesture.js +0 -1
  118. package/dist/default/ui/gesture/gesture.js.map +1 -1
  119. package/dist/default/ui/gesture/use-doubletap-gesture.js +0 -1
  120. package/dist/default/ui/gesture/use-doubletap-gesture.js.map +1 -1
  121. package/dist/default/ui/gesture/use-tap-gesture.js +0 -1
  122. package/dist/default/ui/gesture/use-tap-gesture.js.map +1 -1
  123. package/dist/default/ui/hooks/create-radio-options-hook.js +0 -1
  124. package/dist/default/ui/hooks/create-radio-options-hook.js.map +1 -1
  125. package/dist/default/ui/hooks/use-button.js +0 -1
  126. package/dist/default/ui/hooks/use-button.js.map +1 -1
  127. package/dist/default/ui/hooks/use-positioned-state.js +0 -1
  128. package/dist/default/ui/hooks/use-positioned-state.js.map +1 -1
  129. package/dist/default/ui/hooks/use-slider.js +0 -1
  130. package/dist/default/ui/hooks/use-slider.js.map +1 -1
  131. package/dist/default/ui/hotkey/hotkey.js +0 -1
  132. package/dist/default/ui/hotkey/hotkey.js.map +1 -1
  133. package/dist/default/ui/hotkey/use-hotkey-shortcut.js +0 -1
  134. package/dist/default/ui/hotkey/use-hotkey-shortcut.js.map +1 -1
  135. package/dist/default/ui/hotkey/use-hotkey.js +0 -1
  136. package/dist/default/ui/hotkey/use-hotkey.js.map +1 -1
  137. package/dist/default/ui/input-indicator/use-indicator-visibility.js +0 -1
  138. package/dist/default/ui/input-indicator/use-indicator-visibility.js.map +1 -1
  139. package/dist/default/ui/input-indicator/use-input-action-subscription.js +0 -1
  140. package/dist/default/ui/input-indicator/use-input-action-subscription.js.map +1 -1
  141. package/dist/default/ui/input-indicator/use-input-indicator-root.js +0 -1
  142. package/dist/default/ui/input-indicator/use-input-indicator-root.js.map +1 -1
  143. package/dist/default/ui/input-indicator/use-rendered-indicator-state.js +0 -1
  144. package/dist/default/ui/input-indicator/use-rendered-indicator-state.js.map +1 -1
  145. package/dist/default/ui/live-button/live-button.js +0 -1
  146. package/dist/default/ui/live-button/live-button.js.map +1 -1
  147. package/dist/default/ui/menu/context.js +0 -1
  148. package/dist/default/ui/menu/context.js.map +1 -1
  149. package/dist/default/ui/menu/menu-checkbox-item.js +0 -1
  150. package/dist/default/ui/menu/menu-checkbox-item.js.map +1 -1
  151. package/dist/default/ui/menu/menu-content.js +0 -1
  152. package/dist/default/ui/menu/menu-content.js.map +1 -1
  153. package/dist/default/ui/menu/menu-group-label.js +0 -1
  154. package/dist/default/ui/menu/menu-group-label.js.map +1 -1
  155. package/dist/default/ui/menu/menu-group.js +0 -1
  156. package/dist/default/ui/menu/menu-group.js.map +1 -1
  157. package/dist/default/ui/menu/menu-item-indicator.js +0 -1
  158. package/dist/default/ui/menu/menu-item-indicator.js.map +1 -1
  159. package/dist/default/ui/menu/menu-item.js +0 -1
  160. package/dist/default/ui/menu/menu-item.js.map +1 -1
  161. package/dist/default/ui/menu/menu-radio-group.js +0 -1
  162. package/dist/default/ui/menu/menu-radio-group.js.map +1 -1
  163. package/dist/default/ui/menu/menu-radio-item.js +0 -1
  164. package/dist/default/ui/menu/menu-radio-item.js.map +1 -1
  165. package/dist/default/ui/menu/menu-root.js +0 -1
  166. package/dist/default/ui/menu/menu-root.js.map +1 -1
  167. package/dist/default/ui/menu/menu-separator.js +0 -1
  168. package/dist/default/ui/menu/menu-separator.js.map +1 -1
  169. package/dist/default/ui/menu/menu-trigger.js +26 -12
  170. package/dist/default/ui/menu/menu-trigger.js.map +1 -1
  171. package/dist/default/ui/menu/use-menu-group.js +0 -1
  172. package/dist/default/ui/menu/use-menu-group.js.map +1 -1
  173. package/dist/default/ui/mute-button/mute-button.js +0 -1
  174. package/dist/default/ui/mute-button/mute-button.js.map +1 -1
  175. package/dist/default/ui/pip-button/pip-button.js +0 -1
  176. package/dist/default/ui/pip-button/pip-button.js.map +1 -1
  177. package/dist/default/ui/play-button/play-button.js +0 -1
  178. package/dist/default/ui/play-button/play-button.js.map +1 -1
  179. package/dist/default/ui/playback-rate/use-playback-rate-options.js +0 -1
  180. package/dist/default/ui/playback-rate/use-playback-rate-options.js.map +1 -1
  181. package/dist/default/ui/playback-rate-button/playback-rate-button.js +0 -1
  182. package/dist/default/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  183. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group.js +0 -1
  184. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group.js.map +1 -1
  185. package/dist/default/ui/popover/context.js +0 -1
  186. package/dist/default/ui/popover/context.js.map +1 -1
  187. package/dist/default/ui/popover/popover-arrow.js +0 -1
  188. package/dist/default/ui/popover/popover-arrow.js.map +1 -1
  189. package/dist/default/ui/popover/popover-popup.js +0 -1
  190. package/dist/default/ui/popover/popover-popup.js.map +1 -1
  191. package/dist/default/ui/popover/popover-root.js +0 -1
  192. package/dist/default/ui/popover/popover-root.js.map +1 -1
  193. package/dist/default/ui/popover/popover-trigger.js +0 -1
  194. package/dist/default/ui/popover/popover-trigger.js.map +1 -1
  195. package/dist/default/ui/popover/use-popup-position.js +0 -1
  196. package/dist/default/ui/popover/use-popup-position.js.map +1 -1
  197. package/dist/default/ui/poster/poster.js +0 -1
  198. package/dist/default/ui/poster/poster.js.map +1 -1
  199. package/dist/default/ui/quality/use-quality-options.js +0 -1
  200. package/dist/default/ui/quality/use-quality-options.js.map +1 -1
  201. package/dist/default/ui/quality-radio-group/quality-radio-group.js +0 -1
  202. package/dist/default/ui/quality-radio-group/quality-radio-group.js.map +1 -1
  203. package/dist/default/ui/seek-button/seek-button.js +0 -1
  204. package/dist/default/ui/seek-button/seek-button.js.map +1 -1
  205. package/dist/default/ui/seek-indicator/context.js +0 -1
  206. package/dist/default/ui/seek-indicator/context.js.map +1 -1
  207. package/dist/default/ui/seek-indicator/seek-indicator-root.js +0 -1
  208. package/dist/default/ui/seek-indicator/seek-indicator-root.js.map +1 -1
  209. package/dist/default/ui/seek-indicator/seek-indicator-value.js +0 -1
  210. package/dist/default/ui/seek-indicator/seek-indicator-value.js.map +1 -1
  211. package/dist/default/ui/slider/context.js +0 -1
  212. package/dist/default/ui/slider/context.js.map +1 -1
  213. package/dist/default/ui/slider/slider-buffer.js +0 -1
  214. package/dist/default/ui/slider/slider-buffer.js.map +1 -1
  215. package/dist/default/ui/slider/slider-fill.js +0 -1
  216. package/dist/default/ui/slider/slider-fill.js.map +1 -1
  217. package/dist/default/ui/slider/slider-preview.js +0 -1
  218. package/dist/default/ui/slider/slider-preview.js.map +1 -1
  219. package/dist/default/ui/slider/slider-root.js +0 -1
  220. package/dist/default/ui/slider/slider-root.js.map +1 -1
  221. package/dist/default/ui/slider/slider-thumb.js +0 -1
  222. package/dist/default/ui/slider/slider-thumb.js.map +1 -1
  223. package/dist/default/ui/slider/slider-thumbnail.js +0 -1
  224. package/dist/default/ui/slider/slider-thumbnail.js.map +1 -1
  225. package/dist/default/ui/slider/slider-track.js +0 -1
  226. package/dist/default/ui/slider/slider-track.js.map +1 -1
  227. package/dist/default/ui/slider/slider-value.js +0 -1
  228. package/dist/default/ui/slider/slider-value.js.map +1 -1
  229. package/dist/default/ui/status-announcer/status-announcer.js +0 -1
  230. package/dist/default/ui/status-announcer/status-announcer.js.map +1 -1
  231. package/dist/default/ui/status-indicator/context.js +0 -1
  232. package/dist/default/ui/status-indicator/context.js.map +1 -1
  233. package/dist/default/ui/status-indicator/status-indicator-root.js +0 -1
  234. package/dist/default/ui/status-indicator/status-indicator-root.js.map +1 -1
  235. package/dist/default/ui/status-indicator/status-indicator-value.js +0 -1
  236. package/dist/default/ui/status-indicator/status-indicator-value.js.map +1 -1
  237. package/dist/default/ui/thumbnail/thumbnail.js +0 -1
  238. package/dist/default/ui/thumbnail/thumbnail.js.map +1 -1
  239. package/dist/default/ui/time/time-group.js +0 -1
  240. package/dist/default/ui/time/time-group.js.map +1 -1
  241. package/dist/default/ui/time/time-separator.js +0 -1
  242. package/dist/default/ui/time/time-separator.js.map +1 -1
  243. package/dist/default/ui/time/time-value.js +0 -1
  244. package/dist/default/ui/time/time-value.js.map +1 -1
  245. package/dist/default/ui/time-slider/time-slider-chapters/slider-segments.js +0 -1
  246. package/dist/default/ui/time-slider/time-slider-chapters/slider-segments.js.map +1 -1
  247. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js +0 -1
  248. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js.map +1 -1
  249. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapters.js +0 -1
  250. package/dist/default/ui/time-slider/time-slider-chapters/time-slider-chapters.js.map +1 -1
  251. package/dist/default/ui/time-slider/time-slider-root.js +0 -1
  252. package/dist/default/ui/time-slider/time-slider-root.js.map +1 -1
  253. package/dist/default/ui/tooltip/context.js +0 -1
  254. package/dist/default/ui/tooltip/context.js.map +1 -1
  255. package/dist/default/ui/tooltip/group-context.js +0 -1
  256. package/dist/default/ui/tooltip/group-context.js.map +1 -1
  257. package/dist/default/ui/tooltip/tooltip-arrow.js +0 -1
  258. package/dist/default/ui/tooltip/tooltip-arrow.js.map +1 -1
  259. package/dist/default/ui/tooltip/tooltip-label.js +0 -1
  260. package/dist/default/ui/tooltip/tooltip-label.js.map +1 -1
  261. package/dist/default/ui/tooltip/tooltip-popup.js +0 -1
  262. package/dist/default/ui/tooltip/tooltip-popup.js.map +1 -1
  263. package/dist/default/ui/tooltip/tooltip-provider.js +0 -1
  264. package/dist/default/ui/tooltip/tooltip-provider.js.map +1 -1
  265. package/dist/default/ui/tooltip/tooltip-root.js +0 -1
  266. package/dist/default/ui/tooltip/tooltip-root.js.map +1 -1
  267. package/dist/default/ui/tooltip/tooltip-shortcut.js +0 -1
  268. package/dist/default/ui/tooltip/tooltip-shortcut.js.map +1 -1
  269. package/dist/default/ui/tooltip/tooltip-trigger.js +0 -1
  270. package/dist/default/ui/tooltip/tooltip-trigger.js.map +1 -1
  271. package/dist/default/ui/volume-indicator/context.js +0 -1
  272. package/dist/default/ui/volume-indicator/context.js.map +1 -1
  273. package/dist/default/ui/volume-indicator/volume-indicator-fill.js +0 -1
  274. package/dist/default/ui/volume-indicator/volume-indicator-fill.js.map +1 -1
  275. package/dist/default/ui/volume-indicator/volume-indicator-root.js +0 -1
  276. package/dist/default/ui/volume-indicator/volume-indicator-root.js.map +1 -1
  277. package/dist/default/ui/volume-indicator/volume-indicator-value.js +0 -1
  278. package/dist/default/ui/volume-indicator/volume-indicator-value.js.map +1 -1
  279. package/dist/default/ui/volume-slider/volume-slider-root.js +0 -1
  280. package/dist/default/ui/volume-slider/volume-slider-root.js.map +1 -1
  281. package/dist/default/utils/merge-props.js +0 -1
  282. package/dist/default/utils/merge-props.js.map +1 -1
  283. package/dist/default/utils/use-attach-iframe.js +0 -1
  284. package/dist/default/utils/use-attach-iframe.js.map +1 -1
  285. package/dist/default/utils/use-attach-media.js +0 -1
  286. package/dist/default/utils/use-attach-media.js.map +1 -1
  287. package/dist/default/utils/use-composed-refs.js +0 -1
  288. package/dist/default/utils/use-composed-refs.js.map +1 -1
  289. package/dist/default/utils/use-destroy.js +0 -1
  290. package/dist/default/utils/use-destroy.js.map +1 -1
  291. package/dist/default/utils/use-force-render.js +0 -1
  292. package/dist/default/utils/use-force-render.js.map +1 -1
  293. package/dist/default/utils/use-latest-ref.js +0 -1
  294. package/dist/default/utils/use-latest-ref.js.map +1 -1
  295. package/dist/default/utils/use-media-component.js +0 -1
  296. package/dist/default/utils/use-media-component.js.map +1 -1
  297. package/dist/default/utils/use-media-instance.js +0 -1
  298. package/dist/default/utils/use-media-instance.js.map +1 -1
  299. package/dist/default/utils/use-render.js +0 -1
  300. package/dist/default/utils/use-render.js.map +1 -1
  301. package/dist/default/utils/use-safe-id.js +0 -1
  302. package/dist/default/utils/use-safe-id.js.map +1 -1
  303. package/dist/dev/i18n/context.d.ts.map +1 -1
  304. package/dist/dev/i18n/context.js +0 -1
  305. package/dist/dev/i18n/context.js.map +1 -1
  306. package/dist/dev/i18n/create-i18n.d.ts.map +1 -1
  307. package/dist/dev/i18n/create-i18n.js +0 -1
  308. package/dist/dev/i18n/create-i18n.js.map +1 -1
  309. package/dist/dev/media/audio.d.ts.map +1 -1
  310. package/dist/dev/media/audio.js +0 -1
  311. package/dist/dev/media/audio.js.map +1 -1
  312. package/dist/dev/media/video.d.ts.map +1 -1
  313. package/dist/dev/media/video.js +0 -1
  314. package/dist/dev/media/video.js.map +1 -1
  315. package/dist/dev/player/container.d.ts.map +1 -1
  316. package/dist/dev/player/container.js +0 -1
  317. package/dist/dev/player/container.js.map +1 -1
  318. package/dist/dev/player/context.d.ts.map +1 -1
  319. package/dist/dev/player/context.js +0 -1
  320. package/dist/dev/player/context.js.map +1 -1
  321. package/dist/dev/player/create-player.d.ts.map +1 -1
  322. package/dist/dev/player/create-player.js +0 -1
  323. package/dist/dev/player/create-player.js.map +1 -1
  324. package/dist/dev/player/popup-group-context.js +0 -1
  325. package/dist/dev/player/popup-group-context.js.map +1 -1
  326. package/dist/dev/presets/audio/minimal-skin.css +16 -19
  327. package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -1
  328. package/dist/dev/presets/audio/minimal-skin.js +1 -0
  329. package/dist/dev/presets/audio/minimal-skin.js.map +1 -1
  330. package/dist/dev/presets/audio/minimal-skin.tailwind.d.ts.map +1 -1
  331. package/dist/dev/presets/audio/minimal-skin.tailwind.js +1 -0
  332. package/dist/dev/presets/audio/minimal-skin.tailwind.js.map +1 -1
  333. package/dist/dev/presets/audio/skin.css +27 -30
  334. package/dist/dev/presets/audio/skin.d.ts.map +1 -1
  335. package/dist/dev/presets/audio/skin.js +1 -0
  336. package/dist/dev/presets/audio/skin.js.map +1 -1
  337. package/dist/dev/presets/audio/skin.tailwind.d.ts.map +1 -1
  338. package/dist/dev/presets/audio/skin.tailwind.js +1 -0
  339. package/dist/dev/presets/audio/skin.tailwind.js.map +1 -1
  340. package/dist/dev/presets/background/skin.d.ts.map +1 -1
  341. package/dist/dev/presets/background/skin.js +1 -0
  342. package/dist/dev/presets/background/skin.js.map +1 -1
  343. package/dist/dev/presets/live-audio/minimal-skin.css +16 -19
  344. package/dist/dev/presets/live-audio/minimal-skin.d.ts.map +1 -1
  345. package/dist/dev/presets/live-audio/minimal-skin.js +1 -0
  346. package/dist/dev/presets/live-audio/minimal-skin.js.map +1 -1
  347. package/dist/dev/presets/live-audio/minimal-skin.tailwind.d.ts.map +1 -1
  348. package/dist/dev/presets/live-audio/minimal-skin.tailwind.js +1 -0
  349. package/dist/dev/presets/live-audio/minimal-skin.tailwind.js.map +1 -1
  350. package/dist/dev/presets/live-audio/skin.css +27 -30
  351. package/dist/dev/presets/live-audio/skin.d.ts.map +1 -1
  352. package/dist/dev/presets/live-audio/skin.js +1 -0
  353. package/dist/dev/presets/live-audio/skin.js.map +1 -1
  354. package/dist/dev/presets/live-audio/skin.tailwind.d.ts.map +1 -1
  355. package/dist/dev/presets/live-audio/skin.tailwind.js +1 -0
  356. package/dist/dev/presets/live-audio/skin.tailwind.js.map +1 -1
  357. package/dist/dev/presets/live-video/minimal-skin.css +20 -19
  358. package/dist/dev/presets/live-video/minimal-skin.d.ts.map +1 -1
  359. package/dist/dev/presets/live-video/minimal-skin.js +1 -0
  360. package/dist/dev/presets/live-video/minimal-skin.js.map +1 -1
  361. package/dist/dev/presets/live-video/minimal-skin.tailwind.d.ts.map +1 -1
  362. package/dist/dev/presets/live-video/minimal-skin.tailwind.js +1 -0
  363. package/dist/dev/presets/live-video/minimal-skin.tailwind.js.map +1 -1
  364. package/dist/dev/presets/live-video/skin.css +31 -30
  365. package/dist/dev/presets/live-video/skin.d.ts.map +1 -1
  366. package/dist/dev/presets/live-video/skin.js +1 -0
  367. package/dist/dev/presets/live-video/skin.js.map +1 -1
  368. package/dist/dev/presets/live-video/skin.tailwind.d.ts.map +1 -1
  369. package/dist/dev/presets/live-video/skin.tailwind.js +1 -0
  370. package/dist/dev/presets/live-video/skin.tailwind.js.map +1 -1
  371. package/dist/dev/presets/video/minimal-skin.css +20 -19
  372. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
  373. package/dist/dev/presets/video/minimal-skin.js +1 -0
  374. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  375. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
  376. package/dist/dev/presets/video/minimal-skin.tailwind.js +1 -0
  377. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  378. package/dist/dev/presets/video/skin.css +31 -30
  379. package/dist/dev/presets/video/skin.d.ts.map +1 -1
  380. package/dist/dev/presets/video/skin.js +1 -0
  381. package/dist/dev/presets/video/skin.js.map +1 -1
  382. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
  383. package/dist/dev/presets/video/skin.tailwind.js +1 -0
  384. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  385. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +6 -6
  386. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  387. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +1 -1
  388. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  389. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +4 -4
  390. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  391. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -1
  392. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  393. package/dist/dev/ui/airplay-button/airplay-button.d.ts.map +1 -1
  394. package/dist/dev/ui/airplay-button/airplay-button.js +0 -1
  395. package/dist/dev/ui/airplay-button/airplay-button.js.map +1 -1
  396. package/dist/dev/ui/alert-dialog/alert-dialog-close.d.ts.map +1 -1
  397. package/dist/dev/ui/alert-dialog/alert-dialog-close.js +0 -1
  398. package/dist/dev/ui/alert-dialog/alert-dialog-close.js.map +1 -1
  399. package/dist/dev/ui/alert-dialog/alert-dialog-description.d.ts.map +1 -1
  400. package/dist/dev/ui/alert-dialog/alert-dialog-description.js +0 -1
  401. package/dist/dev/ui/alert-dialog/alert-dialog-description.js.map +1 -1
  402. package/dist/dev/ui/alert-dialog/alert-dialog-popup.d.ts.map +1 -1
  403. package/dist/dev/ui/alert-dialog/alert-dialog-popup.js +0 -1
  404. package/dist/dev/ui/alert-dialog/alert-dialog-popup.js.map +1 -1
  405. package/dist/dev/ui/alert-dialog/alert-dialog-root.d.ts.map +1 -1
  406. package/dist/dev/ui/alert-dialog/alert-dialog-root.js +0 -1
  407. package/dist/dev/ui/alert-dialog/alert-dialog-root.js.map +1 -1
  408. package/dist/dev/ui/alert-dialog/alert-dialog-title.d.ts.map +1 -1
  409. package/dist/dev/ui/alert-dialog/alert-dialog-title.js +0 -1
  410. package/dist/dev/ui/alert-dialog/alert-dialog-title.js.map +1 -1
  411. package/dist/dev/ui/alert-dialog/context.d.ts.map +1 -1
  412. package/dist/dev/ui/alert-dialog/context.js +0 -1
  413. package/dist/dev/ui/alert-dialog/context.js.map +1 -1
  414. package/dist/dev/ui/audio-track/use-audio-track-options.d.ts.map +1 -1
  415. package/dist/dev/ui/audio-track/use-audio-track-options.js +0 -1
  416. package/dist/dev/ui/audio-track/use-audio-track-options.js.map +1 -1
  417. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group.d.ts.map +1 -1
  418. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group.js +0 -1
  419. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group.js.map +1 -1
  420. package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts.map +1 -1
  421. package/dist/dev/ui/buffering-indicator/buffering-indicator.js +0 -1
  422. package/dist/dev/ui/buffering-indicator/buffering-indicator.js.map +1 -1
  423. package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -1
  424. package/dist/dev/ui/captions-button/captions-button.js +0 -1
  425. package/dist/dev/ui/captions-button/captions-button.js.map +1 -1
  426. package/dist/dev/ui/captions-radio-group/captions-radio-group.d.ts.map +1 -1
  427. package/dist/dev/ui/captions-radio-group/captions-radio-group.js +0 -1
  428. package/dist/dev/ui/captions-radio-group/captions-radio-group.js.map +1 -1
  429. package/dist/dev/ui/captions-radio-group/use-captions-options.d.ts.map +1 -1
  430. package/dist/dev/ui/captions-radio-group/use-captions-options.js +0 -1
  431. package/dist/dev/ui/captions-radio-group/use-captions-options.js.map +1 -1
  432. package/dist/dev/ui/cast-button/cast-button.d.ts.map +1 -1
  433. package/dist/dev/ui/cast-button/cast-button.js +0 -1
  434. package/dist/dev/ui/cast-button/cast-button.js.map +1 -1
  435. package/dist/dev/ui/controls/context.js +0 -1
  436. package/dist/dev/ui/controls/context.js.map +1 -1
  437. package/dist/dev/ui/controls/controls-group.d.ts.map +1 -1
  438. package/dist/dev/ui/controls/controls-group.js +0 -1
  439. package/dist/dev/ui/controls/controls-group.js.map +1 -1
  440. package/dist/dev/ui/controls/controls-root.d.ts.map +1 -1
  441. package/dist/dev/ui/controls/controls-root.js +0 -1
  442. package/dist/dev/ui/controls/controls-root.js.map +1 -1
  443. package/dist/dev/ui/create-context-part.js +0 -1
  444. package/dist/dev/ui/create-context-part.js.map +1 -1
  445. package/dist/dev/ui/create-media-button.js +0 -1
  446. package/dist/dev/ui/create-media-button.js.map +1 -1
  447. package/dist/dev/ui/error-dialog/context.d.ts.map +1 -1
  448. package/dist/dev/ui/error-dialog/context.js +0 -1
  449. package/dist/dev/ui/error-dialog/context.js.map +1 -1
  450. package/dist/dev/ui/error-dialog/error-dialog-close.d.ts.map +1 -1
  451. package/dist/dev/ui/error-dialog/error-dialog-close.js +0 -1
  452. package/dist/dev/ui/error-dialog/error-dialog-close.js.map +1 -1
  453. package/dist/dev/ui/error-dialog/error-dialog-description.d.ts.map +1 -1
  454. package/dist/dev/ui/error-dialog/error-dialog-description.js +0 -1
  455. package/dist/dev/ui/error-dialog/error-dialog-description.js.map +1 -1
  456. package/dist/dev/ui/error-dialog/error-dialog-root.d.ts.map +1 -1
  457. package/dist/dev/ui/error-dialog/error-dialog-root.js +0 -1
  458. package/dist/dev/ui/error-dialog/error-dialog-root.js.map +1 -1
  459. package/dist/dev/ui/error-dialog/error-dialog-title.d.ts.map +1 -1
  460. package/dist/dev/ui/error-dialog/error-dialog-title.js +0 -1
  461. package/dist/dev/ui/error-dialog/error-dialog-title.js.map +1 -1
  462. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -1
  463. package/dist/dev/ui/fullscreen-button/fullscreen-button.js +0 -1
  464. package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  465. package/dist/dev/ui/gesture/gesture.d.ts.map +1 -1
  466. package/dist/dev/ui/gesture/gesture.js +0 -1
  467. package/dist/dev/ui/gesture/gesture.js.map +1 -1
  468. package/dist/dev/ui/gesture/use-doubletap-gesture.d.ts.map +1 -1
  469. package/dist/dev/ui/gesture/use-doubletap-gesture.js +0 -1
  470. package/dist/dev/ui/gesture/use-doubletap-gesture.js.map +1 -1
  471. package/dist/dev/ui/gesture/use-tap-gesture.d.ts.map +1 -1
  472. package/dist/dev/ui/gesture/use-tap-gesture.js +0 -1
  473. package/dist/dev/ui/gesture/use-tap-gesture.js.map +1 -1
  474. package/dist/dev/ui/hooks/create-radio-options-hook.d.ts.map +1 -1
  475. package/dist/dev/ui/hooks/create-radio-options-hook.js +0 -1
  476. package/dist/dev/ui/hooks/create-radio-options-hook.js.map +1 -1
  477. package/dist/dev/ui/hooks/use-button.d.ts.map +1 -1
  478. package/dist/dev/ui/hooks/use-button.js +0 -1
  479. package/dist/dev/ui/hooks/use-button.js.map +1 -1
  480. package/dist/dev/ui/hooks/use-positioned-state.js +0 -1
  481. package/dist/dev/ui/hooks/use-positioned-state.js.map +1 -1
  482. package/dist/dev/ui/hooks/use-slider.d.ts.map +1 -1
  483. package/dist/dev/ui/hooks/use-slider.js +0 -1
  484. package/dist/dev/ui/hooks/use-slider.js.map +1 -1
  485. package/dist/dev/ui/hotkey/hotkey.d.ts.map +1 -1
  486. package/dist/dev/ui/hotkey/hotkey.js +0 -1
  487. package/dist/dev/ui/hotkey/hotkey.js.map +1 -1
  488. package/dist/dev/ui/hotkey/use-hotkey-shortcut.d.ts.map +1 -1
  489. package/dist/dev/ui/hotkey/use-hotkey-shortcut.js +0 -1
  490. package/dist/dev/ui/hotkey/use-hotkey-shortcut.js.map +1 -1
  491. package/dist/dev/ui/hotkey/use-hotkey.d.ts.map +1 -1
  492. package/dist/dev/ui/hotkey/use-hotkey.js +0 -1
  493. package/dist/dev/ui/hotkey/use-hotkey.js.map +1 -1
  494. package/dist/dev/ui/input-indicator/use-indicator-visibility.js +0 -1
  495. package/dist/dev/ui/input-indicator/use-indicator-visibility.js.map +1 -1
  496. package/dist/dev/ui/input-indicator/use-input-action-subscription.js +0 -1
  497. package/dist/dev/ui/input-indicator/use-input-action-subscription.js.map +1 -1
  498. package/dist/dev/ui/input-indicator/use-input-indicator-root.js +0 -1
  499. package/dist/dev/ui/input-indicator/use-input-indicator-root.js.map +1 -1
  500. package/dist/dev/ui/input-indicator/use-rendered-indicator-state.js +0 -1
  501. package/dist/dev/ui/input-indicator/use-rendered-indicator-state.js.map +1 -1
  502. package/dist/dev/ui/live-button/live-button.d.ts.map +1 -1
  503. package/dist/dev/ui/live-button/live-button.js +0 -1
  504. package/dist/dev/ui/live-button/live-button.js.map +1 -1
  505. package/dist/dev/ui/menu/context.d.ts.map +1 -1
  506. package/dist/dev/ui/menu/context.js +0 -1
  507. package/dist/dev/ui/menu/context.js.map +1 -1
  508. package/dist/dev/ui/menu/menu-checkbox-item.d.ts.map +1 -1
  509. package/dist/dev/ui/menu/menu-checkbox-item.js +0 -1
  510. package/dist/dev/ui/menu/menu-checkbox-item.js.map +1 -1
  511. package/dist/dev/ui/menu/menu-content.d.ts.map +1 -1
  512. package/dist/dev/ui/menu/menu-content.js +0 -1
  513. package/dist/dev/ui/menu/menu-content.js.map +1 -1
  514. package/dist/dev/ui/menu/menu-group-label.d.ts.map +1 -1
  515. package/dist/dev/ui/menu/menu-group-label.js +0 -1
  516. package/dist/dev/ui/menu/menu-group-label.js.map +1 -1
  517. package/dist/dev/ui/menu/menu-group.d.ts.map +1 -1
  518. package/dist/dev/ui/menu/menu-group.js +0 -1
  519. package/dist/dev/ui/menu/menu-group.js.map +1 -1
  520. package/dist/dev/ui/menu/menu-item-indicator.d.ts.map +1 -1
  521. package/dist/dev/ui/menu/menu-item-indicator.js +0 -1
  522. package/dist/dev/ui/menu/menu-item-indicator.js.map +1 -1
  523. package/dist/dev/ui/menu/menu-item.d.ts.map +1 -1
  524. package/dist/dev/ui/menu/menu-item.js +0 -1
  525. package/dist/dev/ui/menu/menu-item.js.map +1 -1
  526. package/dist/dev/ui/menu/menu-radio-group.d.ts.map +1 -1
  527. package/dist/dev/ui/menu/menu-radio-group.js +0 -1
  528. package/dist/dev/ui/menu/menu-radio-group.js.map +1 -1
  529. package/dist/dev/ui/menu/menu-radio-item.d.ts.map +1 -1
  530. package/dist/dev/ui/menu/menu-radio-item.js +0 -1
  531. package/dist/dev/ui/menu/menu-radio-item.js.map +1 -1
  532. package/dist/dev/ui/menu/menu-root.d.ts.map +1 -1
  533. package/dist/dev/ui/menu/menu-root.js +0 -1
  534. package/dist/dev/ui/menu/menu-root.js.map +1 -1
  535. package/dist/dev/ui/menu/menu-separator.d.ts.map +1 -1
  536. package/dist/dev/ui/menu/menu-separator.js +0 -1
  537. package/dist/dev/ui/menu/menu-separator.js.map +1 -1
  538. package/dist/dev/ui/menu/menu-trigger.d.ts.map +1 -1
  539. package/dist/dev/ui/menu/menu-trigger.js +26 -12
  540. package/dist/dev/ui/menu/menu-trigger.js.map +1 -1
  541. package/dist/dev/ui/menu/use-menu-group.js +0 -1
  542. package/dist/dev/ui/menu/use-menu-group.js.map +1 -1
  543. package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -1
  544. package/dist/dev/ui/mute-button/mute-button.js +0 -1
  545. package/dist/dev/ui/mute-button/mute-button.js.map +1 -1
  546. package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -1
  547. package/dist/dev/ui/pip-button/pip-button.js +0 -1
  548. package/dist/dev/ui/pip-button/pip-button.js.map +1 -1
  549. package/dist/dev/ui/play-button/play-button.d.ts.map +1 -1
  550. package/dist/dev/ui/play-button/play-button.js +0 -1
  551. package/dist/dev/ui/play-button/play-button.js.map +1 -1
  552. package/dist/dev/ui/playback-rate/use-playback-rate-options.d.ts.map +1 -1
  553. package/dist/dev/ui/playback-rate/use-playback-rate-options.js +0 -1
  554. package/dist/dev/ui/playback-rate/use-playback-rate-options.js.map +1 -1
  555. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts.map +1 -1
  556. package/dist/dev/ui/playback-rate-button/playback-rate-button.js +0 -1
  557. package/dist/dev/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  558. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group.d.ts.map +1 -1
  559. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group.js +0 -1
  560. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group.js.map +1 -1
  561. package/dist/dev/ui/popover/context.d.ts.map +1 -1
  562. package/dist/dev/ui/popover/context.js +0 -1
  563. package/dist/dev/ui/popover/context.js.map +1 -1
  564. package/dist/dev/ui/popover/popover-arrow.d.ts.map +1 -1
  565. package/dist/dev/ui/popover/popover-arrow.js +0 -1
  566. package/dist/dev/ui/popover/popover-arrow.js.map +1 -1
  567. package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -1
  568. package/dist/dev/ui/popover/popover-popup.js +0 -1
  569. package/dist/dev/ui/popover/popover-popup.js.map +1 -1
  570. package/dist/dev/ui/popover/popover-root.d.ts.map +1 -1
  571. package/dist/dev/ui/popover/popover-root.js +0 -1
  572. package/dist/dev/ui/popover/popover-root.js.map +1 -1
  573. package/dist/dev/ui/popover/popover-trigger.d.ts.map +1 -1
  574. package/dist/dev/ui/popover/popover-trigger.js +0 -1
  575. package/dist/dev/ui/popover/popover-trigger.js.map +1 -1
  576. package/dist/dev/ui/popover/use-popup-position.js +0 -1
  577. package/dist/dev/ui/popover/use-popup-position.js.map +1 -1
  578. package/dist/dev/ui/poster/poster.d.ts.map +1 -1
  579. package/dist/dev/ui/poster/poster.js +0 -1
  580. package/dist/dev/ui/poster/poster.js.map +1 -1
  581. package/dist/dev/ui/quality/use-quality-options.d.ts.map +1 -1
  582. package/dist/dev/ui/quality/use-quality-options.js +0 -1
  583. package/dist/dev/ui/quality/use-quality-options.js.map +1 -1
  584. package/dist/dev/ui/quality-radio-group/quality-radio-group.d.ts.map +1 -1
  585. package/dist/dev/ui/quality-radio-group/quality-radio-group.js +0 -1
  586. package/dist/dev/ui/quality-radio-group/quality-radio-group.js.map +1 -1
  587. package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -1
  588. package/dist/dev/ui/seek-button/seek-button.js +0 -1
  589. package/dist/dev/ui/seek-button/seek-button.js.map +1 -1
  590. package/dist/dev/ui/seek-indicator/context.js +0 -1
  591. package/dist/dev/ui/seek-indicator/context.js.map +1 -1
  592. package/dist/dev/ui/seek-indicator/seek-indicator-root.d.ts.map +1 -1
  593. package/dist/dev/ui/seek-indicator/seek-indicator-root.js +0 -1
  594. package/dist/dev/ui/seek-indicator/seek-indicator-root.js.map +1 -1
  595. package/dist/dev/ui/seek-indicator/seek-indicator-value.d.ts.map +1 -1
  596. package/dist/dev/ui/seek-indicator/seek-indicator-value.js +0 -1
  597. package/dist/dev/ui/seek-indicator/seek-indicator-value.js.map +1 -1
  598. package/dist/dev/ui/slider/context.js +0 -1
  599. package/dist/dev/ui/slider/context.js.map +1 -1
  600. package/dist/dev/ui/slider/slider-buffer.d.ts.map +1 -1
  601. package/dist/dev/ui/slider/slider-buffer.js +0 -1
  602. package/dist/dev/ui/slider/slider-buffer.js.map +1 -1
  603. package/dist/dev/ui/slider/slider-fill.d.ts.map +1 -1
  604. package/dist/dev/ui/slider/slider-fill.js +0 -1
  605. package/dist/dev/ui/slider/slider-fill.js.map +1 -1
  606. package/dist/dev/ui/slider/slider-preview.d.ts.map +1 -1
  607. package/dist/dev/ui/slider/slider-preview.js +0 -1
  608. package/dist/dev/ui/slider/slider-preview.js.map +1 -1
  609. package/dist/dev/ui/slider/slider-root.d.ts.map +1 -1
  610. package/dist/dev/ui/slider/slider-root.js +0 -1
  611. package/dist/dev/ui/slider/slider-root.js.map +1 -1
  612. package/dist/dev/ui/slider/slider-thumb.d.ts.map +1 -1
  613. package/dist/dev/ui/slider/slider-thumb.js +0 -1
  614. package/dist/dev/ui/slider/slider-thumb.js.map +1 -1
  615. package/dist/dev/ui/slider/slider-thumbnail.d.ts.map +1 -1
  616. package/dist/dev/ui/slider/slider-thumbnail.js +0 -1
  617. package/dist/dev/ui/slider/slider-thumbnail.js.map +1 -1
  618. package/dist/dev/ui/slider/slider-track.d.ts.map +1 -1
  619. package/dist/dev/ui/slider/slider-track.js +0 -1
  620. package/dist/dev/ui/slider/slider-track.js.map +1 -1
  621. package/dist/dev/ui/slider/slider-value.d.ts.map +1 -1
  622. package/dist/dev/ui/slider/slider-value.js +0 -1
  623. package/dist/dev/ui/slider/slider-value.js.map +1 -1
  624. package/dist/dev/ui/status-announcer/status-announcer.d.ts.map +1 -1
  625. package/dist/dev/ui/status-announcer/status-announcer.js +0 -1
  626. package/dist/dev/ui/status-announcer/status-announcer.js.map +1 -1
  627. package/dist/dev/ui/status-indicator/context.js +0 -1
  628. package/dist/dev/ui/status-indicator/context.js.map +1 -1
  629. package/dist/dev/ui/status-indicator/status-indicator-root.d.ts.map +1 -1
  630. package/dist/dev/ui/status-indicator/status-indicator-root.js +0 -1
  631. package/dist/dev/ui/status-indicator/status-indicator-root.js.map +1 -1
  632. package/dist/dev/ui/status-indicator/status-indicator-value.d.ts.map +1 -1
  633. package/dist/dev/ui/status-indicator/status-indicator-value.js +0 -1
  634. package/dist/dev/ui/status-indicator/status-indicator-value.js.map +1 -1
  635. package/dist/dev/ui/thumbnail/thumbnail.d.ts.map +1 -1
  636. package/dist/dev/ui/thumbnail/thumbnail.js +0 -1
  637. package/dist/dev/ui/thumbnail/thumbnail.js.map +1 -1
  638. package/dist/dev/ui/time/time-group.d.ts.map +1 -1
  639. package/dist/dev/ui/time/time-group.js +0 -1
  640. package/dist/dev/ui/time/time-group.js.map +1 -1
  641. package/dist/dev/ui/time/time-separator.d.ts.map +1 -1
  642. package/dist/dev/ui/time/time-separator.js +0 -1
  643. package/dist/dev/ui/time/time-separator.js.map +1 -1
  644. package/dist/dev/ui/time/time-value.d.ts.map +1 -1
  645. package/dist/dev/ui/time/time-value.js +0 -1
  646. package/dist/dev/ui/time/time-value.js.map +1 -1
  647. package/dist/dev/ui/time-slider/time-slider-chapters/slider-segments.js +0 -1
  648. package/dist/dev/ui/time-slider/time-slider-chapters/slider-segments.js.map +1 -1
  649. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapter-title.d.ts.map +1 -1
  650. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js +0 -1
  651. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapter-title.js.map +1 -1
  652. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapters.d.ts.map +1 -1
  653. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapters.js +0 -1
  654. package/dist/dev/ui/time-slider/time-slider-chapters/time-slider-chapters.js.map +1 -1
  655. package/dist/dev/ui/time-slider/time-slider-root.d.ts.map +1 -1
  656. package/dist/dev/ui/time-slider/time-slider-root.js +0 -1
  657. package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -1
  658. package/dist/dev/ui/tooltip/context.d.ts.map +1 -1
  659. package/dist/dev/ui/tooltip/context.js +0 -1
  660. package/dist/dev/ui/tooltip/context.js.map +1 -1
  661. package/dist/dev/ui/tooltip/group-context.js +0 -1
  662. package/dist/dev/ui/tooltip/group-context.js.map +1 -1
  663. package/dist/dev/ui/tooltip/tooltip-arrow.d.ts.map +1 -1
  664. package/dist/dev/ui/tooltip/tooltip-arrow.js +0 -1
  665. package/dist/dev/ui/tooltip/tooltip-arrow.js.map +1 -1
  666. package/dist/dev/ui/tooltip/tooltip-label.d.ts.map +1 -1
  667. package/dist/dev/ui/tooltip/tooltip-label.js +0 -1
  668. package/dist/dev/ui/tooltip/tooltip-label.js.map +1 -1
  669. package/dist/dev/ui/tooltip/tooltip-popup.d.ts.map +1 -1
  670. package/dist/dev/ui/tooltip/tooltip-popup.js +0 -1
  671. package/dist/dev/ui/tooltip/tooltip-popup.js.map +1 -1
  672. package/dist/dev/ui/tooltip/tooltip-provider.d.ts.map +1 -1
  673. package/dist/dev/ui/tooltip/tooltip-provider.js +0 -1
  674. package/dist/dev/ui/tooltip/tooltip-provider.js.map +1 -1
  675. package/dist/dev/ui/tooltip/tooltip-root.d.ts.map +1 -1
  676. package/dist/dev/ui/tooltip/tooltip-root.js +0 -1
  677. package/dist/dev/ui/tooltip/tooltip-root.js.map +1 -1
  678. package/dist/dev/ui/tooltip/tooltip-shortcut.d.ts.map +1 -1
  679. package/dist/dev/ui/tooltip/tooltip-shortcut.js +0 -1
  680. package/dist/dev/ui/tooltip/tooltip-shortcut.js.map +1 -1
  681. package/dist/dev/ui/tooltip/tooltip-trigger.d.ts.map +1 -1
  682. package/dist/dev/ui/tooltip/tooltip-trigger.js +0 -1
  683. package/dist/dev/ui/tooltip/tooltip-trigger.js.map +1 -1
  684. package/dist/dev/ui/volume-indicator/context.js +0 -1
  685. package/dist/dev/ui/volume-indicator/context.js.map +1 -1
  686. package/dist/dev/ui/volume-indicator/volume-indicator-fill.d.ts.map +1 -1
  687. package/dist/dev/ui/volume-indicator/volume-indicator-fill.js +0 -1
  688. package/dist/dev/ui/volume-indicator/volume-indicator-fill.js.map +1 -1
  689. package/dist/dev/ui/volume-indicator/volume-indicator-root.d.ts.map +1 -1
  690. package/dist/dev/ui/volume-indicator/volume-indicator-root.js +0 -1
  691. package/dist/dev/ui/volume-indicator/volume-indicator-root.js.map +1 -1
  692. package/dist/dev/ui/volume-indicator/volume-indicator-value.d.ts.map +1 -1
  693. package/dist/dev/ui/volume-indicator/volume-indicator-value.js +0 -1
  694. package/dist/dev/ui/volume-indicator/volume-indicator-value.js.map +1 -1
  695. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts.map +1 -1
  696. package/dist/dev/ui/volume-slider/volume-slider-root.js +0 -1
  697. package/dist/dev/ui/volume-slider/volume-slider-root.js.map +1 -1
  698. package/dist/dev/utils/merge-props.d.ts.map +1 -1
  699. package/dist/dev/utils/merge-props.js +0 -1
  700. package/dist/dev/utils/merge-props.js.map +1 -1
  701. package/dist/dev/utils/use-attach-iframe.js +0 -1
  702. package/dist/dev/utils/use-attach-iframe.js.map +1 -1
  703. package/dist/dev/utils/use-attach-media.d.ts.map +1 -1
  704. package/dist/dev/utils/use-attach-media.js +0 -1
  705. package/dist/dev/utils/use-attach-media.js.map +1 -1
  706. package/dist/dev/utils/use-composed-refs.d.ts.map +1 -1
  707. package/dist/dev/utils/use-composed-refs.js +0 -1
  708. package/dist/dev/utils/use-composed-refs.js.map +1 -1
  709. package/dist/dev/utils/use-destroy.d.ts.map +1 -1
  710. package/dist/dev/utils/use-destroy.js +0 -1
  711. package/dist/dev/utils/use-destroy.js.map +1 -1
  712. package/dist/dev/utils/use-force-render.js +0 -1
  713. package/dist/dev/utils/use-force-render.js.map +1 -1
  714. package/dist/dev/utils/use-latest-ref.d.ts.map +1 -1
  715. package/dist/dev/utils/use-latest-ref.js +0 -1
  716. package/dist/dev/utils/use-latest-ref.js.map +1 -1
  717. package/dist/dev/utils/use-media-component.d.ts.map +1 -1
  718. package/dist/dev/utils/use-media-component.js +0 -1
  719. package/dist/dev/utils/use-media-component.js.map +1 -1
  720. package/dist/dev/utils/use-media-instance.d.ts.map +1 -1
  721. package/dist/dev/utils/use-media-instance.js +0 -1
  722. package/dist/dev/utils/use-media-instance.js.map +1 -1
  723. package/dist/dev/utils/use-render.d.ts.map +1 -1
  724. package/dist/dev/utils/use-render.js +0 -1
  725. package/dist/dev/utils/use-render.js.map +1 -1
  726. package/dist/dev/utils/use-safe-id.js +0 -1
  727. package/dist/dev/utils/use-safe-id.js.map +1 -1
  728. package/docs/README.md +1 -1
  729. package/docs/concepts/features.md +2 -2
  730. package/docs/concepts/media-sources.md +79 -1
  731. package/docs/concepts/skins.md +31 -30
  732. package/docs/how-to/build-your-own-component.md +1 -1
  733. package/docs/how-to/customize-skins.md +94 -98
  734. package/docs/how-to/migrate-from-media-chrome.md +412 -0
  735. package/docs/how-to/migrate-from-mux-player.md +551 -0
  736. package/docs/how-to/migrate-from-plyr.md +385 -0
  737. package/docs/how-to/migrate-from-video-js-8.md +594 -0
  738. package/docs/llms.txt +9 -0
  739. package/docs/reference/feature-volume.md +4 -2
  740. package/docs/reference/mute-button.md +34 -0
  741. package/docs/reference/volume-slider.md +1 -1
  742. package/package.json +8 -8
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useComposedRefs } from "../../utils/use-composed-refs.js";
3
2
  import { renderElement } from "../../utils/use-render.js";
4
3
  import { useMenuContext } from "./context.js";
@@ -1 +1 @@
1
- {"version":3,"file":"menu-content.js","names":[],"sources":["../../../../src/ui/menu/menu-content.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport {\n getRootPositionOptions,\n isMenuNavigationKey,\n MenuPositioningCSSVars,\n observeMenuSize,\n syncMenuSizeChain,\n} from '@videojs/core/dom';\nimport { forwardRef, useCallback, useLayoutEffect, useMemo, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { useComposedRefs } from '../../utils/use-composed-refs';\nimport { renderElement } from '../../utils/use-render';\nimport { usePopupPosition } from '../popover/use-popup-position';\nimport { useMenuContext } from './context';\nimport { callKeyDownHandler, preventMenuKeyDefault } from './menu-keyboard';\n\nexport interface MenuContentProps extends UIComponentProps<'div', MenuState> {}\n\n/** Container for menu items. Positioned relative to the trigger at root level; renders in-place as a submenu panel when nested. */\nexport const MenuContent = forwardRef<HTMLDivElement, MenuContentProps>(function MenuContent(\n { render, className, style, onKeyDown, onBlur, ...elementProps },\n forwardedRef\n) {\n const {\n core,\n menu,\n parent,\n state,\n preferredSide,\n setPositionedSide,\n stateAttrMap,\n anchorName,\n contentId,\n boundary,\n container,\n } = useMenuContext();\n const isSubmenu = state.isSubmenu;\n const isActive = isSubmenu && state.open;\n const wasActiveRef = useRef(false);\n\n useLayoutEffect(() => {\n if (!isSubmenu) return undefined;\n\n const wasActive = wasActiveRef.current;\n wasActiveRef.current = isActive;\n\n if (isActive && !wasActive) {\n const frame = requestAnimationFrame(() => menu.highlightFirstItem({ preventScroll: true }));\n return () => cancelAnimationFrame(frame);\n }\n\n return undefined;\n }, [isActive, isSubmenu, menu]);\n\n const setSubmenuContentElement = useCallback(\n (element: HTMLDivElement | null) => {\n menu.setContentElement(element);\n if (!element) {\n requestAnimationFrame(() => {\n syncMenuSizeChain(parent?.menu.contentElement ?? null);\n if (!menu.input.current.active) menu.restoreFocus({ preventScroll: true });\n });\n }\n },\n [menu, parent]\n );\n\n const handleSubMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n const defaultPreventedByUser = callKeyDownHandler(\n onKeyDown as React.KeyboardEventHandler<HTMLDivElement> | undefined,\n event\n );\n const isNavigationKey = isMenuNavigationKey(event);\n menu.contentProps.onKeyDown(event);\n const isBackNavigationKey = event.key === 'ArrowLeft' || event.key === 'Escape';\n\n if (isBackNavigationKey && !defaultPreventedByUser) {\n event.preventDefault();\n menu.close('escape');\n }\n\n if (isNavigationKey) event.stopPropagation();\n },\n [onKeyDown, menu]\n );\n\n const handleRootMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n (onKeyDown as React.KeyboardEventHandler<HTMLDivElement> | undefined)?.(event);\n menu.contentProps.onKeyDown(event);\n if (event.key === 'Escape') return;\n if (isMenuNavigationKey(event)) event.stopPropagation();\n },\n [onKeyDown, menu]\n );\n\n const handleRootMenuBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n (onBlur as React.FocusEventHandler<HTMLDivElement> | undefined)?.(event);\n menu.contentProps.onFocusOut(event);\n },\n [onBlur, menu]\n );\n\n const handleSubMenuBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n (onBlur as React.FocusEventHandler<HTMLDivElement> | undefined)?.(event);\n menu.contentProps.onFocusOut(event);\n },\n [onBlur, menu]\n );\n\n const internalRef = useRef<HTMLDivElement>(null);\n const contentRef = useCallback(\n (element: HTMLDivElement | null) => {\n if (!isSubmenu) menu.setContentElement(element);\n },\n [isSubmenu, menu]\n );\n const rootComposedRef = useComposedRefs(forwardedRef, contentRef, internalRef);\n const submenuComposedRef = useComposedRefs(forwardedRef, setSubmenuContentElement);\n const positionOptions = useMemo(\n () => getRootPositionOptions(preferredSide, state.align),\n [preferredSide, state.align]\n );\n const positioningStyle = usePopupPosition({\n open: state.open && !isSubmenu,\n anchorName,\n position: positionOptions,\n triggerSource: menu,\n popupRef: internalRef,\n boundary,\n container,\n cssVars: MenuPositioningCSSVars,\n onSideChange: setPositionedSide,\n });\n\n useLayoutEffect(() => {\n if (isSubmenu || !state.open) return;\n\n const contentElement = internalRef.current;\n if (!contentElement) return;\n\n const sync = () => syncMenuSizeChain(contentElement);\n sync();\n const frame = requestAnimationFrame(sync);\n const stopObserving = observeMenuSize(contentElement, sync);\n\n return () => {\n cancelAnimationFrame(frame);\n stopObserving();\n };\n }, [isSubmenu, state.open]);\n\n useLayoutEffect(() => {\n if (!isSubmenu) return;\n\n const isEnding = state.status === 'ending';\n const parentContentElement = parent?.menu.contentElement ?? null;\n const sync = () => syncMenuSizeChain(parentContentElement);\n sync();\n const frame = requestAnimationFrame(sync);\n const stopObserving =\n state.open && !isEnding && parentContentElement ? observeMenuSize(parentContentElement, sync) : null;\n\n return () => {\n cancelAnimationFrame(frame);\n stopObserving?.();\n };\n }, [isSubmenu, parent, state.open, state.status]);\n\n if (isSubmenu) {\n if (!isActive && state.status !== 'ending') return null;\n\n const subMenuContent = renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: submenuComposedRef,\n props: [\n {\n id: contentId,\n role: 'menu' as const,\n tabIndex: -1,\n onKeyDownCapture: preventMenuKeyDefault,\n onKeyDown: handleSubMenuKeyDown,\n onBlur: handleSubMenuBlur,\n },\n elementProps,\n ],\n }\n );\n\n const parentContentElement = parent?.menu.contentElement ?? null;\n return parentContentElement ? createPortal(subMenuContent, parentContentElement) : subMenuContent;\n }\n\n if (!state.open && state.status !== 'ending') return null;\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: rootComposedRef,\n props: [\n {\n id: contentId,\n style: positioningStyle,\n ...core.getContentAttrs(state),\n },\n { onKeyDownCapture: preventMenuKeyDefault, onKeyDown: handleRootMenuKeyDown, onBlur: handleRootMenuBlur },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace MenuContent {\n export type Props = MenuContentProps;\n export type State = MenuState;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"menu-content.js","names":[],"sources":["../../../../src/ui/menu/menu-content.tsx"],"sourcesContent":["import type { MenuState } from '@videojs/core';\nimport {\n getRootPositionOptions,\n isMenuNavigationKey,\n MenuPositioningCSSVars,\n observeMenuSize,\n syncMenuSizeChain,\n} from '@videojs/core/dom';\nimport { forwardRef, useCallback, useLayoutEffect, useMemo, useRef } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { useComposedRefs } from '../../utils/use-composed-refs';\nimport { renderElement } from '../../utils/use-render';\nimport { usePopupPosition } from '../popover/use-popup-position';\nimport { useMenuContext } from './context';\nimport { callKeyDownHandler, preventMenuKeyDefault } from './menu-keyboard';\n\nexport interface MenuContentProps extends UIComponentProps<'div', MenuState> {}\n\n/** Container for menu items. Positioned relative to the trigger at root level; renders in-place as a submenu panel when nested. */\nexport const MenuContent = forwardRef<HTMLDivElement, MenuContentProps>(function MenuContent(\n { render, className, style, onKeyDown, onBlur, ...elementProps },\n forwardedRef\n) {\n const {\n core,\n menu,\n parent,\n state,\n preferredSide,\n setPositionedSide,\n stateAttrMap,\n anchorName,\n contentId,\n boundary,\n container,\n } = useMenuContext();\n const isSubmenu = state.isSubmenu;\n const isActive = isSubmenu && state.open;\n const wasActiveRef = useRef(false);\n\n useLayoutEffect(() => {\n if (!isSubmenu) return undefined;\n\n const wasActive = wasActiveRef.current;\n wasActiveRef.current = isActive;\n\n if (isActive && !wasActive) {\n const frame = requestAnimationFrame(() => menu.highlightFirstItem({ preventScroll: true }));\n return () => cancelAnimationFrame(frame);\n }\n\n return undefined;\n }, [isActive, isSubmenu, menu]);\n\n const setSubmenuContentElement = useCallback(\n (element: HTMLDivElement | null) => {\n menu.setContentElement(element);\n if (!element) {\n requestAnimationFrame(() => {\n syncMenuSizeChain(parent?.menu.contentElement ?? null);\n if (!menu.input.current.active) menu.restoreFocus({ preventScroll: true });\n });\n }\n },\n [menu, parent]\n );\n\n const handleSubMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n const defaultPreventedByUser = callKeyDownHandler(\n onKeyDown as React.KeyboardEventHandler<HTMLDivElement> | undefined,\n event\n );\n const isNavigationKey = isMenuNavigationKey(event);\n menu.contentProps.onKeyDown(event);\n const isBackNavigationKey = event.key === 'ArrowLeft' || event.key === 'Escape';\n\n if (isBackNavigationKey && !defaultPreventedByUser) {\n event.preventDefault();\n menu.close('escape');\n }\n\n if (isNavigationKey) event.stopPropagation();\n },\n [onKeyDown, menu]\n );\n\n const handleRootMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n (onKeyDown as React.KeyboardEventHandler<HTMLDivElement> | undefined)?.(event);\n menu.contentProps.onKeyDown(event);\n if (event.key === 'Escape') return;\n if (isMenuNavigationKey(event)) event.stopPropagation();\n },\n [onKeyDown, menu]\n );\n\n const handleRootMenuBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n (onBlur as React.FocusEventHandler<HTMLDivElement> | undefined)?.(event);\n menu.contentProps.onFocusOut(event);\n },\n [onBlur, menu]\n );\n\n const handleSubMenuBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n (onBlur as React.FocusEventHandler<HTMLDivElement> | undefined)?.(event);\n menu.contentProps.onFocusOut(event);\n },\n [onBlur, menu]\n );\n\n const internalRef = useRef<HTMLDivElement>(null);\n const contentRef = useCallback(\n (element: HTMLDivElement | null) => {\n if (!isSubmenu) menu.setContentElement(element);\n },\n [isSubmenu, menu]\n );\n const rootComposedRef = useComposedRefs(forwardedRef, contentRef, internalRef);\n const submenuComposedRef = useComposedRefs(forwardedRef, setSubmenuContentElement);\n const positionOptions = useMemo(\n () => getRootPositionOptions(preferredSide, state.align),\n [preferredSide, state.align]\n );\n const positioningStyle = usePopupPosition({\n open: state.open && !isSubmenu,\n anchorName,\n position: positionOptions,\n triggerSource: menu,\n popupRef: internalRef,\n boundary,\n container,\n cssVars: MenuPositioningCSSVars,\n onSideChange: setPositionedSide,\n });\n\n useLayoutEffect(() => {\n if (isSubmenu || !state.open) return;\n\n const contentElement = internalRef.current;\n if (!contentElement) return;\n\n const sync = () => syncMenuSizeChain(contentElement);\n sync();\n const frame = requestAnimationFrame(sync);\n const stopObserving = observeMenuSize(contentElement, sync);\n\n return () => {\n cancelAnimationFrame(frame);\n stopObserving();\n };\n }, [isSubmenu, state.open]);\n\n useLayoutEffect(() => {\n if (!isSubmenu) return;\n\n const isEnding = state.status === 'ending';\n const parentContentElement = parent?.menu.contentElement ?? null;\n const sync = () => syncMenuSizeChain(parentContentElement);\n sync();\n const frame = requestAnimationFrame(sync);\n const stopObserving =\n state.open && !isEnding && parentContentElement ? observeMenuSize(parentContentElement, sync) : null;\n\n return () => {\n cancelAnimationFrame(frame);\n stopObserving?.();\n };\n }, [isSubmenu, parent, state.open, state.status]);\n\n if (isSubmenu) {\n if (!isActive && state.status !== 'ending') return null;\n\n const subMenuContent = renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: submenuComposedRef,\n props: [\n {\n id: contentId,\n role: 'menu' as const,\n tabIndex: -1,\n onKeyDownCapture: preventMenuKeyDefault,\n onKeyDown: handleSubMenuKeyDown,\n onBlur: handleSubMenuBlur,\n },\n elementProps,\n ],\n }\n );\n\n const parentContentElement = parent?.menu.contentElement ?? null;\n return parentContentElement ? createPortal(subMenuContent, parentContentElement) : subMenuContent;\n }\n\n if (!state.open && state.status !== 'ending') return null;\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: rootComposedRef,\n props: [\n {\n id: contentId,\n style: positioningStyle,\n ...core.getContentAttrs(state),\n },\n { onKeyDownCapture: preventMenuKeyDefault, onKeyDown: handleRootMenuKeyDown, onBlur: handleRootMenuBlur },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace MenuContent {\n export type Props = MenuContentProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;;;;AAqBA,MAAa,cAAc,WAA6C,SAAS,YAC/E,EAAE,QAAQ,WAAW,OAAO,WAAW,QAAQ,GAAG,gBAClD,cACA;CACA,MAAM,EACJ,MACA,MACA,QACA,OACA,eACA,mBACA,cACA,YACA,WACA,UACA,cACE,eAAe;CACnB,MAAM,YAAY,MAAM;CACxB,MAAM,WAAW,aAAa,MAAM;CACpC,MAAM,eAAe,OAAO,KAAK;CAEjC,sBAAsB;EACpB,IAAI,CAAC,WAAW,OAAO,KAAA;EAEvB,MAAM,YAAY,aAAa;EAC/B,aAAa,UAAU;EAEvB,IAAI,YAAY,CAAC,WAAW;GAC1B,MAAM,QAAQ,4BAA4B,KAAK,mBAAmB,EAAE,eAAe,KAAK,CAAC,CAAC;GAC1F,aAAa,qBAAqB,KAAK;EACzC;CAGF,GAAG;EAAC;EAAU;EAAW;CAAI,CAAC;CAE9B,MAAM,2BAA2B,aAC9B,YAAmC;EAClC,KAAK,kBAAkB,OAAO;EAC9B,IAAI,CAAC,SACH,4BAA4B;GAC1B,kBAAkB,QAAQ,KAAK,kBAAkB,IAAI;GACrD,IAAI,CAAC,KAAK,MAAM,QAAQ,QAAQ,KAAK,aAAa,EAAE,eAAe,KAAK,CAAC;EAC3E,CAAC;CAEL,GACA,CAAC,MAAM,MAAM,CACf;CAEA,MAAM,uBAAuB,aAC1B,UAA+C;EAC9C,MAAM,yBAAyB,mBAC7B,WACA,KACF;EACA,MAAM,kBAAkB,oBAAoB,KAAK;EACjD,KAAK,aAAa,UAAU,KAAK;EAGjC,KAF4B,MAAM,QAAQ,eAAe,MAAM,QAAQ,aAE5C,CAAC,wBAAwB;GAClD,MAAM,eAAe;GACrB,KAAK,MAAM,QAAQ;EACrB;EAEA,IAAI,iBAAiB,MAAM,gBAAgB;CAC7C,GACA,CAAC,WAAW,IAAI,CAClB;CAEA,MAAM,wBAAwB,aAC3B,UAA+C;EAC9C,YAAwE,KAAK;EAC7E,KAAK,aAAa,UAAU,KAAK;EACjC,IAAI,MAAM,QAAQ,UAAU;EAC5B,IAAI,oBAAoB,KAAK,GAAG,MAAM,gBAAgB;CACxD,GACA,CAAC,WAAW,IAAI,CAClB;CAEA,MAAM,qBAAqB,aACxB,UAA4C;EAC3C,SAAkE,KAAK;EACvE,KAAK,aAAa,WAAW,KAAK;CACpC,GACA,CAAC,QAAQ,IAAI,CACf;CAEA,MAAM,oBAAoB,aACvB,UAA4C;EAC3C,SAAkE,KAAK;EACvE,KAAK,aAAa,WAAW,KAAK;CACpC,GACA,CAAC,QAAQ,IAAI,CACf;CAEA,MAAM,cAAc,OAAuB,IAAI;CAO/C,MAAM,kBAAkB,gBAAgB,cANrB,aAChB,YAAmC;EAClC,IAAI,CAAC,WAAW,KAAK,kBAAkB,OAAO;CAChD,GACA,CAAC,WAAW,IAAI,CAE6C,GAAG,WAAW;CAC7E,MAAM,qBAAqB,gBAAgB,cAAc,wBAAwB;CACjF,MAAM,kBAAkB,cAChB,uBAAuB,eAAe,MAAM,KAAK,GACvD,CAAC,eAAe,MAAM,KAAK,CAC7B;CACA,MAAM,mBAAmB,iBAAiB;EACxC,MAAM,MAAM,QAAQ,CAAC;EACrB;EACA,UAAU;EACV,eAAe;EACf,UAAU;EACV;EACA;EACA,SAAS;EACT,cAAc;CAChB,CAAC;CAED,sBAAsB;EACpB,IAAI,aAAa,CAAC,MAAM,MAAM;EAE9B,MAAM,iBAAiB,YAAY;EACnC,IAAI,CAAC,gBAAgB;EAErB,MAAM,aAAa,kBAAkB,cAAc;EACnD,KAAK;EACL,MAAM,QAAQ,sBAAsB,IAAI;EACxC,MAAM,gBAAgB,gBAAgB,gBAAgB,IAAI;EAE1D,aAAa;GACX,qBAAqB,KAAK;GAC1B,cAAc;EAChB;CACF,GAAG,CAAC,WAAW,MAAM,IAAI,CAAC;CAE1B,sBAAsB;EACpB,IAAI,CAAC,WAAW;EAEhB,MAAM,WAAW,MAAM,WAAW;EAClC,MAAM,uBAAuB,QAAQ,KAAK,kBAAkB;EAC5D,MAAM,aAAa,kBAAkB,oBAAoB;EACzD,KAAK;EACL,MAAM,QAAQ,sBAAsB,IAAI;EACxC,MAAM,gBACJ,MAAM,QAAQ,CAAC,YAAY,uBAAuB,gBAAgB,sBAAsB,IAAI,IAAI;EAElG,aAAa;GACX,qBAAqB,KAAK;GAC1B,gBAAgB;EAClB;CACF,GAAG;EAAC;EAAW;EAAQ,MAAM;EAAM,MAAM;CAAM,CAAC;CAEhD,IAAI,WAAW;EACb,IAAI,CAAC,YAAY,MAAM,WAAW,UAAU,OAAO;EAEnD,MAAM,iBAAiB,cACrB,OACA;GAAE;GAAQ;GAAW;EAAM,GAC3B;GACE;GACA;GACA,KAAK;GACL,OAAO,CACL;IACE,IAAI;IACJ,MAAM;IACN,UAAU;IACV,kBAAkB;IAClB,WAAW;IACX,QAAQ;GACV,GACA,YACF;EACF,CACF;EAEA,MAAM,uBAAuB,QAAQ,KAAK,kBAAkB;EAC5D,OAAO,uBAAuB,aAAa,gBAAgB,oBAAoB,IAAI;CACrF;CAEA,IAAI,CAAC,MAAM,QAAQ,MAAM,WAAW,UAAU,OAAO;CAErD,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA;EACA,KAAK;EACL,OAAO;GACL;IACE,IAAI;IACJ,OAAO;IACP,GAAG,KAAK,gBAAgB,KAAK;GAC/B;GACA;IAAE,kBAAkB;IAAuB,WAAW;IAAuB,QAAQ;GAAmB;GACxG;EACF;CACF,CACF;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-group-label.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-group-label.tsx"],"mappings":";;;UAUiB,4BAA4B,wBAAwB;;cAGxD,gCAAc,0BAAA,KAAA,8CAAA,cAAA;kBAwBV;OACH,QAAQ;OACR,QAAQ"}
1
+ {"version":3,"file":"menu-group-label.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-group-label.tsx"],"mappings":";;;UAQiB,4BAA4B,wBAAwB;;cAGxD,gCAAc,0BAAA,KAAA,8CAAA,cAAA;kBAwBV;OACH,QAAQ;OACR,QAAQ"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { renderElement } from "../../utils/use-render.js";
3
2
  import { useMenuContext, useMenuGroupContext } from "./context.js";
4
3
  import { useSafeId } from "../../utils/use-safe-id.js";
@@ -1 +1 @@
1
- {"version":3,"file":"menu-group-label.js","names":[],"sources":["../../../../src/ui/menu/menu-group-label.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef, useLayoutEffect } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { useMenuContext, useMenuGroupContext } from './context';\n\nexport interface MenuGroupLabelProps extends UIComponentProps<'div', MenuState> {}\n\n/** Non-interactive label for a group of items. Renders a `<div>`. */\nexport const MenuGroupLabel = forwardRef<HTMLDivElement, MenuGroupLabelProps>(function MenuGroupLabel(\n { render, className, style, id: idProp, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n const group = useMenuGroupContext();\n const generatedId = useSafeId('menu-group-label');\n const id = idProp ?? generatedId;\n\n useLayoutEffect(() => {\n return group?.registerLabel(id);\n }, [group, id]);\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ id }, elementProps],\n }\n );\n});\n\nexport namespace MenuGroupLabel {\n export type Props = MenuGroupLabelProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;AAaA,MAAa,iBAAiB,WAAgD,SAAS,eACrF,EAAE,QAAQ,WAAW,OAAO,IAAI,QAAQ,GAAG,gBAC3C,cACA;CACA,MAAM,EAAE,UAAU,eAAe;CACjC,MAAM,QAAQ,oBAAoB;CAClC,MAAM,cAAc,UAAU,kBAAkB;CAChD,MAAM,KAAK,UAAU;CAErB,sBAAsB;EACpB,OAAO,OAAO,cAAc,EAAE;CAChC,GAAG,CAAC,OAAO,EAAE,CAAC;CAEd,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,YAAY;EAClB,OAAO,CAAC,EAAE,GAAG,GAAG,YAAY;CAC9B,CACF;AACF,CAAC"}
1
+ {"version":3,"file":"menu-group-label.js","names":[],"sources":["../../../../src/ui/menu/menu-group-label.tsx"],"sourcesContent":["import type { MenuState } from '@videojs/core';\nimport { forwardRef, useLayoutEffect } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { useMenuContext, useMenuGroupContext } from './context';\n\nexport interface MenuGroupLabelProps extends UIComponentProps<'div', MenuState> {}\n\n/** Non-interactive label for a group of items. Renders a `<div>`. */\nexport const MenuGroupLabel = forwardRef<HTMLDivElement, MenuGroupLabelProps>(function MenuGroupLabel(\n { render, className, style, id: idProp, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n const group = useMenuGroupContext();\n const generatedId = useSafeId('menu-group-label');\n const id = idProp ?? generatedId;\n\n useLayoutEffect(() => {\n return group?.registerLabel(id);\n }, [group, id]);\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ id }, elementProps],\n }\n );\n});\n\nexport namespace MenuGroupLabel {\n export type Props = MenuGroupLabelProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;AAWA,MAAa,iBAAiB,WAAgD,SAAS,eACrF,EAAE,QAAQ,WAAW,OAAO,IAAI,QAAQ,GAAG,gBAC3C,cACA;CACA,MAAM,EAAE,UAAU,eAAe;CACjC,MAAM,QAAQ,oBAAoB;CAClC,MAAM,cAAc,UAAU,kBAAkB;CAChD,MAAM,KAAK,UAAU;CAErB,sBAAsB;EACpB,OAAO,OAAO,cAAc,EAAE;CAChC,GAAG,CAAC,OAAO,EAAE,CAAC;CAEd,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,YAAY;EAClB,OAAO,CAAC,EAAE,GAAG,GAAG,YAAY;CAC9B,CACF;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-group.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-group.tsx"],"mappings":";;;UAUiB,uBAAuB,wBAAwB;;cAGnD,2BAAS,0BAAA,KAAA,yCAAA,cAAA;kBAuBL;OACH,QAAQ;OACR,QAAQ"}
1
+ {"version":3,"file":"menu-group.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-group.tsx"],"mappings":";;;UAQiB,uBAAuB,wBAAwB;;cAGnD,2BAAS,0BAAA,KAAA,yCAAA,cAAA;kBAuBL;OACH,QAAQ;OACR,QAAQ"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { renderElement } from "../../utils/use-render.js";
3
2
  import { useMenuContext } from "./context.js";
4
3
  import { MenuGroupProvider, getMenuGroupProps } from "./use-menu-group.js";
@@ -1 +1 @@
1
- {"version":3,"file":"menu-group.js","names":[],"sources":["../../../../src/ui/menu/menu-group.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\nimport { getMenuGroupProps, MenuGroupProvider } from './use-menu-group';\n\nexport interface MenuGroupProps extends UIComponentProps<'div', MenuState> {}\n\n/** Groups related menu items. Renders a `<div>` with `role=\"group\"`. */\nexport const MenuGroup = forwardRef<HTMLDivElement, MenuGroupProps>(function MenuGroup(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n\n return (\n <MenuGroupProvider>\n {(labelId) =>\n renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [getMenuGroupProps(labelId, elementProps), elementProps],\n }\n )\n }\n </MenuGroupProvider>\n );\n});\n\nexport namespace MenuGroup {\n export type Props = MenuGroupProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;;AAaA,MAAa,YAAY,WAA2C,SAAS,UAC3E,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,UAAU,eAAe;CAEjC,OACE,oBAAC,mBAAD,EAAA,WACI,YACA,cACE,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,YAAY;EAClB,OAAO,CAAC,kBAAkB,SAAS,YAAY,GAAG,YAAY;CAChE,CACF,EAEe,CAAA;AAEvB,CAAC"}
1
+ {"version":3,"file":"menu-group.js","names":[],"sources":["../../../../src/ui/menu/menu-group.tsx"],"sourcesContent":["import type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\nimport { getMenuGroupProps, MenuGroupProvider } from './use-menu-group';\n\nexport interface MenuGroupProps extends UIComponentProps<'div', MenuState> {}\n\n/** Groups related menu items. Renders a `<div>` with `role=\"group\"`. */\nexport const MenuGroup = forwardRef<HTMLDivElement, MenuGroupProps>(function MenuGroup(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n\n return (\n <MenuGroupProvider>\n {(labelId) =>\n renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [getMenuGroupProps(labelId, elementProps), elementProps],\n }\n )\n }\n </MenuGroupProvider>\n );\n});\n\nexport namespace MenuGroup {\n export type Props = MenuGroupProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;AAWA,MAAa,YAAY,WAA2C,SAAS,UAC3E,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,UAAU,eAAe;CAEjC,OACE,oBAAC,mBAAD,EAAA,WACI,YACA,cACE,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,YAAY;EAClB,OAAO,CAAC,kBAAkB,SAAS,YAAY,GAAG,YAAY;CAChE,CACF,EAEe,CAAA;AAEvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-item-indicator.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-item-indicator.tsx"],"mappings":";;;UASiB,+BAA+B,yBAAyB;;EAEvE;;EAEA;;;cAIW,mCAAiB,0BAAA,KAAA,iDAAA,cAAA;kBAmBb;OACH,QAAQ;OACR,QAAQ"}
1
+ {"version":3,"file":"menu-item-indicator.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-item-indicator.tsx"],"mappings":";;;UAOiB,+BAA+B,yBAAyB;;EAEvE;;EAEA;;;cAIW,mCAAiB,0BAAA,KAAA,iDAAA,cAAA;kBAmBb;OACH,QAAQ;OACR,QAAQ"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { renderElement } from "../../utils/use-render.js";
3
2
  import { useMenuContext } from "./context.js";
4
3
  import { forwardRef } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"menu-item-indicator.js","names":[],"sources":["../../../../src/ui/menu/menu-item-indicator.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuItemIndicatorProps extends UIComponentProps<'span', MenuState> {\n /** Whether the indicator is currently shown. Typically bound to the parent item's checked state. */\n checked?: boolean;\n /** When `true`, renders even when unchecked (useful for animating out). Defaults to `false`. */\n forceMount?: boolean;\n}\n\n/** Visual indicator for a checked state. Only renders when `checked` is `true` (or `forceMount` is set). */\nexport const MenuItemIndicator = forwardRef<HTMLSpanElement, MenuItemIndicatorProps>(function MenuItemIndicator(\n { render, className, style, checked, forceMount = false, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n\n if (!checked && !forceMount) return null;\n\n return renderElement(\n 'span',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ 'aria-hidden': true }, elementProps],\n }\n );\n});\n\nexport namespace MenuItemIndicator {\n export type Props = MenuItemIndicatorProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;AAiBA,MAAa,oBAAoB,WAAoD,SAAS,kBAC5F,EAAE,QAAQ,WAAW,OAAO,SAAS,aAAa,OAAO,GAAG,gBAC5D,cACA;CACA,MAAM,EAAE,UAAU,eAAe;CAEjC,IAAI,CAAC,WAAW,CAAC,YAAY,OAAO;CAEpC,OAAO,cACL,QACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,YAAY;EAClB,OAAO,CAAC,EAAE,eAAe,KAAK,GAAG,YAAY;CAC/C,CACF;AACF,CAAC"}
1
+ {"version":3,"file":"menu-item-indicator.js","names":[],"sources":["../../../../src/ui/menu/menu-item-indicator.tsx"],"sourcesContent":["import type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuItemIndicatorProps extends UIComponentProps<'span', MenuState> {\n /** Whether the indicator is currently shown. Typically bound to the parent item's checked state. */\n checked?: boolean;\n /** When `true`, renders even when unchecked (useful for animating out). Defaults to `false`. */\n forceMount?: boolean;\n}\n\n/** Visual indicator for a checked state. Only renders when `checked` is `true` (or `forceMount` is set). */\nexport const MenuItemIndicator = forwardRef<HTMLSpanElement, MenuItemIndicatorProps>(function MenuItemIndicator(\n { render, className, style, checked, forceMount = false, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n\n if (!checked && !forceMount) return null;\n\n return renderElement(\n 'span',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ 'aria-hidden': true }, elementProps],\n }\n );\n});\n\nexport namespace MenuItemIndicator {\n export type Props = MenuItemIndicatorProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;AAeA,MAAa,oBAAoB,WAAoD,SAAS,kBAC5F,EAAE,QAAQ,WAAW,OAAO,SAAS,aAAa,OAAO,GAAG,gBAC5D,cACA;CACA,MAAM,EAAE,UAAU,eAAe;CAEjC,IAAI,CAAC,WAAW,CAAC,YAAY,OAAO;CAEpC,OAAO,cACL,QACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,YAAY;EAClB,OAAO,CAAC,EAAE,eAAe,KAAK,GAAG,YAAY;CAC/C,CACF;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-item.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-item.tsx"],"mappings":";;;UAUiB,sBAAsB,wBAAwB;;EAE7D;;EAEA;;;cAIW,0BAAQ,0BAAA,KAAA,wCAAA,cAAA;kBA0FJ;OACH,QAAQ;OACR,QAAQ"}
1
+ {"version":3,"file":"menu-item.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-item.tsx"],"mappings":";;;UAQiB,sBAAsB,wBAAwB;;EAE7D;;EAEA;;;cAIW,0BAAQ,0BAAA,KAAA,wCAAA,cAAA;kBA0FJ;OACH,QAAQ;OACR,QAAQ"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { renderElement } from "../../utils/use-render.js";
3
2
  import { useMenuContext } from "./context.js";
4
3
  import { completeMenuItemSelection } from "@videojs/core/dom";
@@ -1 +1 @@
1
- {"version":3,"file":"menu-item.js","names":[],"sources":["../../../../src/ui/menu/menu-item.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { completeMenuItemSelection } from '@videojs/core/dom';\nimport { forwardRef, useCallback, useEffect, useRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuItemProps extends UIComponentProps<'div', MenuState> {\n /** Called when the item is selected. */\n onSelect?: () => void;\n /** Whether the item is disabled. */\n disabled?: boolean;\n}\n\n/** A single action in the menu. Renders a `<div>` with `role=\"menuitem\"`. */\nexport const MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(function MenuItem(\n { render, className, style, onSelect, disabled, onClick, ...elementProps },\n forwardedRef\n) {\n const { menu, state } = useMenuContext();\n const elementRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n return menu.registerItem(element);\n }, [menu]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n onClick?.(event);\n if (event.defaultPrevented) return;\n onSelect?.();\n completeMenuItemSelection(menu);\n },\n [disabled, onClick, onSelect, menu]\n );\n\n const handlePointerEnter = useCallback(() => {\n const element = elementRef.current;\n if (!element || disabled) return;\n menu.highlight(element, { focus: false, pointer: true });\n }, [menu, disabled]);\n\n return (\n <MenuItemContent\n disabled={disabled}\n elementProps={elementProps}\n onClick={handleClick}\n onPointerEnter={handlePointerEnter}\n render={render}\n className={className}\n style={style}\n state={state}\n forwardedRef={forwardedRef}\n elementRef={elementRef}\n />\n );\n});\n\ninterface MenuItemContentProps {\n disabled: boolean | undefined;\n elementProps: Record<string, unknown>;\n onClick: (event: React.MouseEvent<HTMLDivElement>) => void;\n onPointerEnter: () => void;\n render: MenuItemProps['render'];\n className: MenuItemProps['className'];\n style: MenuItemProps['style'];\n state: MenuState;\n forwardedRef: React.ForwardedRef<HTMLDivElement>;\n elementRef: React.RefObject<HTMLDivElement | null>;\n}\n\nfunction MenuItemContent({\n disabled,\n elementProps,\n onClick,\n onPointerEnter,\n render,\n className,\n style,\n state,\n forwardedRef,\n elementRef,\n}: MenuItemContentProps) {\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef, elementRef],\n props: [\n {\n role: 'menuitem' as const,\n 'aria-disabled': disabled ? true : undefined,\n onClick,\n onPointerEnter,\n },\n elementProps,\n ],\n }\n );\n}\n\nexport namespace MenuItem {\n export type Props = MenuItemProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;;AAkBA,MAAa,WAAW,WAA0C,SAAS,SACzE,EAAE,QAAQ,WAAW,OAAO,UAAU,UAAU,SAAS,GAAG,gBAC5D,cACA;CACA,MAAM,EAAE,MAAM,UAAU,eAAe;CACvC,MAAM,aAAa,OAAuB,IAAI;CAE9C,gBAAgB;EACd,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,SAAS;EACd,OAAO,KAAK,aAAa,OAAO;CAClC,GAAG,CAAC,IAAI,CAAC;CAmBT,OACE,oBAAC,iBAAD;EACY;EACI;EACd,SArBgB,aACjB,UAA4C;GAC3C,IAAI,UAAU;GACd,UAAU,KAAK;GACf,IAAI,MAAM,kBAAkB;GAC5B,WAAW;GACX,0BAA0B,IAAI;EAChC,GACA;GAAC;GAAU;GAAS;GAAU;EAAI,CAab;EACnB,gBAXuB,kBAAkB;GAC3C,MAAM,UAAU,WAAW;GAC3B,IAAI,CAAC,WAAW,UAAU;GAC1B,KAAK,UAAU,SAAS;IAAE,OAAO;IAAO,SAAS;GAAK,CAAC;EACzD,GAAG,CAAC,MAAM,QAAQ,CAOmB;EACzB;EACG;EACJ;EACA;EACO;EACF;CACb,CAAA;AAEL,CAAC;AAeD,SAAS,gBAAgB,EACvB,UACA,cACA,SACA,gBACA,QACA,WACA,OACA,OACA,cACA,cACuB;CACvB,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO,CACL;GACE,MAAM;GACN,iBAAiB,WAAW,OAAO,KAAA;GACnC;GACA;EACF,GACA,YACF;CACF,CACF;AACF"}
1
+ {"version":3,"file":"menu-item.js","names":[],"sources":["../../../../src/ui/menu/menu-item.tsx"],"sourcesContent":["import type { MenuState } from '@videojs/core';\nimport { completeMenuItemSelection } from '@videojs/core/dom';\nimport { forwardRef, useCallback, useEffect, useRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuItemProps extends UIComponentProps<'div', MenuState> {\n /** Called when the item is selected. */\n onSelect?: () => void;\n /** Whether the item is disabled. */\n disabled?: boolean;\n}\n\n/** A single action in the menu. Renders a `<div>` with `role=\"menuitem\"`. */\nexport const MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(function MenuItem(\n { render, className, style, onSelect, disabled, onClick, ...elementProps },\n forwardedRef\n) {\n const { menu, state } = useMenuContext();\n const elementRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n return menu.registerItem(element);\n }, [menu]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n onClick?.(event);\n if (event.defaultPrevented) return;\n onSelect?.();\n completeMenuItemSelection(menu);\n },\n [disabled, onClick, onSelect, menu]\n );\n\n const handlePointerEnter = useCallback(() => {\n const element = elementRef.current;\n if (!element || disabled) return;\n menu.highlight(element, { focus: false, pointer: true });\n }, [menu, disabled]);\n\n return (\n <MenuItemContent\n disabled={disabled}\n elementProps={elementProps}\n onClick={handleClick}\n onPointerEnter={handlePointerEnter}\n render={render}\n className={className}\n style={style}\n state={state}\n forwardedRef={forwardedRef}\n elementRef={elementRef}\n />\n );\n});\n\ninterface MenuItemContentProps {\n disabled: boolean | undefined;\n elementProps: Record<string, unknown>;\n onClick: (event: React.MouseEvent<HTMLDivElement>) => void;\n onPointerEnter: () => void;\n render: MenuItemProps['render'];\n className: MenuItemProps['className'];\n style: MenuItemProps['style'];\n state: MenuState;\n forwardedRef: React.ForwardedRef<HTMLDivElement>;\n elementRef: React.RefObject<HTMLDivElement | null>;\n}\n\nfunction MenuItemContent({\n disabled,\n elementProps,\n onClick,\n onPointerEnter,\n render,\n className,\n style,\n state,\n forwardedRef,\n elementRef,\n}: MenuItemContentProps) {\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef, elementRef],\n props: [\n {\n role: 'menuitem' as const,\n 'aria-disabled': disabled ? true : undefined,\n onClick,\n onPointerEnter,\n },\n elementProps,\n ],\n }\n );\n}\n\nexport namespace MenuItem {\n export type Props = MenuItemProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;AAgBA,MAAa,WAAW,WAA0C,SAAS,SACzE,EAAE,QAAQ,WAAW,OAAO,UAAU,UAAU,SAAS,GAAG,gBAC5D,cACA;CACA,MAAM,EAAE,MAAM,UAAU,eAAe;CACvC,MAAM,aAAa,OAAuB,IAAI;CAE9C,gBAAgB;EACd,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,SAAS;EACd,OAAO,KAAK,aAAa,OAAO;CAClC,GAAG,CAAC,IAAI,CAAC;CAmBT,OACE,oBAAC,iBAAD;EACY;EACI;EACd,SArBgB,aACjB,UAA4C;GAC3C,IAAI,UAAU;GACd,UAAU,KAAK;GACf,IAAI,MAAM,kBAAkB;GAC5B,WAAW;GACX,0BAA0B,IAAI;EAChC,GACA;GAAC;GAAU;GAAS;GAAU;EAAI,CAab;EACnB,gBAXuB,kBAAkB;GAC3C,MAAM,UAAU,WAAW;GAC3B,IAAI,CAAC,WAAW,UAAU;GAC1B,KAAK,UAAU,SAAS;IAAE,OAAO;IAAO,SAAS;GAAK,CAAC;EACzD,GAAG,CAAC,MAAM,QAAQ,CAOmB;EACzB;EACG;EACJ;EACA;EACO;EACF;CACb,CAAA;AAEL,CAAC;AAeD,SAAS,gBAAgB,EACvB,UACA,cACA,SACA,gBACA,QACA,WACA,OACA,OACA,cACA,cACuB;CACvB,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO,CACL;GACE,MAAM;GACN,iBAAiB,WAAW,OAAO,KAAA;GACnC;GACA;EACF,GACA,YACF;CACF,CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-radio-group.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-radio-group.tsx"],"mappings":";;;UAUiB,4BAA4B,wBAAwB;;EAEnE;;EAEA,gBAAgB;;;cAIL,gCAAc,0BAAA,KAAA,8CAAA,cAAA;kBAyBV;OACH,QAAQ;OACR,QAAQ"}
1
+ {"version":3,"file":"menu-radio-group.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-radio-group.tsx"],"mappings":";;;UAQiB,4BAA4B,wBAAwB;;EAEnE;;EAEA,gBAAgB;;;cAIL,gCAAc,0BAAA,KAAA,8CAAA,cAAA;kBAyBV;OACH,QAAQ;OACR,QAAQ"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { renderElement } from "../../utils/use-render.js";
3
2
  import { MenuRadioGroupContextProvider, useMenuContext } from "./context.js";
4
3
  import { MenuGroupProvider, getMenuGroupProps } from "./use-menu-group.js";
@@ -1 +1 @@
1
- {"version":3,"file":"menu-radio-group.js","names":[],"sources":["../../../../src/ui/menu/menu-radio-group.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { MenuRadioGroupContextProvider, useMenuContext } from './context';\nimport { getMenuGroupProps, MenuGroupProvider } from './use-menu-group';\n\nexport interface MenuRadioGroupProps extends UIComponentProps<'div', MenuState> {\n /** The currently selected value. */\n value: string;\n /** Called when the user selects a radio item. */\n onValueChange: (value: string) => void;\n}\n\n/** A group of mutually exclusive radio items. Renders a `<div>` with `role=\"group\"`. */\nexport const MenuRadioGroup = forwardRef<HTMLDivElement, MenuRadioGroupProps>(function MenuRadioGroup(\n { render, className, style, value, onValueChange, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n\n return (\n <MenuGroupProvider>\n {(labelId) => (\n <MenuRadioGroupContextProvider value={{ value, onValueChange }}>\n {renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [getMenuGroupProps(labelId, elementProps), elementProps],\n }\n )}\n </MenuRadioGroupContextProvider>\n )}\n </MenuGroupProvider>\n );\n});\n\nexport namespace MenuRadioGroup {\n export type Props = MenuRadioGroupProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;;AAkBA,MAAa,iBAAiB,WAAgD,SAAS,eACrF,EAAE,QAAQ,WAAW,OAAO,OAAO,eAAe,GAAG,gBACrD,cACA;CACA,MAAM,EAAE,UAAU,eAAe;CAEjC,OACE,oBAAC,mBAAD,EAAA,WACI,YACA,oBAAC,+BAAD;EAA+B,OAAO;GAAE;GAAO;EAAc;EAC1D,UAAA,cACC,OACA;GAAE;GAAQ;GAAW;EAAM,GAC3B;GACE;GACA,KAAK,CAAC,YAAY;GAClB,OAAO,CAAC,kBAAkB,SAAS,YAAY,GAAG,YAAY;EAChE,CACF;CAC6B,CAAA,EAEhB,CAAA;AAEvB,CAAC"}
1
+ {"version":3,"file":"menu-radio-group.js","names":[],"sources":["../../../../src/ui/menu/menu-radio-group.tsx"],"sourcesContent":["import type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { MenuRadioGroupContextProvider, useMenuContext } from './context';\nimport { getMenuGroupProps, MenuGroupProvider } from './use-menu-group';\n\nexport interface MenuRadioGroupProps extends UIComponentProps<'div', MenuState> {\n /** The currently selected value. */\n value: string;\n /** Called when the user selects a radio item. */\n onValueChange: (value: string) => void;\n}\n\n/** A group of mutually exclusive radio items. Renders a `<div>` with `role=\"group\"`. */\nexport const MenuRadioGroup = forwardRef<HTMLDivElement, MenuRadioGroupProps>(function MenuRadioGroup(\n { render, className, style, value, onValueChange, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n\n return (\n <MenuGroupProvider>\n {(labelId) => (\n <MenuRadioGroupContextProvider value={{ value, onValueChange }}>\n {renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [getMenuGroupProps(labelId, elementProps), elementProps],\n }\n )}\n </MenuRadioGroupContextProvider>\n )}\n </MenuGroupProvider>\n );\n});\n\nexport namespace MenuRadioGroup {\n export type Props = MenuRadioGroupProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;AAgBA,MAAa,iBAAiB,WAAgD,SAAS,eACrF,EAAE,QAAQ,WAAW,OAAO,OAAO,eAAe,GAAG,gBACrD,cACA;CACA,MAAM,EAAE,UAAU,eAAe;CAEjC,OACE,oBAAC,mBAAD,EAAA,WACI,YACA,oBAAC,+BAAD;EAA+B,OAAO;GAAE;GAAO;EAAc;EAC1D,UAAA,cACC,OACA;GAAE;GAAQ;GAAW;EAAM,GAC3B;GACE;GACA,KAAK,CAAC,YAAY;GAClB,OAAO,CAAC,kBAAkB,SAAS,YAAY,GAAG,YAAY;EAChE,CACF;CAC6B,CAAA,EAEhB,CAAA;AAEvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-radio-item.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-radio-item.tsx"],"mappings":";;;UAUiB,2BAA2B,wBAAwB;;EAElE;;EAEA;;;cAIW,+BAAa,0BAAA,KAAA,6CAAA,cAAA;kBAoDT;OACH,QAAQ;OACR,QAAQ"}
1
+ {"version":3,"file":"menu-radio-item.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-radio-item.tsx"],"mappings":";;;UAQiB,2BAA2B,wBAAwB;;EAElE;;EAEA;;;cAIW,+BAAa,0BAAA,KAAA,6CAAA,cAAA;kBAoDT;OACH,QAAQ;OACR,QAAQ"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { renderElement } from "../../utils/use-render.js";
3
2
  import { useMenuContext, useMenuRadioGroupContext } from "./context.js";
4
3
  import { completeMenuItemSelection } from "@videojs/core/dom";
@@ -1 +1 @@
1
- {"version":3,"file":"menu-radio-item.js","names":[],"sources":["../../../../src/ui/menu/menu-radio-item.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { completeMenuItemSelection } from '@videojs/core/dom';\nimport { forwardRef, useCallback, useEffect, useRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext, useMenuRadioGroupContext } from './context';\n\nexport interface MenuRadioItemProps extends UIComponentProps<'div', MenuState> {\n /** The value this item represents. */\n value: string;\n /** Whether the item is disabled. */\n disabled?: boolean;\n}\n\n/** A radio-style menu item. Renders a `<div>` with `role=\"menuitemradio\"`. */\nexport const MenuRadioItem = forwardRef<HTMLDivElement, MenuRadioItemProps>(function MenuRadioItem(\n { render, className, style, value, disabled, onClick, ...elementProps },\n forwardedRef\n) {\n const { menu, state } = useMenuContext();\n const { value: groupValue, onValueChange } = useMenuRadioGroupContext();\n const elementRef = useRef<HTMLDivElement>(null);\n const checked = groupValue === value;\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n return menu.registerItem(element);\n }, [menu]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n onClick?.(event);\n if (event.defaultPrevented) return;\n onValueChange(value);\n completeMenuItemSelection(menu);\n },\n [disabled, onClick, onValueChange, value, menu]\n );\n\n const handlePointerEnter = useCallback(() => {\n const element = elementRef.current;\n if (!element || disabled) return;\n menu.highlight(element, { focus: false, pointer: true });\n }, [menu, disabled]);\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef, elementRef],\n props: [\n {\n role: 'menuitemradio' as const,\n 'aria-checked': checked,\n 'aria-disabled': disabled ? true : undefined,\n onClick: handleClick,\n onPointerEnter: handlePointerEnter,\n },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace MenuRadioItem {\n export type Props = MenuRadioItemProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;AAkBA,MAAa,gBAAgB,WAA+C,SAAS,cACnF,EAAE,QAAQ,WAAW,OAAO,OAAO,UAAU,SAAS,GAAG,gBACzD,cACA;CACA,MAAM,EAAE,MAAM,UAAU,eAAe;CACvC,MAAM,EAAE,OAAO,YAAY,kBAAkB,yBAAyB;CACtE,MAAM,aAAa,OAAuB,IAAI;CAC9C,MAAM,UAAU,eAAe;CAE/B,gBAAgB;EACd,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,SAAS;EACd,OAAO,KAAK,aAAa,OAAO;CAClC,GAAG,CAAC,IAAI,CAAC;CAET,MAAM,cAAc,aACjB,UAA4C;EAC3C,IAAI,UAAU;EACd,UAAU,KAAK;EACf,IAAI,MAAM,kBAAkB;EAC5B,cAAc,KAAK;EACnB,0BAA0B,IAAI;CAChC,GACA;EAAC;EAAU;EAAS;EAAe;EAAO;CAAI,CAChD;CAEA,MAAM,qBAAqB,kBAAkB;EAC3C,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,WAAW,UAAU;EAC1B,KAAK,UAAU,SAAS;GAAE,OAAO;GAAO,SAAS;EAAK,CAAC;CACzD,GAAG,CAAC,MAAM,QAAQ,CAAC;CAEnB,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO,CACL;GACE,MAAM;GACN,gBAAgB;GAChB,iBAAiB,WAAW,OAAO,KAAA;GACnC,SAAS;GACT,gBAAgB;EAClB,GACA,YACF;CACF,CACF;AACF,CAAC"}
1
+ {"version":3,"file":"menu-radio-item.js","names":[],"sources":["../../../../src/ui/menu/menu-radio-item.tsx"],"sourcesContent":["import type { MenuState } from '@videojs/core';\nimport { completeMenuItemSelection } from '@videojs/core/dom';\nimport { forwardRef, useCallback, useEffect, useRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext, useMenuRadioGroupContext } from './context';\n\nexport interface MenuRadioItemProps extends UIComponentProps<'div', MenuState> {\n /** The value this item represents. */\n value: string;\n /** Whether the item is disabled. */\n disabled?: boolean;\n}\n\n/** A radio-style menu item. Renders a `<div>` with `role=\"menuitemradio\"`. */\nexport const MenuRadioItem = forwardRef<HTMLDivElement, MenuRadioItemProps>(function MenuRadioItem(\n { render, className, style, value, disabled, onClick, ...elementProps },\n forwardedRef\n) {\n const { menu, state } = useMenuContext();\n const { value: groupValue, onValueChange } = useMenuRadioGroupContext();\n const elementRef = useRef<HTMLDivElement>(null);\n const checked = groupValue === value;\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n return menu.registerItem(element);\n }, [menu]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n onClick?.(event);\n if (event.defaultPrevented) return;\n onValueChange(value);\n completeMenuItemSelection(menu);\n },\n [disabled, onClick, onValueChange, value, menu]\n );\n\n const handlePointerEnter = useCallback(() => {\n const element = elementRef.current;\n if (!element || disabled) return;\n menu.highlight(element, { focus: false, pointer: true });\n }, [menu, disabled]);\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef, elementRef],\n props: [\n {\n role: 'menuitemradio' as const,\n 'aria-checked': checked,\n 'aria-disabled': disabled ? true : undefined,\n onClick: handleClick,\n onPointerEnter: handlePointerEnter,\n },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace MenuRadioItem {\n export type Props = MenuRadioItemProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;AAgBA,MAAa,gBAAgB,WAA+C,SAAS,cACnF,EAAE,QAAQ,WAAW,OAAO,OAAO,UAAU,SAAS,GAAG,gBACzD,cACA;CACA,MAAM,EAAE,MAAM,UAAU,eAAe;CACvC,MAAM,EAAE,OAAO,YAAY,kBAAkB,yBAAyB;CACtE,MAAM,aAAa,OAAuB,IAAI;CAC9C,MAAM,UAAU,eAAe;CAE/B,gBAAgB;EACd,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,SAAS;EACd,OAAO,KAAK,aAAa,OAAO;CAClC,GAAG,CAAC,IAAI,CAAC;CAET,MAAM,cAAc,aACjB,UAA4C;EAC3C,IAAI,UAAU;EACd,UAAU,KAAK;EACf,IAAI,MAAM,kBAAkB;EAC5B,cAAc,KAAK;EACnB,0BAA0B,IAAI;CAChC,GACA;EAAC;EAAU;EAAS;EAAe;EAAO;CAAI,CAChD;CAEA,MAAM,qBAAqB,kBAAkB;EAC3C,MAAM,UAAU,WAAW;EAC3B,IAAI,CAAC,WAAW,UAAU;EAC1B,KAAK,UAAU,SAAS;GAAE,OAAO;GAAO,SAAS;EAAK,CAAC;CACzD,GAAG,CAAC,MAAM,QAAQ,CAAC;CAEnB,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO,CACL;GACE,MAAM;GACN,gBAAgB;GAChB,iBAAiB,WAAW,OAAO,KAAA;GACnC,SAAS;GACT,gBAAgB;EAClB,GACA,YACF;CACF,CACF;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-root.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-root.tsx"],"mappings":";;;;UAsBiB,sBAAsB,SAAS;;EAE9C,WAAW;;EAEX,gBAAgB,eAAe,SAAS;;EAExC,wBAAwB;EACxB,WAAW;;iBAGG,WACd,MAAM,gBACN,aACA,cAAc,kBACd,sBAAsB,0BACtB,UACA,aACG,aACF,gBAAgB;kBA+FF;OACH,QAAQ"}
1
+ {"version":3,"file":"menu-root.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-root.tsx"],"mappings":";;;;UAoBiB,sBAAsB,SAAS;;EAE9C,WAAW;;EAEX,gBAAgB,eAAe,SAAS;;EAExC,wBAAwB;EACxB,WAAW;;iBAGG,WACd,MAAM,gBACN,aACA,cAAc,kBACd,sBAAsB,0BACtB,UACA,aACG,aACF,gBAAgB;kBA+FF;OACH,QAAQ"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { useOptionalContainer, useOptionalPlayer } from "../../player/context.js";
3
2
  import { useOptionalPopupGroup } from "../../player/popup-group-context.js";
4
3
  import { useLatestRef } from "../../utils/use-latest-ref.js";
@@ -1 +1 @@
1
- {"version":3,"file":"menu-root.js","names":[],"sources":["../../../../src/ui/menu/menu-root.tsx"],"sourcesContent":["'use client';\n\nimport { MenuCore, MenuDataAttrs } from '@videojs/core';\nimport {\n createMenu,\n createTransition,\n type MenuChangeDetails,\n type PositioningBoundary,\n selectControls,\n} from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useLayoutEffect, useMemo, useState } from 'react';\nimport { useOptionalContainer, useOptionalPlayer } from '../../player/context';\nimport { useOptionalPopupGroup } from '../../player/popup-group-context';\nimport { useDestroy } from '../../utils/use-destroy';\nimport { useLatestRef } from '../../utils/use-latest-ref';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { useOptionalControlsContext } from '../controls/context';\nimport { usePositionedState } from '../hooks/use-positioned-state';\nimport { MenuContextProvider, useOptionalMenuContext } from './context';\n\nexport interface MenuRootProps extends MenuCore.Props {\n /** Boundary used to constrain the root menu popup size. */\n boundary?: PositioningBoundary;\n /** Called when the menu open state changes (fires immediately, before animations). */\n onOpenChange?: (open: boolean, details: MenuChangeDetails) => void;\n /** Called after open/close animations complete. */\n onOpenChangeComplete?: (open: boolean) => void;\n children?: ReactNode;\n}\n\nexport function MenuRoot({\n open: controlledOpen,\n defaultOpen = MenuCore.defaultProps.defaultOpen,\n onOpenChange: onOpenChangeProp,\n onOpenChangeComplete: onOpenChangeCompleteProp,\n boundary = 'container',\n children,\n ...coreProps\n}: MenuRootProps): ReactNode {\n // Detect if we are nested inside a parent Menu.Content — if so, operate as\n // a submenu: no popover positioning, Trigger acts as a parent item.\n const parentMenu = useOptionalMenuContext();\n const controls = useOptionalControlsContext();\n const controlsState = useOptionalPlayer(selectControls);\n const container = useOptionalContainer();\n const popupGroup = useOptionalPopupGroup();\n const isSubmenu = parentMenu !== null;\n const { side, align, closeOnEscape, closeOnOutsideClick } = coreProps;\n\n const [core] = useState(() => new MenuCore({ ...coreProps, isSubmenu }));\n\n const isControlled = controlledOpen !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const resolvedOpen = controlledOpen ?? uncontrolledOpen;\n\n const onOpenChangeRef = useLatestRef(onOpenChangeProp);\n const onOpenChangeCompleteRef = useLatestRef(onOpenChangeCompleteProp);\n const closeOnEscapeRef = useLatestRef(closeOnEscape);\n const closeOnOutsideClickRef = useLatestRef(closeOnOutsideClick);\n const popupGroupRef = useLatestRef(popupGroup);\n const isSubmenuRef = useLatestRef(isSubmenu);\n\n const [menu] = useState(() => {\n const instance = createMenu({\n transition: createTransition(),\n onOpenChange(nextOpen, details) {\n if (!isControlled) setUncontrolledOpen(nextOpen);\n onOpenChangeRef.current?.(nextOpen, details);\n },\n onOpenChangeComplete(nextOpen) {\n onOpenChangeCompleteRef.current?.(nextOpen);\n },\n closeOnEscape: () => closeOnEscapeRef.current ?? MenuCore.defaultProps.closeOnEscape,\n closeOnOutsideClick: () => closeOnOutsideClickRef.current ?? MenuCore.defaultProps.closeOnOutsideClick,\n group: () => (isSubmenuRef.current ? undefined : popupGroupRef.current),\n });\n\n return instance;\n });\n\n const anchorName = useSafeId();\n const contentId = useSafeId('menu');\n\n useLayoutEffect(() => parentMenu?.menu.registerSubmenu(menu), [menu, parentMenu?.menu]);\n\n // Commit only the open state resolved by controlled/uncontrolled ownership.\n useLayoutEffect(() => {\n menu.syncOpen(resolvedOpen);\n }, [menu, resolvedOpen]);\n\n useEffect(() => {\n if (isSubmenu || controls?.state.visible !== false) return;\n\n menu.close('imperative-action');\n }, [controls?.state.visible, isSubmenu, menu]);\n\n useDestroy(menu);\n\n const input = useSnapshot(menu.input);\n\n useEffect(() => {\n if (!input.active || isSubmenu) return;\n\n return controlsState?.requestControlsLock();\n }, [controlsState?.requestControlsLock, input.active, isSubmenu]);\n\n const preferredState = useMemo(() => {\n core.setProps({ side, align, closeOnEscape, closeOnOutsideClick, isSubmenu });\n core.setInput(input);\n return core.getState();\n }, [core, input, side, align, closeOnEscape, closeOnOutsideClick, isSubmenu]);\n const { state, preferredSide, setPositionedSide } = usePositionedState(preferredState);\n\n const contextValue = useMemo(\n () => ({\n core,\n menu,\n parent: parentMenu,\n state,\n preferredSide,\n setPositionedSide,\n stateAttrMap: MenuDataAttrs,\n contentId,\n anchorName,\n boundary,\n container,\n }),\n [core, menu, parentMenu, state, preferredSide, setPositionedSide, contentId, anchorName, boundary, container]\n );\n\n return <MenuContextProvider value={contextValue}>{children}</MenuContextProvider>;\n}\n\nexport namespace MenuRoot {\n export type Props = MenuRootProps;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAgCA,SAAgB,SAAS,EACvB,MAAM,gBACN,cAAc,SAAS,aAAa,aACpC,cAAc,kBACd,sBAAsB,0BACtB,WAAW,aACX,UACA,GAAG,aACwB;CAG3B,MAAM,aAAa,uBAAuB;CAC1C,MAAM,WAAW,2BAA2B;CAC5C,MAAM,gBAAgB,kBAAkB,cAAc;CACtD,MAAM,YAAY,qBAAqB;CACvC,MAAM,aAAa,sBAAsB;CACzC,MAAM,YAAY,eAAe;CACjC,MAAM,EAAE,MAAM,OAAO,eAAe,wBAAwB;CAE5D,MAAM,CAAC,QAAQ,eAAe,IAAI,SAAS;EAAE,GAAG;EAAW;CAAU,CAAC,CAAC;CAEvE,MAAM,eAAe,mBAAmB,KAAA;CACxC,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,WAAW;CACpE,MAAM,eAAe,kBAAkB;CAEvC,MAAM,kBAAkB,aAAa,gBAAgB;CACrD,MAAM,0BAA0B,aAAa,wBAAwB;CACrE,MAAM,mBAAmB,aAAa,aAAa;CACnD,MAAM,yBAAyB,aAAa,mBAAmB;CAC/D,MAAM,gBAAgB,aAAa,UAAU;CAC7C,MAAM,eAAe,aAAa,SAAS;CAE3C,MAAM,CAAC,QAAQ,eAAe;EAe5B,OAdiB,WAAW;GAC1B,YAAY,iBAAiB;GAC7B,aAAa,UAAU,SAAS;IAC9B,IAAI,CAAC,cAAc,oBAAoB,QAAQ;IAC/C,gBAAgB,UAAU,UAAU,OAAO;GAC7C;GACA,qBAAqB,UAAU;IAC7B,wBAAwB,UAAU,QAAQ;GAC5C;GACA,qBAAqB,iBAAiB,WAAW,SAAS,aAAa;GACvE,2BAA2B,uBAAuB,WAAW,SAAS,aAAa;GACnF,aAAc,aAAa,UAAU,KAAA,IAAY,cAAc;EACjE,CAEc;CAChB,CAAC;CAED,MAAM,aAAa,UAAU;CAC7B,MAAM,YAAY,UAAU,MAAM;CAElC,sBAAsB,YAAY,KAAK,gBAAgB,IAAI,GAAG,CAAC,MAAM,YAAY,IAAI,CAAC;CAGtF,sBAAsB;EACpB,KAAK,SAAS,YAAY;CAC5B,GAAG,CAAC,MAAM,YAAY,CAAC;CAEvB,gBAAgB;EACd,IAAI,aAAa,UAAU,MAAM,YAAY,OAAO;EAEpD,KAAK,MAAM,mBAAmB;CAChC,GAAG;EAAC,UAAU,MAAM;EAAS;EAAW;CAAI,CAAC;CAE7C,WAAW,IAAI;CAEf,MAAM,QAAQ,YAAY,KAAK,KAAK;CAEpC,gBAAgB;EACd,IAAI,CAAC,MAAM,UAAU,WAAW;EAEhC,OAAO,eAAe,oBAAoB;CAC5C,GAAG;EAAC,eAAe;EAAqB,MAAM;EAAQ;CAAS,CAAC;CAOhE,MAAM,EAAE,OAAO,eAAe,sBAAsB,mBAL7B,cAAc;EACnC,KAAK,SAAS;GAAE;GAAM;GAAO;GAAe;GAAqB;EAAU,CAAC;EAC5E,KAAK,SAAS,KAAK;EACnB,OAAO,KAAK,SAAS;CACvB,GAAG;EAAC;EAAM;EAAO;EAAM;EAAO;EAAe;EAAqB;CAAS,CACS,CAAC;CAmBrF,OAAO,oBAAC,qBAAD;EAAqB,OAjBP,eACZ;GACL;GACA;GACA,QAAQ;GACR;GACA;GACA;GACA,cAAc;GACd;GACA;GACA;GACA;EACF,IACA;GAAC;GAAM;GAAM;GAAY;GAAO;GAAe;GAAmB;GAAW;GAAY;GAAU;EAAS,CAGhE;EAAI;CAA8B,CAAA;AAClF"}
1
+ {"version":3,"file":"menu-root.js","names":[],"sources":["../../../../src/ui/menu/menu-root.tsx"],"sourcesContent":["import { MenuCore, MenuDataAttrs } from '@videojs/core';\nimport {\n createMenu,\n createTransition,\n type MenuChangeDetails,\n type PositioningBoundary,\n selectControls,\n} from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useLayoutEffect, useMemo, useState } from 'react';\nimport { useOptionalContainer, useOptionalPlayer } from '../../player/context';\nimport { useOptionalPopupGroup } from '../../player/popup-group-context';\nimport { useDestroy } from '../../utils/use-destroy';\nimport { useLatestRef } from '../../utils/use-latest-ref';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { useOptionalControlsContext } from '../controls/context';\nimport { usePositionedState } from '../hooks/use-positioned-state';\nimport { MenuContextProvider, useOptionalMenuContext } from './context';\n\nexport interface MenuRootProps extends MenuCore.Props {\n /** Boundary used to constrain the root menu popup size. */\n boundary?: PositioningBoundary;\n /** Called when the menu open state changes (fires immediately, before animations). */\n onOpenChange?: (open: boolean, details: MenuChangeDetails) => void;\n /** Called after open/close animations complete. */\n onOpenChangeComplete?: (open: boolean) => void;\n children?: ReactNode;\n}\n\nexport function MenuRoot({\n open: controlledOpen,\n defaultOpen = MenuCore.defaultProps.defaultOpen,\n onOpenChange: onOpenChangeProp,\n onOpenChangeComplete: onOpenChangeCompleteProp,\n boundary = 'container',\n children,\n ...coreProps\n}: MenuRootProps): ReactNode {\n // Detect if we are nested inside a parent Menu.Content — if so, operate as\n // a submenu: no popover positioning, Trigger acts as a parent item.\n const parentMenu = useOptionalMenuContext();\n const controls = useOptionalControlsContext();\n const controlsState = useOptionalPlayer(selectControls);\n const container = useOptionalContainer();\n const popupGroup = useOptionalPopupGroup();\n const isSubmenu = parentMenu !== null;\n const { side, align, closeOnEscape, closeOnOutsideClick } = coreProps;\n\n const [core] = useState(() => new MenuCore({ ...coreProps, isSubmenu }));\n\n const isControlled = controlledOpen !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const resolvedOpen = controlledOpen ?? uncontrolledOpen;\n\n const onOpenChangeRef = useLatestRef(onOpenChangeProp);\n const onOpenChangeCompleteRef = useLatestRef(onOpenChangeCompleteProp);\n const closeOnEscapeRef = useLatestRef(closeOnEscape);\n const closeOnOutsideClickRef = useLatestRef(closeOnOutsideClick);\n const popupGroupRef = useLatestRef(popupGroup);\n const isSubmenuRef = useLatestRef(isSubmenu);\n\n const [menu] = useState(() => {\n const instance = createMenu({\n transition: createTransition(),\n onOpenChange(nextOpen, details) {\n if (!isControlled) setUncontrolledOpen(nextOpen);\n onOpenChangeRef.current?.(nextOpen, details);\n },\n onOpenChangeComplete(nextOpen) {\n onOpenChangeCompleteRef.current?.(nextOpen);\n },\n closeOnEscape: () => closeOnEscapeRef.current ?? MenuCore.defaultProps.closeOnEscape,\n closeOnOutsideClick: () => closeOnOutsideClickRef.current ?? MenuCore.defaultProps.closeOnOutsideClick,\n group: () => (isSubmenuRef.current ? undefined : popupGroupRef.current),\n });\n\n return instance;\n });\n\n const anchorName = useSafeId();\n const contentId = useSafeId('menu');\n\n useLayoutEffect(() => parentMenu?.menu.registerSubmenu(menu), [menu, parentMenu?.menu]);\n\n // Commit only the open state resolved by controlled/uncontrolled ownership.\n useLayoutEffect(() => {\n menu.syncOpen(resolvedOpen);\n }, [menu, resolvedOpen]);\n\n useEffect(() => {\n if (isSubmenu || controls?.state.visible !== false) return;\n\n menu.close('imperative-action');\n }, [controls?.state.visible, isSubmenu, menu]);\n\n useDestroy(menu);\n\n const input = useSnapshot(menu.input);\n\n useEffect(() => {\n if (!input.active || isSubmenu) return;\n\n return controlsState?.requestControlsLock();\n }, [controlsState?.requestControlsLock, input.active, isSubmenu]);\n\n const preferredState = useMemo(() => {\n core.setProps({ side, align, closeOnEscape, closeOnOutsideClick, isSubmenu });\n core.setInput(input);\n return core.getState();\n }, [core, input, side, align, closeOnEscape, closeOnOutsideClick, isSubmenu]);\n const { state, preferredSide, setPositionedSide } = usePositionedState(preferredState);\n\n const contextValue = useMemo(\n () => ({\n core,\n menu,\n parent: parentMenu,\n state,\n preferredSide,\n setPositionedSide,\n stateAttrMap: MenuDataAttrs,\n contentId,\n anchorName,\n boundary,\n container,\n }),\n [core, menu, parentMenu, state, preferredSide, setPositionedSide, contentId, anchorName, boundary, container]\n );\n\n return <MenuContextProvider value={contextValue}>{children}</MenuContextProvider>;\n}\n\nexport namespace MenuRoot {\n export type Props = MenuRootProps;\n}\n"],"mappings":";;;;;;;;;;;;;;AA8BA,SAAgB,SAAS,EACvB,MAAM,gBACN,cAAc,SAAS,aAAa,aACpC,cAAc,kBACd,sBAAsB,0BACtB,WAAW,aACX,UACA,GAAG,aACwB;CAG3B,MAAM,aAAa,uBAAuB;CAC1C,MAAM,WAAW,2BAA2B;CAC5C,MAAM,gBAAgB,kBAAkB,cAAc;CACtD,MAAM,YAAY,qBAAqB;CACvC,MAAM,aAAa,sBAAsB;CACzC,MAAM,YAAY,eAAe;CACjC,MAAM,EAAE,MAAM,OAAO,eAAe,wBAAwB;CAE5D,MAAM,CAAC,QAAQ,eAAe,IAAI,SAAS;EAAE,GAAG;EAAW;CAAU,CAAC,CAAC;CAEvE,MAAM,eAAe,mBAAmB,KAAA;CACxC,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,WAAW;CACpE,MAAM,eAAe,kBAAkB;CAEvC,MAAM,kBAAkB,aAAa,gBAAgB;CACrD,MAAM,0BAA0B,aAAa,wBAAwB;CACrE,MAAM,mBAAmB,aAAa,aAAa;CACnD,MAAM,yBAAyB,aAAa,mBAAmB;CAC/D,MAAM,gBAAgB,aAAa,UAAU;CAC7C,MAAM,eAAe,aAAa,SAAS;CAE3C,MAAM,CAAC,QAAQ,eAAe;EAe5B,OAdiB,WAAW;GAC1B,YAAY,iBAAiB;GAC7B,aAAa,UAAU,SAAS;IAC9B,IAAI,CAAC,cAAc,oBAAoB,QAAQ;IAC/C,gBAAgB,UAAU,UAAU,OAAO;GAC7C;GACA,qBAAqB,UAAU;IAC7B,wBAAwB,UAAU,QAAQ;GAC5C;GACA,qBAAqB,iBAAiB,WAAW,SAAS,aAAa;GACvE,2BAA2B,uBAAuB,WAAW,SAAS,aAAa;GACnF,aAAc,aAAa,UAAU,KAAA,IAAY,cAAc;EACjE,CAEc;CAChB,CAAC;CAED,MAAM,aAAa,UAAU;CAC7B,MAAM,YAAY,UAAU,MAAM;CAElC,sBAAsB,YAAY,KAAK,gBAAgB,IAAI,GAAG,CAAC,MAAM,YAAY,IAAI,CAAC;CAGtF,sBAAsB;EACpB,KAAK,SAAS,YAAY;CAC5B,GAAG,CAAC,MAAM,YAAY,CAAC;CAEvB,gBAAgB;EACd,IAAI,aAAa,UAAU,MAAM,YAAY,OAAO;EAEpD,KAAK,MAAM,mBAAmB;CAChC,GAAG;EAAC,UAAU,MAAM;EAAS;EAAW;CAAI,CAAC;CAE7C,WAAW,IAAI;CAEf,MAAM,QAAQ,YAAY,KAAK,KAAK;CAEpC,gBAAgB;EACd,IAAI,CAAC,MAAM,UAAU,WAAW;EAEhC,OAAO,eAAe,oBAAoB;CAC5C,GAAG;EAAC,eAAe;EAAqB,MAAM;EAAQ;CAAS,CAAC;CAOhE,MAAM,EAAE,OAAO,eAAe,sBAAsB,mBAL7B,cAAc;EACnC,KAAK,SAAS;GAAE;GAAM;GAAO;GAAe;GAAqB;EAAU,CAAC;EAC5E,KAAK,SAAS,KAAK;EACnB,OAAO,KAAK,SAAS;CACvB,GAAG;EAAC;EAAM;EAAO;EAAM;EAAO;EAAe;EAAqB;CAAS,CACS,CAAC;CAmBrF,OAAO,oBAAC,qBAAD;EAAqB,OAjBP,eACZ;GACL;GACA;GACA,QAAQ;GACR;GACA;GACA;GACA,cAAc;GACd;GACA;GACA;GACA;EACF,IACA;GAAC;GAAM;GAAM;GAAY;GAAO;GAAe;GAAmB;GAAW;GAAY;GAAU;EAAS,CAGhE;EAAI;CAA8B,CAAA;AAClF"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-separator.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-separator.tsx"],"mappings":";;;UASiB,2BAA2B,wBAAwB;;cAGvD,+BAAa,0BAAA,KAAA,6CAAA,cAAA;kBAiBT;OACH,QAAQ;OACR,QAAQ"}
1
+ {"version":3,"file":"menu-separator.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-separator.tsx"],"mappings":";;;UAOiB,2BAA2B,wBAAwB;;cAGvD,+BAAa,0BAAA,KAAA,6CAAA,cAAA;kBAiBT;OACH,QAAQ;OACR,QAAQ"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { renderElement } from "../../utils/use-render.js";
3
2
  import { useMenuContext } from "./context.js";
4
3
  import { forwardRef } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"menu-separator.js","names":[],"sources":["../../../../src/ui/menu/menu-separator.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuSeparatorProps extends UIComponentProps<'div', MenuState> {}\n\n/** Visual divider between groups of items. Renders a `<div>` with `role=\"separator\"`. */\nexport const MenuSeparator = forwardRef<HTMLDivElement, MenuSeparatorProps>(function MenuSeparator(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ role: 'separator' as const }, elementProps],\n }\n );\n});\n\nexport namespace MenuSeparator {\n export type Props = MenuSeparatorProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;AAYA,MAAa,gBAAgB,WAA+C,SAAS,cACnF,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,UAAU,eAAe;CAEjC,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,YAAY;EAClB,OAAO,CAAC,EAAE,MAAM,YAAqB,GAAG,YAAY;CACtD,CACF;AACF,CAAC"}
1
+ {"version":3,"file":"menu-separator.js","names":[],"sources":["../../../../src/ui/menu/menu-separator.tsx"],"sourcesContent":["import type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuSeparatorProps extends UIComponentProps<'div', MenuState> {}\n\n/** Visual divider between groups of items. Renders a `<div>` with `role=\"separator\"`. */\nexport const MenuSeparator = forwardRef<HTMLDivElement, MenuSeparatorProps>(function MenuSeparator(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ role: 'separator' as const }, elementProps],\n }\n );\n});\n\nexport namespace MenuSeparator {\n export type Props = MenuSeparatorProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;AAUA,MAAa,gBAAgB,WAA+C,SAAS,cACnF,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,UAAU,eAAe;CAEjC,OAAO,cACL,OACA;EAAE;EAAQ;EAAW;CAAM,GAC3B;EACE;EACA,KAAK,CAAC,YAAY;EAClB,OAAO,CAAC,EAAE,MAAM,YAAqB,GAAG,YAAY;CACtD,CACF;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-trigger.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-trigger.tsx"],"mappings":";;;KAYK,qBAAqB,oBAAoB;UAE7B,yBACP,KAAK,2BAA2B;;EAExC;EACA,UAAU,MAAM,kBAAkB;EAClC,YAAY,MAAM,qBAAqB;;;;;;;cAQ5B,6BAAW,0BAAA,KAAA,2CAAA,cAAA,oBAAA;kBA0HP;OACH,QAAQ;OACR,QAAQ"}
1
+ {"version":3,"file":"menu-trigger.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-trigger.tsx"],"mappings":";;;KAWK,qBAAqB,oBAAoB;UAE7B,yBACP,KAAK,2BAA2B;;EAExC;EACA,UAAU,MAAM,kBAAkB;EAClC,YAAY,MAAM,qBAAqB;;;;;;;cAQ5B,6BAAW,0BAAA,KAAA,2CAAA,cAAA,oBAAA;kBAuIP;OACH,QAAQ;OACR,QAAQ"}
@@ -1,10 +1,10 @@
1
- "use client";
2
1
  import { renderElement } from "../../utils/use-render.js";
3
2
  import { MenuTriggerChildContextProvider, useMenuContext } from "./context.js";
4
3
  import { useSafeId } from "../../utils/use-safe-id.js";
5
4
  import { callKeyDownHandler, preventMenuKeyDefault } from "./menu-keyboard.js";
6
5
  import { isMenuNavigationKey } from "@videojs/core/dom";
7
6
  import { forwardRef, useCallback, useEffect, useMemo, useRef } from "react";
7
+ import { isInteractiveActivation } from "@videojs/utils/dom";
8
8
  import { jsx } from "react/jsx-runtime";
9
9
  //#region src/ui/menu/menu-trigger.tsx
10
10
  /**
@@ -65,17 +65,31 @@ const MenuTrigger = forwardRef(function MenuTrigger({ render, className, style,
65
65
  const triggerRef = useCallback((element) => {
66
66
  menu.setTriggerElement(element);
67
67
  }, [menu]);
68
- const rootTriggerProps = useMemo(() => {
69
- if (!disabled) return menu.triggerProps;
70
- return {
71
- onClick: (event) => {
72
- event.preventDefault();
73
- },
74
- onKeyDown: (event) => {
75
- if (event.key === "Enter" || event.key === " " || isMenuNavigationKey(event)) event.preventDefault();
76
- }
77
- };
78
- }, [disabled, menu.triggerProps]);
68
+ const handleRootKeyDown = useCallback((event) => {
69
+ const defaultPreventedByUser = callKeyDownHandler(onKeyDown, event);
70
+ if (disabled || defaultPreventedByUser) {
71
+ if (disabled && isMenuNavigationKey(event)) event.preventDefault();
72
+ return;
73
+ }
74
+ if (isInteractiveActivation(event.nativeEvent)) {
75
+ event.preventDefault();
76
+ menu.triggerProps.onClick(event.nativeEvent);
77
+ return;
78
+ }
79
+ menu.triggerProps.onKeyDown(event);
80
+ }, [
81
+ disabled,
82
+ menu.triggerProps,
83
+ onKeyDown
84
+ ]);
85
+ const rootTriggerProps = useMemo(() => ({
86
+ onClick: disabled ? (event) => event.preventDefault() : menu.triggerProps.onClick,
87
+ onKeyDown: handleRootKeyDown
88
+ }), [
89
+ disabled,
90
+ handleRootKeyDown,
91
+ menu.triggerProps
92
+ ]);
79
93
  if (isSubMenuTrigger) return /* @__PURE__ */ jsx(MenuTriggerSubmenu, {
80
94
  render,
81
95
  className,
@@ -1 +1 @@
1
- {"version":3,"file":"menu-trigger.js","names":[],"sources":["../../../../src/ui/menu/menu-trigger.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuCore, MenuState } from '@videojs/core';\nimport { isMenuNavigationKey } from '@videojs/core/dom';\nimport { forwardRef, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { MenuTriggerChildContextProvider, useMenuContext } from './context';\nimport { callKeyDownHandler, preventMenuKeyDefault } from './menu-keyboard';\n\ntype MenuTriggerElement = HTMLButtonElement | HTMLDivElement;\n\nexport interface MenuTriggerProps\n extends Omit<UIComponentProps<'button', MenuState>, 'type' | 'onClick' | 'onKeyDown'> {\n /** Disables the trigger. */\n disabled?: boolean;\n onClick?: React.MouseEventHandler<MenuTriggerElement>;\n onKeyDown?: React.KeyboardEventHandler<MenuTriggerElement>;\n}\n\n/**\n * Button that toggles the menu visibility. At root level renders a `<button>`.\n * When inside a parent menu (as a submenu trigger), renders as a `<div role=\"menuitem\">`\n * that opens the submenu on click or ArrowRight.\n */\nexport const MenuTrigger = forwardRef<HTMLButtonElement | HTMLDivElement, MenuTriggerProps>(function MenuTrigger(\n { render, className, style, disabled, onClick, onKeyDown, ...elementProps },\n forwardedRef\n) {\n const { core, menu, parent, state, contentId } = useMenuContext();\n const isSubMenuTrigger = parent !== null;\n const controlledId = state.open || state.status === 'ending' ? contentId : undefined;\n\n const elementRef = useRef<HTMLElement>(null);\n const triggerId = useSafeId('sub-trigger');\n\n const parentMenuApi = parent?.menu ?? null;\n\n // Register with the parent menu's item list when acting as a submenu trigger.\n useEffect(() => {\n if (!isSubMenuTrigger || !parentMenuApi) return;\n const element = elementRef.current;\n if (!element) return;\n menu.setTriggerElement(element);\n const unregister = parentMenuApi.registerItem(element);\n return () => {\n unregister();\n menu.setTriggerElement(null);\n };\n }, [isSubMenuTrigger, menu, parentMenuApi]);\n\n const openSubMenu = useCallback(() => {\n if (!disabled) menu.open('click');\n }, [disabled, menu]);\n\n const handleSubMenuClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n openSubMenu();\n },\n [onClick, openSubMenu]\n );\n\n const handleSubMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n const defaultPreventedByUser = callKeyDownHandler(onKeyDown, event);\n if (disabled || defaultPreventedByUser) return;\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n openSubMenu();\n }\n },\n [disabled, onKeyDown, openSubMenu]\n );\n\n const handlePointerEnter = useCallback(() => {\n const element = elementRef.current;\n if (!element || disabled || !parentMenuApi) return;\n parentMenuApi.highlight(element, { focus: false, pointer: true });\n }, [disabled, parentMenuApi]);\n\n // Root trigger mode — standard button that toggles the menu.\n const triggerRef = useCallback(\n (element: HTMLButtonElement | null) => {\n menu.setTriggerElement(element);\n },\n [menu]\n );\n\n const rootTriggerProps = useMemo(() => {\n if (!disabled) return menu.triggerProps;\n\n return {\n onClick: (event: React.MouseEvent<HTMLElement>) => {\n event.preventDefault();\n },\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === 'Enter' || event.key === ' ' || isMenuNavigationKey(event)) {\n event.preventDefault();\n }\n },\n };\n }, [disabled, menu.triggerProps]);\n\n // Submenu trigger mode — renders as a div with role=\"menuitem\"\n if (isSubMenuTrigger) {\n return (\n <MenuTriggerSubmenu\n render={render}\n className={className}\n style={style}\n disabled={disabled}\n elementProps={elementProps}\n forwardedRef={forwardedRef}\n elementRef={elementRef}\n triggerId={triggerId}\n triggerAttrs={core.getTriggerAttrs(state, controlledId)}\n state={state}\n onSubMenuClick={handleSubMenuClick}\n onSubMenuKeyDown={handleSubMenuKeyDown}\n onPointerEnter={handlePointerEnter}\n />\n );\n }\n\n return (\n <MenuTriggerChildContextProvider value>\n {renderElement(\n 'button',\n { render, className, style },\n {\n state,\n ref: [forwardedRef as React.Ref<HTMLButtonElement>, triggerRef],\n props: [\n { type: 'button' as const, ...core.getTriggerAttrs(state, controlledId) },\n disabled ? { disabled: true, 'aria-disabled': 'true' as const } : undefined,\n state.open ? { onKeyDownCapture: preventMenuKeyDefault } : undefined,\n rootTriggerProps,\n elementProps,\n ],\n }\n )}\n </MenuTriggerChildContextProvider>\n );\n});\n\nexport namespace MenuTrigger {\n export type Props = MenuTriggerProps;\n export type State = MenuState;\n}\n\ninterface MenuTriggerSubmenuProps {\n render: MenuTriggerProps['render'];\n className: MenuTriggerProps['className'];\n style: MenuTriggerProps['style'];\n disabled: boolean | undefined;\n elementProps: Record<string, unknown>;\n forwardedRef: React.ForwardedRef<HTMLButtonElement | HTMLDivElement>;\n elementRef: React.RefObject<HTMLElement | null>;\n triggerId: string;\n triggerAttrs: ReturnType<MenuCore['getTriggerAttrs']>;\n state: MenuState;\n onSubMenuClick: (event: React.MouseEvent<HTMLDivElement>) => void;\n onSubMenuKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n onPointerEnter: () => void;\n}\n\nfunction MenuTriggerSubmenu({\n render,\n className,\n style,\n disabled,\n elementProps,\n forwardedRef,\n elementRef,\n triggerId,\n triggerAttrs,\n state,\n onSubMenuClick,\n onSubMenuKeyDown,\n onPointerEnter,\n}: MenuTriggerSubmenuProps) {\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef, elementRef as React.Ref<HTMLDivElement>],\n props: [\n {\n id: triggerId,\n role: 'menuitem' as const,\n ...triggerAttrs,\n 'aria-disabled': disabled ? true : undefined,\n 'data-has-submenu': '',\n onClick: onSubMenuClick,\n onKeyDownCapture: preventMenuKeyDefault,\n onKeyDown: onSubMenuKeyDown,\n onPointerEnter,\n },\n elementProps,\n ],\n }\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"menu-trigger.js","names":[],"sources":["../../../../src/ui/menu/menu-trigger.tsx"],"sourcesContent":["import type { MenuCore, MenuState } from '@videojs/core';\nimport { isMenuNavigationKey } from '@videojs/core/dom';\nimport { isInteractiveActivation } from '@videojs/utils/dom';\nimport { forwardRef, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { MenuTriggerChildContextProvider, useMenuContext } from './context';\nimport { callKeyDownHandler, preventMenuKeyDefault } from './menu-keyboard';\n\ntype MenuTriggerElement = HTMLButtonElement | HTMLDivElement;\n\nexport interface MenuTriggerProps\n extends Omit<UIComponentProps<'button', MenuState>, 'type' | 'onClick' | 'onKeyDown'> {\n /** Disables the trigger. */\n disabled?: boolean;\n onClick?: React.MouseEventHandler<MenuTriggerElement>;\n onKeyDown?: React.KeyboardEventHandler<MenuTriggerElement>;\n}\n\n/**\n * Button that toggles the menu visibility. At root level renders a `<button>`.\n * When inside a parent menu (as a submenu trigger), renders as a `<div role=\"menuitem\">`\n * that opens the submenu on click or ArrowRight.\n */\nexport const MenuTrigger = forwardRef<HTMLButtonElement | HTMLDivElement, MenuTriggerProps>(function MenuTrigger(\n { render, className, style, disabled, onClick, onKeyDown, ...elementProps },\n forwardedRef\n) {\n const { core, menu, parent, state, contentId } = useMenuContext();\n const isSubMenuTrigger = parent !== null;\n const controlledId = state.open || state.status === 'ending' ? contentId : undefined;\n\n const elementRef = useRef<HTMLElement>(null);\n const triggerId = useSafeId('sub-trigger');\n\n const parentMenuApi = parent?.menu ?? null;\n\n // Register with the parent menu's item list when acting as a submenu trigger.\n useEffect(() => {\n if (!isSubMenuTrigger || !parentMenuApi) return;\n const element = elementRef.current;\n if (!element) return;\n menu.setTriggerElement(element);\n const unregister = parentMenuApi.registerItem(element);\n return () => {\n unregister();\n menu.setTriggerElement(null);\n };\n }, [isSubMenuTrigger, menu, parentMenuApi]);\n\n const openSubMenu = useCallback(() => {\n if (!disabled) menu.open('click');\n }, [disabled, menu]);\n\n const handleSubMenuClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n openSubMenu();\n },\n [onClick, openSubMenu]\n );\n\n const handleSubMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n const defaultPreventedByUser = callKeyDownHandler(onKeyDown, event);\n if (disabled || defaultPreventedByUser) return;\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n openSubMenu();\n }\n },\n [disabled, onKeyDown, openSubMenu]\n );\n\n const handlePointerEnter = useCallback(() => {\n const element = elementRef.current;\n if (!element || disabled || !parentMenuApi) return;\n parentMenuApi.highlight(element, { focus: false, pointer: true });\n }, [disabled, parentMenuApi]);\n\n // Root trigger mode — standard button that toggles the menu.\n const triggerRef = useCallback(\n (element: HTMLButtonElement | null) => {\n menu.setTriggerElement(element);\n },\n [menu]\n );\n\n const handleRootKeyDown = useCallback(\n (event: React.KeyboardEvent<MenuTriggerElement>) => {\n const defaultPreventedByUser = callKeyDownHandler(onKeyDown, event);\n\n if (disabled || defaultPreventedByUser) {\n if (disabled && isMenuNavigationKey(event)) event.preventDefault();\n return;\n }\n\n if (isInteractiveActivation(event.nativeEvent)) {\n event.preventDefault();\n menu.triggerProps.onClick(event.nativeEvent);\n return;\n }\n\n menu.triggerProps.onKeyDown(event);\n },\n [disabled, menu.triggerProps, onKeyDown]\n );\n\n const rootTriggerProps = useMemo(\n () => ({\n onClick: disabled ? (event: React.MouseEvent<HTMLElement>) => event.preventDefault() : menu.triggerProps.onClick,\n onKeyDown: handleRootKeyDown,\n }),\n [disabled, handleRootKeyDown, menu.triggerProps]\n );\n\n // Submenu trigger mode — renders as a div with role=\"menuitem\"\n if (isSubMenuTrigger) {\n return (\n <MenuTriggerSubmenu\n render={render}\n className={className}\n style={style}\n disabled={disabled}\n elementProps={elementProps}\n forwardedRef={forwardedRef}\n elementRef={elementRef}\n triggerId={triggerId}\n triggerAttrs={core.getTriggerAttrs(state, controlledId)}\n state={state}\n onSubMenuClick={handleSubMenuClick}\n onSubMenuKeyDown={handleSubMenuKeyDown}\n onPointerEnter={handlePointerEnter}\n />\n );\n }\n\n return (\n <MenuTriggerChildContextProvider value>\n {renderElement(\n 'button',\n { render, className, style },\n {\n state,\n ref: [forwardedRef as React.Ref<HTMLButtonElement>, triggerRef],\n props: [\n { type: 'button' as const, ...core.getTriggerAttrs(state, controlledId) },\n disabled ? { disabled: true, 'aria-disabled': 'true' as const } : undefined,\n state.open ? { onKeyDownCapture: preventMenuKeyDefault } : undefined,\n rootTriggerProps,\n elementProps,\n ],\n }\n )}\n </MenuTriggerChildContextProvider>\n );\n});\n\nexport namespace MenuTrigger {\n export type Props = MenuTriggerProps;\n export type State = MenuState;\n}\n\ninterface MenuTriggerSubmenuProps {\n render: MenuTriggerProps['render'];\n className: MenuTriggerProps['className'];\n style: MenuTriggerProps['style'];\n disabled: boolean | undefined;\n elementProps: Record<string, unknown>;\n forwardedRef: React.ForwardedRef<HTMLButtonElement | HTMLDivElement>;\n elementRef: React.RefObject<HTMLElement | null>;\n triggerId: string;\n triggerAttrs: ReturnType<MenuCore['getTriggerAttrs']>;\n state: MenuState;\n onSubMenuClick: (event: React.MouseEvent<HTMLDivElement>) => void;\n onSubMenuKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => void;\n onPointerEnter: () => void;\n}\n\nfunction MenuTriggerSubmenu({\n render,\n className,\n style,\n disabled,\n elementProps,\n forwardedRef,\n elementRef,\n triggerId,\n triggerAttrs,\n state,\n onSubMenuClick,\n onSubMenuKeyDown,\n onPointerEnter,\n}: MenuTriggerSubmenuProps) {\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef, elementRef as React.Ref<HTMLDivElement>],\n props: [\n {\n id: triggerId,\n role: 'menuitem' as const,\n ...triggerAttrs,\n 'aria-disabled': disabled ? true : undefined,\n 'data-has-submenu': '',\n onClick: onSubMenuClick,\n onKeyDownCapture: preventMenuKeyDefault,\n onKeyDown: onSubMenuKeyDown,\n onPointerEnter,\n },\n elementProps,\n ],\n }\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { MenuGroupContextProvider } from "./context.js";
3
2
  import { useCallback, useMemo, useState } from "react";
4
3
  import { jsx } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"use-menu-group.js","names":[],"sources":["../../../../src/ui/menu/use-menu-group.tsx"],"sourcesContent":["'use client';\n\nimport { type ReactElement, useCallback, useMemo, useState } from 'react';\n\nimport { MenuGroupContextProvider } from './context';\n\ninterface MenuGroupProviderProps {\n children: (labelId: string | undefined) => ReactElement | null;\n}\n\ninterface MenuGroupElementProps {\n 'aria-label'?: unknown;\n 'aria-labelledby'?: unknown;\n}\n\nfunction hasExplicitLabel(elementProps: MenuGroupElementProps): boolean {\n return elementProps['aria-label'] !== undefined || elementProps['aria-labelledby'] !== undefined;\n}\n\nexport function getMenuGroupProps(\n labelId: string | undefined,\n elementProps: MenuGroupElementProps\n): { role: 'group'; 'aria-labelledby'?: string | undefined } {\n return {\n role: 'group',\n 'aria-labelledby': hasExplicitLabel(elementProps) ? undefined : labelId,\n };\n}\n\nexport function MenuGroupProvider({ children }: MenuGroupProviderProps): ReactElement | null {\n const [labelId, setLabelId] = useState<string>();\n\n const registerLabel = useCallback((id: string) => {\n setLabelId(id);\n\n return () => {\n setLabelId((current) => (current === id ? undefined : current));\n };\n }, []);\n\n const value = useMemo(() => ({ registerLabel }), [registerLabel]);\n\n return <MenuGroupContextProvider value={value}>{children(labelId)}</MenuGroupContextProvider>;\n}\n"],"mappings":";;;;;AAeA,SAAS,iBAAiB,cAA8C;CACtE,OAAO,aAAa,kBAAkB,KAAA,KAAa,aAAa,uBAAuB,KAAA;AACzF;AAEA,SAAgB,kBACd,SACA,cAC2D;CAC3D,OAAO;EACL,MAAM;EACN,mBAAmB,iBAAiB,YAAY,IAAI,KAAA,IAAY;CAClE;AACF;AAEA,SAAgB,kBAAkB,EAAE,YAAyD;CAC3F,MAAM,CAAC,SAAS,cAAc,SAAiB;CAE/C,MAAM,gBAAgB,aAAa,OAAe;EAChD,WAAW,EAAE;EAEb,aAAa;GACX,YAAY,YAAa,YAAY,KAAK,KAAA,IAAY,OAAQ;EAChE;CACF,GAAG,CAAC,CAAC;CAIL,OAAO,oBAAC,0BAAD;EAA0B,OAFnB,eAAe,EAAE,cAAc,IAAI,CAAC,aAAa,CAEnB;EAAI,UAAA,SAAS,OAAO;CAA4B,CAAA;AAC9F"}
1
+ {"version":3,"file":"use-menu-group.js","names":[],"sources":["../../../../src/ui/menu/use-menu-group.tsx"],"sourcesContent":["import { type ReactElement, useCallback, useMemo, useState } from 'react';\n\nimport { MenuGroupContextProvider } from './context';\n\ninterface MenuGroupProviderProps {\n children: (labelId: string | undefined) => ReactElement | null;\n}\n\ninterface MenuGroupElementProps {\n 'aria-label'?: unknown;\n 'aria-labelledby'?: unknown;\n}\n\nfunction hasExplicitLabel(elementProps: MenuGroupElementProps): boolean {\n return elementProps['aria-label'] !== undefined || elementProps['aria-labelledby'] !== undefined;\n}\n\nexport function getMenuGroupProps(\n labelId: string | undefined,\n elementProps: MenuGroupElementProps\n): { role: 'group'; 'aria-labelledby'?: string | undefined } {\n return {\n role: 'group',\n 'aria-labelledby': hasExplicitLabel(elementProps) ? undefined : labelId,\n };\n}\n\nexport function MenuGroupProvider({ children }: MenuGroupProviderProps): ReactElement | null {\n const [labelId, setLabelId] = useState<string>();\n\n const registerLabel = useCallback((id: string) => {\n setLabelId(id);\n\n return () => {\n setLabelId((current) => (current === id ? undefined : current));\n };\n }, []);\n\n const value = useMemo(() => ({ registerLabel }), [registerLabel]);\n\n return <MenuGroupContextProvider value={value}>{children(labelId)}</MenuGroupContextProvider>;\n}\n"],"mappings":";;;;AAaA,SAAS,iBAAiB,cAA8C;CACtE,OAAO,aAAa,kBAAkB,KAAA,KAAa,aAAa,uBAAuB,KAAA;AACzF;AAEA,SAAgB,kBACd,SACA,cAC2D;CAC3D,OAAO;EACL,MAAM;EACN,mBAAmB,iBAAiB,YAAY,IAAI,KAAA,IAAY;CAClE;AACF;AAEA,SAAgB,kBAAkB,EAAE,YAAyD;CAC3F,MAAM,CAAC,SAAS,cAAc,SAAiB;CAE/C,MAAM,gBAAgB,aAAa,OAAe;EAChD,WAAW,EAAE;EAEb,aAAa;GACX,YAAY,YAAa,YAAY,KAAK,KAAA,IAAY,OAAQ;EAChE;CACF,GAAG,CAAC,CAAC;CAIL,OAAO,oBAAC,0BAAD;EAA0B,OAFnB,eAAe,EAAE,cAAc,IAAI,CAAC,aAAa,CAEnB;EAAI,UAAA,SAAS,OAAO;CAA4B,CAAA;AAC9F"}
@@ -1 +1 @@
1
- {"version":3,"file":"mute-button.d.ts","names":[],"sources":["../../../../src/ui/mute-button/mute-button.tsx"],"mappings":";;;UAQiB,wBAAwB,2BAA2B,eAAe,QAAQ,eAAe;;cAG7F,4BAAU,0BAAA,kCAAA,cAAA;kBAUN;OACH,QAAQ;OACR,QAAQ,eAAe"}
1
+ {"version":3,"file":"mute-button.d.ts","names":[],"sources":["../../../../src/ui/mute-button/mute-button.tsx"],"mappings":";;;UAMiB,wBAAwB,2BAA2B,eAAe,QAAQ,eAAe;;cAG7F,4BAAU,0BAAA,kCAAA,cAAA;kBAUN;OACH,QAAQ;OACR,QAAQ,eAAe"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { createMediaButton } from "../create-media-button.js";
3
2
  import { selectVolume } from "@videojs/core/dom";
4
3
  import { MuteButtonCore, MuteButtonDataAttrs } from "@videojs/core";
@@ -1 +1 @@
1
- {"version":3,"file":"mute-button.js","names":[],"sources":["../../../../src/ui/mute-button/mute-button.tsx"],"sourcesContent":["'use client';\n\nimport { MuteButtonCore, MuteButtonDataAttrs } from '@videojs/core';\nimport { selectVolume } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface MuteButtonProps extends UIComponentProps<'button', MuteButtonCore.State>, MuteButtonCore.Props {}\n\n/** A button that toggles mute state. */\nexport const MuteButton = createMediaButton<MuteButtonCore, MuteButtonProps>({\n displayName: 'MuteButton',\n core: MuteButtonCore,\n stateAttrMap: MuteButtonDataAttrs,\n selector: selectVolume,\n action: (core, state) => core.toggle(state),\n hotkeyAction: 'toggleMuted',\n isSupported: (state) => !state.hidden,\n});\n\nexport namespace MuteButton {\n export type Props = MuteButtonProps;\n export type State = MuteButtonCore.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;CACd,cAAc,UAAU,CAAC,MAAM;AACjC,CAAC"}
1
+ {"version":3,"file":"mute-button.js","names":[],"sources":["../../../../src/ui/mute-button/mute-button.tsx"],"sourcesContent":["import { MuteButtonCore, MuteButtonDataAttrs } from '@videojs/core';\nimport { selectVolume } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface MuteButtonProps extends UIComponentProps<'button', MuteButtonCore.State>, MuteButtonCore.Props {}\n\n/** A button that toggles mute state. */\nexport const MuteButton = createMediaButton<MuteButtonCore, MuteButtonProps>({\n displayName: 'MuteButton',\n core: MuteButtonCore,\n stateAttrMap: MuteButtonDataAttrs,\n selector: selectVolume,\n action: (core, state) => core.toggle(state),\n hotkeyAction: 'toggleMuted',\n isSupported: (state) => !state.hidden,\n});\n\nexport namespace MuteButton {\n export type Props = MuteButtonProps;\n export type State = MuteButtonCore.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;CACd,cAAc,UAAU,CAAC,MAAM;AACjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pip-button.d.ts","names":[],"sources":["../../../../src/ui/pip-button/pip-button.tsx"],"mappings":";;;UAQiB,uBAAuB,2BAA2B,cAAc,QAAQ,cAAc;;cAG1F,2BAAS,0BAAA,iCAAA,cAAA;kBAUL;OACH,QAAQ;OACR,QAAQ,cAAc"}
1
+ {"version":3,"file":"pip-button.d.ts","names":[],"sources":["../../../../src/ui/pip-button/pip-button.tsx"],"mappings":";;;UAMiB,uBAAuB,2BAA2B,cAAc,QAAQ,cAAc;;cAG1F,2BAAS,0BAAA,iCAAA,cAAA;kBAUL;OACH,QAAQ;OACR,QAAQ,cAAc"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { createMediaButton } from "../create-media-button.js";
3
2
  import { selectPiP } from "@videojs/core/dom";
4
3
  import { PiPButtonCore, PiPButtonDataAttrs } from "@videojs/core";
@@ -1 +1 @@
1
- {"version":3,"file":"pip-button.js","names":[],"sources":["../../../../src/ui/pip-button/pip-button.tsx"],"sourcesContent":["'use client';\n\nimport { PiPButtonCore, PiPButtonDataAttrs } from '@videojs/core';\nimport { selectPiP } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface PiPButtonProps extends UIComponentProps<'button', PiPButtonCore.State>, PiPButtonCore.Props {}\n\n/** A button that toggles picture-in-picture. */\nexport const PiPButton = createMediaButton<PiPButtonCore, PiPButtonProps>({\n displayName: 'PiPButton',\n core: PiPButtonCore,\n stateAttrMap: PiPButtonDataAttrs,\n selector: selectPiP,\n action: (core, state) => core.toggle(state),\n hotkeyAction: 'togglePictureInPicture',\n isSupported: (state) => !state.hidden,\n});\n\nexport namespace PiPButton {\n export type Props = PiPButtonProps;\n export type State = PiPButtonCore.State;\n}\n"],"mappings":";;;;;;AAWA,MAAa,YAAY,kBAAiD;CACxE,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":"pip-button.js","names":[],"sources":["../../../../src/ui/pip-button/pip-button.tsx"],"sourcesContent":["import { PiPButtonCore, PiPButtonDataAttrs } from '@videojs/core';\nimport { selectPiP } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface PiPButtonProps extends UIComponentProps<'button', PiPButtonCore.State>, PiPButtonCore.Props {}\n\n/** A button that toggles picture-in-picture. */\nexport const PiPButton = createMediaButton<PiPButtonCore, PiPButtonProps>({\n displayName: 'PiPButton',\n core: PiPButtonCore,\n stateAttrMap: PiPButtonDataAttrs,\n selector: selectPiP,\n action: (core, state) => core.toggle(state),\n hotkeyAction: 'togglePictureInPicture',\n isSupported: (state) => !state.hidden,\n});\n\nexport namespace PiPButton {\n export type Props = PiPButtonProps;\n export type State = PiPButtonCore.State;\n}\n"],"mappings":";;;;;AASA,MAAa,YAAY,kBAAiD;CACxE,aAAa;CACb,MAAM;CACN,cAAc;CACd,UAAU;CACV,SAAS,MAAM,UAAU,KAAK,OAAO,KAAK;CAC1C,cAAc;CACd,cAAc,UAAU,CAAC,MAAM;AACjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"play-button.d.ts","names":[],"sources":["../../../../src/ui/play-button/play-button.tsx"],"mappings":";;;UAQiB,wBAAwB,2BAA2B,eAAe,QAAQ,eAAe;;;;;;;;;;;;;;;;;cAkB7F,4BAAU,0BAAA,kCAAA,cAAA;kBASN;OACH,QAAQ;OACR,QAAQ,eAAe"}
1
+ {"version":3,"file":"play-button.d.ts","names":[],"sources":["../../../../src/ui/play-button/play-button.tsx"],"mappings":";;;UAMiB,wBAAwB,2BAA2B,eAAe,QAAQ,eAAe;;;;;;;;;;;;;;;;;cAkB7F,4BAAU,0BAAA,kCAAA,cAAA;kBASN;OACH,QAAQ;OACR,QAAQ,eAAe"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { createMediaButton } from "../create-media-button.js";
3
2
  import { selectPlayback } from "@videojs/core/dom";
4
3
  import { PlayButtonCore, PlayButtonDataAttrs } from "@videojs/core";
@@ -1 +1 @@
1
- {"version":3,"file":"play-button.js","names":[],"sources":["../../../../src/ui/play-button/play-button.tsx"],"sourcesContent":["'use client';\n\nimport { PlayButtonCore, PlayButtonDataAttrs } from '@videojs/core';\nimport { selectPlayback } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface PlayButtonProps extends UIComponentProps<'button', PlayButtonCore.State>, PlayButtonCore.Props {}\n\n/**\n * A button that toggles playback.\n *\n * @example\n * ```tsx\n * <PlayButton />\n *\n * <PlayButton\n * render={(props, state) => (\n * <button {...props}>\n * {state.paused ? <PlayIcon /> : <PauseIcon />}\n * </button>\n * )}\n * />\n * ```\n */\nexport const PlayButton = createMediaButton<PlayButtonCore, PlayButtonProps>({\n displayName: 'PlayButton',\n core: PlayButtonCore,\n stateAttrMap: PlayButtonDataAttrs,\n selector: selectPlayback,\n action: (core, state) => core.toggle(state),\n hotkeyAction: 'togglePaused',\n});\n\nexport namespace PlayButton {\n export type Props = PlayButtonProps;\n export type State = PlayButtonCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA0BA,MAAa,aAAa,kBAAmD;CAC3E,aAAa;CACb,MAAM;CACN,cAAc;CACd,UAAU;CACV,SAAS,MAAM,UAAU,KAAK,OAAO,KAAK;CAC1C,cAAc;AAChB,CAAC"}
1
+ {"version":3,"file":"play-button.js","names":[],"sources":["../../../../src/ui/play-button/play-button.tsx"],"sourcesContent":["import { PlayButtonCore, PlayButtonDataAttrs } from '@videojs/core';\nimport { selectPlayback } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface PlayButtonProps extends UIComponentProps<'button', PlayButtonCore.State>, PlayButtonCore.Props {}\n\n/**\n * A button that toggles playback.\n *\n * @example\n * ```tsx\n * <PlayButton />\n *\n * <PlayButton\n * render={(props, state) => (\n * <button {...props}>\n * {state.paused ? <PlayIcon /> : <PauseIcon />}\n * </button>\n * )}\n * />\n * ```\n */\nexport const PlayButton = createMediaButton<PlayButtonCore, PlayButtonProps>({\n displayName: 'PlayButton',\n core: PlayButtonCore,\n stateAttrMap: PlayButtonDataAttrs,\n selector: selectPlayback,\n action: (core, state) => core.toggle(state),\n hotkeyAction: 'togglePaused',\n});\n\nexport namespace PlayButton {\n export type Props = PlayButtonProps;\n export type State = PlayButtonCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwBA,MAAa,aAAa,kBAAmD;CAC3E,aAAa;CACb,MAAM;CACN,cAAc;CACd,UAAU;CACV,SAAS,MAAM,UAAU,KAAK,OAAO,KAAK;CAC1C,cAAc;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-playback-rate-options.d.ts","names":[],"sources":["../../../../src/ui/playback-rate/use-playback-rate-options.ts"],"mappings":";;;UAYiB,iCAAiC,2BAA2B;KAEjE,qBAAqB,sBAAsB;UAEtC;EACf,OAAO,2BAA2B;EAClC;EACA;EACA;EACA;EACA,SAAS;EACT;EACA;EACA,UAAU;EACV,WAAW;;;;;;;;iBAgBG,uBAAuB,QAAQ,2BAA2B;kBAYzD;OACH,QAAQ;OACR,SAAS;OACT,SAAS"}
1
+ {"version":3,"file":"use-playback-rate-options.d.ts","names":[],"sources":["../../../../src/ui/playback-rate/use-playback-rate-options.ts"],"mappings":";;;UAUiB,iCAAiC,2BAA2B;KAEjE,qBAAqB,sBAAsB;UAEtC;EACf,OAAO,2BAA2B;EAClC;EACA;EACA;EACA;EACA,SAAS;EACT;EACA;EACA,UAAU;EACV,WAAW;;;;;;;;iBAgBG,uBAAuB,QAAQ,2BAA2B;kBAYzD;OACH,QAAQ;OACR,SAAS;OACT,SAAS"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { createRadioOptionsHook } from "../hooks/create-radio-options-hook.js";
3
2
  import { selectPlaybackRate } from "@videojs/core/dom";
4
3
  import { useCallback } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"use-playback-rate-options.js","names":["PlaybackRateRadioGroupCoreClass"],"sources":["../../../../src/ui/playback-rate/use-playback-rate-options.ts"],"sourcesContent":["'use client';\n\nimport {\n type PlaybackRateRadioGroupCore,\n PlaybackRateRadioGroupCore as PlaybackRateRadioGroupCoreClass,\n type PlaybackRateRadioGroupOption,\n} from '@videojs/core';\nimport { selectPlaybackRate } from '@videojs/core/dom';\nimport { useCallback } from 'react';\n\nimport { createRadioOptionsHook, type TranslatedRadioOption } from '../hooks/create-radio-options-hook';\n\nexport interface PlaybackRateOptionsProps extends PlaybackRateRadioGroupCore.Props {}\n\nexport type PlaybackRateOption = TranslatedRadioOption<PlaybackRateRadioGroupOption>;\n\nexport interface PlaybackRateOptionsResult {\n state: PlaybackRateRadioGroupCore.State;\n label: string;\n rate: number;\n value: string;\n selectedLabel: string;\n options: PlaybackRateOption[];\n disabled: boolean;\n hidden: boolean;\n setRate: (rate: number) => void;\n setValue: (value: string) => void;\n}\n\nconst usePlaybackRateRadioOptions = createRadioOptionsHook({\n name: 'usePlaybackRateOptions',\n feature: 'playbackRate',\n selector: selectPlaybackRate,\n createCore: () => new PlaybackRateRadioGroupCoreClass(),\n});\n\n/**\n * Create playback rate menu options from the player playback rate state.\n * Returns `null` when the playback rate feature is not configured.\n *\n * @param props - Optional `label`, `formatRate`, and `disabled` overrides.\n */\nexport function usePlaybackRateOptions(props?: PlaybackRateOptionsProps): PlaybackRateOptionsResult | null {\n const result = usePlaybackRateRadioOptions(props);\n const setRate = useCallback((rate: number) => result?.setValue(String(rate)), [result?.setValue]);\n if (!result) return null;\n\n return {\n ...result,\n rate: result.state.rate,\n setRate,\n };\n}\n\nexport namespace usePlaybackRateOptions {\n export type Props = PlaybackRateOptionsProps;\n export type Result = PlaybackRateOptionsResult;\n export type Option = PlaybackRateOption;\n}\n"],"mappings":";;;;;;AA6BA,MAAM,8BAA8B,uBAAuB;CACzD,MAAM;CACN,SAAS;CACT,UAAU;CACV,kBAAkB,IAAIA,2BAAgC;AACxD,CAAC;;;;;;;AAQD,SAAgB,uBAAuB,OAAoE;CACzG,MAAM,SAAS,4BAA4B,KAAK;CAChD,MAAM,UAAU,aAAa,SAAiB,QAAQ,SAAS,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,QAAQ,CAAC;CAChG,IAAI,CAAC,QAAQ,OAAO;CAEpB,OAAO;EACL,GAAG;EACH,MAAM,OAAO,MAAM;EACnB;CACF;AACF"}
1
+ {"version":3,"file":"use-playback-rate-options.js","names":["PlaybackRateRadioGroupCoreClass"],"sources":["../../../../src/ui/playback-rate/use-playback-rate-options.ts"],"sourcesContent":["import {\n type PlaybackRateRadioGroupCore,\n PlaybackRateRadioGroupCore as PlaybackRateRadioGroupCoreClass,\n type PlaybackRateRadioGroupOption,\n} from '@videojs/core';\nimport { selectPlaybackRate } from '@videojs/core/dom';\nimport { useCallback } from 'react';\n\nimport { createRadioOptionsHook, type TranslatedRadioOption } from '../hooks/create-radio-options-hook';\n\nexport interface PlaybackRateOptionsProps extends PlaybackRateRadioGroupCore.Props {}\n\nexport type PlaybackRateOption = TranslatedRadioOption<PlaybackRateRadioGroupOption>;\n\nexport interface PlaybackRateOptionsResult {\n state: PlaybackRateRadioGroupCore.State;\n label: string;\n rate: number;\n value: string;\n selectedLabel: string;\n options: PlaybackRateOption[];\n disabled: boolean;\n hidden: boolean;\n setRate: (rate: number) => void;\n setValue: (value: string) => void;\n}\n\nconst usePlaybackRateRadioOptions = createRadioOptionsHook({\n name: 'usePlaybackRateOptions',\n feature: 'playbackRate',\n selector: selectPlaybackRate,\n createCore: () => new PlaybackRateRadioGroupCoreClass(),\n});\n\n/**\n * Create playback rate menu options from the player playback rate state.\n * Returns `null` when the playback rate feature is not configured.\n *\n * @param props - Optional `label`, `formatRate`, and `disabled` overrides.\n */\nexport function usePlaybackRateOptions(props?: PlaybackRateOptionsProps): PlaybackRateOptionsResult | null {\n const result = usePlaybackRateRadioOptions(props);\n const setRate = useCallback((rate: number) => result?.setValue(String(rate)), [result?.setValue]);\n if (!result) return null;\n\n return {\n ...result,\n rate: result.state.rate,\n setRate,\n };\n}\n\nexport namespace usePlaybackRateOptions {\n export type Props = PlaybackRateOptionsProps;\n export type Result = PlaybackRateOptionsResult;\n export type Option = PlaybackRateOption;\n}\n"],"mappings":";;;;;AA2BA,MAAM,8BAA8B,uBAAuB;CACzD,MAAM;CACN,SAAS;CACT,UAAU;CACV,kBAAkB,IAAIA,2BAAgC;AACxD,CAAC;;;;;;;AAQD,SAAgB,uBAAuB,OAAoE;CACzG,MAAM,SAAS,4BAA4B,KAAK;CAChD,MAAM,UAAU,aAAa,SAAiB,QAAQ,SAAS,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,QAAQ,CAAC;CAChG,IAAI,CAAC,QAAQ,OAAO;CAEpB,OAAO;EACL,GAAG;EACH,MAAM,OAAO,MAAM;EACnB;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"playback-rate-button.d.ts","names":[],"sources":["../../../../src/ui/playback-rate-button/playback-rate-button.tsx"],"mappings":";;;UAQiB,gCACP,2BAA2B,uBAAuB,QACxD,uBAAuB;;;;;;;;;;;;;;;;;cAkBd,oCAAkB,0BAAA,0CAAA,cAAA;kBASd;OACH,QAAQ;OACR,QAAQ,uBAAuB"}
1
+ {"version":3,"file":"playback-rate-button.d.ts","names":[],"sources":["../../../../src/ui/playback-rate-button/playback-rate-button.tsx"],"mappings":";;;UAMiB,gCACP,2BAA2B,uBAAuB,QACxD,uBAAuB;;;;;;;;;;;;;;;;;cAkBd,oCAAkB,0BAAA,0CAAA,cAAA;kBASd;OACH,QAAQ;OACR,QAAQ,uBAAuB"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { createMediaButton } from "../create-media-button.js";
3
2
  import { selectPlaybackRate } from "@videojs/core/dom";
4
3
  import { PlaybackRateButtonCore, PlaybackRateButtonDataAttrs } from "@videojs/core";
@@ -1 +1 @@
1
- {"version":3,"file":"playback-rate-button.js","names":[],"sources":["../../../../src/ui/playback-rate-button/playback-rate-button.tsx"],"sourcesContent":["'use client';\n\nimport { PlaybackRateButtonCore, PlaybackRateButtonDataAttrs } from '@videojs/core';\nimport { selectPlaybackRate } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface PlaybackRateButtonProps\n extends UIComponentProps<'button', PlaybackRateButtonCore.State>,\n PlaybackRateButtonCore.Props {}\n\n/**\n * A button that cycles through playback rates.\n *\n * @example\n * ```tsx\n * <PlaybackRateButton />\n *\n * <PlaybackRateButton\n * render={(props, state) => (\n * <button {...props}>\n * {state.rate}&times;\n * </button>\n * )}\n * />\n * ```\n */\nexport const PlaybackRateButton = createMediaButton<PlaybackRateButtonCore, PlaybackRateButtonProps>({\n displayName: 'PlaybackRateButton',\n core: PlaybackRateButtonCore,\n stateAttrMap: PlaybackRateButtonDataAttrs,\n selector: selectPlaybackRate,\n action: (core, state) => core.cycle(state),\n hotkeyAction: 'speedUp',\n});\n\nexport namespace PlaybackRateButton {\n export type Props = PlaybackRateButtonProps;\n export type State = PlaybackRateButtonCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA4BA,MAAa,qBAAqB,kBAAmE;CACnG,aAAa;CACb,MAAM;CACN,cAAc;CACd,UAAU;CACV,SAAS,MAAM,UAAU,KAAK,MAAM,KAAK;CACzC,cAAc;AAChB,CAAC"}
1
+ {"version":3,"file":"playback-rate-button.js","names":[],"sources":["../../../../src/ui/playback-rate-button/playback-rate-button.tsx"],"sourcesContent":["import { PlaybackRateButtonCore, PlaybackRateButtonDataAttrs } from '@videojs/core';\nimport { selectPlaybackRate } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface PlaybackRateButtonProps\n extends UIComponentProps<'button', PlaybackRateButtonCore.State>,\n PlaybackRateButtonCore.Props {}\n\n/**\n * A button that cycles through playback rates.\n *\n * @example\n * ```tsx\n * <PlaybackRateButton />\n *\n * <PlaybackRateButton\n * render={(props, state) => (\n * <button {...props}>\n * {state.rate}&times;\n * </button>\n * )}\n * />\n * ```\n */\nexport const PlaybackRateButton = createMediaButton<PlaybackRateButtonCore, PlaybackRateButtonProps>({\n displayName: 'PlaybackRateButton',\n core: PlaybackRateButtonCore,\n stateAttrMap: PlaybackRateButtonDataAttrs,\n selector: selectPlaybackRate,\n action: (core, state) => core.cycle(state),\n hotkeyAction: 'speedUp',\n});\n\nexport namespace PlaybackRateButton {\n export type Props = PlaybackRateButtonProps;\n export type State = PlaybackRateButtonCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0BA,MAAa,qBAAqB,kBAAmE;CACnG,aAAa;CACb,MAAM;CACN,cAAc;CACd,UAAU;CACV,SAAS,MAAM,UAAU,KAAK,MAAM,KAAK;CACzC,cAAc;AAChB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"playback-rate-radio-group.d.ts","names":[],"sources":["../../../../src/ui/playback-rate-radio-group/playback-rate-radio-group.tsx"],"mappings":";;;;;;KAiBY,kCAAkC;;EAE5C;;UAGe,wCAAwC,KAAK;;EAE5D;;UAGe,oCACP,KAAK,wBAAwB,2BAA2B,qBAC9D;;EAEF,aAAa,OAAO,iCAAiC,OAAO,oCAAoC;;;;;;;;;;;;;;;;;cAkBrF,wCAAsB,0BAAA,KAAA,sDAAA,cAAA;kBAyDlB;OACH,QAAQ;OACR,QAAQ,2BAA2B;OACnC,YAAY;OACZ,YAAY"}
1
+ {"version":3,"file":"playback-rate-radio-group.d.ts","names":[],"sources":["../../../../src/ui/playback-rate-radio-group/playback-rate-radio-group.tsx"],"mappings":";;;;;;KAeY,kCAAkC;;EAE5C;;UAGe,wCAAwC,KAAK;;EAE5D;;UAGe,oCACP,KAAK,wBAAwB,2BAA2B,qBAC9D;;EAEF,aAAa,OAAO,iCAAiC,OAAO,oCAAoC;;;;;;;;;;;;;;;;;cAkBrF,wCAAsB,0BAAA,KAAA,sDAAA,cAAA;kBAyDlB;OACH,QAAQ;OACR,QAAQ,2BAA2B;OACnC,YAAY;OACZ,YAAY"}
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  import { MenuRadioGroup } from "../menu/menu-radio-group.js";
3
2
  import { usePlaybackRateOptions } from "../playback-rate/use-playback-rate-options.js";
4
3
  import { getStateDataAttrs } from "@videojs/core/dom";