@videojs/html 10.0.0-beta.28 → 10.0.0-beta.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/cdn/{adapter-XTen-YVQ.js → adapter-CEnNWvii.js} +17 -4
  2. package/cdn/adapter-CEnNWvii.js.map +1 -0
  3. package/cdn/adapter-DaKW8NzI.js +2 -0
  4. package/cdn/adapter-DaKW8NzI.js.map +1 -0
  5. package/cdn/audio-headless.dev.js +1 -1
  6. package/cdn/audio-headless.js +1 -1
  7. package/cdn/audio-minimal-ui.dev.js +2 -2
  8. package/cdn/audio-minimal-ui.js +1 -1
  9. package/cdn/audio-minimal.dev.js +5 -5
  10. package/cdn/audio-minimal.dev.js.map +1 -1
  11. package/cdn/audio-minimal.js +1 -1
  12. package/cdn/audio-minimal.js.map +1 -1
  13. package/cdn/audio-ui.dev.js +2 -2
  14. package/cdn/audio-ui.js +1 -1
  15. package/cdn/audio.dev.js +5 -5
  16. package/cdn/audio.dev.js.map +1 -1
  17. package/cdn/audio.js +1 -1
  18. package/cdn/audio.js.map +1 -1
  19. package/cdn/background.dev.js +1 -1
  20. package/cdn/background.js +1 -1
  21. package/cdn/background.js.map +1 -1
  22. package/cdn/compounds-C4YYLyL2.js +8 -0
  23. package/cdn/compounds-C4YYLyL2.js.map +1 -0
  24. package/cdn/{compounds-nk9RJtBK.js → compounds-C73u1MeO.js} +63 -59
  25. package/cdn/compounds-C73u1MeO.js.map +1 -0
  26. package/cdn/create-player-BU8LDJDL.js +2 -0
  27. package/cdn/create-player-BU8LDJDL.js.map +1 -0
  28. package/cdn/{create-player-DK9WOywd.js → create-player-Db1CIvlK.js} +58 -46
  29. package/cdn/create-player-Db1CIvlK.js.map +1 -0
  30. package/cdn/{default-BqQDVloS.js → default-A3aM0skz.js} +2 -2
  31. package/cdn/default-A3aM0skz.js.map +1 -0
  32. package/cdn/default-BDyhiTCm.js +2 -0
  33. package/cdn/default-BDyhiTCm.js.map +1 -0
  34. package/cdn/{default-I2LasfxC.js → default-C1_k1NeB.js} +2 -2
  35. package/cdn/default-C1_k1NeB.js.map +1 -0
  36. package/cdn/default-DHrMd4ie.js +2 -0
  37. package/cdn/default-DHrMd4ie.js.map +1 -0
  38. package/cdn/error-surface-BID4D3DW.js +59 -0
  39. package/cdn/error-surface-BID4D3DW.js.map +1 -0
  40. package/cdn/{select-tracks-nRPBa1NC.js → error-surface-D0bo71gD.js} +442 -48
  41. package/cdn/error-surface-D0bo71gD.js.map +1 -0
  42. package/cdn/gesture-element-CeRy1IVs.js +2 -0
  43. package/cdn/gesture-element-CeRy1IVs.js.map +1 -0
  44. package/cdn/{gesture-element-6Ld1YwIL.js → gesture-element-DB67OYCE.js} +3 -3
  45. package/cdn/gesture-element-DB67OYCE.js.map +1 -0
  46. package/cdn/{hls-js-C4P_b2tT.js → hls-js-CiE4wOrG.js} +2 -2
  47. package/cdn/{hls-js-C4P_b2tT.js.map → hls-js-CiE4wOrG.js.map} +1 -1
  48. package/cdn/{hls-js-CATW7NBm.js → hls-js-DBKRCbQm.js} +2 -2
  49. package/cdn/{hls-js-CATW7NBm.js.map → hls-js-DBKRCbQm.js.map} +1 -1
  50. package/cdn/{hls-js-BEuVm0u9.js → hls-js-DX2NGCAr.js} +2 -2
  51. package/cdn/{hls-js-BEuVm0u9.js.map → hls-js-DX2NGCAr.js.map} +1 -1
  52. package/cdn/{hls-js-WCNy9MVh.js → hls-js-JeH8yvsP.js} +2 -2
  53. package/cdn/{hls-js-WCNy9MVh.js.map → hls-js-JeH8yvsP.js.map} +1 -1
  54. package/cdn/i18n-CpBDXf6M.js +2 -0
  55. package/cdn/{i18n-Dc7WM2xd.js.map → i18n-CpBDXf6M.js.map} +1 -1
  56. package/cdn/{i18n-Ch4t6EjV.js → i18n-D0nhPa0m.js} +2 -2
  57. package/cdn/{i18n-Ch4t6EjV.js.map → i18n-D0nhPa0m.js.map} +1 -1
  58. package/cdn/{live-button-element-DaHgnYdw.js → live-button-element-Co8z2LkI.js} +2 -2
  59. package/cdn/{live-button-element-DaHgnYdw.js.map → live-button-element-Co8z2LkI.js.map} +1 -1
  60. package/cdn/{live-button-element-Bae44kBN.js → live-button-element-zE-8uoR2.js} +3 -3
  61. package/cdn/{live-button-element-Bae44kBN.js.map → live-button-element-zE-8uoR2.js.map} +1 -1
  62. package/cdn/live-video-minimal.dev.js +11 -9
  63. package/cdn/live-video-minimal.dev.js.map +1 -1
  64. package/cdn/live-video-minimal.js +1 -1
  65. package/cdn/live-video-minimal.js.map +1 -1
  66. package/cdn/live-video.dev.js +12 -10
  67. package/cdn/live-video.dev.js.map +1 -1
  68. package/cdn/live-video.js +1 -1
  69. package/cdn/live-video.js.map +1 -1
  70. package/cdn/media/hls-audio.dev.js +1 -1
  71. package/cdn/media/hls-audio.js +1 -1
  72. package/cdn/media/hls-background-video.dev.js +1 -1
  73. package/cdn/media/hls-background-video.js +1 -1
  74. package/cdn/media/hls-video.dev.js +1 -1
  75. package/cdn/media/hls-video.js +1 -1
  76. package/cdn/media/mux-audio/hls-js.dev.js +1 -1
  77. package/cdn/media/mux-audio/hls-js.js +1 -1
  78. package/cdn/media/mux-audio/spf.dev.js +2 -2
  79. package/cdn/media/mux-audio/spf.js +1 -1
  80. package/cdn/media/mux-audio.dev.js +1 -1
  81. package/cdn/media/mux-audio.js +1 -1
  82. package/cdn/media/mux-background-video.dev.js +1 -1
  83. package/cdn/media/mux-background-video.js +1 -1
  84. package/cdn/media/mux-data.dev.js +1 -1
  85. package/cdn/media/mux-data.dev.js.map +1 -1
  86. package/cdn/media/mux-data.js +1 -1
  87. package/cdn/media/mux-data.js.map +1 -1
  88. package/cdn/media/mux-video/hls-js.dev.js +1 -1
  89. package/cdn/media/mux-video/hls-js.js +1 -1
  90. package/cdn/media/mux-video/spf.dev.js +2 -2
  91. package/cdn/media/mux-video/spf.js +1 -1
  92. package/cdn/media/mux-video.dev.js +1 -1
  93. package/cdn/media/mux-video.js +1 -1
  94. package/cdn/media/vimeo-video.dev.js +27 -5
  95. package/cdn/media/vimeo-video.dev.js.map +1 -1
  96. package/cdn/media/vimeo-video.js +1 -1
  97. package/cdn/media/vimeo-video.js.map +1 -1
  98. package/cdn/{media-Uxm0d3Vx.js → media-BI8caj07.js} +3 -3
  99. package/cdn/{media-Uxm0d3Vx.js.map → media-BI8caj07.js.map} +1 -1
  100. package/cdn/{media-COIe3uI5.js → media-BNuI0Im7.js} +19 -6
  101. package/cdn/media-BNuI0Im7.js.map +1 -0
  102. package/cdn/media-CQxFuDcv.js +2 -0
  103. package/cdn/{media-CPVSKLdk.js.map → media-CQxFuDcv.js.map} +1 -1
  104. package/cdn/media-D4tG62L5.js +2 -0
  105. package/cdn/{media-BTipOcKo.js.map → media-D4tG62L5.js.map} +1 -1
  106. package/cdn/{media-oa3nyL2o.js → media-DI6DvYm3.js} +3 -3
  107. package/cdn/{media-oa3nyL2o.js.map → media-DI6DvYm3.js.map} +1 -1
  108. package/cdn/media-DU3Xf5XR.js +2 -0
  109. package/cdn/media-DU3Xf5XR.js.map +1 -0
  110. package/cdn/media-mYKOAsk3.js +825 -0
  111. package/cdn/media-mYKOAsk3.js.map +1 -0
  112. package/cdn/media-zReLnePj.js +2 -0
  113. package/cdn/media-zReLnePj.js.map +1 -0
  114. package/cdn/{minimal-DQCLKRyR.js → minimal-3OmH0xQS.js} +2 -2
  115. package/cdn/minimal-3OmH0xQS.js.map +1 -0
  116. package/cdn/{minimal-DLosvq31.js → minimal-6w_Vyyl9.js} +2 -2
  117. package/cdn/minimal-6w_Vyyl9.js.map +1 -0
  118. package/cdn/minimal-BWLTn7oQ.js +2 -0
  119. package/cdn/minimal-BWLTn7oQ.js.map +1 -0
  120. package/cdn/minimal-DIGrklyh.js +2 -0
  121. package/cdn/minimal-DIGrklyh.js.map +1 -0
  122. package/cdn/{minimal-ui-CRKvUmB8.js → minimal-ui-BCIESK8f.js} +8 -8
  123. package/cdn/{minimal-ui-CRKvUmB8.js.map → minimal-ui-BCIESK8f.js.map} +1 -1
  124. package/cdn/minimal-ui-BXrq3z4U.js +2 -0
  125. package/cdn/{minimal-ui-Et2Wcn7r.js.map → minimal-ui-BXrq3z4U.js.map} +1 -1
  126. package/cdn/{minimal-ui-BpHxIo4z.js → minimal-ui-DEalpMk6.js} +4 -4
  127. package/cdn/{minimal-ui-BpHxIo4z.js.map → minimal-ui-DEalpMk6.js.map} +1 -1
  128. package/cdn/{minimal-ui-8iRZf_72.js → minimal-ui-vY3QgohH.js} +2 -2
  129. package/cdn/{minimal-ui-8iRZf_72.js.map → minimal-ui-vY3QgohH.js.map} +1 -1
  130. package/cdn/{player-DM9rUXg-.js → player-B3GlPF90.js} +2 -2
  131. package/cdn/{player-DM9rUXg-.js.map → player-B3GlPF90.js.map} +1 -1
  132. package/cdn/player-CtTC7qa5.js +2 -0
  133. package/cdn/{player-rCFqzWrA.js.map → player-CtTC7qa5.js.map} +1 -1
  134. package/cdn/player-DKkph8UM.js +2 -0
  135. package/cdn/{player-BRQLp5bX.js.map → player-DKkph8UM.js.map} +1 -1
  136. package/cdn/{player-CKTAtwit.js → player-DPDmTRvg.js} +2 -2
  137. package/cdn/{player-CKTAtwit.js.map → player-DPDmTRvg.js.map} +1 -1
  138. package/cdn/player-DrDd7LJi.js +2 -0
  139. package/cdn/{player-BloX4l6F.js.map → player-DrDd7LJi.js.map} +1 -1
  140. package/cdn/{player-B2oraRyD.js → player-L5UpZmT4.js} +2 -2
  141. package/cdn/{player-B2oraRyD.js.map → player-L5UpZmT4.js.map} +1 -1
  142. package/cdn/{poster-element-BGr1VQJB.js → poster-element-B5tdJ2ub.js} +179 -38
  143. package/cdn/poster-element-B5tdJ2ub.js.map +1 -0
  144. package/cdn/poster-element-B8QwXSU_.js +2 -0
  145. package/cdn/poster-element-B8QwXSU_.js.map +1 -0
  146. package/cdn/{error-surface-drmCvBVW.js → relocation-pipelines-Dh8CcgHw.js} +5 -343
  147. package/cdn/relocation-pipelines-Dh8CcgHw.js.map +1 -0
  148. package/cdn/relocation-pipelines-DunE4gcV.js +2 -0
  149. package/cdn/relocation-pipelines-DunE4gcV.js.map +1 -0
  150. package/cdn/{seek-button-element-XMTLIxZj.js → seek-button-element-5co-k0Dx.js} +4 -4
  151. package/cdn/seek-button-element-5co-k0Dx.js.map +1 -0
  152. package/cdn/{seek-button-element-FlgBVoGM.js → seek-button-element-B8TkILg-.js} +2 -2
  153. package/cdn/{seek-button-element-FlgBVoGM.js.map → seek-button-element-B8TkILg-.js.map} +1 -1
  154. package/cdn/shallow-equal-C7S8rj2f.js +16 -0
  155. package/cdn/shallow-equal-C7S8rj2f.js.map +1 -0
  156. package/cdn/shallow-equal-KV1zFqZi.js +2 -0
  157. package/cdn/shallow-equal-KV1zFqZi.js.map +1 -0
  158. package/cdn/{skin-element-DL-Kqa5f.js → skin-element-DrkI8xuM.js} +2 -2
  159. package/cdn/{skin-element-DL-Kqa5f.js.map → skin-element-DrkI8xuM.js.map} +1 -1
  160. package/cdn/{skin-element-DNytI-uu.js → skin-element-DvX6Bxsv.js} +2 -2
  161. package/cdn/{skin-element-DNytI-uu.js.map → skin-element-DvX6Bxsv.js.map} +1 -1
  162. package/cdn/{text-element-DeWBNKXb.js → text-element-BoY6AhMn.js} +2 -2
  163. package/cdn/{text-element-DeWBNKXb.js.map → text-element-BoY6AhMn.js.map} +1 -1
  164. package/cdn/{text-element-D88ArbZz.js → text-element-cg6l21cd.js} +2 -2
  165. package/cdn/{text-element-D88ArbZz.js.map → text-element-cg6l21cd.js.map} +1 -1
  166. package/cdn/time-slider-chapters-element-BfLjdnU4.js +2 -0
  167. package/cdn/time-slider-chapters-element-BfLjdnU4.js.map +1 -0
  168. package/cdn/{time-slider-chapters-element-DJ0abZXI.js → time-slider-chapters-element-CznFQWFm.js} +5 -5
  169. package/cdn/time-slider-chapters-element-CznFQWFm.js.map +1 -0
  170. package/cdn/{ui-BU3_2gDQ.js → ui-BwzqkJNK.js} +7 -7
  171. package/cdn/{ui-BU3_2gDQ.js.map → ui-BwzqkJNK.js.map} +1 -1
  172. package/cdn/ui-DayfItun.js +2 -0
  173. package/cdn/{ui-C0isALTQ.js.map → ui-DayfItun.js.map} +1 -1
  174. package/cdn/ui-PSnD-pv8.js +2 -0
  175. package/cdn/{ui-DVpkE1MN.js.map → ui-PSnD-pv8.js.map} +1 -1
  176. package/cdn/{ui-BsaWWE4y.js → ui-fnKp94a7.js} +9 -9
  177. package/cdn/{ui-BsaWWE4y.js.map → ui-fnKp94a7.js.map} +1 -1
  178. package/cdn/video-headless.dev.js +1 -1
  179. package/cdn/video-headless.js +1 -1
  180. package/cdn/video-minimal-ui.dev.js +2 -2
  181. package/cdn/video-minimal-ui.js +1 -1
  182. package/cdn/video-minimal.dev.js +8 -6
  183. package/cdn/video-minimal.dev.js.map +1 -1
  184. package/cdn/video-minimal.js +1 -1
  185. package/cdn/video-minimal.js.map +1 -1
  186. package/cdn/video-ui.dev.js +2 -2
  187. package/cdn/video-ui.js +1 -1
  188. package/cdn/video.dev.js +9 -7
  189. package/cdn/video.dev.js.map +1 -1
  190. package/cdn/video.js +1 -1
  191. package/cdn/video.js.map +1 -1
  192. package/dist/default/__generated__/skins/default-video/styles/buttons.css +132 -18
  193. package/dist/default/__generated__/skins/default-video/styles/captions.css +22 -0
  194. package/dist/default/__generated__/skins/default-video/styles/container.css +121 -8
  195. package/dist/default/__generated__/skins/default-video/styles/controls.css +436 -21
  196. package/dist/default/__generated__/skins/default-video/styles/dialog.css +169 -0
  197. package/dist/default/__generated__/skins/default-video/styles/indicator.css +459 -0
  198. package/dist/default/__generated__/skins/default-video/styles/menus.css +254 -0
  199. package/dist/default/__generated__/skins/default-video/styles/overlays.css +26 -2
  200. package/dist/default/__generated__/skins/default-video/styles/popups.css +338 -12
  201. package/dist/default/__generated__/skins/default-video/styles/poster.css +4 -4
  202. package/dist/default/__generated__/skins/default-video/styles/sliders.css +355 -31
  203. package/dist/default/__generated__/skins/default-video/styles/styles.css +2455 -216
  204. package/dist/default/__generated__/skins/default-video/styles/theme.css +4 -19
  205. package/dist/default/__generated__/skins/default-video/styles/video.css +29 -0
  206. package/dist/default/__generated__/skins/minimal-video/styles/base.css +25 -0
  207. package/dist/default/__generated__/skins/minimal-video/styles/buttons.css +266 -0
  208. package/dist/default/__generated__/skins/minimal-video/styles/captions.css +22 -0
  209. package/dist/default/__generated__/skins/minimal-video/styles/container.css +158 -0
  210. package/dist/default/__generated__/skins/minimal-video/styles/controls.css +182 -0
  211. package/dist/default/__generated__/skins/minimal-video/styles/dialog.css +77 -0
  212. package/dist/default/__generated__/skins/minimal-video/styles/indicator.css +322 -0
  213. package/dist/default/__generated__/skins/minimal-video/styles/menus.css +254 -0
  214. package/dist/default/__generated__/skins/minimal-video/styles/overlays.css +35 -0
  215. package/dist/default/__generated__/skins/minimal-video/styles/popups.css +371 -0
  216. package/dist/default/__generated__/skins/minimal-video/styles/poster.css +47 -0
  217. package/dist/default/__generated__/skins/minimal-video/styles/sliders.css +436 -0
  218. package/dist/default/__generated__/skins/minimal-video/styles/styles.css +2246 -0
  219. package/dist/default/__generated__/skins/minimal-video/styles/theme.css +7 -0
  220. package/dist/default/__generated__/skins/minimal-video/styles/video.css +29 -0
  221. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  222. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  223. package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
  224. package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  225. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  226. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  227. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  228. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  229. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  230. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  231. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  232. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  233. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  234. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  235. package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
  236. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  237. package/dist/default/define/audio/minimal-skin.css +103 -101
  238. package/dist/default/define/audio/skin.css +68 -69
  239. package/dist/default/define/live-audio/minimal-skin.css +103 -101
  240. package/dist/default/define/live-audio/skin.css +68 -69
  241. package/dist/default/define/live-video/minimal-skin.css +140 -120
  242. package/dist/default/define/live-video/minimal-skin.js +1 -1
  243. package/dist/default/define/live-video/minimal-skin.js.map +1 -1
  244. package/dist/default/define/live-video/minimal-skin.tailwind.js +1 -1
  245. package/dist/default/define/live-video/minimal-skin.tailwind.js.map +1 -1
  246. package/dist/default/define/live-video/skin.css +89 -76
  247. package/dist/default/define/live-video/skin.js +1 -1
  248. package/dist/default/define/live-video/skin.js.map +1 -1
  249. package/dist/default/define/live-video/skin.tailwind.js +1 -1
  250. package/dist/default/define/live-video/skin.tailwind.js.map +1 -1
  251. package/dist/default/define/ui/gesture.js +7 -0
  252. package/dist/default/define/ui/gesture.js.map +1 -0
  253. package/dist/default/define/video/minimal-skin.css +140 -120
  254. package/dist/default/define/video/minimal-skin.js +1 -1
  255. package/dist/default/define/video/minimal-skin.js.map +1 -1
  256. package/dist/default/define/video/minimal-skin.tailwind.js +1 -1
  257. package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
  258. package/dist/default/define/video/skin.css +89 -76
  259. package/dist/default/define/video/skin.js +1 -1
  260. package/dist/default/define/video/skin.js.map +1 -1
  261. package/dist/default/define/video/skin.tailwind.js +1 -1
  262. package/dist/default/define/video/skin.tailwind.js.map +1 -1
  263. package/dist/default/icons/dist/element/default/icons.js +1 -1
  264. package/dist/default/icons/dist/element/default/icons.js.map +1 -1
  265. package/dist/default/icons/dist/element/minimal/icons.js +1 -1
  266. package/dist/default/icons/dist/element/minimal/icons.js.map +1 -1
  267. package/dist/default/icons/dist/html/default/airplay-exit.js +1 -1
  268. package/dist/default/icons/dist/html/default/airplay-exit.js.map +1 -1
  269. package/dist/default/icons/dist/html/minimal/airplay-exit.js +1 -1
  270. package/dist/default/icons/dist/html/minimal/airplay-exit.js.map +1 -1
  271. package/dist/default/icons/dist/render/default/index.js +1 -1
  272. package/dist/default/icons/dist/render/default/index.js.map +1 -1
  273. package/dist/default/icons/dist/render/minimal/index.js +1 -1
  274. package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
  275. package/dist/default/media/hls-background-video/media.js +18 -0
  276. package/dist/default/media/hls-background-video/media.js.map +1 -1
  277. package/dist/default/skins/dist/default/default/tailwind/components/button.js +3 -1
  278. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  279. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +8 -1
  280. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  281. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +10 -10
  282. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  283. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
  284. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
  285. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
  286. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  287. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
  288. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  289. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
  290. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  291. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
  292. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
  293. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
  294. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  295. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +4 -4
  296. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  297. package/dist/default/store/provider-mixin.js +22 -8
  298. package/dist/default/store/provider-mixin.js.map +1 -1
  299. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
  300. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
  301. package/dist/default/ui/captions-radio-group/captions-radio-group-element.js +1 -1
  302. package/dist/default/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
  303. package/dist/default/ui/gesture/gesture-element.js.map +1 -1
  304. package/dist/default/ui/hotkey/hotkey-element.js.map +1 -1
  305. package/dist/default/ui/menu/context.js.map +1 -1
  306. package/dist/default/ui/menu/menu-element.js +28 -27
  307. package/dist/default/ui/menu/menu-element.js.map +1 -1
  308. package/dist/default/ui/menu/menu-radio-group-element.js +14 -14
  309. package/dist/default/ui/menu/menu-radio-group-element.js.map +1 -1
  310. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
  311. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
  312. package/dist/default/ui/poster/poster-element.js +138 -8
  313. package/dist/default/ui/poster/poster-element.js.map +1 -1
  314. package/dist/default/ui/quality-radio-group/quality-radio-group-element.js +1 -1
  315. package/dist/default/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
  316. package/dist/default/ui/slider/slider-preview-element.js.map +1 -1
  317. package/dist/dev/__generated__/skins/default-video/styles/buttons.css +132 -18
  318. package/dist/dev/__generated__/skins/default-video/styles/captions.css +22 -0
  319. package/dist/dev/__generated__/skins/default-video/styles/container.css +121 -8
  320. package/dist/dev/__generated__/skins/default-video/styles/controls.css +436 -21
  321. package/dist/dev/__generated__/skins/default-video/styles/dialog.css +169 -0
  322. package/dist/dev/__generated__/skins/default-video/styles/indicator.css +459 -0
  323. package/dist/dev/__generated__/skins/default-video/styles/menus.css +254 -0
  324. package/dist/dev/__generated__/skins/default-video/styles/overlays.css +26 -2
  325. package/dist/dev/__generated__/skins/default-video/styles/popups.css +338 -12
  326. package/dist/dev/__generated__/skins/default-video/styles/poster.css +4 -4
  327. package/dist/dev/__generated__/skins/default-video/styles/sliders.css +355 -31
  328. package/dist/dev/__generated__/skins/default-video/styles/styles.css +2455 -216
  329. package/dist/dev/__generated__/skins/default-video/styles/theme.css +4 -19
  330. package/dist/dev/__generated__/skins/default-video/styles/video.css +29 -0
  331. package/dist/dev/__generated__/skins/minimal-video/styles/base.css +25 -0
  332. package/dist/dev/__generated__/skins/minimal-video/styles/buttons.css +266 -0
  333. package/dist/dev/__generated__/skins/minimal-video/styles/captions.css +22 -0
  334. package/dist/dev/__generated__/skins/minimal-video/styles/container.css +158 -0
  335. package/dist/dev/__generated__/skins/minimal-video/styles/controls.css +182 -0
  336. package/dist/dev/__generated__/skins/minimal-video/styles/dialog.css +77 -0
  337. package/dist/dev/__generated__/skins/minimal-video/styles/indicator.css +322 -0
  338. package/dist/dev/__generated__/skins/minimal-video/styles/menus.css +254 -0
  339. package/dist/dev/__generated__/skins/minimal-video/styles/overlays.css +35 -0
  340. package/dist/dev/__generated__/skins/minimal-video/styles/popups.css +371 -0
  341. package/dist/dev/__generated__/skins/minimal-video/styles/poster.css +47 -0
  342. package/dist/dev/__generated__/skins/minimal-video/styles/sliders.css +436 -0
  343. package/dist/dev/__generated__/skins/minimal-video/styles/styles.css +2246 -0
  344. package/dist/dev/__generated__/skins/minimal-video/styles/theme.css +7 -0
  345. package/dist/dev/__generated__/skins/minimal-video/styles/video.css +29 -0
  346. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  347. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  348. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
  349. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  350. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  351. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  352. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  353. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  354. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  355. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  356. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  357. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  358. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  359. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  360. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
  361. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  362. package/dist/dev/define/audio/minimal-skin.css +103 -101
  363. package/dist/dev/define/audio/skin.css +68 -69
  364. package/dist/dev/define/live-audio/minimal-skin.css +103 -101
  365. package/dist/dev/define/live-audio/skin.css +68 -69
  366. package/dist/dev/define/live-video/minimal-skin.css +140 -120
  367. package/dist/dev/define/live-video/minimal-skin.d.ts.map +1 -1
  368. package/dist/dev/define/live-video/minimal-skin.js +3 -1
  369. package/dist/dev/define/live-video/minimal-skin.js.map +1 -1
  370. package/dist/dev/define/live-video/minimal-skin.tailwind.d.ts.map +1 -1
  371. package/dist/dev/define/live-video/minimal-skin.tailwind.js +3 -1
  372. package/dist/dev/define/live-video/minimal-skin.tailwind.js.map +1 -1
  373. package/dist/dev/define/live-video/skin.css +89 -76
  374. package/dist/dev/define/live-video/skin.d.ts.map +1 -1
  375. package/dist/dev/define/live-video/skin.js +3 -1
  376. package/dist/dev/define/live-video/skin.js.map +1 -1
  377. package/dist/dev/define/live-video/skin.tailwind.d.ts.map +1 -1
  378. package/dist/dev/define/live-video/skin.tailwind.js +4 -2
  379. package/dist/dev/define/live-video/skin.tailwind.js.map +1 -1
  380. package/dist/dev/define/ui/gesture.d.ts +8 -0
  381. package/dist/dev/define/ui/gesture.d.ts.map +1 -0
  382. package/dist/dev/define/ui/gesture.js +7 -0
  383. package/dist/dev/define/ui/gesture.js.map +1 -0
  384. package/dist/dev/define/video/minimal-skin.css +140 -120
  385. package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
  386. package/dist/dev/define/video/minimal-skin.js +3 -1
  387. package/dist/dev/define/video/minimal-skin.js.map +1 -1
  388. package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -1
  389. package/dist/dev/define/video/minimal-skin.tailwind.js +3 -1
  390. package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
  391. package/dist/dev/define/video/skin.css +89 -76
  392. package/dist/dev/define/video/skin.d.ts.map +1 -1
  393. package/dist/dev/define/video/skin.js +3 -1
  394. package/dist/dev/define/video/skin.js.map +1 -1
  395. package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
  396. package/dist/dev/define/video/skin.tailwind.js +4 -2
  397. package/dist/dev/define/video/skin.tailwind.js.map +1 -1
  398. package/dist/dev/media/hls-background-video/media.d.ts +16 -0
  399. package/dist/dev/media/hls-background-video/media.d.ts.map +1 -1
  400. package/dist/dev/media/hls-background-video/media.js +18 -0
  401. package/dist/dev/media/hls-background-video/media.js.map +1 -1
  402. package/dist/dev/packages/icons/dist/element/default/icons.js +1 -1
  403. package/dist/dev/packages/icons/dist/element/default/icons.js.map +1 -1
  404. package/dist/dev/packages/icons/dist/element/minimal/icons.js +1 -1
  405. package/dist/dev/packages/icons/dist/element/minimal/icons.js.map +1 -1
  406. package/dist/dev/packages/icons/dist/html/default/airplay-exit.js +1 -1
  407. package/dist/dev/packages/icons/dist/html/default/airplay-exit.js.map +1 -1
  408. package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js +1 -1
  409. package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js.map +1 -1
  410. package/dist/dev/packages/icons/dist/render/default/index.js +1 -1
  411. package/dist/dev/packages/icons/dist/render/default/index.js.map +1 -1
  412. package/dist/dev/packages/icons/dist/render/minimal/index.js +1 -1
  413. package/dist/dev/packages/icons/dist/render/minimal/index.js.map +1 -1
  414. package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js +3 -1
  415. package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  416. package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js +8 -1
  417. package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  418. package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js +10 -10
  419. package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  420. package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
  421. package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
  422. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
  423. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  424. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
  425. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  426. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
  427. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  428. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
  429. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
  430. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
  431. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  432. package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js +4 -4
  433. package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  434. package/dist/dev/store/provider-mixin.d.ts.map +1 -1
  435. package/dist/dev/store/provider-mixin.js +24 -8
  436. package/dist/dev/store/provider-mixin.js.map +1 -1
  437. package/dist/dev/store/types.d.ts +2 -2
  438. package/dist/dev/store/types.d.ts.map +1 -1
  439. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
  440. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
  441. package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js +1 -1
  442. package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
  443. package/dist/dev/ui/gesture/gesture-element.d.ts +7 -7
  444. package/dist/dev/ui/gesture/gesture-element.d.ts.map +1 -1
  445. package/dist/dev/ui/gesture/gesture-element.js.map +1 -1
  446. package/dist/dev/ui/hotkey/hotkey-element.d.ts +6 -6
  447. package/dist/dev/ui/hotkey/hotkey-element.d.ts.map +1 -1
  448. package/dist/dev/ui/hotkey/hotkey-element.js.map +1 -1
  449. package/dist/dev/ui/menu/context.d.ts +8 -8
  450. package/dist/dev/ui/menu/context.d.ts.map +1 -1
  451. package/dist/dev/ui/menu/context.js.map +1 -1
  452. package/dist/dev/ui/menu/menu-element.d.ts.map +1 -1
  453. package/dist/dev/ui/menu/menu-element.js +28 -27
  454. package/dist/dev/ui/menu/menu-element.js.map +1 -1
  455. package/dist/dev/ui/menu/menu-radio-group-element.d.ts +1 -1
  456. package/dist/dev/ui/menu/menu-radio-group-element.d.ts.map +1 -1
  457. package/dist/dev/ui/menu/menu-radio-group-element.js +14 -14
  458. package/dist/dev/ui/menu/menu-radio-group-element.js.map +1 -1
  459. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
  460. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
  461. package/dist/dev/ui/poster/poster-element.d.ts +20 -18
  462. package/dist/dev/ui/poster/poster-element.d.ts.map +1 -1
  463. package/dist/dev/ui/poster/poster-element.js +145 -8
  464. package/dist/dev/ui/poster/poster-element.js.map +1 -1
  465. package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js +1 -1
  466. package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
  467. package/dist/dev/ui/slider/slider-preview-element.d.ts +2 -2
  468. package/dist/dev/ui/slider/slider-preview-element.d.ts.map +1 -1
  469. package/dist/dev/ui/slider/slider-preview-element.js.map +1 -1
  470. package/docs/README.md +1 -1
  471. package/docs/concepts/skins.md +91 -78
  472. package/docs/how-to/customize-skins.md +411 -377
  473. package/docs/reference/menu.md +3 -19
  474. package/docs/reference/popover.md +2 -2
  475. package/docs/reference/poster.md +211 -21
  476. package/docs/reference/slider.md +1 -1
  477. package/docs/reference/time-slider.md +1 -1
  478. package/docs/reference/tooltip.md +6 -6
  479. package/docs/reference/volume-slider.md +1 -1
  480. package/package.json +14 -9
  481. package/cdn/adapter-Bk03SAxn.js +0 -2
  482. package/cdn/adapter-Bk03SAxn.js.map +0 -1
  483. package/cdn/adapter-XTen-YVQ.js.map +0 -1
  484. package/cdn/compounds-BEO1d3ZM.js +0 -8
  485. package/cdn/compounds-BEO1d3ZM.js.map +0 -1
  486. package/cdn/compounds-nk9RJtBK.js.map +0 -1
  487. package/cdn/create-player-DK9WOywd.js.map +0 -1
  488. package/cdn/create-player-hSdQMP5p.js +0 -2
  489. package/cdn/create-player-hSdQMP5p.js.map +0 -1
  490. package/cdn/default-BqQDVloS.js.map +0 -1
  491. package/cdn/default-CXWVp2oG.js +0 -2
  492. package/cdn/default-CXWVp2oG.js.map +0 -1
  493. package/cdn/default-Dw6cIEqT.js +0 -2
  494. package/cdn/default-Dw6cIEqT.js.map +0 -1
  495. package/cdn/default-I2LasfxC.js.map +0 -1
  496. package/cdn/error-surface-DCT1m2p1.js +0 -2
  497. package/cdn/error-surface-DCT1m2p1.js.map +0 -1
  498. package/cdn/error-surface-drmCvBVW.js.map +0 -1
  499. package/cdn/gesture-element-6Ld1YwIL.js.map +0 -1
  500. package/cdn/gesture-element-BC48ucj9.js +0 -2
  501. package/cdn/gesture-element-BC48ucj9.js.map +0 -1
  502. package/cdn/i18n-Dc7WM2xd.js +0 -2
  503. package/cdn/media-BTipOcKo.js +0 -2
  504. package/cdn/media-Bmablv4g.js +0 -2
  505. package/cdn/media-Bmablv4g.js.map +0 -1
  506. package/cdn/media-COIe3uI5.js.map +0 -1
  507. package/cdn/media-CPVSKLdk.js +0 -2
  508. package/cdn/media-Dq4zmIJa.js +0 -2
  509. package/cdn/media-Dq4zmIJa.js.map +0 -1
  510. package/cdn/media-suYcjCG2.js +0 -445
  511. package/cdn/media-suYcjCG2.js.map +0 -1
  512. package/cdn/minimal-BedCvMBG.js +0 -2
  513. package/cdn/minimal-BedCvMBG.js.map +0 -1
  514. package/cdn/minimal-BoP112ye.js +0 -2
  515. package/cdn/minimal-BoP112ye.js.map +0 -1
  516. package/cdn/minimal-DLosvq31.js.map +0 -1
  517. package/cdn/minimal-DQCLKRyR.js.map +0 -1
  518. package/cdn/minimal-ui-Et2Wcn7r.js +0 -2
  519. package/cdn/player-BRQLp5bX.js +0 -2
  520. package/cdn/player-BloX4l6F.js +0 -2
  521. package/cdn/player-rCFqzWrA.js +0 -2
  522. package/cdn/poster-element-BGr1VQJB.js.map +0 -1
  523. package/cdn/poster-element-DBmgOyep.js +0 -2
  524. package/cdn/poster-element-DBmgOyep.js.map +0 -1
  525. package/cdn/seek-button-element-XMTLIxZj.js.map +0 -1
  526. package/cdn/select-tracks-nRPBa1NC.js.map +0 -1
  527. package/cdn/select-tracks-xV1s28xD.js +0 -59
  528. package/cdn/select-tracks-xV1s28xD.js.map +0 -1
  529. package/cdn/time-slider-chapters-element-DJ0abZXI.js.map +0 -1
  530. package/cdn/time-slider-chapters-element-DW8YyJn8.js +0 -2
  531. package/cdn/time-slider-chapters-element-DW8YyJn8.js.map +0 -1
  532. package/cdn/ui-C0isALTQ.js +0 -2
  533. package/cdn/ui-DVpkE1MN.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"hotkey-element.js","names":["#player","#container","#register","#unregister","#cleanup"],"sources":["../../../../src/ui/hotkey/hotkey-element.ts"],"sourcesContent":["import { createHotkey, type HotkeyActionName, isHotkeyToggleAction, resolveHotkeyAction } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class HotkeyElement extends MediaElement {\n static readonly tagName = 'media-hotkey';\n\n static override properties: PropertyDeclarationMap = {\n keys: { type: String },\n action: { type: String },\n value: { type: Number },\n disabled: { type: Boolean },\n target: { type: String },\n };\n\n keys = '';\n action: HotkeyActionName | (string & {}) = '';\n value: number | undefined = undefined;\n disabled = false;\n target: 'player' | 'document' = 'player';\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.keys || !this.action || !store || !container) return;\n\n const resolver = resolveHotkeyAction(this.action);\n if (!resolver) return;\n\n const { value, action } = this;\n\n this.#cleanup = createHotkey(container, {\n keys: this.keys,\n action,\n value,\n target: this.target,\n disabled: this.disabled,\n repeatable: !isHotkeyToggleAction(action),\n onActivate: (_event, key) => {\n resolver({ store, key, value });\n },\n });\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,gBAAb,cAAmC,aAAa;;;EAWvC,KAAA,OAAA;EACoC,KAAA,SAAA;EACf,KAAA,QAAA,KAAA;EACjB,KAAA,WAAA;EACqB,KAAA,SAAA;EAEb,KAAA,UAAA,IAAI,iBAAiB,MAAM,aAAa;EACrC,KAAA,aAAA,IAAI,gBAAgB,MAAM;GAC9C,SAAS;GACT,gBAAgB,KAAK,cAAc;GACnC,WAAW;EACb,CAAC;EAC+B,KAAA,WAAA;;;EAtBN,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,MAAM,EAAE,MAAM,OAAO;GACrB,QAAQ,EAAE,MAAM,OAAO;GACvB,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;GAC1B,QAAQ,EAAE,MAAM,OAAO;EACzB;;CAQA;CACA;CAKA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAK,MAAM,UAAU;EACrB,KAAKE,UAAU;CACjB;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKC,YAAY;CACnB;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAGpB,IAAI,KAAK,aAAa;GACpB,KAAKA,YAAY;GACjB,KAAKD,UAAU;EACjB;CACF;CAEA,YAAkB;EAChB,MAAM,QAAQ,KAAKF,QAAQ;EAC3B,MAAM,YAAY,KAAKC,WAAW,OAAO;EACzC,IAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU,CAAC,SAAS,CAAC,WAAW;EAExD,MAAM,WAAW,oBAAoB,KAAK,MAAM;EAChD,IAAI,CAAC,UAAU;EAEf,MAAM,EAAE,OAAO,WAAW;EAE1B,KAAKG,WAAW,aAAa,WAAW;GACtC,MAAM,KAAK;GACX;GACA;GACA,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,YAAY,CAAC,qBAAqB,MAAM;GACxC,aAAa,QAAQ,QAAQ;IAC3B,SAAS;KAAE;KAAO;KAAK;IAAM,CAAC;GAChC;EACF,CAAC;CACH;CAEA,cAAoB;EAClB,KAAKA,WAAW;EAChB,KAAKA,WAAW;CAClB;AACF"}
