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

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 (713) hide show
  1. package/dist/default/icons/dist/react/default/airplay-enter.js +16 -0
  2. package/dist/default/icons/dist/react/default/airplay-enter.js.map +1 -0
  3. package/dist/default/icons/dist/react/default/airplay-exit.js +28 -0
  4. package/dist/default/icons/dist/react/default/airplay-exit.js.map +1 -0
  5. package/dist/default/icons/dist/react/default/captions-off.js +5 -0
  6. package/dist/default/icons/dist/react/default/captions-off.js.map +1 -1
  7. package/dist/default/icons/dist/react/default/gear.js +16 -0
  8. package/dist/default/icons/dist/react/default/gear.js.map +1 -0
  9. package/dist/default/icons/dist/react/default/quality.js +16 -0
  10. package/dist/default/icons/dist/react/default/quality.js.map +1 -0
  11. package/dist/default/icons/dist/react/default/speech.js +19 -0
  12. package/dist/default/icons/dist/react/default/speech.js.map +1 -0
  13. package/dist/default/icons/dist/react/default/speed.js +52 -0
  14. package/dist/default/icons/dist/react/default/speed.js.map +1 -0
  15. package/dist/default/icons/dist/react/default/switches.js +19 -0
  16. package/dist/default/icons/dist/react/default/switches.js.map +1 -0
  17. package/dist/default/icons/dist/react/minimal/airplay-enter.js +16 -0
  18. package/dist/default/icons/dist/react/minimal/airplay-enter.js.map +1 -0
  19. package/dist/default/icons/dist/react/minimal/airplay-exit.js +28 -0
  20. package/dist/default/icons/dist/react/minimal/airplay-exit.js.map +1 -0
  21. package/dist/default/icons/dist/react/minimal/captions-off.js +5 -0
  22. package/dist/default/icons/dist/react/minimal/captions-off.js.map +1 -1
  23. package/dist/default/icons/dist/react/minimal/gear.js +16 -0
  24. package/dist/default/icons/dist/react/minimal/gear.js.map +1 -0
  25. package/dist/default/icons/dist/react/minimal/quality.js +16 -0
  26. package/dist/default/icons/dist/react/minimal/quality.js.map +1 -0
  27. package/dist/default/icons/dist/react/minimal/speech.js +54 -0
  28. package/dist/default/icons/dist/react/minimal/speech.js.map +1 -0
  29. package/dist/default/icons/dist/react/minimal/speed.js +52 -0
  30. package/dist/default/icons/dist/react/minimal/speed.js.map +1 -0
  31. package/dist/default/icons/dist/react/minimal/switches.js +19 -0
  32. package/dist/default/icons/dist/react/minimal/switches.js.map +1 -0
  33. package/dist/default/icons/index.js +8 -1
  34. package/dist/default/icons/minimal/index.js +8 -1
  35. package/dist/default/index.js +21 -17
  36. package/dist/default/media/dash-video/index.js +5 -1
  37. package/dist/default/media/dash-video/index.js.map +1 -1
  38. package/dist/default/media/{hls-video → hlsjs-video}/index.js +9 -5
  39. package/dist/default/media/hlsjs-video/index.js.map +1 -0
  40. package/dist/default/media/mux-audio/index.js +9 -3
  41. package/dist/default/media/mux-audio/index.js.map +1 -1
  42. package/dist/default/media/mux-video/index.js +9 -3
  43. package/dist/default/media/mux-video/index.js.map +1 -1
  44. package/dist/default/media/native-hls-video/index.js +5 -1
  45. package/dist/default/media/native-hls-video/index.js.map +1 -1
  46. package/dist/default/media/simple-hls-audio-only/index.js +22 -0
  47. package/dist/default/media/simple-hls-audio-only/index.js.map +1 -0
  48. package/dist/default/media/simple-hls-video/index.js +1 -1
  49. package/dist/default/media/vimeo-video/index.js +37 -0
  50. package/dist/default/media/vimeo-video/index.js.map +1 -0
  51. package/dist/default/player/context.js.map +1 -1
  52. package/dist/default/player/create-player.js +13 -4
  53. package/dist/default/player/create-player.js.map +1 -1
  54. package/dist/default/presets/audio/minimal-skin.css +414 -69
  55. package/dist/default/presets/audio/minimal-skin.js +69 -39
  56. package/dist/default/presets/audio/minimal-skin.js.map +1 -1
  57. package/dist/default/presets/audio/minimal-skin.tailwind.js +71 -42
  58. package/dist/default/presets/audio/minimal-skin.tailwind.js.map +1 -1
  59. package/dist/default/presets/audio/skin.css +419 -121
  60. package/dist/default/presets/audio/skin.js +70 -40
  61. package/dist/default/presets/audio/skin.js.map +1 -1
  62. package/dist/default/presets/audio/skin.tailwind.js +72 -42
  63. package/dist/default/presets/audio/skin.tailwind.js.map +1 -1
  64. package/dist/default/presets/live-audio/index.js +2 -2
  65. package/dist/default/presets/live-audio/minimal-skin.css +414 -69
  66. package/dist/default/presets/live-audio/minimal-skin.js +26 -12
  67. package/dist/default/presets/live-audio/minimal-skin.js.map +1 -1
  68. package/dist/default/presets/live-audio/minimal-skin.tailwind.js +27 -14
  69. package/dist/default/presets/live-audio/minimal-skin.tailwind.js.map +1 -1
  70. package/dist/default/presets/live-audio/skin.css +419 -121
  71. package/dist/default/presets/live-audio/skin.js +32 -14
  72. package/dist/default/presets/live-audio/skin.js.map +1 -1
  73. package/dist/default/presets/live-audio/skin.tailwind.js +27 -13
  74. package/dist/default/presets/live-audio/skin.tailwind.js.map +1 -1
  75. package/dist/default/presets/live-video/minimal-skin.css +566 -210
  76. package/dist/default/presets/live-video/minimal-skin.js +93 -12
  77. package/dist/default/presets/live-video/minimal-skin.js.map +1 -1
  78. package/dist/default/presets/live-video/minimal-skin.tailwind.js +94 -13
  79. package/dist/default/presets/live-video/minimal-skin.tailwind.js.map +1 -1
  80. package/dist/default/presets/live-video/skin.css +581 -264
  81. package/dist/default/presets/live-video/skin.js +95 -16
  82. package/dist/default/presets/live-video/skin.js.map +1 -1
  83. package/dist/default/presets/live-video/skin.tailwind.js +95 -17
  84. package/dist/default/presets/live-video/skin.tailwind.js.map +1 -1
  85. package/dist/default/presets/video/minimal-skin.css +566 -210
  86. package/dist/default/presets/video/minimal-skin.js +281 -53
  87. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  88. package/dist/default/presets/video/minimal-skin.tailwind.js +284 -57
  89. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  90. package/dist/default/presets/video/skin.css +581 -264
  91. package/dist/default/presets/video/skin.js +282 -57
  92. package/dist/default/presets/video/skin.js.map +1 -1
  93. package/dist/default/presets/video/skin.tailwind.js +285 -61
  94. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  95. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +8 -3
  96. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  97. package/dist/default/skins/dist/default/default/tailwind/components/badge.js +6 -0
  98. package/dist/default/skins/dist/default/default/tailwind/components/badge.js.map +1 -0
  99. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js +1 -4
  100. package/dist/default/skins/dist/default/default/tailwind/components/buffering.js.map +1 -1
  101. package/dist/default/skins/dist/default/default/tailwind/components/icon.js +1 -1
  102. package/dist/default/skins/dist/default/default/tailwind/components/icon.js.map +1 -1
  103. package/dist/default/skins/dist/default/default/tailwind/components/input-feedback.js +9 -9
  104. package/dist/default/skins/dist/default/default/tailwind/components/input-feedback.js.map +1 -1
  105. package/dist/default/skins/dist/default/default/tailwind/components/menu.js +26 -4
  106. package/dist/default/skins/dist/default/default/tailwind/components/menu.js.map +1 -1
  107. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js +1 -1
  108. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  109. package/dist/default/skins/dist/default/default/tailwind/components/popup.js +4 -3
  110. package/dist/default/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  111. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +7 -1
  112. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  113. package/dist/default/skins/dist/default/default/tailwind/components/root.js +1 -1
  114. package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  115. package/dist/default/skins/dist/default/default/tailwind/components/seek.js +1 -1
  116. package/dist/default/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  117. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +5 -3
  118. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  119. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js +12 -0
  120. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -0
  121. package/dist/default/skins/dist/default/default/tailwind/components/time.js +1 -1
  122. package/dist/default/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  123. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +26 -13
  124. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  125. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +13 -3
  126. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  127. package/dist/default/skins/dist/default/minimal/tailwind/components/badge.js +6 -0
  128. package/dist/default/skins/dist/default/minimal/tailwind/components/badge.js.map +1 -0
  129. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js +1 -1
  130. package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -1
  131. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js +1 -1
  132. package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -1
  133. package/dist/default/skins/dist/default/minimal/tailwind/components/input-feedback.js +9 -9
  134. package/dist/default/skins/dist/default/minimal/tailwind/components/input-feedback.js.map +1 -1
  135. package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js +25 -4
  136. package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -1
  137. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
  138. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  139. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +3 -2
  140. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  141. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +7 -1
  142. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  143. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +1 -1
  144. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  145. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js +1 -1
  146. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  147. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +5 -3
  148. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  149. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js +13 -0
  150. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -0
  151. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js +1 -1
  152. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  153. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +27 -11
  154. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  155. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +17 -2
  156. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  157. package/dist/default/tailwind.css +0 -24
  158. package/dist/default/ui/airplay-button/airplay-button.js +17 -0
  159. package/dist/default/ui/airplay-button/airplay-button.js.map +1 -0
  160. package/dist/default/ui/airplay-button/index.js +2 -0
  161. package/dist/default/ui/alert-dialog/alert-dialog-close.js +1 -1
  162. package/dist/default/ui/alert-dialog/alert-dialog-popup.js +1 -1
  163. package/dist/default/ui/audio-track/index.js +2 -0
  164. package/dist/default/ui/audio-track/use-audio-track-options.js +31 -0
  165. package/dist/default/ui/audio-track/use-audio-track-options.js.map +1 -0
  166. package/dist/default/ui/captions-radio-group/index.js +2 -0
  167. package/dist/default/ui/captions-radio-group/use-captions-options.js +37 -0
  168. package/dist/default/ui/captions-radio-group/use-captions-options.js.map +1 -0
  169. package/dist/default/ui/create-media-button.js +23 -10
  170. package/dist/default/ui/create-media-button.js.map +1 -1
  171. package/dist/default/ui/error-dialog/error-dialog-description.js +1 -1
  172. package/dist/default/ui/hooks/use-button.js.map +1 -1
  173. package/dist/default/ui/hotkey/use-hotkey-shortcut.js +28 -0
  174. package/dist/default/ui/hotkey/use-hotkey-shortcut.js.map +1 -0
  175. package/dist/default/ui/hotkey/use-hotkey.js +1 -2
  176. package/dist/default/ui/hotkey/use-hotkey.js.map +1 -1
  177. package/dist/default/ui/input-indicators/use-input-indicator-root.js +2 -2
  178. package/dist/default/ui/input-indicators/use-input-indicator-root.js.map +1 -1
  179. package/dist/default/ui/input-indicators/use-rendered-indicator-state.js +7 -4
  180. package/dist/default/ui/input-indicators/use-rendered-indicator-state.js.map +1 -1
  181. package/dist/default/ui/live-button/live-button.js +1 -1
  182. package/dist/default/ui/live-button/live-button.js.map +1 -1
  183. package/dist/default/ui/menu/context.js +16 -1
  184. package/dist/default/ui/menu/context.js.map +1 -1
  185. package/dist/default/ui/menu/index.parts.js +4 -2
  186. package/dist/default/ui/menu/index.parts.js.map +1 -1
  187. package/dist/default/ui/menu/menu-back.js +0 -1
  188. package/dist/default/ui/menu/menu-back.js.map +1 -1
  189. package/dist/default/ui/menu/menu-checkbox-item.js +1 -2
  190. package/dist/default/ui/menu/menu-checkbox-item.js.map +1 -1
  191. package/dist/default/ui/menu/menu-content.js +23 -5
  192. package/dist/default/ui/menu/menu-content.js.map +1 -1
  193. package/dist/default/ui/menu/menu-group-label.js +29 -0
  194. package/dist/default/ui/menu/menu-group-label.js.map +1 -0
  195. package/dist/default/ui/menu/menu-group.js +7 -9
  196. package/dist/default/ui/menu/menu-group.js.map +1 -1
  197. package/dist/default/ui/menu/menu-item-indicator.js +1 -2
  198. package/dist/default/ui/menu/menu-item-indicator.js.map +1 -1
  199. package/dist/default/ui/menu/menu-item-setting-provider.js +72 -0
  200. package/dist/default/ui/menu/menu-item-setting-provider.js.map +1 -0
  201. package/dist/default/ui/menu/menu-item-value.js +28 -0
  202. package/dist/default/ui/menu/menu-item-value.js.map +1 -0
  203. package/dist/default/ui/menu/menu-item.js +44 -23
  204. package/dist/default/ui/menu/menu-item.js.map +1 -1
  205. package/dist/default/ui/menu/menu-radio-group.js +6 -9
  206. package/dist/default/ui/menu/menu-radio-group.js.map +1 -1
  207. package/dist/default/ui/menu/menu-radio-item.js +1 -2
  208. package/dist/default/ui/menu/menu-radio-item.js.map +1 -1
  209. package/dist/default/ui/menu/menu-root.js +1 -1
  210. package/dist/default/ui/menu/menu-separator.js +1 -2
  211. package/dist/default/ui/menu/menu-separator.js.map +1 -1
  212. package/dist/default/ui/menu/menu-trigger.js +85 -29
  213. package/dist/default/ui/menu/menu-trigger.js.map +1 -1
  214. package/dist/default/ui/menu/use-menu-group.js +31 -0
  215. package/dist/default/ui/menu/use-menu-group.js.map +1 -0
  216. package/dist/default/ui/playback-rate/index.js +2 -0
  217. package/dist/default/ui/playback-rate/use-playback-rate-options.js +34 -0
  218. package/dist/default/ui/playback-rate/use-playback-rate-options.js.map +1 -0
  219. package/dist/default/ui/playback-rate-button/playback-rate-button.js +2 -1
  220. package/dist/default/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  221. package/dist/default/ui/poster/poster.js +17 -3
  222. package/dist/default/ui/poster/poster.js.map +1 -1
  223. package/dist/default/ui/quality/index.js +2 -0
  224. package/dist/default/ui/quality/use-quality-options.js +37 -0
  225. package/dist/default/ui/quality/use-quality-options.js.map +1 -0
  226. package/dist/default/ui/seek-button/seek-button.js +3 -1
  227. package/dist/default/ui/seek-button/seek-button.js.map +1 -1
  228. package/dist/default/ui/time/time-value.js +32 -5
  229. package/dist/default/ui/time/time-value.js.map +1 -1
  230. package/dist/default/ui/time-slider/time-slider-root.js +18 -6
  231. package/dist/default/ui/time-slider/time-slider-root.js.map +1 -1
  232. package/dist/default/ui/tooltip/context.js.map +1 -1
  233. package/dist/default/ui/tooltip/index.parts.js +4 -0
  234. package/dist/default/ui/tooltip/index.parts.js.map +1 -1
  235. package/dist/default/ui/tooltip/tooltip-arrow.js +1 -1
  236. package/dist/default/ui/tooltip/tooltip-label.js +24 -0
  237. package/dist/default/ui/tooltip/tooltip-label.js.map +1 -0
  238. package/dist/default/ui/tooltip/tooltip-popup.js +7 -3
  239. package/dist/default/ui/tooltip/tooltip-popup.js.map +1 -1
  240. package/dist/default/ui/tooltip/tooltip-root.js +1 -1
  241. package/dist/default/ui/tooltip/tooltip-root.js.map +1 -1
  242. package/dist/default/ui/tooltip/tooltip-shortcut.js +25 -0
  243. package/dist/default/ui/tooltip/tooltip-shortcut.js.map +1 -0
  244. package/dist/default/ui/volume-indicator/volume-indicator-root.js +1 -1
  245. package/dist/default/ui/volume-indicator/volume-indicator-root.js.map +1 -1
  246. package/dist/default/utils/use-attach-iframe.js +14 -0
  247. package/dist/default/utils/use-attach-iframe.js.map +1 -0
  248. package/dist/default/utils/use-media-instance.js +11 -3
  249. package/dist/default/utils/use-media-instance.js.map +1 -1
  250. package/dist/default/utils/use-render.js +1 -1
  251. package/dist/default/utils/use-render.js.map +1 -1
  252. package/dist/dev/icons/dist/react/default/airplay-enter.js +16 -0
  253. package/dist/dev/icons/dist/react/default/airplay-enter.js.map +1 -0
  254. package/dist/dev/icons/dist/react/default/airplay-exit.js +28 -0
  255. package/dist/dev/icons/dist/react/default/airplay-exit.js.map +1 -0
  256. package/dist/dev/icons/dist/react/default/captions-off.js +5 -0
  257. package/dist/dev/icons/dist/react/default/captions-off.js.map +1 -1
  258. package/dist/dev/icons/dist/react/default/gear.js +16 -0
  259. package/dist/dev/icons/dist/react/default/gear.js.map +1 -0
  260. package/dist/dev/icons/dist/react/default/index.d.ts +8 -1
  261. package/dist/dev/icons/dist/react/default/index.d.ts.map +1 -1
  262. package/dist/dev/icons/dist/react/default/quality.js +16 -0
  263. package/dist/dev/icons/dist/react/default/quality.js.map +1 -0
  264. package/dist/dev/icons/dist/react/default/speech.js +19 -0
  265. package/dist/dev/icons/dist/react/default/speech.js.map +1 -0
  266. package/dist/dev/icons/dist/react/default/speed.js +52 -0
  267. package/dist/dev/icons/dist/react/default/speed.js.map +1 -0
  268. package/dist/dev/icons/dist/react/default/switches.js +19 -0
  269. package/dist/dev/icons/dist/react/default/switches.js.map +1 -0
  270. package/dist/dev/icons/dist/react/minimal/airplay-enter.js +16 -0
  271. package/dist/dev/icons/dist/react/minimal/airplay-enter.js.map +1 -0
  272. package/dist/dev/icons/dist/react/minimal/airplay-exit.js +28 -0
  273. package/dist/dev/icons/dist/react/minimal/airplay-exit.js.map +1 -0
  274. package/dist/dev/icons/dist/react/minimal/captions-off.js +5 -0
  275. package/dist/dev/icons/dist/react/minimal/captions-off.js.map +1 -1
  276. package/dist/dev/icons/dist/react/minimal/gear.js +16 -0
  277. package/dist/dev/icons/dist/react/minimal/gear.js.map +1 -0
  278. package/dist/dev/icons/dist/react/minimal/index.d.ts +8 -1
  279. package/dist/dev/icons/dist/react/minimal/index.d.ts.map +1 -1
  280. package/dist/dev/icons/dist/react/minimal/quality.js +16 -0
  281. package/dist/dev/icons/dist/react/minimal/quality.js.map +1 -0
  282. package/dist/dev/icons/dist/react/minimal/speech.js +54 -0
  283. package/dist/dev/icons/dist/react/minimal/speech.js.map +1 -0
  284. package/dist/dev/icons/dist/react/minimal/speed.js +52 -0
  285. package/dist/dev/icons/dist/react/minimal/speed.js.map +1 -0
  286. package/dist/dev/icons/dist/react/minimal/switches.js +19 -0
  287. package/dist/dev/icons/dist/react/minimal/switches.js.map +1 -0
  288. package/dist/dev/icons/index.d.ts +2 -2
  289. package/dist/dev/icons/index.js +8 -1
  290. package/dist/dev/icons/minimal/index.d.ts +2 -2
  291. package/dist/dev/icons/minimal/index.js +8 -1
  292. package/dist/dev/index.d.ts +19 -15
  293. package/dist/dev/index.js +21 -17
  294. package/dist/dev/media/dash-video/index.d.ts.map +1 -1
  295. package/dist/dev/media/dash-video/index.js +5 -1
  296. package/dist/dev/media/dash-video/index.js.map +1 -1
  297. package/dist/dev/media/hlsjs-video/index.d.ts +15 -0
  298. package/dist/dev/media/hlsjs-video/index.d.ts.map +1 -0
  299. package/dist/dev/media/{hls-video → hlsjs-video}/index.js +9 -5
  300. package/dist/dev/media/hlsjs-video/index.js.map +1 -0
  301. package/dist/dev/media/mux-audio/index.d.ts +2 -2
  302. package/dist/dev/media/mux-audio/index.d.ts.map +1 -1
  303. package/dist/dev/media/mux-audio/index.js +9 -3
  304. package/dist/dev/media/mux-audio/index.js.map +1 -1
  305. package/dist/dev/media/mux-video/index.d.ts +2 -2
  306. package/dist/dev/media/mux-video/index.d.ts.map +1 -1
  307. package/dist/dev/media/mux-video/index.js +9 -3
  308. package/dist/dev/media/mux-video/index.js.map +1 -1
  309. package/dist/dev/media/native-hls-video/index.d.ts.map +1 -1
  310. package/dist/dev/media/native-hls-video/index.js +5 -1
  311. package/dist/dev/media/native-hls-video/index.js.map +1 -1
  312. package/dist/dev/media/simple-hls-audio-only/index.d.ts +15 -0
  313. package/dist/dev/media/simple-hls-audio-only/index.d.ts.map +1 -0
  314. package/dist/dev/media/simple-hls-audio-only/index.js +22 -0
  315. package/dist/dev/media/simple-hls-audio-only/index.js.map +1 -0
  316. package/dist/dev/media/simple-hls-video/index.js +1 -1
  317. package/dist/dev/media/vimeo-video/index.d.ts +15 -0
  318. package/dist/dev/media/vimeo-video/index.d.ts.map +1 -0
  319. package/dist/dev/media/vimeo-video/index.js +37 -0
  320. package/dist/dev/media/vimeo-video/index.js.map +1 -0
  321. package/dist/dev/player/context.d.ts +8 -0
  322. package/dist/dev/player/context.d.ts.map +1 -1
  323. package/dist/dev/player/context.js.map +1 -1
  324. package/dist/dev/player/create-player.js +13 -4
  325. package/dist/dev/player/create-player.js.map +1 -1
  326. package/dist/dev/presets/audio/minimal-skin.css +414 -69
  327. package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -1
  328. package/dist/dev/presets/audio/minimal-skin.js +69 -39
  329. package/dist/dev/presets/audio/minimal-skin.js.map +1 -1
  330. package/dist/dev/presets/audio/minimal-skin.tailwind.d.ts.map +1 -1
  331. package/dist/dev/presets/audio/minimal-skin.tailwind.js +71 -42
  332. package/dist/dev/presets/audio/minimal-skin.tailwind.js.map +1 -1
  333. package/dist/dev/presets/audio/skin.css +419 -121
  334. package/dist/dev/presets/audio/skin.d.ts.map +1 -1
  335. package/dist/dev/presets/audio/skin.js +70 -40
  336. package/dist/dev/presets/audio/skin.js.map +1 -1
  337. package/dist/dev/presets/audio/skin.tailwind.d.ts.map +1 -1
  338. package/dist/dev/presets/audio/skin.tailwind.js +72 -42
  339. package/dist/dev/presets/audio/skin.tailwind.js.map +1 -1
  340. package/dist/dev/presets/live-audio/index.d.ts +2 -2
  341. package/dist/dev/presets/live-audio/index.js +2 -2
  342. package/dist/dev/presets/live-audio/minimal-skin.css +414 -69
  343. package/dist/dev/presets/live-audio/minimal-skin.d.ts.map +1 -1
  344. package/dist/dev/presets/live-audio/minimal-skin.js +26 -12
  345. package/dist/dev/presets/live-audio/minimal-skin.js.map +1 -1
  346. package/dist/dev/presets/live-audio/minimal-skin.tailwind.d.ts.map +1 -1
  347. package/dist/dev/presets/live-audio/minimal-skin.tailwind.js +27 -14
  348. package/dist/dev/presets/live-audio/minimal-skin.tailwind.js.map +1 -1
  349. package/dist/dev/presets/live-audio/skin.css +419 -121
  350. package/dist/dev/presets/live-audio/skin.d.ts +3 -1
  351. package/dist/dev/presets/live-audio/skin.d.ts.map +1 -1
  352. package/dist/dev/presets/live-audio/skin.js +32 -14
  353. package/dist/dev/presets/live-audio/skin.js.map +1 -1
  354. package/dist/dev/presets/live-audio/skin.tailwind.d.ts.map +1 -1
  355. package/dist/dev/presets/live-audio/skin.tailwind.js +27 -13
  356. package/dist/dev/presets/live-audio/skin.tailwind.js.map +1 -1
  357. package/dist/dev/presets/live-video/minimal-skin.css +566 -210
  358. package/dist/dev/presets/live-video/minimal-skin.d.ts +0 -7
  359. package/dist/dev/presets/live-video/minimal-skin.d.ts.map +1 -1
  360. package/dist/dev/presets/live-video/minimal-skin.js +93 -12
  361. package/dist/dev/presets/live-video/minimal-skin.js.map +1 -1
  362. package/dist/dev/presets/live-video/minimal-skin.tailwind.d.ts.map +1 -1
  363. package/dist/dev/presets/live-video/minimal-skin.tailwind.js +94 -13
  364. package/dist/dev/presets/live-video/minimal-skin.tailwind.js.map +1 -1
  365. package/dist/dev/presets/live-video/skin.css +581 -264
  366. package/dist/dev/presets/live-video/skin.d.ts +0 -6
  367. package/dist/dev/presets/live-video/skin.d.ts.map +1 -1
  368. package/dist/dev/presets/live-video/skin.js +95 -16
  369. package/dist/dev/presets/live-video/skin.js.map +1 -1
  370. package/dist/dev/presets/live-video/skin.tailwind.d.ts.map +1 -1
  371. package/dist/dev/presets/live-video/skin.tailwind.js +95 -17
  372. package/dist/dev/presets/live-video/skin.tailwind.js.map +1 -1
  373. package/dist/dev/presets/types.d.ts +2 -1
  374. package/dist/dev/presets/types.d.ts.map +1 -1
  375. package/dist/dev/presets/video/minimal-skin.css +566 -210
  376. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
  377. package/dist/dev/presets/video/minimal-skin.js +281 -53
  378. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  379. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
  380. package/dist/dev/presets/video/minimal-skin.tailwind.js +284 -57
  381. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  382. package/dist/dev/presets/video/skin.css +581 -264
  383. package/dist/dev/presets/video/skin.d.ts.map +1 -1
  384. package/dist/dev/presets/video/skin.js +282 -57
  385. package/dist/dev/presets/video/skin.js.map +1 -1
  386. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
  387. package/dist/dev/presets/video/skin.tailwind.js +285 -61
  388. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  389. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +8 -3
  390. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  391. package/dist/dev/skins/dist/default/default/tailwind/components/badge.js +6 -0
  392. package/dist/dev/skins/dist/default/default/tailwind/components/badge.js.map +1 -0
  393. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js +1 -4
  394. package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js.map +1 -1
  395. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js +1 -1
  396. package/dist/dev/skins/dist/default/default/tailwind/components/icon.js.map +1 -1
  397. package/dist/dev/skins/dist/default/default/tailwind/components/input-feedback.js +9 -9
  398. package/dist/dev/skins/dist/default/default/tailwind/components/input-feedback.js.map +1 -1
  399. package/dist/dev/skins/dist/default/default/tailwind/components/menu.js +26 -4
  400. package/dist/dev/skins/dist/default/default/tailwind/components/menu.js.map +1 -1
  401. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js +1 -1
  402. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  403. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +4 -3
  404. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  405. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +7 -1
  406. package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  407. package/dist/dev/skins/dist/default/default/tailwind/components/root.js +1 -1
  408. package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  409. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js +1 -1
  410. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  411. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +5 -3
  412. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  413. package/dist/dev/skins/dist/default/default/tailwind/components/thumbnail.js +12 -0
  414. package/dist/dev/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -0
  415. package/dist/dev/skins/dist/default/default/tailwind/components/time.js +1 -1
  416. package/dist/dev/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  417. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +26 -13
  418. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  419. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +13 -3
  420. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  421. package/dist/dev/skins/dist/default/minimal/tailwind/components/badge.js +6 -0
  422. package/dist/dev/skins/dist/default/minimal/tailwind/components/badge.js.map +1 -0
  423. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js +1 -1
  424. package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -1
  425. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js +1 -1
  426. package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -1
  427. package/dist/dev/skins/dist/default/minimal/tailwind/components/input-feedback.js +9 -9
  428. package/dist/dev/skins/dist/default/minimal/tailwind/components/input-feedback.js.map +1 -1
  429. package/dist/dev/skins/dist/default/minimal/tailwind/components/menu.js +25 -4
  430. package/dist/dev/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -1
  431. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
  432. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  433. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +3 -2
  434. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  435. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +7 -1
  436. package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  437. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +1 -1
  438. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  439. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js +1 -1
  440. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  441. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +5 -3
  442. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  443. package/dist/dev/skins/dist/default/minimal/tailwind/components/thumbnail.js +13 -0
  444. package/dist/dev/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -0
  445. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js +1 -1
  446. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  447. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +27 -11
  448. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  449. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js +17 -2
  450. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  451. package/dist/dev/tailwind.css +0 -24
  452. package/dist/dev/ui/airplay-button/airplay-button.d.ts +15 -0
  453. package/dist/dev/ui/airplay-button/airplay-button.d.ts.map +1 -0
  454. package/dist/dev/ui/airplay-button/airplay-button.js +17 -0
  455. package/dist/dev/ui/airplay-button/airplay-button.js.map +1 -0
  456. package/dist/dev/ui/airplay-button/index.d.ts +2 -0
  457. package/dist/dev/ui/airplay-button/index.js +2 -0
  458. package/dist/dev/ui/alert-dialog/alert-dialog-close.js +1 -1
  459. package/dist/dev/ui/alert-dialog/alert-dialog-popup.js +1 -1
  460. package/dist/dev/ui/audio-track/index.d.ts +2 -0
  461. package/dist/dev/ui/audio-track/index.js +2 -0
  462. package/dist/dev/ui/audio-track/use-audio-track-options.d.ts +25 -0
  463. package/dist/dev/ui/audio-track/use-audio-track-options.d.ts.map +1 -0
  464. package/dist/dev/ui/audio-track/use-audio-track-options.js +34 -0
  465. package/dist/dev/ui/audio-track/use-audio-track-options.js.map +1 -0
  466. package/dist/dev/ui/captions-radio-group/index.d.ts +2 -0
  467. package/dist/dev/ui/captions-radio-group/index.js +2 -0
  468. package/dist/dev/ui/captions-radio-group/use-captions-options.d.ts +26 -0
  469. package/dist/dev/ui/captions-radio-group/use-captions-options.d.ts.map +1 -0
  470. package/dist/dev/ui/captions-radio-group/use-captions-options.js +40 -0
  471. package/dist/dev/ui/captions-radio-group/use-captions-options.js.map +1 -0
  472. package/dist/dev/ui/create-media-button.js +23 -10
  473. package/dist/dev/ui/create-media-button.js.map +1 -1
  474. package/dist/dev/ui/error-dialog/error-dialog-description.js +1 -1
  475. package/dist/dev/ui/hooks/use-button.d.ts +2 -1
  476. package/dist/dev/ui/hooks/use-button.d.ts.map +1 -1
  477. package/dist/dev/ui/hooks/use-button.js.map +1 -1
  478. package/dist/dev/ui/hotkey/use-hotkey-shortcut.d.ts +7 -0
  479. package/dist/dev/ui/hotkey/use-hotkey-shortcut.d.ts.map +1 -0
  480. package/dist/dev/ui/hotkey/use-hotkey-shortcut.js +28 -0
  481. package/dist/dev/ui/hotkey/use-hotkey-shortcut.js.map +1 -0
  482. package/dist/dev/ui/hotkey/use-hotkey.js +1 -2
  483. package/dist/dev/ui/hotkey/use-hotkey.js.map +1 -1
  484. package/dist/dev/ui/input-indicators/use-input-indicator-root.js +2 -2
  485. package/dist/dev/ui/input-indicators/use-input-indicator-root.js.map +1 -1
  486. package/dist/dev/ui/input-indicators/use-rendered-indicator-state.js +7 -4
  487. package/dist/dev/ui/input-indicators/use-rendered-indicator-state.js.map +1 -1
  488. package/dist/dev/ui/live-button/live-button.js +1 -1
  489. package/dist/dev/ui/live-button/live-button.js.map +1 -1
  490. package/dist/dev/ui/menu/context.d.ts.map +1 -1
  491. package/dist/dev/ui/menu/context.js +16 -1
  492. package/dist/dev/ui/menu/context.js.map +1 -1
  493. package/dist/dev/ui/menu/index.parts.d.ts +3 -2
  494. package/dist/dev/ui/menu/index.parts.js +4 -2
  495. package/dist/dev/ui/menu/index.parts.js.map +1 -1
  496. package/dist/dev/ui/menu/menu-back.d.ts.map +1 -1
  497. package/dist/dev/ui/menu/menu-back.js +0 -1
  498. package/dist/dev/ui/menu/menu-back.js.map +1 -1
  499. package/dist/dev/ui/menu/menu-checkbox-item.d.ts.map +1 -1
  500. package/dist/dev/ui/menu/menu-checkbox-item.js +1 -2
  501. package/dist/dev/ui/menu/menu-checkbox-item.js.map +1 -1
  502. package/dist/dev/ui/menu/menu-content.d.ts.map +1 -1
  503. package/dist/dev/ui/menu/menu-content.js +23 -5
  504. package/dist/dev/ui/menu/menu-content.js.map +1 -1
  505. package/dist/dev/ui/menu/menu-group-label.d.ts +15 -0
  506. package/dist/dev/ui/menu/menu-group-label.d.ts.map +1 -0
  507. package/dist/dev/ui/menu/menu-group-label.js +29 -0
  508. package/dist/dev/ui/menu/menu-group-label.js.map +1 -0
  509. package/dist/dev/ui/menu/menu-group.d.ts +1 -4
  510. package/dist/dev/ui/menu/menu-group.d.ts.map +1 -1
  511. package/dist/dev/ui/menu/menu-group.js +7 -9
  512. package/dist/dev/ui/menu/menu-group.js.map +1 -1
  513. package/dist/dev/ui/menu/menu-item-indicator.d.ts.map +1 -1
  514. package/dist/dev/ui/menu/menu-item-indicator.js +1 -2
  515. package/dist/dev/ui/menu/menu-item-indicator.js.map +1 -1
  516. package/dist/dev/ui/menu/menu-item-setting-provider.js +72 -0
  517. package/dist/dev/ui/menu/menu-item-setting-provider.js.map +1 -0
  518. package/dist/dev/ui/menu/menu-item-type.d.ts +5 -0
  519. package/dist/dev/ui/menu/menu-item-type.d.ts.map +1 -0
  520. package/dist/dev/ui/menu/menu-item-value.d.ts +14 -0
  521. package/dist/dev/ui/menu/menu-item-value.d.ts.map +1 -0
  522. package/dist/dev/ui/menu/menu-item-value.js +28 -0
  523. package/dist/dev/ui/menu/menu-item-value.js.map +1 -0
  524. package/dist/dev/ui/menu/menu-item.d.ts +3 -0
  525. package/dist/dev/ui/menu/menu-item.d.ts.map +1 -1
  526. package/dist/dev/ui/menu/menu-item.js +44 -23
  527. package/dist/dev/ui/menu/menu-item.js.map +1 -1
  528. package/dist/dev/ui/menu/menu-radio-group.d.ts +0 -2
  529. package/dist/dev/ui/menu/menu-radio-group.d.ts.map +1 -1
  530. package/dist/dev/ui/menu/menu-radio-group.js +6 -9
  531. package/dist/dev/ui/menu/menu-radio-group.js.map +1 -1
  532. package/dist/dev/ui/menu/menu-radio-item.d.ts.map +1 -1
  533. package/dist/dev/ui/menu/menu-radio-item.js +1 -2
  534. package/dist/dev/ui/menu/menu-radio-item.js.map +1 -1
  535. package/dist/dev/ui/menu/menu-root.js +1 -1
  536. package/dist/dev/ui/menu/menu-separator.d.ts.map +1 -1
  537. package/dist/dev/ui/menu/menu-separator.js +1 -2
  538. package/dist/dev/ui/menu/menu-separator.js.map +1 -1
  539. package/dist/dev/ui/menu/menu-trigger.d.ts +5 -2
  540. package/dist/dev/ui/menu/menu-trigger.d.ts.map +1 -1
  541. package/dist/dev/ui/menu/menu-trigger.js +85 -29
  542. package/dist/dev/ui/menu/menu-trigger.js.map +1 -1
  543. package/dist/dev/ui/menu/use-menu-group.js +31 -0
  544. package/dist/dev/ui/menu/use-menu-group.js.map +1 -0
  545. package/dist/dev/ui/playback-rate/index.d.ts +2 -0
  546. package/dist/dev/ui/playback-rate/index.js +2 -0
  547. package/dist/dev/ui/playback-rate/use-playback-rate-options.d.ts +28 -0
  548. package/dist/dev/ui/playback-rate/use-playback-rate-options.d.ts.map +1 -0
  549. package/dist/dev/ui/playback-rate/use-playback-rate-options.js +37 -0
  550. package/dist/dev/ui/playback-rate/use-playback-rate-options.js.map +1 -0
  551. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts.map +1 -1
  552. package/dist/dev/ui/playback-rate-button/playback-rate-button.js +2 -1
  553. package/dist/dev/ui/playback-rate-button/playback-rate-button.js.map +1 -1
  554. package/dist/dev/ui/poster/poster.d.ts.map +1 -1
  555. package/dist/dev/ui/poster/poster.js +17 -3
  556. package/dist/dev/ui/poster/poster.js.map +1 -1
  557. package/dist/dev/ui/quality/index.d.ts +2 -0
  558. package/dist/dev/ui/quality/index.js +2 -0
  559. package/dist/dev/ui/quality/use-quality-options.d.ts +27 -0
  560. package/dist/dev/ui/quality/use-quality-options.d.ts.map +1 -0
  561. package/dist/dev/ui/quality/use-quality-options.js +40 -0
  562. package/dist/dev/ui/quality/use-quality-options.js.map +1 -0
  563. package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -1
  564. package/dist/dev/ui/seek-button/seek-button.js +3 -1
  565. package/dist/dev/ui/seek-button/seek-button.js.map +1 -1
  566. package/dist/dev/ui/time/time-value.d.ts.map +1 -1
  567. package/dist/dev/ui/time/time-value.js +32 -5
  568. package/dist/dev/ui/time/time-value.js.map +1 -1
  569. package/dist/dev/ui/time-slider/time-slider-root.d.ts.map +1 -1
  570. package/dist/dev/ui/time-slider/time-slider-root.js +18 -6
  571. package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -1
  572. package/dist/dev/ui/tooltip/context.d.ts +7 -3
  573. package/dist/dev/ui/tooltip/context.d.ts.map +1 -1
  574. package/dist/dev/ui/tooltip/context.js.map +1 -1
  575. package/dist/dev/ui/tooltip/index.d.ts +2 -2
  576. package/dist/dev/ui/tooltip/index.parts.d.ts +3 -1
  577. package/dist/dev/ui/tooltip/index.parts.js +4 -0
  578. package/dist/dev/ui/tooltip/index.parts.js.map +1 -1
  579. package/dist/dev/ui/tooltip/tooltip-arrow.js +1 -1
  580. package/dist/dev/ui/tooltip/tooltip-label.d.ts +15 -0
  581. package/dist/dev/ui/tooltip/tooltip-label.d.ts.map +1 -0
  582. package/dist/dev/ui/tooltip/tooltip-label.js +24 -0
  583. package/dist/dev/ui/tooltip/tooltip-label.js.map +1 -0
  584. package/dist/dev/ui/tooltip/tooltip-popup.d.ts.map +1 -1
  585. package/dist/dev/ui/tooltip/tooltip-popup.js +7 -3
  586. package/dist/dev/ui/tooltip/tooltip-popup.js.map +1 -1
  587. package/dist/dev/ui/tooltip/tooltip-root.js +1 -1
  588. package/dist/dev/ui/tooltip/tooltip-root.js.map +1 -1
  589. package/dist/dev/ui/tooltip/tooltip-shortcut.d.ts +15 -0
  590. package/dist/dev/ui/tooltip/tooltip-shortcut.d.ts.map +1 -0
  591. package/dist/dev/ui/tooltip/tooltip-shortcut.js +25 -0
  592. package/dist/dev/ui/tooltip/tooltip-shortcut.js.map +1 -0
  593. package/dist/dev/ui/volume-indicator/volume-indicator-root.d.ts.map +1 -1
  594. package/dist/dev/ui/volume-indicator/volume-indicator-root.js +1 -1
  595. package/dist/dev/ui/volume-indicator/volume-indicator-root.js.map +1 -1
  596. package/dist/dev/utils/use-attach-iframe.js +14 -0
  597. package/dist/dev/utils/use-attach-iframe.js.map +1 -0
  598. package/dist/dev/utils/use-media-instance.d.ts +7 -2
  599. package/dist/dev/utils/use-media-instance.d.ts.map +1 -1
  600. package/dist/dev/utils/use-media-instance.js +11 -3
  601. package/dist/dev/utils/use-media-instance.js.map +1 -1
  602. package/dist/dev/utils/use-render.d.ts.map +1 -1
  603. package/dist/dev/utils/use-render.js +1 -1
  604. package/dist/dev/utils/use-render.js.map +1 -1
  605. package/docs/README.md +1 -1
  606. package/docs/concepts/browser-support.md +1 -1
  607. package/docs/concepts/cast.md +162 -0
  608. package/docs/concepts/features.md +1 -1
  609. package/docs/concepts/overview.md +4 -4
  610. package/docs/concepts/presets.md +32 -6
  611. package/docs/concepts/skins.md +903 -318
  612. package/docs/concepts/why-videojs.md +1 -1
  613. package/docs/how-to/build-with-ai.md +7 -7
  614. package/docs/how-to/build-your-own-component.md +3 -3
  615. package/docs/how-to/customize-skins.md +2721 -847
  616. package/docs/how-to/installation.md +10 -10
  617. package/docs/llms.txt +23 -1
  618. package/docs/reference/airplay-button.md +264 -0
  619. package/docs/reference/audio-track-radio-group.md +59 -0
  620. package/docs/reference/background-video.md +76 -0
  621. package/docs/reference/captions-button.md +16 -0
  622. package/docs/reference/cast-button.md +236 -0
  623. package/docs/reference/dash-video.md +138 -0
  624. package/docs/reference/feature-audio-track.md +60 -0
  625. package/docs/reference/feature-fullscreen.md +20 -3
  626. package/docs/reference/feature-orientation-lock.md +35 -0
  627. package/docs/reference/feature-quality.md +70 -0
  628. package/docs/reference/feature-remote-playback.md +3 -1
  629. package/docs/reference/feature-text-tracks.md +10 -0
  630. package/docs/reference/hlsjs-video.md +274 -0
  631. package/docs/reference/menu.md +1194 -0
  632. package/docs/reference/mux-audio.md +218 -0
  633. package/docs/reference/mux-video.md +275 -0
  634. package/docs/reference/native-hls-video.md +212 -0
  635. package/docs/reference/play-button.md +1 -1
  636. package/docs/reference/playback-rate-button.md +16 -0
  637. package/docs/reference/player-container.md +9 -3
  638. package/docs/reference/player-provider.md +3 -1
  639. package/docs/reference/quality-radio-group.md +59 -0
  640. package/docs/reference/simple-hls-audio-only.md +93 -0
  641. package/docs/reference/simple-hls-video.md +150 -0
  642. package/docs/reference/time-slider.md +12 -0
  643. package/docs/reference/time.md +24 -0
  644. package/docs/reference/tooltip.md +89 -5
  645. package/docs/reference/use-media-attach.md +2 -2
  646. package/docs/reference/use-media.md +103 -2
  647. package/docs/reference/use-player-context.md +1 -1
  648. package/docs/reference/use-player.md +16 -1
  649. package/docs/reference/use-selector.md +1 -1
  650. package/docs/reference/use-snapshot.md +3 -3
  651. package/docs/reference/volume-slider.md +1 -1
  652. package/package.json +7 -7
  653. package/dist/default/media/hls-video/index.js.map +0 -1
  654. package/dist/default/skins/dist/default/default/tailwind/components/preview.js +0 -12
  655. package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +0 -1
  656. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js +0 -13
  657. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +0 -1
  658. package/dist/default/ui/hotkey/use-aria-key-shortcuts.js +0 -16
  659. package/dist/default/ui/hotkey/use-aria-key-shortcuts.js.map +0 -1
  660. package/dist/default/ui/menu/menu-label.js +0 -23
  661. package/dist/default/ui/menu/menu-label.js.map +0 -1
  662. package/dist/default/ui/playback-rate-menu/context.js +0 -20
  663. package/dist/default/ui/playback-rate-menu/context.js.map +0 -1
  664. package/dist/default/ui/playback-rate-menu/index.js +0 -3
  665. package/dist/default/ui/playback-rate-menu/index.parts.js +0 -17
  666. package/dist/default/ui/playback-rate-menu/index.parts.js.map +0 -1
  667. package/dist/default/ui/playback-rate-menu/playback-rate-menu-content.js +0 -28
  668. package/dist/default/ui/playback-rate-menu/playback-rate-menu-content.js.map +0 -1
  669. package/dist/default/ui/playback-rate-menu/playback-rate-menu-root.js +0 -36
  670. package/dist/default/ui/playback-rate-menu/playback-rate-menu-root.js.map +0 -1
  671. package/dist/default/ui/playback-rate-menu/playback-rate-menu-trigger.js +0 -51
  672. package/dist/default/ui/playback-rate-menu/playback-rate-menu-trigger.js.map +0 -1
  673. package/dist/default/ui/playback-rate-menu/use-playback-rate-menu.js +0 -27
  674. package/dist/default/ui/playback-rate-menu/use-playback-rate-menu.js.map +0 -1
  675. package/dist/dev/media/hls-video/index.d.ts +0 -15
  676. package/dist/dev/media/hls-video/index.d.ts.map +0 -1
  677. package/dist/dev/media/hls-video/index.js.map +0 -1
  678. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js +0 -12
  679. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +0 -1
  680. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js +0 -13
  681. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +0 -1
  682. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.d.ts +0 -5
  683. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.d.ts.map +0 -1
  684. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.js +0 -16
  685. package/dist/dev/ui/hotkey/use-aria-key-shortcuts.js.map +0 -1
  686. package/dist/dev/ui/menu/menu-label.d.ts +0 -15
  687. package/dist/dev/ui/menu/menu-label.d.ts.map +0 -1
  688. package/dist/dev/ui/menu/menu-label.js +0 -23
  689. package/dist/dev/ui/menu/menu-label.js.map +0 -1
  690. package/dist/dev/ui/playback-rate-menu/context.js +0 -20
  691. package/dist/dev/ui/playback-rate-menu/context.js.map +0 -1
  692. package/dist/dev/ui/playback-rate-menu/index.d.ts +0 -3
  693. package/dist/dev/ui/playback-rate-menu/index.js +0 -3
  694. package/dist/dev/ui/playback-rate-menu/index.parts.d.ts +0 -12
  695. package/dist/dev/ui/playback-rate-menu/index.parts.d.ts.map +0 -1
  696. package/dist/dev/ui/playback-rate-menu/index.parts.js +0 -17
  697. package/dist/dev/ui/playback-rate-menu/index.parts.js.map +0 -1
  698. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-content.d.ts +0 -14
  699. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-content.d.ts.map +0 -1
  700. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-content.js +0 -28
  701. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-content.js.map +0 -1
  702. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-root.d.ts +0 -23
  703. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-root.d.ts.map +0 -1
  704. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-root.js +0 -39
  705. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-root.js.map +0 -1
  706. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger.d.ts +0 -14
  707. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger.d.ts.map +0 -1
  708. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger.js +0 -51
  709. package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger.js.map +0 -1
  710. package/dist/dev/ui/playback-rate-menu/use-playback-rate-menu.d.ts +0 -26
  711. package/dist/dev/ui/playback-rate-menu/use-playback-rate-menu.d.ts.map +0 -1
  712. package/dist/dev/ui/playback-rate-menu/use-playback-rate-menu.js +0 -27
  713. package/dist/dev/ui/playback-rate-menu/use-playback-rate-menu.js.map +0 -1
