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

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 (897) hide show
  1. package/README.md +6 -0
  2. package/dist/default/icons/dist/react/default/captions-off.js +1 -0
  3. package/dist/default/icons/dist/react/default/captions-off.js.map +1 -1
  4. package/dist/default/icons/dist/react/default/captions-on.js +3 -5
  5. package/dist/default/icons/dist/react/default/captions-on.js.map +1 -1
  6. package/dist/default/icons/dist/react/default/cast-enter.js +38 -11
  7. package/dist/default/icons/dist/react/default/cast-enter.js.map +1 -1
  8. package/dist/default/icons/dist/react/default/cast-exit.js +55 -14
  9. package/dist/default/icons/dist/react/default/cast-exit.js.map +1 -1
  10. package/dist/default/icons/dist/react/default/check.js +22 -0
  11. package/dist/default/icons/dist/react/default/check.js.map +1 -0
  12. package/dist/default/icons/dist/react/default/chevron.js +21 -0
  13. package/dist/default/icons/dist/react/default/chevron.js.map +1 -0
  14. package/dist/default/icons/dist/react/default/fullscreen-enter.js +3 -5
  15. package/dist/default/icons/dist/react/default/fullscreen-enter.js.map +1 -1
  16. package/dist/default/icons/dist/react/default/fullscreen-exit.js +3 -5
  17. package/dist/default/icons/dist/react/default/fullscreen-exit.js.map +1 -1
  18. package/dist/default/icons/dist/react/default/pause.js +2 -3
  19. package/dist/default/icons/dist/react/default/pause.js.map +1 -1
  20. package/dist/default/icons/dist/react/default/pip-enter.js +4 -10
  21. package/dist/default/icons/dist/react/default/pip-enter.js.map +1 -1
  22. package/dist/default/icons/dist/react/default/pip-exit.js +4 -10
  23. package/dist/default/icons/dist/react/default/pip-exit.js.map +1 -1
  24. package/dist/default/icons/dist/react/default/play.js +3 -5
  25. package/dist/default/icons/dist/react/default/play.js.map +1 -1
  26. package/dist/default/icons/dist/react/default/restart.js +3 -8
  27. package/dist/default/icons/dist/react/default/restart.js.map +1 -1
  28. package/dist/default/icons/dist/react/default/seek.js +3 -5
  29. package/dist/default/icons/dist/react/default/seek.js.map +1 -1
  30. package/dist/default/icons/dist/react/default/spinner.js +38 -117
  31. package/dist/default/icons/dist/react/default/spinner.js.map +1 -1
  32. package/dist/default/icons/dist/react/default/volume-high.js +3 -8
  33. package/dist/default/icons/dist/react/default/volume-high.js.map +1 -1
  34. package/dist/default/icons/dist/react/default/volume-low.js +3 -5
  35. package/dist/default/icons/dist/react/default/volume-low.js.map +1 -1
  36. package/dist/default/icons/dist/react/default/volume-off.js +3 -5
  37. package/dist/default/icons/dist/react/default/volume-off.js.map +1 -1
  38. package/dist/default/icons/dist/react/minimal/captions-off.js +1 -0
  39. package/dist/default/icons/dist/react/minimal/captions-off.js.map +1 -1
  40. package/dist/default/icons/dist/react/minimal/captions-on.js +3 -5
  41. package/dist/default/icons/dist/react/minimal/captions-on.js.map +1 -1
  42. package/dist/default/icons/dist/react/minimal/cast-enter.js +38 -7
  43. package/dist/default/icons/dist/react/minimal/cast-enter.js.map +1 -1
  44. package/dist/default/icons/dist/react/minimal/cast-exit.js +56 -11
  45. package/dist/default/icons/dist/react/minimal/cast-exit.js.map +1 -1
  46. package/dist/default/icons/dist/react/minimal/check.js +22 -0
  47. package/dist/default/icons/dist/react/minimal/check.js.map +1 -0
  48. package/dist/default/icons/dist/react/minimal/chevron.js +21 -0
  49. package/dist/default/icons/dist/react/minimal/chevron.js.map +1 -0
  50. package/dist/default/icons/dist/react/minimal/fullscreen-enter.js +5 -13
  51. package/dist/default/icons/dist/react/minimal/fullscreen-enter.js.map +1 -1
  52. package/dist/default/icons/dist/react/minimal/fullscreen-exit.js +5 -13
  53. package/dist/default/icons/dist/react/minimal/fullscreen-exit.js.map +1 -1
  54. package/dist/default/icons/dist/react/minimal/pause.js +2 -3
  55. package/dist/default/icons/dist/react/minimal/pause.js.map +1 -1
  56. package/dist/default/icons/dist/react/minimal/pip-enter.js +5 -14
  57. package/dist/default/icons/dist/react/minimal/pip-enter.js.map +1 -1
  58. package/dist/default/icons/dist/react/minimal/pip-exit.js +5 -14
  59. package/dist/default/icons/dist/react/minimal/pip-exit.js.map +1 -1
  60. package/dist/default/icons/dist/react/minimal/play.js +3 -5
  61. package/dist/default/icons/dist/react/minimal/play.js.map +1 -1
  62. package/dist/default/icons/dist/react/minimal/restart.js +3 -8
  63. package/dist/default/icons/dist/react/minimal/restart.js.map +1 -1
  64. package/dist/default/icons/dist/react/minimal/seek.js +3 -5
  65. package/dist/default/icons/dist/react/minimal/seek.js.map +1 -1
  66. package/dist/default/icons/dist/react/minimal/spinner.js +38 -117
  67. package/dist/default/icons/dist/react/minimal/spinner.js.map +1 -1
  68. package/dist/default/icons/dist/react/minimal/volume-high.js +3 -8
  69. package/dist/default/icons/dist/react/minimal/volume-high.js.map +1 -1
  70. package/dist/default/icons/dist/react/minimal/volume-low.js +3 -5
  71. package/dist/default/icons/dist/react/minimal/volume-low.js.map +1 -1
  72. package/dist/default/icons/dist/react/minimal/volume-off.js +3 -5
  73. package/dist/default/icons/dist/react/minimal/volume-off.js.map +1 -1
  74. package/dist/default/icons/index.js +19 -0
  75. package/dist/default/icons/minimal/index.js +19 -0
  76. package/dist/default/index.js +20 -12
  77. package/dist/default/media/dash-video/index.js +6 -6
  78. package/dist/default/media/dash-video/index.js.map +1 -1
  79. package/dist/default/media/hls-video/index.js +6 -6
  80. package/dist/default/media/hls-video/index.js.map +1 -1
  81. package/dist/default/media/mux-audio/index.js +9 -8
  82. package/dist/default/media/mux-audio/index.js.map +1 -1
  83. package/dist/default/media/mux-video/index.js +6 -6
  84. package/dist/default/media/mux-video/index.js.map +1 -1
  85. package/dist/default/media/native-hls-video/index.js +6 -6
  86. package/dist/default/media/native-hls-video/index.js.map +1 -1
  87. package/dist/default/media/simple-hls-video/index.js +6 -5
  88. package/dist/default/media/simple-hls-video/index.js.map +1 -1
  89. package/dist/default/player/context.js +9 -1
  90. package/dist/default/player/context.js.map +1 -1
  91. package/dist/default/player/create-player.js +4 -1
  92. package/dist/default/player/create-player.js.map +1 -1
  93. package/dist/default/presets/audio/minimal-skin.css +211 -100
  94. package/dist/default/presets/audio/minimal-skin.js +107 -7
  95. package/dist/default/presets/audio/minimal-skin.js.map +1 -1
  96. package/dist/default/presets/audio/minimal-skin.tailwind.js +41 -7
  97. package/dist/default/presets/audio/minimal-skin.tailwind.js.map +1 -1
  98. package/dist/default/presets/audio/skin.css +237 -100
  99. package/dist/default/presets/audio/skin.js +57 -22
  100. package/dist/default/presets/audio/skin.js.map +1 -1
  101. package/dist/default/presets/audio/skin.tailwind.js +115 -14
  102. package/dist/default/presets/audio/skin.tailwind.js.map +1 -1
  103. package/dist/default/presets/live-audio/index.js +7 -0
  104. package/dist/default/presets/live-audio/minimal-skin.css +846 -0
  105. package/dist/default/presets/live-audio/minimal-skin.js +164 -0
  106. package/dist/default/presets/live-audio/minimal-skin.js.map +1 -0
  107. package/dist/default/presets/live-audio/minimal-skin.tailwind.js +194 -0
  108. package/dist/default/presets/live-audio/minimal-skin.tailwind.js.map +1 -0
  109. package/dist/default/presets/live-audio/skin.css +888 -0
  110. package/dist/default/presets/live-audio/skin.js +163 -0
  111. package/dist/default/presets/live-audio/skin.js.map +1 -0
  112. package/dist/default/presets/live-audio/skin.tailwind.js +193 -0
  113. package/dist/default/presets/live-audio/skin.tailwind.js.map +1 -0
  114. package/dist/default/presets/live-video/index.js +7 -0
  115. package/dist/default/presets/live-video/minimal-skin.css +1542 -0
  116. package/dist/default/presets/live-video/minimal-skin.js +306 -0
  117. package/dist/default/presets/live-video/minimal-skin.js.map +1 -0
  118. package/dist/default/presets/live-video/minimal-skin.tailwind.js +341 -0
  119. package/dist/default/presets/live-video/minimal-skin.tailwind.js.map +1 -0
  120. package/dist/default/presets/live-video/skin.css +1544 -0
  121. package/dist/default/presets/live-video/skin.js +304 -0
  122. package/dist/default/presets/live-video/skin.js.map +1 -0
  123. package/dist/default/presets/live-video/skin.tailwind.js +426 -0
  124. package/dist/default/presets/live-video/skin.tailwind.js.map +1 -0
  125. package/dist/default/presets/video/minimal-skin.css +555 -139
  126. package/dist/default/presets/video/minimal-skin.js +205 -23
  127. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  128. package/dist/default/presets/video/minimal-skin.tailwind.js +209 -24
  129. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  130. package/dist/default/presets/video/skin.css +565 -137
  131. package/dist/default/presets/video/skin.js +124 -52
  132. package/dist/default/presets/video/skin.js.map +1 -1
  133. package/dist/default/presets/video/skin.tailwind.js +208 -29
  134. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  135. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +3 -2
  136. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  137. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js +1 -1
  138. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js.map +1 -1
  139. package/dist/default/skins/dist/default/default/tailwind/components/button.js +3 -2
  140. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  141. package/dist/default/skins/dist/default/default/tailwind/components/controls.js +1 -1
  142. package/dist/default/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  143. package/dist/default/skins/dist/default/default/tailwind/components/icon.js +1 -1
  144. package/dist/default/skins/dist/default/default/tailwind/components/icon.js.map +1 -1
  145. package/dist/default/skins/dist/default/default/tailwind/components/input-feedback.js +40 -0
  146. package/dist/default/skins/dist/default/default/tailwind/components/input-feedback.js.map +1 -0
  147. package/dist/default/skins/dist/default/default/tailwind/components/menu.js +12 -0
  148. package/dist/default/skins/dist/default/default/tailwind/components/menu.js.map +1 -0
  149. package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js +1 -1
  150. package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -1
  151. package/dist/default/skins/dist/default/default/tailwind/components/preview.js +1 -1
  152. package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +1 -1
  153. package/dist/default/skins/dist/default/default/tailwind/components/reset.js +7 -0
  154. package/dist/default/skins/dist/default/default/tailwind/components/reset.js.map +1 -0
  155. package/dist/default/skins/dist/default/default/tailwind/components/root.js +2 -1
  156. package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  157. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +1 -1
  158. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  159. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +13 -4
  160. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  161. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +5 -3
  162. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  163. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js +1 -1
  164. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -1
  165. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +3 -2
  166. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  167. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
  168. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  169. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js +1 -1
  170. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -1
  171. package/dist/default/skins/dist/default/minimal/tailwind/components/input-feedback.js +41 -0
  172. package/dist/default/skins/dist/default/minimal/tailwind/components/input-feedback.js.map +1 -0
  173. package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js +12 -0
  174. package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -0
  175. package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js +6 -0
  176. package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -0
  177. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js +1 -1
  178. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -1
  179. package/dist/default/skins/dist/default/minimal/tailwind/components/reset.js +7 -0
  180. package/dist/default/skins/dist/default/minimal/tailwind/components/reset.js.map +1 -0
  181. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +2 -1
  182. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  183. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
  184. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  185. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +7 -4
  186. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  187. package/dist/default/tailwind.css +66 -0
  188. package/dist/default/ui/cast-button/cast-button.js +2 -2
  189. package/dist/default/ui/cast-button/cast-button.js.map +1 -1
  190. package/dist/default/ui/controls/context.js +4 -1
  191. package/dist/default/ui/controls/context.js.map +1 -1
  192. package/dist/default/ui/gesture/{media-gesture.js → gesture.js} +8 -5
  193. package/dist/default/ui/gesture/gesture.js.map +1 -0
  194. package/dist/default/ui/gesture/index.js +2 -0
  195. package/dist/default/ui/hotkey/{media-hotkey.js → hotkey.js} +7 -4
  196. package/dist/default/ui/hotkey/hotkey.js.map +1 -0
  197. package/dist/default/ui/hotkey/index.js +2 -0
  198. package/dist/default/ui/input-indicators/use-indicator-visibility.js +25 -0
  199. package/dist/default/ui/input-indicators/use-indicator-visibility.js.map +1 -0
  200. package/dist/default/ui/input-indicators/use-input-action-subscription.js +22 -0
  201. package/dist/default/ui/input-indicators/use-input-action-subscription.js.map +1 -0
  202. package/dist/default/ui/input-indicators/use-input-indicator-root.js +21 -0
  203. package/dist/default/ui/input-indicators/use-input-indicator-root.js.map +1 -0
  204. package/dist/default/ui/input-indicators/use-rendered-indicator-state.js +40 -0
  205. package/dist/default/ui/input-indicators/use-rendered-indicator-state.js.map +1 -0
  206. package/dist/default/ui/live-button/index.js +2 -0
  207. package/dist/default/ui/live-button/live-button.js +89 -0
  208. package/dist/default/ui/live-button/live-button.js.map +1 -0
  209. package/dist/default/ui/menu/context.js +29 -0
  210. package/dist/default/ui/menu/context.js.map +1 -0
  211. package/dist/default/ui/menu/index.js +3 -0
  212. package/dist/default/ui/menu/index.parts.js +34 -0
  213. package/dist/default/ui/menu/index.parts.js.map +1 -0
  214. package/dist/default/ui/menu/menu-back.js +31 -0
  215. package/dist/default/ui/menu/menu-back.js.map +1 -0
  216. package/dist/default/ui/menu/menu-checkbox-item.js +50 -0
  217. package/dist/default/ui/menu/menu-checkbox-item.js.map +1 -0
  218. package/dist/default/ui/menu/menu-content.js +284 -0
  219. package/dist/default/ui/menu/menu-content.js.map +1 -0
  220. package/dist/default/ui/menu/menu-group.js +26 -0
  221. package/dist/default/ui/menu/menu-group.js.map +1 -0
  222. package/dist/default/ui/menu/menu-item-indicator.js +24 -0
  223. package/dist/default/ui/menu/menu-item-indicator.js.map +1 -0
  224. package/dist/default/ui/menu/menu-item.js +53 -0
  225. package/dist/default/ui/menu/menu-item.js.map +1 -0
  226. package/dist/default/ui/menu/menu-label.js +23 -0
  227. package/dist/default/ui/menu/menu-label.js.map +1 -0
  228. package/dist/default/ui/menu/menu-radio-group.js +33 -0
  229. package/dist/default/ui/menu/menu-radio-group.js.map +1 -0
  230. package/dist/default/ui/menu/menu-radio-item.js +57 -0
  231. package/dist/default/ui/menu/menu-radio-item.js.map +1 -0
  232. package/dist/default/ui/menu/menu-root.js +136 -0
  233. package/dist/default/ui/menu/menu-root.js.map +1 -0
  234. package/dist/default/ui/menu/menu-separator.js +23 -0
  235. package/dist/default/ui/menu/menu-separator.js.map +1 -0
  236. package/dist/default/ui/menu/menu-trigger.js +124 -0
  237. package/dist/default/ui/menu/menu-trigger.js.map +1 -0
  238. package/dist/default/ui/menu/menu-view.js +23 -0
  239. package/dist/default/ui/menu/menu-view.js.map +1 -0
  240. package/dist/default/ui/playback-rate-menu/context.js +20 -0
  241. package/dist/default/ui/playback-rate-menu/context.js.map +1 -0
  242. package/dist/default/ui/playback-rate-menu/index.js +3 -0
  243. package/dist/default/ui/playback-rate-menu/index.parts.js +17 -0
  244. package/dist/default/ui/playback-rate-menu/index.parts.js.map +1 -0
  245. package/dist/default/ui/playback-rate-menu/playback-rate-menu-content.js +28 -0
  246. package/dist/default/ui/playback-rate-menu/playback-rate-menu-content.js.map +1 -0
  247. package/dist/default/ui/playback-rate-menu/playback-rate-menu-root.js +36 -0
  248. package/dist/default/ui/playback-rate-menu/playback-rate-menu-root.js.map +1 -0
  249. package/dist/default/ui/playback-rate-menu/playback-rate-menu-trigger.js +51 -0
  250. package/dist/default/ui/playback-rate-menu/playback-rate-menu-trigger.js.map +1 -0
  251. package/dist/default/ui/playback-rate-menu/use-playback-rate-menu.js +27 -0
  252. package/dist/default/ui/playback-rate-menu/use-playback-rate-menu.js.map +1 -0
  253. package/dist/default/ui/popover/context.js.map +1 -1
  254. package/dist/default/ui/popover/popover-popup.js +20 -7
  255. package/dist/default/ui/popover/popover-popup.js.map +1 -1
  256. package/dist/default/ui/popover/popover-root.js +20 -5
  257. package/dist/default/ui/popover/popover-root.js.map +1 -1
  258. package/dist/default/ui/seek-indicator/context.js +20 -0
  259. package/dist/default/ui/seek-indicator/context.js.map +1 -0
  260. package/dist/default/ui/seek-indicator/index.js +2 -0
  261. package/dist/default/ui/seek-indicator/index.parts.js +12 -0
  262. package/dist/default/ui/seek-indicator/index.parts.js.map +1 -0
  263. package/dist/default/ui/seek-indicator/seek-indicator-root.js +30 -0
  264. package/dist/default/ui/seek-indicator/seek-indicator-root.js.map +1 -0
  265. package/dist/default/ui/seek-indicator/seek-indicator-value.js +23 -0
  266. package/dist/default/ui/seek-indicator/seek-indicator-value.js.map +1 -0
  267. package/dist/default/ui/slider/context.js.map +1 -1
  268. package/dist/default/ui/status-announcer/index.js +2 -0
  269. package/dist/default/ui/status-announcer/status-announcer.js +36 -0
  270. package/dist/default/ui/status-announcer/status-announcer.js.map +1 -0
  271. package/dist/default/ui/status-indicator/context.js +20 -0
  272. package/dist/default/ui/status-indicator/context.js.map +1 -0
  273. package/dist/default/ui/status-indicator/index.js +2 -0
  274. package/dist/default/ui/status-indicator/index.parts.js +12 -0
  275. package/dist/default/ui/status-indicator/index.parts.js.map +1 -0
  276. package/dist/default/ui/status-indicator/status-indicator-root.js +34 -0
  277. package/dist/default/ui/status-indicator/status-indicator-root.js.map +1 -0
  278. package/dist/default/ui/status-indicator/status-indicator-value.js +23 -0
  279. package/dist/default/ui/status-indicator/status-indicator-value.js.map +1 -0
  280. package/dist/default/ui/tooltip/context.js.map +1 -1
  281. package/dist/default/ui/tooltip/tooltip-popup.js +20 -7
  282. package/dist/default/ui/tooltip/tooltip-popup.js.map +1 -1
  283. package/dist/default/ui/tooltip/tooltip-root.js +16 -4
  284. package/dist/default/ui/tooltip/tooltip-root.js.map +1 -1
  285. package/dist/default/ui/volume-indicator/context.js +20 -0
  286. package/dist/default/ui/volume-indicator/context.js.map +1 -0
  287. package/dist/default/ui/volume-indicator/index.js +2 -0
  288. package/dist/default/ui/volume-indicator/index.parts.js +14 -0
  289. package/dist/default/ui/volume-indicator/index.parts.js.map +1 -0
  290. package/dist/default/ui/volume-indicator/volume-indicator-fill.js +36 -0
  291. package/dist/default/ui/volume-indicator/volume-indicator-fill.js.map +1 -0
  292. package/dist/default/ui/volume-indicator/volume-indicator-root.js +30 -0
  293. package/dist/default/ui/volume-indicator/volume-indicator-root.js.map +1 -0
  294. package/dist/default/ui/volume-indicator/volume-indicator-value.js +23 -0
  295. package/dist/default/ui/volume-indicator/volume-indicator-value.js.map +1 -0
  296. package/dist/default/utils/use-attach-media.js +14 -0
  297. package/dist/default/utils/use-attach-media.js.map +1 -0
  298. package/dist/default/utils/use-render.js.map +1 -1
  299. package/dist/default/utils/use-sync-props.js +14 -0
  300. package/dist/default/utils/use-sync-props.js.map +1 -0
  301. package/dist/dev/icons/dist/react/default/captions-off.js +1 -0
  302. package/dist/dev/icons/dist/react/default/captions-off.js.map +1 -1
  303. package/dist/dev/icons/dist/react/default/captions-on.js +3 -5
  304. package/dist/dev/icons/dist/react/default/captions-on.js.map +1 -1
  305. package/dist/dev/icons/dist/react/default/cast-enter.js +38 -11
  306. package/dist/dev/icons/dist/react/default/cast-enter.js.map +1 -1
  307. package/dist/dev/icons/dist/react/default/cast-exit.js +55 -14
  308. package/dist/dev/icons/dist/react/default/cast-exit.js.map +1 -1
  309. package/dist/dev/icons/dist/react/default/check.js +22 -0
  310. package/dist/dev/icons/dist/react/default/check.js.map +1 -0
  311. package/dist/dev/icons/dist/react/default/chevron.js +21 -0
  312. package/dist/dev/icons/dist/react/default/chevron.js.map +1 -0
  313. package/dist/dev/icons/dist/react/default/fullscreen-enter.js +3 -5
  314. package/dist/dev/icons/dist/react/default/fullscreen-enter.js.map +1 -1
  315. package/dist/dev/icons/dist/react/default/fullscreen-exit.js +3 -5
  316. package/dist/dev/icons/dist/react/default/fullscreen-exit.js.map +1 -1
  317. package/dist/dev/icons/dist/react/default/index.d.ts +23 -0
  318. package/dist/dev/icons/dist/react/default/index.d.ts.map +1 -0
  319. package/dist/dev/icons/dist/react/default/pause.js +2 -3
  320. package/dist/dev/icons/dist/react/default/pause.js.map +1 -1
  321. package/dist/dev/icons/dist/react/default/pip-enter.js +4 -10
  322. package/dist/dev/icons/dist/react/default/pip-enter.js.map +1 -1
  323. package/dist/dev/icons/dist/react/default/pip-exit.js +4 -10
  324. package/dist/dev/icons/dist/react/default/pip-exit.js.map +1 -1
  325. package/dist/dev/icons/dist/react/default/play.js +3 -5
  326. package/dist/dev/icons/dist/react/default/play.js.map +1 -1
  327. package/dist/dev/icons/dist/react/default/restart.js +3 -8
  328. package/dist/dev/icons/dist/react/default/restart.js.map +1 -1
  329. package/dist/dev/icons/dist/react/default/seek.js +3 -5
  330. package/dist/dev/icons/dist/react/default/seek.js.map +1 -1
  331. package/dist/dev/icons/dist/react/default/spinner.js +38 -117
  332. package/dist/dev/icons/dist/react/default/spinner.js.map +1 -1
  333. package/dist/dev/icons/dist/react/default/volume-high.js +3 -8
  334. package/dist/dev/icons/dist/react/default/volume-high.js.map +1 -1
  335. package/dist/dev/icons/dist/react/default/volume-low.js +3 -5
  336. package/dist/dev/icons/dist/react/default/volume-low.js.map +1 -1
  337. package/dist/dev/icons/dist/react/default/volume-off.js +3 -5
  338. package/dist/dev/icons/dist/react/default/volume-off.js.map +1 -1
  339. package/dist/dev/icons/dist/react/minimal/captions-off.js +1 -0
  340. package/dist/dev/icons/dist/react/minimal/captions-off.js.map +1 -1
  341. package/dist/dev/icons/dist/react/minimal/captions-on.js +3 -5
  342. package/dist/dev/icons/dist/react/minimal/captions-on.js.map +1 -1
  343. package/dist/dev/icons/dist/react/minimal/cast-enter.js +38 -7
  344. package/dist/dev/icons/dist/react/minimal/cast-enter.js.map +1 -1
  345. package/dist/dev/icons/dist/react/minimal/cast-exit.js +56 -11
  346. package/dist/dev/icons/dist/react/minimal/cast-exit.js.map +1 -1
  347. package/dist/dev/icons/dist/react/minimal/check.js +22 -0
  348. package/dist/dev/icons/dist/react/minimal/check.js.map +1 -0
  349. package/dist/dev/icons/dist/react/minimal/chevron.js +21 -0
  350. package/dist/dev/icons/dist/react/minimal/chevron.js.map +1 -0
  351. package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js +5 -13
  352. package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js.map +1 -1
  353. package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js +5 -13
  354. package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js.map +1 -1
  355. package/dist/dev/icons/dist/react/minimal/index.d.ts +23 -0
  356. package/dist/dev/icons/dist/react/minimal/index.d.ts.map +1 -0
  357. package/dist/dev/icons/dist/react/minimal/pause.js +2 -3
  358. package/dist/dev/icons/dist/react/minimal/pause.js.map +1 -1
  359. package/dist/dev/icons/dist/react/minimal/pip-enter.js +5 -14
  360. package/dist/dev/icons/dist/react/minimal/pip-enter.js.map +1 -1
  361. package/dist/dev/icons/dist/react/minimal/pip-exit.js +5 -14
  362. package/dist/dev/icons/dist/react/minimal/pip-exit.js.map +1 -1
  363. package/dist/dev/icons/dist/react/minimal/play.js +3 -5
  364. package/dist/dev/icons/dist/react/minimal/play.js.map +1 -1
  365. package/dist/dev/icons/dist/react/minimal/restart.js +3 -8
  366. package/dist/dev/icons/dist/react/minimal/restart.js.map +1 -1
  367. package/dist/dev/icons/dist/react/minimal/seek.js +3 -5
  368. package/dist/dev/icons/dist/react/minimal/seek.js.map +1 -1
  369. package/dist/dev/icons/dist/react/minimal/spinner.js +38 -117
  370. package/dist/dev/icons/dist/react/minimal/spinner.js.map +1 -1
  371. package/dist/dev/icons/dist/react/minimal/volume-high.js +3 -8
  372. package/dist/dev/icons/dist/react/minimal/volume-high.js.map +1 -1
  373. package/dist/dev/icons/dist/react/minimal/volume-low.js +3 -5
  374. package/dist/dev/icons/dist/react/minimal/volume-low.js.map +1 -1
  375. package/dist/dev/icons/dist/react/minimal/volume-off.js +3 -5
  376. package/dist/dev/icons/dist/react/minimal/volume-off.js.map +1 -1
  377. package/dist/dev/icons/index.d.ts +2 -0
  378. package/dist/dev/icons/index.js +19 -0
  379. package/dist/dev/icons/minimal/index.d.ts +2 -0
  380. package/dist/dev/icons/minimal/index.js +19 -0
  381. package/dist/dev/index.d.ts +28 -12
  382. package/dist/dev/index.js +20 -12
  383. package/dist/dev/media/audio.d.ts +2 -2
  384. package/dist/dev/media/audio.d.ts.map +1 -1
  385. package/dist/dev/media/background-video/index.d.ts +2 -2
  386. package/dist/dev/media/background-video/index.d.ts.map +1 -1
  387. package/dist/dev/media/dash-video/index.d.ts +7 -8
  388. package/dist/dev/media/dash-video/index.d.ts.map +1 -1
  389. package/dist/dev/media/dash-video/index.js +6 -6
  390. package/dist/dev/media/dash-video/index.js.map +1 -1
  391. package/dist/dev/media/hls-video/index.d.ts +7 -8
  392. package/dist/dev/media/hls-video/index.d.ts.map +1 -1
  393. package/dist/dev/media/hls-video/index.js +6 -6
  394. package/dist/dev/media/hls-video/index.js.map +1 -1
  395. package/dist/dev/media/mux-audio/index.d.ts +11 -9
  396. package/dist/dev/media/mux-audio/index.d.ts.map +1 -1
  397. package/dist/dev/media/mux-audio/index.js +9 -8
  398. package/dist/dev/media/mux-audio/index.js.map +1 -1
  399. package/dist/dev/media/mux-video/index.d.ts +7 -8
  400. package/dist/dev/media/mux-video/index.d.ts.map +1 -1
  401. package/dist/dev/media/mux-video/index.js +6 -6
  402. package/dist/dev/media/mux-video/index.js.map +1 -1
  403. package/dist/dev/media/native-hls-video/index.d.ts +7 -8
  404. package/dist/dev/media/native-hls-video/index.d.ts.map +1 -1
  405. package/dist/dev/media/native-hls-video/index.js +6 -6
  406. package/dist/dev/media/native-hls-video/index.js.map +1 -1
  407. package/dist/dev/media/simple-hls-video/index.d.ts +7 -6
  408. package/dist/dev/media/simple-hls-video/index.d.ts.map +1 -1
  409. package/dist/dev/media/simple-hls-video/index.js +6 -5
  410. package/dist/dev/media/simple-hls-video/index.js.map +1 -1
  411. package/dist/dev/media/video.d.ts +2 -2
  412. package/dist/dev/media/video.d.ts.map +1 -1
  413. package/dist/dev/player/context.d.ts +7 -4
  414. package/dist/dev/player/context.d.ts.map +1 -1
  415. package/dist/dev/player/context.js +9 -1
  416. package/dist/dev/player/context.js.map +1 -1
  417. package/dist/dev/player/create-player.d.ts.map +1 -1
  418. package/dist/dev/player/create-player.js +4 -1
  419. package/dist/dev/player/create-player.js.map +1 -1
  420. package/dist/dev/presets/audio/minimal-skin.css +211 -100
  421. package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -1
  422. package/dist/dev/presets/audio/minimal-skin.js +107 -7
  423. package/dist/dev/presets/audio/minimal-skin.js.map +1 -1
  424. package/dist/dev/presets/audio/minimal-skin.tailwind.d.ts.map +1 -1
  425. package/dist/dev/presets/audio/minimal-skin.tailwind.js +41 -7
  426. package/dist/dev/presets/audio/minimal-skin.tailwind.js.map +1 -1
  427. package/dist/dev/presets/audio/skin.css +237 -100
  428. package/dist/dev/presets/audio/skin.d.ts.map +1 -1
  429. package/dist/dev/presets/audio/skin.js +57 -22
  430. package/dist/dev/presets/audio/skin.js.map +1 -1
  431. package/dist/dev/presets/audio/skin.tailwind.d.ts.map +1 -1
  432. package/dist/dev/presets/audio/skin.tailwind.js +115 -14
  433. package/dist/dev/presets/audio/skin.tailwind.js.map +1 -1
  434. package/dist/dev/presets/background/skin.d.ts +2 -2
  435. package/dist/dev/presets/background/skin.d.ts.map +1 -1
  436. package/dist/dev/presets/live-audio/index.d.ts +7 -0
  437. package/dist/dev/presets/live-audio/index.js +7 -0
  438. package/dist/dev/presets/live-audio/minimal-skin.css +846 -0
  439. package/dist/dev/presets/live-audio/minimal-skin.d.ts +16 -0
  440. package/dist/dev/presets/live-audio/minimal-skin.d.ts.map +1 -0
  441. package/dist/dev/presets/live-audio/minimal-skin.js +164 -0
  442. package/dist/dev/presets/live-audio/minimal-skin.js.map +1 -0
  443. package/dist/dev/presets/live-audio/minimal-skin.tailwind.d.ts +8 -0
  444. package/dist/dev/presets/live-audio/minimal-skin.tailwind.d.ts.map +1 -0
  445. package/dist/dev/presets/live-audio/minimal-skin.tailwind.js +194 -0
  446. package/dist/dev/presets/live-audio/minimal-skin.tailwind.js.map +1 -0
  447. package/dist/dev/presets/live-audio/skin.css +888 -0
  448. package/dist/dev/presets/live-audio/skin.d.ts +15 -0
  449. package/dist/dev/presets/live-audio/skin.d.ts.map +1 -0
  450. package/dist/dev/presets/live-audio/skin.js +163 -0
  451. package/dist/dev/presets/live-audio/skin.js.map +1 -0
  452. package/dist/dev/presets/live-audio/skin.tailwind.d.ts +8 -0
  453. package/dist/dev/presets/live-audio/skin.tailwind.d.ts.map +1 -0
  454. package/dist/dev/presets/live-audio/skin.tailwind.js +193 -0
  455. package/dist/dev/presets/live-audio/skin.tailwind.js.map +1 -0
  456. package/dist/dev/presets/live-video/index.d.ts +7 -0
  457. package/dist/dev/presets/live-video/index.js +7 -0
  458. package/dist/dev/presets/live-video/minimal-skin.css +1542 -0
  459. package/dist/dev/presets/live-video/minimal-skin.d.ts +16 -0
  460. package/dist/dev/presets/live-video/minimal-skin.d.ts.map +1 -0
  461. package/dist/dev/presets/live-video/minimal-skin.js +306 -0
  462. package/dist/dev/presets/live-video/minimal-skin.js.map +1 -0
  463. package/dist/dev/presets/live-video/minimal-skin.tailwind.d.ts +8 -0
  464. package/dist/dev/presets/live-video/minimal-skin.tailwind.d.ts.map +1 -0
  465. package/dist/dev/presets/live-video/minimal-skin.tailwind.js +341 -0
  466. package/dist/dev/presets/live-video/minimal-skin.tailwind.js.map +1 -0
  467. package/dist/dev/presets/live-video/skin.css +1544 -0
  468. package/dist/dev/presets/live-video/skin.d.ts +15 -0
  469. package/dist/dev/presets/live-video/skin.d.ts.map +1 -0
  470. package/dist/dev/presets/live-video/skin.js +304 -0
  471. package/dist/dev/presets/live-video/skin.js.map +1 -0
  472. package/dist/dev/presets/live-video/skin.tailwind.d.ts +8 -0
  473. package/dist/dev/presets/live-video/skin.tailwind.d.ts.map +1 -0
  474. package/dist/dev/presets/live-video/skin.tailwind.js +426 -0
  475. package/dist/dev/presets/live-video/skin.tailwind.js.map +1 -0
  476. package/dist/dev/presets/video/minimal-skin.css +555 -139
  477. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
  478. package/dist/dev/presets/video/minimal-skin.js +205 -23
  479. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  480. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
  481. package/dist/dev/presets/video/minimal-skin.tailwind.js +209 -24
  482. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  483. package/dist/dev/presets/video/skin.css +565 -137
  484. package/dist/dev/presets/video/skin.d.ts.map +1 -1
  485. package/dist/dev/presets/video/skin.js +124 -52
  486. package/dist/dev/presets/video/skin.js.map +1 -1
  487. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
  488. package/dist/dev/presets/video/skin.tailwind.js +208 -29
  489. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  490. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +3 -2
  491. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  492. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js +1 -1
  493. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js.map +1 -1
  494. package/dist/dev/skins/dist/default/default/tailwind/components/button.js +3 -2
  495. package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  496. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js +1 -1
  497. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  498. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js +1 -1
  499. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js.map +1 -1
  500. package/dist/dev/skins/dist/default/default/tailwind/components/input-feedback.js +40 -0
  501. package/dist/dev/skins/dist/default/default/tailwind/components/input-feedback.js.map +1 -0
  502. package/dist/dev/skins/dist/default/default/tailwind/components/menu.js +12 -0
  503. package/dist/dev/skins/dist/default/default/tailwind/components/menu.js.map +1 -0
  504. package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js +1 -1
  505. package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -1
  506. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js +1 -1
  507. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +1 -1
  508. package/dist/dev/skins/dist/default/default/tailwind/components/reset.js +7 -0
  509. package/dist/dev/skins/dist/default/default/tailwind/components/reset.js.map +1 -0
  510. package/dist/dev/skins/dist/default/default/tailwind/components/root.js +2 -1
  511. package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  512. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +1 -1
  513. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  514. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +13 -4
  515. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  516. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +5 -3
  517. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  518. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js +1 -1
  519. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -1
  520. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +3 -2
  521. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  522. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
  523. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  524. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js +1 -1
  525. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -1
  526. package/dist/dev/skins/dist/default/minimal/tailwind/components/input-feedback.js +41 -0
  527. package/dist/dev/skins/dist/default/minimal/tailwind/components/input-feedback.js.map +1 -0
  528. package/dist/dev/skins/dist/default/minimal/tailwind/components/menu.js +12 -0
  529. package/dist/dev/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -0
  530. package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js +6 -0
  531. package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -0
  532. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js +1 -1
  533. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -1
  534. package/dist/dev/skins/dist/default/minimal/tailwind/components/reset.js +7 -0
  535. package/dist/dev/skins/dist/default/minimal/tailwind/components/reset.js.map +1 -0
  536. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +2 -1
  537. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  538. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
  539. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  540. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +7 -4
  541. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  542. package/dist/dev/tailwind.css +66 -0
  543. package/dist/dev/ui/alert-dialog/alert-dialog-close.d.ts +2 -2
  544. package/dist/dev/ui/alert-dialog/alert-dialog-close.d.ts.map +1 -1
  545. package/dist/dev/ui/alert-dialog/alert-dialog-description.d.ts +2 -2
  546. package/dist/dev/ui/alert-dialog/alert-dialog-description.d.ts.map +1 -1
  547. package/dist/dev/ui/alert-dialog/alert-dialog-popup.d.ts +2 -2
  548. package/dist/dev/ui/alert-dialog/alert-dialog-popup.d.ts.map +1 -1
  549. package/dist/dev/ui/alert-dialog/alert-dialog-title.d.ts +2 -2
  550. package/dist/dev/ui/alert-dialog/alert-dialog-title.d.ts.map +1 -1
  551. package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts +2 -2
  552. package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts.map +1 -1
  553. package/dist/dev/ui/captions-button/captions-button.d.ts +2 -2
  554. package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -1
  555. package/dist/dev/ui/cast-button/cast-button.d.ts +2 -2
  556. package/dist/dev/ui/cast-button/cast-button.d.ts.map +1 -1
  557. package/dist/dev/ui/cast-button/cast-button.js +2 -2
  558. package/dist/dev/ui/cast-button/cast-button.js.map +1 -1
  559. package/dist/dev/ui/controls/context.js +4 -1
  560. package/dist/dev/ui/controls/context.js.map +1 -1
  561. package/dist/dev/ui/controls/controls-group.d.ts +2 -2
  562. package/dist/dev/ui/controls/controls-group.d.ts.map +1 -1
  563. package/dist/dev/ui/controls/controls-root.d.ts +2 -2
  564. package/dist/dev/ui/controls/controls-root.d.ts.map +1 -1
  565. package/dist/dev/ui/error-dialog/error-dialog-description.d.ts +2 -2
  566. package/dist/dev/ui/error-dialog/error-dialog-description.d.ts.map +1 -1
  567. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts +2 -2
  568. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -1
  569. package/dist/dev/ui/gesture/gesture.d.ts +30 -0
  570. package/dist/dev/ui/gesture/gesture.d.ts.map +1 -0
  571. package/dist/dev/ui/gesture/{media-gesture.js → gesture.js} +8 -5
  572. package/dist/dev/ui/gesture/gesture.js.map +1 -0
  573. package/dist/dev/ui/gesture/index.d.ts +2 -0
  574. package/dist/dev/ui/gesture/index.js +2 -0
  575. package/dist/dev/ui/hotkey/hotkey.d.ts +28 -0
  576. package/dist/dev/ui/hotkey/hotkey.d.ts.map +1 -0
  577. package/dist/dev/ui/hotkey/{media-hotkey.js → hotkey.js} +7 -4
  578. package/dist/dev/ui/hotkey/hotkey.js.map +1 -0
  579. package/dist/dev/ui/hotkey/index.d.ts +2 -0
  580. package/dist/dev/ui/hotkey/index.js +2 -0
  581. package/dist/dev/ui/input-indicators/use-indicator-visibility.js +25 -0
  582. package/dist/dev/ui/input-indicators/use-indicator-visibility.js.map +1 -0
  583. package/dist/dev/ui/input-indicators/use-input-action-subscription.js +22 -0
  584. package/dist/dev/ui/input-indicators/use-input-action-subscription.js.map +1 -0
  585. package/dist/dev/ui/input-indicators/use-input-indicator-root.js +21 -0
  586. package/dist/dev/ui/input-indicators/use-input-indicator-root.js.map +1 -0
  587. package/dist/dev/ui/input-indicators/use-rendered-indicator-state.js +40 -0
  588. package/dist/dev/ui/input-indicators/use-rendered-indicator-state.js.map +1 -0
  589. package/dist/dev/ui/live-button/index.d.ts +2 -0
  590. package/dist/dev/ui/live-button/index.js +2 -0
  591. package/dist/dev/ui/live-button/live-button.d.ts +34 -0
  592. package/dist/dev/ui/live-button/live-button.d.ts.map +1 -0
  593. package/dist/dev/ui/live-button/live-button.js +92 -0
  594. package/dist/dev/ui/live-button/live-button.js.map +1 -0
  595. package/dist/dev/ui/menu/context.d.ts +29 -0
  596. package/dist/dev/ui/menu/context.d.ts.map +1 -0
  597. package/dist/dev/ui/menu/context.js +29 -0
  598. package/dist/dev/ui/menu/context.js.map +1 -0
  599. package/dist/dev/ui/menu/index.d.ts +3 -0
  600. package/dist/dev/ui/menu/index.js +3 -0
  601. package/dist/dev/ui/menu/index.parts.d.ts +21 -0
  602. package/dist/dev/ui/menu/index.parts.d.ts.map +1 -0
  603. package/dist/dev/ui/menu/index.parts.js +34 -0
  604. package/dist/dev/ui/menu/index.parts.js.map +1 -0
  605. package/dist/dev/ui/menu/menu-back.d.ts +18 -0
  606. package/dist/dev/ui/menu/menu-back.d.ts.map +1 -0
  607. package/dist/dev/ui/menu/menu-back.js +31 -0
  608. package/dist/dev/ui/menu/menu-back.js.map +1 -0
  609. package/dist/dev/ui/menu/menu-checkbox-item.d.ts +22 -0
  610. package/dist/dev/ui/menu/menu-checkbox-item.d.ts.map +1 -0
  611. package/dist/dev/ui/menu/menu-checkbox-item.js +50 -0
  612. package/dist/dev/ui/menu/menu-checkbox-item.js.map +1 -0
  613. package/dist/dev/ui/menu/menu-content.d.ts +15 -0
  614. package/dist/dev/ui/menu/menu-content.d.ts.map +1 -0
  615. package/dist/dev/ui/menu/menu-content.js +284 -0
  616. package/dist/dev/ui/menu/menu-content.js.map +1 -0
  617. package/dist/dev/ui/menu/menu-group.d.ts +18 -0
  618. package/dist/dev/ui/menu/menu-group.d.ts.map +1 -0
  619. package/dist/dev/ui/menu/menu-group.js +26 -0
  620. package/dist/dev/ui/menu/menu-group.js.map +1 -0
  621. package/dist/dev/ui/menu/menu-item-indicator.d.ts +20 -0
  622. package/dist/dev/ui/menu/menu-item-indicator.d.ts.map +1 -0
  623. package/dist/dev/ui/menu/menu-item-indicator.js +24 -0
  624. package/dist/dev/ui/menu/menu-item-indicator.js.map +1 -0
  625. package/dist/dev/ui/menu/menu-item.d.ts +20 -0
  626. package/dist/dev/ui/menu/menu-item.d.ts.map +1 -0
  627. package/dist/dev/ui/menu/menu-item.js +53 -0
  628. package/dist/dev/ui/menu/menu-item.js.map +1 -0
  629. package/dist/dev/ui/menu/menu-label.d.ts +15 -0
  630. package/dist/dev/ui/menu/menu-label.d.ts.map +1 -0
  631. package/dist/dev/ui/menu/menu-label.js +23 -0
  632. package/dist/dev/ui/menu/menu-label.js.map +1 -0
  633. package/dist/dev/ui/menu/menu-radio-group.d.ts +22 -0
  634. package/dist/dev/ui/menu/menu-radio-group.d.ts.map +1 -0
  635. package/dist/dev/ui/menu/menu-radio-group.js +33 -0
  636. package/dist/dev/ui/menu/menu-radio-group.js.map +1 -0
  637. package/dist/dev/ui/menu/menu-radio-item.d.ts +20 -0
  638. package/dist/dev/ui/menu/menu-radio-item.d.ts.map +1 -0
  639. package/dist/dev/ui/menu/menu-radio-item.js +57 -0
  640. package/dist/dev/ui/menu/menu-radio-item.js.map +1 -0
  641. package/dist/dev/ui/menu/menu-root.d.ts +29 -0
  642. package/dist/dev/ui/menu/menu-root.d.ts.map +1 -0
  643. package/dist/dev/ui/menu/menu-root.js +136 -0
  644. package/dist/dev/ui/menu/menu-root.js.map +1 -0
  645. package/dist/dev/ui/menu/menu-separator.d.ts +15 -0
  646. package/dist/dev/ui/menu/menu-separator.d.ts.map +1 -0
  647. package/dist/dev/ui/menu/menu-separator.js +23 -0
  648. package/dist/dev/ui/menu/menu-separator.js.map +1 -0
  649. package/dist/dev/ui/menu/menu-trigger.d.ts +22 -0
  650. package/dist/dev/ui/menu/menu-trigger.d.ts.map +1 -0
  651. package/dist/dev/ui/menu/menu-trigger.js +124 -0
  652. package/dist/dev/ui/menu/menu-trigger.js.map +1 -0
  653. package/dist/dev/ui/menu/menu-view.d.ts +15 -0
  654. package/dist/dev/ui/menu/menu-view.d.ts.map +1 -0
  655. package/dist/dev/ui/menu/menu-view.js +23 -0
  656. package/dist/dev/ui/menu/menu-view.js.map +1 -0
  657. package/dist/dev/ui/mute-button/mute-button.d.ts +2 -2
  658. package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -1
  659. package/dist/dev/ui/pip-button/pip-button.d.ts +2 -2
  660. package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -1
  661. package/dist/dev/ui/play-button/play-button.d.ts +2 -2
  662. package/dist/dev/ui/play-button/play-button.d.ts.map +1 -1
  663. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts +2 -2
  664. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts.map +1 -1
  665. package/dist/dev/ui/playback-rate-menu/context.js +20 -0
  666. package/dist/dev/ui/playback-rate-menu/context.js.map +1 -0
  667. package/dist/dev/ui/playback-rate-menu/index.d.ts +3 -0
  668. package/dist/dev/ui/playback-rate-menu/index.js +3 -0
  669. package/dist/dev/ui/playback-rate-menu/index.parts.d.ts +12 -0
  670. package/dist/dev/ui/playback-rate-menu/index.parts.d.ts.map +1 -0
  671. package/dist/dev/ui/playback-rate-menu/index.parts.js +17 -0
  672. package/dist/dev/ui/playback-rate-menu/index.parts.js.map +1 -0
  673. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-content.d.ts +14 -0
  674. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-content.d.ts.map +1 -0
  675. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-content.js +28 -0
  676. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-content.js.map +1 -0
  677. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-root.d.ts +23 -0
  678. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-root.d.ts.map +1 -0
  679. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-root.js +39 -0
  680. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-root.js.map +1 -0
  681. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger.d.ts +14 -0
  682. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger.d.ts.map +1 -0
  683. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger.js +51 -0
  684. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger.js.map +1 -0
  685. package/dist/dev/ui/playback-rate-menu/use-playback-rate-menu.d.ts +26 -0
  686. package/dist/dev/ui/playback-rate-menu/use-playback-rate-menu.d.ts.map +1 -0
  687. package/dist/dev/ui/playback-rate-menu/use-playback-rate-menu.js +27 -0
  688. package/dist/dev/ui/playback-rate-menu/use-playback-rate-menu.js.map +1 -0
  689. package/dist/dev/ui/popover/context.d.ts +3 -1
  690. package/dist/dev/ui/popover/context.d.ts.map +1 -1
  691. package/dist/dev/ui/popover/context.js.map +1 -1
  692. package/dist/dev/ui/popover/popover-arrow.d.ts +2 -2
  693. package/dist/dev/ui/popover/popover-arrow.d.ts.map +1 -1
  694. package/dist/dev/ui/popover/popover-popup.d.ts +2 -2
  695. package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -1
  696. package/dist/dev/ui/popover/popover-popup.js +20 -7
  697. package/dist/dev/ui/popover/popover-popup.js.map +1 -1
  698. package/dist/dev/ui/popover/popover-root.d.ts +4 -1
  699. package/dist/dev/ui/popover/popover-root.d.ts.map +1 -1
  700. package/dist/dev/ui/popover/popover-root.js +20 -5
  701. package/dist/dev/ui/popover/popover-root.js.map +1 -1
  702. package/dist/dev/ui/popover/popover-trigger.d.ts +2 -2
  703. package/dist/dev/ui/popover/popover-trigger.d.ts.map +1 -1
  704. package/dist/dev/ui/poster/poster.d.ts +2 -2
  705. package/dist/dev/ui/poster/poster.d.ts.map +1 -1
  706. package/dist/dev/ui/seek-button/seek-button.d.ts +2 -2
  707. package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -1
  708. package/dist/dev/ui/seek-indicator/context.js +20 -0
  709. package/dist/dev/ui/seek-indicator/context.js.map +1 -0
  710. package/dist/dev/ui/seek-indicator/index.d.ts +2 -0
  711. package/dist/dev/ui/seek-indicator/index.js +2 -0
  712. package/dist/dev/ui/seek-indicator/index.parts.d.ts +10 -0
  713. package/dist/dev/ui/seek-indicator/index.parts.d.ts.map +1 -0
  714. package/dist/dev/ui/seek-indicator/index.parts.js +12 -0
  715. package/dist/dev/ui/seek-indicator/index.parts.js.map +1 -0
  716. package/dist/dev/ui/seek-indicator/seek-indicator-root.d.ts +14 -0
  717. package/dist/dev/ui/seek-indicator/seek-indicator-root.d.ts.map +1 -0
  718. package/dist/dev/ui/seek-indicator/seek-indicator-root.js +30 -0
  719. package/dist/dev/ui/seek-indicator/seek-indicator-root.js.map +1 -0
  720. package/dist/dev/ui/seek-indicator/seek-indicator-value.d.ts +13 -0
  721. package/dist/dev/ui/seek-indicator/seek-indicator-value.d.ts.map +1 -0
  722. package/dist/dev/ui/seek-indicator/seek-indicator-value.js +23 -0
  723. package/dist/dev/ui/seek-indicator/seek-indicator-value.js.map +1 -0
  724. package/dist/dev/ui/slider/context.js.map +1 -1
  725. package/dist/dev/ui/slider/slider-buffer.d.ts +2 -2
  726. package/dist/dev/ui/slider/slider-buffer.d.ts.map +1 -1
  727. package/dist/dev/ui/slider/slider-fill.d.ts +2 -2
  728. package/dist/dev/ui/slider/slider-fill.d.ts.map +1 -1
  729. package/dist/dev/ui/slider/slider-preview.d.ts +2 -2
  730. package/dist/dev/ui/slider/slider-preview.d.ts.map +1 -1
  731. package/dist/dev/ui/slider/slider-root.d.ts +2 -2
  732. package/dist/dev/ui/slider/slider-root.d.ts.map +1 -1
  733. package/dist/dev/ui/slider/slider-thumb.d.ts +2 -2
  734. package/dist/dev/ui/slider/slider-thumb.d.ts.map +1 -1
  735. package/dist/dev/ui/slider/slider-thumbnail.d.ts +2 -2
  736. package/dist/dev/ui/slider/slider-thumbnail.d.ts.map +1 -1
  737. package/dist/dev/ui/slider/slider-track.d.ts +2 -2
  738. package/dist/dev/ui/slider/slider-track.d.ts.map +1 -1
  739. package/dist/dev/ui/slider/slider-value.d.ts +2 -2
  740. package/dist/dev/ui/slider/slider-value.d.ts.map +1 -1
  741. package/dist/dev/ui/status-announcer/index.d.ts +2 -0
  742. package/dist/dev/ui/status-announcer/index.js +2 -0
  743. package/dist/dev/ui/status-announcer/status-announcer.d.ts +14 -0
  744. package/dist/dev/ui/status-announcer/status-announcer.d.ts.map +1 -0
  745. package/dist/dev/ui/status-announcer/status-announcer.js +36 -0
  746. package/dist/dev/ui/status-announcer/status-announcer.js.map +1 -0
  747. package/dist/dev/ui/status-indicator/context.js +20 -0
  748. package/dist/dev/ui/status-indicator/context.js.map +1 -0
  749. package/dist/dev/ui/status-indicator/index.d.ts +2 -0
  750. package/dist/dev/ui/status-indicator/index.js +2 -0
  751. package/dist/dev/ui/status-indicator/index.parts.d.ts +10 -0
  752. package/dist/dev/ui/status-indicator/index.parts.d.ts.map +1 -0
  753. package/dist/dev/ui/status-indicator/index.parts.js +12 -0
  754. package/dist/dev/ui/status-indicator/index.parts.js.map +1 -0
  755. package/dist/dev/ui/status-indicator/status-indicator-root.d.ts +14 -0
  756. package/dist/dev/ui/status-indicator/status-indicator-root.d.ts.map +1 -0
  757. package/dist/dev/ui/status-indicator/status-indicator-root.js +34 -0
  758. package/dist/dev/ui/status-indicator/status-indicator-root.js.map +1 -0
  759. package/dist/dev/ui/status-indicator/status-indicator-value.d.ts +13 -0
  760. package/dist/dev/ui/status-indicator/status-indicator-value.d.ts.map +1 -0
  761. package/dist/dev/ui/status-indicator/status-indicator-value.js +23 -0
  762. package/dist/dev/ui/status-indicator/status-indicator-value.js.map +1 -0
  763. package/dist/dev/ui/thumbnail/thumbnail.d.ts +2 -2
  764. package/dist/dev/ui/thumbnail/thumbnail.d.ts.map +1 -1
  765. package/dist/dev/ui/time/time-group.d.ts +2 -2
  766. package/dist/dev/ui/time/time-group.d.ts.map +1 -1
  767. package/dist/dev/ui/time/time-separator.d.ts +2 -2
  768. package/dist/dev/ui/time/time-separator.d.ts.map +1 -1
  769. package/dist/dev/ui/time/time-value.d.ts +2 -2
  770. package/dist/dev/ui/time/time-value.d.ts.map +1 -1
  771. package/dist/dev/ui/time-slider/time-slider-root.d.ts +2 -2
  772. package/dist/dev/ui/time-slider/time-slider-root.d.ts.map +1 -1
  773. package/dist/dev/ui/tooltip/context.d.ts +3 -1
  774. package/dist/dev/ui/tooltip/context.d.ts.map +1 -1
  775. package/dist/dev/ui/tooltip/context.js.map +1 -1
  776. package/dist/dev/ui/tooltip/tooltip-arrow.d.ts +2 -2
  777. package/dist/dev/ui/tooltip/tooltip-arrow.d.ts.map +1 -1
  778. package/dist/dev/ui/tooltip/tooltip-popup.d.ts +2 -2
  779. package/dist/dev/ui/tooltip/tooltip-popup.d.ts.map +1 -1
  780. package/dist/dev/ui/tooltip/tooltip-popup.js +20 -7
  781. package/dist/dev/ui/tooltip/tooltip-popup.js.map +1 -1
  782. package/dist/dev/ui/tooltip/tooltip-root.d.ts +4 -1
  783. package/dist/dev/ui/tooltip/tooltip-root.d.ts.map +1 -1
  784. package/dist/dev/ui/tooltip/tooltip-root.js +16 -4
  785. package/dist/dev/ui/tooltip/tooltip-root.js.map +1 -1
  786. package/dist/dev/ui/tooltip/tooltip-trigger.d.ts +2 -2
  787. package/dist/dev/ui/tooltip/tooltip-trigger.d.ts.map +1 -1
  788. package/dist/dev/ui/volume-indicator/context.js +20 -0
  789. package/dist/dev/ui/volume-indicator/context.js.map +1 -0
  790. package/dist/dev/ui/volume-indicator/index.d.ts +2 -0
  791. package/dist/dev/ui/volume-indicator/index.js +2 -0
  792. package/dist/dev/ui/volume-indicator/index.parts.d.ts +11 -0
  793. package/dist/dev/ui/volume-indicator/index.parts.d.ts.map +1 -0
  794. package/dist/dev/ui/volume-indicator/index.parts.js +14 -0
  795. package/dist/dev/ui/volume-indicator/index.parts.js.map +1 -0
  796. package/dist/dev/ui/volume-indicator/volume-indicator-fill.d.ts +13 -0
  797. package/dist/dev/ui/volume-indicator/volume-indicator-fill.d.ts.map +1 -0
  798. package/dist/dev/ui/volume-indicator/volume-indicator-fill.js +36 -0
  799. package/dist/dev/ui/volume-indicator/volume-indicator-fill.js.map +1 -0
  800. package/dist/dev/ui/volume-indicator/volume-indicator-root.d.ts +14 -0
  801. package/dist/dev/ui/volume-indicator/volume-indicator-root.d.ts.map +1 -0
  802. package/dist/dev/ui/volume-indicator/volume-indicator-root.js +30 -0
  803. package/dist/dev/ui/volume-indicator/volume-indicator-root.js.map +1 -0
  804. package/dist/dev/ui/volume-indicator/volume-indicator-value.d.ts +13 -0
  805. package/dist/dev/ui/volume-indicator/volume-indicator-value.d.ts.map +1 -0
  806. package/dist/dev/ui/volume-indicator/volume-indicator-value.js +23 -0
  807. package/dist/dev/ui/volume-indicator/volume-indicator-value.js.map +1 -0
  808. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts +2 -2
  809. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts.map +1 -1
  810. package/dist/dev/utils/use-attach-media.d.ts +8 -0
  811. package/dist/dev/utils/use-attach-media.d.ts.map +1 -0
  812. package/dist/dev/utils/use-attach-media.js +14 -0
  813. package/dist/dev/utils/use-attach-media.js.map +1 -0
  814. package/dist/dev/utils/use-render.js.map +1 -1
  815. package/dist/dev/utils/use-sync-props.js +14 -0
  816. package/dist/dev/utils/use-sync-props.js.map +1 -0
  817. package/docs/README.md +7 -0
  818. package/docs/concepts/accessibility.md +60 -0
  819. package/docs/concepts/browser-support.md +37 -0
  820. package/docs/concepts/features.md +131 -0
  821. package/docs/concepts/overview.md +119 -0
  822. package/docs/concepts/presets.md +204 -0
  823. package/docs/concepts/skins.md +2094 -0
  824. package/docs/concepts/ui-components.md +83 -0
  825. package/docs/concepts/v10-roadmap.md +75 -0
  826. package/docs/concepts/why-videojs.md +113 -0
  827. package/docs/how-to/build-with-ai.md +39 -0
  828. package/docs/how-to/build-your-own-component.md +142 -0
  829. package/docs/how-to/customize-skins.md +5990 -0
  830. package/docs/how-to/installation.md +170 -0
  831. package/docs/llms.txt +91 -0
  832. package/docs/reference/buffering-indicator.md +152 -0
  833. package/docs/reference/captions-button.md +200 -0
  834. package/docs/reference/controls.md +238 -0
  835. package/docs/reference/create-player.md +261 -0
  836. package/docs/reference/create-selector.md +59 -0
  837. package/docs/reference/feature-buffer.md +54 -0
  838. package/docs/reference/feature-controls.md +74 -0
  839. package/docs/reference/feature-error.md +65 -0
  840. package/docs/reference/feature-fullscreen.md +94 -0
  841. package/docs/reference/feature-live.md +62 -0
  842. package/docs/reference/feature-pip.md +94 -0
  843. package/docs/reference/feature-playback-rate.md +70 -0
  844. package/docs/reference/feature-playback.md +109 -0
  845. package/docs/reference/feature-remote-playback.md +74 -0
  846. package/docs/reference/feature-source.md +70 -0
  847. package/docs/reference/feature-stream-type.md +46 -0
  848. package/docs/reference/feature-text-tracks.md +104 -0
  849. package/docs/reference/feature-time.md +84 -0
  850. package/docs/reference/feature-volume.md +99 -0
  851. package/docs/reference/fullscreen-button.md +212 -0
  852. package/docs/reference/mute-button.md +276 -0
  853. package/docs/reference/pip-button.md +212 -0
  854. package/docs/reference/play-button.md +224 -0
  855. package/docs/reference/playback-rate-button.md +169 -0
  856. package/docs/reference/player-container.md +103 -0
  857. package/docs/reference/player-provider.md +102 -0
  858. package/docs/reference/popover.md +527 -0
  859. package/docs/reference/poster.md +137 -0
  860. package/docs/reference/render-element.md +196 -0
  861. package/docs/reference/seek-button.md +213 -0
  862. package/docs/reference/slider.md +826 -0
  863. package/docs/reference/thumbnail.md +322 -0
  864. package/docs/reference/time-slider.md +741 -0
  865. package/docs/reference/time.md +495 -0
  866. package/docs/reference/tooltip.md +631 -0
  867. package/docs/reference/use-button.md +124 -0
  868. package/docs/reference/use-container-attach.md +42 -0
  869. package/docs/reference/use-media-attach.md +46 -0
  870. package/docs/reference/use-media.md +11 -0
  871. package/docs/reference/use-player-context.md +93 -0
  872. package/docs/reference/use-player.md +226 -0
  873. package/docs/reference/use-selector.md +132 -0
  874. package/docs/reference/use-snapshot.md +127 -0
  875. package/docs/reference/use-store.md +257 -0
  876. package/docs/reference/volume-slider.md +716 -0
  877. package/package.json +46 -12
  878. package/dist/default/ui/gesture/media-gesture.js.map +0 -1
  879. package/dist/default/ui/hotkey/media-hotkey.js.map +0 -1
  880. package/dist/default/utils/attach-media-element.js +0 -12
  881. package/dist/default/utils/attach-media-element.js.map +0 -1
  882. package/dist/default/utils/media-props.js +0 -19
  883. package/dist/default/utils/media-props.js.map +0 -1
  884. package/dist/dev/ui/gesture/media-gesture.d.ts +0 -23
  885. package/dist/dev/ui/gesture/media-gesture.d.ts.map +0 -1
  886. package/dist/dev/ui/gesture/media-gesture.js.map +0 -1
  887. package/dist/dev/ui/hotkey/media-hotkey.d.ts +0 -21
  888. package/dist/dev/ui/hotkey/media-hotkey.d.ts.map +0 -1
  889. package/dist/dev/ui/hotkey/media-hotkey.js.map +0 -1
  890. package/dist/dev/utils/attach-media-element.d.ts +0 -9
  891. package/dist/dev/utils/attach-media-element.d.ts.map +0 -1
  892. package/dist/dev/utils/attach-media-element.js +0 -12
  893. package/dist/dev/utils/attach-media-element.js.map +0 -1
  894. package/dist/dev/utils/media-props.d.ts +0 -8
  895. package/dist/dev/utils/media-props.d.ts.map +0 -1
  896. package/dist/dev/utils/media-props.js +0 -19
  897. package/dist/dev/utils/media-props.js.map +0 -1
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { renderElement } from "../../utils/use-render.js";
3
+ import { useMenuContext } from "./context.js";
4
+ import { forwardRef } from "react";
5
+ //#region src/ui/menu/menu-item-indicator.tsx
6
+ /** Visual indicator for a checked state. Only renders when `checked` is `true` (or `forceMount` is set). */
7
+ const MenuItemIndicator = forwardRef(function MenuItemIndicator({ render, className, style, checked, forceMount = false, ...elementProps }, forwardedRef) {
8
+ const { state, stateAttrMap } = useMenuContext();
9
+ if (!checked && !forceMount) return null;
10
+ return renderElement("span", {
11
+ render,
12
+ className,
13
+ style
14
+ }, {
15
+ state,
16
+ stateAttrMap,
17
+ ref: [forwardedRef],
18
+ props: [{ "aria-hidden": true }, elementProps]
19
+ });
20
+ });
21
+ //#endregion
22
+ export { MenuItemIndicator };
23
+
24
+ //# sourceMappingURL=menu-item-indicator.js.map
@@ -0,0 +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, stateAttrMap } = useMenuContext();\n\n if (!checked && !forceMount) return null;\n\n return renderElement(\n 'span',\n { render, className, style },\n {\n state,\n stateAttrMap,\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,OAAO,iBAAiB,gBAAgB;AAEhD,KAAI,CAAC,WAAW,CAAC,WAAY,QAAO;AAEpC,QAAO,cACL,QACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,EAAE,eAAe,MAAM,EAAE,aAAa;EAC/C,CACF;EACD"}
@@ -0,0 +1,53 @@
1
+ "use client";
2
+ import { renderElement } from "../../utils/use-render.js";
3
+ import { useMenuContext, useSubMenuContext } from "./context.js";
4
+ import { completeMenuItemSelection } from "@videojs/core/dom";
5
+ import { forwardRef, useCallback, useEffect, useRef } from "react";
6
+ //#region src/ui/menu/menu-item.tsx
7
+ /** A single action in the menu. Renders a `<div>` with `role="menuitem"`. */
8
+ const MenuItem = forwardRef(function MenuItem({ render, className, style, onSelect, disabled, onClick, ...elementProps }, forwardedRef) {
9
+ const { menu, state, stateAttrMap } = useMenuContext();
10
+ const parentMenu = useSubMenuContext()?.parentMenu.menu ?? null;
11
+ const elementRef = useRef(null);
12
+ useEffect(() => {
13
+ const element = elementRef.current;
14
+ if (!element) return;
15
+ return menu.registerItem(element);
16
+ }, [menu]);
17
+ const handleClick = useCallback((event) => {
18
+ if (disabled) return;
19
+ onClick?.(event);
20
+ onSelect?.();
21
+ completeMenuItemSelection(menu, parentMenu);
22
+ }, [
23
+ disabled,
24
+ onClick,
25
+ onSelect,
26
+ menu,
27
+ parentMenu
28
+ ]);
29
+ const handlePointerEnter = useCallback(() => {
30
+ const element = elementRef.current;
31
+ if (!element || disabled) return;
32
+ menu.highlight(element, { focus: false });
33
+ }, [menu, disabled]);
34
+ return renderElement("div", {
35
+ render,
36
+ className,
37
+ style
38
+ }, {
39
+ state,
40
+ stateAttrMap,
41
+ ref: [forwardedRef, elementRef],
42
+ props: [{
43
+ role: "menuitem",
44
+ "aria-disabled": disabled ? true : void 0,
45
+ onClick: handleClick,
46
+ onPointerEnter: handlePointerEnter
47
+ }, elementProps]
48
+ });
49
+ });
50
+ //#endregion
51
+ export { MenuItem };
52
+
53
+ //# sourceMappingURL=menu-item.js.map
@@ -0,0 +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, useSubMenuContext } 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, stateAttrMap } = useMenuContext();\n const subMenuCtx = useSubMenuContext();\n const parentMenu = subMenuCtx?.parentMenu.menu ?? null;\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 onSelect?.();\n completeMenuItemSelection(menu, parentMenu);\n },\n [disabled, onClick, onSelect, menu, parentMenu]\n );\n\n const handlePointerEnter = useCallback(() => {\n const element = elementRef.current;\n if (!element || disabled) return;\n menu.highlight(element, { focus: false });\n }, [menu, disabled]);\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: [forwardedRef, elementRef],\n props: [\n {\n role: 'menuitem' as const,\n 'aria-disabled': disabled ? true : undefined,\n onClick: handleClick,\n onPointerEnter: handlePointerEnter,\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,OAAO,iBAAiB,gBAAgB;CAEtD,MAAM,aADa,mBAAmB,EACP,WAAW,QAAQ;CAClD,MAAM,aAAa,OAAuB,KAAK;AAE/C,iBAAgB;EACd,MAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,QAAS;AACd,SAAO,KAAK,aAAa,QAAQ;IAChC,CAAC,KAAK,CAAC;CAEV,MAAM,cAAc,aACjB,UAA4C;AAC3C,MAAI,SAAU;AACd,YAAU,MAAM;AAChB,cAAY;AACZ,4BAA0B,MAAM,WAAW;IAE7C;EAAC;EAAU;EAAS;EAAU;EAAM;EAAW,CAChD;CAED,MAAM,qBAAqB,kBAAkB;EAC3C,MAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,WAAW,SAAU;AAC1B,OAAK,UAAU,SAAS,EAAE,OAAO,OAAO,CAAC;IACxC,CAAC,MAAM,SAAS,CAAC;AAEpB,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK,CAAC,cAAc,WAAW;EAC/B,OAAO,CACL;GACE,MAAM;GACN,iBAAiB,WAAW,OAAO,KAAA;GACnC,SAAS;GACT,gBAAgB;GACjB,EACD,aACD;EACF,CACF;EACD"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { renderElement } from "../../utils/use-render.js";
3
+ import { useMenuContext } from "./context.js";
4
+ import { forwardRef } from "react";
5
+ //#region src/ui/menu/menu-label.tsx
6
+ /** Non-interactive label for a group of items. Renders a `<div>`. */
7
+ const MenuLabel = forwardRef(function MenuLabel({ render, className, style, ...elementProps }, forwardedRef) {
8
+ const { state, stateAttrMap } = useMenuContext();
9
+ return renderElement("div", {
10
+ render,
11
+ className,
12
+ style
13
+ }, {
14
+ state,
15
+ stateAttrMap,
16
+ ref: [forwardedRef],
17
+ props: [elementProps]
18
+ });
19
+ });
20
+ //#endregion
21
+ export { MenuLabel };
22
+
23
+ //# sourceMappingURL=menu-label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-label.js","names":[],"sources":["../../../../src/ui/menu/menu-label.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 MenuLabelProps extends UIComponentProps<'div', MenuState> {}\n\n/** Non-interactive label for a group of items. Renders a `<div>`. */\nexport const MenuLabel = forwardRef<HTMLDivElement, MenuLabelProps>(function MenuLabel(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { state, stateAttrMap } = useMenuContext();\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: [forwardedRef],\n props: [elementProps],\n }\n );\n});\n\nexport namespace MenuLabel {\n export type Props = MenuLabelProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;AAYA,MAAa,YAAY,WAA2C,SAAS,UAC3E,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,OAAO,iBAAiB,gBAAgB;AAEhD,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,aAAa;EACtB,CACF;EACD"}
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ import { renderElement } from "../../utils/use-render.js";
3
+ import { MenuRadioGroupContextProvider, useMenuContext } from "./context.js";
4
+ import { forwardRef } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/ui/menu/menu-radio-group.tsx
7
+ /** A group of mutually exclusive radio items. Renders a `<div>` with `role="group"`. */
8
+ const MenuRadioGroup = forwardRef(function MenuRadioGroup({ render, className, style, value, onValueChange, label, ...elementProps }, forwardedRef) {
9
+ const { state, stateAttrMap } = useMenuContext();
10
+ return /* @__PURE__ */ jsx(MenuRadioGroupContextProvider, {
11
+ value: {
12
+ value,
13
+ onValueChange
14
+ },
15
+ children: renderElement("div", {
16
+ render,
17
+ className,
18
+ style
19
+ }, {
20
+ state,
21
+ stateAttrMap,
22
+ ref: [forwardedRef],
23
+ props: [{
24
+ role: "group",
25
+ "aria-label": label
26
+ }, elementProps]
27
+ })
28
+ });
29
+ });
30
+ //#endregion
31
+ export { MenuRadioGroup };
32
+
33
+ //# sourceMappingURL=menu-radio-group.js.map
@@ -0,0 +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';\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 /** Accessible label for the group. */\n label?: string;\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, label, ...elementProps },\n forwardedRef\n) {\n const { state, stateAttrMap } = useMenuContext();\n\n return (\n <MenuRadioGroupContextProvider value={{ value, onValueChange }}>\n {renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: [forwardedRef],\n props: [{ role: 'group' as const, 'aria-label': label }, elementProps],\n }\n )}\n </MenuRadioGroupContextProvider>\n );\n});\n\nexport namespace MenuRadioGroup {\n export type Props = MenuRadioGroupProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;AAmBA,MAAa,iBAAiB,WAAgD,SAAS,eACrF,EAAE,QAAQ,WAAW,OAAO,OAAO,eAAe,OAAO,GAAG,gBAC5D,cACA;CACA,MAAM,EAAE,OAAO,iBAAiB,gBAAgB;AAEhD,QACE,oBAAC,+BAAD;EAA+B,OAAO;GAAE;GAAO;GAAe;YAC3D,cACC,OACA;GAAE;GAAQ;GAAW;GAAO,EAC5B;GACE;GACA;GACA,KAAK,CAAC,aAAa;GACnB,OAAO,CAAC;IAAE,MAAM;IAAkB,cAAc;IAAO,EAAE,aAAa;GACvE,CACF;EAC6B,CAAA;EAElC"}
@@ -0,0 +1,57 @@
1
+ "use client";
2
+ import { renderElement } from "../../utils/use-render.js";
3
+ import { useMenuContext, useMenuRadioGroupContext, useSubMenuContext } from "./context.js";
4
+ import { completeMenuItemSelection } from "@videojs/core/dom";
5
+ import { forwardRef, useCallback, useEffect, useRef } from "react";
6
+ //#region src/ui/menu/menu-radio-item.tsx
7
+ /** A radio-style menu item. Renders a `<div>` with `role="menuitemradio"`. */
8
+ const MenuRadioItem = forwardRef(function MenuRadioItem({ render, className, style, value, disabled, onClick, ...elementProps }, forwardedRef) {
9
+ const { menu, state, stateAttrMap } = useMenuContext();
10
+ const { value: groupValue, onValueChange } = useMenuRadioGroupContext();
11
+ const parentMenu = useSubMenuContext()?.parentMenu.menu ?? null;
12
+ const elementRef = useRef(null);
13
+ const checked = groupValue === value;
14
+ useEffect(() => {
15
+ const element = elementRef.current;
16
+ if (!element) return;
17
+ return menu.registerItem(element);
18
+ }, [menu]);
19
+ const handleClick = useCallback((event) => {
20
+ if (disabled) return;
21
+ onClick?.(event);
22
+ onValueChange(value);
23
+ completeMenuItemSelection(menu, parentMenu);
24
+ }, [
25
+ disabled,
26
+ onClick,
27
+ onValueChange,
28
+ value,
29
+ menu,
30
+ parentMenu
31
+ ]);
32
+ const handlePointerEnter = useCallback(() => {
33
+ const element = elementRef.current;
34
+ if (!element || disabled) return;
35
+ menu.highlight(element, { focus: false });
36
+ }, [menu, disabled]);
37
+ return renderElement("div", {
38
+ render,
39
+ className,
40
+ style
41
+ }, {
42
+ state,
43
+ stateAttrMap,
44
+ ref: [forwardedRef, elementRef],
45
+ props: [{
46
+ role: "menuitemradio",
47
+ "aria-checked": checked,
48
+ "aria-disabled": disabled ? true : void 0,
49
+ onClick: handleClick,
50
+ onPointerEnter: handlePointerEnter
51
+ }, elementProps]
52
+ });
53
+ });
54
+ //#endregion
55
+ export { MenuRadioItem };
56
+
57
+ //# sourceMappingURL=menu-radio-item.js.map
@@ -0,0 +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, useSubMenuContext } 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, stateAttrMap } = useMenuContext();\n const { value: groupValue, onValueChange } = useMenuRadioGroupContext();\n const subMenuCtx = useSubMenuContext();\n const parentMenu = subMenuCtx?.parentMenu.menu ?? null;\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 onValueChange(value);\n completeMenuItemSelection(menu, parentMenu);\n },\n [disabled, onClick, onValueChange, value, menu, parentMenu]\n );\n\n const handlePointerEnter = useCallback(() => {\n const element = elementRef.current;\n if (!element || disabled) return;\n menu.highlight(element, { focus: false });\n }, [menu, disabled]);\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\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,OAAO,iBAAiB,gBAAgB;CACtD,MAAM,EAAE,OAAO,YAAY,kBAAkB,0BAA0B;CAEvE,MAAM,aADa,mBAAmB,EACP,WAAW,QAAQ;CAClD,MAAM,aAAa,OAAuB,KAAK;CAC/C,MAAM,UAAU,eAAe;AAE/B,iBAAgB;EACd,MAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,QAAS;AACd,SAAO,KAAK,aAAa,QAAQ;IAChC,CAAC,KAAK,CAAC;CAEV,MAAM,cAAc,aACjB,UAA4C;AAC3C,MAAI,SAAU;AACd,YAAU,MAAM;AAChB,gBAAc,MAAM;AACpB,4BAA0B,MAAM,WAAW;IAE7C;EAAC;EAAU;EAAS;EAAe;EAAO;EAAM;EAAW,CAC5D;CAED,MAAM,qBAAqB,kBAAkB;EAC3C,MAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,WAAW,SAAU;AAC1B,OAAK,UAAU,SAAS,EAAE,OAAO,OAAO,CAAC;IACxC,CAAC,MAAM,SAAS,CAAC;AAEpB,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK,CAAC,cAAc,WAAW;EAC/B,OAAO,CACL;GACE,MAAM;GACN,gBAAgB;GAChB,iBAAiB,WAAW,OAAO,KAAA;GACnC,SAAS;GACT,gBAAgB;GACjB,EACD,aACD;EACF,CACF;EACD"}
@@ -0,0 +1,136 @@
1
+ "use client";
2
+ import { useOptionalContainer, useOptionalPopupGroup } from "../../player/context.js";
3
+ import { useLatestRef } from "../../utils/use-latest-ref.js";
4
+ import { useDestroy } from "../../utils/use-destroy.js";
5
+ import { useSafeId } from "../../utils/use-safe-id.js";
6
+ import { useOptionalControlsContext } from "../controls/context.js";
7
+ import { MenuContextProvider, SubMenuContextProvider, useOptionalMenuContext } from "./context.js";
8
+ import { createMenu, createTransition } from "@videojs/core/dom";
9
+ import { useSnapshot } from "@videojs/store/react";
10
+ import { useEffect, useMemo, useState } from "react";
11
+ import { jsx } from "react/jsx-runtime";
12
+ import { MenuCore, MenuDataAttrs } from "@videojs/core";
13
+ //#region src/ui/menu/menu-root.tsx
14
+ function MenuRoot({ open: controlledOpen, defaultOpen = MenuCore.defaultProps.defaultOpen, onOpenChange: onOpenChangeProp, onOpenChangeComplete: onOpenChangeCompleteProp, boundary = "container", children, ...coreProps }) {
15
+ const parentMenu = useOptionalMenuContext();
16
+ const controls = useOptionalControlsContext();
17
+ const container = useOptionalContainer();
18
+ const popupGroup = useOptionalPopupGroup();
19
+ const isSubmenu = parentMenu !== null;
20
+ const { side, align, closeOnEscape, closeOnOutsideClick } = coreProps;
21
+ const [core] = useState(() => new MenuCore({
22
+ ...coreProps,
23
+ isSubmenu
24
+ }));
25
+ const isControlled = controlledOpen !== void 0;
26
+ const onOpenChangeRef = useLatestRef(onOpenChangeProp);
27
+ const onOpenChangeCompleteRef = useLatestRef(onOpenChangeCompleteProp);
28
+ const closeOnEscapeRef = useLatestRef(closeOnEscape);
29
+ const closeOnOutsideClickRef = useLatestRef(closeOnOutsideClick);
30
+ const popupGroupRef = useLatestRef(popupGroup);
31
+ const isSubmenuRef = useLatestRef(isSubmenu);
32
+ const [menu] = useState(() => {
33
+ const instance = createMenu({
34
+ transition: createTransition(),
35
+ onOpenChange(nextOpen, details) {
36
+ onOpenChangeRef.current?.(nextOpen, details);
37
+ },
38
+ onOpenChangeComplete(nextOpen) {
39
+ onOpenChangeCompleteRef.current?.(nextOpen);
40
+ },
41
+ closeOnEscape: () => closeOnEscapeRef.current ?? MenuCore.defaultProps.closeOnEscape,
42
+ closeOnOutsideClick: () => closeOnOutsideClickRef.current ?? MenuCore.defaultProps.closeOnOutsideClick,
43
+ group: () => isSubmenuRef.current ? void 0 : popupGroupRef.current
44
+ });
45
+ if (!isControlled && defaultOpen) instance.open();
46
+ return instance;
47
+ });
48
+ const anchorName = useSafeId();
49
+ const contentId = useSafeId("menu");
50
+ useEffect(() => {
51
+ if (controlledOpen === void 0) return;
52
+ const { active: inputOpen } = menu.input.current;
53
+ if (controlledOpen === inputOpen) return;
54
+ if (controlledOpen) menu.open("click");
55
+ else menu.close("click");
56
+ }, [controlledOpen, menu]);
57
+ useEffect(() => {
58
+ if (isSubmenu || controls?.state.visible !== false) return;
59
+ menu.close("imperative-action");
60
+ }, [
61
+ controls?.state.visible,
62
+ isSubmenu,
63
+ menu
64
+ ]);
65
+ useDestroy(menu);
66
+ const input = useSnapshot(menu.input);
67
+ const state = useMemo(() => {
68
+ core.setProps({
69
+ side,
70
+ align,
71
+ closeOnEscape,
72
+ closeOnOutsideClick,
73
+ isSubmenu
74
+ });
75
+ core.setInput(input);
76
+ return core.getState();
77
+ }, [
78
+ core,
79
+ input,
80
+ side,
81
+ align,
82
+ closeOnEscape,
83
+ closeOnOutsideClick,
84
+ isSubmenu
85
+ ]);
86
+ const navigationInput = useSnapshot(menu.navigationInput);
87
+ const topEntry = navigationInput.stack[navigationInput.stack.length - 1];
88
+ const activeSubMenuId = topEntry?.menuId ?? null;
89
+ const activeSubMenuTriggerId = topEntry?.triggerId ?? null;
90
+ const navigationDirection = navigationInput.direction;
91
+ const contextValue = useMemo(() => ({
92
+ core,
93
+ menu,
94
+ state,
95
+ stateAttrMap: MenuDataAttrs,
96
+ contentId,
97
+ anchorName,
98
+ boundary,
99
+ container,
100
+ activeSubMenuId,
101
+ activeSubMenuTriggerId,
102
+ navigationDirection,
103
+ push: menu.push,
104
+ pop: menu.pop
105
+ }), [
106
+ core,
107
+ menu,
108
+ state,
109
+ contentId,
110
+ anchorName,
111
+ boundary,
112
+ container,
113
+ activeSubMenuId,
114
+ activeSubMenuTriggerId,
115
+ navigationDirection
116
+ ]);
117
+ const subMenuContextValue = useMemo(() => parentMenu ? {
118
+ subMenuId: contentId,
119
+ parentMenu
120
+ } : null, [contentId, parentMenu]);
121
+ if (subMenuContextValue) return /* @__PURE__ */ jsx(MenuContextProvider, {
122
+ value: contextValue,
123
+ children: /* @__PURE__ */ jsx(SubMenuContextProvider, {
124
+ value: subMenuContextValue,
125
+ children
126
+ })
127
+ });
128
+ return /* @__PURE__ */ jsx(MenuContextProvider, {
129
+ value: contextValue,
130
+ children
131
+ });
132
+ }
133
+ //#endregion
134
+ export { MenuRoot };
135
+
136
+ //# sourceMappingURL=menu-root.js.map
@@ -0,0 +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 { createMenu, createTransition, type MenuChangeDetails, type PositioningBoundary } from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useOptionalContainer, useOptionalPopupGroup } from '../../player/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 { MenuContextProvider, SubMenuContextProvider, 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 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\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 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 if (!isControlled && defaultOpen) {\n instance.open();\n }\n\n return instance;\n });\n\n const anchorName = useSafeId();\n const contentId = useSafeId('menu');\n\n // Sync controlled open prop → internal state.\n useEffect(() => {\n if (controlledOpen === undefined) return;\n\n const { active: inputOpen } = menu.input.current;\n if (controlledOpen === inputOpen) return;\n\n if (controlledOpen) {\n menu.open('click');\n } else {\n menu.close('click');\n }\n }, [controlledOpen, menu]);\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 const state = 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\n // Subscribe to navigation state — used by Content/Trigger when this is a root menu.\n const navigationInput = useSnapshot(menu.navigationInput);\n const topEntry = navigationInput.stack[navigationInput.stack.length - 1];\n const activeSubMenuId = topEntry?.menuId ?? null;\n const activeSubMenuTriggerId = topEntry?.triggerId ?? null;\n const navigationDirection = navigationInput.direction;\n\n const contextValue = useMemo(\n () => ({\n core,\n menu,\n state,\n stateAttrMap: MenuDataAttrs,\n contentId,\n anchorName,\n boundary,\n container,\n activeSubMenuId,\n activeSubMenuTriggerId,\n navigationDirection,\n push: menu.push,\n pop: menu.pop,\n }),\n [\n core,\n menu,\n state,\n contentId,\n anchorName,\n boundary,\n container,\n activeSubMenuId,\n activeSubMenuTriggerId,\n navigationDirection,\n ]\n );\n\n const subMenuContextValue = useMemo(\n () => (parentMenu ? { subMenuId: contentId, parentMenu } : null),\n [contentId, parentMenu]\n );\n\n // When acting as a submenu, expose its content ID and the parent menu context\n // through SubMenuContext so Trigger can register/push and Content can show/hide.\n if (subMenuContextValue) {\n return (\n <MenuContextProvider value={contextValue}>\n <SubMenuContextProvider value={subMenuContextValue}>{children}</SubMenuContextProvider>\n </MenuContextProvider>\n );\n }\n\n return <MenuContextProvider value={contextValue}>{children}</MenuContextProvider>;\n}\n\nexport namespace MenuRoot {\n export type Props = MenuRootProps;\n}\n"],"mappings":";;;;;;;;;;;;;AAwBA,SAAgB,SAAS,EACvB,MAAM,gBACN,cAAc,SAAS,aAAa,aACpC,cAAc,kBACd,sBAAsB,0BACtB,WAAW,aACX,UACA,GAAG,aACwB;CAG3B,MAAM,aAAa,wBAAwB;CAC3C,MAAM,WAAW,4BAA4B;CAC7C,MAAM,YAAY,sBAAsB;CACxC,MAAM,aAAa,uBAAuB;CAC1C,MAAM,YAAY,eAAe;CACjC,MAAM,EAAE,MAAM,OAAO,eAAe,wBAAwB;CAE5D,MAAM,CAAC,QAAQ,eAAe,IAAI,SAAS;EAAE,GAAG;EAAW;EAAW,CAAC,CAAC;CAExE,MAAM,eAAe,mBAAmB,KAAA;CAExC,MAAM,kBAAkB,aAAa,iBAAiB;CACtD,MAAM,0BAA0B,aAAa,yBAAyB;CACtE,MAAM,mBAAmB,aAAa,cAAc;CACpD,MAAM,yBAAyB,aAAa,oBAAoB;CAChE,MAAM,gBAAgB,aAAa,WAAW;CAC9C,MAAM,eAAe,aAAa,UAAU;CAE5C,MAAM,CAAC,QAAQ,eAAe;EAC5B,MAAM,WAAW,WAAW;GAC1B,YAAY,kBAAkB;GAC9B,aAAa,UAAU,SAAS;AAC9B,oBAAgB,UAAU,UAAU,QAAQ;;GAE9C,qBAAqB,UAAU;AAC7B,4BAAwB,UAAU,SAAS;;GAE7C,qBAAqB,iBAAiB,WAAW,SAAS,aAAa;GACvE,2BAA2B,uBAAuB,WAAW,SAAS,aAAa;GACnF,aAAc,aAAa,UAAU,KAAA,IAAY,cAAc;GAChE,CAAC;AAEF,MAAI,CAAC,gBAAgB,YACnB,UAAS,MAAM;AAGjB,SAAO;GACP;CAEF,MAAM,aAAa,WAAW;CAC9B,MAAM,YAAY,UAAU,OAAO;AAGnC,iBAAgB;AACd,MAAI,mBAAmB,KAAA,EAAW;EAElC,MAAM,EAAE,QAAQ,cAAc,KAAK,MAAM;AACzC,MAAI,mBAAmB,UAAW;AAElC,MAAI,eACF,MAAK,KAAK,QAAQ;MAElB,MAAK,MAAM,QAAQ;IAEpB,CAAC,gBAAgB,KAAK,CAAC;AAE1B,iBAAgB;AACd,MAAI,aAAa,UAAU,MAAM,YAAY,MAAO;AAEpD,OAAK,MAAM,oBAAoB;IAC9B;EAAC,UAAU,MAAM;EAAS;EAAW;EAAK,CAAC;AAE9C,YAAW,KAAK;CAEhB,MAAM,QAAQ,YAAY,KAAK,MAAM;CACrC,MAAM,QAAQ,cAAc;AAC1B,OAAK,SAAS;GAAE;GAAM;GAAO;GAAe;GAAqB;GAAW,CAAC;AAC7E,OAAK,SAAS,MAAM;AACpB,SAAO,KAAK,UAAU;IACrB;EAAC;EAAM;EAAO;EAAM;EAAO;EAAe;EAAqB;EAAU,CAAC;CAG7E,MAAM,kBAAkB,YAAY,KAAK,gBAAgB;CACzD,MAAM,WAAW,gBAAgB,MAAM,gBAAgB,MAAM,SAAS;CACtE,MAAM,kBAAkB,UAAU,UAAU;CAC5C,MAAM,yBAAyB,UAAU,aAAa;CACtD,MAAM,sBAAsB,gBAAgB;CAE5C,MAAM,eAAe,eACZ;EACL;EACA;EACA;EACA,cAAc;EACd;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAM,KAAK;EACX,KAAK,KAAK;EACX,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,sBAAsB,cACnB,aAAa;EAAE,WAAW;EAAW;EAAY,GAAG,MAC3D,CAAC,WAAW,WAAW,CACxB;AAID,KAAI,oBACF,QACE,oBAAC,qBAAD;EAAqB,OAAO;YAC1B,oBAAC,wBAAD;GAAwB,OAAO;GAAsB;GAAkC,CAAA;EACnE,CAAA;AAI1B,QAAO,oBAAC,qBAAD;EAAqB,OAAO;EAAe;EAA+B,CAAA"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { renderElement } from "../../utils/use-render.js";
3
+ import { useMenuContext } from "./context.js";
4
+ import { forwardRef } from "react";
5
+ //#region src/ui/menu/menu-separator.tsx
6
+ /** Visual divider between groups of items. Renders a `<div>` with `role="separator"`. */
7
+ const MenuSeparator = forwardRef(function MenuSeparator({ render, className, style, ...elementProps }, forwardedRef) {
8
+ const { state, stateAttrMap } = useMenuContext();
9
+ return renderElement("div", {
10
+ render,
11
+ className,
12
+ style
13
+ }, {
14
+ state,
15
+ stateAttrMap,
16
+ ref: [forwardedRef],
17
+ props: [{ role: "separator" }, elementProps]
18
+ });
19
+ });
20
+ //#endregion
21
+ export { MenuSeparator };
22
+
23
+ //# sourceMappingURL=menu-separator.js.map
@@ -0,0 +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, stateAttrMap } = useMenuContext();\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\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,OAAO,iBAAiB,gBAAgB;AAEhD,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,EAAE,MAAM,aAAsB,EAAE,aAAa;EACtD,CACF;EACD"}
@@ -0,0 +1,124 @@
1
+ "use client";
2
+ import { renderElement } from "../../utils/use-render.js";
3
+ import { useSafeId } from "../../utils/use-safe-id.js";
4
+ import { useMenuContext, useSubMenuContext } from "./context.js";
5
+ import { isMenuNavigationKey } from "@videojs/core/dom";
6
+ import { forwardRef, useCallback, useEffect, useRef } from "react";
7
+ import { supportsAnchorPositioning } from "@videojs/utils/dom";
8
+ //#region src/ui/menu/menu-trigger.tsx
9
+ function toUIKeyboardEvent(event) {
10
+ return {
11
+ get defaultPrevented() {
12
+ return event.defaultPrevented;
13
+ },
14
+ key: event.key,
15
+ shiftKey: event.shiftKey,
16
+ ctrlKey: event.ctrlKey,
17
+ altKey: event.altKey,
18
+ metaKey: event.metaKey,
19
+ target: event.target instanceof Node ? event.target : event.currentTarget,
20
+ currentTarget: event.currentTarget,
21
+ preventDefault: () => event.preventDefault(),
22
+ stopPropagation: () => event.stopPropagation()
23
+ };
24
+ }
25
+ function preventMenuKeyDefault(event) {
26
+ const keyboardEvent = toUIKeyboardEvent(event);
27
+ if (event.key !== "Escape" && isMenuNavigationKey(keyboardEvent) && !event.defaultPrevented) event.preventDefault();
28
+ }
29
+ /**
30
+ * Button that toggles the menu visibility. At root level renders a `<button>`.
31
+ * When inside a parent menu (as a submenu trigger), renders as a `<div role="menuitem">`
32
+ * that pushes the submenu on click or ArrowRight.
33
+ */
34
+ const MenuTrigger = forwardRef(function MenuTrigger({ render, className, style, disabled, onClick, onKeyDown, ...elementProps }, forwardedRef) {
35
+ const { core, menu, state, stateAttrMap, anchorName, contentId } = useMenuContext();
36
+ const subMenuCtx = useSubMenuContext();
37
+ const isSubMenuTrigger = subMenuCtx !== null;
38
+ const elementRef = useRef(null);
39
+ const triggerId = useSafeId("sub-trigger");
40
+ const parentMenu = subMenuCtx?.parentMenu ?? null;
41
+ const parentMenuApi = parentMenu?.menu ?? null;
42
+ const parentState = parentMenu?.state ?? state;
43
+ const parentPush = parentMenu?.push ?? null;
44
+ const subMenuId = subMenuCtx?.subMenuId ?? null;
45
+ const isExpanded = isSubMenuTrigger ? parentMenu?.activeSubMenuId === subMenuId : state.open;
46
+ useEffect(() => {
47
+ if (!isSubMenuTrigger || !parentMenuApi) return;
48
+ const element = elementRef.current;
49
+ if (!element) return;
50
+ return parentMenuApi.registerItem(element);
51
+ }, [isSubMenuTrigger, parentMenuApi]);
52
+ const openSubMenu = useCallback(() => {
53
+ if (disabled || !parentPush || !subMenuId) return;
54
+ parentPush(subMenuId, triggerId);
55
+ }, [
56
+ disabled,
57
+ parentPush,
58
+ subMenuId,
59
+ triggerId
60
+ ]);
61
+ const handleSubMenuClick = useCallback((event) => {
62
+ onClick?.(event);
63
+ openSubMenu();
64
+ }, [onClick, openSubMenu]);
65
+ const handleSubMenuKeyDown = useCallback((event) => {
66
+ onKeyDown?.(event);
67
+ if (event.key === "ArrowRight") {
68
+ event.preventDefault();
69
+ openSubMenu();
70
+ }
71
+ }, [onKeyDown, openSubMenu]);
72
+ const handlePointerEnter = useCallback(() => {
73
+ const element = elementRef.current;
74
+ if (!element || disabled || !parentMenuApi) return;
75
+ parentMenuApi.highlight(element, { focus: false });
76
+ }, [disabled, parentMenuApi]);
77
+ const triggerRef = useCallback((element) => {
78
+ menu.setTriggerElement(element);
79
+ if (element && supportsAnchorPositioning()) element.style.setProperty("anchor-name", `--${anchorName}`);
80
+ }, [menu, anchorName]);
81
+ if (isSubMenuTrigger) return renderElement("div", {
82
+ render,
83
+ className,
84
+ style
85
+ }, {
86
+ state: parentState,
87
+ stateAttrMap,
88
+ ref: [forwardedRef, elementRef],
89
+ props: [{
90
+ id: triggerId,
91
+ role: "menuitem",
92
+ "aria-haspopup": "menu",
93
+ "aria-expanded": isExpanded,
94
+ "aria-disabled": disabled ? true : void 0,
95
+ "data-has-submenu": "",
96
+ onClick: handleSubMenuClick,
97
+ onKeyDownCapture: preventMenuKeyDefault,
98
+ onKeyDown: handleSubMenuKeyDown,
99
+ onPointerEnter: handlePointerEnter
100
+ }, elementProps]
101
+ });
102
+ return renderElement("button", {
103
+ render,
104
+ className,
105
+ style
106
+ }, {
107
+ state,
108
+ stateAttrMap,
109
+ ref: [forwardedRef, triggerRef],
110
+ props: [
111
+ {
112
+ type: "button",
113
+ ...core.getTriggerAttrs(state, contentId)
114
+ },
115
+ state.open ? { onKeyDownCapture: preventMenuKeyDefault } : void 0,
116
+ menu.triggerProps,
117
+ elementProps
118
+ ]
119
+ });
120
+ });
121
+ //#endregion
122
+ export { MenuTrigger };
123
+
124
+ //# sourceMappingURL=menu-trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-trigger.js","names":[],"sources":["../../../../src/ui/menu/menu-trigger.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { isMenuNavigationKey, type UIKeyboardEvent } from '@videojs/core/dom';\nimport { supportsAnchorPositioning } from '@videojs/utils/dom';\nimport { forwardRef, useCallback, useEffect, useRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { useMenuContext, useSubMenuContext } from './context';\n\nexport interface MenuTriggerProps extends UIComponentProps<'button', MenuState> {\n /** Disables the trigger. Only meaningful when used as a submenu trigger inside a parent menu. */\n disabled?: boolean;\n}\n\nfunction toUIKeyboardEvent(event: React.KeyboardEvent<HTMLElement>): UIKeyboardEvent {\n return {\n get defaultPrevented() {\n return event.defaultPrevented;\n },\n key: event.key,\n shiftKey: event.shiftKey,\n ctrlKey: event.ctrlKey,\n altKey: event.altKey,\n metaKey: event.metaKey,\n target: event.target instanceof Node ? event.target : event.currentTarget,\n currentTarget: event.currentTarget,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n };\n}\n\nfunction preventMenuKeyDefault(event: React.KeyboardEvent<HTMLElement>): void {\n const keyboardEvent = toUIKeyboardEvent(event);\n\n if (event.key !== 'Escape' && isMenuNavigationKey(keyboardEvent) && !event.defaultPrevented) {\n event.preventDefault();\n }\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 pushes 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, state, stateAttrMap, anchorName, contentId } = useMenuContext();\n const subMenuCtx = useSubMenuContext();\n const isSubMenuTrigger = subMenuCtx !== null;\n\n const elementRef = useRef<HTMLElement>(null);\n const triggerId = useSafeId('sub-trigger');\n\n const parentMenu = subMenuCtx?.parentMenu ?? null;\n const parentMenuApi = parentMenu?.menu ?? null;\n const parentState = parentMenu?.state ?? state;\n const parentPush = parentMenu?.push ?? null;\n const subMenuId = subMenuCtx?.subMenuId ?? null;\n const isExpanded = isSubMenuTrigger ? parentMenu?.activeSubMenuId === subMenuId : state.open;\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 return parentMenuApi.registerItem(element);\n }, [isSubMenuTrigger, parentMenuApi]);\n\n const openSubMenu = useCallback(() => {\n if (disabled || !parentPush || !subMenuId) return;\n parentPush(subMenuId, triggerId);\n }, [disabled, parentPush, subMenuId, triggerId]);\n\n const handleSubMenuClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n (onClick as React.MouseEventHandler<HTMLDivElement> | undefined)?.(event);\n openSubMenu();\n },\n [onClick, openSubMenu]\n );\n\n const handleSubMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n (onKeyDown as React.KeyboardEventHandler<HTMLDivElement> | undefined)?.(event);\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n openSubMenu();\n }\n },\n [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 });\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 if (element && supportsAnchorPositioning()) {\n element.style.setProperty('anchor-name', `--${anchorName}`);\n }\n },\n [menu, anchorName]\n );\n\n // Submenu trigger mode — renders as a div with role=\"menuitem\"\n if (isSubMenuTrigger) {\n return renderElement(\n 'div',\n { render, className, style },\n {\n state: parentState,\n stateAttrMap,\n ref: [forwardedRef as React.Ref<HTMLDivElement>, elementRef as React.Ref<HTMLDivElement>],\n props: [\n {\n id: triggerId,\n role: 'menuitem' as const,\n 'aria-haspopup': 'menu' as const,\n 'aria-expanded': isExpanded,\n 'aria-disabled': disabled ? true : undefined,\n 'data-has-submenu': '',\n onClick: handleSubMenuClick,\n onKeyDownCapture: preventMenuKeyDefault,\n onKeyDown: handleSubMenuKeyDown,\n onPointerEnter: handlePointerEnter,\n },\n elementProps,\n ],\n }\n );\n }\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: [forwardedRef as React.Ref<HTMLButtonElement>, triggerRef],\n props: [\n { type: 'button' as const, ...core.getTriggerAttrs(state, contentId) },\n state.open ? { onKeyDownCapture: preventMenuKeyDefault } : undefined,\n menu.triggerProps,\n elementProps,\n ],\n }\n );\n});\n\nexport namespace MenuTrigger {\n export type Props = MenuTriggerProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;;AAiBA,SAAS,kBAAkB,OAA0D;AACnF,QAAO;EACL,IAAI,mBAAmB;AACrB,UAAO,MAAM;;EAEf,KAAK,MAAM;EACX,UAAU,MAAM;EAChB,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,SAAS,MAAM;EACf,QAAQ,MAAM,kBAAkB,OAAO,MAAM,SAAS,MAAM;EAC5D,eAAe,MAAM;EACrB,sBAAsB,MAAM,gBAAgB;EAC5C,uBAAuB,MAAM,iBAAiB;EAC/C;;AAGH,SAAS,sBAAsB,OAA+C;CAC5E,MAAM,gBAAgB,kBAAkB,MAAM;AAE9C,KAAI,MAAM,QAAQ,YAAY,oBAAoB,cAAc,IAAI,CAAC,MAAM,iBACzE,OAAM,gBAAgB;;;;;;;AAS1B,MAAa,cAAc,WAAiE,SAAS,YACnG,EAAE,QAAQ,WAAW,OAAO,UAAU,SAAS,WAAW,GAAG,gBAC7D,cACA;CACA,MAAM,EAAE,MAAM,MAAM,OAAO,cAAc,YAAY,cAAc,gBAAgB;CACnF,MAAM,aAAa,mBAAmB;CACtC,MAAM,mBAAmB,eAAe;CAExC,MAAM,aAAa,OAAoB,KAAK;CAC5C,MAAM,YAAY,UAAU,cAAc;CAE1C,MAAM,aAAa,YAAY,cAAc;CAC7C,MAAM,gBAAgB,YAAY,QAAQ;CAC1C,MAAM,cAAc,YAAY,SAAS;CACzC,MAAM,aAAa,YAAY,QAAQ;CACvC,MAAM,YAAY,YAAY,aAAa;CAC3C,MAAM,aAAa,mBAAmB,YAAY,oBAAoB,YAAY,MAAM;AAGxF,iBAAgB;AACd,MAAI,CAAC,oBAAoB,CAAC,cAAe;EACzC,MAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,QAAS;AACd,SAAO,cAAc,aAAa,QAAQ;IACzC,CAAC,kBAAkB,cAAc,CAAC;CAErC,MAAM,cAAc,kBAAkB;AACpC,MAAI,YAAY,CAAC,cAAc,CAAC,UAAW;AAC3C,aAAW,WAAW,UAAU;IAC/B;EAAC;EAAU;EAAY;EAAW;EAAU,CAAC;CAEhD,MAAM,qBAAqB,aACxB,UAA4C;AAC1C,YAAkE,MAAM;AACzE,eAAa;IAEf,CAAC,SAAS,YAAY,CACvB;CAED,MAAM,uBAAuB,aAC1B,UAA+C;AAC7C,cAAuE,MAAM;AAC9E,MAAI,MAAM,QAAQ,cAAc;AAC9B,SAAM,gBAAgB;AACtB,gBAAa;;IAGjB,CAAC,WAAW,YAAY,CACzB;CAED,MAAM,qBAAqB,kBAAkB;EAC3C,MAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,WAAW,YAAY,CAAC,cAAe;AAC5C,gBAAc,UAAU,SAAS,EAAE,OAAO,OAAO,CAAC;IACjD,CAAC,UAAU,cAAc,CAAC;CAG7B,MAAM,aAAa,aAChB,YAAsC;AACrC,OAAK,kBAAkB,QAAQ;AAC/B,MAAI,WAAW,2BAA2B,CACxC,SAAQ,MAAM,YAAY,eAAe,KAAK,aAAa;IAG/D,CAAC,MAAM,WAAW,CACnB;AAGD,KAAI,iBACF,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OAAO;EACP;EACA,KAAK,CAAC,cAA2C,WAAwC;EACzF,OAAO,CACL;GACE,IAAI;GACJ,MAAM;GACN,iBAAiB;GACjB,iBAAiB;GACjB,iBAAiB,WAAW,OAAO,KAAA;GACnC,oBAAoB;GACpB,SAAS;GACT,kBAAkB;GAClB,WAAW;GACX,gBAAgB;GACjB,EACD,aACD;EACF,CACF;AAGH,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK,CAAC,cAA8C,WAAW;EAC/D,OAAO;GACL;IAAE,MAAM;IAAmB,GAAG,KAAK,gBAAgB,OAAO,UAAU;IAAE;GACtE,MAAM,OAAO,EAAE,kBAAkB,uBAAuB,GAAG,KAAA;GAC3D,KAAK;GACL;GACD;EACF,CACF;EACD"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { renderElement } from "../../utils/use-render.js";
3
+ import { useMenuContext } from "./context.js";
4
+ import { getMenuRootViewAttrs } from "@videojs/core/dom";
5
+ import { forwardRef } from "react";
6
+ //#region src/ui/menu/menu-view.tsx
7
+ /** Root menu view inside the menu viewport. */
8
+ const MenuView = forwardRef(function MenuView({ render, className, style, ...elementProps }, forwardedRef) {
9
+ const { state } = useMenuContext();
10
+ return renderElement("div", {
11
+ render,
12
+ className,
13
+ style
14
+ }, {
15
+ state,
16
+ ref: [forwardedRef],
17
+ props: [getMenuRootViewAttrs(), elementProps]
18
+ });
19
+ });
20
+ //#endregion
21
+ export { MenuView };
22
+
23
+ //# sourceMappingURL=menu-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-view.js","names":[],"sources":["../../../../src/ui/menu/menu-view.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { getMenuRootViewAttrs } from '@videojs/core/dom';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuViewProps extends UIComponentProps<'div', MenuState> {}\n\n/** Root menu view inside the menu viewport. */\nexport const MenuView = forwardRef<HTMLDivElement, MenuViewProps>(function MenuView(\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: [getMenuRootViewAttrs(), elementProps],\n }\n );\n});\n\nexport namespace MenuView {\n export type Props = MenuViewProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;AAaA,MAAa,WAAW,WAA0C,SAAS,SACzE,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,UAAU,gBAAgB;AAElC,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,sBAAsB,EAAE,aAAa;EAC9C,CACF;EACD"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { createContext, useContext } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/ui/playback-rate-menu/context.tsx
5
+ const PlaybackRateMenuContext = createContext(null);
6
+ function PlaybackRateMenuProvider({ value, children }) {
7
+ return /* @__PURE__ */ jsx(PlaybackRateMenuContext.Provider, {
8
+ value,
9
+ children
10
+ });
11
+ }
12
+ function usePlaybackRateMenuContext() {
13
+ const ctx = useContext(PlaybackRateMenuContext);
14
+ if (!ctx) throw new Error("PlaybackRateMenu compound components must be used within a PlaybackRateMenu.Root");
15
+ return ctx;
16
+ }
17
+ //#endregion
18
+ export { PlaybackRateMenuProvider, usePlaybackRateMenuContext };
19
+
20
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../../src/ui/playback-rate-menu/context.tsx"],"sourcesContent":["'use client';\n\nimport type { MediaPlaybackRateState, PlaybackRateMenuCore } from '@videojs/core';\nimport { createContext, useContext } from 'react';\n\nexport interface PlaybackRateMenuContextValue {\n core: PlaybackRateMenuCore;\n media: MediaPlaybackRateState;\n state: PlaybackRateMenuCore.State;\n}\n\nconst PlaybackRateMenuContext = createContext<PlaybackRateMenuContextValue | null>(null);\n\nexport function PlaybackRateMenuProvider({\n value,\n children,\n}: {\n value: PlaybackRateMenuContextValue;\n children: React.ReactNode;\n}): React.ReactNode {\n return <PlaybackRateMenuContext.Provider value={value}>{children}</PlaybackRateMenuContext.Provider>;\n}\n\nexport function usePlaybackRateMenuContext(): PlaybackRateMenuContextValue {\n const ctx = useContext(PlaybackRateMenuContext);\n if (!ctx) throw new Error('PlaybackRateMenu compound components must be used within a PlaybackRateMenu.Root');\n return ctx;\n}\n"],"mappings":";;;;AAWA,MAAM,0BAA0B,cAAmD,KAAK;AAExF,SAAgB,yBAAyB,EACvC,OACA,YAIkB;AAClB,QAAO,oBAAC,wBAAwB,UAAzB;EAAyC;EAAQ;EAA4C,CAAA;;AAGtG,SAAgB,6BAA2D;CACzE,MAAM,MAAM,WAAW,wBAAwB;AAC/C,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM,mFAAmF;AAC7G,QAAO"}
@@ -0,0 +1,3 @@
1
+ import { usePlaybackRateMenu } from "./use-playback-rate-menu.js";
2
+ import { index_parts_exports } from "./index.parts.js";
3
+ export { index_parts_exports as PlaybackRateMenu, usePlaybackRateMenu };
@@ -0,0 +1,17 @@
1
+ import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
+ import { PlaybackRateMenuContent } from "./playback-rate-menu-content.js";
3
+ import { PlaybackRateMenuRoot } from "./playback-rate-menu-root.js";
4
+ import { PlaybackRateMenuTrigger } from "./playback-rate-menu-trigger.js";
5
+ import { usePlaybackRateMenu } from "./use-playback-rate-menu.js";
6
+ //#region src/ui/playback-rate-menu/index.parts.ts
7
+ var index_parts_exports = /* @__PURE__ */ __exportAll({
8
+ Content: () => PlaybackRateMenuContent,
9
+ Popup: () => PlaybackRateMenuContent,
10
+ Root: () => PlaybackRateMenuRoot,
11
+ Trigger: () => PlaybackRateMenuTrigger,
12
+ usePlaybackRateMenu: () => usePlaybackRateMenu
13
+ });
14
+ //#endregion
15
+ export { index_parts_exports };
16
+
17
+ //# sourceMappingURL=index.parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.parts.js","names":[],"sources":["../../../../src/ui/playback-rate-menu/index.parts.ts"],"sourcesContent":["export {\n PlaybackRateMenuContent as Content,\n PlaybackRateMenuContent as Popup,\n type PlaybackRateMenuContentProps as ContentProps,\n type PlaybackRateMenuContentProps as PopupProps,\n} from './playback-rate-menu-content';\nexport { PlaybackRateMenuRoot as Root, type PlaybackRateMenuRootProps as RootProps } from './playback-rate-menu-root';\nexport {\n PlaybackRateMenuTrigger as Trigger,\n type PlaybackRateMenuTriggerProps as TriggerProps,\n} from './playback-rate-menu-trigger';\nexport {\n type PlaybackRateMenuOption,\n type PlaybackRateMenuResult,\n usePlaybackRateMenu,\n} from './use-playback-rate-menu';\n"],"mappings":""}