1
+ {"version":3,"file":"hotkey-element.js","names":["#player","#container","#register","#unregister","#cleanup"],"sources":["../../../../src/ui/hotkey/hotkey-element.ts"],"sourcesContent":["import type { HotkeyProps } from '@videojs/core';\nimport { createHotkey, isHotkeyToggleAction, resolveHotkeyAction } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class HotkeyElement extends MediaElement {\n static readonly tagName = 'media-hotkey';\n\n static override properties: PropertyDeclarationMap = {\n keys: { type: String },\n action: { type: String },\n value: { type: Number },\n disabled: { type: Boolean },\n target: { type: String },\n };\n\n keys: HotkeyProps['keys'] = '';\n action: HotkeyProps['action'] = '';\n value: HotkeyProps['value'] = undefined;\n disabled: NonNullable<HotkeyProps['disabled']> = false;\n target: NonNullable<HotkeyProps['target']> = 'player';\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.keys || !this.action || !store || !container) return;\n\n const resolver = resolveHotkeyAction(this.action);\n if (!resolver) return;\n\n const { value, action } = this;\n\n this.#cleanup = createHotkey(container, {\n keys: this.keys,\n action,\n value,\n target: this.target,\n disabled: this.disabled,\n repeatable: !isHotkeyToggleAction(action),\n onActivate: (_event, key) => {\n resolver({ store, key, value });\n },\n });\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":";;;;;;AASA,IAAa,gBAAb,cAAmC,aAAa;;;EAWlB,KAAA,OAAA;EACI,KAAA,SAAA;EACF,KAAA,QAAA,KAAA;EACmB,KAAA,WAAA;EACJ,KAAA,SAAA;EAE1B,KAAA,UAAA,IAAI,iBAAiB,MAAM,aAAa;EACrC,KAAA,aAAA,IAAI,gBAAgB,MAAM;GAC9C,SAAS;GACT,gBAAgB,KAAK,cAAc;GACnC,WAAW;EACb,CAAC;EAC+B,KAAA,WAAA;;;EAtBN,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,MAAM,EAAE,MAAM,OAAO;GACrB,QAAQ,EAAE,MAAM,OAAO;GACvB,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;GAC1B,QAAQ,EAAE,MAAM,OAAO;EACzB;;CAQA;CACA;CAKA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAK,MAAM,UAAU;EACrB,KAAKE,UAAU;CACjB;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKC,YAAY;CACnB;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAGpB,IAAI,KAAK,aAAa;GACpB,KAAKA,YAAY;GACjB,KAAKD,UAAU;EACjB;CACF;CAEA,YAAkB;EAChB,MAAM,QAAQ,KAAKF,QAAQ;EAC3B,MAAM,YAAY,KAAKC,WAAW,OAAO;EACzC,IAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU,CAAC,SAAS,CAAC,WAAW;EAExD,MAAM,WAAW,oBAAoB,KAAK,MAAM;EAChD,IAAI,CAAC,UAAU;EAEf,MAAM,EAAE,OAAO,WAAW;EAE1B,KAAKG,WAAW,aAAa,WAAW;GACtC,MAAM,KAAK;GACX;GACA;GACA,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,YAAY,CAAC,qBAAqB,MAAM;GACxC,aAAa,QAAQ,QAAQ;IAC3B,SAAS;KAAE;KAAO;KAAK;IAAM,CAAC;GAChC;EACF,CAAC;CACH;CAEA,cAAoB;EAClB,KAAKA,WAAW;EAChB,KAAKA,WAAW;CAClB;AACF"}
@@ -2,17 +2,17 @@ import { RadioGroupContextValue, radioGroupContext } from "../radio-group/contex
2
2
  import { MenuApi } from "@videojs/core/dom";
3
3
  import { MenuState, StateAttrMap } from "@videojs/core";
4
4
  //#region src/ui/menu/context.d.ts
5
+ interface MenuTriggerState {
6
+ hint: string;
7
+ disabled: boolean;
8
+ availability?: 'available' | 'unavailable' | 'unsupported' | undefined;
9
+ }
5
10
  interface MenuContextValue {
6
11
  menu: MenuApi;
7
12
  state: MenuState;
8
13
  stateAttrMap: StateAttrMap<MenuState>;
9
- /** Publish generic display and interaction state to this submenu's trigger. */
10
- setTriggerMetadata: (metadata: MenuTriggerMetadata) => void;
11
- }
12
- interface MenuTriggerMetadata {
13
- hint: string;
14
- disabled: boolean;
15
- availability?: 'available' | 'unavailable' | 'unsupported' | undefined;
14
+ /** Publish display and interaction state to this submenu's trigger. */
15
+ setTriggerState: (state: MenuTriggerState) => void;
16
16
  }
17
17
  interface MenuGroupContextValue {
18
18
  registerLabel: (id: string) => () => void;
@@ -24,5 +24,5 @@ declare const menuGroupContext: {
24
24
  __context__: MenuGroupContextValue;
25
25
  };
26
26
  //#endregion
27
- export { MenuContextValue, MenuGroupContextValue, type RadioGroupContextValue as MenuRadioGroupContextValue, MenuTriggerMetadata, menuContext, menuGroupContext, radioGroupContext as menuRadioGroupContext };
27
+ export { MenuContextValue, MenuGroupContextValue, type RadioGroupContextValue as MenuRadioGroupContextValue, MenuTriggerState, menuContext, menuGroupContext, radioGroupContext as menuRadioGroupContext };
28
28
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","names":[],"sources":["../../../../src/ui/menu/context.ts"],"mappings":";;;;UAIiB;EACf,MAAM;EACN,OAAO;EACP,cAAc,aAAa;;EAE3B,qBAAqB,UAAU;;UAGhB;EACf;EACA;EACA;;UAGe;EACf,gBAAgB;;cAML;eAAA;;cACA;eAAA"}
1
+ {"version":3,"file":"context.d.ts","names":[],"sources":["../../../../src/ui/menu/context.ts"],"mappings":";;;;UAIiB;EACf;EACA;EACA;;UAGe;EACf,MAAM;EACN,OAAO;EACP,cAAc,aAAa;;EAE3B,kBAAkB,OAAO;;UAGV;EACf,gBAAgB;;cAML;eAAA;;cACA;eAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":[],"sources":["../../../../src/ui/menu/context.ts"],"sourcesContent":["import type { MenuState, StateAttrMap } from '@videojs/core';\nimport type { MenuApi } from '@videojs/core/dom';\nimport { createContext } from '@videojs/element/context';\n\nexport interface MenuContextValue {\n menu: MenuApi;\n state: MenuState;\n stateAttrMap: StateAttrMap<MenuState>;\n /** Publish generic display and interaction state to this submenu's trigger. */\n setTriggerMetadata: (metadata: MenuTriggerMetadata) => void;\n}\n\nexport interface MenuTriggerMetadata {\n hint: string;\n disabled: boolean;\n availability?: 'available' | 'unavailable' | 'unsupported' | undefined;\n}\n\nexport interface MenuGroupContextValue {\n registerLabel: (id: string) => () => void;\n}\n\nconst MENU_CONTEXT_KEY = Symbol('@videojs/menu');\nconst MENU_GROUP_CONTEXT_KEY = Symbol('@videojs/menu-group');\n\nexport const menuContext = createContext<MenuContextValue>(MENU_CONTEXT_KEY);\nexport const menuGroupContext = createContext<MenuGroupContextValue>(MENU_GROUP_CONTEXT_KEY);\n\nexport {\n type RadioGroupContextValue as MenuRadioGroupContextValue,\n radioGroupContext as menuRadioGroupContext,\n} from '../radio-group/context';\n"],"mappings":";;;AAsBA,MAAM,mBAAmB,OAAO,eAAe;AAC/C,MAAM,yBAAyB,OAAO,qBAAqB;AAE3D,MAAa,cAAc,cAAgC,gBAAgB;AAC3E,MAAa,mBAAmB,cAAqC,sBAAsB"}
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../../src/ui/menu/context.ts"],"sourcesContent":["import type { MenuState, StateAttrMap } from '@videojs/core';\nimport type { MenuApi } from '@videojs/core/dom';\nimport { createContext } from '@videojs/element/context';\n\nexport interface MenuTriggerState {\n hint: string;\n disabled: boolean;\n availability?: 'available' | 'unavailable' | 'unsupported' | undefined;\n}\n\nexport interface MenuContextValue {\n menu: MenuApi;\n state: MenuState;\n stateAttrMap: StateAttrMap<MenuState>;\n /** Publish display and interaction state to this submenu's trigger. */\n setTriggerState: (state: MenuTriggerState) => void;\n}\n\nexport interface MenuGroupContextValue {\n registerLabel: (id: string) => () => void;\n}\n\nconst MENU_CONTEXT_KEY = Symbol('@videojs/menu');\nconst MENU_GROUP_CONTEXT_KEY = Symbol('@videojs/menu-group');\n\nexport const menuContext = createContext<MenuContextValue>(MENU_CONTEXT_KEY);\nexport const menuGroupContext = createContext<MenuGroupContextValue>(MENU_GROUP_CONTEXT_KEY);\n\nexport {\n type RadioGroupContextValue as MenuRadioGroupContextValue,\n radioGroupContext as menuRadioGroupContext,\n} from '../radio-group/context';\n"],"mappings":";;;AAsBA,MAAM,mBAAmB,OAAO,eAAe;AAC/C,MAAM,yBAAyB,OAAO,qBAAqB;AAE3D,MAAa,cAAc,cAAgC,gBAAgB;AAC3E,MAAa,mBAAmB,cAAqC,sBAAsB"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-element.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-element.ts"],"mappings":";;;;cAmCa,oBAAoB;;kBACf;SAEA;;MACN,MAAI;;;MACG,MAAI;MAAW;;;MACtB,MAAI;;;MACH,MAAI;;;MACI,MAAI;MAAW;;;MACT,MAAI;MAAW;;;MAC1B,MAAI;;;EAKlB;EACA;EACA,8BAAI;EACJ,+BAAK;EACL;EACA;EACA,UAAU;EAwBD;EA2CA;EAgBT,MAAM,SAAQ;EAId,SAAS,SAAQ;YAIE,WAAW,SAAS;YAwBpB,OAAO,UAAU"}
1
+ {"version":3,"file":"menu-element.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-element.ts"],"mappings":";;;;cAmCa,oBAAoB;;kBACf;SAEA;;MACN,MAAI;;;MACG,MAAI;MAAW;;;MACtB,MAAI;;;MACH,MAAI;;;MACI,MAAI;MAAW;;;MACT,MAAI;MAAW;;;MAC1B,MAAI;;;EAKlB;EACA;EACA,8BAAI;EACJ,+BAAK;EACL;EACA;EACA,UAAU;EAwBD;EA2CA;EAgBT,MAAM,SAAQ;EAId,SAAS,SAAQ;YAIE,WAAW,SAAS;YAsBpB,OAAO,UAAU"}
@@ -10,7 +10,7 @@ import { tryHidePopover, tryShowPopover } from "@videojs/utils/dom";
10
10
  import { SnapshotController } from "@videojs/store/html";