@@ -3,9 +3,10 @@ import { MenuBack } from "./menu-back.js";
3
3
  import { MenuCheckboxItem } from "./menu-checkbox-item.js";
4
4
  import { MenuContent } from "./menu-content.js";
5
5
  import { MenuGroup } from "./menu-group.js";
6
+ import { MenuGroupLabel } from "./menu-group-label.js";
6
7
  import { MenuItem } from "./menu-item.js";
7
8
  import { MenuItemIndicator } from "./menu-item-indicator.js";
8
- import { MenuLabel } from "./menu-label.js";
9
+ import { MenuItemValue } from "./menu-item-value.js";
9
10
  import { MenuRadioGroup } from "./menu-radio-group.js";
10
11
  import { MenuRadioItem } from "./menu-radio-item.js";
11
12
  import { MenuRoot } from "./menu-root.js";
@@ -18,9 +19,10 @@ var index_parts_exports = /* @__PURE__ */ __exportAll({
18
19
  CheckboxItem: () => MenuCheckboxItem,
19
20
  Content: () => MenuContent,
20
21
  Group: () => MenuGroup,
22
+ GroupLabel: () => MenuGroupLabel,
21
23
  Item: () => MenuItem,
22
24
  ItemIndicator: () => MenuItemIndicator,
23
- Label: () => MenuLabel,
25
+ ItemValue: () => MenuItemValue,
24
26
  RadioGroup: () => MenuRadioGroup,
25
27
  RadioItem: () => MenuRadioItem,
26
28
  Root: () => MenuRoot,
@@ -1 +1 @@
1
- {"version":3,"file":"index.parts.js","names":[],"sources":["../../../../src/ui/menu/index.parts.ts"],"sourcesContent":["export { MenuBack as Back, type MenuBackProps as BackProps } from './menu-back';\nexport {\n MenuCheckboxItem as CheckboxItem,\n type MenuCheckboxItemProps as CheckboxItemProps,\n} from './menu-checkbox-item';\nexport { MenuContent as Content, type MenuContentProps as ContentProps } from './menu-content';\nexport { MenuGroup as Group, type MenuGroupProps as GroupProps } from './menu-group';\nexport { MenuItem as Item, type MenuItemProps as ItemProps } from './menu-item';\nexport {\n MenuItemIndicator as ItemIndicator,\n type MenuItemIndicatorProps as ItemIndicatorProps,\n} from './menu-item-indicator';\nexport { MenuLabel as Label, type MenuLabelProps as LabelProps } from './menu-label';\nexport { MenuRadioGroup as RadioGroup, type MenuRadioGroupProps as RadioGroupProps } from './menu-radio-group';\nexport { MenuRadioItem as RadioItem, type MenuRadioItemProps as RadioItemProps } from './menu-radio-item';\nexport { MenuRoot as Root, type MenuRootProps as RootProps } from './menu-root';\nexport { MenuSeparator as Separator, type MenuSeparatorProps as SeparatorProps } from './menu-separator';\nexport { MenuTrigger as Trigger, type MenuTriggerProps as TriggerProps } from './menu-trigger';\nexport { MenuView as View, type MenuViewProps as ViewProps } from './menu-view';\n"],"mappings":""}
1
+ {"version":3,"file":"index.parts.js","names":[],"sources":["../../../../src/ui/menu/index.parts.ts"],"sourcesContent":["export { MenuBack as Back, type MenuBackProps as BackProps } from './menu-back';\nexport {\n MenuCheckboxItem as CheckboxItem,\n type MenuCheckboxItemProps as CheckboxItemProps,\n} from './menu-checkbox-item';\nexport { MenuContent as Content, type MenuContentProps as ContentProps } from './menu-content';\nexport { MenuGroup as Group, type MenuGroupProps as GroupProps } from './menu-group';\nexport { MenuGroupLabel as GroupLabel, type MenuGroupLabelProps as GroupLabelProps } from './menu-group-label';\nexport { MenuItem as Item, type MenuItemProps as ItemProps } from './menu-item';\nexport {\n MenuItemIndicator as ItemIndicator,\n type MenuItemIndicatorProps as ItemIndicatorProps,\n} from './menu-item-indicator';\nexport { MenuItemValue as ItemValue, type MenuItemValueProps as ItemValueProps } from './menu-item-value';\nexport { MenuRadioGroup as RadioGroup, type MenuRadioGroupProps as RadioGroupProps } from './menu-radio-group';\nexport { MenuRadioItem as RadioItem, type MenuRadioItemProps as RadioItemProps } from './menu-radio-item';\nexport { MenuRoot as Root, type MenuRootProps as RootProps } from './menu-root';\nexport { MenuSeparator as Separator, type MenuSeparatorProps as SeparatorProps } from './menu-separator';\nexport { MenuTrigger as Trigger, type MenuTriggerProps as TriggerProps } from './menu-trigger';\nexport { MenuView as View, type MenuViewProps as ViewProps } from './menu-view';\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-back.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-back.tsx"],"mappings":";;;;;UASiB,aAAA,SAAsB,gBAAA,WAA2B,SAAA;;EAEhE,KAAA;AAAA;;cAIW,QAAA,EAAQ,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,aAAA,WAAA,OAAA,CAAA,aAAA,CAAA,iBAAA;AAAA,kBAkCJ,QAAA;EAAA,KACH,KAAA,GAAQ,aAAA;EAAA,KACR,KAAA,GAAQ,SAAA;AAAA"}
1
+ {"version":3,"file":"menu-back.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-back.tsx"],"mappings":";;;;;UASiB,aAAA,SAAsB,gBAAA,WAA2B,SAAA;;EAEhE,KAAA;AAAA;;cAIW,QAAA,EAAQ,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,aAAA,WAAA,OAAA,CAAA,aAAA,CAAA,iBAAA;AAAA,kBAiCJ,QAAA;EAAA,KACH,KAAA,GAAQ,aAAA;EAAA,KACR,KAAA,GAAQ,SAAA;AAAA"}
@@ -16,7 +16,6 @@ const MenuBack = forwardRef(function MenuBack({ render, className, style, label
16
16
  style
17
17
  }, {
18
18
  state: parentMenu?.state ?? {},
19
- stateAttrMap: parentMenu?.stateAttrMap,
20
19
  ref: forwardedRef,
21
20
  props: [{
22
21
  type: "button",
@@ -1 +1 @@
1
- {"version":3,"file":"menu-back.js","names":[],"sources":["../../../../src/ui/menu/menu-back.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef, useCallback } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useSubMenuContext } from './context';\n\nexport interface MenuBackProps extends UIComponentProps<'button', MenuState> {\n /** Accessible label for the back button. */\n label?: string;\n}\n\n/** Button that navigates back to the parent menu view. Place at the top of a submenu Content. */\nexport const MenuBack = forwardRef<HTMLButtonElement, MenuBackProps>(function MenuBack(\n { render, className, style, label = 'Back', onClick, ...elementProps },\n forwardedRef\n) {\n const subMenuCtx = useSubMenuContext();\n const parentMenu = subMenuCtx?.parentMenu ?? null;\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n parentMenu?.pop();\n },\n [onClick, parentMenu]\n );\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state: parentMenu?.state ?? ({} as MenuState),\n stateAttrMap: parentMenu?.stateAttrMap,\n ref: forwardedRef,\n props: [\n {\n type: 'button' as const,\n 'aria-label': label,\n onClick: handleClick,\n },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace MenuBack {\n export type Props = MenuBackProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;AAeA,MAAa,WAAW,WAA6C,SAAS,SAC5E,EAAE,QAAQ,WAAW,OAAO,QAAQ,QAAQ,SAAS,GAAG,gBACxD,cACA;CAEA,MAAM,aADa,mBAAmB,EACP,cAAc;CAE7C,MAAM,cAAc,aACjB,UAA+C;AAC9C,YAAU,MAAM;AAChB,cAAY,KAAK;IAEnB,CAAC,SAAS,WAAW,CACtB;AAED,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OAAO,YAAY,SAAU,EAAE;EAC/B,cAAc,YAAY;EAC1B,KAAK;EACL,OAAO,CACL;GACE,MAAM;GACN,cAAc;GACd,SAAS;GACV,EACD,aACD;EACF,CACF;EACD"}
1
+ {"version":3,"file":"menu-back.js","names":[],"sources":["../../../../src/ui/menu/menu-back.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef, useCallback } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useSubMenuContext } from './context';\n\nexport interface MenuBackProps extends UIComponentProps<'button', MenuState> {\n /** Accessible label for the back button. */\n label?: string;\n}\n\n/** Button that navigates back to the parent menu view. Place at the top of a submenu Content. */\nexport const MenuBack = forwardRef<HTMLButtonElement, MenuBackProps>(function MenuBack(\n { render, className, style, label = 'Back', onClick, ...elementProps },\n forwardedRef\n) {\n const subMenuCtx = useSubMenuContext();\n const parentMenu = subMenuCtx?.parentMenu ?? null;\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n parentMenu?.pop();\n },\n [onClick, parentMenu]\n );\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state: parentMenu?.state ?? ({} as MenuState),\n ref: forwardedRef,\n props: [\n {\n type: 'button' as const,\n 'aria-label': label,\n onClick: handleClick,\n },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace MenuBack {\n export type Props = MenuBackProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;AAeA,MAAa,WAAW,WAA6C,SAAS,SAC5E,EAAE,QAAQ,WAAW,OAAO,QAAQ,QAAQ,SAAS,GAAG,gBACxD,cACA;CAEA,MAAM,aADa,mBAAmB,EACP,cAAc;CAE7C,MAAM,cAAc,aACjB,UAA+C;AAC9C,YAAU,MAAM;AAChB,cAAY,KAAK;IAEnB,CAAC,SAAS,WAAW,CACtB;AAED,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OAAO,YAAY,SAAU,EAAE;EAC/B,KAAK;EACL,OAAO,CACL;GACE,MAAM;GACN,cAAc;GACd,SAAS;GACV,EACD,aACD;EACF,CACF;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-checkbox-item.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-checkbox-item.tsx"],"mappings":";;;;;UASiB,qBAAA,SAA8B,gBAAA,QAAwB,SAAA;;EAErE,OAAA;EAFe;EAIf,eAAA,GAAkB,OAAA;;EAElB,QAAA;AAAA;;cAIW,gBAAA,EAAgB,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,qBAAA,WAAA,OAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAiDZ,gBAAA;EAAA,KACH,KAAA,GAAQ,qBAAA;EAAA,KACR,KAAA,GAAQ,SAAA;AAAA"}
1
+ {"version":3,"file":"menu-checkbox-item.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-checkbox-item.tsx"],"mappings":";;;;;UASiB,qBAAA,SAA8B,gBAAA,QAAwB,SAAA;;EAErE,OAAA;EAFe;EAIf,eAAA,GAAkB,OAAA;;EAElB,QAAA;AAAA;;cAIW,gBAAA,EAAgB,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,qBAAA,WAAA,OAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAgDZ,gBAAA;EAAA,KACH,KAAA,GAAQ,qBAAA;EAAA,KACR,KAAA,GAAQ,SAAA;AAAA"}
@@ -5,7 +5,7 @@ import { forwardRef, useCallback, useEffect, useRef } from "react";
5
5
  //#region src/ui/menu/menu-checkbox-item.tsx
6
6
  /** A checkbox-style menu item. Renders a `<div>` with `role="menuitemcheckbox"`. */
7
7
  const MenuCheckboxItem = forwardRef(function MenuCheckboxItem({ render, className, style, checked, onCheckedChange, disabled, onClick, ...elementProps }, forwardedRef) {
8
- const { menu, state, stateAttrMap } = useMenuContext();
8
+ const { menu, state } = useMenuContext();
9
9
  const elementRef = useRef(null);
10
10
  useEffect(() => {
11
11
  const element = elementRef.current;
@@ -33,7 +33,6 @@ const MenuCheckboxItem = forwardRef(function MenuCheckboxItem({ render, classNam
33
33
  style
34
34
  }, {
35
35
  state,
36
- stateAttrMap,
37
36
  ref: [forwardedRef, elementRef],
38
37
  props: [{
39
38
  role: "menuitemcheckbox",
@@ -1 +1 @@
1
- {"version":3,"file":"menu-checkbox-item.js","names":[],"sources":["../../../../src/ui/menu/menu-checkbox-item.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef, useCallback, useEffect, useRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuCheckboxItemProps extends UIComponentProps<'div', MenuState> {\n /** Whether the item is currently checked. */\n checked: boolean;\n /** Called when the checked state should change. */\n onCheckedChange: (checked: boolean) => void;\n /** Whether the item is disabled. */\n disabled?: boolean;\n}\n\n/** A checkbox-style menu item. Renders a `<div>` with `role=\"menuitemcheckbox\"`. */\nexport const MenuCheckboxItem = forwardRef<HTMLDivElement, MenuCheckboxItemProps>(function MenuCheckboxItem(\n { render, className, style, checked, onCheckedChange, disabled, onClick, ...elementProps },\n forwardedRef\n) {\n const { menu, state, stateAttrMap } = useMenuContext();\n const elementRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n return menu.registerItem(element);\n }, [menu]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n onClick?.(event);\n onCheckedChange(!checked);\n },\n [disabled, onClick, onCheckedChange, checked]\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: 'menuitemcheckbox' 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 MenuCheckboxItem {\n export type Props = MenuCheckboxItemProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;AAmBA,MAAa,mBAAmB,WAAkD,SAAS,iBACzF,EAAE,QAAQ,WAAW,OAAO,SAAS,iBAAiB,UAAU,SAAS,GAAG,gBAC5E,cACA;CACA,MAAM,EAAE,MAAM,OAAO,iBAAiB,gBAAgB;CACtD,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,kBAAgB,CAAC,QAAQ;IAE3B;EAAC;EAAU;EAAS;EAAiB;EAAQ,CAC9C;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"}
1
+ {"version":3,"file":"menu-checkbox-item.js","names":[],"sources":["../../../../src/ui/menu/menu-checkbox-item.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef, useCallback, useEffect, useRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuCheckboxItemProps extends UIComponentProps<'div', MenuState> {\n /** Whether the item is currently checked. */\n checked: boolean;\n /** Called when the checked state should change. */\n onCheckedChange: (checked: boolean) => void;\n /** Whether the item is disabled. */\n disabled?: boolean;\n}\n\n/** A checkbox-style menu item. Renders a `<div>` with `role=\"menuitemcheckbox\"`. */\nexport const MenuCheckboxItem = forwardRef<HTMLDivElement, MenuCheckboxItemProps>(function MenuCheckboxItem(\n { render, className, style, checked, onCheckedChange, disabled, onClick, ...elementProps },\n forwardedRef\n) {\n const { menu, state } = useMenuContext();\n const elementRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n return menu.registerItem(element);\n }, [menu]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n if (disabled) return;\n onClick?.(event);\n onCheckedChange(!checked);\n },\n [disabled, onClick, onCheckedChange, checked]\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 ref: [forwardedRef, elementRef],\n props: [\n {\n role: 'menuitemcheckbox' 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 MenuCheckboxItem {\n export type Props = MenuCheckboxItemProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;AAmBA,MAAa,mBAAmB,WAAkD,SAAS,iBACzF,EAAE,QAAQ,WAAW,OAAO,SAAS,iBAAiB,UAAU,SAAS,GAAG,gBAC5E,cACA;CACA,MAAM,EAAE,MAAM,UAAU,gBAAgB;CACxC,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,kBAAgB,CAAC,QAAQ;IAE3B;EAAC;EAAU;EAAS;EAAiB;EAAQ,CAC9C;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,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-content.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-content.tsx"],"mappings":";;;;;UAgCiB,gBAAA,SAAyB,gBAAA,QAAwB,SAAA;;cA0ErD,WAAA,EAAW,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,gBAAA,WAAA,OAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAqRP,WAAA;EAAA,KACH,KAAA,GAAQ,gBAAA;EAAA,KACR,KAAA,GAAQ,SAAA;AAAA"}
1
+ {"version":3,"file":"menu-content.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-content.tsx"],"mappings":";;;;;UAiCiB,gBAAA,SAAyB,gBAAA,QAAwB,SAAA;;cA0ErD,WAAA,EAAW,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,gBAAA,WAAA,OAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAuTP,WAAA;EAAA,KACH,KAAA,GAAQ,gBAAA;EAAA,KACR,KAAA,GAAQ,SAAA;AAAA"}
@@ -2,9 +2,10 @@
2
2
  import { useComposedRefs } from "../../utils/use-composed-refs.js";
3
3
  import { renderElement } from "../../utils/use-render.js";
4
4
  import { useMenuContext, useSubMenuContext } from "./context.js";
5
- import { createMenuViewTransition, getAnchorPositionStyle, getMenuViewTransitionAttrs, getMenuViewportAttrs, getMenuViewportElement, getPopupPositionRect, getPositioningBoundaryRect, getRootPositionOptions, isEventWithinElement, isMenuNavigationKey, resolveOffsets, resolvePositioningBoundary, syncMenuViewRoot, syncMenuViewTransition } from "@videojs/core/dom";
5
+ import { createMenuViewTransition, getAnchorPositionStyle, getMenuViewTransitionAttrs, getMenuViewportAttrs, getMenuViewportElement, getPopupPositionRect, getPositioningBoundaryRect, getRootPositionOptions, isEventWithinElement, isMenuNavigationKey, observeMenuViewContent, resolveOffsets, resolvePositioningBoundary, syncMenuViewRoot, syncMenuViewTransition } from "@videojs/core/dom";
6
6
  import { useSnapshot } from "@videojs/store/react";
7
7
  import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
8
+ import { PopoverCSSVars } from "@videojs/core";
8
9
  import { supportsAnchorPositioning } from "@videojs/utils/dom";
9
10
  import { createPortal } from "react-dom";
10
11
  //#region src/ui/menu/menu-content.tsx
@@ -85,6 +86,8 @@ const MenuContent = forwardRef(function MenuContent({ render, className, style,
85
86
  const menuViewTransitionState = useSnapshot(menuViewTransition.input);
86
87
  const menuViewElementRef = useRef(null);
87
88
  const parentContentElementRef = useRef(null);
89
+ const activeSubMenuIdRef = useRef(activeSubMenuId);
90
+ activeSubMenuIdRef.current = activeSubMenuId;
88
91
  useLayoutEffect(() => {
89
92
  return () => menuViewTransition.destroy();
90
93
  }, [menuViewTransition]);
@@ -161,6 +164,11 @@ const MenuContent = forwardRef(function MenuContent({ render, className, style,
161
164
  if (isSubmenu) return;
162
165
  if (!state.open) return;
163
166
  syncMenuViewRoot(internalRef.current, activeSubMenuId !== null);
167
+ const contentElement = internalRef.current;
168
+ if (!contentElement) return;
169
+ return observeMenuViewContent(contentElement, () => {
170
+ syncMenuViewRoot(contentElement, activeSubMenuId !== null);
171
+ });
164
172
  }, [
165
173
  isSubmenu,
166
174
  state.open,
@@ -174,11 +182,14 @@ const MenuContent = forwardRef(function MenuContent({ render, className, style,
174
182
  });
175
183
  useLayoutEffect(() => {
176
184
  if (isSubmenu) return;
177
- if (!positionOptions) return;
178
185
  if (!state.open) {
179
186
  setManualStyle(null);
180
187
  return;
181
188
  }
189
+ if (!positionOptions) {
190
+ syncMenuViewRoot(internalRef.current, activeSubMenuIdRef.current !== null);
191
+ return;
192
+ }
182
193
  const rootPositionOptions = positionOptions;
183
194
  function measure() {
184
195
  const triggerElement = menu.triggerElement;
@@ -189,8 +200,16 @@ const MenuContent = forwardRef(function MenuContent({ render, className, style,
189
200
  container,
190
201
  root: contentElement.getRootNode()
191
202
  });
192
- const { positionAnchor: _, ...nextStyle } = getAnchorPositionStyle(anchorName, rootPositionOptions, triggerRect, supportsAnchorPositioning() ? void 0 : getPopupPositionRect(contentElement), getPositioningBoundaryRect(boundaryElement), resolveOffsets(contentElement));
193
- setManualStyle(nextStyle);
203
+ const anchorSupported = supportsAnchorPositioning();
204
+ const contentRect = anchorSupported ? void 0 : getPopupPositionRect(contentElement);
205
+ const boundaryRect = getPositioningBoundaryRect(boundaryElement);
206
+ const offsets = resolveOffsets(contentElement);
207
+ let nextStyle = getAnchorPositionStyle(anchorName, rootPositionOptions, triggerRect, contentRect, boundaryRect, offsets);
208
+ const availableWidth = nextStyle[PopoverCSSVars.availableWidth];
209
+ syncMenuViewRoot(contentElement, activeSubMenuIdRef.current !== null, availableWidth ? { availableWidth } : void 0);
210
+ if (!anchorSupported) nextStyle = getAnchorPositionStyle(anchorName, rootPositionOptions, triggerRect, getPopupPositionRect(contentElement), boundaryRect, offsets);
211
+ const { positionAnchor: _, ...rootStyle } = nextStyle;
212
+ setManualStyle(rootStyle);
194
213
  }
195
214
  measure();
196
215
  const triggerElement = menu.triggerElement;
@@ -238,7 +257,6 @@ const MenuContent = forwardRef(function MenuContent({ render, className, style,
238
257
  style
239
258
  }, {
240
259
  state,
241
- stateAttrMap,
242
260
  ref: menuViewComposedRef,
243
261
  props: [{
244
262
  ...getMenuViewTransitionAttrs(menuViewTransitionState),
@@ -1 +1 @@
1
- {"version":3,"file":"menu-content.js","names":[],"sources":["../../../../src/ui/menu/menu-content.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport {\n createMenuViewTransition,\n getAnchorPositionStyle,\n getMenuViewportAttrs,\n getMenuViewportElement,\n getMenuViewTransitionAttrs,\n getPopupPositionRect,\n getPositioningBoundaryRect,\n getRootPositionOptions,\n isEventWithinElement,\n isMenuNavigationKey,\n resolveOffsets,\n resolvePositioningBoundary,\n syncMenuViewRoot,\n syncMenuViewTransition,\n type UIFocusEvent,\n type UIKeyboardEvent,\n} from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport { supportsAnchorPositioning } from '@videojs/utils/dom';\nimport type { CSSProperties } from 'react';\nimport { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { useComposedRefs } from '../../utils/use-composed-refs';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext, useSubMenuContext } from './context';\n\nexport interface MenuContentProps extends UIComponentProps<'div', MenuState> {}\n\nconst POPOVER_RESET: CSSProperties = { position: 'fixed', inset: 'auto', margin: 0 };\nconst menuPreventedNativeEvents = new WeakSet<Event>();\n\nfunction toUIKeyboardEvent(event: React.KeyboardEvent<HTMLDivElement>): 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 toUIFocusEvent(event: React.FocusEvent<HTMLDivElement>): UIFocusEvent {\n return {\n get defaultPrevented() {\n return event.defaultPrevented;\n },\n relatedTarget: event.relatedTarget,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n };\n}\n\nfunction preventMenuKeyDefault(event: React.KeyboardEvent<HTMLDivElement>): void {\n const keyboardEvent = toUIKeyboardEvent(event);\n\n if (event.key !== 'Escape' && isMenuNavigationKey(keyboardEvent) && !event.defaultPrevented) {\n event.preventDefault();\n menuPreventedNativeEvents.add(event.nativeEvent);\n }\n}\n\nfunction wasDefaultPreventedByMenu(event: React.KeyboardEvent<HTMLDivElement>): boolean {\n return menuPreventedNativeEvents.has(event.nativeEvent);\n}\n\nfunction callKeyDownHandler(\n handler: React.KeyboardEventHandler<HTMLDivElement> | undefined,\n event: React.KeyboardEvent<HTMLDivElement>\n): boolean {\n const defaultPreventedBeforeHandler = event.defaultPrevented && !wasDefaultPreventedByMenu(event);\n\n if (!handler) return defaultPreventedBeforeHandler;\n\n let defaultPreventedByHandler = false;\n const preventDefault = event.preventDefault;\n\n // Capture-phase menu handling may have already prevented default; track\n // whether the consumer also calls preventDefault while their handler runs.\n event.preventDefault = () => {\n defaultPreventedByHandler = true;\n preventDefault.call(event);\n };\n\n try {\n handler(event);\n } finally {\n event.preventDefault = preventDefault;\n }\n\n return defaultPreventedBeforeHandler || defaultPreventedByHandler;\n}\n\n/** Container for menu items. Positioned relative to the trigger at root level; renders in-place as a submenu panel when nested. */\nexport const MenuContent = forwardRef<HTMLDivElement, MenuContentProps>(function MenuContent(\n { render, className, style, onKeyDown, onBlur, ...elementProps },\n forwardedRef\n) {\n const { core, menu, state, stateAttrMap, anchorName, contentId, boundary, container, activeSubMenuId } =\n useMenuContext();\n const subMenuCtx = useSubMenuContext();\n const isSubmenu = state.isSubmenu;\n\n const parentMenu = subMenuCtx?.parentMenu ?? null;\n const subMenuId = subMenuCtx?.subMenuId ?? null;\n\n const isActive =\n isSubmenu && parentMenu !== null && subMenuId !== null ? parentMenu.activeSubMenuId === subMenuId : false;\n\n const [menuViewTransition] = useState(() =>\n createMenuViewTransition({\n focusFirstItem() {\n menu.highlightFirstItem({ preventScroll: true });\n },\n restoreFocus(triggerId) {\n if (triggerId) {\n document.getElementById(triggerId)?.focus({ preventScroll: true });\n }\n },\n })\n );\n const menuViewTransitionState = useSnapshot(menuViewTransition.input);\n const menuViewElementRef = useRef<HTMLDivElement | null>(null);\n const parentContentElementRef = useRef<HTMLElement | null>(null);\n\n useLayoutEffect(() => {\n return () => menuViewTransition.destroy();\n }, [menuViewTransition]);\n\n useLayoutEffect(() => {\n if (!isSubmenu) return;\n\n menuViewTransition.sync({\n active: isActive,\n direction: parentMenu?.navigationDirection ?? 'forward',\n triggerId: parentMenu?.activeSubMenuTriggerId ?? null,\n });\n }, [isActive, isSubmenu, parentMenu, menuViewTransition]);\n\n const setMenuViewElement = useCallback(\n (element: HTMLDivElement | null) => {\n menuViewElementRef.current = element;\n menu.setContentElement(element);\n menuViewTransition.setElement(element);\n },\n [menu, menuViewTransition]\n );\n\n const handleSubMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n const defaultPreventedByUser = callKeyDownHandler(\n onKeyDown as React.KeyboardEventHandler<HTMLDivElement> | undefined,\n event\n );\n const keyboardEvent = toUIKeyboardEvent(event);\n const isNavigationKey = isMenuNavigationKey(keyboardEvent);\n menu.contentProps.onKeyDown(keyboardEvent);\n const isBackNavigationKey = event.key === 'ArrowLeft' || event.key === 'Escape';\n\n const ownsActiveSubmenu =\n parentMenu !== null &&\n subMenuId !== null &&\n parentMenu.menu.navigationInput.current.stack[parentMenu.menu.navigationInput.current.stack.length - 1]\n ?.menuId === subMenuId;\n\n if (isBackNavigationKey && ownsActiveSubmenu && !defaultPreventedByUser) {\n event.preventDefault();\n parentMenu.pop();\n }\n\n if (isNavigationKey && (!isBackNavigationKey || ownsActiveSubmenu)) {\n event.stopPropagation();\n }\n },\n [onKeyDown, parentMenu, subMenuId, menu]\n );\n\n const handleRootMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n (onKeyDown as React.KeyboardEventHandler<HTMLDivElement> | undefined)?.(event);\n const keyboardEvent = toUIKeyboardEvent(event);\n menu.contentProps.onKeyDown(keyboardEvent);\n if (event.key === 'Escape') return;\n if (isMenuNavigationKey(keyboardEvent)) {\n event.stopPropagation();\n }\n },\n [onKeyDown, menu]\n );\n\n const handleRootMenuBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n (onBlur as React.FocusEventHandler<HTMLDivElement> | undefined)?.(event);\n menu.contentProps.onFocusOut(toUIFocusEvent(event));\n },\n [onBlur, menu]\n );\n\n // ─── Root content state (always declared — Rules of Hooks) ───────────────\n const internalRef = useRef<HTMLDivElement>(null);\n\n const contentRef = useCallback(\n (element: HTMLDivElement | null) => {\n if (isSubmenu) return;\n menu.setContentElement(element);\n if (element && supportsAnchorPositioning()) {\n element.style.setProperty('position-anchor', `--${anchorName}`);\n }\n },\n [isSubmenu, menu, anchorName]\n );\n\n const rootComposedRef = useComposedRefs(forwardedRef, contentRef, internalRef);\n const menuViewComposedRef = useComposedRefs(forwardedRef, setMenuViewElement);\n\n const positionOptions = useMemo(() => getRootPositionOptions(state.side, state.align), [state.side, state.align]);\n\n const anchorStyle = useMemo(() => {\n if (isSubmenu || !positionOptions || !supportsAnchorPositioning()) return null;\n const { positionAnchor: _, ...rest } = getAnchorPositionStyle(anchorName, positionOptions);\n return rest as CSSProperties;\n }, [isSubmenu, anchorName, positionOptions]);\n\n const [manualStyle, setManualStyle] = useState<CSSProperties | null>(null);\n\n useLayoutEffect(() => {\n if (isSubmenu) return;\n if (!state.open) return;\n\n syncMenuViewRoot(internalRef.current, activeSubMenuId !== null);\n }, [isSubmenu, state.open, activeSubMenuId]);\n\n useLayoutEffect(() => {\n if (!isSubmenu) return;\n\n const parentContentElement = parentMenu?.menu.contentElement ?? parentContentElementRef.current;\n parentContentElementRef.current = parentContentElement;\n syncMenuViewTransition(parentContentElement, menuViewElementRef.current, menuViewTransitionState);\n });\n\n useLayoutEffect(() => {\n if (isSubmenu) return;\n if (!positionOptions) return;\n if (!state.open) {\n setManualStyle(null);\n return;\n }\n\n const rootPositionOptions = positionOptions;\n\n function measure(): void {\n const triggerElement = menu.triggerElement;\n const contentElement = internalRef.current;\n if (!triggerElement || !contentElement) return;\n\n const triggerRect = triggerElement.getBoundingClientRect();\n const root = contentElement.getRootNode() as Document | ShadowRoot;\n const boundaryElement = resolvePositioningBoundary(boundary, { container, root });\n const contentRect = supportsAnchorPositioning() ? undefined : getPopupPositionRect(contentElement);\n const boundaryRect = getPositioningBoundaryRect(boundaryElement);\n const offsets = resolveOffsets(contentElement);\n\n const { positionAnchor: _, ...nextStyle } = getAnchorPositionStyle(\n anchorName,\n rootPositionOptions,\n triggerRect,\n contentRect,\n boundaryRect,\n offsets\n );\n\n setManualStyle(nextStyle as CSSProperties);\n }\n\n measure();\n\n const triggerElement = menu.triggerElement;\n const contentElement = internalRef.current;\n const boundaryElement = contentElement\n ? resolvePositioningBoundary(boundary, {\n container,\n root: contentElement.getRootNode() as Document | ShadowRoot,\n })\n : null;\n\n let animationFrameId = 0;\n function reposition(event?: Event): void {\n if (event && isEventWithinElement(event, internalRef.current)) return;\n\n cancelAnimationFrame(animationFrameId);\n animationFrameId = requestAnimationFrame(measure);\n }\n\n reposition();\n\n const resizeObserver = typeof ResizeObserver === 'function' ? new ResizeObserver(() => reposition()) : null;\n\n if (triggerElement && resizeObserver) resizeObserver.observe(triggerElement);\n if (contentElement && resizeObserver) resizeObserver.observe(contentElement);\n if (boundaryElement && resizeObserver) resizeObserver.observe(boundaryElement);\n\n window.addEventListener('scroll', reposition, { capture: true, passive: true });\n window.addEventListener('resize', reposition);\n\n return () => {\n cancelAnimationFrame(animationFrameId);\n resizeObserver?.disconnect();\n window.removeEventListener('scroll', reposition, true);\n window.removeEventListener('resize', reposition);\n };\n }, [isSubmenu, state.open, anchorName, positionOptions, menu, boundary, container]);\n\n // ─── Render ───────────────────────────────────────────────────────────────\n\n if (isSubmenu) {\n if (menuViewTransitionState.phase === 'hidden') return null;\n\n const subMenuContent = renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: menuViewComposedRef,\n props: [\n {\n ...getMenuViewTransitionAttrs(menuViewTransitionState),\n role: 'menu' as const,\n tabIndex: -1,\n 'data-submenu': '',\n onKeyDownCapture: preventMenuKeyDefault,\n onKeyDown: handleSubMenuKeyDown,\n onBlur,\n },\n elementProps,\n ],\n }\n );\n\n const parentContentElement = parentMenu?.menu.contentElement ?? parentContentElementRef.current;\n\n const parentViewportElement = getMenuViewportElement(parentContentElement);\n\n return parentViewportElement ? createPortal(subMenuContent, parentViewportElement) : subMenuContent;\n }\n\n if (!state.open) return null;\n\n const positioningStyle = manualStyle ?? anchorStyle ?? POPOVER_RESET;\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: rootComposedRef,\n props: [\n {\n id: contentId,\n style: positioningStyle,\n ...core.getContentAttrs(state),\n ...getMenuViewportAttrs(),\n },\n { onKeyDownCapture: preventMenuKeyDefault, onKeyDown: handleRootMenuKeyDown, onBlur: handleRootMenuBlur },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace MenuContent {\n export type Props = MenuContentProps;\n export type State = MenuState;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"menu-content.js","names":[],"sources":["../../../../src/ui/menu/menu-content.tsx"],"sourcesContent":["'use client';\n\nimport { type MenuState, PopoverCSSVars } from '@videojs/core';\nimport {\n createMenuViewTransition,\n getAnchorPositionStyle,\n getMenuViewportAttrs,\n getMenuViewportElement,\n getMenuViewTransitionAttrs,\n getPopupPositionRect,\n getPositioningBoundaryRect,\n getRootPositionOptions,\n isEventWithinElement,\n isMenuNavigationKey,\n observeMenuViewContent,\n resolveOffsets,\n resolvePositioningBoundary,\n syncMenuViewRoot,\n syncMenuViewTransition,\n type UIFocusEvent,\n type UIKeyboardEvent,\n} from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport { supportsAnchorPositioning } from '@videojs/utils/dom';\nimport type { CSSProperties } from 'react';\nimport { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { useComposedRefs } from '../../utils/use-composed-refs';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext, useSubMenuContext } from './context';\n\nexport interface MenuContentProps extends UIComponentProps<'div', MenuState> {}\n\nconst POPOVER_RESET: CSSProperties = { position: 'fixed', inset: 'auto', margin: 0 };\nconst menuPreventedNativeEvents = new WeakSet<Event>();\n\nfunction toUIKeyboardEvent(event: React.KeyboardEvent<HTMLDivElement>): 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 toUIFocusEvent(event: React.FocusEvent<HTMLDivElement>): UIFocusEvent {\n return {\n get defaultPrevented() {\n return event.defaultPrevented;\n },\n relatedTarget: event.relatedTarget,\n preventDefault: () => event.preventDefault(),\n stopPropagation: () => event.stopPropagation(),\n };\n}\n\nfunction preventMenuKeyDefault(event: React.KeyboardEvent<HTMLDivElement>): void {\n const keyboardEvent = toUIKeyboardEvent(event);\n\n if (event.key !== 'Escape' && isMenuNavigationKey(keyboardEvent) && !event.defaultPrevented) {\n event.preventDefault();\n menuPreventedNativeEvents.add(event.nativeEvent);\n }\n}\n\nfunction wasDefaultPreventedByMenu(event: React.KeyboardEvent<HTMLDivElement>): boolean {\n return menuPreventedNativeEvents.has(event.nativeEvent);\n}\n\nfunction callKeyDownHandler(\n handler: React.KeyboardEventHandler<HTMLDivElement> | undefined,\n event: React.KeyboardEvent<HTMLDivElement>\n): boolean {\n const defaultPreventedBeforeHandler = event.defaultPrevented && !wasDefaultPreventedByMenu(event);\n\n if (!handler) return defaultPreventedBeforeHandler;\n\n let defaultPreventedByHandler = false;\n const preventDefault = event.preventDefault;\n\n // Capture-phase menu handling may have already prevented default; track\n // whether the consumer also calls preventDefault while their handler runs.\n event.preventDefault = () => {\n defaultPreventedByHandler = true;\n preventDefault.call(event);\n };\n\n try {\n handler(event);\n } finally {\n event.preventDefault = preventDefault;\n }\n\n return defaultPreventedBeforeHandler || defaultPreventedByHandler;\n}\n\n/** Container for menu items. Positioned relative to the trigger at root level; renders in-place as a submenu panel when nested. */\nexport const MenuContent = forwardRef<HTMLDivElement, MenuContentProps>(function MenuContent(\n { render, className, style, onKeyDown, onBlur, ...elementProps },\n forwardedRef\n) {\n const { core, menu, state, stateAttrMap, anchorName, contentId, boundary, container, activeSubMenuId } =\n useMenuContext();\n const subMenuCtx = useSubMenuContext();\n const isSubmenu = state.isSubmenu;\n\n const parentMenu = subMenuCtx?.parentMenu ?? null;\n const subMenuId = subMenuCtx?.subMenuId ?? null;\n\n const isActive =\n isSubmenu && parentMenu !== null && subMenuId !== null ? parentMenu.activeSubMenuId === subMenuId : false;\n\n const [menuViewTransition] = useState(() =>\n createMenuViewTransition({\n focusFirstItem() {\n menu.highlightFirstItem({ preventScroll: true });\n },\n restoreFocus(triggerId) {\n if (triggerId) {\n document.getElementById(triggerId)?.focus({ preventScroll: true });\n }\n },\n })\n );\n const menuViewTransitionState = useSnapshot(menuViewTransition.input);\n const menuViewElementRef = useRef<HTMLDivElement | null>(null);\n const parentContentElementRef = useRef<HTMLElement | null>(null);\n const activeSubMenuIdRef = useRef(activeSubMenuId);\n\n activeSubMenuIdRef.current = activeSubMenuId;\n\n useLayoutEffect(() => {\n return () => menuViewTransition.destroy();\n }, [menuViewTransition]);\n\n useLayoutEffect(() => {\n if (!isSubmenu) return;\n\n menuViewTransition.sync({\n active: isActive,\n direction: parentMenu?.navigationDirection ?? 'forward',\n triggerId: parentMenu?.activeSubMenuTriggerId ?? null,\n });\n }, [isActive, isSubmenu, parentMenu, menuViewTransition]);\n\n const setMenuViewElement = useCallback(\n (element: HTMLDivElement | null) => {\n menuViewElementRef.current = element;\n menu.setContentElement(element);\n menuViewTransition.setElement(element);\n },\n [menu, menuViewTransition]\n );\n\n const handleSubMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n const defaultPreventedByUser = callKeyDownHandler(\n onKeyDown as React.KeyboardEventHandler<HTMLDivElement> | undefined,\n event\n );\n const keyboardEvent = toUIKeyboardEvent(event);\n const isNavigationKey = isMenuNavigationKey(keyboardEvent);\n menu.contentProps.onKeyDown(keyboardEvent);\n const isBackNavigationKey = event.key === 'ArrowLeft' || event.key === 'Escape';\n\n const ownsActiveSubmenu =\n parentMenu !== null &&\n subMenuId !== null &&\n parentMenu.menu.navigationInput.current.stack[parentMenu.menu.navigationInput.current.stack.length - 1]\n ?.menuId === subMenuId;\n\n if (isBackNavigationKey && ownsActiveSubmenu && !defaultPreventedByUser) {\n event.preventDefault();\n parentMenu.pop();\n }\n\n if (isNavigationKey && (!isBackNavigationKey || ownsActiveSubmenu)) {\n event.stopPropagation();\n }\n },\n [onKeyDown, parentMenu, subMenuId, menu]\n );\n\n const handleRootMenuKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n (onKeyDown as React.KeyboardEventHandler<HTMLDivElement> | undefined)?.(event);\n const keyboardEvent = toUIKeyboardEvent(event);\n menu.contentProps.onKeyDown(keyboardEvent);\n if (event.key === 'Escape') return;\n if (isMenuNavigationKey(keyboardEvent)) {\n event.stopPropagation();\n }\n },\n [onKeyDown, menu]\n );\n\n const handleRootMenuBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n (onBlur as React.FocusEventHandler<HTMLDivElement> | undefined)?.(event);\n menu.contentProps.onFocusOut(toUIFocusEvent(event));\n },\n [onBlur, menu]\n );\n\n // ─── Root content state (always declared — Rules of Hooks) ───────────────\n const internalRef = useRef<HTMLDivElement>(null);\n\n const contentRef = useCallback(\n (element: HTMLDivElement | null) => {\n if (isSubmenu) return;\n menu.setContentElement(element);\n if (element && supportsAnchorPositioning()) {\n element.style.setProperty('position-anchor', `--${anchorName}`);\n }\n },\n [isSubmenu, menu, anchorName]\n );\n\n const rootComposedRef = useComposedRefs(forwardedRef, contentRef, internalRef);\n const menuViewComposedRef = useComposedRefs(forwardedRef, setMenuViewElement);\n\n const positionOptions = useMemo(() => getRootPositionOptions(state.side, state.align), [state.side, state.align]);\n\n const anchorStyle = useMemo(() => {\n if (isSubmenu || !positionOptions || !supportsAnchorPositioning()) return null;\n const { positionAnchor: _, ...rest } = getAnchorPositionStyle(anchorName, positionOptions);\n return rest as CSSProperties;\n }, [isSubmenu, anchorName, positionOptions]);\n\n const [manualStyle, setManualStyle] = useState<CSSProperties | null>(null);\n\n useLayoutEffect(() => {\n if (isSubmenu) return;\n if (!state.open) return;\n\n syncMenuViewRoot(internalRef.current, activeSubMenuId !== null);\n\n const contentElement = internalRef.current;\n if (!contentElement) return;\n\n return observeMenuViewContent(contentElement, () => {\n syncMenuViewRoot(contentElement, activeSubMenuId !== null);\n });\n }, [isSubmenu, state.open, activeSubMenuId]);\n\n useLayoutEffect(() => {\n if (!isSubmenu) return;\n\n const parentContentElement = parentMenu?.menu.contentElement ?? parentContentElementRef.current;\n parentContentElementRef.current = parentContentElement;\n syncMenuViewTransition(parentContentElement, menuViewElementRef.current, menuViewTransitionState);\n });\n\n useLayoutEffect(() => {\n if (isSubmenu) return;\n if (!state.open) {\n setManualStyle(null);\n return;\n }\n\n if (!positionOptions) {\n syncMenuViewRoot(internalRef.current, activeSubMenuIdRef.current !== null);\n return;\n }\n\n const rootPositionOptions = positionOptions;\n\n function measure(): void {\n const triggerElement = menu.triggerElement;\n const contentElement = internalRef.current;\n if (!triggerElement || !contentElement) return;\n\n const triggerRect = triggerElement.getBoundingClientRect();\n const root = contentElement.getRootNode() as Document | ShadowRoot;\n const boundaryElement = resolvePositioningBoundary(boundary, { container, root });\n const anchorSupported = supportsAnchorPositioning();\n const contentRect = anchorSupported ? undefined : getPopupPositionRect(contentElement);\n const boundaryRect = getPositioningBoundaryRect(boundaryElement);\n const offsets = resolveOffsets(contentElement);\n\n let nextStyle = getAnchorPositionStyle(\n anchorName,\n rootPositionOptions,\n triggerRect,\n contentRect,\n boundaryRect,\n offsets\n );\n\n const availableWidth = nextStyle[PopoverCSSVars.availableWidth];\n syncMenuViewRoot(\n contentElement,\n activeSubMenuIdRef.current !== null,\n availableWidth ? { availableWidth } : undefined\n );\n\n if (!anchorSupported) {\n nextStyle = getAnchorPositionStyle(\n anchorName,\n rootPositionOptions,\n triggerRect,\n getPopupPositionRect(contentElement),\n boundaryRect,\n offsets\n );\n }\n\n const { positionAnchor: _, ...rootStyle } = nextStyle;\n\n setManualStyle(rootStyle as CSSProperties);\n }\n\n measure();\n\n const triggerElement = menu.triggerElement;\n const contentElement = internalRef.current;\n const boundaryElement = contentElement\n ? resolvePositioningBoundary(boundary, {\n container,\n root: contentElement.getRootNode() as Document | ShadowRoot,\n })\n : null;\n\n let animationFrameId = 0;\n function reposition(event?: Event): void {\n if (event && isEventWithinElement(event, internalRef.current)) return;\n\n cancelAnimationFrame(animationFrameId);\n animationFrameId = requestAnimationFrame(measure);\n }\n\n reposition();\n\n const resizeObserver = typeof ResizeObserver === 'function' ? new ResizeObserver(() => reposition()) : null;\n\n if (triggerElement && resizeObserver) resizeObserver.observe(triggerElement);\n if (contentElement && resizeObserver) resizeObserver.observe(contentElement);\n if (boundaryElement && resizeObserver) resizeObserver.observe(boundaryElement);\n\n window.addEventListener('scroll', reposition, { capture: true, passive: true });\n window.addEventListener('resize', reposition);\n\n return () => {\n cancelAnimationFrame(animationFrameId);\n resizeObserver?.disconnect();\n window.removeEventListener('scroll', reposition, true);\n window.removeEventListener('resize', reposition);\n };\n }, [isSubmenu, state.open, anchorName, positionOptions, menu, boundary, container]);\n\n // ─── Render ───────────────────────────────────────────────────────────────\n\n if (isSubmenu) {\n if (menuViewTransitionState.phase === 'hidden') return null;\n\n const subMenuContent = renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: menuViewComposedRef,\n props: [\n {\n ...getMenuViewTransitionAttrs(menuViewTransitionState),\n role: 'menu' as const,\n tabIndex: -1,\n 'data-submenu': '',\n onKeyDownCapture: preventMenuKeyDefault,\n onKeyDown: handleSubMenuKeyDown,\n onBlur,\n },\n elementProps,\n ],\n }\n );\n\n const parentContentElement = parentMenu?.menu.contentElement ?? parentContentElementRef.current;\n\n const parentViewportElement = getMenuViewportElement(parentContentElement);\n\n return parentViewportElement ? createPortal(subMenuContent, parentViewportElement) : subMenuContent;\n }\n\n if (!state.open) return null;\n\n const positioningStyle = manualStyle ?? anchorStyle ?? POPOVER_RESET;\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: rootComposedRef,\n props: [\n {\n id: contentId,\n style: positioningStyle,\n ...core.getContentAttrs(state),\n ...getMenuViewportAttrs(),\n },\n { onKeyDownCapture: preventMenuKeyDefault, onKeyDown: handleRootMenuKeyDown, onBlur: handleRootMenuBlur },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace MenuContent {\n export type Props = MenuContentProps;\n export type State = MenuState;\n}\n"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as _$react from "react";
3
+ import { MenuState } from "@videojs/core";
4
+
5
+ //#region src/ui/menu/menu-group-label.d.ts
6
+ interface MenuGroupLabelProps extends UIComponentProps<'div', MenuState> {}
7
+ /** Non-interactive label for a group of items. Renders a `<div>`. */
8
+ declare const MenuGroupLabel: _$react.ForwardRefExoticComponent<Omit<MenuGroupLabelProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
9
+ declare namespace MenuGroupLabel {
10
+ type Props = MenuGroupLabelProps;
11
+ type State = MenuState;
12
+ }
13
+ //#endregion
14
+ export { MenuGroupLabel, MenuGroupLabelProps };
15
+ //# sourceMappingURL=menu-group-label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-group-label.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-group-label.tsx"],"mappings":";;;;;UAUiB,mBAAA,SAA4B,gBAAA,QAAwB,SAAA;;cAGxD,cAAA,EAAc,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,mBAAA,WAAA,OAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAwBV,cAAA;EAAA,KACH,KAAA,GAAQ,mBAAA;EAAA,KACR,KAAA,GAAQ,SAAA;AAAA"}
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import { renderElement } from "../../utils/use-render.js";
3
+ import { useMenuContext, useMenuGroupContext } from "./context.js";
4
+ import { useSafeId } from "../../utils/use-safe-id.js";
5
+ import { forwardRef, useLayoutEffect } from "react";
6
+ //#region src/ui/menu/menu-group-label.tsx
7
+ /** Non-interactive label for a group of items. Renders a `<div>`. */
8
+ const MenuGroupLabel = forwardRef(function MenuGroupLabel({ render, className, style, id: idProp, ...elementProps }, forwardedRef) {
9
+ const { state } = useMenuContext();
10
+ const group = useMenuGroupContext();
11
+ const generatedId = useSafeId("menu-group-label");
12
+ const id = idProp ?? generatedId;
13
+ useLayoutEffect(() => {
14
+ return group?.registerLabel(id);
15
+ }, [group, id]);
16
+ return renderElement("div", {
17
+ render,
18
+ className,
19
+ style
20
+ }, {
21
+ state,
22
+ ref: [forwardedRef],
23
+ props: [{ id }, elementProps]
24
+ });
25
+ });
26
+ //#endregion
27
+ export { MenuGroupLabel };
28
+
29
+ //# sourceMappingURL=menu-group-label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-group-label.js","names":[],"sources":["../../../../src/ui/menu/menu-group-label.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef, useLayoutEffect } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { useMenuContext, useMenuGroupContext } from './context';\n\nexport interface MenuGroupLabelProps extends UIComponentProps<'div', MenuState> {}\n\n/** Non-interactive label for a group of items. Renders a `<div>`. */\nexport const MenuGroupLabel = forwardRef<HTMLDivElement, MenuGroupLabelProps>(function MenuGroupLabel(\n { render, className, style, id: idProp, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n const group = useMenuGroupContext();\n const generatedId = useSafeId('menu-group-label');\n const id = idProp ?? generatedId;\n\n useLayoutEffect(() => {\n return group?.registerLabel(id);\n }, [group, id]);\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ id }, elementProps],\n }\n );\n});\n\nexport namespace MenuGroupLabel {\n export type Props = MenuGroupLabelProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;AAaA,MAAa,iBAAiB,WAAgD,SAAS,eACrF,EAAE,QAAQ,WAAW,OAAO,IAAI,QAAQ,GAAG,gBAC3C,cACA;CACA,MAAM,EAAE,UAAU,gBAAgB;CAClC,MAAM,QAAQ,qBAAqB;CACnC,MAAM,cAAc,UAAU,mBAAmB;CACjD,MAAM,KAAK,UAAU;AAErB,uBAAsB;AACpB,SAAO,OAAO,cAAc,GAAG;IAC9B,CAAC,OAAO,GAAG,CAAC;AAEf,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa;EAC9B,CACF;EACD"}
@@ -3,10 +3,7 @@ import * as _$react from "react";
3
3
  import { MenuState } from "@videojs/core";
4
4
 
5
5
  //#region src/ui/menu/menu-group.d.ts
6
- interface MenuGroupProps extends UIComponentProps<'div', MenuState> {
7
- /** Accessible label for the group. */
8
- label?: string;
9
- }
6
+ interface MenuGroupProps extends UIComponentProps<'div', MenuState> {}
10
7
  /** Groups related menu items. Renders a `<div>` with `role="group"`. */
11
8
  declare const MenuGroup: _$react.ForwardRefExoticComponent<Omit<MenuGroupProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
12
9
  declare namespace MenuGroup {
@@ -1 +1 @@
1
- {"version":3,"file":"menu-group.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-group.tsx"],"mappings":";;;;;UASiB,cAAA,SAAuB,gBAAA,QAAwB,SAAA;;EAE9D,KAAA;AAAA;;cAIW,SAAA,EAAS,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,cAAA,WAAA,OAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAkBL,SAAA;EAAA,KACH,KAAA,GAAQ,cAAA;EAAA,KACR,KAAA,GAAQ,SAAA;AAAA"}
1
+ {"version":3,"file":"menu-group.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-group.tsx"],"mappings":";;;;;UAUiB,cAAA,SAAuB,gBAAA,QAAwB,SAAA;;cAGnD,SAAA,EAAS,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,cAAA,WAAA,OAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAuBL,SAAA;EAAA,KACH,KAAA,GAAQ,cAAA;EAAA,KACR,KAAA,GAAQ,SAAA;AAAA"}
@@ -1,24 +1,22 @@
1
1
  "use client";
2
2
  import { renderElement } from "../../utils/use-render.js";
3
3
  import { useMenuContext } from "./context.js";
4
+ import { MenuGroupProvider, getMenuGroupProps } from "./use-menu-group.js";
4
5
  import { forwardRef } from "react";
6
+ import { jsx } from "react/jsx-runtime";
5
7
  //#region src/ui/menu/menu-group.tsx
6
8
  /** Groups related menu items. Renders a `<div>` with `role="group"`. */
7
- const MenuGroup = forwardRef(function MenuGroup({ render, className, style, label, ...elementProps }, forwardedRef) {
8
- const { state, stateAttrMap } = useMenuContext();
9
- return renderElement("div", {
9
+ const MenuGroup = forwardRef(function MenuGroup({ render, className, style, ...elementProps }, forwardedRef) {
10
+ const { state } = useMenuContext();
11
+ return /* @__PURE__ */ jsx(MenuGroupProvider, { children: (labelId) => renderElement("div", {
10
12
  render,
11
13
  className,
12
14
  style
13
15
  }, {
14
16
  state,
15
- stateAttrMap,
16
17
  ref: [forwardedRef],
17
- props: [{
18
- role: "group",
19
- "aria-label": label
20
- }, elementProps]
21
- });
18
+ props: [getMenuGroupProps(labelId, elementProps), elementProps]
19
+ }) });
22
20
  });
23
21
  //#endregion
24
22
  export { MenuGroup };
@@ -1 +1 @@
1
- {"version":3,"file":"menu-group.js","names":[],"sources":["../../../../src/ui/menu/menu-group.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuGroupProps extends UIComponentProps<'div', MenuState> {\n /** Accessible label for the group. */\n label?: string;\n}\n\n/** Groups related menu items. Renders a `<div>` with `role=\"group\"`. */\nexport const MenuGroup = forwardRef<HTMLDivElement, MenuGroupProps>(function MenuGroup(\n { render, className, style, label, ...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: 'group' as const, 'aria-label': label }, elementProps],\n }\n );\n});\n\nexport namespace MenuGroup {\n export type Props = MenuGroupProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;AAeA,MAAa,YAAY,WAA2C,SAAS,UAC3E,EAAE,QAAQ,WAAW,OAAO,OAAO,GAAG,gBACtC,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;GAAE,MAAM;GAAkB,cAAc;GAAO,EAAE,aAAa;EACvE,CACF;EACD"}
1
+ {"version":3,"file":"menu-group.js","names":[],"sources":["../../../../src/ui/menu/menu-group.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\nimport { getMenuGroupProps, MenuGroupProvider } from './use-menu-group';\n\nexport interface MenuGroupProps extends UIComponentProps<'div', MenuState> {}\n\n/** Groups related menu items. Renders a `<div>` with `role=\"group\"`. */\nexport const MenuGroup = forwardRef<HTMLDivElement, MenuGroupProps>(function MenuGroup(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n\n return (\n <MenuGroupProvider>\n {(labelId) =>\n renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [getMenuGroupProps(labelId, elementProps), elementProps],\n }\n )\n }\n </MenuGroupProvider>\n );\n});\n\nexport namespace MenuGroup {\n export type Props = MenuGroupProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;;;AAaA,MAAa,YAAY,WAA2C,SAAS,UAC3E,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,UAAU,gBAAgB;AAElC,QACE,oBAAC,mBAAD,EAAA,WACI,YACA,cACE,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,kBAAkB,SAAS,aAAa,EAAE,aAAa;EAChE,CACF,EAEe,CAAA;EAEtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-item-indicator.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-item-indicator.tsx"],"mappings":";;;;;UASiB,sBAAA,SAA+B,gBAAA,SAAyB,SAAA;;EAEvE,OAAA;EAFe;EAIf,UAAA;AAAA;;cAIW,iBAAA,EAAiB,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,sBAAA,WAAA,OAAA,CAAA,aAAA,CAAA,eAAA;AAAA,kBAoBb,iBAAA;EAAA,KACH,KAAA,GAAQ,sBAAA;EAAA,KACR,KAAA,GAAQ,SAAA;AAAA"}
1
+ {"version":3,"file":"menu-item-indicator.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-item-indicator.tsx"],"mappings":";;;;;UASiB,sBAAA,SAA+B,gBAAA,SAAyB,SAAA;;EAEvE,OAAA;EAFe;EAIf,UAAA;AAAA;;cAIW,iBAAA,EAAiB,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,sBAAA,WAAA,OAAA,CAAA,aAAA,CAAA,eAAA;AAAA,kBAmBb,iBAAA;EAAA,KACH,KAAA,GAAQ,sBAAA;EAAA,KACR,KAAA,GAAQ,SAAA;AAAA"}
@@ -5,7 +5,7 @@ import { forwardRef } from "react";
5
5
  //#region src/ui/menu/menu-item-indicator.tsx
6
6
  /** Visual indicator for a checked state. Only renders when `checked` is `true` (or `forceMount` is set). */
7
7
  const MenuItemIndicator = forwardRef(function MenuItemIndicator({ render, className, style, checked, forceMount = false, ...elementProps }, forwardedRef) {
8
- const { state, stateAttrMap } = useMenuContext();
8
+ const { state } = useMenuContext();
9
9
  if (!checked && !forceMount) return null;
10
10
  return renderElement("span", {
11
11
  render,
@@ -13,7 +13,6 @@ const MenuItemIndicator = forwardRef(function MenuItemIndicator({ render, classN
13
13
  style
14
14
  }, {
15
15
  state,
16
- stateAttrMap,
17
16
  ref: [forwardedRef],
18
17
  props: [{ "aria-hidden": true }, elementProps]
19
18
  });
@@ -1 +1 @@
1
- {"version":3,"file":"menu-item-indicator.js","names":[],"sources":["../../../../src/ui/menu/menu-item-indicator.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuItemIndicatorProps extends UIComponentProps<'span', MenuState> {\n /** Whether the indicator is currently shown. Typically bound to the parent item's checked state. */\n checked?: boolean;\n /** When `true`, renders even when unchecked (useful for animating out). Defaults to `false`. */\n forceMount?: boolean;\n}\n\n/** Visual indicator for a checked state. Only renders when `checked` is `true` (or `forceMount` is set). */\nexport const MenuItemIndicator = forwardRef<HTMLSpanElement, MenuItemIndicatorProps>(function MenuItemIndicator(\n { render, className, style, checked, forceMount = false, ...elementProps },\n forwardedRef\n) {\n const { state, 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"}
1
+ {"version":3,"file":"menu-item-indicator.js","names":[],"sources":["../../../../src/ui/menu/menu-item-indicator.tsx"],"sourcesContent":["'use client';\n\nimport type { MenuState } from '@videojs/core';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useMenuContext } from './context';\n\nexport interface MenuItemIndicatorProps extends UIComponentProps<'span', MenuState> {\n /** Whether the indicator is currently shown. Typically bound to the parent item's checked state. */\n checked?: boolean;\n /** When `true`, renders even when unchecked (useful for animating out). Defaults to `false`. */\n forceMount?: boolean;\n}\n\n/** Visual indicator for a checked state. Only renders when `checked` is `true` (or `forceMount` is set). */\nexport const MenuItemIndicator = forwardRef<HTMLSpanElement, MenuItemIndicatorProps>(function MenuItemIndicator(\n { render, className, style, checked, forceMount = false, ...elementProps },\n forwardedRef\n) {\n const { state } = useMenuContext();\n\n if (!checked && !forceMount) return null;\n\n return renderElement(\n 'span',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ 'aria-hidden': true }, elementProps],\n }\n );\n});\n\nexport namespace MenuItemIndicator {\n export type Props = MenuItemIndicatorProps;\n export type State = MenuState;\n}\n"],"mappings":";;;;;;AAiBA,MAAa,oBAAoB,WAAoD,SAAS,kBAC5F,EAAE,QAAQ,WAAW,OAAO,SAAS,aAAa,OAAO,GAAG,gBAC5D,cACA;CACA,MAAM,EAAE,UAAU,gBAAgB;AAElC,KAAI,CAAC,WAAW,CAAC,WAAY,QAAO;AAEpC,QAAO,cACL,QACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,EAAE,eAAe,MAAM,EAAE,aAAa;EAC/C,CACF;EACD"}
@@ -0,0 +1,72 @@
1
+ "use client";
2
+ import { MenuItemSettingContextProvider } from "./context.js";
3
+ import { useAudioTrackOptions } from "../audio-track/use-audio-track-options.js";
4
+ import { useCaptionsOptions } from "../captions-radio-group/use-captions-options.js";
5
+ import { usePlaybackRateOptions } from "../playback-rate/use-playback-rate-options.js";
6
+ import { useQualityOptions } from "../quality/use-quality-options.js";
7
+ import { jsx } from "react/jsx-runtime";
8
+ import { CAPTIONS_OFF_VALUE } from "@videojs/core";
9
+ //#region src/ui/menu/menu-item-setting-provider.tsx
10
+ function PlaybackRateMenuItemSettingProvider({ children }) {
11
+ const playbackRate = usePlaybackRateOptions();
12
+ if (!playbackRate) return children;
13
+ const { state, options, value } = playbackRate;
14
+ return /* @__PURE__ */ jsx(MenuItemSettingContextProvider, {
15
+ value: {
16
+ type: "playback-rate",
17
+ label: options.find((option) => option.value === value)?.label ?? "",
18
+ availability: state.availability
19
+ },
20
+ children
21
+ });
22
+ }
23
+ function CaptionsMenuItemSettingProvider({ children }) {
24
+ const captions = useCaptionsOptions();
25
+ if (!captions) return children;
26
+ const { state, options, value } = captions;
27
+ return /* @__PURE__ */ jsx(MenuItemSettingContextProvider, {
28
+ value: {
29
+ type: "captions",
30
+ label: value === CAPTIONS_OFF_VALUE ? "Off" : options.find((option) => option.value === value)?.label ?? "Off",
31
+ availability: state.availability
32
+ },
33
+ children
34
+ });
35
+ }
36
+ function QualityMenuItemSettingProvider({ children }) {
37
+ const quality = useQualityOptions();
38
+ if (!quality) return children;
39
+ const { state, options, value } = quality;
40
+ return /* @__PURE__ */ jsx(MenuItemSettingContextProvider, {
41
+ value: {
42
+ type: "quality",
43
+ label: options.find((option) => option.value === value)?.label ?? "Auto",
44
+ availability: state.availability
45
+ },
46
+ children
47
+ });
48
+ }
49
+ function AudioTrackMenuItemSettingProvider({ children }) {
50
+ const audioTrack = useAudioTrackOptions();
51
+ if (!audioTrack) return children;
52
+ const { state, options, value } = audioTrack;
53
+ return /* @__PURE__ */ jsx(MenuItemSettingContextProvider, {
54
+ value: {
55
+ type: "audio-track",
56
+ label: options.find((option) => option.value === value)?.label ?? "",
57
+ availability: state.availability
58
+ },
59
+ children
60
+ });
61
+ }
62
+ function MenuItemSettingProvider({ type, children }) {
63
+ if (type === "playback-rate") return /* @__PURE__ */ jsx(PlaybackRateMenuItemSettingProvider, { children });
64
+ if (type === "quality") return /* @__PURE__ */ jsx(QualityMenuItemSettingProvider, { children });
65
+ if (type === "audio-track") return /* @__PURE__ */ jsx(AudioTrackMenuItemSettingProvider, { children });
66
+ if (type === "captions") return /* @__PURE__ */ jsx(CaptionsMenuItemSettingProvider, { children });
67
+ return children;
68
+ }
69
+ //#endregion
70
+ export { MenuItemSettingProvider };
71
+
72
+ //# sourceMappingURL=menu-item-setting-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-item-setting-provider.js","names":[],"sources":["../../../../src/ui/menu/menu-item-setting-provider.tsx"],"sourcesContent":["'use client';\n\nimport { CAPTIONS_OFF_VALUE } from '@videojs/core';\nimport type { ReactNode } from 'react';\n\nimport { useAudioTrackOptions } from '../audio-track/use-audio-track-options';\nimport { useCaptionsOptions } from '../captions-radio-group/use-captions-options';\nimport { usePlaybackRateOptions } from '../playback-rate/use-playback-rate-options';\nimport { useQualityOptions } from '../quality/use-quality-options';\nimport { MenuItemSettingContextProvider } from './context';\nimport type { MenuItemSettingType } from './menu-item-type';\n\nexport interface MenuItemSettingProviderProps {\n type: MenuItemSettingType;\n children: ReactNode;\n}\n\nfunction PlaybackRateMenuItemSettingProvider({ children }: { children: ReactNode }): ReactNode {\n const playbackRate = usePlaybackRateOptions();\n if (!playbackRate) return children;\n\n const { state, options, value } = playbackRate;\n const label = options.find((option) => option.value === value)?.label ?? '';\n\n return (\n <MenuItemSettingContextProvider value={{ type: 'playback-rate', label, availability: state.availability }}>\n {children}\n </MenuItemSettingContextProvider>\n );\n}\n\nfunction CaptionsMenuItemSettingProvider({ children }: { children: ReactNode }): ReactNode {\n const captions = useCaptionsOptions();\n if (!captions) return children;\n\n const { state, options, value } = captions;\n const label =\n value === CAPTIONS_OFF_VALUE ? 'Off' : (options.find((option) => option.value === value)?.label ?? 'Off');\n\n return (\n <MenuItemSettingContextProvider value={{ type: 'captions', label, availability: state.availability }}>\n {children}\n </MenuItemSettingContextProvider>\n );\n}\n\nfunction QualityMenuItemSettingProvider({ children }: { children: ReactNode }): ReactNode {\n const quality = useQualityOptions();\n if (!quality) return children;\n\n const { state, options, value } = quality;\n const label = options.find((option) => option.value === value)?.label ?? 'Auto';\n\n return (\n <MenuItemSettingContextProvider value={{ type: 'quality', label, availability: state.availability }}>\n {children}\n </MenuItemSettingContextProvider>\n );\n}\n\nfunction AudioTrackMenuItemSettingProvider({ children }: { children: ReactNode }): ReactNode {\n const audioTrack = useAudioTrackOptions();\n if (!audioTrack) return children;\n\n const { state, options, value } = audioTrack;\n const label = options.find((option) => option.value === value)?.label ?? '';\n\n return (\n <MenuItemSettingContextProvider value={{ type: 'audio-track', label, availability: state.availability }}>\n {children}\n </MenuItemSettingContextProvider>\n );\n}\n\nexport function MenuItemSettingProvider({ type, children }: MenuItemSettingProviderProps): ReactNode {\n if (type === 'playback-rate')\n return <PlaybackRateMenuItemSettingProvider>{children}</PlaybackRateMenuItemSettingProvider>;\n if (type === 'quality') return <QualityMenuItemSettingProvider>{children}</QualityMenuItemSettingProvider>;\n if (type === 'audio-track') return <AudioTrackMenuItemSettingProvider>{children}</AudioTrackMenuItemSettingProvider>;\n if (type === 'captions') return <CaptionsMenuItemSettingProvider>{children}</CaptionsMenuItemSettingProvider>;\n return children;\n}\n"],"mappings":";;;;;;;;;AAiBA,SAAS,oCAAoC,EAAE,YAAgD;CAC7F,MAAM,eAAe,wBAAwB;AAC7C,KAAI,CAAC,aAAc,QAAO;CAE1B,MAAM,EAAE,OAAO,SAAS,UAAU;AAGlC,QACE,oBAAC,gCAAD;EAAgC,OAAO;GAAE,MAAM;GAAiB,OAHpD,QAAQ,MAAM,WAAW,OAAO,UAAU,MAAM,EAAE,SAAS;GAGA,cAAc,MAAM;GAAc;EACtG;EAC8B,CAAA;;AAIrC,SAAS,gCAAgC,EAAE,YAAgD;CACzF,MAAM,WAAW,oBAAoB;AACrC,KAAI,CAAC,SAAU,QAAO;CAEtB,MAAM,EAAE,OAAO,SAAS,UAAU;AAIlC,QACE,oBAAC,gCAAD;EAAgC,OAAO;GAAE,MAAM;GAAY,OAH3D,UAAU,qBAAqB,QAAS,QAAQ,MAAM,WAAW,OAAO,UAAU,MAAM,EAAE,SAAS;GAGjC,cAAc,MAAM;GAAc;EACjG;EAC8B,CAAA;;AAIrC,SAAS,+BAA+B,EAAE,YAAgD;CACxF,MAAM,UAAU,mBAAmB;AACnC,KAAI,CAAC,QAAS,QAAO;CAErB,MAAM,EAAE,OAAO,SAAS,UAAU;AAGlC,QACE,oBAAC,gCAAD;EAAgC,OAAO;GAAE,MAAM;GAAW,OAH9C,QAAQ,MAAM,WAAW,OAAO,UAAU,MAAM,EAAE,SAAS;GAGN,cAAc,MAAM;GAAc;EAChG;EAC8B,CAAA;;AAIrC,SAAS,kCAAkC,EAAE,YAAgD;CAC3F,MAAM,aAAa,sBAAsB;AACzC,KAAI,CAAC,WAAY,QAAO;CAExB,MAAM,EAAE,OAAO,SAAS,UAAU;AAGlC,QACE,oBAAC,gCAAD;EAAgC,OAAO;GAAE,MAAM;GAAe,OAHlD,QAAQ,MAAM,WAAW,OAAO,UAAU,MAAM,EAAE,SAAS;GAGF,cAAc,MAAM;GAAc;EACpG;EAC8B,CAAA;;AAIrC,SAAgB,wBAAwB,EAAE,MAAM,YAAqD;AACnG,KAAI,SAAS,gBACX,QAAO,oBAAC,qCAAD,EAAsC,UAA+C,CAAA;AAC9F,KAAI,SAAS,UAAW,QAAO,oBAAC,gCAAD,EAAiC,UAA0C,CAAA;AAC1G,KAAI,SAAS,cAAe,QAAO,oBAAC,mCAAD,EAAoC,UAA6C,CAAA;AACpH,KAAI,SAAS,WAAY,QAAO,oBAAC,iCAAD,EAAkC,UAA2C,CAAA;AAC7G,QAAO"}
@@ -0,0 +1,5 @@
1
+ //#region src/ui/menu/menu-item-type.d.ts
2
+ type MenuItemSettingType = 'playback-rate' | 'quality' | 'audio-track' | 'captions';
3
+ //#endregion
4
+ export { MenuItemSettingType };
5
+ //# sourceMappingURL=menu-item-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-item-type.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-item-type.ts"],"mappings":";KAAY,mBAAA"}
@@ -0,0 +1,14 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as _$react from "react";
3
+ import { MenuState } from "@videojs/core";
4
+
5
+ //#region src/ui/menu/menu-item-value.d.ts
6
+ interface MenuItemValueProps extends UIComponentProps<'span', MenuState> {}
7
+ /** Displays the current value for a settings menu item from `Menu.Item` or `Menu.Trigger` context. */
8
+ declare const MenuItemValue: _$react.ForwardRefExoticComponent<Omit<MenuItemValueProps, "ref"> & _$react.RefAttributes<HTMLSpanElement>>;
9
+ declare namespace MenuItemValue {
10
+ type Props = MenuItemValueProps;
11
+ }
12
+ //#endregion
13
+ export { MenuItemValue, MenuItemValueProps };
14
+ //# sourceMappingURL=menu-item-value.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-item-value.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-item-value.tsx"],"mappings":";;;;;UASiB,kBAAA,SAA2B,gBAAA,SAAyB,SAAA;;cAGxD,aAAA,EAAa,OAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,kBAAA,WAAA,OAAA,CAAA,aAAA,CAAA,eAAA;AAAA,kBAoBT,aAAA;EAAA,KACH,KAAA,GAAQ,kBAAA;AAAA"}
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { renderElement } from "../../utils/use-render.js";
3
+ import { useMenuContext, useOptionalMenuItemSettingContext } from "./context.js";
4
+ import { forwardRef } from "react";
5
+ //#region src/ui/menu/menu-item-value.tsx
6
+ /** Displays the current value for a settings menu item from `Menu.Item` or `Menu.Trigger` context. */
7
+ const MenuItemValue = forwardRef(function MenuItemValue({ render, className, style, ...elementProps }, forwardedRef) {
8
+ const { state, stateAttrMap } = useMenuContext();
9
+ const setting = useOptionalMenuItemSettingContext();
10
+ if (!setting) return null;
11
+ return renderElement("span", {
12
+ render,
13
+ className,
14
+ style
15
+ }, {
16
+ state,
17
+ stateAttrMap,
18
+ ref: forwardedRef,
19
+ props: [{
20
+ "aria-live": "off",
21
+ children: setting.label
22
+ }, elementProps]
23
+ });
24
+ });
25
+ //#endregion
26
+ export { MenuItemValue };
27
+
28
+ //# sourceMappingURL=menu-item-value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-item-value.js","names":[],"sources":["../../../../src/ui/menu/menu-item-value.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, useOptionalMenuItemSettingContext } from './context';\n\nexport interface MenuItemValueProps extends UIComponentProps<'span', MenuState> {}\n\n/** Displays the current value for a settings menu item from `Menu.Item` or `Menu.Trigger` context. */\nexport const MenuItemValue = forwardRef<HTMLSpanElement, MenuItemValueProps>(function MenuItemValue(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { state, stateAttrMap } = useMenuContext();\n const setting = useOptionalMenuItemSettingContext();\n if (!setting) return null;\n\n return renderElement(\n 'span',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: forwardedRef,\n props: [{ 'aria-live': 'off' as const, children: setting.label }, elementProps],\n }\n );\n});\n\nexport namespace MenuItemValue {\n export type Props = MenuItemValueProps;\n}\n"],"mappings":";;;;;;AAYA,MAAa,gBAAgB,WAAgD,SAAS,cACpF,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,OAAO,iBAAiB,gBAAgB;CAChD,MAAM,UAAU,mCAAmC;AACnD,KAAI,CAAC,QAAS,QAAO;AAErB,QAAO,cACL,QACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK;EACL,OAAO,CAAC;GAAE,aAAa;GAAgB,UAAU,QAAQ;GAAO,EAAE,aAAa;EAChF,CACF;EACD"}
@@ -1,4 +1,5 @@
1
1
  import { UIComponentProps } from "../../utils/types.js";
2
+ import { MenuItemSettingType } from "./menu-item-type.js";
2
3
  import * as _$react from "react";
3
4
  import { MenuState } from "@videojs/core";
4
5
 
@@ -8,6 +9,8 @@ interface MenuItemProps extends UIComponentProps<'div', MenuState> {
8
9
  onSelect?: () => void;
9
10
  /** Whether the item is disabled. */
10
11
  disabled?: boolean;
12
+ /** Setting kind for submenu triggers (`playback-rate`, `quality`, `audio-track`, or `captions`). */
13
+ type?: MenuItemSettingType | undefined;
11
14
  }
12
15
  /** A single action in the menu. Renders a `<div>` with `role="menuitem"`. */
13
16
  declare const MenuItem: _$react.ForwardRefExoticComponent<Omit<MenuItemProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;