11
11
  import { MenuCore, MenuDataAttrs, POPUP_HOST_ATTR } from "@videojs/core";
12
12
  //#region src/ui/menu/menu-element.ts
13
- const defaultTriggerMetadata = {
13
+ const defaultTriggerState = {
14
14
  hint: "",
15
15
  disabled: false
16
16
  };
@@ -44,8 +44,8 @@ var MenuElement = class extends MediaElement {
44
44
  this.#triggerAbort = null;
45
45
  this.#cleanupSizeObserver = null;
46
46
  this.#currentTrigger = null;
47
- this.#metadataTrigger = null;
48
- this.#triggerMetadata = defaultTriggerMetadata;
47
+ this.#stateTrigger = null;
48
+ this.#triggerState = defaultTriggerState;
49
49
  this.#releaseControlsLock = null;
50
50
  this.#registeredParentMenu = null;
51
51
  this.#cleanupParentRegistration = null;
@@ -67,10 +67,10 @@ var MenuElement = class extends MediaElement {
67
67
  this.#handleContentFocusOut = (event) => {
68
68
  this.#menu?.contentProps.onFocusOut(event);
69
69
  };
70
- this.#setTriggerMetadata = (metadata) => {
71
- if (metadata.hint === this.#triggerMetadata.hint && metadata.disabled === this.#triggerMetadata.disabled && metadata.availability === this.#triggerMetadata.availability) return;
72
- this.#triggerMetadata = metadata;
73
- if (metadata.disabled && this.open && this.#parentCtx.value) this.close("imperative-action");
70
+ this.#setTriggerState = (triggerState) => {
71
+ if (triggerState.hint === this.#triggerState.hint && triggerState.disabled === this.#triggerState.disabled && triggerState.availability === this.#triggerState.availability) return;
72
+ this.#triggerState = triggerState;
73
+ if (triggerState.disabled && this.open && this.#parentCtx.value) this.close("imperative-action");
74
74
  this.requestUpdate();
75
75
  };
76
76
  }
@@ -111,8 +111,8 @@ var MenuElement = class extends MediaElement {
111
111
  #triggerAbort;
112
112
  #cleanupSizeObserver;
113
113
  #currentTrigger;
114
- #metadataTrigger;
115
- #triggerMetadata;
114
+ #stateTrigger;
115
+ #triggerState;
116
116
  #releaseControlsLock;
117
117
  #registeredParentMenu;
118
118
  #cleanupParentRegistration;
@@ -151,7 +151,7 @@ var MenuElement = class extends MediaElement {
151
151
  super.disconnectedCallback();
152
152
  this.#cleanupSizeObserver?.();
153
153
  this.#cleanupSizeObserver = null;
154
- this.#syncTriggerMetadata(null);
154
+ this.#syncTriggerState(null);
155
155
  this.#cleanupTrigger();
156
156
  this.#cleanupParentRegistration?.();
157
157
  this.#cleanupParentRegistration = null;
@@ -171,7 +171,6 @@ var MenuElement = class extends MediaElement {
171
171
  super.willUpdate(changed);
172
172
  if (!this.hasUpdated && this.defaultOpen && !this.open) this.open = true;
173
173
  const parentCtx = this.#parentCtx.value ?? null;
174
- const isSubmenu = parentCtx !== null;
175
174
  this.#syncParentRegistration(parentCtx);
176
175
  this.#core.setProps({
177
176
  open: this.open,
@@ -179,8 +178,7 @@ var MenuElement = class extends MediaElement {
179
178
  side: this.side,
180
179
  align: this.align,
181
180
  closeOnEscape: this.closeOnEscape,
182
- closeOnOutsideClick: this.closeOnOutsideClick,
183
- isSubmenu
181
+ closeOnOutsideClick: this.closeOnOutsideClick
184
182
  });
185
183
  if (this.#menu && changed.has("open")) this.#menu.syncOpen(this.open);
186
184
  }
@@ -190,7 +188,10 @@ var MenuElement = class extends MediaElement {
190
188
  const parentCtx = this.#parentCtx.value ?? null;
191
189
  const isSubmenu = parentCtx !== null;
192
190
  const input = this.#menu.input.current;
193
- this.#core.setInput(input);
191
+ this.#core.setInput({
192
+ ...input,
193
+ isSubmenu
194
+ });
194
195
  const state = this.#core.getState();
195
196
  if (!isSubmenu && state.open) this.#releaseControlsLock ??= this.#controlsState.value?.requestControlsLock() ?? null;
196
197
  else this.#releaseControlsVisibilityLock();
@@ -200,7 +201,7 @@ var MenuElement = class extends MediaElement {
200
201
  menu: this.#menu,
201
202
  state,
202
203
  stateAttrMap: MenuDataAttrs,
203
- setTriggerMetadata: this.#setTriggerMetadata
204
+ setTriggerState: this.#setTriggerState
204
205
  });
205
206
  }
206
207
  #releaseControlsVisibilityLock() {
@@ -250,7 +251,7 @@ var MenuElement = class extends MediaElement {
250
251
  const triggerElement = this.parentElement?.querySelector(`[data-has-submenu][commandfor="${this.id}"]`);
251
252
  this.#menu?.setTriggerElement(triggerElement ?? null);
252
253
  if (triggerElement) applyElementProps(triggerElement, this.#core.getTriggerAttrs(state, this.id));
253
- this.#syncTriggerMetadata(triggerElement ?? null);
254
+ this.#syncTriggerState(triggerElement ?? null);
254
255
  this.removeAttribute(MenuDataAttrs.side);
255
256
  this.removeAttribute(MenuDataAttrs.align);
256
257
  applyStateDataAttrs(this, state, MenuDataAttrs);
@@ -270,22 +271,22 @@ var MenuElement = class extends MediaElement {
270
271
  }
271
272
  #handleContentKeyDown;
272
273
  #handleContentFocusOut;
273
- #setTriggerMetadata;
274
- #syncTriggerMetadata(trigger) {
275
- if (trigger !== this.#metadataTrigger) {
276
- this.#clearTriggerMetadata();
277
- this.#metadataTrigger = trigger;
274
+ #setTriggerState;
275
+ #syncTriggerState(trigger) {
276
+ if (trigger !== this.#stateTrigger) {
277
+ this.#clearTriggerState();
278
+ this.#stateTrigger = trigger;
278
279
  }
279
280
  if (!trigger) return;
280
281
  applyElementProps(trigger, {
281
- "aria-disabled": this.#triggerMetadata.disabled || isTriggerExplicitlyDisabled(trigger) ? "true" : void 0,
282
- "data-availability": this.#triggerMetadata.availability
282
+ "aria-disabled": this.#triggerState.disabled || isTriggerExplicitlyDisabled(trigger) ? "true" : void 0,
283
+ "data-availability": this.#triggerState.availability
283
284
  });
284
285
  const hint = trigger.querySelector("[data-part~=\"hint\"]");
285
- if (hint && hint.textContent !== this.#triggerMetadata.hint) hint.textContent = this.#triggerMetadata.hint;
286
+ if (hint && hint.textContent !== this.#triggerState.hint) hint.textContent = this.#triggerState.hint;
286
287
  }
287
- #clearTriggerMetadata() {
288
- const trigger = this.#metadataTrigger;
288
+ #clearTriggerState() {
289
+ const trigger = this.#stateTrigger;
289
290
  if (!trigger) return;
290
291
  applyElementProps(trigger, {
291
292
  "aria-disabled": isTriggerExplicitlyDisabled(trigger) ? "true" : void 0,
@@ -293,7 +294,7 @@ var MenuElement = class extends MediaElement {
293
294
  });
294
295
  const hint = trigger.querySelector("[data-part~=\"hint\"]");
295
296
  if (hint?.textContent) hint.textContent = "";
296
- this.#metadataTrigger = null;
297
+ this.#stateTrigger = null;
297
298
  }
298
299
  #syncTrigger(triggerElement) {
299
300
  if (triggerElement === this.#currentTrigger) return;
@@ -1 +1 @@
1
- {"version":3,"file":"menu-element.js","names":["#menu","#parentCtx","#triggerMetadata","#core","#provider","#position","#controlsState","#containerCtx","#popupGroupCtx","#disconnect","#handleContentKeyDown","#handleContentFocusOut","#snapshot","#releaseControlsVisibilityLock","#cleanupSizeObserver","#syncTriggerMetadata","#cleanupTrigger","#cleanupParentRegistration","#registeredParentMenu","#syncParentRegistration","#releaseControlsLock","#updateAsSubmenu","#updateAsRoot","#setTriggerMetadata","#syncTrigger","#currentTrigger","#submenuActive","#metadataTrigger","#clearTriggerMetadata","#triggerAbort"],"sources":["../../../../src/ui/menu/menu-element.ts"],"sourcesContent":["import { MenuCore, MenuDataAttrs, type MenuInput, POPUP_HOST_ATTR } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createMenu,\n createTransition,\n getRootPositionOptions,\n isMenuNavigationKey,\n type MenuApi,\n type MenuChangeDetails,\n type MenuOpenChangeReason,\n MenuPositioningCSSVars,\n observeMenuSize,\n type PositioningBoundary,\n selectControls,\n syncMenuSizeChain,\n type UIFocusEvent,\n type UIKeyboardEvent,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer, ContextProvider } from '@videojs/element/context';\nimport { SnapshotController } from '@videojs/store/html';\nimport { tryHidePopover, tryShowPopover } from '@videojs/utils/dom';\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { popupGroupContext } from '../../player/popup-group-context';\nimport { MediaElement } from '../media-element';\nimport { PositionController } from '../position-controller';\nimport { type MenuContextValue, type MenuTriggerMetadata, menuContext } from './context';\n\nconst defaultTriggerMetadata: MenuTriggerMetadata = {\n hint: '',\n disabled: false,\n};\n\nexport class MenuElement extends MediaElement {\n static readonly tagName: string = 'media-menu';\n\n static override properties = {\n open: { type: Boolean },\n defaultOpen: { type: Boolean, attribute: 'default-open' },\n side: { type: String },\n align: { type: String },\n closeOnEscape: { type: Boolean, attribute: 'close-on-escape' },\n closeOnOutsideClick: { type: Boolean, attribute: 'close-on-outside-click' },\n boundary: { type: String },\n } satisfies PropertyDeclarationMap<\n 'open' | 'defaultOpen' | 'side' | 'align' | 'closeOnEscape' | 'closeOnOutsideClick' | 'boundary'\n >;\n\n open = MenuCore.defaultProps.open;\n defaultOpen = MenuCore.defaultProps.defaultOpen;\n side = MenuCore.defaultProps.side;\n align = MenuCore.defaultProps.align;\n closeOnEscape = MenuCore.defaultProps.closeOnEscape;\n closeOnOutsideClick = MenuCore.defaultProps.closeOnOutsideClick;\n boundary: PositioningBoundary = 'container';\n\n readonly #core = new MenuCore();\n readonly #provider = new ContextProvider(this, { context: menuContext });\n readonly #position = new PositionController(this);\n readonly #controlsState = new PlayerController(this, playerContext, selectControls);\n readonly #containerCtx = new ContextConsumer(this, { context: containerContext, subscribe: true });\n readonly #popupGroupCtx = new ContextConsumer(this, { context: popupGroupContext });\n // Consume parent menu context — present when this is a nested (submenu) element.\n readonly #parentCtx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n #menu: MenuApi | null = null;\n #snapshot: SnapshotController<MenuInput> | null = null;\n #submenuActive = false;\n\n #disconnect: AbortController | null = null;\n #triggerAbort: AbortController | null = null;\n #cleanupSizeObserver: (() => void) | null = null;\n #currentTrigger: HTMLElement | null = null;\n #metadataTrigger: HTMLElement | null = null;\n #triggerMetadata = defaultTriggerMetadata;\n #releaseControlsLock: (() => void) | null = null;\n #registeredParentMenu: MenuApi | null = null;\n #cleanupParentRegistration: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.setAttribute(POPUP_HOST_ATTR, '');\n\n this.#disconnect = new AbortController();\n\n this.#menu = createMenu({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: MenuChangeDetails) => {\n const accepted = this.dispatchEvent(\n new CustomEvent('open-change', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: { open: nextOpen, ...details },\n })\n );\n if (accepted) this.open = nextOpen;\n },\n closeOnEscape: () => this.closeOnEscape,\n closeOnOutsideClick: () => this.closeOnOutsideClick,\n group: () => (this.#parentCtx.value ? undefined : this.#popupGroupCtx.value),\n });\n\n // The element itself is the content (popup) for root menus.\n // Submenu detection happens in update() once parent context is available.\n this.#menu.setContentElement(this);\n\n applyElementProps(\n this,\n { onKeyDown: this.#handleContentKeyDown, onFocusOut: this.#handleContentFocusOut },\n { signal: this.#disconnect.signal }\n );\n\n if (this.#snapshot) {\n this.#snapshot.track(this.#menu.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#menu.input);\n }\n }\n\n override disconnectedCallback(): void {\n this.#releaseControlsVisibilityLock();\n super.disconnectedCallback();\n this.#cleanupSizeObserver?.();\n this.#cleanupSizeObserver = null;\n this.#syncTriggerMetadata(null);\n this.#cleanupTrigger();\n this.#cleanupParentRegistration?.();\n this.#cleanupParentRegistration = null;\n this.#registeredParentMenu = null;\n this.#menu?.destroy();\n this.#menu = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n close(reason: MenuOpenChangeReason = 'imperative-action'): void {\n this.#menu?.close(reason);\n }\n\n openMenu(reason: MenuOpenChangeReason = 'imperative-action'): void {\n this.#menu?.open(reason);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n\n if (!this.hasUpdated && this.defaultOpen && !this.open) this.open = true;\n\n const parentCtx = this.#parentCtx.value ?? null;\n const isSubmenu = parentCtx !== null;\n this.#syncParentRegistration(parentCtx);\n\n this.#core.setProps({\n open: this.open,\n defaultOpen: this.defaultOpen,\n side: this.side,\n align: this.align,\n closeOnEscape: this.closeOnEscape,\n closeOnOutsideClick: this.closeOnOutsideClick,\n isSubmenu,\n });\n\n if (this.#menu && changed.has('open')) {\n this.#menu.syncOpen(this.open);\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n if (!this.#menu) return;\n\n const parentCtx = this.#parentCtx.value ?? null;\n const isSubmenu = parentCtx !== null;\n\n const input = this.#menu.input.current;\n this.#core.setInput(input);\n const state = this.#core.getState();\n\n if (!isSubmenu && state.open) {\n this.#releaseControlsLock ??= this.#controlsState.value?.requestControlsLock() ?? null;\n } else {\n this.#releaseControlsVisibilityLock();\n }\n\n if (isSubmenu && parentCtx) {\n this.#updateAsSubmenu(state, parentCtx);\n } else {\n this.#updateAsRoot(state);\n }\n\n // Provide context to child parts.\n this.#provider.setValue({\n menu: this.#menu,\n state,\n stateAttrMap: MenuDataAttrs,\n setTriggerMetadata: this.#setTriggerMetadata,\n });\n }\n\n #releaseControlsVisibilityLock(): void {\n this.#releaseControlsLock?.();\n this.#releaseControlsLock = null;\n }\n\n #syncParentRegistration(parentCtx: MenuContextValue | null): void {\n const parentMenu = parentCtx?.menu ?? null;\n if (parentMenu === this.#registeredParentMenu || !this.#menu) return;\n\n this.#cleanupParentRegistration?.();\n this.#registeredParentMenu = parentMenu;\n this.#cleanupParentRegistration = parentMenu?.registerSubmenu(this.#menu) ?? null;\n }\n\n #updateAsRoot(state: ReturnType<MenuCore['getState']>): void {\n if (!this.#menu) return;\n\n const triggerElement = this.#position.findTrigger();\n this.#syncTrigger(triggerElement);\n\n applyElementProps(this, {\n ...this.#core.getContentAttrs(state),\n });\n applyStateDataAttrs(this, state, MenuDataAttrs);\n\n if (state.open) {\n tryShowPopover(this);\n } else {\n tryHidePopover(this);\n }\n\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, this.#core.getTriggerAttrs(state, this.id));\n }\n\n if (!state.open) {\n this.#cleanupSizeObserver?.();\n this.#cleanupSizeObserver = null;\n this.#position.cleanup();\n return;\n }\n\n this.#cleanupSizeObserver?.();\n const syncSize = () => syncMenuSizeChain(this);\n syncSize();\n this.#cleanupSizeObserver = observeMenuSize(this, syncSize);\n\n const positionOptions = getRootPositionOptions(state.side, state.align);\n if (!positionOptions || !this.#currentTrigger) return;\n\n this.#position.sync({\n anchorName: this.id,\n position: positionOptions,\n trigger: this.#currentTrigger,\n boundary: this.boundary,\n container: this.#containerCtx.value?.container ?? null,\n cssVars: MenuPositioningCSSVars,\n onSideChange: (side) => this.setAttribute(MenuDataAttrs.side, side),\n });\n }\n\n #updateAsSubmenu(state: ReturnType<MenuCore['getState']>, parentCtx: MenuContextValue): void {\n const isActive = state.open || state.status === 'ending';\n const triggerElement = this.parentElement?.querySelector<HTMLElement>(\n `[data-has-submenu][commandfor=\"${this.id}\"]`\n );\n\n this.#menu?.setTriggerElement(triggerElement ?? null);\n if (triggerElement) applyElementProps(triggerElement, this.#core.getTriggerAttrs(state, this.id));\n this.#syncTriggerMetadata(triggerElement ?? null);\n\n this.removeAttribute(MenuDataAttrs.side);\n this.removeAttribute(MenuDataAttrs.align);\n applyStateDataAttrs(this, state, MenuDataAttrs);\n\n applyElementProps(this, {\n hidden: !isActive,\n role: 'menu',\n tabIndex: -1,\n });\n\n this.#cleanupSizeObserver?.();\n const parentContentElement = parentCtx.menu.contentElement;\n const syncSize = () => syncMenuSizeChain(parentContentElement);\n syncSize();\n this.#cleanupSizeObserver =\n isActive && parentContentElement ? observeMenuSize(parentContentElement, syncSize) : null;\n\n if (isActive && !this.#submenuActive) {\n this.#menu?.highlightFirstItem({ preventScroll: true });\n } else if (!isActive && this.#submenuActive) {\n this.#menu?.restoreFocus({ preventScroll: true });\n }\n\n this.#submenuActive = isActive;\n }\n\n #handleContentKeyDown = (event: UIKeyboardEvent): void => {\n const isNavigationKey = isMenuNavigationKey(event);\n const defaultPreventedBeforeMenu = event.defaultPrevented;\n\n this.#menu?.contentProps.onKeyDown(event);\n\n const parentCtx = this.#parentCtx.value ?? null;\n\n if (!parentCtx) {\n if (event.key === 'Escape') return;\n if (isNavigationKey) {\n event.stopPropagation();\n }\n return;\n }\n\n const isBackNavigationKey = event.key === 'ArrowLeft' || event.key === 'Escape';\n\n if (isBackNavigationKey && !defaultPreventedBeforeMenu) {\n event.preventDefault();\n this.#menu?.close('escape');\n }\n\n if (isNavigationKey) event.stopPropagation();\n };\n\n #handleContentFocusOut = (event: UIFocusEvent): void => {\n this.#menu?.contentProps.onFocusOut(event);\n };\n\n #setTriggerMetadata = (metadata: MenuTriggerMetadata): void => {\n if (\n metadata.hint === this.#triggerMetadata.hint &&\n metadata.disabled === this.#triggerMetadata.disabled &&\n metadata.availability === this.#triggerMetadata.availability\n ) {\n return;\n }\n\n this.#triggerMetadata = metadata;\n if (metadata.disabled && this.open && this.#parentCtx.value) this.close('imperative-action');\n this.requestUpdate();\n };\n\n #syncTriggerMetadata(trigger: HTMLElement | null): void {\n if (trigger !== this.#metadataTrigger) {\n this.#clearTriggerMetadata();\n this.#metadataTrigger = trigger;\n }\n\n if (!trigger) return;\n\n const disabled = this.#triggerMetadata.disabled || isTriggerExplicitlyDisabled(trigger);\n applyElementProps(trigger, {\n 'aria-disabled': disabled ? 'true' : undefined,\n 'data-availability': this.#triggerMetadata.availability,\n });\n\n const hint = trigger.querySelector<HTMLElement>('[data-part~=\"hint\"]');\n if (hint && hint.textContent !== this.#triggerMetadata.hint) hint.textContent = this.#triggerMetadata.hint;\n }\n\n #clearTriggerMetadata(): void {\n const trigger = this.#metadataTrigger;\n if (!trigger) return;\n\n applyElementProps(trigger, {\n 'aria-disabled': isTriggerExplicitlyDisabled(trigger) ? 'true' : undefined,\n 'data-availability': undefined,\n });\n\n const hint = trigger.querySelector<HTMLElement>('[data-part~=\"hint\"]');\n if (hint?.textContent) hint.textContent = '';\n this.#metadataTrigger = null;\n }\n\n #syncTrigger(triggerElement: HTMLElement | null): void {\n if (triggerElement === this.#currentTrigger) return;\n\n this.#position.cleanup();\n this.#cleanupTrigger();\n this.#currentTrigger = triggerElement;\n this.#menu?.setTriggerElement(triggerElement);\n\n if (triggerElement && this.#menu) {\n this.#triggerAbort = new AbortController();\n applyElementProps(triggerElement, this.#menu.triggerProps, { signal: this.#triggerAbort.signal });\n }\n }\n\n #cleanupTrigger(): void {\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, {\n 'aria-expanded': undefined,\n 'aria-haspopup': undefined,\n 'aria-controls': undefined,\n });\n }\n\n this.#triggerAbort?.abort();\n this.#triggerAbort = null;\n this.#currentTrigger = null;\n }\n}\n\nfunction isTriggerExplicitlyDisabled(trigger: HTMLElement): boolean {\n return (\n trigger.hasAttribute('disabled') ||\n ('disabled' in trigger && (trigger as HTMLElement & { disabled?: boolean }).disabled === true)\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"menu-element.js","names":["#menu","#parentCtx","#triggerState","#core","#provider","#position","#controlsState","#containerCtx","#popupGroupCtx","#disconnect","#handleContentKeyDown","#handleContentFocusOut","#snapshot","#releaseControlsVisibilityLock","#cleanupSizeObserver","#syncTriggerState","#cleanupTrigger","#cleanupParentRegistration","#registeredParentMenu","#syncParentRegistration","#releaseControlsLock","#updateAsSubmenu","#updateAsRoot","#setTriggerState","#syncTrigger","#currentTrigger","#submenuActive","#stateTrigger","#clearTriggerState","#triggerAbort"],"sources":["../../../../src/ui/menu/menu-element.ts"],"sourcesContent":["import { MenuCore, MenuDataAttrs, type MenuInput, POPUP_HOST_ATTR } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createMenu,\n createTransition,\n getRootPositionOptions,\n isMenuNavigationKey,\n type MenuApi,\n type MenuChangeDetails,\n type MenuOpenChangeReason,\n MenuPositioningCSSVars,\n observeMenuSize,\n type PositioningBoundary,\n selectControls,\n syncMenuSizeChain,\n type UIFocusEvent,\n type UIKeyboardEvent,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer, ContextProvider } from '@videojs/element/context';\nimport { SnapshotController } from '@videojs/store/html';\nimport { tryHidePopover, tryShowPopover } from '@videojs/utils/dom';\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { popupGroupContext } from '../../player/popup-group-context';\nimport { MediaElement } from '../media-element';\nimport { PositionController } from '../position-controller';\nimport { type MenuContextValue, type MenuTriggerState, menuContext } from './context';\n\nconst defaultTriggerState: MenuTriggerState = {\n hint: '',\n disabled: false,\n};\n\nexport class MenuElement extends MediaElement {\n static readonly tagName: string = 'media-menu';\n\n static override properties = {\n open: { type: Boolean },\n defaultOpen: { type: Boolean, attribute: 'default-open' },\n side: { type: String },\n align: { type: String },\n closeOnEscape: { type: Boolean, attribute: 'close-on-escape' },\n closeOnOutsideClick: { type: Boolean, attribute: 'close-on-outside-click' },\n boundary: { type: String },\n } satisfies PropertyDeclarationMap<\n 'open' | 'defaultOpen' | 'side' | 'align' | 'closeOnEscape' | 'closeOnOutsideClick' | 'boundary'\n >;\n\n open = MenuCore.defaultProps.open;\n defaultOpen = MenuCore.defaultProps.defaultOpen;\n side = MenuCore.defaultProps.side;\n align = MenuCore.defaultProps.align;\n closeOnEscape = MenuCore.defaultProps.closeOnEscape;\n closeOnOutsideClick = MenuCore.defaultProps.closeOnOutsideClick;\n boundary: PositioningBoundary = 'container';\n\n readonly #core = new MenuCore();\n readonly #provider = new ContextProvider(this, { context: menuContext });\n readonly #position = new PositionController(this);\n readonly #controlsState = new PlayerController(this, playerContext, selectControls);\n readonly #containerCtx = new ContextConsumer(this, { context: containerContext, subscribe: true });\n readonly #popupGroupCtx = new ContextConsumer(this, { context: popupGroupContext });\n // Consume parent menu context — present when this is a nested (submenu) element.\n readonly #parentCtx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n #menu: MenuApi | null = null;\n #snapshot: SnapshotController<MenuInput> | null = null;\n #submenuActive = false;\n\n #disconnect: AbortController | null = null;\n #triggerAbort: AbortController | null = null;\n #cleanupSizeObserver: (() => void) | null = null;\n #currentTrigger: HTMLElement | null = null;\n #stateTrigger: HTMLElement | null = null;\n #triggerState = defaultTriggerState;\n #releaseControlsLock: (() => void) | null = null;\n #registeredParentMenu: MenuApi | null = null;\n #cleanupParentRegistration: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.setAttribute(POPUP_HOST_ATTR, '');\n\n this.#disconnect = new AbortController();\n\n this.#menu = createMenu({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: MenuChangeDetails) => {\n const accepted = this.dispatchEvent(\n new CustomEvent('open-change', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: { open: nextOpen, ...details },\n })\n );\n if (accepted) this.open = nextOpen;\n },\n closeOnEscape: () => this.closeOnEscape,\n closeOnOutsideClick: () => this.closeOnOutsideClick,\n group: () => (this.#parentCtx.value ? undefined : this.#popupGroupCtx.value),\n });\n\n // The element itself is the content (popup) for root menus.\n // Submenu detection happens in update() once parent context is available.\n this.#menu.setContentElement(this);\n\n applyElementProps(\n this,\n { onKeyDown: this.#handleContentKeyDown, onFocusOut: this.#handleContentFocusOut },\n { signal: this.#disconnect.signal }\n );\n\n if (this.#snapshot) {\n this.#snapshot.track(this.#menu.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#menu.input);\n }\n }\n\n override disconnectedCallback(): void {\n this.#releaseControlsVisibilityLock();\n super.disconnectedCallback();\n this.#cleanupSizeObserver?.();\n this.#cleanupSizeObserver = null;\n this.#syncTriggerState(null);\n this.#cleanupTrigger();\n this.#cleanupParentRegistration?.();\n this.#cleanupParentRegistration = null;\n this.#registeredParentMenu = null;\n this.#menu?.destroy();\n this.#menu = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n close(reason: MenuOpenChangeReason = 'imperative-action'): void {\n this.#menu?.close(reason);\n }\n\n openMenu(reason: MenuOpenChangeReason = 'imperative-action'): void {\n this.#menu?.open(reason);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n\n if (!this.hasUpdated && this.defaultOpen && !this.open) this.open = true;\n\n const parentCtx = this.#parentCtx.value ?? null;\n this.#syncParentRegistration(parentCtx);\n\n this.#core.setProps({\n open: this.open,\n defaultOpen: this.defaultOpen,\n side: this.side,\n align: this.align,\n closeOnEscape: this.closeOnEscape,\n closeOnOutsideClick: this.closeOnOutsideClick,\n });\n\n if (this.#menu && changed.has('open')) {\n this.#menu.syncOpen(this.open);\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n if (!this.#menu) return;\n\n const parentCtx = this.#parentCtx.value ?? null;\n const isSubmenu = parentCtx !== null;\n\n const input = this.#menu.input.current;\n this.#core.setInput({ ...input, isSubmenu });\n const state = this.#core.getState();\n\n if (!isSubmenu && state.open) {\n this.#releaseControlsLock ??= this.#controlsState.value?.requestControlsLock() ?? null;\n } else {\n this.#releaseControlsVisibilityLock();\n }\n\n if (isSubmenu && parentCtx) {\n this.#updateAsSubmenu(state, parentCtx);\n } else {\n this.#updateAsRoot(state);\n }\n\n // Provide context to child parts.\n this.#provider.setValue({\n menu: this.#menu,\n state,\n stateAttrMap: MenuDataAttrs,\n setTriggerState: this.#setTriggerState,\n });\n }\n\n #releaseControlsVisibilityLock(): void {\n this.#releaseControlsLock?.();\n this.#releaseControlsLock = null;\n }\n\n #syncParentRegistration(parentCtx: MenuContextValue | null): void {\n const parentMenu = parentCtx?.menu ?? null;\n if (parentMenu === this.#registeredParentMenu || !this.#menu) return;\n\n this.#cleanupParentRegistration?.();\n this.#registeredParentMenu = parentMenu;\n this.#cleanupParentRegistration = parentMenu?.registerSubmenu(this.#menu) ?? null;\n }\n\n #updateAsRoot(state: ReturnType<MenuCore['getState']>): void {\n if (!this.#menu) return;\n\n const triggerElement = this.#position.findTrigger();\n this.#syncTrigger(triggerElement);\n\n applyElementProps(this, {\n ...this.#core.getContentAttrs(state),\n });\n applyStateDataAttrs(this, state, MenuDataAttrs);\n\n if (state.open) {\n tryShowPopover(this);\n } else {\n tryHidePopover(this);\n }\n\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, this.#core.getTriggerAttrs(state, this.id));\n }\n\n if (!state.open) {\n this.#cleanupSizeObserver?.();\n this.#cleanupSizeObserver = null;\n this.#position.cleanup();\n return;\n }\n\n this.#cleanupSizeObserver?.();\n const syncSize = () => syncMenuSizeChain(this);\n syncSize();\n this.#cleanupSizeObserver = observeMenuSize(this, syncSize);\n\n const positionOptions = getRootPositionOptions(state.side, state.align);\n if (!positionOptions || !this.#currentTrigger) return;\n\n this.#position.sync({\n anchorName: this.id,\n position: positionOptions,\n trigger: this.#currentTrigger,\n boundary: this.boundary,\n container: this.#containerCtx.value?.container ?? null,\n cssVars: MenuPositioningCSSVars,\n onSideChange: (side) => this.setAttribute(MenuDataAttrs.side, side),\n });\n }\n\n #updateAsSubmenu(state: ReturnType<MenuCore['getState']>, parentCtx: MenuContextValue): void {\n const isActive = state.open || state.status === 'ending';\n const triggerElement = this.parentElement?.querySelector<HTMLElement>(\n `[data-has-submenu][commandfor=\"${this.id}\"]`\n );\n\n this.#menu?.setTriggerElement(triggerElement ?? null);\n if (triggerElement) applyElementProps(triggerElement, this.#core.getTriggerAttrs(state, this.id));\n this.#syncTriggerState(triggerElement ?? null);\n\n this.removeAttribute(MenuDataAttrs.side);\n this.removeAttribute(MenuDataAttrs.align);\n applyStateDataAttrs(this, state, MenuDataAttrs);\n\n applyElementProps(this, {\n hidden: !isActive,\n role: 'menu',\n tabIndex: -1,\n });\n\n this.#cleanupSizeObserver?.();\n const parentContentElement = parentCtx.menu.contentElement;\n const syncSize = () => syncMenuSizeChain(parentContentElement);\n syncSize();\n this.#cleanupSizeObserver =\n isActive && parentContentElement ? observeMenuSize(parentContentElement, syncSize) : null;\n\n if (isActive && !this.#submenuActive) {\n this.#menu?.highlightFirstItem({ preventScroll: true });\n } else if (!isActive && this.#submenuActive) {\n this.#menu?.restoreFocus({ preventScroll: true });\n }\n\n this.#submenuActive = isActive;\n }\n\n #handleContentKeyDown = (event: UIKeyboardEvent): void => {\n const isNavigationKey = isMenuNavigationKey(event);\n const defaultPreventedBeforeMenu = event.defaultPrevented;\n\n this.#menu?.contentProps.onKeyDown(event);\n\n const parentCtx = this.#parentCtx.value ?? null;\n\n if (!parentCtx) {\n if (event.key === 'Escape') return;\n if (isNavigationKey) {\n event.stopPropagation();\n }\n return;\n }\n\n const isBackNavigationKey = event.key === 'ArrowLeft' || event.key === 'Escape';\n\n if (isBackNavigationKey && !defaultPreventedBeforeMenu) {\n event.preventDefault();\n this.#menu?.close('escape');\n }\n\n if (isNavigationKey) event.stopPropagation();\n };\n\n #handleContentFocusOut = (event: UIFocusEvent): void => {\n this.#menu?.contentProps.onFocusOut(event);\n };\n\n #setTriggerState = (triggerState: MenuTriggerState): void => {\n if (\n triggerState.hint === this.#triggerState.hint &&\n triggerState.disabled === this.#triggerState.disabled &&\n triggerState.availability === this.#triggerState.availability\n ) {\n return;\n }\n\n this.#triggerState = triggerState;\n if (triggerState.disabled && this.open && this.#parentCtx.value) this.close('imperative-action');\n this.requestUpdate();\n };\n\n #syncTriggerState(trigger: HTMLElement | null): void {\n if (trigger !== this.#stateTrigger) {\n this.#clearTriggerState();\n this.#stateTrigger = trigger;\n }\n\n if (!trigger) return;\n\n const disabled = this.#triggerState.disabled || isTriggerExplicitlyDisabled(trigger);\n applyElementProps(trigger, {\n 'aria-disabled': disabled ? 'true' : undefined,\n 'data-availability': this.#triggerState.availability,\n });\n\n const hint = trigger.querySelector<HTMLElement>('[data-part~=\"hint\"]');\n if (hint && hint.textContent !== this.#triggerState.hint) hint.textContent = this.#triggerState.hint;\n }\n\n #clearTriggerState(): void {\n const trigger = this.#stateTrigger;\n if (!trigger) return;\n\n applyElementProps(trigger, {\n 'aria-disabled': isTriggerExplicitlyDisabled(trigger) ? 'true' : undefined,\n 'data-availability': undefined,\n });\n\n const hint = trigger.querySelector<HTMLElement>('[data-part~=\"hint\"]');\n if (hint?.textContent) hint.textContent = '';\n this.#stateTrigger = null;\n }\n\n #syncTrigger(triggerElement: HTMLElement | null): void {\n if (triggerElement === this.#currentTrigger) return;\n\n this.#position.cleanup();\n this.#cleanupTrigger();\n this.#currentTrigger = triggerElement;\n this.#menu?.setTriggerElement(triggerElement);\n\n if (triggerElement && this.#menu) {\n this.#triggerAbort = new AbortController();\n applyElementProps(triggerElement, this.#menu.triggerProps, { signal: this.#triggerAbort.signal });\n }\n }\n\n #cleanupTrigger(): void {\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, {\n 'aria-expanded': undefined,\n 'aria-haspopup': undefined,\n 'aria-controls': undefined,\n });\n }\n\n this.#triggerAbort?.abort();\n this.#triggerAbort = null;\n this.#currentTrigger = null;\n }\n}\n\nfunction isTriggerExplicitlyDisabled(trigger: HTMLElement): boolean {\n return (\n trigger.hasAttribute('disabled') ||\n ('disabled' in trigger && (trigger as HTMLElement & { disabled?: boolean }).disabled === true)\n );\n}\n"],"mappings":"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"}
@@ -10,7 +10,7 @@ declare class MenuRadioGroupElement extends RadioGroupElement {
10
10
  protected setItemLabel(item: MenuRadioItemElement, label: string): void;
11
11
  /** Applies a generated fallback without replacing an author-provided accessible name. */
12
12
  protected applyDefaultAriaLabel(label: string): void;
13
- protected publishMenuMetadata(disabled: boolean, availability?: 'available' | 'unavailable' | 'unsupported'): void;
13
+ protected publishMenuTriggerState(disabled: boolean, availability?: 'available' | 'unavailable' | 'unsupported'): void;
14
14
  }
15
15
  //#endregion
16
16
  export { MenuRadioGroupElement };
@@ -1 +1 @@
1
- {"version":3,"file":"menu-radio-group-element.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-radio-group-element.ts"],"mappings":";;;;cASa,8BAA8B;;kBACzB;EAQP;YAKU,OAAO,SAAS;YAMzB,aAAa,MAAM,sBAAsB;;YAWzC,sBAAsB;YAUtB,oBAAoB,mBAAmB"}
1
+ {"version":3,"file":"menu-radio-group-element.d.ts","names":[],"sources":["../../../../src/ui/menu/menu-radio-group-element.ts"],"mappings":";;;;cASa,8BAA8B;;kBACzB;EAQP;YAKU,OAAO,SAAS;YAMzB,aAAa,MAAM,sBAAsB;;YAWzC,sBAAsB;YAUtB,wBACR,mBACA"}
@@ -15,10 +15,10 @@ var MenuRadioGroupElement = class extends RadioGroupElement {
15
15
  subscribe: true
16
16
  });
17
17
  #ariaLabel = null;
18
- #metadataMenu = null;
19
- #setTriggerMetadata = null;
18
+ #triggerMenu = null;
19
+ #setTriggerState = null;
20
20
  disconnectedCallback() {
21
- this.#clearMenuMetadata();
21
+ this.#clearMenuTriggerState();
22
22
  super.disconnectedCallback();
23
23
  }
24
24
  update(changed) {
@@ -38,29 +38,29 @@ var MenuRadioGroupElement = class extends RadioGroupElement {
38
38
  this.#ariaLabel = label;
39
39
  this.setAttribute("aria-label", label);
40
40
  }
41
- publishMenuMetadata(disabled, availability) {
41
+ publishMenuTriggerState(disabled, availability) {
42
42
  const context = this.#menu.value ?? null;
43
- if (context?.menu !== this.#metadataMenu) {
44
- this.#clearMenuMetadata();
45
- this.#metadataMenu = context?.menu ?? null;
46
- this.#setTriggerMetadata = context?.setTriggerMetadata ?? null;
43
+ if (context?.menu !== this.#triggerMenu) {
44
+ this.#clearMenuTriggerState();
45
+ this.#triggerMenu = context?.menu ?? null;
46
+ this.#setTriggerState = context?.setTriggerState ?? null;
47
47
  }
48
- if (!this.#setTriggerMetadata) return;
48
+ if (!this.#setTriggerState) return;
49
49
  const selectedItem = findElementChild(this, (item) => item instanceof MenuRadioItemElement && item.value === this.value);
50
50
  const hint = selectedItem?.querySelector("[data-part~=\"label\"]")?.textContent ?? selectedItem?.textContent?.trim() ?? "";
51
- this.#setTriggerMetadata({
51
+ this.#setTriggerState({
52
52
  hint,
53
53
  disabled,
54
54
  availability
55
55
  });
56
56
  }
57
- #clearMenuMetadata() {
58
- this.#setTriggerMetadata?.({
57
+ #clearMenuTriggerState() {
58
+ this.#setTriggerState?.({
59
59
  hint: "",
60
60
  disabled: false
61
61
  });
62
- this.#metadataMenu = null;
63
- this.#setTriggerMetadata = null;
62
+ this.#triggerMenu = null;
63
+ this.#setTriggerState = null;
64
64
  }
65
65
  };
66
66
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"menu-radio-group-element.js","names":["#group","#menu","#clearMenuMetadata","#ariaLabel","#metadataMenu","#setTriggerMetadata"],"sources":["../../../../src/ui/menu/menu-radio-group-element.ts"],"sourcesContent":["import type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { findElementChild } from '@videojs/utils/dom';\n\nimport { RadioGroupElement } from '../radio-group/radio-group-element';\nimport { type MenuContextValue, type MenuTriggerMetadata, menuContext } from './context';\nimport { MenuGroupController } from './menu-group-controller';\nimport { MenuRadioItemElement } from './menu-radio-item-element';\n\nexport class MenuRadioGroupElement extends RadioGroupElement {\n static readonly tagName: string = 'media-menu-radio-group';\n\n readonly #group = new MenuGroupController(this);\n readonly #menu = new ContextConsumer(this, { context: menuContext, subscribe: true });\n #ariaLabel: string | null = null;\n #metadataMenu: MenuContextValue['menu'] | null = null;\n #setTriggerMetadata: ((metadata: MenuTriggerMetadata) => void) | null = null;\n\n override disconnectedCallback(): void {\n this.#clearMenuMetadata();\n super.disconnectedCallback();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n this.#group.applyProps();\n }\n\n protected setItemLabel(item: MenuRadioItemElement, label: string): void {\n const labelPart = item.querySelector<HTMLElement>('[data-part~=\"label\"]');\n\n if (labelPart) {\n labelPart.textContent = label;\n } else {\n item.textContent = label;\n }\n }\n\n /** Applies a generated fallback without replacing an author-provided accessible name. */\n protected applyDefaultAriaLabel(label: string): void {\n if (this.hasAttribute('aria-labelledby')) return;\n\n const current = this.getAttribute('aria-label');\n if (current !== null && current !== this.#ariaLabel) return;\n\n this.#ariaLabel = label;\n this.setAttribute('aria-label', label);\n }\n\n protected publishMenuMetadata(disabled: boolean, availability?: 'available' | 'unavailable' | 'unsupported'): void {\n const context = this.#menu.value ?? null;\n\n if (context?.menu !== this.#metadataMenu) {\n this.#clearMenuMetadata();\n this.#metadataMenu = context?.menu ?? null;\n this.#setTriggerMetadata = context?.setTriggerMetadata ?? null;\n }\n\n if (!this.#setTriggerMetadata) return;\n\n const selectedItem = findElementChild(\n this,\n (item): item is MenuRadioItemElement => item instanceof MenuRadioItemElement && item.value === this.value\n );\n const label = selectedItem?.querySelector<HTMLElement>('[data-part~=\"label\"]')?.textContent;\n const hint = label ?? selectedItem?.textContent?.trim() ?? '';\n\n this.#setTriggerMetadata({ hint, disabled, availability });\n }\n\n #clearMenuMetadata(): void {\n this.#setTriggerMetadata?.({ hint: '', disabled: false });\n this.#metadataMenu = null;\n this.#setTriggerMetadata = null;\n }\n}\n"],"mappings":";;;;;;;AASA,IAAa,wBAAb,cAA2C,kBAAkB;;EACzB,KAAA,UAAA;;CAElC,SAAkB,IAAI,oBAAoB,IAAI;CAC9C,QAAiB,IAAI,gBAAgB,MAAM;EAAE,SAAS;EAAa,WAAW;CAAK,CAAC;CACpF,aAA4B;CAC5B,gBAAiD;CACjD,sBAAwE;CAExE,uBAAsC;EACpC,KAAKE,mBAAmB;EACxB,MAAM,qBAAqB;CAC7B;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,KAAKF,OAAO,WAAW;CACzB;CAEA,aAAuB,MAA4B,OAAqB;EACtE,MAAM,YAAY,KAAK,cAA2B,wBAAsB;EAExE,IAAI,WACF,UAAU,cAAc;OAExB,KAAK,cAAc;CAEvB;;CAGA,sBAAgC,OAAqB;EACnD,IAAI,KAAK,aAAa,iBAAiB,GAAG;EAE1C,MAAM,UAAU,KAAK,aAAa,YAAY;EAC9C,IAAI,YAAY,QAAQ,YAAY,KAAKG,YAAY;EAErD,KAAKA,aAAa;EAClB,KAAK,aAAa,cAAc,KAAK;CACvC;CAEA,oBAA8B,UAAmB,cAAkE;EACjH,MAAM,UAAU,KAAKF,MAAM,SAAS;EAEpC,IAAI,SAAS,SAAS,KAAKG,eAAe;GACxC,KAAKF,mBAAmB;GACxB,KAAKE,gBAAgB,SAAS,QAAQ;GACtC,KAAKC,sBAAsB,SAAS,sBAAsB;EAC5D;EAEA,IAAI,CAAC,KAAKA,qBAAqB;EAE/B,MAAM,eAAe,iBACnB,OACC,SAAuC,gBAAgB,wBAAwB,KAAK,UAAU,KAAK,KACtG;EAEA,MAAM,OADQ,cAAc,cAA2B,wBAAsB,CAAC,EAAE,eAC1D,cAAc,aAAa,KAAK,KAAK;EAE3D,KAAKA,oBAAoB;GAAE;GAAM;GAAU;EAAa,CAAC;CAC3D;CAEA,qBAA2B;EACzB,KAAKA,sBAAsB;GAAE,MAAM;GAAI,UAAU;EAAM,CAAC;EACxD,KAAKD,gBAAgB;EACrB,KAAKC,sBAAsB;CAC7B;AACF"}
1
+ {"version":3,"file":"menu-radio-group-element.js","names":["#group","#menu","#clearMenuTriggerState","#ariaLabel","#triggerMenu","#setTriggerState"],"sources":["../../../../src/ui/menu/menu-radio-group-element.ts"],"sourcesContent":["import type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { findElementChild } from '@videojs/utils/dom';\n\nimport { RadioGroupElement } from '../radio-group/radio-group-element';\nimport { type MenuContextValue, type MenuTriggerState, menuContext } from './context';\nimport { MenuGroupController } from './menu-group-controller';\nimport { MenuRadioItemElement } from './menu-radio-item-element';\n\nexport class MenuRadioGroupElement extends RadioGroupElement {\n static readonly tagName: string = 'media-menu-radio-group';\n\n readonly #group = new MenuGroupController(this);\n readonly #menu = new ContextConsumer(this, { context: menuContext, subscribe: true });\n #ariaLabel: string | null = null;\n #triggerMenu: MenuContextValue['menu'] | null = null;\n #setTriggerState: ((state: MenuTriggerState) => void) | null = null;\n\n override disconnectedCallback(): void {\n this.#clearMenuTriggerState();\n super.disconnectedCallback();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n this.#group.applyProps();\n }\n\n protected setItemLabel(item: MenuRadioItemElement, label: string): void {\n const labelPart = item.querySelector<HTMLElement>('[data-part~=\"label\"]');\n\n if (labelPart) {\n labelPart.textContent = label;\n } else {\n item.textContent = label;\n }\n }\n\n /** Applies a generated fallback without replacing an author-provided accessible name. */\n protected applyDefaultAriaLabel(label: string): void {\n if (this.hasAttribute('aria-labelledby')) return;\n\n const current = this.getAttribute('aria-label');\n if (current !== null && current !== this.#ariaLabel) return;\n\n this.#ariaLabel = label;\n this.setAttribute('aria-label', label);\n }\n\n protected publishMenuTriggerState(\n disabled: boolean,\n availability?: 'available' | 'unavailable' | 'unsupported'\n ): void {\n const context = this.#menu.value ?? null;\n\n if (context?.menu !== this.#triggerMenu) {\n this.#clearMenuTriggerState();\n this.#triggerMenu = context?.menu ?? null;\n this.#setTriggerState = context?.setTriggerState ?? null;\n }\n\n if (!this.#setTriggerState) return;\n\n const selectedItem = findElementChild(\n this,\n (item): item is MenuRadioItemElement => item instanceof MenuRadioItemElement && item.value === this.value\n );\n const label = selectedItem?.querySelector<HTMLElement>('[data-part~=\"label\"]')?.textContent;\n const hint = label ?? selectedItem?.textContent?.trim() ?? '';\n\n this.#setTriggerState({ hint, disabled, availability });\n }\n\n #clearMenuTriggerState(): void {\n this.#setTriggerState?.({ hint: '', disabled: false });\n this.#triggerMenu = null;\n this.#setTriggerState = null;\n }\n}\n"],"mappings":";;;;;;;AASA,IAAa,wBAAb,cAA2C,kBAAkB;;EACzB,KAAA,UAAA;;CAElC,SAAkB,IAAI,oBAAoB,IAAI;CAC9C,QAAiB,IAAI,gBAAgB,MAAM;EAAE,SAAS;EAAa,WAAW;CAAK,CAAC;CACpF,aAA4B;CAC5B,eAAgD;CAChD,mBAA+D;CAE/D,uBAAsC;EACpC,KAAKE,uBAAuB;EAC5B,MAAM,qBAAqB;CAC7B;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,KAAKF,OAAO,WAAW;CACzB;CAEA,aAAuB,MAA4B,OAAqB;EACtE,MAAM,YAAY,KAAK,cAA2B,wBAAsB;EAExE,IAAI,WACF,UAAU,cAAc;OAExB,KAAK,cAAc;CAEvB;;CAGA,sBAAgC,OAAqB;EACnD,IAAI,KAAK,aAAa,iBAAiB,GAAG;EAE1C,MAAM,UAAU,KAAK,aAAa,YAAY;EAC9C,IAAI,YAAY,QAAQ,YAAY,KAAKG,YAAY;EAErD,KAAKA,aAAa;EAClB,KAAK,aAAa,cAAc,KAAK;CACvC;CAEA,wBACE,UACA,cACM;EACN,MAAM,UAAU,KAAKF,MAAM,SAAS;EAEpC,IAAI,SAAS,SAAS,KAAKG,cAAc;GACvC,KAAKF,uBAAuB;GAC5B,KAAKE,eAAe,SAAS,QAAQ;GACrC,KAAKC,mBAAmB,SAAS,mBAAmB;EACtD;EAEA,IAAI,CAAC,KAAKA,kBAAkB;EAE5B,MAAM,eAAe,iBACnB,OACC,SAAuC,gBAAgB,wBAAwB,KAAK,UAAU,KAAK,KACtG;EAEA,MAAM,OADQ,cAAc,cAA2B,wBAAsB,CAAC,EAAE,eAC1D,cAAc,aAAa,KAAK,KAAK;EAE3D,KAAKA,iBAAiB;GAAE;GAAM;GAAU;EAAa,CAAC;CACxD;CAEA,yBAA+B;EAC7B,KAAKA,mBAAmB;GAAE,MAAM;GAAI,UAAU;EAAM,CAAC;EACrD,KAAKD,eAAe;EACpB,KAAKC,mBAAmB;CAC1B;AACF"}
@@ -54,7 +54,7 @@ var PlaybackRateRadioGroupElement = class extends MenuRadioGroupElement {
54
54
  state = this.#core.getState();
55
55
  this.applyDefaultAriaLabel(translateText(this.#core.getLabel(state), this.#i18n.value, this.#core.getLabelParams(state)));
56
56
  this.#options.sync(state, this.#i18n.value, this.#i18n.locale);
57
- this.publishMenuMetadata(state.disabled, state.availability);
57
+ this.publishMenuTriggerState(state.disabled, state.availability);
58
58
  }
59
59
  super.update(changed);
60
60
  if (state) applyStateDataAttrs(this, state, PlaybackRateRadioGroupDataAttrs);
@@ -1 +1 @@
1
- {"version":3,"file":"playback-rate-radio-group-element.js","names":["#mediaState","#core","#i18n","#options"],"sources":["../../../../src/ui/playback-rate-radio-group/playback-rate-radio-group-element.ts"],"sourcesContent":["import {\n PlaybackRateRadioGroupCore,\n PlaybackRateRadioGroupDataAttrs,\n type PlaybackRateRadioGroupOption,\n} from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectPlaybackRate } from '@videojs/core/dom';\nimport { translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MenuRadioGroupElement } from '../menu/menu-radio-group-element';\nimport { RadioOptionsController } from '../radio-options/radio-options-controller';\n\nexport class PlaybackRateRadioGroupElement extends MenuRadioGroupElement {\n static override readonly tagName = 'media-playback-rate-radio-group';\n\n static override properties = {\n ...MenuRadioGroupElement.properties,\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<'value' | 'disabled'>;\n\n disabled = false;\n formatRate = PlaybackRateRadioGroupCore.defaultProps.formatRate;\n\n readonly #core = new PlaybackRateRadioGroupCore();\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #mediaState = new PlayerController(this, playerContext, selectPlaybackRate);\n readonly #options = new RadioOptionsController<PlaybackRateRadioGroupOption>(this, {\n setItemAttributes: (item, option) => item.setAttribute('data-rate', option.value),\n onValueChange: (value) => {\n const media = this.#mediaState.value;\n if (media) this.#core.selectValue(media, value);\n },\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n if (__DEV__ && !this.#mediaState.value && this.#mediaState.displayName) {\n logMissingFeature(this.localName, this.#mediaState.displayName);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n const media = this.#mediaState.value;\n let state: PlaybackRateRadioGroupCore.State | null = null;\n\n if (media) {\n this.#core.setProps({ formatRate: this.formatRate, disabled: this.disabled });\n this.#core.setMedia(media);\n state = this.#core.getState();\n\n this.applyDefaultAriaLabel(\n translateText(this.#core.getLabel(state), this.#i18n.value, this.#core.getLabelParams(state))\n );\n this.#options.sync(state, this.#i18n.value, this.#i18n.locale);\n this.publishMenuMetadata(state.disabled, state.availability);\n }\n\n super.update(changed);\n\n if (state) applyStateDataAttrs(this, state, PlaybackRateRadioGroupDataAttrs);\n }\n}\n\nexport namespace PlaybackRateRadioGroupElement {\n export type State = PlaybackRateRadioGroupCore.State;\n}\n"],"mappings":";;;;;;;;;;AAgBA,IAAa,gCAAb,cAAmD,sBAAsB;;;EAQ5D,KAAA,WAAA;EACE,KAAA,aAAA,2BAA2B,aAAa;EAEpC,KAAA,QAAA,IAAI,2BAA2B;EAC/B,KAAA,QAAA,IAAI,eAAe,MAAM,WAAW;EAC9B,KAAA,cAAA,IAAI,iBAAiB,MAAM,eAAe,kBAAkB;EAC/D,KAAA,WAAA,IAAI,uBAAqD,MAAM;GACjF,oBAAoB,MAAM,WAAW,KAAK,aAAa,aAAa,OAAO,KAAK;GAChF,gBAAgB,UAAU;IACxB,MAAM,QAAQ,KAAKA,YAAY;IAC/B,IAAI,OAAO,KAAKC,MAAM,YAAY,OAAO,KAAK;GAChD;EACF,CAAC;;;EAnBkC,KAAA,UAAA;;;EAEN,KAAA,aAAA;GAC3B,GAAG,sBAAsB;GACzB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CAKA;CACA;CACA;CACA;CAQA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,IAAI,KAAK,WAAW;EAEpB,IAAe,CAAC,KAAKD,YAAY,SAAS,KAAKA,YAAY,aACzD,kBAAkB,KAAK,WAAW,KAAKA,YAAY,WAAW;CAElE;CAEA,OAA0B,SAA+B;EACvD,MAAM,QAAQ,KAAKA,YAAY;EAC/B,IAAI,QAAiD;EAErD,IAAI,OAAO;GACT,KAAKC,MAAM,SAAS;IAAE,YAAY,KAAK;IAAY,UAAU,KAAK;GAAS,CAAC;GAC5E,KAAKA,MAAM,SAAS,KAAK;GACzB,QAAQ,KAAKA,MAAM,SAAS;GAE5B,KAAK,sBACH,cAAc,KAAKA,MAAM,SAAS,KAAK,GAAG,KAAKC,MAAM,OAAO,KAAKD,MAAM,eAAe,KAAK,CAAC,CAC9F;GACA,KAAKE,SAAS,KAAK,OAAO,KAAKD,MAAM,OAAO,KAAKA,MAAM,MAAM;GAC7D,KAAK,oBAAoB,MAAM,UAAU,MAAM,YAAY;EAC7D;EAEA,MAAM,OAAO,OAAO;EAEpB,IAAI,OAAO,oBAAoB,MAAM,OAAO,+BAA+B;CAC7E;AACF"}
1
+ {"version":3,"file":"playback-rate-radio-group-element.js","names":["#mediaState","#core","#i18n","#options"],"sources":["../../../../src/ui/playback-rate-radio-group/playback-rate-radio-group-element.ts"],"sourcesContent":["import {\n PlaybackRateRadioGroupCore,\n PlaybackRateRadioGroupDataAttrs,\n type PlaybackRateRadioGroupOption,\n} from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectPlaybackRate } from '@videojs/core/dom';\nimport { translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MenuRadioGroupElement } from '../menu/menu-radio-group-element';\nimport { RadioOptionsController } from '../radio-options/radio-options-controller';\n\nexport class PlaybackRateRadioGroupElement extends MenuRadioGroupElement {\n static override readonly tagName = 'media-playback-rate-radio-group';\n\n static override properties = {\n ...MenuRadioGroupElement.properties,\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<'value' | 'disabled'>;\n\n disabled = false;\n formatRate = PlaybackRateRadioGroupCore.defaultProps.formatRate;\n\n readonly #core = new PlaybackRateRadioGroupCore();\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #mediaState = new PlayerController(this, playerContext, selectPlaybackRate);\n readonly #options = new RadioOptionsController<PlaybackRateRadioGroupOption>(this, {\n setItemAttributes: (item, option) => item.setAttribute('data-rate', option.value),\n onValueChange: (value) => {\n const media = this.#mediaState.value;\n if (media) this.#core.selectValue(media, value);\n },\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n if (__DEV__ && !this.#mediaState.value && this.#mediaState.displayName) {\n logMissingFeature(this.localName, this.#mediaState.displayName);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n const media = this.#mediaState.value;\n let state: PlaybackRateRadioGroupCore.State | null = null;\n\n if (media) {\n this.#core.setProps({ formatRate: this.formatRate, disabled: this.disabled });\n this.#core.setMedia(media);\n state = this.#core.getState();\n\n this.applyDefaultAriaLabel(\n translateText(this.#core.getLabel(state), this.#i18n.value, this.#core.getLabelParams(state))\n );\n this.#options.sync(state, this.#i18n.value, this.#i18n.locale);\n this.publishMenuTriggerState(state.disabled, state.availability);\n }\n\n super.update(changed);\n\n if (state) applyStateDataAttrs(this, state, PlaybackRateRadioGroupDataAttrs);\n }\n}\n\nexport namespace PlaybackRateRadioGroupElement {\n export type State = PlaybackRateRadioGroupCore.State;\n}\n"],"mappings":";;;;;;;;;;AAgBA,IAAa,gCAAb,cAAmD,sBAAsB;;;EAQ5D,KAAA,WAAA;EACE,KAAA,aAAA,2BAA2B,aAAa;EAEpC,KAAA,QAAA,IAAI,2BAA2B;EAC/B,KAAA,QAAA,IAAI,eAAe,MAAM,WAAW;EAC9B,KAAA,cAAA,IAAI,iBAAiB,MAAM,eAAe,kBAAkB;EAC/D,KAAA,WAAA,IAAI,uBAAqD,MAAM;GACjF,oBAAoB,MAAM,WAAW,KAAK,aAAa,aAAa,OAAO,KAAK;GAChF,gBAAgB,UAAU;IACxB,MAAM,QAAQ,KAAKA,YAAY;IAC/B,IAAI,OAAO,KAAKC,MAAM,YAAY,OAAO,KAAK;GAChD;EACF,CAAC;;;EAnBkC,KAAA,UAAA;;;EAEN,KAAA,aAAA;GAC3B,GAAG,sBAAsB;GACzB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CAKA;CACA;CACA;CACA;CAQA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,IAAI,KAAK,WAAW;EAEpB,IAAe,CAAC,KAAKD,YAAY,SAAS,KAAKA,YAAY,aACzD,kBAAkB,KAAK,WAAW,KAAKA,YAAY,WAAW;CAElE;CAEA,OAA0B,SAA+B;EACvD,MAAM,QAAQ,KAAKA,YAAY;EAC/B,IAAI,QAAiD;EAErD,IAAI,OAAO;GACT,KAAKC,MAAM,SAAS;IAAE,YAAY,KAAK;IAAY,UAAU,KAAK;GAAS,CAAC;GAC5E,KAAKA,MAAM,SAAS,KAAK;GACzB,QAAQ,KAAKA,MAAM,SAAS;GAE5B,KAAK,sBACH,cAAc,KAAKA,MAAM,SAAS,KAAK,GAAG,KAAKC,MAAM,OAAO,KAAKD,MAAM,eAAe,KAAK,CAAC,CAC9F;GACA,KAAKE,SAAS,KAAK,OAAO,KAAKD,MAAM,OAAO,KAAKA,MAAM,MAAM;GAC7D,KAAK,wBAAwB,MAAM,UAAU,MAAM,YAAY;EACjE;EAEA,MAAM,OAAO,OAAO;EAEpB,IAAI,OAAO,oBAAoB,MAAM,OAAO,+BAA+B;CAC7E;AACF"}
@@ -1,25 +1,27 @@
1
- import { PlayerController } from "../../player/player-controller.js";
2
- import { MediaUIElement } from "../media-ui-element.js";
3
- import { index_d_exports } from "../../index.js";
4
- import { PosterCore } from "@videojs/core";
1
+ import { MediaElement } from "../media-element.js";
2
+ import { PropertyValues } from "@videojs/element";
5
3
  //#region src/ui/poster/poster-element.d.ts
6
- declare class PosterElement extends MediaUIElement<PosterCore> {
4
+ /**
5
+ * `<media-poster>` — sets `src` on a poster image it does not own.
6
+ *
7
+ * The image is a child, as in `<picture>`, but sourcing runs the other way
8
+ * around: `<picture>` treats the `src` on its `<img>` as the fallback, while
9
+ * here an image with no source of its own is the one this element fills in.
10
+ * Give the child a `src`, a `srcset`, or `<source>` candidates and it is yours,
11
+ * left alone.
12
+ *
13
+ * Renders no image of its own, so include one:
14
+ * `<media-poster><img alt=""></media-poster>`. Inside a skin, an
15
+ * `<img slot="poster">` of yours replaces the one the skin carries.
16
+ */
17
+ declare class PosterElement extends MediaElement {
18
+ #private;
7
19
  static readonly tagName = "media-poster";
8
20
  static get observedAttributes(): string[];
9
- protected readonly core: PosterCore;
10
- protected readonly stateAttrMap: {
11
- readonly visible: 'data-visible';
12
- };
13
- protected readonly mediaState: PlayerController<index_d_exports.AnyPlayerStore, {
14
- paused: boolean;
15
- ended: boolean;
16
- started: boolean;
17
- waiting: boolean;
18
- play: () => Promise<void>;
19
- pause: () => void;
20
- togglePaused: () => boolean;
21
- } | undefined>;
21
+ connectedCallback(): void;
22
22
  attributeChangedCallback(attr: string, oldValue: string | null, newValue: string | null): void;
23
+ disconnectedCallback(): void;
24
+ protected update(changed: PropertyValues): void;
23
25
  }
24
26
  //#endregion
25
27
  export { PosterElement };
@@ -1 +1 @@
1
- {"version":3,"file":"poster-element.d.ts","names":[],"sources":["../../../../src/ui/poster/poster-element.ts"],"mappings":";;;;;cAOa,sBAAsB,eAAe;kBAChC;aAEL;qBAKQ,MAAI;qBACJ;;;qBACA,YAAU,iBAFN,gBAEM;;;;;;;;;EAEpB,yBAAyB,cAAc,yBAAyB"}
1
+ {"version":3,"file":"poster-element.d.ts","names":[],"sources":["../../../../src/ui/poster/poster-element.ts"],"mappings":";;;;;;;;;;;;;;;;cAuEa,sBAAsB;;kBACjB;aAEL;EAoBF;EAiBA,yBAAyB,cAAc,yBAAyB;EAYhE;YAcU,OAAO,SAAS"}