@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compounds-C4YYLyL2.js","names":["ZERO_OFFSETS","OPPOSITE_SIDE","prefix","#target","#activationSubscribers","#shortcutSubscribers","#nextId","#bindings","#sortBindings","#connectDocument","#connect","#notify","#maybeDisconnect","#getActionBindings","#formatDisplayShortcut","#destroyed","#disconnect","#docDisconnect","#handleEvent","#close","#getDelay","#timer","#handles","#position","#options","#boundaryElement","#restorePopupStyles","#stopTracking","#startTracking","#applyAnchorStyles","#abort","#schedule","#stopObservingResize","#reposition","#restoreAnchorStyles","#capturePopupStyles","#popupStyles","#readStyle","#popupAnchor","#triggerAnchorName","#triggerAnchorAdded","#writeStyle","#input","#titleId","#descriptionId","#props","#clearTimer","#timer","#media","prefix","prefix","prefix","prefix","prefix","translateText","#props","#input","prefix","#props","#media","getVolumeLevel","resolveText","#props","#media","resolveText","#props","#input","localeCacheKey","INITIAL_STATE","#originTime","#props","#close","#getEffectiveSeekValue","#props","#input","translateText","#props","#snapshot","#seekStartTime","#seekTargetTime","#clearTimer","#close","#getLabels","#announce","#processSeekSnapshot","#processVolumeSnapshot","#shouldAnnounce","#schedule","#timer","INITIAL_STATE","#props","#close","#props","#media","#formatLocale","#getSeconds","#getToggleType","#getText","#getPhrase","#getDatetime","#props","#media","#formatLocale","#formatTimeAsPhrase","#announceValue","#wasPlayingBeforeDrag","#props","#input","#props","#isOpen","#lastCloseTime","#props","#close","#clearBoundaryTimers","#restartBoundary","#scheduleBoundaryClear","#clearBoundaryTimer","#boundaryTimer","#boundaryRestartTimer","#clearBoundaryRestartTimer","#media","#formatLocale","#host","#action","#getValue","#container","ContextConsumer","#connect","#disconnect","#unsubscribe","#i18n","#hotkeyRegistry","#disconnect","#syncHotkeyShortcut","#lastHotkeyShortcut","createContext","ContextProvider","#provider","createContext","#host","#provider","#contextValue","#registerLabel","ContextProvider","#appliedLabelId","#labelId","ContextConsumer","menuRadioGroupContext","#menuCtx","#groupCtx","#disconnect","#registered","#cleanupRegistration","#group","#menu","ContextConsumer","#clearMenuTriggerState","#ariaLabel","#triggerMenu","#setTriggerState","#host","#config","#disconnect","#handleValueChange","#contentKey","#translator","#setItemLabel","#core","#state","#disconnect","ContextConsumer","#player","#container","#register","#unregister","#cleanup","#host","#positioner","#releaseImplicitBinding","#implicitBinding","ContextConsumer","#core","#containerCtx","#popupGroupCtx","#position","#disconnect","#popover","#snapshot","#cleanupTrigger","#syncTrigger","#currentTrigger","#triggerAbort","createContext","createContext","ContextConsumer","#ctx","#disconnect","#applyState","ContextConsumer","ContextConsumer","createContext","#core","#mediaState","#provider","ContextProvider","#visible","#closeOwnedOverlays","ContextConsumer","idCounter","hasAuthoredContent","#core","#provider","ContextProvider","#titleId","#descriptionId","#errorState","#i18n","#dialog","#snapshot","#lastError","#syncDialogCopy","#lastDescription","#hasAuthoredCopy","#seenCopyParts","#authoredCopyParts","ContextConsumer","#ctx","#disconnect","#registered","#cleanupRegistration","ContextProvider","ContextConsumer","#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","#group","#groupCtx","ContextConsumer","#generatedId","#cleanupRegistration","#registeredId","#registerLabel","ContextConsumer","#ctx","#disconnect","#cleanupRegistration","#registeredMenu","#isDisabled","#openSubmenu","ContextConsumer","#reconnect","#visibilityHandle","#snapshot","#disconnect","#inputActionUnsubscribe","#visibilityUnsubscribe","#syncTransition","#payloadSnapshot","#lastGeneration","#getVisibilityHandle","#host","#dataAttrs","#render","#core","#transition","#liveIndicator","ContextConsumer","ContextConsumer","ContextConsumer","#ctx","#stopObservingResize","#width","#applyPosition","#ctx","ContextConsumer","#disconnect","#thumbPropsApplied","#core","#img","#textTracks","#externalThumbnails","#api","#thumbnails","#lastTextTrack","#resetStyles","#applyResize","#ctx","ContextConsumer","ContextConsumer","ContextConsumer","#ctx","#i18n","#core","#player","ContextConsumer","#reconnect","#container","#ensureLiveText","#disconnect","#storeUnsubscribe","#liveText","#i18n","#core","#transition","#liveIndicator","#options","#state","#toggleType","#core","#i18n","#signSpan","#textNode","#disconnect","#syncListeners","#listening","#activeType","#clearAttrs","#getLabelParams","#handleClick","#handleKeyDown","ContextProvider","#core","#controlsState","#provider","#timeState","#bufferState","#playbackState","#i18n","#disconnect","#slider","#releaseControlsLock","#releaseControlsVisibilityLock","#resumeIfDragPaused","createContext","#hasAuthoredContent","ContextConsumer","#core","#i18n","#groupConsumer","#containerCtx","#popupGroupCtx","#position","#disconnect","#tooltip","#snapshot","#cleanupTrigger","#syncTrigger","#currentTrigger","#syncContent","#triggerAbort","#hostHasAuthoredTooltipContent","ContextProvider","#core","#provider","#i18n","#core","#transition","#liveIndicator","#options","ContextProvider","#core","#controlsState","#provider","#volumeState","#i18n","#disconnect","#setVolume","#slider","#releaseControlsLock","#releaseControlsVisibilityLock"],"sources":["../../utils/dist/object/defaults.js","../../utils/dist/dom/children.js","../../utils/dist/dom/direction.js","../../utils/dist/dom/supports.js","../../utils/dist/dom/style.js","../../utils/dist/dom/layout.js","../../utils/dist/dom/walk-ancestors.js","../../utils/dist/dom/observe-elements.js","../../utils/dist/dom/platform.js","../../utils/dist/dom/popover.js","../../utils/dist/dom/raf-throttle.js","../../utils/dist/dom/template.js","../../core/dist/default/i18n/text/menu.js","../../store/dist/default/core/selector.js","../../utils/dist/function/throttle.js","../../core/dist/default/dom/store/features/stream-type.js","../../core/dist/default/dom/store/selectors.js","../../core/dist/default/dom/media-actions.js","../../core/dist/default/dom/hotkey/actions.js","../../core/dist/default/dom/hotkey/aria.js","../../core/dist/default/dom/hotkey/coordinator.js","../../core/dist/default/dom/hotkey/hotkey.js","../../core/dist/default/dom/hotkey/hotkey-events.js","../../core/dist/default/dom/ui/dismiss-layer.js","../../core/dist/default/dom/ui/alert-dialog.js","../../core/dist/default/dom/ui/button.js","../../core/dist/default/core/ui/transition.js","../../core/dist/default/core/ui/indicator/indicator-lifecycle.js","../../core/dist/default/dom/ui/input-action.js","../../core/dist/default/dom/utils/layout.js","../../core/dist/default/dom/ui/popover/popover.js","../../core/dist/default/core/ui/menu/menu-css-vars.js","../../core/dist/default/core/ui/menu/menu-item-data-attrs.js","../../core/dist/default/core/ui/popover/popover-css-vars.js","../../core/dist/default/dom/ui/menu/create-menu.js","../../core/dist/default/dom/ui/menu/menu-size.js","../../core/dist/default/dom/utils/event.js","../../utils/dist/number/number.js","../../core/dist/default/dom/ui/popover/popover-positioning.js","../../core/dist/default/dom/ui/popover/popup-positioner.js","../../core/dist/default/dom/utils/pointer.js","../../core/dist/default/dom/ui/slider.js","../../core/dist/default/core/ui/slider/slider-css-vars.js","../../core/dist/default/dom/ui/slider-css-vars.js","../../core/dist/default/dom/ui/slider-focus.js","../../core/dist/default/dom/ui/status-announcer.js","../../utils/dist/array/find-last-at-or-before.js","../../core/dist/default/core/ui/thumbnail/thumbnail-core.js","../../core/dist/default/dom/ui/thumbnail.js","../../core/dist/default/dom/ui/tooltip/tooltip.js","../../core/dist/default/dom/ui/transition.js","../../core/dist/default/dom/ui/wheel-step.js","../../core/dist/default/dom/utils/element-props.js","../../core/dist/default/dom/utils/state-data-attrs.js","../../core/dist/default/core/ui/utils/resolve-label.js","../../core/dist/default/core/ui/alert-dialog/alert-dialog-core.js","../../core/dist/default/core/ui/alert-dialog/alert-dialog-data-attrs.js","../../core/dist/default/core/ui/buffering-indicator/buffering-indicator-core.js","../../core/dist/default/core/ui/buffering-indicator/buffering-indicator-data-attrs.js","../../core/dist/default/core/ui/controls/controls-core.js","../../core/dist/default/core/ui/controls/controls-data-attrs.js","../../core/dist/default/core/ui/error-dialog/error-dialog-core.js","../../core/dist/default/i18n/text/common.js","../../core/dist/default/i18n/text/errors.js","../../core/dist/default/core/ui/error-dialog/error-dialog-i18n.js","../../core/dist/default/i18n/text/fullscreen.js","../../core/dist/default/i18n/text/status.js","../../core/dist/default/i18n/text/volume.js","../../core/dist/default/core/ui/indicator/indicator-labels.js","../../core/dist/default/core/ui/input-action/input-action.js","../../core/dist/default/core/ui/menu/menu-core.js","../../core/dist/default/core/ui/menu/menu-data-attrs.js","../../core/dist/default/i18n/text/buttons.js","../../core/dist/default/core/ui/mute-button/mute-button-core.js","../../core/dist/default/core/ui/mute-button/mute-button-data-attrs.js","../../core/dist/default/core/ui/play-button/play-button-core.js","../../core/dist/default/core/ui/play-button/play-button-data-attrs.js","../../core/dist/default/i18n/text/playback.js","../../core/dist/default/core/ui/popover/popover-core.js","../../core/dist/default/core/ui/popover/popover-data-attrs.js","../../core/dist/default/core/ui/popover/popup-host-attr.js","../../utils/dist/time/format.js","../../core/dist/default/core/ui/seek-indicator/seek-indicator-status.js","../../core/dist/default/core/ui/seek-indicator/seek-indicator-core.js","../../core/dist/default/core/ui/seek-indicator/seek-indicator-data-attrs.js","../../core/dist/default/core/ui/slider/slider-core.js","../../core/dist/default/core/ui/slider/slider-data-attrs.js","../../core/dist/default/core/ui/status-announcer/status-announcer-labels.js","../../core/dist/default/core/ui/volume-indicator/volume-indicator-status.js","../../core/dist/default/core/ui/status-announcer/status-announcer-status.js","../../core/dist/default/core/ui/status-announcer/status-announcer-core.js","../../core/dist/default/core/ui/status-indicator/status-indicator-status.js","../../core/dist/default/core/ui/status-indicator/status-indicator-core.js","../../core/dist/default/core/ui/status-indicator/status-indicator-data-attrs.js","../../core/dist/default/core/ui/thumbnail/thumbnail-data-attrs.js","../../core/dist/default/core/ui/thumbnail/thumbnail-media-fragment.js","../../core/dist/default/i18n/text/time.js","../../core/dist/default/core/ui/time/time-core.js","../../core/dist/default/core/ui/time/time-data-attrs.js","../../core/dist/default/i18n/text/slider.js","../../core/dist/default/core/ui/time-slider/time-slider-core.js","../../core/dist/default/core/ui/time-slider/time-slider-data-attrs.js","../../core/dist/default/core/ui/tooltip/tooltip-core.js","../../core/dist/default/core/ui/tooltip/tooltip-css-vars.js","../../core/dist/default/core/ui/tooltip/tooltip-data-attrs.js","../../core/dist/default/core/ui/tooltip/tooltip-group-core.js","../../core/dist/default/core/ui/volume-indicator/volume-indicator-core.js","../../core/dist/default/core/ui/volume-indicator/volume-indicator-css-vars.js","../../core/dist/default/core/ui/volume-indicator/volume-indicator-data-attrs.js","../../utils/dist/percent/percent.js","../../core/dist/default/core/ui/volume-slider/volume-slider-core.js","../../core/dist/default/core/ui/volume-slider/volume-slider-data-attrs.js","../src/ui/hotkey/aria-key-shortcuts-controller.ts","../src/ui/media-button-element.ts","../src/ui/radio-group/context.ts","../src/ui/radio-group/radio-group-element.ts","../src/ui/menu/context.ts","../src/ui/menu/menu-group-controller.ts","../src/ui/menu/menu-radio-item-element.ts","../src/ui/menu/menu-radio-group-element.ts","../src/i18n/cache-key.ts","../src/ui/menu/menu-item-indicator-element.ts","../src/ui/radio-options/radio-options-controller.ts","../src/ui/buffering-indicator/buffering-indicator-element.ts","../src/ui/hotkey/hotkey-element.ts","../src/ui/mute-button/mute-button-element.ts","../src/ui/play-button/play-button-element.ts","../src/ui/position-controller.ts","../src/ui/popover/popover-element.ts","../src/ui/slider/context.ts","../src/ui/alert-dialog/context.ts","../src/ui/alert-dialog/alert-dialog-close-element.ts","../src/ui/context-part-element.ts","../src/ui/alert-dialog/alert-dialog-description-element.ts","../src/ui/alert-dialog/alert-dialog-title-element.ts","../src/ui/controls/context.ts","../src/ui/controls/controls-element.ts","../src/ui/controls/controls-group-element.ts","../src/ui/error-dialog/error-dialog-element.ts","../src/ui/menu/menu-checkbox-item-element.ts","../src/ui/menu/menu-element.ts","../src/ui/menu/menu-group-element.ts","../src/ui/menu/menu-group-label-element.ts","../src/ui/menu/menu-item-element.ts","../src/ui/menu/menu-separator-element.ts","../src/ui/input-indicator/input-indicator-element.ts","../src/ui/input-indicator/live-indicator.ts","../src/ui/seek-indicator/seek-indicator-element.ts","../src/ui/seek-indicator/seek-indicator-value-element.ts","../src/ui/slider/slider-buffer-element.ts","../src/ui/slider/slider-fill-element.ts","../src/ui/slider/slider-preview-element.ts","../src/ui/slider/slider-thumb-element.ts","../src/ui/thumbnail/thumbnail-element.ts","../src/ui/slider/slider-thumbnail-element.ts","../src/ui/slider/slider-track-element.ts","../src/ui/slider/slider-value-element.ts","../src/ui/status-announcer/status-announcer-element.ts","../src/ui/status-indicator/status-indicator-element.ts","../src/ui/status-indicator/status-indicator-value-element.ts","../src/ui/time/time-element.ts","../src/ui/time/time-group-element.ts","../src/ui/time/time-separator-element.ts","../src/ui/time-slider/time-slider-element.ts","../src/ui/tooltip/context.ts","../src/ui/tooltip/tooltip-label-element.ts","../src/ui/tooltip/tooltip-shortcut-element.ts","../src/ui/tooltip/tooltip-element.ts","../src/ui/tooltip/tooltip-group-element.ts","../src/ui/volume-indicator/volume-indicator-element.ts","../src/ui/volume-indicator/volume-indicator-fill-element.ts","../src/ui/volume-indicator/volume-indicator-value-element.ts","../src/ui/volume-slider/volume-slider-element.ts","../src/define/ui/compounds.ts"],"sourcesContent":["import { isUndefined } from \"../predicate/predicate.js\";\n//#region src/object/defaults.ts\n/**\n* Creates a new object with default values filled in for undefined properties.\n*\n* Only keys owned by `defaultValues` are read from `object`; any other key on\n* `object` is ignored. Callers pass live DOM elements as `object`, and\n* enumerating those would touch hundreds of inherited accessors such as\n* `offsetWidth` and `innerHTML`, forcing style recalculation and layout on\n* every call.\n*\n* @example\n* ```ts\n* const props = { label: undefined, disabled: true };\n* const defaultProps = { label: '', disabled: false };\n* defaults(props, defaultProps); // { label: '', disabled: true }\n* ```\n*/\nfunction defaults(object, defaultValues) {\n\tconst result = { ...defaultValues };\n\tfor (const key of Object.keys(defaultValues)) {\n\t\tconst value = object[key];\n\t\tif (!isUndefined(value)) result[key] = value;\n\t}\n\treturn result;\n}\n//#endregion\nexport { defaults };\n\n//# sourceMappingURL=defaults.js.map","//#region src/dom/children.ts\nfunction getElementChildren(parent, predicate) {\n\tconst children = [];\n\tfor (let index = 0; index < parent.children.length; index++) {\n\t\tconst child = parent.children.item(index);\n\t\tif (child && predicate(child, index)) children.push(child);\n\t}\n\treturn children;\n}\nfunction findElementChild(parent, predicate) {\n\tfor (let index = 0; index < parent.children.length; index++) {\n\t\tconst child = parent.children.item(index);\n\t\tif (child && predicate(child, index)) return child;\n\t}\n\treturn null;\n}\n/** Follow a single-child relationship from the root until it ends or cycles. */\nfunction followElementPath(root, getNext) {\n\tconst path = [];\n\tconst visited = /* @__PURE__ */ new Set();\n\tlet current = root;\n\twhile (current && !visited.has(current)) {\n\t\tpath.push(current);\n\t\tvisited.add(current);\n\t\tcurrent = getNext(current);\n\t}\n\treturn path;\n}\n//#endregion\nexport { findElementChild, followElementPath, getElementChildren };\n\n//# sourceMappingURL=children.js.map","//#region src/dom/direction.ts\n/** Check whether an element's text direction is right-to-left. */\nfunction isRTL(element) {\n\tconst dir = element.closest(\"[dir]\")?.getAttribute(\"dir\");\n\tif (dir) return dir.toLowerCase() === \"rtl\";\n\treturn getComputedStyle(element).direction === \"rtl\";\n}\n//#endregion\nexport { isRTL };\n\n//# sourceMappingURL=direction.js.map","//#region src/dom/supports.ts\nfunction supportsIdleCallback() {\n\treturn typeof requestIdleCallback === \"function\";\n}\nfunction supportsAnimationFrame() {\n\treturn typeof requestAnimationFrame === \"function\";\n}\nfunction supportsAnchorPositioning() {\n\treturn typeof CSS !== \"undefined\" && CSS.supports(\"anchor-name: --a\");\n}\n//#endregion\nexport { supportsAnchorPositioning, supportsAnimationFrame, supportsIdleCallback };\n\n//# sourceMappingURL=supports.js.map","import { kebabCase } from \"../string/casing.js\";\n//#region src/dom/style.ts\nfunction normalizeStyleProperty(property) {\n\treturn property.startsWith(\"--\") ? property : kebabCase(property);\n}\nfunction getAnchorNames(element) {\n\tconst value = element.style.getPropertyValue(\"anchor-name\").trim();\n\tif (!value || value === \"none\") return [];\n\treturn value.split(\",\").map((name) => name.trim()).filter(Boolean);\n}\nfunction addAnchorName(element, name) {\n\tconst anchor = `--${name}`;\n\tconst anchors = getAnchorNames(element);\n\tconst added = !anchors.includes(anchor);\n\tif (added) element.style.setProperty(\"anchor-name\", [...anchors, anchor].join(\", \"));\n\treturn () => {\n\t\tif (!added) return;\n\t\tconst next = getAnchorNames(element).filter((name) => name !== anchor);\n\t\tif (next.length) element.style.setProperty(\"anchor-name\", next.join(\", \"));\n\t\telse element.style.removeProperty(\"anchor-name\");\n\t};\n}\nfunction applyStyles(element, styles) {\n\tfor (const [prop, value] of Object.entries(styles)) if (typeof value === \"string\") element.style.setProperty(normalizeStyleProperty(prop), value);\n}\n/** Capture authored inline values and priorities for the selected properties. */\nfunction snapshotInlineStyles(element, properties) {\n\treturn [...properties].map((property) => {\n\t\tconst normalizedProperty = normalizeStyleProperty(property);\n\t\treturn {\n\t\t\tproperty: normalizedProperty,\n\t\t\tvalue: element.style.getPropertyValue(normalizedProperty),\n\t\t\tpriority: element.style.getPropertyPriority(normalizedProperty)\n\t\t};\n\t});\n}\n/** Restore a snapshot created by `snapshotInlineStyles`. */\nfunction restoreInlineStyles(element, snapshot) {\n\tfor (const { property, value, priority } of snapshot) if (value) element.style.setProperty(property, value, priority);\n\telse element.style.removeProperty(property);\n}\n/** Apply inline styles for a synchronous callback and restore authored styles afterward. */\nfunction withInlineStyles(element, styles, callback) {\n\tconst snapshot = snapshotInlineStyles(element, Object.keys(styles));\n\ttry {\n\t\tapplyStyles(element, styles);\n\t\treturn callback();\n\t} finally {\n\t\trestoreInlineStyles(element, snapshot);\n\t}\n}\n/** Read and resolve a CSS property as a pixel length. */\nfunction readCSSLength(element, property, { source = \"inline-or-computed\" } = {}) {\n\tconst normalizedProperty = normalizeStyleProperty(property);\n\tlet value = source !== \"computed\" && element instanceof HTMLElement ? element.style.getPropertyValue(normalizedProperty) : \"\";\n\tif (!value && source !== \"inline\") value = getComputedStyle(element).getPropertyValue(normalizedProperty);\n\treturn value.trim() ? resolveCSSLength(element, value) : null;\n}\nfunction resolveCSSLength(el, value) {\n\tconst trimmed = value.trim();\n\tif (!trimmed) return 0;\n\tconst parsed = Number.parseFloat(trimmed);\n\tif (!Number.isNaN(parsed) && (/^-?\\d*\\.?\\d+$/.test(trimmed) || trimmed.endsWith(\"px\"))) return parsed;\n\tconst doc = el.ownerDocument;\n\tconst root = doc?.documentElement;\n\tif (!Number.isNaN(parsed) && trimmed.endsWith(\"rem\")) return parsed * (root ? Number.parseFloat(getComputedStyle(root).fontSize) || 16 : 16);\n\tif (!Number.isNaN(parsed) && trimmed.endsWith(\"em\")) return parsed * (el instanceof HTMLElement ? Number.parseFloat(getComputedStyle(el).fontSize) || 16 : 16);\n\tif (!doc) return Number.isNaN(parsed) ? 0 : parsed;\n\tconst measurementEl = doc.createElement(\"div\");\n\tmeasurementEl.style.position = \"absolute\";\n\tmeasurementEl.style.visibility = \"hidden\";\n\tmeasurementEl.style.pointerEvents = \"none\";\n\tmeasurementEl.style.inlineSize = trimmed;\n\tif (!measurementEl.style.inlineSize) return 0;\n\tmeasurementEl.style.blockSize = \"0\";\n\tmeasurementEl.style.padding = \"0\";\n\tmeasurementEl.style.border = \"0\";\n\tmeasurementEl.style.inset = \"0\";\n\tconst computed = getComputedStyle(el);\n\tmeasurementEl.style.fontSize = computed.fontSize;\n\tfor (let i = 0; i < computed.length; i++) {\n\t\tconst name = computed.item(i);\n\t\tif (name.startsWith(\"--\")) measurementEl.style.setProperty(name, computed.getPropertyValue(name));\n\t}\n\tconst parent = doc.body ?? doc.documentElement;\n\tif (!parent) return Number.isNaN(parsed) ? 0 : parsed;\n\tparent.appendChild(measurementEl);\n\tif (getComputedStyle(measurementEl).inlineSize === \"auto\") {\n\t\tmeasurementEl.remove();\n\t\treturn 0;\n\t}\n\tconst pixels = measurementEl.getBoundingClientRect().width;\n\tmeasurementEl.remove();\n\tif (Number.isFinite(pixels)) return pixels;\n\treturn Number.isNaN(parsed) ? 0 : parsed;\n}\n//#endregion\nexport { addAnchorName, applyStyles, getAnchorNames, readCSSLength, resolveCSSLength, restoreInlineStyles, snapshotInlineStyles, withInlineStyles };\n\n//# sourceMappingURL=style.js.map","import { withInlineStyles } from \"./style.js\";\n//#region src/dom/layout.ts\n/** Read an element's current rendered size. */\nfunction getElementSize(element, { box = \"bounding\", overflow = \"none\" } = {}) {\n\tconst rect = element.getBoundingClientRect();\n\tlet width = box === \"layout\" ? element.offsetWidth || rect.width : rect.width;\n\tlet height = box === \"layout\" ? element.offsetHeight || rect.height : rect.height;\n\tif (overflow === \"width\" || overflow === \"both\") width = Math.max(width, element.scrollWidth);\n\tif (overflow === \"height\" || overflow === \"both\") height = Math.max(height, element.scrollHeight);\n\treturn {\n\t\twidth,\n\t\theight\n\t};\n}\n/** Measure an element with optional temporary inline style overrides. */\nfunction measureElement(element, options = {}) {\n\tconst { styles, ...sizeOptions } = options;\n\tconst measure = () => getElementSize(element, sizeOptions);\n\treturn styles ? withInlineStyles(element, styles, measure) : measure();\n}\n/** Read logical padding edges in pixels. */\nfunction getElementPadding(element) {\n\tconst style = getComputedStyle(element);\n\treturn {\n\t\tinlineStart: Number.parseFloat(style.paddingInlineStart) || 0,\n\t\tinlineEnd: Number.parseFloat(style.paddingInlineEnd) || 0,\n\t\tblockStart: Number.parseFloat(style.paddingBlockStart) || 0,\n\t\tblockEnd: Number.parseFloat(style.paddingBlockEnd) || 0\n\t};\n}\nfunction getInlineExtent(edges) {\n\treturn edges.inlineStart + edges.inlineEnd;\n}\nfunction getBlockExtent(edges) {\n\treturn edges.blockStart + edges.blockEnd;\n}\nfunction defaultResolveChildrenSize(measurements) {\n\tif (measurements.length === 0) return {\n\t\twidth: 0,\n\t\theight: 0\n\t};\n\tconst width = Math.max(...measurements.map(({ offsetLeft, size }) => offsetLeft + size.width));\n\tconst firstTop = measurements[0].offsetTop;\n\treturn {\n\t\twidth,\n\t\theight: measurements.some(({ offsetTop }) => offsetTop !== firstTop) ? Math.max(...measurements.map(({ offsetTop, size }) => offsetTop + size.height)) : measurements.reduce((total, { size }) => total + size.height, 0)\n\t};\n}\n/** Measure the layout occupied by a collection of child elements. */\nfunction measureElementChildren(container, { children, includePadding = false, maxWidth = null, measure = (element, width) => measureElement(element, width === void 0 ? void 0 : { styles: { width: `${width}px` } }), resolveSize = defaultResolveChildrenSize } = {}) {\n\tconst elements = [...children ?? Array.from(container.children).filter((child) => child instanceof HTMLElement)].filter((element) => !element.hidden);\n\tconst padding = includePadding ? getElementPadding(container) : {\n\t\tinlineStart: 0,\n\t\tinlineEnd: 0,\n\t\tblockStart: 0,\n\t\tblockEnd: 0\n\t};\n\tconst inlinePadding = getInlineExtent(padding);\n\tconst blockPadding = getBlockExtent(padding);\n\tif (elements.length === 0) return {\n\t\twidth: inlinePadding,\n\t\theight: blockPadding\n\t};\n\tconst collect = (width) => elements.map((element) => ({\n\t\telement,\n\t\tsize: measure(element, width),\n\t\toffsetLeft: element.offsetLeft,\n\t\toffsetTop: element.offsetTop\n\t}));\n\tlet measurements = collect();\n\tconst naturalWidth = resolveSize(measurements).width + inlinePadding;\n\tconst width = maxWidth === null ? naturalWidth : Math.min(naturalWidth, Math.max(0, maxWidth));\n\tif (width < naturalWidth) measurements = collect(Math.max(0, width - inlinePadding));\n\treturn {\n\t\twidth,\n\t\theight: resolveSize(measurements).height + blockPadding\n\t};\n}\n//#endregion\nexport { getBlockExtent, getElementPadding, getElementSize, getInlineExtent, measureElement, measureElementChildren };\n\n//# sourceMappingURL=layout.js.map","import { isUndefined } from \"../predicate/predicate.js\";\n//#region src/dom/walk-ancestors.ts\nfunction walkAncestors(start, callback) {\n\tif (!start || typeof document === \"undefined\") return;\n\tlet node = start;\n\twhile (node) {\n\t\tconst value = callback(node);\n\t\tif (!isUndefined(value)) return value;\n\t\tnode = node.parentElement;\n\t}\n}\n//#endregion\nexport { walkAncestors };\n\n//# sourceMappingURL=walk-ancestors.js.map","import { noop } from \"../function/noop.js\";\n//#region src/dom/observe-elements.ts\n/** Observe one or more elements for size changes and return a cleanup function. */\nfunction observeResize(elements, callback) {\n\tif (typeof ResizeObserver === \"undefined\") return noop;\n\tconst observer = new ResizeObserver(callback);\n\tconst targets = Symbol.iterator in Object(elements) ? elements : [elements];\n\tfor (const element of targets) observer.observe(element);\n\treturn () => observer.disconnect();\n}\n/**\n* Observe a dynamically resolved element set. When the optional root mutates,\n* the set is resolved again before `onChange` is called.\n*/\nfunction observeElements({ getElements, onChange, root, mutations }) {\n\tlet stopObservingResize = noop;\n\tconst observeCurrentElements = () => {\n\t\tstopObservingResize();\n\t\tstopObservingResize = observeResize(getElements(), onChange);\n\t};\n\tobserveCurrentElements();\n\tlet mutationObserver = null;\n\tif (root && mutations !== false && typeof MutationObserver !== \"undefined\") {\n\t\tmutationObserver = new MutationObserver(() => {\n\t\t\tobserveCurrentElements();\n\t\t\tonChange();\n\t\t});\n\t\tmutationObserver.observe(root, mutations ?? { childList: true });\n\t}\n\treturn () => {\n\t\tmutationObserver?.disconnect();\n\t\tstopObservingResize();\n\t};\n}\n//#endregion\nexport { observeElements, observeResize };\n\n//# sourceMappingURL=observe-elements.js.map","//#region src/dom/platform.ts\nfunction isMacOS() {\n\treturn typeof navigator !== \"undefined\" && /mac/i.test(navigator.userAgent);\n}\n//#endregion\nexport { isMacOS };\n\n//# sourceMappingURL=platform.js.map","//#region src/dom/popover.ts\nconst ZERO_OFFSETS = {\n\tsideOffset: 0,\n\tboundaryOffset: 0\n};\nconst OPPOSITE_SIDE = {\n\ttop: \"bottom\",\n\tbottom: \"top\",\n\tleft: \"right\",\n\tright: \"left\"\n};\nfunction getSideAvailable(triggerRect, boundaryRect, side, offsets) {\n\tconst boundaryOffset = offsets.boundaryOffset ?? 0;\n\tswitch (side) {\n\t\tcase \"top\": return triggerRect.top - boundaryRect.top - boundaryOffset - offsets.sideOffset;\n\t\tcase \"bottom\": return boundaryRect.bottom - triggerRect.bottom - boundaryOffset - offsets.sideOffset;\n\t\tcase \"left\": return triggerRect.left - boundaryRect.left - boundaryOffset - offsets.sideOffset;\n\t\tcase \"right\": return boundaryRect.right - triggerRect.right - boundaryOffset - offsets.sideOffset;\n\t}\n}\n/** Resolve the preferred side against a positioning boundary. */\nfunction getPositionedSide(triggerRect, positionedRect, boundaryRect, opts, offsets = ZERO_OFFSETS) {\n\tconst preferred = opts.side;\n\tconst opposite = OPPOSITE_SIDE[preferred];\n\tconst size = preferred === \"top\" || preferred === \"bottom\" ? positionedRect.height : positionedRect.width;\n\tconst preferredSpace = getSideAvailable(triggerRect, boundaryRect, preferred, offsets);\n\tif (preferredSpace >= size) return preferred;\n\treturn getSideAvailable(triggerRect, boundaryRect, opposite, offsets) > preferredSpace ? opposite : preferred;\n}\nfunction tryShowPopover(el) {\n\ttry {\n\t\tel?.showPopover?.();\n\t} catch {}\n}\nfunction tryHidePopover(el) {\n\ttry {\n\t\tel?.hidePopover?.();\n\t} catch {}\n}\n//#endregion\nexport { getPositionedSide, tryHidePopover, tryShowPopover };\n\n//# sourceMappingURL=popover.js.map","//#region src/dom/raf-throttle.ts\n/** Throttle a function to fire at most once per animation frame. */\nfunction rafThrottle(fn) {\n\tlet rafId = null;\n\tlet latestArgs;\n\tconst throttled = (...args) => {\n\t\tlatestArgs = args;\n\t\tif (rafId !== null) return;\n\t\trafId = requestAnimationFrame(() => {\n\t\t\trafId = null;\n\t\t\tfn(...latestArgs);\n\t\t});\n\t};\n\tthrottled.cancel = () => {\n\t\tif (rafId !== null) {\n\t\t\tcancelAnimationFrame(rafId);\n\t\t\trafId = null;\n\t\t}\n\t};\n\treturn throttled;\n}\n//#endregion\nexport { rafThrottle };\n\n//# sourceMappingURL=raf-throttle.js.map","//#region src/dom/template.ts\n/** Create an `HTMLTemplateElement` from an HTML string, or `null` when `document` is unavailable (SSR). */\nfunction createTemplate(html) {\n\tconst doc = globalThis.document;\n\tif (!doc) return null;\n\tconst template = doc.createElement(\"template\");\n\ttemplate.innerHTML = html;\n\treturn template;\n}\n/** Return the first direct-child template in a container. */\nfunction getTemplateElement(container) {\n\tfor (const child of container.children) if (child.localName === \"template\" && \"content\" in child) return child;\n\treturn null;\n}\n/** Return a template's only element root, or `null` when it does not contain exactly one. */\nfunction getTemplateRoot(template) {\n\tconst root = template.content.firstElementChild;\n\treturn root && !root.nextElementSibling ? root : null;\n}\n/** Deep-clone a resolved template root into the target document. */\nfunction cloneTemplateRoot(root, targetDocument = root.ownerDocument) {\n\treturn targetDocument.importNode(root, true);\n}\n/** Deep-clone a template's content into a container. */\nfunction renderTemplate(container, template) {\n\tcontainer.appendChild(container.ownerDocument.importNode(template.content, true));\n}\n//#endregion\nexport { cloneTemplateRoot, createTemplate, getTemplateElement, getTemplateRoot, renderTemplate };\n\n//# sourceMappingURL=template.js.map","//#region src/core/i18n/text/menu.ts\nconst prefix = \"menu.\";\nconst settingsText = {\n\tkey: `${prefix}settings`,\n\ttext: \"Settings\"\n};\nconst qualityText = {\n\tkey: `${prefix}quality`,\n\ttext: \"Quality\"\n};\nconst audioText = {\n\tkey: `${prefix}audio`,\n\ttext: \"Audio\"\n};\nconst defaultText = {\n\tkey: `${prefix}default`,\n\ttext: \"Default\"\n};\nconst speedText = {\n\tkey: `${prefix}speed`,\n\ttext: \"Speed\"\n};\nconst captionsText = {\n\tkey: `${prefix}captions`,\n\ttext: \"Captions\"\n};\nconst playbackRateText = {\n\tkey: `${prefix}playbackRate`,\n\ttext: \"Playback rate\"\n};\nconst backText = {\n\tkey: `${prefix}back`,\n\ttext: \"Back\"\n};\nconst offText = {\n\tkey: `${prefix}off`,\n\ttext: \"Off\"\n};\nconst autoText = {\n\tkey: `${prefix}auto`,\n\ttext: \"Auto\"\n};\nconst autoWithLabelText = {\n\tkey: `${prefix}autoWithLabel`,\n\ttext: \"Auto ({label})\"\n};\nconst subtitlesText = {\n\tkey: `${prefix}subtitles`,\n\ttext: \"Subtitles\"\n};\n//#endregion\nexport { audioText, autoText, autoWithLabelText, backText, captionsText, defaultText, offText, playbackRateText, qualityText, settingsText, speedText, subtitlesText };\n\n//# sourceMappingURL=menu.js.map","import { AbortControllerRegistry } from \"./abort-controller-registry.js\";\nimport { throwNoTargetError } from \"./errors.js\";\nimport { pick } from \"@videojs/utils/object\";\n//#region src/core/selector.ts\nconst stateContext = {\n\ttarget: throwNoTargetError,\n\tsignals: new AbortControllerRegistry(),\n\tget: throwNoTargetError,\n\tset: throwNoTargetError\n};\n/**\n* Create a type-safe selector for a slice's state.\n*\n* The selector returns the slice's state, or `undefined` if the slice\n* is not configured in the store.\n*\n* @example\n* ```ts\n* const selectPlayback = createSelector(playbackSlice);\n* selectPlayback(store.state); // { paused, play, pause, ... } | undefined\n* selectPlayback.displayName; // 'playback' (from slice name)\n* ```\n*\n* @param slice - The slice to create a selector for.\n*/\nfunction createSelector(slice) {\n\tconst initialState = slice.state(stateContext);\n\tconst keys = [...Object.keys(initialState), ...Object.keys(slice.derived ?? {})];\n\tconst firstKey = keys[0];\n\tif (!firstKey) return Object.assign(() => void 0, { displayName: slice.name });\n\treturn Object.assign((state) => {\n\t\tif (!(firstKey in state)) return void 0;\n\t\treturn pick(state, keys);\n\t}, { displayName: slice.name });\n}\n//#endregion\nexport { createSelector };\n\n//# sourceMappingURL=selector.js.map","//#region src/function/throttle.ts\n/**\n* Throttle: limits `fn` to at most once per `ms` window.\n*\n* - Default (no options): trailing-edge only — the first call schedules a\n* timer; subsequent calls within the window update the arguments. The\n* function fires once per window with the latest arguments.\n* - `{ leading: true }`: leading + trailing — the first call invokes\n* immediately and opens a cooldown window. Subsequent calls within the\n* window are coalesced to a single trailing-edge invocation.\n*/\nfunction throttle(fn, ms, options) {\n\tconst leading = options?.leading ?? false;\n\tlet timerId = null;\n\tlet latestArgs;\n\tlet hasPending = false;\n\tfunction startCooldown() {\n\t\ttimerId = setTimeout(() => {\n\t\t\ttimerId = null;\n\t\t\tif (hasPending) {\n\t\t\t\thasPending = false;\n\t\t\t\tfn(...latestArgs);\n\t\t\t\tstartCooldown();\n\t\t\t}\n\t\t}, ms);\n\t}\n\tconst throttled = (...args) => {\n\t\tlatestArgs = args;\n\t\tif (leading) if (timerId === null) {\n\t\t\tfn(...latestArgs);\n\t\t\tstartCooldown();\n\t\t} else hasPending = true;\n\t\telse {\n\t\t\tif (timerId !== null) return;\n\t\t\ttimerId = setTimeout(() => {\n\t\t\t\ttimerId = null;\n\t\t\t\tfn(...latestArgs);\n\t\t\t}, ms);\n\t\t}\n\t};\n\tthrottled.cancel = () => {\n\t\tif (timerId !== null) {\n\t\t\tclearTimeout(timerId);\n\t\t\ttimerId = null;\n\t\t}\n\t\thasPending = false;\n\t};\n\treturn throttled;\n}\n//#endregion\nexport { throttle };\n\n//# sourceMappingURL=throttle.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { listen } from \"@videojs/utils/dom\";\nimport { MediaStreamTypes, isMediaBufferCapable, isMediaSeekCapable, isMediaStreamTypeCapable } from \"@videojs/media\";\n//#region src/dom/store/features/stream-type.ts\nconst streamTypeFeature = definePlayerFeature({\n\tname: \"streamType\",\n\tstate: () => ({ streamType: MediaStreamTypes.UNKNOWN }),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (isMediaStreamTypeCapable(media)) {\n\t\t\tconst sync = () => set({ streamType: media.streamType });\n\t\t\tsync();\n\t\t\tlisten(media, \"streamtypechange\", sync, { signal });\n\t\t\treturn;\n\t\t}\n\t\tif (!isMediaSeekCapable(media)) return;\n\t\tconst detect = () => {\n\t\t\tconst { duration } = media;\n\t\t\tif (duration === Number.POSITIVE_INFINITY) return MediaStreamTypes.LIVE;\n\t\t\tif (Number.isFinite(duration) && duration > 0) return MediaStreamTypes.ON_DEMAND;\n\t\t\treturn MediaStreamTypes.UNKNOWN;\n\t\t};\n\t\tconst sync = () => set({ streamType: detect() });\n\t\tsync();\n\t\tlisten(media, \"durationchange\", sync, { signal });\n\t\tlisten(media, \"loadedmetadata\", sync, { signal });\n\t\tlisten(media, \"emptied\", sync, { signal });\n\t\tif (isMediaBufferCapable(media)) listen(media, \"progress\", sync, { signal });\n\t}\n});\n//#endregion\nexport { streamTypeFeature };\n\n//# sourceMappingURL=stream-type.js.map","import { audioTrackFeature } from \"./features/audio-track.js\";\nimport { bufferFeature } from \"./features/buffer.js\";\nimport { controlsFeature } from \"./features/controls.js\";\nimport { errorFeature } from \"./features/error.js\";\nimport { fullscreenFeature } from \"./features/fullscreen.js\";\nimport { liveFeature } from \"./features/live.js\";\nimport { metadataFeature } from \"./features/metadata.js\";\nimport { pipFeature } from \"./features/pip.js\";\nimport { playbackFeature } from \"./features/playback.js\";\nimport { playbackRateFeature } from \"./features/playback-rate.js\";\nimport { qualityFeature } from \"./features/quality.js\";\nimport { remotePlaybackFeature } from \"./features/remote-playback.js\";\nimport { sourceFeature } from \"./features/source.js\";\nimport { streamTypeFeature } from \"./features/stream-type.js\";\nimport { textTrackFeature } from \"./features/text-track.js\";\nimport { timeFeature } from \"./features/time.js\";\nimport { volumeFeature } from \"./features/volume.js\";\nimport { createSelector } from \"@videojs/store\";\n//#region src/dom/store/selectors.ts\n/** Select the audio track state (audioTrackList, selectAudioTrack). */\nconst selectAudioTrack = createSelector(audioTrackFeature);\n/** Select the buffer state (buffered ranges, percent buffered). */\nconst selectBuffer = createSelector(bufferFeature);\n/** Select the controls state (controls visible, user-active). */\nconst selectControls = createSelector(controlsFeature);\n/** Select the error state (error, dismissed, dismissError). */\nconst selectError = createSelector(errorFeature);\n/** Select the fullscreen state (fullscreen active, availability). */\nconst selectFullscreen = createSelector(fullscreenFeature);\n/** Select the live state (`liveEdgeStart`, `targetLiveWindow`). */\nconst selectLive = createSelector(liveFeature);\n/** Select resolved content metadata and its user-config writers. */\nconst selectMetadata = createSelector(metadataFeature);\n/** Select the PiP state (picture-in-picture active, availability). */\nconst selectPiP = createSelector(pipFeature);\n/** Select the playback state (paused, ended, play, pause, toggle). */\nconst selectPlayback = createSelector(playbackFeature);\n/** Select the playback rate state (playbackRate, playbackRates, setPlaybackRate). */\nconst selectPlaybackRate = createSelector(playbackRateFeature);\n/** Select the quality state (videoRenditionList, activeVideoRendition, selectVideoRendition). */\nconst selectQuality = createSelector(qualityFeature);\n/** Select the remote playback state (remote playback connection state, availability). */\nconst selectRemotePlayback = createSelector(remotePlaybackFeature);\n/** Select the source state (src, type). */\nconst selectSource = createSelector(sourceFeature);\n/** Select the stream type state (`'on-demand' | 'live' | 'unknown'`). */\nconst selectStreamType = createSelector(streamTypeFeature);\n/** Select the text track state (chapters cues, thumbnail cues). */\nconst selectTextTrack = createSelector(textTrackFeature);\n/** Select the time state (currentTime, duration, seek). */\nconst selectTime = createSelector(timeFeature);\n/** Select the volume state (volume, muted, setVolume, setMuted). */\nconst selectVolume = createSelector(volumeFeature);\n//#endregion\nexport { selectAudioTrack, selectBuffer, selectControls, selectError, selectFullscreen, selectLive, selectMetadata, selectPiP, selectPlayback, selectPlaybackRate, selectQuality, selectRemotePlayback, selectSource, selectStreamType, selectTextTrack, selectTime, selectVolume };\n\n//# sourceMappingURL=selectors.js.map","import { selectPlaybackRate, selectTime, selectVolume } from \"./store/selectors.js\";\nimport { isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/media-actions.ts\nconst MEDIA_INPUT_ACTION_OVERRIDES = {\n\tseekStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst time = selectTime(store.state);\n\t\tif (!time) return;\n\t\ttime.seek(time.currentTime + value);\n\t},\n\tvolumeStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst vol = selectVolume(store.state);\n\t\tif (!vol) return;\n\t\tvol.setVolume(vol.volume + value);\n\t},\n\tspeedUp({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx < 0 || idx >= playbackRates.length - 1 ? 0 : idx + 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tspeedDown({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx <= 0 ? playbackRates.length - 1 : idx - 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t}\n};\n//#endregion\nexport { MEDIA_INPUT_ACTION_OVERRIDES };\n\n//# sourceMappingURL=media-actions.js.map","import { selectFullscreen, selectPiP, selectPlayback, selectTextTrack, selectTime, selectVolume } from \"../store/selectors.js\";\nimport { MEDIA_INPUT_ACTION_OVERRIDES } from \"../media-actions.js\";\nimport { isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/hotkey/actions.ts\nfunction isHotkeyToggleAction(action) {\n\treturn action.startsWith(\"toggle\");\n}\nconst HOTKEY_ACTIONS = {\n\ttogglePaused({ store }) {\n\t\tconst playback = selectPlayback(store.state);\n\t\tif (!playback) return;\n\t\tplayback.paused ? playback.play() : playback.pause();\n\t},\n\ttoggleMuted({ store }) {\n\t\tselectVolume(store.state)?.toggleMuted();\n\t},\n\ttoggleFullscreen({ store }) {\n\t\tconst fs = selectFullscreen(store.state);\n\t\tif (!fs) return;\n\t\tfs.fullscreen ? fs.exitFullscreen() : fs.requestFullscreen();\n\t},\n\ttoggleSubtitles({ store }) {\n\t\tselectTextTrack(store.state)?.toggleSubtitles();\n\t},\n\ttogglePictureInPicture({ store }) {\n\t\tconst pip = selectPiP(store.state);\n\t\tif (!pip) return;\n\t\tpip.pip ? pip.exitPictureInPicture() : pip.requestPictureInPicture();\n\t},\n\tseekStep: MEDIA_INPUT_ACTION_OVERRIDES.seekStep,\n\tvolumeStep: MEDIA_INPUT_ACTION_OVERRIDES.volumeStep,\n\tspeedUp: MEDIA_INPUT_ACTION_OVERRIDES.speedUp,\n\tspeedDown: MEDIA_INPUT_ACTION_OVERRIDES.speedDown,\n\tseekToPercent({ store, value, key }) {\n\t\tconst time = selectTime(store.state);\n\t\tif (!time || time.duration <= 0) return;\n\t\tlet percent;\n\t\tif (!isUndefined(value)) percent = value;\n\t\telse if (key >= \"0\" && key <= \"9\") percent = Number(key) * 10;\n\t\telse return;\n\t\ttime.seek(percent / 100 * time.duration);\n\t}\n};\nfunction resolveHotkeyAction(name) {\n\treturn HOTKEY_ACTIONS[name];\n}\n//#endregion\nexport { isHotkeyToggleAction, resolveHotkeyAction };\n\n//# sourceMappingURL=actions.js.map","//#region src/dom/hotkey/aria.ts\nconst ARIA_MODIFIER_MAP = {\n\tshift: \"Shift\",\n\tctrl: \"Control\",\n\talt: \"Alt\",\n\tmeta: \"Meta\"\n};\nconst DISPLAY_MODIFIER_MAP = {\n\tshift: \"Shift\",\n\tctrl: \"Ctrl\",\n\talt: \"Alt\",\n\tmeta: \"Meta\"\n};\nconst MODIFIER_ORDER = [\n\t\"ctrl\",\n\t\"shift\",\n\t\"alt\",\n\t\"meta\"\n];\n/**\n* Convert parsed key bindings to a WAI-ARIA `aria-keyshortcuts` formatted string.\n*\n* @example\n* ```ts\n* toAriaKeyShortcut(parseHotkeyPattern('Ctrl+Shift+f'));\n* // \"Control+Shift+f\"\n*\n* toAriaKeyShortcut([...parseHotkeyPattern('k'), ...parseHotkeyPattern('Space')]);\n* // \"k Space\"\n* ```\n*/\nfunction toAriaKeyShortcut(bindings) {\n\treturn bindings.map((b) => {\n\t\tconst parts = [];\n\t\tfor (const mod of MODIFIER_ORDER) if (b.modifiers.has(mod)) parts.push(ARIA_MODIFIER_MAP[mod]);\n\t\tparts.push(b.originalKey);\n\t\treturn parts.join(\"+\");\n\t}).join(\" \");\n}\n/** Convert a parsed key binding to a compact display shortcut. */\nfunction toDisplayKeyShortcut(binding) {\n\tconst parts = [];\n\tfor (const mod of MODIFIER_ORDER) if (binding.modifiers.has(mod)) parts.push(DISPLAY_MODIFIER_MAP[mod]);\n\tparts.push(toDisplayKey(binding.originalKey));\n\treturn parts.join(\"+\");\n}\nfunction toDisplayKey(key) {\n\treturn key.length === 1 ? key.toUpperCase() : key;\n}\n//#endregion\nexport { toAriaKeyShortcut, toDisplayKeyShortcut };\n\n//# sourceMappingURL=aria.js.map","import { toAriaKeyShortcut, toDisplayKeyShortcut } from \"./aria.js\";\nimport { matchesHotkeyEvent, parseHotkeyPattern } from \"./hotkey.js\";\nimport { isEditableTarget, isInteractiveActivation, listen } from \"@videojs/utils/dom\";\nimport { isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/hotkey/coordinator.ts\nvar HotkeyCoordinator = class {\n\t#target;\n\t#bindings = [];\n\t#nextId = 0;\n\t#disconnect = null;\n\t#docDisconnect = null;\n\t#activationSubscribers = /* @__PURE__ */ new Set();\n\t#shortcutSubscribers = /* @__PURE__ */ new Set();\n\t#destroyed = false;\n\tconstructor(target) {\n\t\tthis.#target = target;\n\t}\n\tsubscribe(callback) {\n\t\tthis.#activationSubscribers.add(callback);\n\t\treturn () => this.#activationSubscribers.delete(callback);\n\t}\n\tsubscribeShortcutChanges(callback) {\n\t\tthis.#shortcutSubscribers.add(callback);\n\t\treturn () => this.#shortcutSubscribers.delete(callback);\n\t}\n\tadd(options) {\n\t\tconst binding = {\n\t\t\tparsed: parseHotkeyPattern(options.keys),\n\t\t\toptions,\n\t\t\tid: this.#nextId++\n\t\t};\n\t\tthis.#bindings.push(binding);\n\t\tthis.#sortBindings();\n\t\tif (options.target === \"document\") this.#connectDocument();\n\t\telse this.#connect();\n\t\tthis.#notify();\n\t\tlet removed = false;\n\t\treturn () => {\n\t\t\tif (removed) return;\n\t\t\tremoved = true;\n\t\t\tconst idx = this.#bindings.indexOf(binding);\n\t\t\tif (idx !== -1) this.#bindings.splice(idx, 1);\n\t\t\tthis.#maybeDisconnect();\n\t\t\tthis.#notify();\n\t\t};\n\t}\n\tgetAriaKeys(action) {\n\t\treturn this.getShortcut(action).aria;\n\t}\n\tgetShortcut(action, value) {\n\t\tconst bindings = this.#getActionBindings(action, value);\n\t\tif (!bindings.length) return {};\n\t\tconst parsed = bindings.flatMap((binding) => binding.parsed);\n\t\tconst preferred = bindings[bindings.length - 1];\n\t\treturn {\n\t\t\taria: toAriaKeyShortcut(parsed),\n\t\t\tshortcut: this.#formatDisplayShortcut(preferred)\n\t\t};\n\t}\n\tdestroy() {\n\t\tif (this.#destroyed) return;\n\t\tthis.#destroyed = true;\n\t\tthis.#disconnect?.abort();\n\t\tthis.#disconnect = null;\n\t\tthis.#docDisconnect?.abort();\n\t\tthis.#docDisconnect = null;\n\t\tthis.#bindings = [];\n\t\tthis.#notify();\n\t\tthis.#activationSubscribers.clear();\n\t\tthis.#shortcutSubscribers.clear();\n\t}\n\t#sortBindings() {\n\t\tthis.#bindings.sort((a, b) => {\n\t\t\tconst specDiff = b.parsed[0].modifiers.size - a.parsed[0].modifiers.size;\n\t\t\tif (specDiff !== 0) return specDiff;\n\t\t\treturn a.id - b.id;\n\t\t});\n\t}\n\t#connect() {\n\t\tif (this.#disconnect) return;\n\t\tthis.#disconnect = new AbortController();\n\t\tlisten(this.#target, \"keydown\", this.#handleEvent, { signal: this.#disconnect.signal });\n\t}\n\t#connectDocument() {\n\t\tif (this.#docDisconnect) return;\n\t\tthis.#docDisconnect = new AbortController();\n\t\tlisten(document, \"keydown\", this.#handleEvent, { signal: this.#docDisconnect.signal });\n\t}\n\t#maybeDisconnect() {\n\t\tconst hasPlayer = this.#bindings.some((b) => b.options.target !== \"document\");\n\t\tconst hasDoc = this.#bindings.some((b) => b.options.target === \"document\");\n\t\tif (!hasPlayer) {\n\t\t\tthis.#disconnect?.abort();\n\t\t\tthis.#disconnect = null;\n\t\t}\n\t\tif (!hasDoc) {\n\t\t\tthis.#docDisconnect?.abort();\n\t\t\tthis.#docDisconnect = null;\n\t\t}\n\t}\n\t#handleEvent = (event) => {\n\t\tif (event.key === \"Unidentified\") return;\n\t\tif (isInteractiveActivation(event)) return;\n\t\tif (event.defaultPrevented) return;\n\t\tconst editable = isEditableTarget(event);\n\t\tfor (const binding of this.#bindings) {\n\t\t\tconst { options, parsed } = binding;\n\t\t\tif (options.disabled) continue;\n\t\t\tif (event.repeat && options.repeatable === false) continue;\n\t\t\tif (options.target === \"document\" !== (event.currentTarget === document)) continue;\n\t\t\tfor (const p of parsed) {\n\t\t\t\tif (!matchesHotkeyEvent(p, event)) continue;\n\t\t\t\tif (editable && p.modifiers.size === 0) continue;\n\t\t\t\tif (this.#activationSubscribers.size > 0) {\n\t\t\t\t\tconst activateEvent = {\n\t\t\t\t\t\tsource: \"hotkey\",\n\t\t\t\t\t\taction: options.action,\n\t\t\t\t\t\tvalue: options.value,\n\t\t\t\t\t\tevent\n\t\t\t\t\t};\n\t\t\t\t\tfor (const cb of this.#activationSubscribers) try {\n\t\t\t\t\t\tcb(activateEvent);\n\t\t\t\t\t} catch (error) {}\n\t\t\t\t}\n\t\t\t\tevent.preventDefault();\n\t\t\t\toptions.onActivate(event, p.originalKey);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t};\n\t#getActionBindings(action, value) {\n\t\treturn this.#bindings.filter((binding) => {\n\t\t\tif (binding.options.disabled) return false;\n\t\t\tif (binding.options.action !== action) return false;\n\t\t\tif (isUndefined(value)) return true;\n\t\t\treturn binding.options.value === value;\n\t\t}).sort((a, b) => a.id - b.id);\n\t}\n\t#formatDisplayShortcut(binding) {\n\t\tif (binding.options.keys === \"0-9\") return binding.options.keys;\n\t\treturn toDisplayKeyShortcut(binding.parsed[0]);\n\t}\n\t#notify() {\n\t\tfor (const subscriber of this.#shortcutSubscribers) subscriber();\n\t}\n};\n//#endregion\nexport { HotkeyCoordinator };\n\n//# sourceMappingURL=coordinator.js.map","import { HotkeyCoordinator } from \"./coordinator.js\";\nimport { isMacOS } from \"@videojs/utils/dom\";\n//#region src/dom/hotkey/hotkey.ts\nconst MODIFIER_KEYS = /* @__PURE__ */ new Set([\n\t\"shift\",\n\t\"ctrl\",\n\t\"alt\",\n\t\"meta\"\n]);\n/**\n* Parse a key pattern string into one or more bindings.\n*\n* @example\n* ```ts\n* parseHotkeyPattern('>');\n* // [{ modifiers: Set(), key: '>', originalKey: '>' }]\n*\n* parseHotkeyPattern('0-9');\n* // 10 bindings, one per digit\n* ```\n*/\nfunction parseHotkeyPattern(pattern) {\n\tif (pattern === \"0-9\") return Array.from({ length: 10 }, (_, i) => ({\n\t\tmodifiers: /* @__PURE__ */ new Set(),\n\t\tkey: String(i),\n\t\toriginalKey: String(i)\n\t}));\n\tconst segments = pattern.split(\"+\");\n\tconst rawKey = segments.pop();\n\tconst modifiers = /* @__PURE__ */ new Set();\n\tfor (const seg of segments) {\n\t\tconst lower = seg.toLowerCase();\n\t\tif (lower === \"mod\") modifiers.add(isMacOS() ? \"meta\" : \"ctrl\");\n\t\telse if (MODIFIER_KEYS.has(lower)) modifiers.add(lower);\n\t}\n\treturn [{\n\t\tmodifiers,\n\t\tkey: rawKey === \"Space\" ? \" \" : rawKey.toLowerCase(),\n\t\toriginalKey: rawKey\n\t}];\n}\n/**\n* Single non-letter character — layout-dependent modifiers (Shift, Alt/Option)\n* were used to produce the character itself, not as deliberate modifiers\n* (e.g. Shift+. → \">\", Option+Shift → \">\" on some Mac layouts).\n* Letters excluded because Shift changes case intentionally (k vs K).\n* Named keys excluded because event.key.length > 1 (ArrowLeft, Tab, etc.).\n*/\nfunction isImplicitModifierKey(key) {\n\treturn key.length === 1 && !/[a-z]/i.test(key);\n}\n/** Whether a parsed binding matches a keyboard event. */\nfunction matchesHotkeyEvent(binding, event) {\n\tif (event.key === \"Unidentified\") return false;\n\tif (event.key.toLowerCase() !== binding.key) return false;\n\tconst implicit = isImplicitModifierKey(event.key);\n\tconst shiftKey = implicit ? event.shiftKey && binding.modifiers.has(\"shift\") : event.shiftKey;\n\tconst altKey = implicit ? event.altKey && binding.modifiers.has(\"alt\") : event.altKey;\n\tif (shiftKey !== binding.modifiers.has(\"shift\")) return false;\n\tif (event.ctrlKey !== binding.modifiers.has(\"ctrl\")) return false;\n\tif (altKey !== binding.modifiers.has(\"alt\")) return false;\n\tif (event.metaKey !== binding.modifiers.has(\"meta\")) return false;\n\treturn true;\n}\nconst coordinators = /* @__PURE__ */ new WeakMap();\n/** Look up the coordinator for a target element, if one exists. */\nfunction findHotkeyCoordinator(target) {\n\treturn coordinators.get(target);\n}\n/** Look up or create the hotkey coordinator for a target element. */\nfunction getHotkeyCoordinator(target) {\n\tlet coordinator = coordinators.get(target);\n\tif (!coordinator) {\n\t\tcoordinator = new HotkeyCoordinator(target);\n\t\tcoordinators.set(target, coordinator);\n\t}\n\treturn coordinator;\n}\n/**\n* Register a hotkey binding on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createHotkey(container, {\n* keys: 'k',\n* onActivate: () => store.paused ? store.play() : store.pause(),\n* });\n*\n* // Later: remove the binding\n* cleanup();\n* ```\n*\n* @returns A cleanup function that removes the binding.\n*/\nfunction createHotkey(target, options) {\n\treturn getHotkeyCoordinator(target).add(options);\n}\n//#endregion\nexport { createHotkey, findHotkeyCoordinator, getHotkeyCoordinator, matchesHotkeyEvent, parseHotkeyPattern };\n\n//# sourceMappingURL=hotkey.js.map","//#region src/dom/hotkey/hotkey-events.ts\n/** Dispatched when display shortcut metadata changes (e.g. coordinator updates). Tooltips may listen. */\nconst HOTKEY_SHORTCUT_CHANGE_EVENT = \"hotkey-shortcut-change\";\n//#endregion\nexport { HOTKEY_SHORTCUT_CHANGE_EVENT };\n\n//# sourceMappingURL=hotkey-events.js.map","import { listen } from \"@videojs/utils/dom\";\n//#region src/dom/ui/dismiss-layer.ts\nfunction createDismissLayer(options) {\n\tconst { transition } = options;\n\tconst state = transition.state;\n\tconst abort = new AbortController();\n\tlet docAbort = null;\n\tfunction open(element) {\n\t\tif (abort.signal.aborted) return null;\n\t\tconst { active, status } = state.current;\n\t\tif (active && status !== \"ending\") return null;\n\t\tif (status === \"ending\") transition.cancel();\n\t\treturn transition.open(element);\n\t}\n\tfunction close(element) {\n\t\tconst { active, status } = state.current;\n\t\tif (abort.signal.aborted || !active || status === \"ending\") return null;\n\t\treturn transition.close(element);\n\t}\n\tfunction setupDocumentListeners() {\n\t\tcleanupDocumentListeners();\n\t\tif (typeof document === \"undefined\") return;\n\t\tdocAbort = new AbortController();\n\t\tconst { signal } = docAbort;\n\t\tlisten(document, \"keydown\", handleKeydown, { signal });\n\t\toptions.onDocumentActive?.(signal);\n\t}\n\tfunction cleanupDocumentListeners() {\n\t\tdocAbort?.abort();\n\t\tdocAbort = null;\n\t}\n\tfunction handleKeydown(event) {\n\t\tif (event.key !== \"Escape\") return;\n\t\tif (event.defaultPrevented) return;\n\t\tif (!state.current.active) return;\n\t\tif (!(options.closeOnEscape?.() ?? true)) return;\n\t\toptions.onEscapeDismiss(event);\n\t}\n\tconst unsubscribe = state.subscribe(() => {\n\t\tif (state.current.active) setupDocumentListeners();\n\t\telse cleanupDocumentListeners();\n\t});\n\tabort.signal.addEventListener(\"abort\", () => {\n\t\tunsubscribe();\n\t\ttransition.destroy();\n\t\tcleanupDocumentListeners();\n\t});\n\tfunction destroy() {\n\t\tif (abort.signal.aborted) return;\n\t\tabort.abort();\n\t}\n\treturn {\n\t\tinput: state,\n\t\topen,\n\t\tclose,\n\t\tsignal: abort.signal,\n\t\tdestroy\n\t};\n}\n//#endregion\nexport { createDismissLayer };\n\n//# sourceMappingURL=dismiss-layer.js.map","import { createDismissLayer } from \"./dismiss-layer.js\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/ui/alert-dialog.ts\nfunction createAlertDialog(options) {\n\tconst { onOpenChange } = options;\n\tlet element = null;\n\tlet previousFocus = null;\n\tlet elementAbort = null;\n\tconst layer = createDismissLayer({\n\t\ttransition: options.transition,\n\t\tcloseOnEscape: options.closeOnEscape,\n\t\tonEscapeDismiss(event) {\n\t\t\tevent.stopPropagation();\n\t\t\tapplyClose();\n\t\t}\n\t});\n\tconst state = layer.input;\n\tfunction applyOpen() {\n\t\tpreviousFocus = document.activeElement;\n\t\tconst opening = layer.open();\n\t\tif (!opening) return;\n\t\tonOpenChange(true);\n\t\trequestAnimationFrame(() => {\n\t\t\tif (layer.signal.aborted || !state.current.active) return;\n\t\t\telement?.focus();\n\t\t});\n\t\topening.then(() => {\n\t\t\tif (layer.signal.aborted || !state.current.active) return;\n\t\t\toptions.onOpenChangeComplete?.(true);\n\t\t});\n\t}\n\tfunction applyClose() {\n\t\tconst closing = layer.close(element);\n\t\tif (!closing) return;\n\t\tonOpenChange(false);\n\t\tclosing.then(() => {\n\t\t\tif (layer.signal.aborted) return;\n\t\t\tif (previousFocus) {\n\t\t\t\tpreviousFocus.focus();\n\t\t\t\tpreviousFocus = null;\n\t\t\t}\n\t\t\toptions.onOpenChangeComplete?.(false);\n\t\t});\n\t}\n\tfunction setupElementListeners() {\n\t\tcleanupElementListeners();\n\t\tif (!element) return;\n\t\telementAbort = new AbortController();\n\t\tconst { signal } = elementAbort;\n\t\tlisten(element, \"click\", handleElementClick, { signal });\n\t}\n\tfunction cleanupElementListeners() {\n\t\telementAbort?.abort();\n\t\telementAbort = null;\n\t}\n\tfunction handleElementClick(event) {\n\t\tif (event.target instanceof HTMLButtonElement) applyClose();\n\t}\n\tfunction setElement(el) {\n\t\telement = el;\n\t\tsetupElementListeners();\n\t}\n\tlayer.signal.addEventListener(\"abort\", () => {\n\t\tcleanupElementListeners();\n\t\telement = null;\n\t\tpreviousFocus = null;\n\t});\n\treturn {\n\t\tinput: state,\n\t\topen: applyOpen,\n\t\tclose: applyClose,\n\t\tsetElement,\n\t\tdestroy: layer.destroy\n\t};\n}\n//#endregion\nexport { createAlertDialog };\n\n//# sourceMappingURL=alert-dialog.js.map","//#region src/dom/ui/button.ts\nfunction createButton(options) {\n\tconst { onActivate, isDisabled } = options;\n\treturn {\n\t\trole: \"button\",\n\t\ttabIndex: 0,\n\t\tonClick(event) {\n\t\t\tif (isDisabled()) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonActivate(event);\n\t\t},\n\t\tonPointerDown(event) {\n\t\t\tif (isDisabled()) event.preventDefault();\n\t\t},\n\t\tonMouseDown(event) {\n\t\t\tif (isDisabled()) event.preventDefault();\n\t\t},\n\t\tonKeyDown(event) {\n\t\t\tif (event.target !== event.currentTarget) return;\n\t\t\tif (isDisabled()) {\n\t\t\t\tif (event.key !== \"Tab\") event.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonActivate(event);\n\t\t\t} else if (event.key === \" \") event.preventDefault();\n\t\t},\n\t\tonKeyUp(event) {\n\t\t\tif (event.target !== event.currentTarget) return;\n\t\t\tif (isDisabled()) return;\n\t\t\tif (event.key === \" \") onActivate(event);\n\t\t}\n\t};\n}\n//#endregion\nexport { createButton };\n\n//# sourceMappingURL=button.js.map","//#region src/core/ui/transition.ts\n/** Shared data attributes for open/close transition state. Spread into component data-attrs objects. */\nconst TransitionDataAttrs = {\n\t/** Present during the open transition. */\n\ttransitionStarting: \"data-starting-style\",\n\t/** Present during the close transition. */\n\ttransitionEnding: \"data-ending-style\"\n};\nfunction getTransitionFlags(status) {\n\treturn {\n\t\ttransitionStarting: status === \"starting\",\n\t\ttransitionEnding: status === \"ending\"\n\t};\n}\nfunction getTransitionStyleAttrs({ transitionStarting, transitionEnding }) {\n\treturn {\n\t\t[TransitionDataAttrs.transitionStarting]: transitionStarting ? \"\" : void 0,\n\t\t[TransitionDataAttrs.transitionEnding]: transitionEnding ? \"\" : void 0\n\t};\n}\n//#endregion\nexport { TransitionDataAttrs, getTransitionFlags, getTransitionStyleAttrs };\n\n//# sourceMappingURL=transition.js.map","import { getTransitionFlags } from \"../transition.js\";\n//#region src/core/ui/indicator/indicator-lifecycle.ts\nconst INDICATOR_CLOSE_DELAY = 800;\nvar IndicatorCloseController = class {\n\t#timer = null;\n\t#close;\n\t#getDelay;\n\tconstructor(close, getDelay) {\n\t\tthis.#close = close;\n\t\tthis.#getDelay = getDelay;\n\t}\n\tarm() {\n\t\tthis.clear();\n\t\tthis.#timer = setTimeout(() => {\n\t\t\tthis.#timer = null;\n\t\t\tthis.#close();\n\t\t}, this.#getDelay());\n\t}\n\tclear() {\n\t\tif (this.#timer === null) return;\n\t\tclearTimeout(this.#timer);\n\t\tthis.#timer = null;\n\t}\n\tclose() {\n\t\tthis.clear();\n\t\tthis.#close();\n\t}\n\tdestroy() {\n\t\tthis.clear();\n\t}\n};\nvar IndicatorVisibilityCoordinator = class {\n\t#handles = /* @__PURE__ */ new Set();\n\tregister(handle) {\n\t\tthis.#handles.add(handle);\n\t\treturn () => this.#handles.delete(handle);\n\t}\n\tshow(handle) {\n\t\tfor (const nextHandle of this.#handles) if (nextHandle !== handle) nextHandle.close();\n\t}\n};\nfunction getIndicatorCloseDelay(props) {\n\treturn props.closeDelay ?? 800;\n}\nfunction isIndicatorPresent(current, transition) {\n\treturn current.open || transition.active;\n}\nfunction getRenderedIndicatorState(current, snapshot, transition) {\n\tconst payload = current.open ? current : snapshot;\n\treturn {\n\t\t...payload,\n\t\topen: current.open && transition.active,\n\t\tgeneration: current.open ? current.generation : payload.generation,\n\t\t...getTransitionFlags(transition.status)\n\t};\n}\n//#endregion\nexport { INDICATOR_CLOSE_DELAY, IndicatorCloseController, IndicatorVisibilityCoordinator, getIndicatorCloseDelay, getRenderedIndicatorState, isIndicatorPresent };\n\n//# sourceMappingURL=indicator-lifecycle.js.map","import { IndicatorVisibilityCoordinator } from \"../../core/ui/indicator/indicator-lifecycle.js\";\nimport { getGestureCoordinator } from \"../gesture/coordinator.js\";\nimport { selectFullscreen, selectPiP, selectPlayback, selectPlaybackRate, selectTextTrack, selectTime, selectVolume } from \"../store/selectors.js\";\nimport { getHotkeyCoordinator } from \"../hotkey/hotkey.js\";\nimport { isCaptionOrSubtitleTrack } from \"@videojs/utils/dom\";\n//#region src/dom/ui/input-action.ts\nfunction toInputActionEvent(event) {\n\treturn {\n\t\taction: event.action,\n\t\tvalue: event.value,\n\t\tsource: event.source,\n\t\tkey: \"key\" in event.event ? event.event.key : void 0\n\t};\n}\nfunction getMediaSnapshot(store) {\n\tif (!store) return {};\n\tconst state = store.state;\n\tconst time = selectTime(state);\n\tconst textTrack = selectTextTrack(state);\n\treturn {\n\t\tpaused: selectPlayback(state)?.paused,\n\t\tvolume: selectVolume(state)?.volume,\n\t\tmuted: selectVolume(state)?.muted,\n\t\tplaybackRate: selectPlaybackRate(state)?.playbackRate,\n\t\tfullscreen: selectFullscreen(state)?.fullscreen,\n\t\tsubtitlesShowing: textTrack?.subtitlesShowing,\n\t\tsubtitlesAvailable: textTrack ? (textTrack.textTrackList ?? []).some(isCaptionOrSubtitleTrack) : void 0,\n\t\tpip: selectPiP(state)?.pip,\n\t\tcurrentTime: time?.currentTime,\n\t\tduration: time?.duration,\n\t\tseeking: time?.seeking\n\t};\n}\nfunction subscribeToInputActions(container, callback) {\n\tconst handleEvent = (event) => callback(toInputActionEvent(event));\n\tconst gestureUnsubscribe = getGestureCoordinator(container).subscribe(handleEvent);\n\tconst hotkeyUnsubscribe = getHotkeyCoordinator(container).subscribe(handleEvent);\n\treturn () => {\n\t\tgestureUnsubscribe();\n\t\thotkeyUnsubscribe();\n\t};\n}\nconst indicatorVisibilityCoordinators = /* @__PURE__ */ new WeakMap();\nfunction getIndicatorVisibilityCoordinator(container) {\n\tlet coordinator = indicatorVisibilityCoordinators.get(container);\n\tif (!coordinator) {\n\t\tcoordinator = new IndicatorVisibilityCoordinator();\n\t\tindicatorVisibilityCoordinators.set(container, coordinator);\n\t}\n\treturn coordinator;\n}\n//#endregion\nexport { getIndicatorVisibilityCoordinator, getMediaSnapshot, subscribeToInputActions, toInputActionEvent };\n\n//# sourceMappingURL=input-action.js.map","import { isString } from \"@videojs/utils/predicate\";\n//#region src/dom/utils/layout.ts\nfunction forceLayout(element) {\n\telement?.getBoundingClientRect();\n}\nfunction createDOMRect(left, top, width, height) {\n\tconst right = left + width;\n\tconst bottom = top + height;\n\treturn {\n\t\tx: left,\n\t\ty: top,\n\t\twidth,\n\t\theight,\n\t\ttop,\n\t\tright,\n\t\tbottom,\n\t\tleft,\n\t\ttoJSON() {\n\t\t\treturn {\n\t\t\t\tx: left,\n\t\t\t\ty: top,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\ttop,\n\t\t\t\tright,\n\t\t\t\tbottom,\n\t\t\t\tleft\n\t\t\t};\n\t\t}\n\t};\n}\nfunction intersectDOMRects(firstRect, secondRect) {\n\tconst left = Math.max(firstRect.left, secondRect.left);\n\tconst top = Math.max(firstRect.top, secondRect.top);\n\tconst right = Math.min(firstRect.right, secondRect.right);\n\tconst bottom = Math.min(firstRect.bottom, secondRect.bottom);\n\treturn createDOMRect(left, top, Math.max(0, right - left), Math.max(0, bottom - top));\n}\nfunction getPositioningBoundaryRect(boundaryElement) {\n\tconst viewportRect = document.documentElement.getBoundingClientRect();\n\treturn boundaryElement ? intersectDOMRects(viewportRect, boundaryElement.getBoundingClientRect()) : viewportRect;\n}\nfunction resolvePositioningBoundary(boundary, options = {}) {\n\tif (!boundary) return null;\n\tif (!isString(boundary)) return boundary;\n\tif (boundary === \"viewport\") return null;\n\tif (boundary === \"container\") return options.container ?? null;\n\ttry {\n\t\treturn (options.root ?? document).querySelector(boundary);\n\t} catch {\n\t\treturn null;\n\t}\n}\n//#endregion\nexport { createDOMRect, forceLayout, getPositioningBoundaryRect, intersectDOMRects, resolvePositioningBoundary };\n\n//# sourceMappingURL=layout.js.map","import { createDismissLayer } from \"../dismiss-layer.js\";\nimport { listen, tryHidePopover, tryShowPopover } from \"@videojs/utils/dom\";\n//#region src/dom/ui/popover/popover.ts\nfunction createPopover(options) {\n\tconst { onOpenChange, closeOnOutsideClick } = options;\n\tlet triggerEl = null;\n\tlet popupEl = null;\n\tlet hoverTimeout = null;\n\tconst capturedPointers = /* @__PURE__ */ new Set();\n\tlet ignoreNextBlurClose = false;\n\tlet blurGuardTimeout = null;\n\tconst layer = createDismissLayer({\n\t\ttransition: options.transition,\n\t\tcloseOnEscape: options.closeOnEscape,\n\t\tonEscapeDismiss(event) {\n\t\t\tevent.preventDefault();\n\t\t\tapplyClose(\"escape\", event);\n\t\t},\n\t\tonDocumentActive(signal) {\n\t\t\tlisten(document, \"pointerdown\", handleDocumentPointerdown, {\n\t\t\t\tcapture: true,\n\t\t\t\tsignal\n\t\t\t});\n\t\t}\n\t});\n\tconst state = layer.input;\n\tconst groupMember = {\n\t\tclose(reason) {\n\t\t\tapplyClose(reason);\n\t\t},\n\t\tget triggerElement() {\n\t\t\treturn triggerEl;\n\t\t}\n\t};\n\tfunction clearHoverTimeout() {\n\t\tif (hoverTimeout !== null) {\n\t\t\tclearTimeout(hoverTimeout);\n\t\t\thoverTimeout = null;\n\t\t}\n\t}\n\tfunction canHover() {\n\t\treturn globalThis.matchMedia?.(\"(hover: hover)\")?.matches ?? false;\n\t}\n\tfunction canOpenOnFocus() {\n\t\tif (!canHover()) return false;\n\t\treturn globalThis.matchMedia?.(\"(pointer: fine)\")?.matches ?? false;\n\t}\n\tfunction canToggleOnClick() {\n\t\tif (!options.openOnHover?.()) return true;\n\t\treturn canHover();\n\t}\n\tfunction clearBlurGuard() {\n\t\tignoreNextBlurClose = false;\n\t\tif (blurGuardTimeout !== null) {\n\t\t\tclearTimeout(blurGuardTimeout);\n\t\t\tblurGuardTimeout = null;\n\t\t}\n\t}\n\tfunction armBlurGuard() {\n\t\tignoreNextBlurClose = true;\n\t\tif (blurGuardTimeout !== null) clearTimeout(blurGuardTimeout);\n\t\tblurGuardTimeout = setTimeout(clearBlurGuard, 500);\n\t}\n\tfunction consumeBlurGuard() {\n\t\tif (!ignoreNextBlurClose) return false;\n\t\tclearBlurGuard();\n\t\treturn true;\n\t}\n\tfunction isTriggerDisabled() {\n\t\tif (!triggerEl) return false;\n\t\tif (triggerEl.hasAttribute(\"disabled\")) return true;\n\t\treturn triggerEl.getAttribute(\"aria-disabled\") === \"true\";\n\t}\n\t/**\n\t* The transition handler manages animation lifecycle via `createState`:\n\t*\n\t* **Open:** `transition.open()` patches `{ active: true, status: 'starting' }`.\n\t* After a double-RAF it patches `{ status: 'idle' }`, then waits for the\n\t* resulting element animations before the promise resolves.\n\t* Frameworks render `data-starting-style` / `data-ending-style` via\n\t* `getPopupAttrs(state)` — no imperative DOM mutation needed.\n\t*\n\t* **Close:** `transition.close(el)` patches `{ status: 'ending' }` (keeping\n\t* `active: true` so the element stays mounted). After a double-RAF it waits\n\t* for `getAnimations()` to settle, then patches `{ active: false, status: 'idle' }`.\n\t*\n\t* `onOpenChange` fires immediately (before animations).\n\t* `onOpenChangeComplete` fires after animations finish.\n\t*/\n\tfunction commitOpen() {\n\t\tconst opening = layer.open(() => popupEl);\n\t\tif (!opening) return;\n\t\toptions.group?.()?.open(groupMember);\n\t\topening.then(() => {\n\t\t\tif (layer.signal.aborted || !state.current.active || state.current.status !== \"idle\") return;\n\t\t\toptions.onOpenChangeComplete?.(true);\n\t\t});\n\t}\n\tfunction commitClose() {\n\t\tconst closing = layer.close(popupEl);\n\t\tif (!closing) return;\n\t\toptions.group?.()?.close(groupMember);\n\t\tclosing.then(() => {\n\t\t\tif (layer.signal.aborted || state.current.active) return;\n\t\t\ttryHidePopover(popupEl);\n\t\t\toptions.onOpenChangeComplete?.(false);\n\t\t});\n\t}\n\tfunction applyOpen(reason, event) {\n\t\tif (layer.signal.aborted) return;\n\t\tconst { active, status } = state.current;\n\t\tif (active && status !== \"ending\") return;\n\t\tonOpenChange(true, event ? {\n\t\t\treason,\n\t\t\tevent\n\t\t} : { reason });\n\t\tif (!options.deferOpenChanges) commitOpen();\n\t}\n\tfunction applyClose(reason, event) {\n\t\tif (layer.signal.aborted) return;\n\t\tconst { active, status } = state.current;\n\t\tif (!active || status === \"ending\") return;\n\t\tonOpenChange(false, event ? {\n\t\t\treason,\n\t\t\tevent\n\t\t} : { reason });\n\t\tif (!options.deferOpenChanges) commitClose();\n\t}\n\tfunction open(reason = \"click\") {\n\t\tapplyOpen(reason);\n\t}\n\tfunction close(reason = \"click\") {\n\t\tclearHoverTimeout();\n\t\tapplyClose(reason);\n\t}\n\tfunction syncOpen(open) {\n\t\tif (!options.deferOpenChanges) return;\n\t\tif (open) commitOpen();\n\t\telse commitClose();\n\t}\n\tfunction handleDocumentPointerdown(event) {\n\t\tif (!closeOnOutsideClick() || !state.current.active) return;\n\t\tconst path = event.composedPath();\n\t\tif (triggerEl && path.includes(triggerEl) || popupEl && path.includes(popupEl)) {\n\t\t\tarmBlurGuard();\n\t\t\treturn;\n\t\t}\n\t\tclearBlurGuard();\n\t\tapplyClose(\"outside-click\", event);\n\t}\n\tlayer.signal.addEventListener(\"abort\", () => {\n\t\toptions.group?.()?.close(groupMember);\n\t\tclearHoverTimeout();\n\t\tclearBlurGuard();\n\t\tcapturedPointers.clear();\n\t\ttriggerEl = null;\n\t\tpopupEl = null;\n\t});\n\tconst triggerProps = {\n\t\tonClick(event) {\n\t\t\tif (!canToggleOnClick()) return;\n\t\t\tif (isTriggerDisabled()) return;\n\t\t\tif (state.current.active && state.current.status !== \"ending\") applyClose(\"click\", event);\n\t\t\telse applyOpen(\"click\", event);\n\t\t},\n\t\tonPointerEnter(_event) {\n\t\t\tif (!options.openOnHover?.()) return;\n\t\t\tif (!canHover()) return;\n\t\t\tclearHoverTimeout();\n\t\t\tif (state.current.active) return;\n\t\t\tconst delay = options.delay?.() ?? 300;\n\t\t\thoverTimeout = setTimeout(() => applyOpen(\"hover\"), delay);\n\t\t},\n\t\tonPointerLeave(_event) {\n\t\t\tif (!options.openOnHover?.()) return;\n\t\t\tif (!canHover()) return;\n\t\t\tclearHoverTimeout();\n\t\t\tif (!state.current.active) return;\n\t\t\tconst closeDelay = options.closeDelay?.() ?? 0;\n\t\t\thoverTimeout = setTimeout(() => applyClose(\"hover\"), closeDelay);\n\t\t},\n\t\tonFocusIn(_event) {\n\t\t\tif (options.openOnHover?.()) {\n\t\t\t\tif (!canOpenOnFocus()) return;\n\t\t\t\tapplyOpen(\"focus\");\n\t\t\t}\n\t\t},\n\t\tonFocusOut(event) {\n\t\t\tconst relatedTarget = event.relatedTarget;\n\t\t\tif (relatedTarget && (triggerEl?.contains(relatedTarget) || popupEl?.contains(relatedTarget))) return;\n\t\t\tif (options.openOnHover?.()) applyClose(\"blur\");\n\t\t}\n\t};\n\tconst popupProps = {\n\t\tonPointerEnter(_event) {\n\t\t\tif (!options.openOnHover?.()) return;\n\t\t\tclearHoverTimeout();\n\t\t},\n\t\tonPointerLeave(_event) {\n\t\t\tif (!options.openOnHover?.()) return;\n\t\t\tif (capturedPointers.size > 0) return;\n\t\t\tclearHoverTimeout();\n\t\t\tif (!state.current.active) return;\n\t\t\tconst closeDelay = options.closeDelay?.() ?? 0;\n\t\t\thoverTimeout = setTimeout(() => applyClose(\"hover\"), closeDelay);\n\t\t},\n\t\tonGotPointerCapture(event) {\n\t\t\tcapturedPointers.add(event.pointerId);\n\t\t},\n\t\tonLostPointerCapture(event) {\n\t\t\tcapturedPointers.delete(event.pointerId);\n\t\t},\n\t\tonFocusOut(event) {\n\t\t\tconst relatedTarget = event.relatedTarget;\n\t\t\tif (relatedTarget && (triggerEl?.contains(relatedTarget) || popupEl?.contains(relatedTarget))) return;\n\t\t\tif (consumeBlurGuard()) return;\n\t\t\tif (relatedTarget !== null) {\n\t\t\t\tapplyClose(\"blur\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tif (!state.current.active || state.current.status === \"ending\" || state.current.status === \"starting\") return;\n\t\t\t\t\tconst active = document.activeElement;\n\t\t\t\t\tif (active && (triggerEl?.contains(active) || popupEl?.contains(active))) return;\n\t\t\t\t\tapplyClose(\"blur\");\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t};\n\tfunction setTriggerElement(el) {\n\t\ttriggerEl = el;\n\t}\n\tfunction setPopupElement(el) {\n\t\tif (!el && popupEl && state.current.active) tryHidePopover(popupEl);\n\t\tpopupEl = el;\n\t\tif (el) {\n\t\t\tif (state.current.active) tryShowPopover(el);\n\t\t}\n\t}\n\treturn {\n\t\tinput: state,\n\t\ttriggerProps,\n\t\tpopupProps,\n\t\tget triggerElement() {\n\t\t\treturn triggerEl;\n\t\t},\n\t\tsetTriggerElement,\n\t\tsetPopupElement,\n\t\topen,\n\t\tclose,\n\t\tsyncOpen,\n\t\tdestroy: layer.destroy\n\t};\n}\n//#endregion\nexport { createPopover };\n\n//# sourceMappingURL=popover.js.map","//#region src/core/ui/menu/menu-css-vars.ts\n/** CSS custom property names for menu layout and positioning. */\nconst MenuCSSVars = {\n\t/** Width of the active menu panel (px). */\n\twidth: \"--media-menu-width\",\n\t/** Height of the active menu panel (px). */\n\theight: \"--media-menu-height\",\n\t/** Viewport-constrained max width for the menu (px). */\n\tavailableWidth: \"--media-menu-available-width\",\n\t/** Viewport-constrained max height for the menu (px). */\n\tavailableHeight: \"--media-menu-available-height\"\n};\n//#endregion\nexport { MenuCSSVars };\n\n//# sourceMappingURL=menu-css-vars.js.map","//#region src/core/ui/menu/menu-item-data-attrs.ts\n/**\n* Data attributes set on all navigable menu item elements.\n*\n* @parts item, radio-item, checkbox-item, trigger\n*/\nconst MenuItemDataAttrs = {\n\t/**\n\t* Present on all navigable item types: Item, RadioItem, CheckboxItem, and\n\t* the Trigger when acting as a submenu trigger inside a parent menu.\n\t* Use `[data-item]` as a shared selector to target all item types at once.\n\t*/\n\titem: \"data-item\",\n\t/**\n\t* Present when the item is highlighted. Set to `pointer` when pointer\n\t* movement caused the highlight; otherwise empty.\n\t*/\n\thighlighted: \"data-highlighted\"\n};\n//#endregion\nexport { MenuItemDataAttrs };\n\n//# sourceMappingURL=menu-item-data-attrs.js.map","//#region src/core/ui/popover/popover-css-vars.ts\nconst PopoverCSSVars = {\n\t/** Distance between the popup and the trigger along the side axis. */\n\tsideOffset: \"--media-popover-side-offset\",\n\t/** Distance between the popup and the trigger along the alignment axis. */\n\talignOffset: \"--media-popover-align-offset\",\n\t/** Minimum distance between the popup and the positioning boundary. */\n\tboundaryOffset: \"--media-popover-boundary-offset\",\n\t/** The anchor element's width. */\n\tanchorWidth: \"--media-popover-anchor-width\",\n\t/** The anchor element's height. */\n\tanchorHeight: \"--media-popover-anchor-height\",\n\t/** Available width between the trigger and the boundary edge. */\n\tavailableWidth: \"--media-popover-available-width\",\n\t/** Available height between the trigger and the boundary edge. */\n\tavailableHeight: \"--media-popover-available-height\"\n};\n//#endregion\nexport { PopoverCSSVars };\n\n//# sourceMappingURL=popover-css-vars.js.map","import { MenuCSSVars } from \"../../../core/ui/menu/menu-css-vars.js\";\nimport { MenuItemDataAttrs } from \"../../../core/ui/menu/menu-item-data-attrs.js\";\nimport { PopoverCSSVars } from \"../../../core/ui/popover/popover-css-vars.js\";\nimport { forceLayout } from \"../../utils/layout.js\";\nimport { createPopover } from \"../popover/popover.js\";\n//#region src/dom/ui/menu/create-menu.ts\nfunction isMenuNavigationKey(event) {\n\tconst { key } = event;\n\treturn key === \"ArrowDown\" || key === \"ArrowUp\" || key === \"ArrowLeft\" || key === \"ArrowRight\" || key === \"Home\" || key === \"End\" || key === \"Enter\" || key === \" \" || key === \"Escape\" || key.length === 1 && !event.ctrlKey && !event.altKey && !event.metaKey;\n}\nfunction getRootPositionOptions(side, align) {\n\tif (!side || !align) return null;\n\treturn {\n\t\tside,\n\t\talign\n\t};\n}\n/** Uses Popover offset inputs while publishing Menu-owned available-size outputs. */\nconst MenuPositioningCSSVars = {\n\t...PopoverCSSVars,\n\tavailableWidth: MenuCSSVars.availableWidth,\n\tavailableHeight: MenuCSSVars.availableHeight\n};\nfunction completeMenuItemSelection(menu) {\n\tmenu.close();\n}\nfunction createMenu(options) {\n\tconst items = [];\n\tlet highlightedItem = null;\n\tlet triggerElement = null;\n\tlet contentElement = null;\n\tconst submenus = /* @__PURE__ */ new Set();\n\tlet typeaheadBuffer = \"\";\n\tlet typeaheadTimer = null;\n\tlet openRafId = 0;\n\tlet lastCloseReason = null;\n\tfunction isItemHidden(item) {\n\t\tconst availability = item.getAttribute(\"data-availability\");\n\t\treturn Boolean(item.hidden || item.hasAttribute(\"data-hidden\") || item.getAttribute(\"aria-hidden\") === \"true\" || availability === \"unavailable\" || availability === \"unsupported\");\n\t}\n\tfunction getNavigableItems() {\n\t\treturn items.filter((item) => !isItemHidden(item));\n\t}\n\tfunction getAdjacentNavigableItem(direction) {\n\t\tif (items.length === 0) return null;\n\t\tconst currentIndex = highlightedItem ? items.indexOf(highlightedItem) : direction === 1 ? -1 : 0;\n\t\tfor (let offset = 1; offset <= items.length; offset++) {\n\t\t\tconst index = (currentIndex + direction * offset + items.length) % items.length;\n\t\t\tconst candidate = items[index];\n\t\t\tif (candidate && !isItemHidden(candidate)) return candidate;\n\t\t}\n\t\treturn null;\n\t}\n\tfunction highlight(element, highlightOptions) {\n\t\tif (element && isItemHidden(element)) {\n\t\t\tif (element === highlightedItem) highlight(getAdjacentNavigableItem(1), highlightOptions);\n\t\t\treturn;\n\t\t}\n\t\tif (highlightedItem === element) {\n\t\t\telement?.setAttribute(MenuItemDataAttrs.highlighted, highlightOptions?.pointer === true ? \"pointer\" : \"\");\n\t\t\treturn;\n\t\t}\n\t\tconst previousItem = highlightedItem;\n\t\tif (previousItem) previousItem.tabIndex = -1;\n\t\thighlightedItem = element;\n\t\tif (element) {\n\t\t\telement.tabIndex = 0;\n\t\t\telement.setAttribute(MenuItemDataAttrs.highlighted, highlightOptions?.pointer === true ? \"pointer\" : \"\");\n\t\t\tif (previousItem && compareItems(element, previousItem) < 0 && highlightOptions?.pointer) forceLayout(element.parentElement);\n\t\t\tpreviousItem?.removeAttribute(MenuItemDataAttrs.highlighted);\n\t\t\tif (highlightOptions?.focus !== false) if (highlightOptions?.preventScroll) element.focus({ preventScroll: true });\n\t\t\telse element.focus();\n\t\t} else previousItem?.removeAttribute(MenuItemDataAttrs.highlighted);\n\t\toptions.onHighlightChange?.(element);\n\t}\n\tfunction clearHighlight() {\n\t\tif (highlightedItem) {\n\t\t\thighlightedItem.tabIndex = -1;\n\t\t\thighlightedItem.removeAttribute(MenuItemDataAttrs.highlighted);\n\t\t\thighlightedItem = null;\n\t\t\toptions.onHighlightChange?.(null);\n\t\t}\n\t}\n\tfunction highlightFirstItem(options) {\n\t\thighlight(getNavigableItems()[0] ?? null, options);\n\t}\n\tfunction restoreFocus(focusOptions) {\n\t\tif (lastCloseReason === \"imperative-action\" || lastCloseReason === \"group-open\" || lastCloseReason === \"blur\" || lastCloseReason === \"outside-click\") return;\n\t\tif (focusOptions) triggerElement?.focus(focusOptions);\n\t\telse triggerElement?.focus();\n\t}\n\tfunction getInitialHighlightItem() {\n\t\tconst navigableItems = getNavigableItems();\n\t\treturn navigableItems.find((item) => item.matches(\"[role=\\\"menuitemradio\\\"][aria-checked=\\\"true\\\"], [aria-selected=\\\"true\\\"]\")) ?? navigableItems[0] ?? null;\n\t}\n\tfunction clearTypeahead() {\n\t\tif (typeaheadTimer !== null) {\n\t\t\tclearTimeout(typeaheadTimer);\n\t\t\ttypeaheadTimer = null;\n\t\t}\n\t\ttypeaheadBuffer = \"\";\n\t}\n\tfunction scheduleInitialHighlight() {\n\t\tcancelAnimationFrame(openRafId);\n\t\topenRafId = requestAnimationFrame(() => {\n\t\t\topenRafId = 0;\n\t\t\tif (!popover.input.current.active || popover.input.current.status === \"ending\" || highlightedItem) return;\n\t\t\thighlight(getInitialHighlightItem());\n\t\t});\n\t}\n\tfunction handleTypeahead(char) {\n\t\ttypeaheadBuffer = typeaheadBuffer.length === 1 && typeaheadBuffer.toLowerCase() === char.toLowerCase() ? char : typeaheadBuffer + char;\n\t\tif (typeaheadTimer !== null) clearTimeout(typeaheadTimer);\n\t\ttypeaheadTimer = setTimeout(clearTypeahead, 500);\n\t\tconst navigableItems = getNavigableItems();\n\t\tconst searchStart = (highlightedItem ? navigableItems.indexOf(highlightedItem) : -1) + 1;\n\t\tconst candidates = [...navigableItems.slice(searchStart), ...navigableItems.slice(0, searchStart)];\n\t\tconst needle = typeaheadBuffer.toLowerCase();\n\t\tconst match = candidates.find((candidate) => {\n\t\t\treturn (candidate.textContent?.trim().toLowerCase() ?? \"\").startsWith(needle);\n\t\t});\n\t\tif (match) highlight(match);\n\t}\n\tconst popover = createPopover({\n\t\ttransition: options.transition,\n\t\tdeferOpenChanges: true,\n\t\tonOpenChange(open, details) {\n\t\t\tlastCloseReason = open ? null : details.reason;\n\t\t\toptions.onOpenChange(open, details);\n\t\t\tif (open) scheduleInitialHighlight();\n\t\t\telse {\n\t\t\t\tclearHighlight();\n\t\t\t\tclearTypeahead();\n\t\t\t}\n\t\t},\n\t\tonOpenChangeComplete(open) {\n\t\t\toptions.onOpenChangeComplete?.(open);\n\t\t\tif (!open) restoreFocus();\n\t\t},\n\t\tcloseOnEscape: options.closeOnEscape,\n\t\tcloseOnOutsideClick: options.closeOnOutsideClick,\n\t\t...options.group ? { group: options.group } : {}\n\t});\n\tconst contentProps = {\n\t\tonFocusOut: popover.popupProps.onFocusOut,\n\t\tonKeyDown(event) {\n\t\t\tconst { key } = event;\n\t\t\tconst navigableItems = getNavigableItems();\n\t\t\tif (key !== \"Escape\" && isMenuNavigationKey(event) && !event.defaultPrevented) event.preventDefault();\n\t\t\tif (navigableItems.length === 0) return;\n\t\t\tswitch (key) {\n\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\thighlight(getAdjacentNavigableItem(1));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\thighlight(getAdjacentNavigableItem(-1));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Home\":\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\thighlight(navigableItems[0] ?? null);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"End\":\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\thighlight(navigableItems[navigableItems.length - 1] ?? null);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Enter\":\n\t\t\t\tcase \" \":\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif (highlightedItem && navigableItems.includes(highlightedItem)) highlightedItem.click();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: if (key.length === 1 && !event.ctrlKey && !event.altKey && !event.metaKey) handleTypeahead(key);\n\t\t\t}\n\t\t}\n\t};\n\tfunction handleTriggerKeyDown(event) {\n\t\tconst input = popover.input.current;\n\t\tif (!input.active || input.status === \"ending\") return;\n\t\tif (event.key === \"Escape\") return;\n\t\tif (!isMenuNavigationKey(event)) return;\n\t\tcontentProps.onKeyDown(event);\n\t\tevent.stopPropagation();\n\t}\n\tfunction setTriggerElement(element) {\n\t\ttriggerElement = element;\n\t\tpopover.setTriggerElement(element);\n\t}\n\tfunction setContentElement(element) {\n\t\tcontentElement = element;\n\t\tpopover.setPopupElement(element);\n\t}\n\tfunction compareItems(a, b) {\n\t\tif (a === b) return 0;\n\t\tconst position = a.compareDocumentPosition(b);\n\t\tif (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n\t\tif (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n\t\treturn 0;\n\t}\n\tfunction registerItem(element) {\n\t\telement.tabIndex = -1;\n\t\telement.setAttribute(MenuItemDataAttrs.item, \"\");\n\t\titems.push(element);\n\t\titems.sort(compareItems);\n\t\tif (popover.input.current.active && popover.input.current.status !== \"ending\" && !highlightedItem) scheduleInitialHighlight();\n\t\treturn () => {\n\t\t\tconst index = items.indexOf(element);\n\t\t\tif (index !== -1) items.splice(index, 1);\n\t\t\tif (highlightedItem === element) clearHighlight();\n\t\t};\n\t}\n\tfunction registerSubmenu(menu) {\n\t\tsubmenus.add(menu);\n\t\treturn () => submenus.delete(menu);\n\t}\n\tfunction syncOpen(open) {\n\t\tif (!open) for (const submenu of submenus) submenu.close(\"imperative-action\");\n\t\tpopover.syncOpen(open);\n\t}\n\tfunction destroy() {\n\t\tcancelAnimationFrame(openRafId);\n\t\topenRafId = 0;\n\t\tclearTypeahead();\n\t\tsubmenus.clear();\n\t\tpopover.destroy();\n\t}\n\treturn {\n\t\tinput: popover.input,\n\t\ttriggerProps: {\n\t\t\tonClick: popover.triggerProps.onClick,\n\t\t\tonKeyDown: handleTriggerKeyDown\n\t\t},\n\t\tcontentProps,\n\t\tget triggerElement() {\n\t\t\treturn triggerElement;\n\t\t},\n\t\tget contentElement() {\n\t\t\treturn contentElement;\n\t\t},\n\t\tsetTriggerElement,\n\t\tsetContentElement,\n\t\tregisterItem,\n\t\tregisterSubmenu,\n\t\thighlight,\n\t\thighlightFirstItem,\n\t\trestoreFocus,\n\t\topen: popover.open,\n\t\tclose: popover.close,\n\t\tsyncOpen,\n\t\tdestroy\n\t};\n}\n//#endregion\nexport { MenuPositioningCSSVars, completeMenuItemSelection, createMenu, getRootPositionOptions, isMenuNavigationKey };\n\n//# sourceMappingURL=create-menu.js.map","import { MenuCSSVars } from \"../../../core/ui/menu/menu-css-vars.js\";\nimport { findElementChild, followElementPath, getElementChildren, measureElement, measureElementChildren, observeElements, readCSSLength, restoreAttributes, snapshotAttributes, walkAncestors } from \"@videojs/utils/dom\";\n//#region src/dom/ui/menu/menu-size.ts\nconst MENU_SUBMENU_ATTR = \"data-submenu\";\nconst MENU_SUBMENU_EXPANDED_ATTR = \"data-submenu-expanded\";\nconst coveredStates = /* @__PURE__ */ new WeakMap();\nconst rootSizes = /* @__PURE__ */ new WeakMap();\nfunction getActiveSubmenu(content) {\n\treturn findElementChild(content, (child) => child instanceof HTMLElement && child.hasAttribute(MENU_SUBMENU_ATTR) && !child.hidden);\n}\nfunction getRootChildren(content) {\n\treturn getElementChildren(content, (child) => child instanceof HTMLElement && !child.hasAttribute(MENU_SUBMENU_ATTR));\n}\nfunction setCovered(element, covered) {\n\tconst previous = coveredStates.get(element);\n\tif (covered) {\n\t\tif (!previous) coveredStates.set(element, snapshotAttributes(element, [\"aria-hidden\", \"inert\"]));\n\t\telement.setAttribute(\"aria-hidden\", \"true\");\n\t\telement.setAttribute(\"inert\", \"\");\n\t\treturn;\n\t}\n\tif (!previous) return;\n\trestoreAttributes(element, previous);\n\tcoveredStates.delete(element);\n}\nfunction measureMenuElement(element, width) {\n\treturn measureElement(element, {\n\t\toverflow: \"both\",\n\t\tstyles: {\n\t\t\tinsetInlineStart: \"0px\",\n\t\t\tinsetInlineEnd: \"auto\",\n\t\t\twidth: width === void 0 ? \"max-content\" : `${width}px`,\n\t\t\theight: \"auto\",\n\t\t\tminWidth: \"0px\",\n\t\t\tmaxWidth: \"none\"\n\t\t}\n\t});\n}\nfunction getAvailableWidth(content) {\n\treturn walkAncestors(content, (element) => {\n\t\tconst width = readCSSLength(element, MenuCSSVars.availableWidth);\n\t\treturn width !== null && width > 0 ? width : void 0;\n\t}) ?? null;\n}\nfunction constrainWidth(content, width) {\n\tconst availableWidth = getAvailableWidth(content);\n\treturn availableWidth === null ? width : Math.min(width, Math.max(0, availableWidth));\n}\nfunction getRootSize(content, children) {\n\treturn measureElementChildren(content, {\n\t\tchildren,\n\t\tincludePadding: true,\n\t\tmaxWidth: getAvailableWidth(content),\n\t\tmeasure: measureMenuElement\n\t});\n}\nfunction getConstrainedElementSize(content, element) {\n\tconst naturalSize = measureMenuElement(element);\n\tconst width = constrainWidth(content, naturalSize.width);\n\tif (width >= naturalSize.width) return naturalSize;\n\treturn {\n\t\twidth,\n\t\theight: measureMenuElement(element, width).height\n\t};\n}\nfunction getCurrentSize(content) {\n\tconst path = followElementPath(content, (current) => {\n\t\tconst activeSubmenu = getActiveSubmenu(current);\n\t\treturn activeSubmenu?.hasAttribute(\"data-ending-style\") ? null : activeSubmenu;\n\t});\n\tconst current = path[path.length - 1];\n\tconst activeSubmenu = getActiveSubmenu(current);\n\tconst rootChildren = getRootChildren(current);\n\tconst measuredRootSize = getRootSize(current, rootChildren);\n\tconst ownRootSize = current.hasAttribute(MENU_SUBMENU_ATTR) && rootChildren.length === 0 ? getConstrainedElementSize(current, current) : measuredRootSize;\n\tif (!activeSubmenu?.hasAttribute(\"data-ending-style\")) {\n\t\trootSizes.set(current, ownRootSize);\n\t\treturn ownRootSize;\n\t}\n\treturn rootSizes.get(current) ?? ownRootSize;\n}\n/** Synchronize menu size and accessibility to the active submenu, if any. */\nfunction syncMenuSize(content) {\n\tif (!content) return;\n\tconst activeSubmenu = getActiveSubmenu(content);\n\tconst rootChildren = getRootChildren(content);\n\tconst covered = activeSubmenu !== null;\n\tif (activeSubmenu) content.setAttribute(MENU_SUBMENU_EXPANDED_ATTR, activeSubmenu.hasAttribute(\"data-ending-style\") ? \"false\" : \"true\");\n\telse content.removeAttribute(MENU_SUBMENU_EXPANDED_ATTR);\n\tfor (const child of rootChildren) setCovered(child, covered);\n\tconst size = getCurrentSize(content);\n\tcontent.style.setProperty(MenuCSSVars.width, `${Math.ceil(size.width)}px`);\n\tcontent.style.setProperty(MenuCSSVars.height, `${Math.ceil(size.height)}px`);\n}\n/** Synchronize a menu and each direct menu-content ancestor. */\nfunction syncMenuSizeChain(content) {\n\tlet current = content;\n\twhile (current) {\n\t\tsyncMenuSize(current);\n\t\tconst parent = current.parentElement;\n\t\tcurrent = parent?.getAttribute(\"role\") === \"menu\" ? parent : null;\n\t}\n}\n/** Re-measure when the active submenu or ordinary root content changes size. */\nfunction observeMenuSize(content, onResize) {\n\treturn observeElements({\n\t\troot: content,\n\t\tgetElements: () => {\n\t\t\tconst activeSubmenu = getActiveSubmenu(content);\n\t\t\treturn activeSubmenu && !activeSubmenu.hasAttribute(\"data-ending-style\") ? [activeSubmenu] : getRootChildren(content);\n\t\t},\n\t\tmutations: { childList: true },\n\t\tonChange: onResize\n\t});\n}\n//#endregion\nexport { observeMenuSize, syncMenuSize, syncMenuSizeChain };\n\n//# sourceMappingURL=menu-size.js.map","import { isFunction } from \"@videojs/utils/predicate\";\n//#region src/dom/utils/event.ts\nfunction isEventWithinElement(event, element) {\n\tif (!element) return false;\n\tif (isFunction(event.composedPath)) return event.composedPath().includes(element);\n\tconst target = event.target;\n\treturn target instanceof Node && element.contains(target);\n}\n//#endregion\nexport { isEventWithinElement };\n\n//# sourceMappingURL=event.js.map","//#region src/number/number.ts\n/** Clamp a value between min and max (inclusive). */\nfunction clamp(value, min, max) {\n\treturn Math.max(min, Math.min(max, value));\n}\n/**\n* Convert a value within a range to a clamped percentage (0–100).\n*\n* @param value - Value to convert.\n* @param min - Start of the range.\n* @param max - End of the range.\n*/\nfunction toPercent(value, min, max) {\n\tconst range = max - min;\n\tif (!Number.isFinite(range) || range <= 0) return 0;\n\treturn clamp((value - min) / range * 100, 0, 100);\n}\n/** Snap a value to the nearest step, offset from min. */\nfunction roundToStep(value, step, min) {\n\tconst nearest = Math.round((value - min) / step) * step + min;\n\tconst dot = `${step}`.indexOf(\".\");\n\treturn dot === -1 ? nearest : Number(nearest.toFixed(`${step}`.length - dot - 1));\n}\n//#endregion\nexport { clamp, roundToStep, toPercent };\n\n//# sourceMappingURL=number.js.map","import { PopoverCSSVars } from \"../../../core/ui/popover/popover-css-vars.js\";\nimport { createDOMRect } from \"../../utils/layout.js\";\nimport { getElementSize, resolveCSSLength, supportsAnchorPositioning } from \"@videojs/utils/dom\";\nimport { clamp } from \"@videojs/utils/number\";\n//#region src/dom/ui/popover/popover-positioning.ts\nconst ZERO_OFFSETS = {\n\tsideOffset: 0,\n\talignOffset: 0,\n\tboundaryOffset: 0\n};\nconst OPPOSITE_SIDE = {\n\ttop: \"bottom\",\n\tbottom: \"top\",\n\tleft: \"right\",\n\tright: \"left\"\n};\nfunction formatPixels(value) {\n\treturn `${clamp(value, 0, Infinity)}px`;\n}\nfunction shiftCrossAxis(value, boundaryStart, boundaryEnd, size) {\n\tconst max = boundaryEnd - size;\n\treturn max < boundaryStart ? boundaryStart : clamp(value, boundaryStart, max);\n}\nfunction getAnchorCrossAxisShift(start, end, size, boundaryStart, boundaryEnd, align, alignOffset, boundaryOffset) {\n\tconst base = align === \"start\" ? start + alignOffset : align === \"end\" ? end + alignOffset : start + size / 2 + alignOffset;\n\tconst desiredTranslate = align === \"start\" ? \"0px\" : align === \"end\" ? \"-100%\" : \"-50%\";\n\treturn {\n\t\tbase: `${base}px`,\n\t\ttranslate: `clamp(${boundaryStart + boundaryOffset - base}px, ${desiredTranslate}, calc(${boundaryEnd - boundaryOffset - base}px - 100%))`\n\t};\n}\n/**\n* Get positioning styles for the popup element.\n*\n* When the browser supports CSS Anchor Positioning, returns native CSS properties\n* that reference the provided CSS var names for side/align offsets — no JS offset\n* values needed.\n*\n* When rects are provided and anchor positioning is unsupported, falls back to\n* manual JS-computed positioning. The caller must resolve offset CSS vars via\n* `getComputedStyle` and pass them as `offsets`.\n*\n* Returns camelCase keys for standard CSS properties and `--*` keys for\n* custom properties — compatible with both React's `style` prop and\n* `applyStyles()` from `@videojs/utils/dom`.\n*/\nfunction getAnchorPositionStyle(anchorName, opts, triggerRect, popupRect, boundaryRect, offsets, cssVars = PopoverCSSVars) {\n\tif (supportsAnchorPositioning()) return {\n\t\t...getAnchorPositionCSS(anchorName, opts, cssVars, triggerRect, boundaryRect, offsets),\n\t\t...triggerRect && boundaryRect ? getPositioningCSSVars(triggerRect, boundaryRect, opts, offsets, cssVars) : {}\n\t};\n\tif (triggerRect && popupRect) {\n\t\tconst resolved = offsets ?? ZERO_OFFSETS;\n\t\treturn {\n\t\t\tposition: \"fixed\",\n\t\t\tmargin: \"0\",\n\t\t\t...getManualPositionStyle(triggerRect, popupRect, opts, resolved, boundaryRect),\n\t\t\t...boundaryRect ? getPositioningCSSVars(triggerRect, boundaryRect, opts, resolved, cssVars) : {}\n\t\t};\n\t}\n\treturn {};\n}\nfunction getAnchorPositionCSS(anchorName, opts, cssVars = PopoverCSSVars, triggerRect, boundaryRect, offsets = ZERO_OFFSETS) {\n\tconst SIDE_OFFSET_VAR = `var(${cssVars.sideOffset}, 0px)`;\n\tconst ALIGN_OFFSET_VAR = `var(${cssVars.alignOffset}, 0px)`;\n\tconst { side, align } = opts;\n\tconst boundaryOffset = offsets.boundaryOffset ?? 0;\n\tconst style = {\n\t\tpositionAnchor: `--${anchorName}`,\n\t\tposition: \"fixed\",\n\t\tinset: \"auto\",\n\t\tmargin: \"0\",\n\t\tjustifySelf: \"normal\",\n\t\talignSelf: \"normal\",\n\t\tmarginInlineStart: \"0\",\n\t\tmarginBlockStart: \"0\",\n\t\ttranslate: \"none\"\n\t};\n\tconst insetProp = OPPOSITE_SIDE[side];\n\tif (side === \"top\" || side === \"bottom\") {\n\t\tstyle[insetProp] = `calc(anchor(${side}) + ${SIDE_OFFSET_VAR})`;\n\t\tif (triggerRect && boundaryRect) {\n\t\t\tconst { base, translate } = getAnchorCrossAxisShift(triggerRect.left, triggerRect.right, triggerRect.width, boundaryRect.left, boundaryRect.right, align, offsets.alignOffset, boundaryOffset);\n\t\t\tstyle.left = base;\n\t\t\tstyle.translate = `${translate} 0`;\n\t\t\treturn style;\n\t\t}\n\t\tif (align === \"start\") style.left = `calc(anchor(left) + ${ALIGN_OFFSET_VAR})`;\n\t\telse if (align === \"end\") style.right = `calc(anchor(right) + ${ALIGN_OFFSET_VAR})`;\n\t\telse {\n\t\t\tstyle.justifySelf = \"anchor-center\";\n\t\t\tstyle.marginInlineStart = ALIGN_OFFSET_VAR;\n\t\t}\n\t} else {\n\t\tstyle[insetProp] = `calc(anchor(${side}) + ${SIDE_OFFSET_VAR})`;\n\t\tif (triggerRect && boundaryRect) {\n\t\t\tconst { base, translate } = getAnchorCrossAxisShift(triggerRect.top, triggerRect.bottom, triggerRect.height, boundaryRect.top, boundaryRect.bottom, align, offsets.alignOffset, boundaryOffset);\n\t\t\tstyle.top = base;\n\t\t\tstyle.translate = `0 ${translate}`;\n\t\t\treturn style;\n\t\t}\n\t\tif (align === \"start\") style.top = `calc(anchor(top) + ${ALIGN_OFFSET_VAR})`;\n\t\telse if (align === \"end\") style.bottom = `calc(anchor(bottom) + ${ALIGN_OFFSET_VAR})`;\n\t\telse {\n\t\t\tstyle.alignSelf = \"anchor-center\";\n\t\t\tstyle.marginBlockStart = ALIGN_OFFSET_VAR;\n\t\t}\n\t}\n\treturn style;\n}\n/**\n* Compute CSS variables for sizing constraints relative to the anchor/boundary.\n*\n* Accepts a `cssVars` map so the same logic works for both popover\n* (`--media-popover-*`) and tooltip (`--media-tooltip-*`) namespaces.\n*/\nfunction getPositioningCSSVars(triggerRect, boundaryRect, opts, offsets = ZERO_OFFSETS, cssVars = PopoverCSSVars) {\n\tconst vars = {};\n\tconst { side } = opts;\n\tconst boundaryOffset = offsets.boundaryOffset ?? 0;\n\tconst boundaryStartX = boundaryRect.left + boundaryOffset;\n\tconst boundaryEndX = boundaryRect.right - boundaryOffset;\n\tconst boundaryStartY = boundaryRect.top + boundaryOffset;\n\tconst boundaryEndY = boundaryRect.bottom - boundaryOffset;\n\tvars[cssVars.anchorWidth] = `${triggerRect.width}px`;\n\tvars[cssVars.anchorHeight] = `${triggerRect.height}px`;\n\tif (side === \"top\" || side === \"bottom\") {\n\t\tconst sideSpace = side === \"top\" ? triggerRect.top - boundaryStartY : boundaryEndY - triggerRect.bottom;\n\t\tvars[cssVars.availableHeight] = formatPixels(sideSpace - offsets.sideOffset);\n\t\tvars[cssVars.availableWidth] = formatPixels(boundaryEndX - boundaryStartX);\n\t} else {\n\t\tconst sideSpace = side === \"left\" ? triggerRect.left - boundaryStartX : boundaryEndX - triggerRect.right;\n\t\tvars[cssVars.availableWidth] = formatPixels(sideSpace - offsets.sideOffset);\n\t\tvars[cssVars.availableHeight] = formatPixels(boundaryEndY - boundaryStartY);\n\t}\n\treturn vars;\n}\n/**\n* Compute manual positioning when CSS Anchor Positioning is not supported.\n*\n* Returns inline `top`/`left` styles in **viewport coordinates** for use\n* with `position: fixed` (the popup is in the top layer). All rects from\n* `getBoundingClientRect()` are already viewport-relative.\n*\n* Offsets are resolved by the caller from CSS custom properties via\n* `getComputedStyle()` and passed as `offsets`.\n*/\nfunction getManualPositionStyle(triggerRect, popupRect, opts, offsets = {\n\tsideOffset: 0,\n\talignOffset: 0\n}, boundaryRect) {\n\tconst { side, align } = opts;\n\tconst { sideOffset, alignOffset } = offsets;\n\tlet top = 0;\n\tlet bottom;\n\tlet left = 0;\n\tlet right;\n\tif (side === \"top\") bottom = `calc(100% - ${triggerRect.top}px + ${sideOffset}px)`;\n\telse if (side === \"bottom\") top = triggerRect.bottom + sideOffset;\n\telse if (side === \"left\") right = `calc(100% - ${triggerRect.left}px + ${sideOffset}px)`;\n\telse left = triggerRect.right + sideOffset;\n\tif (side === \"top\" || side === \"bottom\") if (align === \"start\") left = triggerRect.left + alignOffset;\n\telse if (align === \"end\") left = triggerRect.right - popupRect.width + alignOffset;\n\telse left = triggerRect.left + (triggerRect.width - popupRect.width) / 2 + alignOffset;\n\telse if (align === \"start\") top = triggerRect.top + alignOffset;\n\telse if (align === \"end\") top = triggerRect.bottom - popupRect.height + alignOffset;\n\telse top = triggerRect.top + (triggerRect.height - popupRect.height) / 2 + alignOffset;\n\tif (boundaryRect) {\n\t\tconst boundaryOffset = offsets.boundaryOffset ?? 0;\n\t\tif (side === \"top\" || side === \"bottom\") left = shiftCrossAxis(left, boundaryRect.left + boundaryOffset, boundaryRect.right - boundaryOffset, popupRect.width);\n\t\telse top = shiftCrossAxis(top, boundaryRect.top + boundaryOffset, boundaryRect.bottom - boundaryOffset, popupRect.height);\n\t}\n\treturn {\n\t\ttop: side === \"top\" ? \"auto\" : `${top}px`,\n\t\tbottom: bottom ?? \"auto\",\n\t\tleft: side === \"left\" ? \"auto\" : `${left}px`,\n\t\tright: right ?? \"auto\"\n\t};\n}\n/**\n* Read positioning offset CSS custom properties from the\n* popup element's computed style, returning numeric pixel values.\n*/\nfunction resolveOffsets(el, cssVars = PopoverCSSVars) {\n\tconst computed = getComputedStyle(el);\n\treturn {\n\t\tsideOffset: resolveCSSLength(el, computed.getPropertyValue(cssVars.sideOffset)),\n\t\talignOffset: resolveCSSLength(el, computed.getPropertyValue(cssVars.alignOffset)),\n\t\tboundaryOffset: resolveCSSLength(el, computed.getPropertyValue(cssVars.boundaryOffset))\n\t};\n}\n/**\n* Measure the popup's layout box for positioning.\n*\n* `getBoundingClientRect()` includes active transforms, which causes the\n* fallback position to drift while opening/closing animations scale the popup.\n* Using layout dimensions preserves the untransformed size, while the\n* side-axis scroll dimension includes content clipped by size constraints.\n*/\nfunction getPopupPositionRect(el, side) {\n\tconst rect = el.getBoundingClientRect();\n\tconst size = getElementSize(el, {\n\t\tbox: \"layout\",\n\t\toverflow: side === \"left\" || side === \"right\" ? \"width\" : \"height\"\n\t});\n\treturn createDOMRect(rect.left, rect.top, size.width, size.height);\n}\n//#endregion\nexport { getAnchorPositionStyle, getManualPositionStyle, getPopupPositionRect, getPositioningCSSVars, resolveOffsets };\n\n//# sourceMappingURL=popover-positioning.js.map","import { PopoverCSSVars } from \"../../../core/ui/popover/popover-css-vars.js\";\nimport { getPositioningBoundaryRect, resolvePositioningBoundary } from \"../../utils/layout.js\";\nimport { isEventWithinElement } from \"../../utils/event.js\";\nimport { getAnchorPositionStyle, getPopupPositionRect, resolveOffsets } from \"./popover-positioning.js\";\nimport { applyStyles, getAnchorNames, getPositionedSide, observeResize, rafThrottle, restoreInlineStyles, snapshotInlineStyles, supportsAnchorPositioning } from \"@videojs/utils/dom\";\nimport { kebabCase } from \"@videojs/utils/string\";\n//#region src/dom/ui/popover/popup-positioner.ts\nconst POPUP_STYLE_PROPS = [\n\t\"position\",\n\t\"inset\",\n\t\"margin\",\n\t\"margin-top\",\n\t\"margin-right\",\n\t\"margin-bottom\",\n\t\"margin-left\",\n\t\"justify-self\",\n\t\"align-self\",\n\t\"margin-inline-start\",\n\t\"margin-block-start\",\n\t\"translate\",\n\t\"top\",\n\t\"right\",\n\t\"bottom\",\n\t\"left\"\n];\n/** Positions a popup and tracks layout changes while it is active. */\nvar PopupPositioner = class {\n\t#options = null;\n\t#boundaryElement = null;\n\t#abort = null;\n\t#stopObservingResize = null;\n\t#triggerAnchorName = null;\n\t#triggerAnchorAdded = false;\n\t#popupAnchor = null;\n\t#popupStyles = null;\n\t#reposition = rafThrottle(() => this.#position());\n\tsync(options) {\n\t\tconst { anchorName, position, trigger, popup, boundary, container, cssVars = PopoverCSSVars } = options;\n\t\tif (!position || !trigger || !popup) {\n\t\t\tthis.cleanup();\n\t\t\treturn;\n\t\t}\n\t\tconst boundaryElement = resolvePositioningBoundary(boundary, {\n\t\t\tcontainer: container ?? null,\n\t\t\troot: popup.getRootNode()\n\t\t});\n\t\tconst previous = this.#options;\n\t\tif (!previous || previous.anchorName !== anchorName || previous.trigger !== trigger || previous.popup !== popup || (previous.cssVars ?? PopoverCSSVars) !== cssVars || this.#boundaryElement !== boundaryElement) {\n\t\t\tif (previous?.popup) this.#restorePopupStyles(previous.popup);\n\t\t\tthis.#stopTracking();\n\t\t\tthis.#options = {\n\t\t\t\t...options,\n\t\t\t\tcssVars\n\t\t\t};\n\t\t\tthis.#boundaryElement = boundaryElement;\n\t\t\tthis.#startTracking();\n\t\t} else this.#options = {\n\t\t\t...options,\n\t\t\tcssVars\n\t\t};\n\t\tthis.#position();\n\t}\n\tcleanup() {\n\t\tif (!this.#options) return;\n\t\tif (this.#options.popup) this.#restorePopupStyles(this.#options.popup);\n\t\tthis.#stopTracking();\n\t\tthis.#options = null;\n\t\tthis.#boundaryElement = null;\n\t}\n\t#startTracking() {\n\t\tconst options = this.#options;\n\t\tif (!options?.trigger || !options.popup) return;\n\t\tthis.#applyAnchorStyles(options.trigger, options.popup, options.anchorName);\n\t\tthis.#abort = new AbortController();\n\t\tconst { signal } = this.#abort;\n\t\twindow.addEventListener(\"scroll\", this.#schedule, {\n\t\t\tcapture: true,\n\t\t\tpassive: true,\n\t\t\tsignal\n\t\t});\n\t\twindow.addEventListener(\"resize\", this.#schedule, { signal });\n\t\tconst resizeTargets = [options.trigger, options.popup];\n\t\tif (this.#boundaryElement) resizeTargets.push(this.#boundaryElement);\n\t\tthis.#stopObservingResize = observeResize(resizeTargets, () => this.#schedule());\n\t}\n\t#stopTracking() {\n\t\tthis.#abort?.abort();\n\t\tthis.#abort = null;\n\t\tthis.#stopObservingResize?.();\n\t\tthis.#stopObservingResize = null;\n\t\tthis.#reposition.cancel();\n\t\tthis.#restoreAnchorStyles();\n\t}\n\t#schedule = (event) => {\n\t\tconst popup = this.#options?.popup;\n\t\tif (!popup || event && isEventWithinElement(event, popup)) return;\n\t\tthis.#reposition();\n\t};\n\t#position() {\n\t\tconst options = this.#options;\n\t\tif (!options?.position || !options.trigger || !options.popup) return;\n\t\tconst triggerRect = options.trigger.getBoundingClientRect();\n\t\tconst boundaryRect = getPositioningBoundaryRect(this.#boundaryElement);\n\t\tconst offsets = resolveOffsets(options.popup, options.cssVars);\n\t\tconst preferredPosition = options.position;\n\t\tconst anchorSupported = supportsAnchorPositioning();\n\t\tconst getPosition = (popupRect) => {\n\t\t\tconst side = getPositionedSide(triggerRect, popupRect, boundaryRect, preferredPosition, offsets);\n\t\t\tconst { positionAnchor: _, ...style } = getAnchorPositionStyle(options.anchorName, {\n\t\t\t\t...preferredPosition,\n\t\t\t\tside\n\t\t\t}, triggerRect, anchorSupported ? void 0 : popupRect, boundaryRect, offsets, options.cssVars);\n\t\t\treturn {\n\t\t\t\tpopupRect,\n\t\t\t\tside,\n\t\t\t\tstyle\n\t\t\t};\n\t\t};\n\t\tconst position = getPosition(getPopupPositionRect(options.popup, preferredPosition.side));\n\t\tthis.#capturePopupStyles(options.popup, options.cssVars ?? PopoverCSSVars);\n\t\tapplyStyles(options.popup, position.style);\n\t\toptions.onSideChange?.(position.side);\n\t\tif (anchorSupported || !options.onSideChange) return;\n\t\tconst popupRect = getPopupPositionRect(options.popup, preferredPosition.side);\n\t\tif (popupRect.width === position.popupRect.width && popupRect.height === position.popupRect.height) return;\n\t\tconst nextPosition = getPosition(popupRect);\n\t\tapplyStyles(options.popup, nextPosition.style);\n\t\tif (nextPosition.side !== position.side) options.onSideChange(nextPosition.side);\n\t}\n\t#capturePopupStyles(popup, cssVars) {\n\t\tif (this.#popupStyles) return;\n\t\tconst props = [\n\t\t\t...POPUP_STYLE_PROPS,\n\t\t\tcssVars.anchorWidth,\n\t\t\tcssVars.anchorHeight,\n\t\t\tcssVars.availableWidth,\n\t\t\tcssVars.availableHeight\n\t\t];\n\t\tthis.#popupStyles = snapshotInlineStyles(popup, props);\n\t}\n\t#restorePopupStyles(popup) {\n\t\tif (!this.#popupStyles) return;\n\t\trestoreInlineStyles(popup, this.#popupStyles);\n\t\tthis.#popupStyles = null;\n\t}\n\t#applyAnchorStyles(trigger, popup, anchorName) {\n\t\tif (!supportsAnchorPositioning()) return;\n\t\tconst generatedName = `--${anchorName}`;\n\t\tconst triggerAnchor = this.#readStyle(trigger, \"anchor-name\");\n\t\tthis.#popupAnchor = this.#readStyle(popup, \"position-anchor\");\n\t\tconst names = getAnchorNames(trigger);\n\t\tthis.#triggerAnchorName = generatedName;\n\t\tthis.#triggerAnchorAdded = !names.includes(generatedName);\n\t\tif (this.#triggerAnchorAdded) names.push(generatedName);\n\t\ttrigger.style.setProperty(\"anchor-name\", names.join(\", \"), triggerAnchor.priority);\n\t\tpopup.style.setProperty(\"position-anchor\", generatedName);\n\t}\n\t#restoreAnchorStyles() {\n\t\tconst options = this.#options;\n\t\tif (!options?.trigger || !options.popup) return;\n\t\tif (this.#triggerAnchorName && this.#triggerAnchorAdded) {\n\t\t\tconst current = this.#readStyle(options.trigger, \"anchor-name\");\n\t\t\tconst names = getAnchorNames(options.trigger).filter((name) => name !== this.#triggerAnchorName);\n\t\t\tthis.#writeStyle(options.trigger, \"anchor-name\", {\n\t\t\t\tvalue: names.join(\", \"),\n\t\t\t\tpriority: current.priority\n\t\t\t});\n\t\t}\n\t\tif (this.#popupAnchor) this.#writeStyle(options.popup, \"position-anchor\", this.#popupAnchor);\n\t\tthis.#triggerAnchorName = null;\n\t\tthis.#triggerAnchorAdded = false;\n\t\tthis.#popupAnchor = null;\n\t}\n\t#readStyle(element, prop) {\n\t\tconst name = prop.startsWith(\"--\") ? prop : kebabCase(prop);\n\t\treturn {\n\t\t\tvalue: element.style.getPropertyValue(name),\n\t\t\tpriority: element.style.getPropertyPriority(name)\n\t\t};\n\t}\n\t#writeStyle(element, prop, style) {\n\t\tconst name = prop.startsWith(\"--\") ? prop : kebabCase(prop);\n\t\tif (style.value) element.style.setProperty(name, style.value, style.priority);\n\t\telse element.style.removeProperty(name);\n\t}\n};\n//#endregion\nexport { PopupPositioner };\n\n//# sourceMappingURL=popup-positioner.js.map","import { clamp } from \"@videojs/utils/number\";\n//#region src/dom/utils/pointer.ts\n/** Convert a pointer event position to a 0–100 percent along an element's rect. */\nfunction getPercentFromPointerEvent(event, rect, orientation, isRTL) {\n\tlet ratio;\n\tif (orientation === \"vertical\") ratio = 1 - (event.clientY - rect.top) / rect.height;\n\telse if (isRTL) ratio = (rect.right - event.clientX) / rect.width;\n\telse ratio = (event.clientX - rect.left) / rect.width;\n\tif (!Number.isFinite(ratio)) return 0;\n\treturn clamp(ratio * 100, 0, 100);\n}\n//#endregion\nexport { getPercentFromPointerEvent };\n\n//# sourceMappingURL=pointer.js.map","import { getPercentFromPointerEvent } from \"../utils/pointer.js\";\nimport { createState } from \"@videojs/store\";\nimport { observeResize } from \"@videojs/utils/dom\";\nimport { isNull } from \"@videojs/utils/predicate\";\nimport { clamp, roundToStep } from \"@videojs/utils/number\";\nimport { throttle } from \"@videojs/utils/function\";\n//#region src/dom/ui/slider.ts\nfunction createSlider(options) {\n\tconst input = createState({\n\t\tpointerPercent: 0,\n\t\tdragPercent: 0,\n\t\tdragging: false,\n\t\tpointing: false,\n\t\tfocused: false\n\t});\n\tconst abort = new AbortController();\n\tconst changeThrottleMs = options.changeThrottle ?? 0;\n\tlet isDragging = false, cachedRTL = false, cachedRect = null, capturedPointerId = null, lastDragPercent = 0, committedOnRelease = false, pointingOnRelease = false;\n\tconst throttledChange = changeThrottleMs > 0 ? throttle((percent) => options.onValueChange?.(percent), changeThrottleMs, { leading: true }) : null;\n\t/** Fire `onValueChange` — throttled during drag when `changeThrottle > 0`. */\n\tfunction fireChange(percent, duringDrag) {\n\t\tif (duringDrag && throttledChange) throttledChange(percent);\n\t\telse options.onValueChange?.(percent);\n\t}\n\tfunction releaseCapture() {\n\t\tif (isNull(capturedPointerId)) return;\n\t\tconst id = capturedPointerId;\n\t\tcapturedPointerId = null;\n\t\ttry {\n\t\t\toptions.getElement().releasePointerCapture(id);\n\t\t} catch {}\n\t}\n\tfunction endDrag() {\n\t\tif (!isDragging) return;\n\t\tconst pointing = committedOnRelease && pointingOnRelease;\n\t\tif (!committedOnRelease) options.onValueCommit?.(lastDragPercent);\n\t\tisDragging = false;\n\t\tinput.patch({\n\t\t\tdragging: false,\n\t\t\tpointing\n\t\t});\n\t\toptions.onDragEnd?.();\n\t\tcommittedOnRelease = false;\n\t\tpointingOnRelease = false;\n\t\tcleanup();\n\t}\n\tfunction cleanup() {\n\t\tthrottledChange?.cancel();\n\t\tcapturedPointerId = null;\n\t\tcachedRect = null;\n\t}\n\tconst rootProps = {\n\t\tonPointerDown(event) {\n\t\t\tif (options.isDisabled()) return;\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t\tconst el = options.getElement();\n\t\t\tcachedRect = el.getBoundingClientRect();\n\t\t\tcachedRTL = options.isRTL();\n\t\t\tcommittedOnRelease = false;\n\t\t\tpointingOnRelease = false;\n\t\t\treleaseCapture();\n\t\t\tcapturedPointerId = event.pointerId;\n\t\t\tel.setPointerCapture(event.pointerId);\n\t\t\tconst percent = getPercentFromPointerEvent(event, cachedRect, options.getOrientation(), cachedRTL);\n\t\t\tisDragging = true;\n\t\t\tlastDragPercent = percent;\n\t\t\tinput.patch({\n\t\t\t\tpointing: true,\n\t\t\t\tdragging: true,\n\t\t\t\tpointerPercent: percent,\n\t\t\t\tdragPercent: percent\n\t\t\t});\n\t\t\toptions.onDragStart?.();\n\t\t\toptions.onValueChange?.(percent);\n\t\t\toptions.getThumbElement?.()?.focus({\n\t\t\t\tpreventScroll: true,\n\t\t\t\tfocusVisible: false\n\t\t\t});\n\t\t},\n\t\tonPointerMove(event) {\n\t\t\tif (options.isDisabled()) return;\n\t\t\tif (!isNull(capturedPointerId)) {\n\t\t\t\tif (event.pointerType !== \"touch\" && event.buttons === 0) {\n\t\t\t\t\tendDrag();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst percent = getPercentFromPointerEvent(event, cachedRect, options.getOrientation(), cachedRTL);\n\t\t\t\tlastDragPercent = percent;\n\t\t\t\tinput.patch({\n\t\t\t\t\tdragPercent: percent,\n\t\t\t\t\tpointerPercent: percent\n\t\t\t\t});\n\t\t\t\tfireChange(percent, true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst percent = getPercentFromPointerEvent(event, options.getElement().getBoundingClientRect(), options.getOrientation(), options.isRTL());\n\t\t\tinput.patch({\n\t\t\t\tpointing: true,\n\t\t\t\tpointerPercent: percent\n\t\t\t});\n\t\t},\n\t\tonPointerUp(event) {\n\t\t\tif (options.isDisabled()) return;\n\t\t\tevent.stopPropagation();\n\t\t\tif (isNull(capturedPointerId)) return;\n\t\t\tconst percent = getPercentFromPointerEvent(event, cachedRect, options.getOrientation(), cachedRTL);\n\t\t\tconst releaseRect = options.getElement().getBoundingClientRect();\n\t\t\tpointingOnRelease = event.pointerType !== \"touch\" && event.clientX >= releaseRect.left && event.clientX <= releaseRect.right && event.clientY >= releaseRect.top && event.clientY <= releaseRect.bottom;\n\t\t\tthrottledChange?.cancel();\n\t\t\toptions.onValueChange?.(percent);\n\t\t\toptions.onValueCommit?.(percent);\n\t\t\tcommittedOnRelease = true;\n\t\t},\n\t\tonPointerLeave() {\n\t\t\tif (!isNull(capturedPointerId)) return;\n\t\t\tinput.patch({ pointing: false });\n\t\t},\n\t\tonLostPointerCapture() {\n\t\t\tendDrag();\n\t\t}\n\t};\n\tconst thumbProps = {\n\t\tonKeyDown(event) {\n\t\t\tif (options.isDisabled()) {\n\t\t\t\tif (event.key !== \"Tab\") event.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst stepPercent = options.getStepPercent();\n\t\t\tconst largeStepPercent = options.getLargeStepPercent();\n\t\t\tconst rounded = roundToStep(options.getPercent(), stepPercent, 0);\n\t\t\tconst horizontalSign = options.isRTL() ? -1 : 1;\n\t\t\tconst step = event.shiftKey ? largeStepPercent : stepPercent;\n\t\t\tlet newPercent = null;\n\t\t\tswitch (event.key) {\n\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\tnewPercent = rounded + step * horizontalSign;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\tnewPercent = rounded - step * horizontalSign;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\tnewPercent = rounded + step;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\tnewPercent = rounded - step;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"PageUp\":\n\t\t\t\t\tnewPercent = rounded + largeStepPercent;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"PageDown\":\n\t\t\t\t\tnewPercent = rounded - largeStepPercent;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Home\":\n\t\t\t\t\tnewPercent = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"End\":\n\t\t\t\t\tnewPercent = 100;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (newPercent !== null) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tnewPercent = clamp(newPercent, 0, 100);\n\t\t\t\tinput.patch({\n\t\t\t\t\tpointerPercent: newPercent,\n\t\t\t\t\tdragPercent: newPercent,\n\t\t\t\t\tpointing: false\n\t\t\t\t});\n\t\t\t\toptions.onValueChange?.(newPercent);\n\t\t\t\toptions.onValueCommit?.(newPercent);\n\t\t\t}\n\t\t},\n\t\tonFocus() {\n\t\t\tinput.patch({ focused: true });\n\t\t},\n\t\tonBlur() {\n\t\t\tinput.patch({ focused: false });\n\t\t}\n\t};\n\tfunction adjustForAlignment(state) {\n\t\tif (!options.adjustPercent || state.thumbAlignment !== \"edge\") return state;\n\t\tconst rootEl = options.getElement();\n\t\tconst thumbEl = options.getThumbElement?.();\n\t\tif (!thumbEl) return state;\n\t\tconst isHorizontal = state.orientation === \"horizontal\";\n\t\tconst thumbSize = isHorizontal ? thumbEl.offsetWidth : thumbEl.offsetHeight;\n\t\tconst trackSize = isHorizontal ? rootEl.offsetWidth : rootEl.offsetHeight;\n\t\treturn {\n\t\t\t...state,\n\t\t\tfillPercent: options.adjustPercent(state.fillPercent, thumbSize, trackSize),\n\t\t\tpointerPercent: options.adjustPercent(state.pointerPercent, thumbSize, trackSize)\n\t\t};\n\t}\n\tlet stopObservingResize = null;\n\tif (options.onResize) stopObservingResize = observeResize(options.getElement(), () => options.onResize());\n\treturn {\n\t\tinput,\n\t\trootProps,\n\t\trootStyle: {\n\t\t\ttouchAction: \"none\",\n\t\t\tuserSelect: \"none\"\n\t\t},\n\t\tthumbProps,\n\t\tadjustForAlignment,\n\t\tdestroy() {\n\t\t\tif (abort.signal.aborted) return;\n\t\t\tabort.abort();\n\t\t\tstopObservingResize?.();\n\t\t\treleaseCapture();\n\t\t\tcleanup();\n\t\t}\n\t};\n}\n//#endregion\nexport { createSlider };\n\n//# sourceMappingURL=slider.js.map","//#region src/core/ui/slider/slider-css-vars.ts\n/** CSS custom property names for slider visual state. */\nconst SliderCSSVars = {\n\t/** Fill level percentage (0–100). */\n\tfill: \"--media-slider-fill\",\n\t/** Pointer position percentage (0–100). */\n\tpointer: \"--media-slider-pointer\",\n\t/** Buffer level percentage (0–100). */\n\tbuffer: \"--media-slider-buffer\"\n};\n//#endregion\nexport { SliderCSSVars };\n\n//# sourceMappingURL=slider-css-vars.js.map","import { SliderCSSVars } from \"../../core/ui/slider/slider-css-vars.js\";\n//#region src/dom/ui/slider-css-vars.ts\nfunction getSliderCSSVars(state) {\n\treturn {\n\t\t[SliderCSSVars.fill]: `${state.fillPercent.toFixed(3)}%`,\n\t\t[SliderCSSVars.pointer]: `${state.pointerPercent.toFixed(3)}%`\n\t};\n}\nfunction getTimeSliderCSSVars(state) {\n\treturn {\n\t\t...getSliderCSSVars(state),\n\t\t[SliderCSSVars.buffer]: `${state.bufferPercent.toFixed(3)}%`\n\t};\n}\n/** Compute structural positioning styles for a slider preview element. */\nfunction getSliderPreviewStyle(width, overflow) {\n\tconst halfWidth = width / 2;\n\treturn {\n\t\tposition: \"absolute\",\n\t\tleft: overflow === \"visible\" ? `calc(var(${SliderCSSVars.pointer}) - ${halfWidth}px)` : `min(max(0px, calc(var(${SliderCSSVars.pointer}) - ${halfWidth}px)), calc(100% - ${width}px))`,\n\t\twidth: \"max-content\",\n\t\tpointerEvents: \"none\"\n\t};\n}\n//#endregion\nexport { getSliderCSSVars, getSliderPreviewStyle, getTimeSliderCSSVars };\n\n//# sourceMappingURL=slider-css-vars.js.map","import { containsComposed, getDeepActiveElement, isDocument } from \"@videojs/utils/dom\";\n//#region src/dom/ui/slider-focus.ts\nfunction isSliderFocused(root = document) {\n\tconst active = getDeepActiveElement(isDocument(root) ? root : root.ownerDocument);\n\tif (active?.getAttribute(\"role\") !== \"slider\") return false;\n\treturn isDocument(root) || containsComposed(root, active);\n}\n//#endregion\nexport { isSliderFocused };\n\n//# sourceMappingURL=slider-focus.js.map","import { getMediaSnapshot } from \"./input-action.js\";\nimport { isSliderFocused } from \"./slider-focus.js\";\n//#region src/dom/ui/status-announcer.ts\nfunction subscribeToStatusAnnouncer(store, core) {\n\tlet active = true;\n\tlet pending = false;\n\tlet target = store.target;\n\tlet revision = 0;\n\tconst baseline = () => {\n\t\ttarget = store.target;\n\t\tpending = true;\n\t\tconst current = ++revision;\n\t\tcore.resetSnapshot();\n\t\tqueueMicrotask(() => {\n\t\t\tif (!active || current !== revision) return;\n\t\t\tpending = false;\n\t\t\ttarget = store.target;\n\t\t\tif (target) core.processSnapshot(getMediaSnapshot(store));\n\t\t});\n\t};\n\tconst unsubscribe = store.subscribe(() => {\n\t\tconst nextTarget = store.target;\n\t\tif (nextTarget !== target) {\n\t\t\tbaseline();\n\t\t\treturn;\n\t\t}\n\t\tif (!nextTarget || pending) return;\n\t\tcore.processSnapshot(getMediaSnapshot(store));\n\t});\n\tbaseline();\n\treturn () => {\n\t\tactive = false;\n\t\tunsubscribe();\n\t};\n}\nfunction shouldAnnounceStatusChange(container) {\n\treturn !container || !isSliderFocused(container);\n}\n//#endregion\nexport { shouldAnnounceStatusChange, subscribeToStatusAnnouncer };\n\n//# sourceMappingURL=status-announcer.js.map","//#region src/array/find-last-at-or-before.ts\n/** Finds the index of the last ordered item whose value is at or before the target, or `-1` if none exists. */\nfunction findLastIndexAtOrBefore(items, value, getValue) {\n\tlet low = 0;\n\tlet high = items.length - 1;\n\tlet index = -1;\n\twhile (low <= high) {\n\t\tconst mid = low + high >>> 1;\n\t\tif (getValue(items[mid]) <= value) {\n\t\t\tindex = mid;\n\t\t\tlow = mid + 1;\n\t\t} else high = mid - 1;\n\t}\n\treturn index;\n}\n/** Finds the last ordered item whose value is at or before the target. */\nfunction findLastAtOrBefore(items, value, getValue) {\n\tconst index = findLastIndexAtOrBefore(items, value, getValue);\n\treturn index < 0 ? void 0 : items[index];\n}\n//#endregion\nexport { findLastAtOrBefore, findLastIndexAtOrBefore };\n\n//# sourceMappingURL=find-last-at-or-before.js.map","import { findLastAtOrBefore } from \"@videojs/utils/array\";\n//#region src/core/ui/thumbnail/thumbnail-core.ts\nvar ThumbnailCore = class {\n\tfindActiveThumbnail(thumbnails, time) {\n\t\treturn findLastAtOrBefore(thumbnails, time, (thumbnail) => thumbnail.startTime);\n\t}\n\t/**\n\t* Parse CSS constraint strings into numeric `ThumbnailConstraints`.\n\t*\n\t* Accepts any object with string `minWidth`/`maxWidth`/`minHeight`/`maxHeight`\n\t* properties — `CSSStyleDeclaration` satisfies this structurally.\n\t*/\n\tparseConstraints(raw) {\n\t\tconst minW = parseFloat(raw.minWidth);\n\t\tconst maxW = parseFloat(raw.maxWidth);\n\t\tconst minH = parseFloat(raw.minHeight);\n\t\tconst maxH = parseFloat(raw.maxHeight);\n\t\treturn {\n\t\t\tminWidth: Number.isFinite(minW) ? minW : 0,\n\t\t\tmaxWidth: Number.isFinite(maxW) ? maxW : Infinity,\n\t\t\tminHeight: Number.isFinite(minH) ? minH : 0,\n\t\t\tmaxHeight: Number.isFinite(maxH) ? maxH : Infinity\n\t\t};\n\t}\n\t/**\n\t* Calculate a uniform scale factor that fits `tileWidth × tileHeight` within the\n\t* given CSS min/max constraints while preserving aspect ratio.\n\t*\n\t* - Scales down when the tile exceeds max constraints.\n\t* - Scales up when the tile is smaller than min constraints.\n\t* - Returns `1` when no scaling is needed.\n\t*/\n\tcalculateScale(tileWidth, tileHeight, constraints) {\n\t\tconst { minWidth, maxWidth, minHeight, maxHeight } = constraints;\n\t\tconst maxRatio = Math.min(maxWidth / tileWidth, maxHeight / tileHeight);\n\t\tconst minRatio = Math.max(minWidth / tileWidth, minHeight / tileHeight);\n\t\tif (Number.isFinite(maxRatio) && maxRatio < 1) return maxRatio;\n\t\tif (Number.isFinite(minRatio) && minRatio > 1) return minRatio;\n\t\treturn 1;\n\t}\n\t/**\n\t* Compute container and image dimensions for the current thumbnail, scaled to\n\t* fit within the element's CSS min/max constraints.\n\t*\n\t* The container clips the sprite sheet via `overflow: hidden`, and the image is\n\t* positioned with `transform: translate()` to show the correct tile.\n\t*/\n\tresize(thumbnail, imgNaturalWidth, imgNaturalHeight, constraints) {\n\t\tconst tileWidth = thumbnail.width ?? imgNaturalWidth;\n\t\tconst tileHeight = thumbnail.height ?? imgNaturalHeight;\n\t\tif (!tileWidth || !tileHeight) return void 0;\n\t\tconst scale = this.calculateScale(tileWidth, tileHeight, constraints);\n\t\tconst coordX = thumbnail.coords?.x ?? 0;\n\t\tconst coordY = thumbnail.coords?.y ?? 0;\n\t\tconst inset = scale !== 1 ? 1 : 0;\n\t\treturn {\n\t\t\tscale,\n\t\t\tcontainerWidth: Math.max(0, Math.floor(tileWidth * scale) - inset * 2),\n\t\t\tcontainerHeight: Math.max(0, Math.floor(tileHeight * scale) - inset * 2),\n\t\t\timageWidth: Math.ceil(imgNaturalWidth * scale),\n\t\t\timageHeight: Math.ceil(imgNaturalHeight * scale),\n\t\t\toffsetX: Math.ceil(coordX * scale) + inset,\n\t\t\toffsetY: Math.ceil(coordY * scale) + inset\n\t\t};\n\t}\n\tgetState(loading, error, thumbnail) {\n\t\treturn {\n\t\t\tloading,\n\t\t\terror,\n\t\t\thidden: !loading && !thumbnail\n\t\t};\n\t}\n\tgetAttrs(_state) {\n\t\treturn {\n\t\t\trole: \"img\",\n\t\t\t\"aria-hidden\": \"true\"\n\t\t};\n\t}\n};\n//#endregion\nexport { ThumbnailCore };\n\n//# sourceMappingURL=thumbnail-core.js.map","import { ThumbnailCore } from \"../../core/ui/thumbnail/thumbnail-core.js\";\nimport { listen, observeResize } from \"@videojs/utils/dom\";\n//#region src/dom/ui/thumbnail.ts\nfunction createThumbnail(options) {\n\tconst { getContainer, getImg, onStateChange } = options;\n\tconst core = new ThumbnailCore();\n\tconst abort = new AbortController();\n\tconst signal = abort.signal;\n\tlet loading = false;\n\tlet error = false;\n\tlet naturalWidth = 0;\n\tlet naturalHeight = 0;\n\tlet lastSrc = \"\";\n\tlet imgBound = false;\n\tlet stopObservingResize = null;\n\tfunction onImgLoad() {\n\t\tconst img = getImg();\n\t\tif (img) {\n\t\t\tnaturalWidth = img.naturalWidth;\n\t\t\tnaturalHeight = img.naturalHeight;\n\t\t}\n\t\tloading = false;\n\t\terror = false;\n\t\tonStateChange();\n\t}\n\tfunction onImgError() {\n\t\tloading = false;\n\t\terror = true;\n\t\tonStateChange();\n\t}\n\tfunction bindImg(img) {\n\t\tlisten(img, \"load\", onImgLoad, { signal });\n\t\tlisten(img, \"error\", onImgError, { signal });\n\t}\n\tfunction ensureBindings() {\n\t\tif (!imgBound) {\n\t\t\tconst img = getImg();\n\t\t\tif (img) {\n\t\t\t\tbindImg(img);\n\t\t\t\timgBound = true;\n\t\t\t}\n\t\t}\n\t\tif (!stopObservingResize) {\n\t\t\tconst container = getContainer();\n\t\t\tif (container) stopObservingResize = observeResize(container, onStateChange);\n\t\t}\n\t}\n\tfunction updateSrc(url) {\n\t\tensureBindings();\n\t\tconst src = url ?? \"\";\n\t\tif (src === lastSrc) return;\n\t\tlastSrc = src;\n\t\tif (src) {\n\t\t\tloading = true;\n\t\t\terror = false;\n\t\t} else {\n\t\t\tloading = false;\n\t\t\terror = false;\n\t\t\tnaturalWidth = 0;\n\t\t\tnaturalHeight = 0;\n\t\t}\n\t}\n\tfunction connect() {\n\t\tensureBindings();\n\t\tconst img = getImg();\n\t\tif (img?.complete && lastSrc) {\n\t\t\tif (img.naturalWidth > 0) {\n\t\t\t\tnaturalWidth = img.naturalWidth;\n\t\t\t\tnaturalHeight = img.naturalHeight;\n\t\t\t\tloading = false;\n\t\t\t\terror = false;\n\t\t\t} else {\n\t\t\t\tloading = false;\n\t\t\t\terror = true;\n\t\t\t}\n\t\t\tonStateChange();\n\t\t}\n\t}\n\tfunction destroy() {\n\t\tabort.abort();\n\t\tstopObservingResize?.();\n\t\tstopObservingResize = null;\n\t}\n\treturn {\n\t\tget loading() {\n\t\t\treturn loading;\n\t\t},\n\t\tget error() {\n\t\t\treturn error;\n\t\t},\n\t\tget naturalWidth() {\n\t\t\treturn naturalWidth;\n\t\t},\n\t\tget naturalHeight() {\n\t\t\treturn naturalHeight;\n\t\t},\n\t\treadConstraints() {\n\t\t\tconst el = getContainer();\n\t\t\tif (!el) return {\n\t\t\t\tminWidth: 0,\n\t\t\t\tmaxWidth: Infinity,\n\t\t\t\tminHeight: 0,\n\t\t\t\tmaxHeight: Infinity\n\t\t\t};\n\t\t\treturn core.parseConstraints(getComputedStyle(el));\n\t\t},\n\t\tupdateSrc,\n\t\tconnect,\n\t\tdestroy\n\t};\n}\n//#endregion\nexport { createThumbnail };\n\n//# sourceMappingURL=thumbnail.js.map","import { createPopover } from \"../popover/popover.js\";\n//#region src/dom/ui/tooltip/tooltip.ts\n/** Map popover reasons to tooltip reasons, filtering out click/outside-click. */\nconst REASON_MAP = {\n\thover: \"hover\",\n\tfocus: \"focus\",\n\tescape: \"escape\",\n\tblur: \"blur\",\n\t\"imperative-action\": \"imperative-action\"\n};\nfunction createTooltip(options) {\n\tconst popoverOpts = {\n\t\ttransition: options.transition,\n\t\tonOpenChange(open, details) {\n\t\t\tconst reason = REASON_MAP[details.reason];\n\t\t\tif (!reason) return;\n\t\t\tconst group = options.group?.();\n\t\t\tif (open) group?.notifyOpen();\n\t\t\telse group?.notifyClose();\n\t\t\tconst tooltipDetails = details.event ? {\n\t\t\t\treason,\n\t\t\t\tevent: details.event\n\t\t\t} : { reason };\n\t\t\toptions.onOpenChange(open, tooltipDetails);\n\t\t},\n\t\tcloseOnEscape: () => true,\n\t\tcloseOnOutsideClick: () => false,\n\t\topenOnHover: () => true,\n\t\tdelay: () => {\n\t\t\tconst group = options.group?.();\n\t\t\tif (group?.shouldSkipDelay()) return 0;\n\t\t\treturn options.delay?.() ?? group?.delay ?? 600;\n\t\t},\n\t\tcloseDelay: () => {\n\t\t\tconst group = options.group?.();\n\t\t\treturn options.closeDelay?.() ?? group?.closeDelay ?? 0;\n\t\t}\n\t};\n\tif (options.onOpenChangeComplete) popoverOpts.onOpenChangeComplete = options.onOpenChangeComplete;\n\tconst popover = createPopover(popoverOpts);\n\tlet isPointerDown = false;\n\tlet popupGroup;\n\tlet unsubscribe;\n\tfunction isTriggerPopupOpen() {\n\t\treturn popupGroup?.isOpenFor(popover.triggerElement) ?? false;\n\t}\n\tfunction syncPopupGroup() {\n\t\tconst next = options.popupGroup?.();\n\t\tif (next === popupGroup) return;\n\t\tunsubscribe?.();\n\t\tpopupGroup = next;\n\t\tunsubscribe = popupGroup?.subscribe(() => {\n\t\t\tif (isTriggerPopupOpen()) popover.close(\"imperative-action\");\n\t\t});\n\t}\n\tfunction setTriggerElement(el) {\n\t\tpopover.setTriggerElement(el);\n\t\tsyncPopupGroup();\n\t\tif (isTriggerPopupOpen()) popover.close(\"imperative-action\");\n\t}\n\tconst { onClick: _, ...baseTriggerProps } = popover.triggerProps;\n\tconst triggerProps = {\n\t\t...baseTriggerProps,\n\t\tonPointerDown() {\n\t\t\tsyncPopupGroup();\n\t\t\tisPointerDown = true;\n\t\t\tpopover.close(\"imperative-action\");\n\t\t},\n\t\tonPointerEnter(event) {\n\t\t\tsyncPopupGroup();\n\t\t\tif (options.disabled?.()) return;\n\t\t\tif (isTriggerPopupOpen()) return;\n\t\t\tif (event.pointerType === \"touch\") return;\n\t\t\tbaseTriggerProps.onPointerEnter(event);\n\t\t},\n\t\tonFocusIn(event) {\n\t\t\tsyncPopupGroup();\n\t\t\tif (options.disabled?.()) return;\n\t\t\tif (isTriggerPopupOpen()) return;\n\t\t\tif (isPointerDown) {\n\t\t\t\tisPointerDown = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbaseTriggerProps.onFocusIn(event);\n\t\t}\n\t};\n\tconst popupProps = {\n\t\t...popover.popupProps,\n\t\tonPointerEnter(event) {\n\t\t\tif (options.disableHoverablePopup?.()) return;\n\t\t\tpopover.popupProps.onPointerEnter(event);\n\t\t}\n\t};\n\treturn {\n\t\t...popover,\n\t\ttriggerProps,\n\t\tpopupProps,\n\t\tget triggerElement() {\n\t\t\treturn popover.triggerElement;\n\t\t},\n\t\tsetTriggerElement,\n\t\topen: () => {\n\t\t\tsyncPopupGroup();\n\t\t\tif (!isTriggerPopupOpen()) popover.open(\"hover\");\n\t\t},\n\t\tclose: (reason = \"hover\") => popover.close(reason),\n\t\tdestroy() {\n\t\t\tunsubscribe?.();\n\t\t\tpopover.destroy();\n\t\t}\n\t};\n}\n//#endregion\nexport { createTooltip };\n\n//# sourceMappingURL=tooltip.js.map","import { createState } from \"@videojs/store\";\nimport { noop } from \"@videojs/utils/function\";\n//#region src/dom/ui/transition.ts\n/**\n* Manages open/close transition lifecycle via `createState`.\n*\n* **Open:** patches `{ active: true, status: 'starting' }`, then after a\n* double-RAF patches `{ status: 'idle' }` so the browser paints the\n* initial (\"from\") state before transitioning. It then waits for the resulting\n* element animations to finish. Reopening an active transition flushes styles\n* first so CSS transitions can restart.\n*\n* **Close:** patches `{ status: 'ending' }` (keeping `active: true` so the\n* element stays mounted), then after a double-RAF waits for\n* `getAnimations()` to settle before patching `{ active: false, status: 'idle' }`.\n*/\nfunction createTransition() {\n\tconst state = createState({\n\t\tactive: false,\n\t\tstatus: \"idle\"\n\t});\n\tlet destroyed = false;\n\tlet rafId1 = 0;\n\tlet rafId2 = 0;\n\tlet operationId = 0;\n\tlet resolvePending = null;\n\tfunction cancelFrames() {\n\t\tcancelAnimationFrame(rafId1);\n\t\tcancelAnimationFrame(rafId2);\n\t\trafId1 = 0;\n\t\trafId2 = 0;\n\t}\n\tfunction beginOperation() {\n\t\toperationId++;\n\t\tcancelFrames();\n\t\tresolvePending?.();\n\t\tresolvePending = null;\n\t\treturn operationId;\n\t}\n\tfunction finishOperation(id) {\n\t\tif (id !== operationId) return;\n\t\tconst resolve = resolvePending;\n\t\tresolvePending = null;\n\t\tresolve?.();\n\t}\n\tfunction open(el = null) {\n\t\tif (destroyed) return Promise.resolve();\n\t\tconst id = beginOperation();\n\t\tconst restarting = state.current.active;\n\t\tif (restarting) state.patch({ status: \"idle\" });\n\t\tstate.patch({\n\t\t\tactive: true,\n\t\t\tstatus: \"starting\"\n\t\t});\n\t\treturn new Promise((resolve) => {\n\t\t\tresolvePending = resolve;\n\t\t\trafId1 = requestAnimationFrame(() => {\n\t\t\t\trafId1 = 0;\n\t\t\t\tif (restarting) {\n\t\t\t\t\tconst element = resolveElement(el);\n\t\t\t\t\tcancelAnimations(element);\n\t\t\t\t\tflushStyles(element);\n\t\t\t\t}\n\t\t\t\trafId2 = requestAnimationFrame(() => {\n\t\t\t\t\trafId2 = 0;\n\t\t\t\t\tif (destroyed || id !== operationId || !state.current.active) return finishOperation(id);\n\t\t\t\t\tstate.patch({ status: \"idle\" });\n\t\t\t\t\trafId1 = requestAnimationFrame(() => {\n\t\t\t\t\t\trafId1 = 0;\n\t\t\t\t\t\tif (destroyed || id !== operationId || !state.current.active) return finishOperation(id);\n\t\t\t\t\t\twaitForAnimations(resolveElement(el)).finally(() => finishOperation(id));\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\tfunction close(el) {\n\t\tif (destroyed) return Promise.resolve();\n\t\tconst id = beginOperation();\n\t\tstate.patch({ status: \"ending\" });\n\t\treturn new Promise((resolve) => {\n\t\t\tresolvePending = resolve;\n\t\t\trafId1 = requestAnimationFrame(() => {\n\t\t\t\trafId1 = 0;\n\t\t\t\trafId2 = requestAnimationFrame(() => {\n\t\t\t\t\trafId2 = 0;\n\t\t\t\t\tif (destroyed || id !== operationId) return finishOperation(id);\n\t\t\t\t\twaitForAnimations(el).finally(() => {\n\t\t\t\t\t\tif (destroyed || id !== operationId || state.current.status !== \"ending\") return finishOperation(id);\n\t\t\t\t\t\tstate.patch({\n\t\t\t\t\t\t\tactive: false,\n\t\t\t\t\t\t\tstatus: \"idle\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfinishOperation(id);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\tfunction cancel() {\n\t\toperationId++;\n\t\tcancelFrames();\n\t\tresolvePending?.();\n\t\tresolvePending = null;\n\t\tif (state.current.status !== \"idle\") state.patch({ status: \"idle\" });\n\t}\n\treturn {\n\t\tstate,\n\t\topen,\n\t\tclose,\n\t\tcancel,\n\t\tdestroy() {\n\t\t\tif (destroyed) return;\n\t\t\tdestroyed = true;\n\t\t\tcancel();\n\t\t}\n\t};\n}\nfunction resolveElement(element) {\n\treturn typeof element === \"function\" ? element() : element;\n}\nfunction flushStyles(el) {\n\tif (!el) return;\n\tel.offsetHeight;\n}\nfunction cancelAnimations(el) {\n\tconst animations = el?.getAnimations?.({ subtree: true }) ?? [];\n\tfor (const animation of animations) animation.cancel();\n}\nfunction waitForAnimations(el) {\n\tif (!el) return Promise.resolve();\n\tconst animations = el.getAnimations?.() ?? [];\n\tif (animations.length === 0) return Promise.resolve();\n\treturn Promise.all(animations.map((a) => a.finished)).then(noop, noop);\n}\n//#endregion\nexport { createTransition };\n\n//# sourceMappingURL=transition.js.map","import { clamp } from \"@videojs/utils/number\";\n//#region src/dom/ui/wheel-step.ts\nfunction createWheelStep(options) {\n\treturn { onWheel(event) {\n\t\tif (options.isDisabled()) return;\n\t\tconst direction = Math.sign(event.deltaY);\n\t\tif (direction === 0) return;\n\t\tevent.preventDefault();\n\t\tconst stepPercent = options.getStepPercent();\n\t\tconst newPercent = clamp(options.getPercent() - direction * stepPercent, 0, 100);\n\t\toptions.onValueChange?.(newPercent);\n\t} };\n}\n//#endregion\nexport { createWheelStep };\n\n//# sourceMappingURL=wheel-step.js.map","import { listen } from \"@videojs/utils/dom\";\nimport { isFunction, isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/utils/element-props.ts\n/**\n* Apply props to a DOM element.\n*\n* Handles both attributes and event listeners:\n* - Event props (onClick, onKeyDown, etc.) are attached as listeners\n* - Boolean props: `true` sets empty attribute, `false` removes\n* - `undefined` removes the attribute\n* - Other props are set as string attributes\n*/\nfunction applyElementProps(element, props, options) {\n\tconst signal = options?.signal;\n\tfor (const [key, value] of Object.entries(props)) if (isFunction(value) && key.startsWith(\"on\")) listen(element, key.slice(2).toLowerCase(), value, signal ? { signal } : void 0);\n\telse if (isUndefined(value) || value === false) element.removeAttribute(key);\n\telse if (value === true) element.setAttribute(key, \"\");\n\telse element.setAttribute(key, String(value));\n}\n//#endregion\nexport { applyElementProps };\n\n//# sourceMappingURL=element-props.js.map","//#region src/dom/utils/state-data-attrs.ts\n/**\n* Convert state object to data attributes.\n*\n* - `true` → `data-keyname=\"\"`\n* - truthy string/number → `data-keyname=\"value\"`\n* - falsy → no attribute\n*\n* @example\n* ```ts\n* const state = { paused: true, ended: false, volume: 0.5 };\n* getStateDataAttrs(state);\n* // { 'data-paused': '', 'data-volume': '0.5' }\n* ```\n*\n* When a mapping is provided, only mapped keys are converted.\n*/\nfunction getStateDataAttrs(state, map) {\n\tconst attrs = {};\n\tfor (const key in state) {\n\t\tif (map && !(key in map)) continue;\n\t\tconst name = map?.[key] ?? toDataAttrName(key), value = state[key];\n\t\tif (value === true) attrs[name] = \"\";\n\t\telse if (value) attrs[name] = String(value);\n\t}\n\treturn attrs;\n}\n/**\n* Apply state as data attributes to an element.\n*\n* - `true` → sets `data-keyname=\"\"`\n* - truthy string/number → sets `data-keyname=\"value\"`\n* - falsy → removes the attribute\n*\n* @example\n* ```ts\n* const state = { paused: true, ended: false };\n* applyStateDataAttrs(element, state);\n* // element has data-paused=\"\", data-ended is removed\n* ```\n*/\nfunction applyStateDataAttrs(element, state, map) {\n\tfor (const key in state) {\n\t\tif (map && !(key in map)) continue;\n\t\tconst name = map?.[key] ?? toDataAttrName(key), value = state[key];\n\t\tif (value === true) element.setAttribute(name, \"\");\n\t\telse if (value) element.setAttribute(name, String(value));\n\t\telse element.removeAttribute(name);\n\t}\n}\nfunction toDataAttrName(key) {\n\treturn `data-${key.toLowerCase()}`;\n}\n//#endregion\nexport { applyStateDataAttrs, getStateDataAttrs };\n\n//# sourceMappingURL=state-data-attrs.js.map","import { isFunction } from \"@videojs/utils/predicate\";\n//#region src/core/ui/utils/resolve-label.ts\nfunction resolveLabel(label, state) {\n\tif (isFunction(label)) return label(state) || void 0;\n\treturn label || void 0;\n}\n//#endregion\nexport { resolveLabel };\n\n//# sourceMappingURL=resolve-label.js.map","import { getTransitionFlags } from \"../transition.js\";\n//#region src/core/ui/alert-dialog/alert-dialog-core.ts\nvar AlertDialogCore = class {\n\tstatic defaultProps = {\n\t\topen: false,\n\t\tdefaultOpen: false\n\t};\n\t/** Accept props for API consistency. Props are consumed by platform layers. */\n\tsetProps(_props) {}\n\t#input = null;\n\t#titleId = void 0;\n\t#descriptionId = void 0;\n\tsetInput(input) {\n\t\tthis.#input = input;\n\t}\n\tsetTitleId(id) {\n\t\tthis.#titleId = id;\n\t}\n\tsetDescriptionId(id) {\n\t\tthis.#descriptionId = id;\n\t}\n\tgetState() {\n\t\tconst input = this.#input;\n\t\treturn {\n\t\t\topen: input.active,\n\t\t\tstatus: input.status,\n\t\t\ttitleId: this.#titleId,\n\t\t\tdescriptionId: this.#descriptionId,\n\t\t\t...getTransitionFlags(input.status)\n\t\t};\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\trole: \"alertdialog\",\n\t\t\t\"aria-modal\": \"true\",\n\t\t\t\"aria-labelledby\": state.titleId,\n\t\t\t\"aria-describedby\": state.descriptionId\n\t\t};\n\t}\n};\n//#endregion\nexport { AlertDialogCore };\n\n//# sourceMappingURL=alert-dialog-core.js.map","import { TransitionDataAttrs } from \"../transition.js\";\n//#region src/core/ui/alert-dialog/alert-dialog-data-attrs.ts\nconst AlertDialogDataAttrs = {\n\t/** Present when the dialog is open. */\n\topen: \"data-open\",\n\t...TransitionDataAttrs\n};\n//#endregion\nexport { AlertDialogDataAttrs };\n\n//# sourceMappingURL=alert-dialog-data-attrs.js.map","import { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/buffering-indicator/buffering-indicator-core.ts\nvar BufferingIndicatorCore = class BufferingIndicatorCore {\n\tstatic defaultProps = { delay: 500 };\n\tstate = createState({ visible: false });\n\t#props = { ...BufferingIndicatorCore.defaultProps };\n\t#timer = null;\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, BufferingIndicatorCore.defaultProps);\n\t}\n\tdestroy() {\n\t\tthis.#clearTimer();\n\t}\n\tupdate(media) {\n\t\tconst buffering = media.waiting && !media.paused;\n\t\tif (buffering && !this.state.current.visible && !this.#timer) this.#timer = setTimeout(() => {\n\t\t\tthis.#timer = null;\n\t\t\tthis.state.patch({ visible: true });\n\t\t}, this.#props.delay);\n\t\telse if (!buffering) {\n\t\t\tthis.#clearTimer();\n\t\t\tthis.state.patch({ visible: false });\n\t\t}\n\t}\n\t#clearTimer() {\n\t\tif (this.#timer !== null) {\n\t\t\tclearTimeout(this.#timer);\n\t\t\tthis.#timer = null;\n\t\t}\n\t}\n};\n//#endregion\nexport { BufferingIndicatorCore };\n\n//# sourceMappingURL=buffering-indicator-core.js.map","//#region src/core/ui/buffering-indicator/buffering-indicator-data-attrs.ts\nconst BufferingIndicatorDataAttrs = { \n/** Present when the buffering indicator is visible (after delay). */\nvisible: \"data-visible\" };\n//#endregion\nexport { BufferingIndicatorDataAttrs };\n\n//# sourceMappingURL=buffering-indicator-data-attrs.js.map","//#region src/core/ui/controls/controls-core.ts\nvar ControlsCore = class {\n\t#media = null;\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\treturn {\n\t\t\tvisible: media.controlsVisible,\n\t\t\tuserActive: media.userActive\n\t\t};\n\t}\n};\n//#endregion\nexport { ControlsCore };\n\n//# sourceMappingURL=controls-core.js.map","//#region src/core/ui/controls/controls-data-attrs.ts\nconst ControlsDataAttrs = {\n\t/** Present when controls are visible. */\n\tvisible: \"data-visible\",\n\t/** Present when the user has recently interacted. */\n\tuserActive: \"data-user-active\"\n};\n//#endregion\nexport { ControlsDataAttrs };\n\n//# sourceMappingURL=controls-data-attrs.js.map","import { AlertDialogCore } from \"../alert-dialog/alert-dialog-core.js\";\n//#region src/core/ui/error-dialog/error-dialog-core.ts\n/** Error-dialog core: an alert dialog whose open state is driven by media error state. */\nvar ErrorDialogCore = class extends AlertDialogCore {\n\tsetProps() {}\n};\n//#endregion\nexport { ErrorDialogCore };\n\n//# sourceMappingURL=error-dialog-core.js.map","//#region src/core/i18n/text/common.ts\nconst prefix = \"common.\";\nconst emptyText = {\n\tkey: `${prefix}empty`,\n\ttext: \"\"\n};\nconst okText = {\n\tkey: `${prefix}ok`,\n\ttext: \"OK\"\n};\n//#endregion\nexport { emptyText, okText };\n\n//# sourceMappingURL=common.js.map","//#region src/core/i18n/text/errors.ts\nconst prefix = \"errors.\";\nconst abortedText = {\n\tkey: `${prefix}aborted`,\n\ttext: \"You stopped media playback before it finished.\"\n};\nconst networkText = {\n\tkey: `${prefix}network`,\n\ttext: \"This media could not be loaded due to a network or server issue.\"\n};\nconst decodeText = {\n\tkey: `${prefix}decode`,\n\ttext: \"This media could not be played. It may be corrupted, or your browser may not support its format.\"\n};\nconst sourceText = {\n\tkey: `${prefix}source`,\n\ttext: \"This media could not be loaded. It may be unavailable, or your browser may not support its format.\"\n};\nconst encryptedText = {\n\tkey: `${prefix}encrypted`,\n\ttext: \"This media could not be played because it could not be decrypted.\"\n};\nconst unplayableText = {\n\tkey: `${prefix}unplayable`,\n\ttext: \"This media is unsupported by the player.\"\n};\nconst titleText = {\n\tkey: `${prefix}title`,\n\ttext: \"Something went wrong.\"\n};\nconst unexpectedText = {\n\tkey: `${prefix}unexpected`,\n\ttext: \"An unexpected error occurred.\"\n};\n//#endregion\nexport { abortedText, decodeText, encryptedText, networkText, sourceText, titleText, unexpectedText, unplayableText };\n\n//# sourceMappingURL=errors.js.map","import { emptyText, okText } from \"../../../i18n/text/common.js\";\nimport { abortedText, decodeText, encryptedText, networkText, sourceText, titleText, unexpectedText, unplayableText } from \"../../../i18n/text/errors.js\";\nimport { MediaError } from \"@videojs/media\";\n//#region src/core/ui/error-dialog/error-dialog-i18n.ts\n/**\n* SVTA 99 [Custom] 001 — an engine reporting that it has no pipeline for\n* something the source requires. Not a `MediaError.MEDIA_ERR_*` value: engines\n* that report SVTA codes surface them on `error.code` directly.\n*\n* The literal rather than an import. `@videojs/spf` defines this as\n* `SVTA_UNSUPPORTED_PLAYBACK_FEATURE` and owns its meaning, but core doesn't\n* depend on spf, and reaching it through `@videojs/media` would pull an engine\n* entry point into a barrel that has no other reason to load one. Same trade\n* `HlsVideoMediaStreamType` makes in the other direction — compatibility by\n* value, stated in a comment, instead of a dependency edge neither package\n* wants.\n*/\nconst SVTA_UNSUPPORTED_PLAYBACK_FEATURE = 99001;\nconst MEDIA_ERROR_TRANSLATIONS = {\n\t[MediaError.MEDIA_ERR_ABORTED]: abortedText,\n\t[MediaError.MEDIA_ERR_NETWORK]: networkText,\n\t[MediaError.MEDIA_ERR_DECODE]: decodeText,\n\t[MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED]: sourceText,\n\t[MediaError.MEDIA_ERR_ENCRYPTED]: encryptedText,\n\t[MediaError.MEDIA_ERR_CUSTOM]: emptyText,\n\t[SVTA_UNSUPPORTED_PLAYBACK_FEATURE]: unplayableText\n};\nconst STANDARD_CODE_UA_MESSAGES = { [MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED]: [\"Failed to open media\"] };\nfunction isStandardMediaErrorCode(code) {\n\treturn code >= MediaError.MEDIA_ERR_ABORTED && code <= MediaError.MEDIA_ERR_ENCRYPTED;\n}\nfunction getMediaErrorTranslationKey(code) {\n\treturn MEDIA_ERROR_TRANSLATIONS[code]?.key;\n}\nfunction getErrorDialogTitleText() {\n\treturn titleText;\n}\nfunction getErrorDialogDismissText() {\n\treturn okText;\n}\nfunction getErrorDialogUnexpectedText() {\n\treturn unexpectedText;\n}\n/**\n* Resolves dialog body copy: default phrases for known {@link MediaError} defaults, literal text for\n* custom messages, otherwise the generic fallback key.\n*/\nfunction resolveErrorDialogDescription(error, cachedMessage) {\n\tif (error) {\n\t\tconst text = MEDIA_ERROR_TRANSLATIONS[error.code];\n\t\tconst message = error.message?.trim();\n\t\tif (message) {\n\t\t\tconst defaultForCode = MediaError.defaultMessages[error.code];\n\t\t\tif (text && defaultForCode && message === defaultForCode) return text;\n\t\t\tconst uaVariants = STANDARD_CODE_UA_MESSAGES[error.code];\n\t\t\tif (text && isStandardMediaErrorCode(error.code) && !error.context && uaVariants?.includes(message)) return text;\n\t\t\treturn message;\n\t\t}\n\t\tif (text) return text;\n\t}\n\tconst cached = cachedMessage?.trim();\n\tif (cached) return cached;\n\treturn unexpectedText;\n}\n//#endregion\nexport { getErrorDialogDismissText, getErrorDialogTitleText, getErrorDialogUnexpectedText, getMediaErrorTranslationKey, resolveErrorDialogDescription };\n\n//# sourceMappingURL=error-dialog-i18n.js.map","//#region src/core/i18n/text/fullscreen.ts\nconst prefix = \"fullscreen.\";\nconst enterText = {\n\tkey: `${prefix}enter`,\n\ttext: \"Enter fullscreen\"\n};\nconst exitText = {\n\tkey: `${prefix}exit`,\n\ttext: \"Exit fullscreen\"\n};\n//#endregion\nexport { enterText, exitText };\n\n//# sourceMappingURL=fullscreen.js.map","//#region src/core/i18n/text/status.ts\nconst prefix = \"status.\";\nconst captionsOnText = {\n\tkey: `${prefix}captionsOn`,\n\ttext: \"Captions on\"\n};\nconst captionsOffText = {\n\tkey: `${prefix}captionsOff`,\n\ttext: \"Captions off\"\n};\nconst pausedText = {\n\tkey: `${prefix}paused`,\n\ttext: \"Paused\"\n};\nconst playingText = {\n\tkey: `${prefix}playing`,\n\ttext: \"Playing\"\n};\nconst fullscreenText = {\n\tkey: `${prefix}fullscreen`,\n\ttext: \"Fullscreen\"\n};\nconst pipText = {\n\tkey: `${prefix}pip`,\n\ttext: \"Picture in picture\"\n};\nconst exitPipText = {\n\tkey: `${prefix}exitPip`,\n\ttext: \"Exit picture in picture\"\n};\nconst seekedToText = {\n\tkey: `${prefix}seekedTo`,\n\ttext: \"Seeked to {time}\"\n};\n//#endregion\nexport { captionsOffText, captionsOnText, exitPipText, fullscreenText, pausedText, pipText, playingText, seekedToText };\n\n//# sourceMappingURL=status.js.map","//#region src/core/i18n/text/volume.ts\nconst prefix = \"volume.\";\nconst mutedValueText = {\n\tkey: `${prefix}mutedValue`,\n\ttext: \"{percent}, muted\"\n};\nconst mutedText = {\n\tkey: `${prefix}muted`,\n\ttext: \"Muted\"\n};\nconst labelText = {\n\tkey: `${prefix}label`,\n\ttext: \"Volume\"\n};\nconst valueText = {\n\tkey: `${prefix}value`,\n\ttext: \"Volume {value}\"\n};\n//#endregion\nexport { labelText, mutedText, mutedValueText, valueText };\n\n//# sourceMappingURL=volume.js.map","import { translateText } from \"../../i18n/translate-text.js\";\nimport { exitText } from \"../../../i18n/text/fullscreen.js\";\nimport { captionsOffText, captionsOnText, exitPipText, fullscreenText, pausedText, pipText, playingText } from \"../../../i18n/text/status.js\";\nimport { labelText, mutedText } from \"../../../i18n/text/volume.js\";\n//#region src/core/ui/indicator/indicator-labels.ts\nconst DEFAULT_INPUT_INDICATOR_LABELS = {\n\tmuted: translateText(mutedText),\n\tvolume: translateText(labelText),\n\tcaptionsOn: translateText(captionsOnText),\n\tcaptionsOff: translateText(captionsOffText),\n\tpaused: translateText(pausedText),\n\tplaying: translateText(playingText),\n\tfullscreen: translateText(fullscreenText),\n\texitFullscreen: translateText(exitText),\n\tpictureInPicture: translateText(pipText),\n\texitPictureInPicture: translateText(exitPipText)\n};\n/** Maps i18n indicator keys to {@link InputIndicatorLabels} for status / volume feedback. */\nfunction createInputIndicatorLabels(translator) {\n\treturn {\n\t\tmuted: translator(mutedText),\n\t\tvolume: translator(labelText),\n\t\tcaptionsOn: translator(captionsOnText),\n\t\tcaptionsOff: translator(captionsOffText),\n\t\tpaused: translator(pausedText),\n\t\tplaying: translator(playingText),\n\t\tfullscreen: translator(fullscreenText),\n\t\texitFullscreen: translator(exitText),\n\t\tpictureInPicture: translator(pipText),\n\t\texitPictureInPicture: translator(exitPipText)\n\t};\n}\n//#endregion\nexport { DEFAULT_INPUT_INDICATOR_LABELS, createInputIndicatorLabels };\n\n//# sourceMappingURL=indicator-labels.js.map","//#region src/core/ui/input-action/input-action.ts\nfunction isInputActionIncluded(action, actions) {\n\tif (!action) return false;\n\treturn !actions || actions.includes(action);\n}\n//#endregion\nexport { isInputActionIncluded };\n\n//# sourceMappingURL=input-action.js.map","import { getTransitionFlags } from \"../transition.js\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/menu/menu-core.ts\n/** Base menu logic: ARIA attributes and open/close state computation. */\nvar MenuCore = class MenuCore {\n\tstatic defaultProps = {\n\t\tside: \"bottom\",\n\t\talign: \"start\",\n\t\topen: false,\n\t\tdefaultOpen: false,\n\t\tcloseOnEscape: true,\n\t\tcloseOnOutsideClick: true\n\t};\n\t#props = { ...MenuCore.defaultProps };\n\t#input = null;\n\tget props() {\n\t\treturn this.#props;\n\t}\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, MenuCore.defaultProps);\n\t}\n\tsetInput(input) {\n\t\tthis.#input = input;\n\t}\n\tgetState() {\n\t\tconst input = this.#input;\n\t\tconst isSubmenu = input.isSubmenu;\n\t\treturn {\n\t\t\topen: input.active,\n\t\t\tstatus: input.status,\n\t\t\tside: isSubmenu ? void 0 : this.#props.side,\n\t\t\talign: isSubmenu ? void 0 : this.#props.align,\n\t\t\tisSubmenu,\n\t\t\t...getTransitionFlags(input.status)\n\t\t};\n\t}\n\tgetTriggerAttrs(state, contentId) {\n\t\treturn {\n\t\t\t...!state.isSubmenu && { tabIndex: 0 },\n\t\t\t\"aria-haspopup\": \"menu\",\n\t\t\t\"aria-expanded\": state.open && state.status !== \"ending\" ? \"true\" : \"false\",\n\t\t\t\"aria-controls\": contentId\n\t\t};\n\t}\n\tgetContentAttrs(state) {\n\t\treturn {\n\t\t\trole: \"menu\",\n\t\t\ttabIndex: -1,\n\t\t\t...!state.isSubmenu && { popover: \"manual\" }\n\t\t};\n\t}\n};\n//#endregion\nexport { MenuCore };\n\n//# sourceMappingURL=menu-core.js.map","import { TransitionDataAttrs } from \"../transition.js\";\n//#region src/core/ui/menu/menu-data-attrs.ts\n/** Data attributes set on the menu Content element and inherited by all children. */\nconst MenuDataAttrs = {\n\t/** Present when the menu is open. */\n\topen: \"data-open\",\n\t/** Rendered positioning side after collision handling. Absent on submenus. */\n\tside: \"data-side\",\n\t/** Popover positioning alignment. Absent on submenus. */\n\talign: \"data-align\",\n\t/** Present on Content when this menu is nested inside a parent menu. */\n\tisSubmenu: \"data-submenu\",\n\t...TransitionDataAttrs\n};\n//#endregion\nexport { MenuDataAttrs };\n\n//# sourceMappingURL=menu-data-attrs.js.map","//#region src/core/i18n/text/buttons.ts\nconst prefix = \"buttons.\";\nconst playText = {\n\tkey: `${prefix}play`,\n\ttext: \"Play\"\n};\nconst pauseText = {\n\tkey: `${prefix}pause`,\n\ttext: \"Pause\"\n};\nconst replayText = {\n\tkey: `${prefix}replay`,\n\ttext: \"Replay\"\n};\nconst muteText = {\n\tkey: `${prefix}mute`,\n\ttext: \"Mute\"\n};\nconst unmuteText = {\n\tkey: `${prefix}unmute`,\n\ttext: \"Unmute\"\n};\n//#endregion\nexport { muteText, pauseText, playText, replayText, unmuteText };\n\n//# sourceMappingURL=buttons.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { muteText, unmuteText } from \"../../../i18n/text/buttons.js\";\nimport { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/mute-button/mute-button-core.ts\nvar MuteButtonCore = class MuteButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tmuted: false,\n\t\tvolumeLevel: \"off\",\n\t\tavailability: \"unavailable\",\n\t\thidden: true,\n\t\tlabel: \"\"\n\t});\n\t#props = { ...MuteButtonCore.defaultProps };\n\t#media = null;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, MuteButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst label = resolveLabel(this.#props.label, state);\n\t\tif (label) return label;\n\t\treturn state.muted ? unmuteText : muteText;\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": this.#props.disabled ? \"true\" : void 0\n\t\t};\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tconst availability = media.mutedAvailability;\n\t\tthis.state.patch({\n\t\t\tmuted: media.muted || media.volume === 0,\n\t\t\tvolumeLevel: getVolumeLevel(media),\n\t\t\tavailability,\n\t\t\thidden: availability !== \"available\"\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\ttoggle(media) {\n\t\tif (this.#props.disabled || media.mutedAvailability !== \"available\") return;\n\t\tmedia.toggleMuted();\n\t}\n};\nfunction getVolumeLevel(media) {\n\tif (media.muted || media.volume === 0) return \"off\";\n\tif (media.volume < .5) return \"low\";\n\tif (media.volume < .75) return \"medium\";\n\treturn \"high\";\n}\n//#endregion\nexport { MuteButtonCore };\n\n//# sourceMappingURL=mute-button-core.js.map","//#region src/core/ui/mute-button/mute-button-data-attrs.ts\nconst MuteButtonDataAttrs = {\n\t/** Present when the media is muted. */\n\tmuted: \"data-muted\",\n\t/** Indicates the volume level. */\n\tvolumeLevel: \"data-volume-level\",\n\t/** Indicates mute availability (`available`, `unavailable`, `unsupported`). */\n\tavailability: \"data-availability\",\n\t/** Present when the button is hidden because the media has no mute to toggle. */\n\thidden: \"data-hidden\"\n};\n//#endregion\nexport { MuteButtonDataAttrs };\n\n//# sourceMappingURL=mute-button-data-attrs.js.map","import { resolveText } from \"../../i18n/resolve-text.js\";\nimport { resolveLabel } from \"../utils/resolve-label.js\";\nimport { pauseText, playText, replayText } from \"../../../i18n/text/buttons.js\";\nimport { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/play-button/play-button-core.ts\nvar PlayButtonCore = class PlayButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tpaused: true,\n\t\tended: false,\n\t\tstarted: false,\n\t\tlabel: \"\"\n\t});\n\t#props = { ...PlayButtonCore.defaultProps };\n\t#media = null;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, PlayButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst label = resolveLabel(this.#props.label, state);\n\t\tif (label) return label;\n\t\tif (state.ended) return replayText;\n\t\treturn state.paused ? playText : pauseText;\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": this.#props.disabled ? \"true\" : void 0\n\t\t};\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tthis.state.patch({\n\t\t\tpaused: media.paused,\n\t\t\tended: media.ended,\n\t\t\tstarted: media.started\n\t\t});\n\t\tthis.state.patch({ label: resolveText(this.getLabel(this.state.current)) });\n\t\treturn this.state.current;\n\t}\n\tasync toggle(media) {\n\t\tif (this.#props.disabled) return;\n\t\tif (media.paused || media.ended) return media.play();\n\t\tmedia.pause();\n\t}\n};\n//#endregion\nexport { PlayButtonCore };\n\n//# sourceMappingURL=play-button-core.js.map","//#region src/core/ui/play-button/play-button-data-attrs.ts\nconst PlayButtonDataAttrs = {\n\t/** Present when the media is paused. */\n\tpaused: \"data-paused\",\n\t/** Present when the media has ended. */\n\tended: \"data-ended\",\n\t/** Present when playback has started. */\n\tstarted: \"data-started\"\n};\n//#endregion\nexport { PlayButtonDataAttrs };\n\n//# sourceMappingURL=play-button-data-attrs.js.map","const rateText = {\n\tkey: `playback.rate`,\n\ttext: \"Playback rate {rate}\"\n};\n//#endregion\nexport { rateText };\n\n//# sourceMappingURL=playback.js.map","import { getTransitionFlags } from \"../transition.js\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/popover/popover-core.ts\nvar PopoverCore = class PopoverCore {\n\tstatic defaultProps = {\n\t\tside: \"top\",\n\t\talign: \"center\",\n\t\tmodal: false,\n\t\tcloseOnEscape: true,\n\t\tcloseOnOutsideClick: true,\n\t\topen: false,\n\t\tdefaultOpen: false,\n\t\topenOnHover: false,\n\t\tdelay: 300,\n\t\tcloseDelay: 0\n\t};\n\t#props = { ...PopoverCore.defaultProps };\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, PopoverCore.defaultProps);\n\t}\n\t#input = null;\n\tsetInput(input) {\n\t\tthis.#input = input;\n\t}\n\tgetState() {\n\t\tconst input = this.#input;\n\t\treturn {\n\t\t\topen: input.active,\n\t\t\tstatus: input.status,\n\t\t\tside: this.#props.side,\n\t\t\talign: this.#props.align,\n\t\t\tmodal: this.#props.modal,\n\t\t\t...getTransitionFlags(input.status)\n\t\t};\n\t}\n\tgetTriggerAttrs(state, popupId) {\n\t\treturn {\n\t\t\t\"aria-expanded\": state.open && state.status !== \"ending\" ? \"true\" : \"false\",\n\t\t\t\"aria-haspopup\": \"dialog\",\n\t\t\t\"aria-controls\": popupId\n\t\t};\n\t}\n\tgetPopupAttrs(state) {\n\t\treturn {\n\t\t\tpopover: \"manual\",\n\t\t\trole: \"dialog\",\n\t\t\t\"aria-modal\": state.modal === true ? \"true\" : void 0\n\t\t};\n\t}\n};\n//#endregion\nexport { PopoverCore };\n\n//# sourceMappingURL=popover-core.js.map","import { TransitionDataAttrs } from \"../transition.js\";\n//#region src/core/ui/popover/popover-data-attrs.ts\nconst PopoverDataAttrs = {\n\t/** Present when the popover is open. */\n\topen: \"data-open\",\n\t/** Indicates the rendered side of the popover after collision handling. */\n\tside: \"data-side\",\n\t/** Indicates how the popover is aligned relative to the specified side. */\n\talign: \"data-align\",\n\t...TransitionDataAttrs\n};\n//#endregion\nexport { PopoverDataAttrs };\n\n//# sourceMappingURL=popover-data-attrs.js.map","//#region src/core/ui/popover/popup-host-attr.ts\n/**\n* Hosted floating UI surfaces (popover, menu, tooltip, and future overlays) that support\n* parent-driven lifecycle may set {@link POPUP_HOST_ATTR}. Ancestors can discover them with\n* {@link POPUP_HOST_SELECTOR} and call methods such as `close('imperative-action')` when\n* the element implements that contract.\n*/\nconst POPUP_HOST_ATTR = \"data-popup\";\nconst POPUP_HOST_SELECTOR = `[${POPUP_HOST_ATTR}]`;\n//#endregion\nexport { POPUP_HOST_ATTR, POPUP_HOST_SELECTOR };\n\n//# sourceMappingURL=popup-host-attr.js.map","import \"../i18n.js\";\nimport { isNumber } from \"../predicate/predicate.js\";\n//#region src/time/format.ts\nconst DurationFormat = Intl.DurationFormat;\nconst durationFormatters = /* @__PURE__ */ new Map();\n/**\n* `Intl.DurationFormat` is unavailable on Node < 23 (SSR/prerender) and pre-2024 evergreen\n* browsers, so degrade gracefully per the documented browser-support fallback policy.\n* Digital output stays exact; localized phrase styles fall back to English.\n*/\nfunction createFallbackFormatter(style, hoursDisplay, locale) {\n\tif (style === \"digital\") {\n\t\tconst number = new Intl.NumberFormat(locale, { useGrouping: false });\n\t\tconst padded = new Intl.NumberFormat(locale, {\n\t\t\tminimumIntegerDigits: 2,\n\t\t\tuseGrouping: false\n\t\t});\n\t\treturn { format: (duration) => {\n\t\t\tconst body = `${padded.format(duration.minutes ?? 0)}:${padded.format(duration.seconds ?? 0)}`;\n\t\t\treturn hoursDisplay === \"always\" || duration.hours !== void 0 ? `${number.format(duration.hours ?? 0)}:${body}` : body;\n\t\t} };\n\t}\n\tconst units = [\n\t\t[\"hours\", \"hour\"],\n\t\t[\"minutes\", \"minute\"],\n\t\t[\"seconds\", \"second\"]\n\t];\n\treturn { format: (duration) => units.filter(([unit]) => duration[unit] !== void 0).map(([unit, label]) => {\n\t\tconst value = duration[unit] ?? 0;\n\t\treturn `${value} ${label}${value === 1 ? \"\" : \"s\"}`;\n\t}).join(\", \") };\n}\nfunction localeCacheKey(locale) {\n\tif (locale === void 0) return \"\";\n\treturn Array.isArray(locale) ? locale.join(\":\") : locale;\n}\nfunction isEnglishLocale(locale) {\n\tconst tag = Array.isArray(locale) ? locale[0] : locale;\n\tif (!tag) return true;\n\treturn tag === \"en\" || tag.startsWith(`en-`);\n}\nfunction getDurationFormatter(locale, style = \"long\", hoursDisplay, secondsDisplay) {\n\tconst key = `${localeCacheKey(locale)}:${style}:${hoursDisplay ?? \"\"}:${secondsDisplay ?? \"\"}`;\n\tlet formatter = durationFormatters.get(key);\n\tif (!formatter) {\n\t\tif (DurationFormat) {\n\t\t\tconst options = { style };\n\t\t\tif (hoursDisplay !== void 0) options.hoursDisplay = hoursDisplay;\n\t\t\tif (secondsDisplay !== void 0) options.secondsDisplay = secondsDisplay;\n\t\t\tformatter = new DurationFormat(locale, options);\n\t\t} else formatter = createFallbackFormatter(style, hoursDisplay, locale);\n\t\tdurationFormatters.set(key, formatter);\n\t}\n\treturn formatter;\n}\nfunction isValidTime(value) {\n\treturn isNumber(value) && Number.isFinite(value);\n}\n/**\n* Format seconds to digital display string.\n*\n* @param seconds - Time in seconds (can be negative)\n* @param guide - Guide time (typically duration) to determine display format\n* @param options - Digital formatting options\n* @returns Formatted string like \"1:30\" or \"1:05:30\"\n*\n* @example\n* formatTime(90) // \"1:30\"\n* formatTime(3661) // \"1:01:01\"\n* formatTime(35, 3600) // \"0:00:35\" (guided by 1-hour duration)\n* formatTime(35, 600) // \"00:35\" (guided by 10-minute duration)\n*/\nfunction formatTime(seconds, guide, options) {\n\tif (!isValidTime(seconds)) return \"0:00\";\n\tconst negative = seconds < 0;\n\tconst totalSeconds = Math.floor(Math.abs(seconds));\n\tconst hours = Math.floor(totalSeconds / 3600);\n\tconst minutes = Math.floor(totalSeconds % 3600 / 60);\n\tconst secondsPart = totalSeconds % 60;\n\tconst guideSeconds = isValidTime(guide ?? 0) ? Math.abs(guide ?? 0) : 0;\n\tconst guideHours = Math.floor(guideSeconds / 3600);\n\tconst guideMinutes = Math.floor(guideSeconds / 60 % 60);\n\tconst showHours = hours > 0 || guideHours > 0;\n\tconst padMinutes = showHours || guideMinutes >= 10;\n\tconst duration = showHours ? {\n\t\thours,\n\t\tminutes,\n\t\tseconds: secondsPart\n\t} : {\n\t\tminutes,\n\t\tseconds: secondsPart\n\t};\n\tconst { locale = \"en\" } = options ?? {};\n\tlet body = getDurationFormatter(locale, \"digital\", showHours ? \"always\" : \"auto\").format(duration);\n\tif (!padMinutes) {\n\t\tconst zero = new Intl.NumberFormat(locale, { useGrouping: false }).format(0);\n\t\tbody = body.replace(new RegExp(`^${zero}(?=\\\\p{Nd}\\\\D)`, \"u\"), \"\");\n\t}\n\treturn `${negative ? \"-\" : \"\"}${body}`;\n}\n/**\n* Convert seconds to ISO 8601 duration for datetime attribute.\n*\n* @param seconds - Time in seconds\n* @returns ISO 8601 duration string like \"PT1M30S\"\n*\n* @example\n* secondsToIsoDuration(90) // \"PT1M30S\"\n* secondsToIsoDuration(3661) // \"PT1H1M1S\"\n*/\nfunction secondsToIsoDuration(seconds) {\n\tif (!isValidTime(seconds)) return \"PT0S\";\n\tconst positiveSeconds = Math.abs(seconds);\n\tconst h = Math.floor(positiveSeconds / 3600);\n\tconst m = Math.floor(positiveSeconds / 60 % 60);\n\tconst s = Math.floor(positiveSeconds % 60);\n\tlet duration = \"PT\";\n\tif (h > 0) duration += `${h}H`;\n\tif (m > 0) duration += `${m}M`;\n\tif (s > 0 || duration === \"PT\") duration += `${s}S`;\n\treturn duration;\n}\n/**\n* Human-readable duration using {@link Intl.DurationFormat}.\n*\n* Negative `seconds` denote remaining time: the absolute value is formatted, then wrapped in a\n* localized phrase via {@link TimeFormatOptions.formatRemaining}; otherwise `{duration} remaining`.\n*/\nfunction formatTimeAsPhrase(seconds, options) {\n\tif (!isValidTime(seconds)) return \"\";\n\tconst negative = seconds < 0;\n\tconst totalSeconds = Math.floor(Math.abs(seconds));\n\tconst hours = Math.floor(totalSeconds / 3600);\n\tconst minutes = Math.floor(totalSeconds % 3600 / 60);\n\tconst secondsPart = totalSeconds % 60;\n\tconst record = {};\n\tif (hours > 0) record.hours = hours;\n\tif (minutes > 0) record.minutes = minutes;\n\tif (secondsPart > 0 || hours === 0 && minutes === 0) record.seconds = secondsPart;\n\tconst secondsDisplay = totalSeconds === 0 ? \"always\" : void 0;\n\tconst body = getDurationFormatter(options?.locale, options?.style ?? \"long\", void 0, secondsDisplay).format(record);\n\tif (negative) {\n\t\tconst formatRemaining = options?.formatRemaining;\n\t\tif (formatRemaining) return formatRemaining(body);\n\t\tif (isEnglishLocale(options?.locale)) return `${body} remaining`;\n\t\treturn body;\n\t}\n\treturn body;\n}\n//#endregion\nexport { formatTime, formatTimeAsPhrase, secondsToIsoDuration };\n\n//# sourceMappingURL=format.js.map","import { clamp } from \"@videojs/utils/number\";\nimport { formatTime } from \"@videojs/utils/time\";\n//#region src/core/ui/seek-indicator/seek-indicator-status.ts\nfunction isSeekIndicatorAction(action) {\n\treturn action === \"seekStep\" || action === \"seekToPercent\";\n}\nfunction formatCurrentTime(snapshot) {\n\treturn formatTime(snapshot.currentTime ?? 0, snapshot.duration);\n}\nfunction getSeekIndicatorDisplayValue(state) {\n\treturn state.value ?? state.currentTime;\n}\nfunction getSeekToPercent(event) {\n\tif (event.value !== void 0) return clamp(event.value, 0, 100);\n\tif (!event.key || event.key < \"0\" || event.key > \"9\") return null;\n\treturn Number(event.key) * 10;\n}\nfunction getSeekDirection(event, snapshot) {\n\tif (event.action === \"seekStep\" && event.value !== void 0) {\n\t\tif (event.value > 0) return \"forward\";\n\t\tif (event.value < 0) return \"backward\";\n\t}\n\tif (event.action === \"seekToPercent\") {\n\t\tconst percent = getSeekToPercent(event);\n\t\tif (percent === null || snapshot.duration === void 0 || snapshot.duration <= 0) return null;\n\t\tconst targetTime = percent / 100 * snapshot.duration;\n\t\tconst currentTime = snapshot.currentTime ?? 0;\n\t\tif (targetTime > currentTime) return \"forward\";\n\t\tif (targetTime < currentTime) return \"backward\";\n\t}\n\treturn null;\n}\n//#endregion\nexport { formatCurrentTime, getSeekDirection, getSeekIndicatorDisplayValue, getSeekToPercent, isSeekIndicatorAction };\n\n//# sourceMappingURL=seek-indicator-status.js.map","import { IndicatorCloseController, getIndicatorCloseDelay } from \"../indicator/indicator-lifecycle.js\";\nimport { formatCurrentTime, getSeekDirection, isSeekIndicatorAction } from \"./seek-indicator-status.js\";\nimport { createState } from \"@videojs/store\";\n//#region src/core/ui/seek-indicator/seek-indicator-core.ts\nconst INITIAL_STATE = {\n\topen: false,\n\tgeneration: 0,\n\tdirection: null,\n\tcount: 0,\n\tseekTotal: 0,\n\tvalue: null,\n\tcurrentTime: \"0:00\",\n\ttransitionStarting: false,\n\ttransitionEnding: false\n};\nvar SeekIndicatorCore = class {\n\tstate = createState({ ...INITIAL_STATE });\n\t#props = {};\n\t#originTime = null;\n\t#close = new IndicatorCloseController(() => {\n\t\tthis.#originTime = null;\n\t\tthis.state.patch({\n\t\t\topen: false,\n\t\t\tdirection: null,\n\t\t\tcount: 0,\n\t\t\tseekTotal: 0,\n\t\t\tvalue: null\n\t\t});\n\t}, () => getIndicatorCloseDelay(this.#props));\n\tsetProps(props) {\n\t\tthis.#props = props;\n\t}\n\tdestroy() {\n\t\tthis.#close.destroy();\n\t}\n\tclose() {\n\t\tthis.#close.close();\n\t}\n\tprocessEvent(event, snapshot) {\n\t\tif (!isSeekIndicatorAction(event.action)) return false;\n\t\tconst current = this.state.current;\n\t\tconst direction = getSeekDirection(event, snapshot);\n\t\tconst rapidRepeat = current.open && event.action === \"seekStep\" && current.direction === direction;\n\t\tif (!rapidRepeat) this.#originTime = snapshot.currentTime ?? null;\n\t\tconst value = this.#getEffectiveSeekValue(event, snapshot, rapidRepeat);\n\t\tconst seekTotal = rapidRepeat ? current.seekTotal + Math.abs(value) : Math.abs(value);\n\t\tthis.state.patch({\n\t\t\topen: true,\n\t\t\tgeneration: current.generation + 1,\n\t\t\tdirection,\n\t\t\tcount: rapidRepeat ? current.count + 1 : 1,\n\t\t\tseekTotal,\n\t\t\tvalue: event.action === \"seekStep\" && seekTotal > 0 ? `${seekTotal}s` : null,\n\t\t\tcurrentTime: formatCurrentTime(snapshot)\n\t\t});\n\t\tthis.#close.arm();\n\t\treturn true;\n\t}\n\t#getEffectiveSeekValue(event, snapshot, rapidRepeat) {\n\t\tif (event.action !== \"seekStep\" || event.value === void 0) return 0;\n\t\tif (!rapidRepeat || this.#originTime === null) return event.value;\n\t\tconst originTime = this.#originTime;\n\t\tconst duration = snapshot.duration ?? Infinity;\n\t\tconst currentTotal = this.state.current.seekTotal;\n\t\tconst step = Math.abs(event.value);\n\t\treturn (event.value < 0 ? Math.max(0, originTime - currentTotal) : Math.max(0, duration - originTime - currentTotal)) >= step ? event.value : 0;\n\t}\n};\n//#endregion\nexport { SeekIndicatorCore };\n\n//# sourceMappingURL=seek-indicator-core.js.map","//#region src/core/ui/seek-indicator/seek-indicator-data-attrs.ts\nconst SeekIndicatorDataAttrs = {\n\topen: \"data-open\",\n\tdirection: \"data-direction\",\n\ttransitionStarting: \"data-starting-style\",\n\ttransitionEnding: \"data-ending-style\"\n};\n//#endregion\nexport { SeekIndicatorDataAttrs };\n\n//# sourceMappingURL=seek-indicator-data-attrs.js.map","import { resolveLabel } from \"../utils/resolve-label.js\";\nimport { defaults } from \"@videojs/utils/object\";\nimport { clamp, roundToStep, toPercent } from \"@videojs/utils/number\";\n//#region src/core/ui/slider/slider-core.ts\n/** Base slider logic: value mapping, ARIA attrs, and step calculations. */\nvar SliderCore = class SliderCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tstep: 1,\n\t\tlargeStep: 10,\n\t\torientation: \"horizontal\",\n\t\tdisabled: false,\n\t\tthumbAlignment: \"center\",\n\t\tvalue: 0,\n\t\tmin: 0,\n\t\tmax: 100\n\t};\n\tstatic defaultInput = {\n\t\tpointerPercent: 0,\n\t\tdragPercent: 0,\n\t\tdragging: false,\n\t\tpointing: false,\n\t\tfocused: false\n\t};\n\t#props = { ...SliderCore.defaultProps };\n\t#input = { ...SliderCore.defaultInput };\n\tget props() {\n\t\treturn this.#props;\n\t}\n\tget input() {\n\t\treturn this.#input;\n\t}\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, SliderCore.defaultProps);\n\t}\n\tsetInput(input) {\n\t\tthis.#input = input;\n\t}\n\tgetSliderState(value) {\n\t\tconst { orientation, disabled, thumbAlignment } = this.#props;\n\t\tconst { pointerPercent, dragging, pointing, focused } = this.#input;\n\t\treturn {\n\t\t\tvalue,\n\t\t\tfillPercent: this.percentFromValue(value),\n\t\t\tpointerPercent,\n\t\t\tdragging,\n\t\t\tpointing,\n\t\t\tinteractive: dragging || pointing || focused,\n\t\t\torientation,\n\t\t\tdisabled,\n\t\t\tthumbAlignment\n\t\t};\n\t}\n\tgetLabel(state) {\n\t\treturn resolveLabel(this.#props.label, state) || \"\";\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\trole: \"slider\",\n\t\t\ttabIndex: state.disabled ? -1 : 0,\n\t\t\tautoComplete: \"off\",\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-valuemin\": this.#props.min,\n\t\t\t\"aria-valuemax\": this.#props.max,\n\t\t\t\"aria-valuenow\": state.value,\n\t\t\t\"aria-orientation\": state.orientation,\n\t\t\t\"aria-disabled\": state.disabled ? \"true\" : void 0\n\t\t};\n\t}\n\tvalueFromPercent(percent) {\n\t\tconst { min, max, step } = this.#props;\n\t\treturn roundToStep(clamp(min + percent / 100 * (max - min), min, max), step, min);\n\t}\n\t/** Convert percent to a clamped value without applying step rounding. */\n\trawValueFromPercent(percent) {\n\t\tconst { min, max } = this.#props;\n\t\treturn clamp(min + percent / 100 * (max - min), min, max);\n\t}\n\tpercentFromValue(value) {\n\t\tconst { min, max } = this.#props;\n\t\treturn toPercent(value, min, max);\n\t}\n\t/** Step as a percentage of the slider range. */\n\tgetStepPercent() {\n\t\tconst { step, min, max } = this.#props;\n\t\tconst range = max - min;\n\t\treturn range > 0 ? step / range * 100 : 0;\n\t}\n\t/** Large step as a percentage of the slider range. */\n\tgetLargeStepPercent() {\n\t\tconst { largeStep, min, max } = this.#props;\n\t\tconst range = max - min;\n\t\treturn range > 0 ? largeStep / range * 100 : 0;\n\t}\n\tadjustPercentForAlignment(rawPercent, thumbSize, trackSize) {\n\t\tif (this.#props.thumbAlignment === \"center\" || trackSize === 0) return rawPercent;\n\t\tconst thumbHalf = thumbSize / trackSize * 100 / 2;\n\t\tconst minPercent = thumbHalf;\n\t\tconst maxPercent = 100 - thumbHalf;\n\t\treturn minPercent + rawPercent / 100 * (maxPercent - minPercent);\n\t}\n};\n//#endregion\nexport { SliderCore };\n\n//# sourceMappingURL=slider-core.js.map","//#region src/core/ui/slider/slider-data-attrs.ts\nconst SliderDataAttrs = {\n\t/** Present when the user is actively dragging. */\n\tdragging: \"data-dragging\",\n\t/** Present when the pointer is over the slider. */\n\tpointing: \"data-pointing\",\n\t/** Present when dragging or pointing is active. */\n\tinteractive: \"data-interactive\",\n\t/** Current axis of slider movement (`horizontal` or `vertical`). */\n\torientation: \"data-orientation\",\n\t/** Present when the slider is non-interactive. */\n\tdisabled: \"data-disabled\"\n};\n//#endregion\nexport { SliderDataAttrs };\n\n//# sourceMappingURL=slider-data-attrs.js.map","import { translateText } from \"../../i18n/translate-text.js\";\nimport { seekedToText } from \"../../../i18n/text/status.js\";\nimport { valueText } from \"../../../i18n/text/volume.js\";\nimport { DEFAULT_INPUT_INDICATOR_LABELS, createInputIndicatorLabels } from \"../indicator/indicator-labels.js\";\nimport { rateText } from \"../../../i18n/text/playback.js\";\nimport { DEFAULT_LOCALE } from \"@videojs/utils/i18n\";\nimport { formatTimeAsPhrase } from \"@videojs/utils/time\";\n//#region src/core/ui/status-announcer/status-announcer-labels.ts\nconst DEFAULT_STATUS_ANNOUNCER_LABELS = {\n\t...DEFAULT_INPUT_INDICATOR_LABELS,\n\tvolumeWithValue: (value) => translateText(valueText, { value }),\n\tseekedTo: (time) => translateText(seekedToText, { time: formatTimeAsPhrase(time) }),\n\tplaybackRate: (rate) => translateText(rateText, { rate })\n};\n/** Adds the parameterized labels used by status announcements. */\nfunction createStatusAnnouncerLabels(translator, locale = DEFAULT_LOCALE) {\n\treturn {\n\t\t...createInputIndicatorLabels(translator),\n\t\tvolumeWithValue: (value) => translator(valueText, { value }),\n\t\tseekedTo: (time) => translator(seekedToText, { time: formatTimeAsPhrase(time, { locale }) }),\n\t\tplaybackRate: (rate) => translator(rateText, { rate })\n\t};\n}\n//#endregion\nexport { DEFAULT_STATUS_ANNOUNCER_LABELS, createStatusAnnouncerLabels };\n\n//# sourceMappingURL=status-announcer-labels.js.map","import { DEFAULT_INPUT_INDICATOR_LABELS } from \"../indicator/indicator-labels.js\";\nimport { clamp } from \"@videojs/utils/number\";\n//#region src/core/ui/volume-indicator/volume-indicator-status.ts\nfunction isVolumeIndicatorAction(action) {\n\treturn action === \"toggleMuted\" || action === \"volumeStep\";\n}\nfunction getVolumeLevel(volume) {\n\tif (volume <= 0) return \"off\";\n\treturn volume <= .5 ? \"low\" : \"high\";\n}\nfunction formatVolumeValue(volume) {\n\treturn `${Math.round(clamp(volume, 0, 1) * 100)}%`;\n}\nfunction getVolumeIndicatorDisplayValue(state) {\n\treturn state.value ?? \"\";\n}\n/** Predicted mute/volume after a volume-indicator action. */\nfunction predictVolumeActionOutcome(event, snapshot) {\n\tconst muted = snapshot.muted === true;\n\tconst snapshotVolume = snapshot.volume ?? 0;\n\tif (event.action === \"toggleMuted\") return {\n\t\tsnapshotVolume,\n\t\tnextMuted: !muted,\n\t\tnextVolume: snapshotVolume\n\t};\n\tif (event.action === \"volumeStep\") {\n\t\tconst nextVolume = clamp(snapshotVolume + (event.value ?? 0), 0, 1);\n\t\treturn {\n\t\t\tsnapshotVolume,\n\t\t\tnextMuted: muted && nextVolume <= 0,\n\t\t\tnextVolume\n\t\t};\n\t}\n\treturn {\n\t\tsnapshotVolume,\n\t\tnextMuted: muted,\n\t\tnextVolume: snapshotVolume\n\t};\n}\n/** Labels/value/level for volume actions, shared with `StatusIndicatorCore`. */\nfunction deriveVolumeStatus(event, snapshot, labels = DEFAULT_INPUT_INDICATOR_LABELS, cachedPrediction) {\n\tconst prediction = cachedPrediction ?? predictVolumeActionOutcome(event, snapshot);\n\tconst level = prediction.nextMuted ? \"off\" : getVolumeLevel(prediction.nextVolume);\n\tconst value = prediction.nextMuted ? \"0%\" : formatVolumeValue(prediction.nextVolume);\n\treturn {\n\t\tstatus: level === \"off\" ? \"volume-off\" : level === \"low\" ? \"volume-low\" : \"volume-high\",\n\t\tlabel: level === \"off\" ? labels.muted : labels.volume,\n\t\tvalue,\n\t\tvolumeLevel: level\n\t};\n}\n//#endregion\nexport { deriveVolumeStatus, formatVolumeValue, getVolumeIndicatorDisplayValue, getVolumeLevel, isVolumeIndicatorAction, predictVolumeActionOutcome };\n\n//# sourceMappingURL=volume-indicator-status.js.map","import { DEFAULT_STATUS_ANNOUNCER_LABELS } from \"./status-announcer-labels.js\";\nimport { formatVolumeValue } from \"../volume-indicator/volume-indicator-status.js\";\n//#region src/core/ui/status-announcer/status-announcer-status.ts\nfunction deriveStatusAnnouncement(previous, snapshot, labels = DEFAULT_STATUS_ANNOUNCER_LABELS) {\n\tconst announcements = [];\n\tif (hasChanged(previous.paused, snapshot.paused)) announcements.push(snapshot.paused ? labels.paused : labels.playing);\n\tif (hasChanged(previous.subtitlesShowing, snapshot.subtitlesShowing) && snapshot.subtitlesAvailable !== false) announcements.push(snapshot.subtitlesShowing ? labels.captionsOn : labels.captionsOff);\n\tif (hasChanged(previous.fullscreen, snapshot.fullscreen)) announcements.push(snapshot.fullscreen ? labels.fullscreen : labels.exitFullscreen);\n\tif (hasChanged(previous.pip, snapshot.pip)) announcements.push(snapshot.pip ? labels.pictureInPicture : labels.exitPictureInPicture);\n\tif (hasChanged(previous.playbackRate, snapshot.playbackRate)) announcements.push(labels.playbackRate(`${snapshot.playbackRate}×`));\n\treturn announcements.length > 0 ? announcements.join(\". \") : null;\n}\nfunction deriveVolumeAnnouncement(previous, snapshot, labels = DEFAULT_STATUS_ANNOUNCER_LABELS) {\n\tif (!hasChanged(previous.volume, snapshot.volume) && !hasChanged(previous.muted, snapshot.muted)) return null;\n\tconst volume = snapshot.volume ?? previous.volume;\n\tconst muted = snapshot.muted ?? previous.muted;\n\tif (volume === void 0 && muted === void 0) return null;\n\treturn muted || (volume ?? 0) <= 0 ? labels.muted : labels.volumeWithValue(formatVolumeValue(volume ?? 0));\n}\nfunction hasChanged(previous, next) {\n\treturn previous !== void 0 && next !== void 0 && !Object.is(previous, next);\n}\n//#endregion\nexport { deriveStatusAnnouncement, deriveVolumeAnnouncement };\n\n//# sourceMappingURL=status-announcer-status.js.map","import { IndicatorCloseController, getIndicatorCloseDelay } from \"../indicator/indicator-lifecycle.js\";\nimport { DEFAULT_STATUS_ANNOUNCER_LABELS } from \"./status-announcer-labels.js\";\nimport { deriveStatusAnnouncement, deriveVolumeAnnouncement } from \"./status-announcer-status.js\";\nimport { createState } from \"@videojs/store\";\n//#region src/core/ui/status-announcer/status-announcer-core.ts\nconst ANNOUNCEMENT_DEBOUNCE = 200;\nvar StatusAnnouncerCore = class {\n\tstate = createState({\n\t\tgeneration: 0,\n\t\tlabel: null\n\t});\n\t#props = {};\n\t#snapshot = null;\n\t#seekStartTime = null;\n\t#seekTargetTime = null;\n\t#timer = null;\n\t#close = new IndicatorCloseController(() => this.state.patch({ label: null }), () => getIndicatorCloseDelay(this.#props));\n\tsetProps(props) {\n\t\tthis.#props = props;\n\t}\n\tresetSnapshot() {\n\t\tthis.#snapshot = null;\n\t\tthis.#seekStartTime = null;\n\t\tthis.#seekTargetTime = null;\n\t\tthis.#clearTimer();\n\t\tthis.#close.close();\n\t}\n\tdestroy() {\n\t\tthis.#clearTimer();\n\t\tthis.#close.destroy();\n\t}\n\tprocessSnapshot(snapshot) {\n\t\tconst previous = this.#snapshot;\n\t\tthis.#snapshot = snapshot;\n\t\tif (!previous) return false;\n\t\tconst labels = this.#getLabels();\n\t\tconst statusLabel = deriveStatusAnnouncement(previous, snapshot, labels);\n\t\tconst statusHandled = statusLabel !== null && this.#announce(statusLabel);\n\t\tconst seekHandled = this.#processSeekSnapshot(previous, snapshot, labels, statusHandled);\n\t\tconst volumeHandled = this.#processVolumeSnapshot(previous, snapshot, labels, statusHandled || seekHandled);\n\t\treturn statusHandled || seekHandled || volumeHandled;\n\t}\n\t#getLabels() {\n\t\treturn {\n\t\t\t...DEFAULT_STATUS_ANNOUNCER_LABELS,\n\t\t\t...this.#props.labels\n\t\t};\n\t}\n\t#announce(label) {\n\t\tthis.#clearTimer();\n\t\tthis.state.patch({\n\t\t\tgeneration: this.state.current.generation + 1,\n\t\t\tlabel\n\t\t});\n\t\tthis.#close.arm();\n\t\treturn true;\n\t}\n\t#processVolumeSnapshot(previous, snapshot, labels, alreadyHandled) {\n\t\tconst label = deriveVolumeAnnouncement(previous, snapshot, labels);\n\t\tif (label === null || alreadyHandled || !this.#shouldAnnounce()) return false;\n\t\tthis.#schedule(label);\n\t\treturn true;\n\t}\n\t#processSeekSnapshot(previous, snapshot, labels, alreadyHandled) {\n\t\tif (previous.seeking !== true && snapshot.seeking === true) {\n\t\t\tthis.#seekStartTime = previous.currentTime ?? null;\n\t\t\tthis.#seekTargetTime = snapshot.currentTime ?? null;\n\t\t\tthis.#clearTimer();\n\t\t\treturn false;\n\t\t}\n\t\tif (snapshot.seeking === true) {\n\t\t\tthis.#seekTargetTime = snapshot.currentTime ?? this.#seekTargetTime;\n\t\t\treturn false;\n\t\t}\n\t\tif (previous.seeking !== true || snapshot.seeking !== false) return false;\n\t\tconst targetTime = snapshot.currentTime ?? this.#seekTargetTime;\n\t\tconst startTime = this.#seekStartTime;\n\t\tthis.#seekStartTime = null;\n\t\tthis.#seekTargetTime = null;\n\t\tif (targetTime === void 0 || targetTime === null || Object.is(targetTime, startTime)) return false;\n\t\tif (alreadyHandled || !this.#shouldAnnounce()) return false;\n\t\tthis.#schedule(labels.seekedTo(targetTime));\n\t\treturn true;\n\t}\n\t#schedule(label) {\n\t\tthis.#clearTimer();\n\t\tthis.#timer = setTimeout(() => {\n\t\t\tthis.#timer = null;\n\t\t\tif (!this.#shouldAnnounce()) return;\n\t\t\tthis.#announce(label);\n\t\t}, ANNOUNCEMENT_DEBOUNCE);\n\t}\n\t#shouldAnnounce() {\n\t\treturn this.#props.shouldAnnounce?.() !== false;\n\t}\n\t#clearTimer() {\n\t\tif (this.#timer === null) return;\n\t\tclearTimeout(this.#timer);\n\t\tthis.#timer = null;\n\t}\n};\n//#endregion\nexport { StatusAnnouncerCore };\n\n//# sourceMappingURL=status-announcer-core.js.map","import { DEFAULT_INPUT_INDICATOR_LABELS } from \"../indicator/indicator-labels.js\";\nimport { deriveVolumeStatus } from \"../volume-indicator/volume-indicator-status.js\";\n//#region src/core/ui/status-indicator/status-indicator-status.ts\nfunction deriveStatus(event, snapshot, labels = DEFAULT_INPUT_INDICATOR_LABELS) {\n\tswitch (event.action) {\n\t\tcase \"togglePaused\": {\n\t\t\tconst paused = snapshot.paused !== void 0 ? !snapshot.paused : true;\n\t\t\treturn {\n\t\t\t\tstatus: paused ? \"pause\" : \"play\",\n\t\t\t\tlabel: paused ? labels.paused : labels.playing,\n\t\t\t\tvalue: null\n\t\t\t};\n\t\t}\n\t\tcase \"toggleMuted\":\n\t\tcase \"volumeStep\": return deriveVolumeStatus(event, snapshot, labels);\n\t\tcase \"toggleSubtitles\": {\n\t\t\tif (snapshot.subtitlesAvailable === false) return null;\n\t\t\tconst showing = snapshot.subtitlesShowing !== void 0 ? !snapshot.subtitlesShowing : true;\n\t\t\treturn {\n\t\t\t\tstatus: showing ? \"captions-on\" : \"captions-off\",\n\t\t\t\tlabel: showing ? labels.captionsOn : labels.captionsOff,\n\t\t\t\tvalue: null\n\t\t\t};\n\t\t}\n\t\tcase \"toggleFullscreen\": {\n\t\t\tconst fullscreen = snapshot.fullscreen !== void 0 ? !snapshot.fullscreen : true;\n\t\t\treturn {\n\t\t\t\tstatus: fullscreen ? \"fullscreen\" : \"exit-fullscreen\",\n\t\t\t\tlabel: fullscreen ? labels.fullscreen : labels.exitFullscreen,\n\t\t\t\tvalue: null\n\t\t\t};\n\t\t}\n\t\tcase \"togglePictureInPicture\": {\n\t\t\tconst pip = snapshot.pip !== void 0 ? !snapshot.pip : true;\n\t\t\treturn {\n\t\t\t\tstatus: pip ? \"pip\" : \"exit-pip\",\n\t\t\t\tlabel: pip ? labels.pictureInPicture : labels.exitPictureInPicture,\n\t\t\t\tvalue: null\n\t\t\t};\n\t\t}\n\t\tdefault: return null;\n\t}\n}\nfunction getStatusIndicatorDisplayValue(state) {\n\treturn state.value ?? state.label ?? \"\";\n}\n//#endregion\nexport { deriveStatus, getStatusIndicatorDisplayValue };\n\n//# sourceMappingURL=status-indicator-status.js.map","import { DEFAULT_INPUT_INDICATOR_LABELS } from \"../indicator/indicator-labels.js\";\nimport { IndicatorCloseController, getIndicatorCloseDelay } from \"../indicator/indicator-lifecycle.js\";\nimport { isInputActionIncluded } from \"../input-action/input-action.js\";\nimport { deriveStatus } from \"./status-indicator-status.js\";\nimport { createState } from \"@videojs/store\";\n//#region src/core/ui/status-indicator/status-indicator-core.ts\nconst INITIAL_STATE = {\n\topen: false,\n\tgeneration: 0,\n\tstatus: null,\n\tlabel: null,\n\tvalue: null,\n\ttransitionStarting: false,\n\ttransitionEnding: false\n};\nvar StatusIndicatorCore = class {\n\tstate = createState({ ...INITIAL_STATE });\n\t#props = {};\n\t#close = new IndicatorCloseController(() => this.state.patch({\n\t\topen: false,\n\t\tstatus: null,\n\t\tlabel: null,\n\t\tvalue: null\n\t}), () => getIndicatorCloseDelay(this.#props));\n\tsetProps(props) {\n\t\tthis.#props = props;\n\t}\n\tdestroy() {\n\t\tthis.#close.destroy();\n\t}\n\tclose() {\n\t\tthis.#close.close();\n\t}\n\tprocessEvent(event, snapshot) {\n\t\tif (!isInputActionIncluded(event.action, this.#props.actions)) return false;\n\t\tconst details = deriveStatus(event, snapshot, {\n\t\t\t...DEFAULT_INPUT_INDICATOR_LABELS,\n\t\t\t...this.#props.labels\n\t\t});\n\t\tif (!details) return false;\n\t\tthis.state.patch({\n\t\t\topen: true,\n\t\t\tgeneration: this.state.current.generation + 1,\n\t\t\tstatus: details.status,\n\t\t\tlabel: details.label,\n\t\t\tvalue: details.value\n\t\t});\n\t\tthis.#close.arm();\n\t\treturn true;\n\t}\n};\n//#endregion\nexport { StatusIndicatorCore };\n\n//# sourceMappingURL=status-indicator-core.js.map","//#region src/core/ui/status-indicator/status-indicator-data-attrs.ts\nconst StatusIndicatorDataAttrs = {\n\topen: \"data-open\",\n\tstatus: \"data-status\",\n\ttransitionStarting: \"data-starting-style\",\n\ttransitionEnding: \"data-ending-style\"\n};\n//#endregion\nexport { StatusIndicatorDataAttrs };\n\n//# sourceMappingURL=status-indicator-data-attrs.js.map","//#region src/core/ui/thumbnail/thumbnail-data-attrs.ts\nconst ThumbnailDataAttrs = {\n\tloading: \"data-loading\",\n\terror: \"data-error\",\n\thidden: \"data-hidden\"\n};\n//#endregion\nexport { ThumbnailDataAttrs };\n\n//# sourceMappingURL=thumbnail-data-attrs.js.map","import { isNumber } from \"@videojs/utils/predicate\";\n//#region src/core/ui/thumbnail/thumbnail-media-fragment.ts\n/** Parse `url#xywh=x,y,w,h` into a URL and optional sprite coordinates. */\nfunction parseMediaFragment(text, baseURL) {\n\tconst parts = text.trim().split(\"#\");\n\tconst rawURL = parts[0] ?? \"\";\n\tconst hash = parts[1];\n\tconst url = baseURL ? new URL(rawURL, baseURL).href : rawURL;\n\tif (!hash) return { url };\n\tconst eqIndex = hash.indexOf(\"=\");\n\tif (eqIndex === -1) return { url };\n\tconst keys = hash.slice(0, eqIndex);\n\tconst values = hash.slice(eqIndex + 1).split(\",\").map(Number);\n\tconst data = {};\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key = keys[i];\n\t\tconst value = values[i];\n\t\tif (key && isNumber(value) && !Number.isNaN(value)) data[key] = value;\n\t}\n\tconst result = { url };\n\tif (isNumber(data.w)) result.width = data.w;\n\tif (isNumber(data.h)) result.height = data.h;\n\tif (isNumber(data.x) && isNumber(data.y)) result.coords = {\n\t\tx: data.x,\n\t\ty: data.y\n\t};\n\treturn result;\n}\n/**\n* Convert an array of text cues (e.g. `VTTCue` from a `<track>` element)\n* into {@link ThumbnailImage} entries by parsing the media-fragment in\n* each cue's text.\n*/\nfunction mapCuesToThumbnails(cues, baseURL) {\n\tconst images = [];\n\tfor (const cue of cues) {\n\t\tconst fragment = parseMediaFragment(cue.text, baseURL);\n\t\tconst image = {\n\t\t\turl: fragment.url,\n\t\t\tstartTime: cue.startTime,\n\t\t\tendTime: cue.endTime\n\t\t};\n\t\tif (fragment.width) image.width = fragment.width;\n\t\tif (fragment.height) image.height = fragment.height;\n\t\tif (fragment.coords) image.coords = fragment.coords;\n\t\timages.push(image);\n\t}\n\treturn images;\n}\n//#endregion\nexport { mapCuesToThumbnails, parseMediaFragment };\n\n//# sourceMappingURL=thumbnail-media-fragment.js.map","//#region src/core/i18n/text/time.ts\nconst prefix = \"time.\";\nconst currentText = {\n\tkey: `${prefix}current`,\n\ttext: \"Current time\"\n};\nconst durationText = {\n\tkey: `${prefix}duration`,\n\ttext: \"Duration\"\n};\nconst remainingText = {\n\tkey: `${prefix}remaining`,\n\ttext: \"Remaining\"\n};\nconst elapsedSuffixText = {\n\tkey: `${prefix}elapsedSuffix`,\n\ttext: \"{duration} elapsed\"\n};\nconst durationSuffixText = {\n\tkey: `${prefix}durationSuffix`,\n\ttext: \"{duration} duration\"\n};\nconst remainingSuffixText = {\n\tkey: `${prefix}remainingSuffix`,\n\ttext: \"{duration} remaining\"\n};\nconst showElapsedText = {\n\tkey: `${prefix}showElapsed`,\n\ttext: \"Show elapsed time, {duration}.\"\n};\nconst showDurationText = {\n\tkey: `${prefix}showDuration`,\n\ttext: \"Show duration, {duration}.\"\n};\nconst showRemainingText = {\n\tkey: `${prefix}showRemaining`,\n\ttext: \"Show remaining time, {duration}.\"\n};\nconst toggleElapsedText = {\n\tkey: `${prefix}toggleElapsed`,\n\ttext: \"Toggle between elapsed and remaining time.\"\n};\nconst toggleDurationText = {\n\tkey: `${prefix}toggleDuration`,\n\ttext: \"Toggle between duration and remaining time.\"\n};\nconst positionText = {\n\tkey: `${prefix}position`,\n\ttext: \"{current} of {duration}\"\n};\n//#endregion\nexport { currentText, durationSuffixText, durationText, elapsedSuffixText, positionText, remainingSuffixText, remainingText, showDurationText, showElapsedText, showRemainingText, toggleDurationText, toggleElapsedText };\n\n//# sourceMappingURL=time.js.map","import { resolveLabel } from \"../utils/resolve-label.js\";\nimport { currentText, durationText, remainingText, showDurationText, showElapsedText, showRemainingText, toggleDurationText, toggleElapsedText } from \"../../../i18n/text/time.js\";\nimport { defaults } from \"@videojs/utils/object\";\nimport { formatTime, formatTimeAsPhrase, secondsToIsoDuration } from \"@videojs/utils/time\";\n//#region src/core/ui/time/time-core.ts\nconst TOGGLE_LABELS = {\n\tcurrent: showElapsedText,\n\tduration: showDurationText,\n\tremaining: showRemainingText\n};\nconst DEFAULT_LABELS = {\n\tcurrent: currentText,\n\tduration: durationText,\n\tremaining: remainingText\n};\nconst TOGGLE_DESCRIPTIONS = {\n\tcurrent: toggleElapsedText,\n\tduration: toggleDurationText,\n\tremaining: toggleDurationText\n};\nvar TimeCore = class TimeCore {\n\tstatic defaultProps = {\n\t\ttype: \"current\",\n\t\tnegativeSign: \"-\",\n\t\tlabel: \"\",\n\t\ttoggle: false\n\t};\n\t#props = { ...TimeCore.defaultProps };\n\t#media = null;\n\t#formatLocale;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, TimeCore.defaultProps);\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\t/** @internal Platform adapters set the active i18n locale for digital time formatting. */\n\tsetFormatLocale(locale) {\n\t\tthis.#formatLocale = locale;\n\t}\n\t#getSeconds() {\n\t\tconst media = this.#media;\n\t\tconst { type } = this.#props;\n\t\tswitch (type) {\n\t\t\tcase \"current\": return media.currentTime;\n\t\t\tcase \"duration\": return media.duration;\n\t\t\tcase \"remaining\": return media.currentTime - media.duration;\n\t\t\tdefault: return 0;\n\t\t}\n\t}\n\t#getText() {\n\t\tconst media = this.#media;\n\t\tconst seconds = this.#getSeconds();\n\t\tconst options = this.#formatLocale === void 0 ? void 0 : { locale: this.#formatLocale };\n\t\treturn formatTime(Math.abs(seconds), media.duration, options);\n\t}\n\t#getPhrase() {\n\t\tconst { type } = this.#props;\n\t\tconst seconds = this.#getSeconds();\n\t\tif (type === \"remaining\") return formatTimeAsPhrase(seconds < 0 ? seconds : -Math.abs(seconds));\n\t\treturn formatTimeAsPhrase(seconds);\n\t}\n\t#getDatetime() {\n\t\tconst seconds = this.#getSeconds();\n\t\treturn secondsToIsoDuration(Math.abs(seconds));\n\t}\n\t#getToggleType(type, currentType) {\n\t\tif (type === \"current\") return currentType === \"remaining\" ? \"current\" : \"remaining\";\n\t\treturn currentType === \"duration\" ? \"remaining\" : \"duration\";\n\t}\n\tgetLabel(state, type = this.#props.type) {\n\t\tconst custom = resolveLabel(this.#props.label, state);\n\t\tif (custom !== void 0) return custom;\n\t\tif (!this.#props.toggle) return DEFAULT_LABELS[this.#props.type];\n\t\tconst toggleType = this.#getToggleType(type, state.type);\n\t\treturn TOGGLE_LABELS[toggleType];\n\t}\n\tgetLabelParams(state) {\n\t\tif (resolveLabel(this.#props.label, state) !== void 0 || !this.#props.toggle) return void 0;\n\t\tconst options = this.#formatLocale === void 0 ? void 0 : { locale: this.#formatLocale };\n\t\tconst duration = formatTimeAsPhrase(Math.abs(state.seconds), options);\n\t\tswitch (state.type) {\n\t\t\tcase \"current\": return { duration: `${duration} elapsed` };\n\t\t\tcase \"duration\": return { duration: `${duration} duration` };\n\t\t\tcase \"remaining\": return { duration: `${duration} remaining` };\n\t\t}\n\t}\n\tgetDescription(type = this.#props.type) {\n\t\treturn this.#props.toggle ? TOGGLE_DESCRIPTIONS[type] : void 0;\n\t}\n\tgetAttrs(state, type = this.#props.type) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state, type),\n\t\t\t\"aria-description\": this.getDescription(type),\n\t\t\trole: this.#props.toggle ? \"button\" : void 0,\n\t\t\ttabIndex: this.#props.toggle ? 0 : void 0\n\t\t};\n\t}\n\tgetState() {\n\t\tconst seconds = this.#getSeconds();\n\t\treturn {\n\t\t\ttype: this.#props.type,\n\t\t\tseconds,\n\t\t\tnegative: this.#props.type === \"remaining\" && seconds < 0,\n\t\t\ttext: this.#getText(),\n\t\t\tphrase: this.#getPhrase(),\n\t\t\tdatetime: this.#getDatetime()\n\t\t};\n\t}\n};\n//#endregion\nexport { TimeCore };\n\n//# sourceMappingURL=time-core.js.map","//#region src/core/ui/time/time-data-attrs.ts\nconst TimeDataAttrs = { \n/** The type of time being displayed. */\ntype: \"data-type\" };\n//#endregion\nexport { TimeDataAttrs };\n\n//# sourceMappingURL=time-data-attrs.js.map","const seekText = {\n\tkey: `slider.seek`,\n\ttext: \"Seek\"\n};\n//#endregion\nexport { seekText };\n\n//# sourceMappingURL=slider.js.map","import { SliderCore } from \"../slider/slider-core.js\";\nimport { positionText } from \"../../../i18n/text/time.js\";\nimport { seekText } from \"../../../i18n/text/slider.js\";\nimport { defaults } from \"@videojs/utils/object\";\nimport { toPercent } from \"@videojs/utils/number\";\nimport { formatTimeAsPhrase } from \"@videojs/utils/time\";\n//#region src/core/ui/time-slider/time-slider-core.ts\n/** Time-domain slider: maps media time/buffer state to slider state. */\nvar TimeSliderCore = class TimeSliderCore extends SliderCore {\n\tstatic defaultProps = {\n\t\t...SliderCore.defaultProps,\n\t\tlabel: \"\",\n\t\tchangeThrottle: 100,\n\t\tpauseOnDrag: false\n\t};\n\t#props = { ...TimeSliderCore.defaultProps };\n\t#media = null;\n\t#formatLocale;\n\t#wasPlayingBeforeDrag = false;\n\tconstructor(props) {\n\t\tsuper();\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, TimeSliderCore.defaultProps);\n\t\tsuper.setProps({\n\t\t\t...props,\n\t\t\tmin: 0\n\t\t});\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\t/** @internal Platform adapters set the active i18n locale for `aria-valuetext` time formatting. */\n\tsetFormatLocale(locale) {\n\t\tthis.#formatLocale = locale;\n\t}\n\tgetState() {\n\t\tconst { duration, currentTime, seeking, buffered } = this.#media;\n\t\tsuper.setProps({\n\t\t\t...this.#props,\n\t\t\tmin: 0,\n\t\t\tmax: duration\n\t\t});\n\t\tconst base = super.getSliderState(currentTime);\n\t\tconst bufferPercent = toPercent(buffered.length > 0 ? buffered[buffered.length - 1][1] : 0, 0, duration);\n\t\treturn {\n\t\t\t...base,\n\t\t\tcurrentTime,\n\t\t\tduration,\n\t\t\tseeking,\n\t\t\tbufferPercent\n\t\t};\n\t}\n\tgetLabel(state) {\n\t\treturn super.getLabel(state) || seekText;\n\t}\n\t#announceValue(state) {\n\t\treturn state.dragging ? this.rawValueFromPercent(state.pointerPercent) : state.value;\n\t}\n\t#formatTimeAsPhrase(seconds) {\n\t\treturn this.#formatLocale === void 0 ? formatTimeAsPhrase(seconds) : formatTimeAsPhrase(seconds, { locale: this.#formatLocale });\n\t}\n\tgetValueText(state) {\n\t\treturn Number.isFinite(state.duration) ? positionText : this.getValueTextParams(state).current;\n\t}\n\tgetValueTextParams(state) {\n\t\tconst current = this.#formatTimeAsPhrase(this.#announceValue(state));\n\t\tif (!Number.isFinite(state.duration)) return { current };\n\t\treturn {\n\t\t\tcurrent,\n\t\t\tduration: this.#formatTimeAsPhrase(state.duration)\n\t\t};\n\t}\n\t/**\n\t* Pause playback when a drag begins if `pauseOnDrag` is enabled, remembering\n\t* whether media was playing so `endDrag` can resume it.\n\t*/\n\tstartDrag(playback) {\n\t\tthis.#wasPlayingBeforeDrag = false;\n\t\tif (this.#props.pauseOnDrag && playback && !playback.paused) {\n\t\t\tthis.#wasPlayingBeforeDrag = true;\n\t\t\tplayback.pause();\n\t\t}\n\t}\n\t/**\n\t* Resume playback if `startDrag` paused it. Resume depends only on the intent\n\t* captured at drag start, so it survives `pauseOnDrag` being toggled mid-drag.\n\t* Safe to call on teardown — a no-op unless a drag paused playback.\n\t*/\n\tendDrag(playback) {\n\t\tif (this.#wasPlayingBeforeDrag) playback?.play().catch(() => {});\n\t\tthis.#wasPlayingBeforeDrag = false;\n\t}\n\tgetAttrs(state) {\n\t\tconst base = super.getAttrs(state);\n\t\tconst announceValue = this.#announceValue(state);\n\t\treturn {\n\t\t\t...base,\n\t\t\t\"aria-valuenow\": announceValue,\n\t\t\t\"aria-valuetext\": this.getValueText(state)\n\t\t};\n\t}\n};\n//#endregion\nexport { TimeSliderCore };\n\n//# sourceMappingURL=time-slider-core.js.map","import { SliderDataAttrs } from \"../slider/slider-data-attrs.js\";\n//#region src/core/ui/time-slider/time-slider-data-attrs.ts\nconst TimeSliderDataAttrs = {\n\t...SliderDataAttrs,\n\t/** Present when a seek operation is in progress. */\n\tseeking: \"data-seeking\"\n};\n//#endregion\nexport { TimeSliderDataAttrs };\n\n//# sourceMappingURL=time-slider-data-attrs.js.map","import { getTransitionFlags } from \"../transition.js\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/tooltip/tooltip-core.ts\nvar TooltipCore = class TooltipCore {\n\tstatic defaultProps = {\n\t\tside: \"top\",\n\t\talign: \"center\",\n\t\topen: false,\n\t\tdefaultOpen: false,\n\t\tdelay: 600,\n\t\tcloseDelay: 0,\n\t\tdisableHoverablePopup: true,\n\t\tdisabled: false\n\t};\n\t#props = { ...TooltipCore.defaultProps };\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, TooltipCore.defaultProps);\n\t}\n\t#input = null;\n\tsetInput(input) {\n\t\tthis.#input = input;\n\t}\n\tgetState() {\n\t\tconst input = this.#input;\n\t\treturn {\n\t\t\topen: input.active,\n\t\t\tstatus: input.status,\n\t\t\tside: this.#props.side,\n\t\t\talign: this.#props.align,\n\t\t\t...getTransitionFlags(input.status)\n\t\t};\n\t}\n\tgetPopupAttrs(_state) {\n\t\treturn {\n\t\t\tpopover: \"manual\",\n\t\t\trole: \"presentation\"\n\t\t};\n\t}\n};\n//#endregion\nexport { TooltipCore };\n\n//# sourceMappingURL=tooltip-core.js.map","//#region src/core/ui/tooltip/tooltip-css-vars.ts\nconst TooltipCSSVars = {\n\t/** Distance between the popup and the trigger along the side axis. */\n\tsideOffset: \"--media-tooltip-side-offset\",\n\t/** Distance between the popup and the trigger along the alignment axis. */\n\talignOffset: \"--media-tooltip-align-offset\",\n\t/** Minimum distance between the popup and the positioning boundary. */\n\tboundaryOffset: \"--media-tooltip-boundary-offset\",\n\t/** The anchor element's width. */\n\tanchorWidth: \"--media-tooltip-anchor-width\",\n\t/** The anchor element's height. */\n\tanchorHeight: \"--media-tooltip-anchor-height\",\n\t/** Available width between the trigger and the boundary edge. */\n\tavailableWidth: \"--media-tooltip-available-width\",\n\t/** Available height between the trigger and the boundary edge. */\n\tavailableHeight: \"--media-tooltip-available-height\"\n};\n//#endregion\nexport { TooltipCSSVars };\n\n//# sourceMappingURL=tooltip-css-vars.js.map","import { TransitionDataAttrs } from \"../transition.js\";\n//#region src/core/ui/tooltip/tooltip-data-attrs.ts\nconst TooltipDataAttrs = {\n\t/** Present when the tooltip is open. */\n\topen: \"data-open\",\n\t/** Indicates the rendered side of the tooltip after collision handling. */\n\tside: \"data-side\",\n\t/** Indicates how the tooltip is aligned relative to the specified side. */\n\talign: \"data-align\",\n\t...TransitionDataAttrs\n};\n//#endregion\nexport { TooltipDataAttrs };\n\n//# sourceMappingURL=tooltip-data-attrs.js.map","import { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/tooltip/tooltip-group-core.ts\nvar TooltipGroupCore = class TooltipGroupCore {\n\tstatic defaultProps = {\n\t\tdelay: 600,\n\t\tcloseDelay: 0,\n\t\ttimeout: 400\n\t};\n\t#props = { ...TooltipGroupCore.defaultProps };\n\t#lastCloseTime = 0;\n\t#isOpen = false;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, TooltipGroupCore.defaultProps);\n\t}\n\tget delay() {\n\t\treturn this.#props.delay;\n\t}\n\tget closeDelay() {\n\t\treturn this.#props.closeDelay;\n\t}\n\tshouldSkipDelay() {\n\t\tif (this.#isOpen) return true;\n\t\treturn Date.now() - this.#lastCloseTime < this.#props.timeout;\n\t}\n\tnotifyOpen() {\n\t\tthis.#isOpen = true;\n\t}\n\tnotifyClose() {\n\t\tthis.#isOpen = false;\n\t\tthis.#lastCloseTime = Date.now();\n\t}\n};\n//#endregion\nexport { TooltipGroupCore };\n\n//# sourceMappingURL=tooltip-group-core.js.map","import { DEFAULT_INPUT_INDICATOR_LABELS } from \"../indicator/indicator-labels.js\";\nimport { IndicatorCloseController, getIndicatorCloseDelay } from \"../indicator/indicator-lifecycle.js\";\nimport { deriveVolumeStatus, isVolumeIndicatorAction, predictVolumeActionOutcome } from \"./volume-indicator-status.js\";\nimport { createState } from \"@videojs/store\";\n//#region src/core/ui/volume-indicator/volume-indicator-core.ts\nconst BOUNDARY_CLEAR_DELAY = 300;\nconst INITIAL_STATE = {\n\topen: false,\n\tgeneration: 0,\n\tlevel: null,\n\tvalue: null,\n\tfill: null,\n\tmin: false,\n\tmax: false,\n\ttransitionStarting: false,\n\ttransitionEnding: false\n};\nvar VolumeIndicatorCore = class {\n\tstate = createState({ ...INITIAL_STATE });\n\t#props = {};\n\t#boundaryTimer = null;\n\t#boundaryRestartTimer = null;\n\t#close = new IndicatorCloseController(() => this.state.patch({\n\t\topen: false,\n\t\tlevel: null,\n\t\tvalue: null,\n\t\tfill: null,\n\t\tmin: false,\n\t\tmax: false\n\t}), () => getIndicatorCloseDelay(this.#props));\n\tsetProps(props) {\n\t\tthis.#props = props;\n\t}\n\tdestroy() {\n\t\tthis.#close.destroy();\n\t\tthis.#clearBoundaryTimers();\n\t}\n\tclose() {\n\t\tthis.#clearBoundaryTimers();\n\t\tthis.#close.close();\n\t}\n\tprocessEvent(event, snapshot) {\n\t\tif (!isVolumeIndicatorAction(event.action)) return false;\n\t\tconst current = this.state.current;\n\t\tconst prediction = predictVolumeActionOutcome(event, snapshot);\n\t\tconst details = deriveVolumeStatus(event, snapshot, {\n\t\t\t...DEFAULT_INPUT_INDICATOR_LABELS,\n\t\t\t...this.#props.labels\n\t\t}, prediction);\n\t\tconst boundary = getVolumeBoundary(event, prediction.snapshotVolume, prediction.nextVolume);\n\t\tconst repeatedBoundary = boundary !== null && current[boundary] === true;\n\t\tif (!boundary) this.#clearBoundaryTimers();\n\t\tthis.state.patch({\n\t\t\topen: true,\n\t\t\tgeneration: current.generation + 1,\n\t\t\tlevel: details.volumeLevel,\n\t\t\tvalue: details.value,\n\t\t\tfill: details.value,\n\t\t\tmin: boundary === \"min\" && !repeatedBoundary,\n\t\t\tmax: boundary === \"max\" && !repeatedBoundary\n\t\t});\n\t\tif (boundary) if (repeatedBoundary) this.#restartBoundary(boundary);\n\t\telse this.#scheduleBoundaryClear();\n\t\tthis.#close.arm();\n\t\treturn true;\n\t}\n\t#scheduleBoundaryClear() {\n\t\tthis.#clearBoundaryTimer();\n\t\tthis.#boundaryTimer = setTimeout(() => {\n\t\t\tthis.#boundaryTimer = null;\n\t\t\tthis.state.patch({\n\t\t\t\tmin: false,\n\t\t\t\tmax: false\n\t\t\t});\n\t\t}, BOUNDARY_CLEAR_DELAY);\n\t}\n\t#restartBoundary(boundary) {\n\t\tthis.#clearBoundaryTimers();\n\t\tthis.state.patch({\n\t\t\tmin: false,\n\t\t\tmax: false\n\t\t});\n\t\tthis.#boundaryRestartTimer = setTimeout(() => {\n\t\t\tthis.#boundaryRestartTimer = null;\n\t\t\tthis.state.patch({ [boundary]: true });\n\t\t\tthis.#scheduleBoundaryClear();\n\t\t}, 0);\n\t}\n\t#clearBoundaryTimer() {\n\t\tif (this.#boundaryTimer === null) return;\n\t\tclearTimeout(this.#boundaryTimer);\n\t\tthis.#boundaryTimer = null;\n\t}\n\t#clearBoundaryRestartTimer() {\n\t\tif (this.#boundaryRestartTimer === null) return;\n\t\tclearTimeout(this.#boundaryRestartTimer);\n\t\tthis.#boundaryRestartTimer = null;\n\t}\n\t#clearBoundaryTimers() {\n\t\tthis.#clearBoundaryTimer();\n\t\tthis.#clearBoundaryRestartTimer();\n\t}\n};\nfunction getVolumeBoundary(event, currentVolume, nextVolume) {\n\tif (event.action !== \"volumeStep\" || event.value === void 0 || event.value === 0) return null;\n\tif (nextVolume !== currentVolume) return null;\n\treturn event.value < 0 ? \"min\" : \"max\";\n}\n//#endregion\nexport { VolumeIndicatorCore };\n\n//# sourceMappingURL=volume-indicator-core.js.map","//#region src/core/ui/volume-indicator/volume-indicator-css-vars.ts\nconst VolumeIndicatorCSSVars = { fill: \"--media-volume-fill\" };\n//#endregion\nexport { VolumeIndicatorCSSVars };\n\n//# sourceMappingURL=volume-indicator-css-vars.js.map","//#region src/core/ui/volume-indicator/volume-indicator-data-attrs.ts\nconst VolumeIndicatorDataAttrs = {\n\topen: \"data-open\",\n\tlevel: \"data-level\",\n\tmin: \"data-min\",\n\tmax: \"data-max\",\n\ttransitionStarting: \"data-starting-style\",\n\ttransitionEnding: \"data-ending-style\"\n};\n//#endregion\nexport { VolumeIndicatorDataAttrs };\n\n//# sourceMappingURL=volume-indicator-data-attrs.js.map","import { isNumber } from \"../predicate/predicate.js\";\n//#region src/percent/percent.ts\nconst formatters = /* @__PURE__ */ new Map();\nfunction localeCacheKey(locale) {\n\tif (locale === void 0) return \"\";\n\treturn Array.isArray(locale) ? locale.join(\":\") : locale;\n}\nfunction getFormatter(locale) {\n\tconst key = localeCacheKey(locale);\n\tlet formatter = formatters.get(key);\n\tif (!formatter) try {\n\t\tformatter = new Intl.NumberFormat(locale, {\n\t\t\tstyle: \"percent\",\n\t\t\tmaximumFractionDigits: 0\n\t\t});\n\t\tformatters.set(key, formatter);\n\t} catch {\n\t\treturn;\n\t}\n\treturn formatter;\n}\nfunction formatFallback(fraction) {\n\treturn `${Math.round(Math.min(1, Math.max(0, fraction)) * 100)}%`;\n}\n/** Format a fraction (0-1) with {@link Intl.NumberFormat} `style: \"percent\"`. */\nfunction formatPercent(fraction, locale) {\n\tconst value = !isNumber(fraction) || !Number.isFinite(fraction) ? 0 : Math.min(1, Math.max(0, fraction));\n\ttry {\n\t\tconst formatter = getFormatter(locale) ?? getFormatter(void 0);\n\t\tif (formatter) return formatter.format(value);\n\t} catch {}\n\treturn formatFallback(value);\n}\n//#endregion\nexport { formatPercent };\n\n//# sourceMappingURL=percent.js.map","import { labelText, mutedValueText } from \"../../../i18n/text/volume.js\";\nimport { SliderCore } from \"../slider/slider-core.js\";\nimport { defaults } from \"@videojs/utils/object\";\nimport { formatPercent } from \"@videojs/utils/percent\";\n//#region src/core/ui/volume-slider/volume-slider-core.ts\n/** Volume-domain slider: maps media volume/mute state to slider state. */\nvar VolumeSliderCore = class VolumeSliderCore extends SliderCore {\n\tstatic defaultProps = {\n\t\t...SliderCore.defaultProps,\n\t\tlabel: \"\",\n\t\twheelStep: 5\n\t};\n\t#media = null;\n\t#formatLocale;\n\tconstructor(props) {\n\t\tsuper();\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tsuper.setProps(defaults(props, VolumeSliderCore.defaultProps));\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\t/** @internal Platform adapters set the active i18n locale for `aria-valuetext` percent formatting. */\n\tsetFormatLocale(locale) {\n\t\tthis.#formatLocale = locale;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tconst { volume, muted } = media;\n\t\tconst effectivelyMuted = muted || volume === 0;\n\t\tconst { dragging, dragPercent } = this.input;\n\t\tconst volumePercent = volume * 100;\n\t\tconst value = dragging ? this.valueFromPercent(dragPercent) : volumePercent;\n\t\tconst base = super.getSliderState(value);\n\t\tconst availability = media.volumeAvailability;\n\t\treturn {\n\t\t\t...base,\n\t\t\tdisabled: base.disabled || availability !== \"available\",\n\t\t\tfillPercent: effectivelyMuted ? 0 : base.fillPercent,\n\t\t\tvolume,\n\t\t\tmuted: effectivelyMuted,\n\t\t\tavailability,\n\t\t\thidden: availability !== \"available\"\n\t\t};\n\t}\n\t/** Wheel step as a percentage of the slider range. */\n\tgetWheelStepPercent() {\n\t\tconst props = this.props;\n\t\tconst range = props.max - props.min;\n\t\treturn range > 0 ? props.wheelStep / range * 100 : 0;\n\t}\n\tgetLabel(state) {\n\t\treturn super.getLabel(state) || labelText;\n\t}\n\tgetValueText(state) {\n\t\treturn state.muted ? mutedValueText : this.getValueTextParams(state).percent;\n\t}\n\tgetValueTextParams(state) {\n\t\treturn { percent: formatPercent(state.value / 100, this.#formatLocale) };\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t...super.getAttrs(state),\n\t\t\t\"aria-valuetext\": this.getValueText(state)\n\t\t};\n\t}\n};\n//#endregion\nexport { VolumeSliderCore };\n\n//# sourceMappingURL=volume-slider-core.js.map","import { SliderDataAttrs } from \"../slider/slider-data-attrs.js\";\n//#region src/core/ui/volume-slider/volume-slider-data-attrs.ts\nconst VolumeSliderDataAttrs = {\n\t...SliderDataAttrs,\n\tavailability: \"data-availability\",\n\thidden: \"data-hidden\"\n};\n//#endregion\nexport { VolumeSliderDataAttrs };\n\n//# sourceMappingURL=volume-slider-data-attrs.js.map","import { getHotkeyCoordinator, type HotkeyShortcutDetails } from '@videojs/core/dom';\nimport type { ReactiveController } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport type { ContainerContextConsumer } from '../../player/context';\nimport { containerContext } from '../../player/context';\nimport type { PlayerControllerHost } from '../../player/player-controller';\n\nexport interface AriaKeyShortcutsControllerOptions {\n value?: (() => number | undefined) | undefined;\n}\n\n/** Provides hotkey shortcut metadata for a given hotkey action name. */\nexport class AriaKeyShortcutsController implements ReactiveController {\n #host: PlayerControllerHost;\n #action: string;\n #getValue: (() => number | undefined) | undefined;\n #container: ContainerContextConsumer;\n #unsubscribe: (() => void) | null = null;\n\n constructor(host: PlayerControllerHost, action: string, options: AriaKeyShortcutsControllerOptions = {}) {\n this.#host = host;\n this.#action = action;\n this.#getValue = options.value;\n this.#container = new ContextConsumer(host, {\n context: containerContext,\n callback: (ctx) => this.#connect(ctx?.container),\n subscribe: true,\n });\n host.addController(this);\n }\n\n get value(): string | undefined {\n return this.aria;\n }\n\n get aria(): string | undefined {\n return this.details.aria;\n }\n\n get shortcut(): string | undefined {\n return this.details.shortcut;\n }\n\n get details(): HotkeyShortcutDetails {\n const container = this.#container.value?.container;\n if (!container) return {};\n return getHotkeyCoordinator(container).getShortcut(this.#action, this.#getValue?.());\n }\n\n hostConnected(): void {\n this.#connect(this.#container.value?.container);\n }\n\n hostDisconnected(): void {\n this.#disconnect();\n }\n\n #connect(container: HTMLElement | null | undefined): void {\n this.#disconnect();\n\n if (!container) return;\n\n const coordinator = getHotkeyCoordinator(container);\n const notify = () => {\n this.#host.requestUpdate();\n };\n\n this.#unsubscribe = coordinator.subscribeShortcutChanges(notify);\n notify();\n }\n\n #disconnect(): void {\n this.#unsubscribe?.();\n this.#unsubscribe = null;\n }\n}\n","import type {\n ButtonState,\n InferComponentState,\n InferMediaState,\n MediaButtonComponent,\n StateAttrMap,\n} from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createButton,\n HOTKEY_SHORTCUT_CHANGE_EVENT,\n logMissingFeature,\n type UIEvent,\n} from '@videojs/core/dom';\nimport { isText, resolveText, type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\nimport { isBoolean, isObject } from '@videojs/utils/predicate';\n\nimport { i18nContext } from '../i18n/context';\nimport { I18nController } from '../i18n/controller';\nimport type { PlayerController } from '../player/player-controller';\nimport { AriaKeyShortcutsController } from './hotkey/aria-key-shortcuts-controller';\nimport { MediaElement } from './media-element';\n\ntype LabelParams = Record<string, string | number>;\ntype LabelParamsCore<Core extends MediaButtonComponent> = Core & {\n getLabelParams?: (state: InferComponentState<Core>) => LabelParams | undefined;\n};\n\nfunction getLabelParams<Core extends MediaButtonComponent>(\n core: Core,\n state: InferComponentState<Core>\n): LabelParams | undefined {\n return (core as LabelParamsCore<Core>).getLabelParams?.(state);\n}\n\n/** Abstract base for HTML custom elements that render a media-control button. */\nexport abstract class MediaButtonElement<Core extends MediaButtonComponent> extends MediaElement {\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label: Text | string = '';\n\n protected abstract readonly core: Core;\n protected abstract readonly stateAttrMap: StateAttrMap<InferComponentState<Core>>;\n protected abstract readonly mediaState: PlayerController<any, InferMediaState<Core> | undefined>;\n\n protected abstract activate(state: InferMediaState<Core>, event?: UIEvent): void | Promise<void>;\n\n protected getIsButtonDisabled(): boolean {\n return this.disabled || !this.mediaState.value;\n }\n\n protected handleActivate(event: UIEvent): void {\n // `createButton` invokes `onActivate` synchronously from click/keyup\n // handlers, so any rejection here would be unhandled. Log in dev for\n // visibility but absorb the failure at this UI boundary.\n Promise.resolve(this.activate(this.mediaState.value!, event)).catch((error) => {\n if (__DEV__) console.error(`[${this.localName}]`, error);\n });\n }\n\n /** Override to set the hotkey action name for `aria-keyshortcuts`. */\n protected readonly hotkeyAction: string | undefined = undefined;\n\n /** Override to match hotkeys that use action values, such as seek steps. */\n protected get hotkeyValue(): number | undefined {\n return undefined;\n }\n\n get $state(): State<ButtonState> {\n return this.core.state;\n }\n\n #disconnect: AbortController | null = null;\n #hotkeyRegistry: AriaKeyShortcutsController | null = null;\n #lastHotkeyShortcut: string | undefined;\n readonly #i18n = new I18nController(this, i18nContext);\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n if (this.hotkeyAction && !this.#hotkeyRegistry) {\n this.#hotkeyRegistry = new AriaKeyShortcutsController(this, this.hotkeyAction, {\n value: () => this.hotkeyValue,\n });\n }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: (event) => this.handleActivate(event),\n isDisabled: () => this.getIsButtonDisabled(),\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.mediaState.value && this.mediaState.displayName) {\n logMissingFeature(this.localName, this.mediaState.displayName);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n /** Returns the button's current label derived from media state. */\n getLabel(): string | undefined {\n return this.core.state.current.label ? resolveText(this.core.state.current.label) : undefined;\n }\n\n getShortcut(): string | undefined {\n return this.#hotkeyRegistry?.shortcut;\n }\n\n /** Resolved label for tooltips and other display surfaces. */\n getResolvedLabel(): string | undefined {\n const media = this.mediaState.value;\n if (!media) return undefined;\n this.core.setMedia(media);\n const state = this.core.getState() as InferComponentState<Core>;\n return translateText(this.core.getLabel(state), this.#i18n.value, getLabelParams(this.core, state));\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.core.setProps?.(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.mediaState.value;\n\n this.#syncHotkeyShortcut();\n\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState() as InferComponentState<Core>;\n const attrs = (this.core.getAttrs?.(state) ?? {}) as Record<string, unknown>;\n if (isText(attrs['aria-label'])) {\n attrs['aria-label'] = translateText(attrs['aria-label'], this.#i18n.value, getLabelParams(this.core, state));\n }\n applyElementProps(this, {\n ...attrs,\n 'aria-keyshortcuts': this.#hotkeyRegistry?.aria,\n // A button whose core reports itself hidden takes the real attribute, not\n // just the data one: `data-hidden` is a styling hook a skin may or may not\n // act on, where `hidden` removes the control the way the React components\n // do by rendering nothing.\n ...(isHideable(state) && { hidden: state.hidden ? '' : undefined }),\n });\n applyStateDataAttrs(this, state, this.stateAttrMap);\n }\n\n #syncHotkeyShortcut(): void {\n const shortcut = this.getShortcut();\n\n if (shortcut === this.#lastHotkeyShortcut) return;\n\n this.#lastHotkeyShortcut = shortcut;\n this.dispatchEvent(new CustomEvent(HOTKEY_SHORTCUT_CHANGE_EVENT));\n }\n}\n\n/** Whether a button's core reports whether it should be shown at all. */\nfunction isHideable(state: unknown): state is { hidden: boolean } {\n return isObject(state) && isBoolean((state as { hidden?: unknown }).hidden);\n}\n","import { createContext } from '@videojs/element/context';\n\nexport interface RadioGroupContextValue {\n value: string;\n onValueChange: (value: string) => void;\n}\n\nconst RADIO_GROUP_CONTEXT_KEY = Symbol('@videojs/radio-group');\n\nexport const radioGroupContext = createContext<RadioGroupContextValue>(RADIO_GROUP_CONTEXT_KEY);\n","import type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { radioGroupContext } from './context';\n\nexport class RadioGroupElement extends MediaElement {\n static override properties = {\n value: { type: String },\n } satisfies PropertyDeclarationMap<'value'>;\n\n value = '';\n\n readonly #provider = new ContextProvider(this, { context: radioGroupContext });\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n this.#provider.setValue({\n value: this.value,\n onValueChange: (next: string) => {\n this.value = next;\n this.dispatchEvent(new CustomEvent('value-change', { detail: { value: next }, bubbles: true }));\n },\n });\n }\n}\n","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","import { applyElementProps } from '@videojs/core/dom';\nimport { ContextProvider } from '@videojs/element/context';\n\nimport type { MediaElement } from '../media-element';\nimport { menuGroupContext } from './context';\n\ninterface MenuGroupHost extends MediaElement {\n requestUpdate(): void;\n}\n\nexport class MenuGroupController {\n readonly #host: MenuGroupHost;\n readonly #provider: ContextProvider<typeof menuGroupContext, MenuGroupHost>;\n readonly #contextValue = {\n registerLabel: (id: string) => this.#registerLabel(id),\n };\n\n #labelId: string | undefined;\n #appliedLabelId: string | undefined;\n\n constructor(host: MenuGroupHost) {\n this.#host = host;\n this.#provider = new ContextProvider(host, {\n context: menuGroupContext,\n initialValue: this.#contextValue,\n });\n }\n\n applyProps(): void {\n const currentLabelledBy = this.#host.getAttribute('aria-labelledby') ?? undefined;\n const hasExplicitLabelledBy = currentLabelledBy !== undefined && currentLabelledBy !== this.#appliedLabelId;\n const hasExplicitLabel = this.#host.hasAttribute('aria-label') || hasExplicitLabelledBy;\n\n if (hasExplicitLabel) {\n if (this.#appliedLabelId && currentLabelledBy === this.#appliedLabelId) {\n this.#host.removeAttribute('aria-labelledby');\n }\n\n this.#appliedLabelId = undefined;\n applyElementProps(this.#host, { role: 'group' });\n return;\n }\n\n this.#appliedLabelId = this.#labelId;\n applyElementProps(this.#host, {\n role: 'group',\n 'aria-labelledby': this.#labelId,\n });\n }\n\n #registerLabel(id: string): () => void {\n this.#labelId = id;\n this.#provider.setValue(this.#contextValue);\n this.#host.requestUpdate();\n\n return () => {\n if (this.#labelId !== id) return;\n this.#labelId = undefined;\n this.#host.requestUpdate();\n };\n }\n}\n","import { applyElementProps, completeMenuItemSelection } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { menuContext, menuRadioGroupContext } from './context';\n\nexport class MenuRadioItemElement extends MediaElement {\n static readonly tagName = 'media-menu-radio-item';\n\n static override properties = {\n value: { type: String },\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<'value' | 'disabled'>;\n\n value = '';\n disabled = false;\n\n readonly #menuCtx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n readonly #groupCtx = new ContextConsumer(this, { context: menuRadioGroupContext, subscribe: true });\n\n #disconnect: AbortController | null = null;\n #registered = false;\n #cleanupRegistration: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#disconnect = new AbortController();\n this.#registered = false;\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupRegistration?.();\n this.#cleanupRegistration = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n this.#registered = false;\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const menuCtx = this.#menuCtx.value;\n const groupCtx = this.#groupCtx.value;\n if (!menuCtx || !groupCtx || !this.#disconnect) return;\n\n if (!this.#registered) {\n this.#registered = true;\n\n this.#cleanupRegistration = menuCtx.menu.registerItem(this);\n\n applyElementProps(\n this,\n {\n onClick: () => {\n const currentMenuCtx = this.#menuCtx.value;\n const currentGroupCtx = this.#groupCtx.value;\n if (!currentMenuCtx || !currentGroupCtx || this.disabled) return;\n\n currentGroupCtx.onValueChange(this.value);\n completeMenuItemSelection(currentMenuCtx.menu);\n },\n onPointerenter: () => {\n const currentMenuCtx = this.#menuCtx.value;\n if (!this.disabled) currentMenuCtx?.menu.highlight(this, { focus: false, pointer: true });\n },\n },\n { signal: this.#disconnect.signal }\n );\n }\n\n const checked = groupCtx.value === this.value;\n\n applyElementProps(this, {\n role: 'menuitemradio',\n 'aria-checked': String(checked),\n 'aria-disabled': this.disabled ? 'true' : undefined,\n });\n }\n}\n","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","import type { Text, TextParams } from '@videojs/core/i18n';\n\n/** Serialize text content and parameters so dynamic labels invalidate their caches. */\nexport function cacheKey(text: Text | string, params?: TextParams): string {\n return JSON.stringify([text, params]);\n}\n","import { applyElementProps } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { MediaElement } from '../media-element';\n\nexport class MenuItemIndicatorElement extends MediaElement {\n static readonly tagName = 'media-menu-item-indicator';\n\n static override properties = {\n checked: { type: Boolean },\n forceMount: { type: Boolean, attribute: 'force-mount' },\n } satisfies PropertyDeclarationMap<'checked' | 'forceMount'>;\n\n checked = false;\n forceMount = false;\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const hidden = !this.checked && !this.forceMount;\n\n applyElementProps(this, {\n 'aria-hidden': 'true',\n hidden: hidden,\n });\n }\n}\n","import type { RadioOption, RadioOptionsState } from '@videojs/core';\nimport { applyElementProps } from '@videojs/core/dom';\nimport { type Translator, translateText } from '@videojs/core/i18n';\nimport type { ReactiveController, ReactiveControllerHost } from '@videojs/element';\nimport { cloneTemplateRoot, getTemplateElement, getTemplateRoot } from '@videojs/utils/dom';\n\nimport { cacheKey } from '../../i18n/cache-key';\nimport { MenuItemIndicatorElement } from '../menu/menu-item-indicator-element';\nimport { MenuRadioItemElement } from '../menu/menu-radio-item-element';\n\nexport type RadioOptionsControllerHost = ReactiveControllerHost &\n HTMLElement & {\n value: string;\n };\n\nexport interface RadioOptionsControllerConfig<Option extends RadioOption> {\n renderItem?: ((item: MenuRadioItemElement, label: string, option: Option) => void) | undefined;\n setItemAttributes?: ((item: MenuRadioItemElement, option: Option) => void) | undefined;\n getOptionCacheKey?: ((option: Option) => string) | undefined;\n onValueChange: (value: string) => void;\n}\n\n/** Renders normalized options into menu radio items and manages their interaction lifecycle. */\nexport class RadioOptionsController<Option extends RadioOption> implements ReactiveController {\n readonly #host: RadioOptionsControllerHost;\n readonly #config: RadioOptionsControllerConfig<Option>;\n\n #contentKey = '';\n #translator: Translator | null = null;\n #disconnect: AbortController | null = null;\n\n constructor(host: RadioOptionsControllerHost, config: RadioOptionsControllerConfig<Option>) {\n this.#host = host;\n this.#config = config;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.#disconnect = new AbortController();\n this.#host.addEventListener('value-change', this.#handleValueChange, { signal: this.#disconnect.signal });\n }\n\n hostDisconnected(): void {\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n hostDestroyed(): void {\n this.hostDisconnected();\n }\n\n sync(state: RadioOptionsState<Option>, translator: Translator, locale: string): void {\n this.#host.value = state.value;\n applyElementProps(this.#host, {\n 'aria-disabled': state.disabled ? 'true' : undefined,\n hidden: state.hidden ? '' : undefined,\n });\n\n const template = getTemplateElement(this.#host);\n const templateRoot = template ? getTemplateRoot(template) : null;\n const itemRoot = templateRoot?.localName === MenuRadioItemElement.tagName ? templateRoot : null;\n const contentKey = `${state.options\n .map(\n (option) =>\n `${option.value}:${cacheKey(option.label, option.labelParams)}:${this.#config.getOptionCacheKey?.(option) ?? ''}`\n )\n .join('|')}::${locale}::${template?.innerHTML ?? ''}`;\n\n if (contentKey !== this.#contentKey || translator !== this.#translator) {\n this.#contentKey = contentKey;\n this.#translator = translator;\n\n for (const child of [...this.#host.children]) {\n if (child === template) continue;\n child.remove();\n }\n\n const items = state.options.map((option) => {\n const item = itemRoot\n ? (cloneTemplateRoot(itemRoot, this.#host.ownerDocument) as MenuRadioItemElement)\n : (this.#host.ownerDocument.createElement(MenuRadioItemElement.tagName) as MenuRadioItemElement);\n item.value = option.value;\n this.#config.setItemAttributes?.(item, option);\n const label = translateText(option.label, translator, option.labelParams);\n if (this.#config.renderItem) this.#config.renderItem(item, label, option);\n else this.#setItemLabel(item, label);\n return item;\n });\n\n this.#host.append(...items);\n }\n\n const optionsByValue = new Map(state.options.map((option) => [option.value, option]));\n\n for (const item of this.#host.querySelectorAll<MenuRadioItemElement>(MenuRadioItemElement.tagName)) {\n const checked = item.value === state.value;\n const option = optionsByValue.get(item.value);\n\n item.disabled = state.disabled || option?.disabled === true;\n\n for (const indicator of item.querySelectorAll<MenuItemIndicatorElement>(MenuItemIndicatorElement.tagName)) {\n indicator.checked = checked;\n }\n }\n }\n\n #handleValueChange = (event: Event): void => {\n if (event.target !== this.#host) return;\n\n const { value } = (event as CustomEvent<{ value: string }>).detail;\n this.#config.onValueChange(value);\n };\n\n #setItemLabel(item: MenuRadioItemElement, label: string): void {\n const labelPart = item.querySelector<HTMLElement>('[data-part~=\"label\"]');\n\n if (labelPart) labelPart.textContent = label;\n else item.textContent = label;\n }\n}\n","import { BufferingIndicatorCore, BufferingIndicatorDataAttrs } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectPlayback } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class BufferingIndicatorElement extends MediaElement {\n static readonly tagName = 'media-buffering-indicator';\n\n static override properties = {\n delay: { type: Number },\n } satisfies PropertyDeclarationMap<keyof BufferingIndicatorCore.Props>;\n\n delay = BufferingIndicatorCore.defaultProps.delay;\n\n readonly #core = new BufferingIndicatorCore();\n readonly #state = new PlayerController(this, playerContext, selectPlayback);\n\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#disconnect = new AbortController();\n\n this.#core.state.subscribe(() => this.requestUpdate(), {\n signal: this.#disconnect.signal,\n });\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(this.localName, this.#state.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.#state.value;\n\n if (!media) return;\n\n this.#core.update(media);\n applyStateDataAttrs(this, this.#core.state.current, BufferingIndicatorDataAttrs);\n }\n}\n","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","import { MuteButtonCore, MuteButtonDataAttrs } from '@videojs/core';\nimport { selectVolume } from '@videojs/core/dom';\nimport type { MediaVolumeState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class MuteButtonElement extends MediaButtonElement<MuteButtonCore> {\n static readonly tagName = 'media-mute-button';\n\n protected readonly core = new MuteButtonCore();\n protected readonly stateAttrMap = MuteButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectVolume);\n protected override readonly hotkeyAction = 'toggleMuted';\n\n protected activate(state: MediaVolumeState): void {\n this.core.toggle(state);\n }\n}\n","import { PlayButtonCore, PlayButtonDataAttrs } from '@videojs/core';\nimport { selectPlayback } from '@videojs/core/dom';\nimport type { MediaPlaybackState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class PlayButtonElement extends MediaButtonElement<PlayButtonCore> {\n static readonly tagName = 'media-play-button';\n\n protected readonly core = new PlayButtonCore();\n protected readonly stateAttrMap = PlayButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectPlayback);\n protected override readonly hotkeyAction = 'togglePaused';\n\n protected activate(state: MediaPlaybackState): void {\n this.core.toggle(state);\n }\n}\n","import { PopupPositioner, type PopupPositionerOptions } from '@videojs/core/dom';\nimport type { ReactiveController, ReactiveControllerHost } from '@videojs/element';\n\nexport type PositionControllerHost = ReactiveControllerHost & HTMLElement;\n\nexport type PositionControllerOptions = Omit<PopupPositionerOptions, 'popup'>;\n\nlet popupId = 0;\n\ninterface ImplicitTriggerBinding {\n id: string;\n trigger: HTMLElement;\n}\n\n/** Connects a popup element to the shared positioning lifecycle. */\nexport class PositionController implements ReactiveController {\n readonly #host: PositionControllerHost;\n readonly #positioner = new PopupPositioner();\n #implicitBinding: ImplicitTriggerBinding | null = null;\n\n constructor(host: PositionControllerHost) {\n this.#host = host;\n host.addController(this);\n }\n\n /** Discover an explicit trigger by ID or one linked via `commandfor`. */\n findTrigger(trigger?: string): HTMLElement | null {\n const root = this.#host.getRootNode() as Document | ShadowRoot;\n if (trigger) {\n this.#releaseImplicitBinding();\n return root.getElementById(trigger);\n }\n\n if (this.#implicitBinding) {\n const { id, trigger: boundTrigger } = this.#implicitBinding;\n if (\n this.#host.id === id &&\n boundTrigger.getAttribute('commandfor') === id &&\n this.#host.previousElementSibling === boundTrigger\n ) {\n return boundTrigger;\n }\n this.#releaseImplicitBinding();\n }\n\n if (this.#host.id) {\n return root.querySelector<HTMLElement>(`[commandfor=\"${this.#host.id}\"]`);\n }\n\n const adjacent = this.#host.previousElementSibling;\n if (!(adjacent instanceof HTMLElement)) {\n if (__DEV__) {\n console.warn(\n `[${this.#host.localName}] No trigger was found. Place the popup immediately after its trigger or link them explicitly.`\n );\n }\n return null;\n }\n const claimedTarget = adjacent.getAttribute('commandfor');\n if (claimedTarget) {\n if (__DEV__) {\n console.warn(\n `[${this.#host.localName}] The adjacent trigger already targets \\`${claimedTarget}\\`; link this popup explicitly.`\n );\n }\n return null;\n }\n\n const id = nextPopupId(root);\n this.#host.id = id;\n adjacent.setAttribute('commandfor', id);\n this.#implicitBinding = { id, trigger: adjacent };\n return adjacent;\n }\n\n sync(options: PositionControllerOptions): void {\n this.#positioner.sync({ ...options, popup: this.#host });\n }\n\n cleanup(): void {\n this.#positioner.cleanup();\n }\n\n hostDisconnected(): void {\n this.cleanup();\n this.#releaseImplicitBinding();\n }\n\n hostDestroyed(): void {\n this.cleanup();\n this.#releaseImplicitBinding();\n }\n\n #releaseImplicitBinding(): void {\n const binding = this.#implicitBinding;\n if (!binding) return;\n\n if (binding.trigger.getAttribute('commandfor') === binding.id) {\n binding.trigger.removeAttribute('commandfor');\n }\n if (this.#host.id === binding.id) {\n this.#host.removeAttribute('id');\n }\n this.#implicitBinding = null;\n }\n}\n\nfunction nextPopupId(root: Document | ShadowRoot): string {\n let id: string;\n do id = `vjs-popup-${++popupId}`;\n while (root.getElementById(id));\n return id;\n}\n","import { POPUP_HOST_ATTR, PopoverCore, PopoverDataAttrs, type PopoverInput, type PopoverProps } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createPopover,\n createTransition,\n type PopoverApi,\n type PopoverChangeDetails,\n type PopoverOpenChangeReason,\n type PositioningBoundary,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { SnapshotController } from '@videojs/store/html';\nimport { tryHidePopover, tryShowPopover } from '@videojs/utils/dom';\nimport { containerContext } from '../../player/context';\nimport { popupGroupContext } from '../../player/popup-group-context';\nimport { MediaElement } from '../media-element';\nimport { PositionController } from '../position-controller';\nexport class PopoverElement extends MediaElement {\n static readonly tagName = 'media-popover';\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 modal: { type: Boolean },\n closeOnEscape: { type: Boolean, attribute: 'close-on-escape' },\n closeOnOutsideClick: { type: Boolean, attribute: 'close-on-outside-click' },\n openOnHover: { type: Boolean, attribute: 'open-on-hover' },\n delay: { type: Number },\n closeDelay: { type: Number, attribute: 'close-delay' },\n boundary: { type: String },\n } satisfies PropertyDeclarationMap<keyof PopoverCore.Props | 'boundary'>;\n\n open = PopoverCore.defaultProps.open;\n defaultOpen = PopoverCore.defaultProps.defaultOpen;\n side = PopoverCore.defaultProps.side;\n align = PopoverCore.defaultProps.align;\n modal: PopoverProps['modal'] = PopoverCore.defaultProps.modal;\n closeOnEscape = PopoverCore.defaultProps.closeOnEscape;\n closeOnOutsideClick = PopoverCore.defaultProps.closeOnOutsideClick;\n openOnHover = PopoverCore.defaultProps.openOnHover;\n delay = PopoverCore.defaultProps.delay;\n closeDelay = PopoverCore.defaultProps.closeDelay;\n boundary: PositioningBoundary = 'container';\n\n readonly #core = new PopoverCore();\n readonly #containerCtx = new ContextConsumer(this, { context: containerContext, subscribe: true });\n readonly #popupGroupCtx = new ContextConsumer(this, { context: popupGroupContext });\n readonly #position = new PositionController(this);\n #popover: PopoverApi | null = null;\n #snapshot: SnapshotController<PopoverInput> | null = null;\n\n // Cleanup controllers\n #disconnect: AbortController | null = null;\n #triggerAbort: AbortController | null = null;\n #currentTrigger: HTMLElement | 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.#popover = createPopover({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: PopoverChangeDetails) => {\n this.open = nextOpen;\n this.dispatchEvent(new CustomEvent('open-change', { detail: { open: nextOpen, ...details } }));\n },\n closeOnEscape: () => this.closeOnEscape,\n closeOnOutsideClick: () => this.closeOnOutsideClick,\n openOnHover: () => this.openOnHover,\n delay: () => this.delay,\n closeDelay: () => this.closeDelay,\n group: () => this.#popupGroupCtx.value,\n });\n\n // Register self as the popup element — the element IS the popup.\n this.#popover.setPopupElement(this);\n\n // Apply popup event handlers (pointerenter/leave, focusout) to self.\n applyElementProps(this, this.#popover.popupProps, { signal: this.#disconnect.signal });\n\n // Subscribe to interaction state for reactive updates.\n // Reuse the controller across connect/disconnect cycles to avoid\n // leaking stale controllers in the host's controller set.\n if (this.#snapshot) {\n this.#snapshot.track(this.#popover.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#popover.input);\n }\n }\n\n protected override firstUpdated(changed: PropertyValues): void {\n super.firstUpdated(changed);\n\n // Uncontrolled mode: open if `defaultOpen` is set. Controlled `open`\n // is already synced by `willUpdate` on the first render cycle.\n if (this.defaultOpen && !this.open) {\n this.#popover?.open();\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#cleanupTrigger();\n this.#popover?.destroy();\n super.destroyCallback();\n }\n\n close(reason: PopoverOpenChangeReason = 'imperative-action'): void {\n this.#popover?.close(reason);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n\n // Sync controlled open state\n if (this.#popover && changed.has('open')) {\n const { active: interactionOpen } = this.#popover.input.current;\n if (this.open !== interactionOpen) {\n if (this.open) {\n this.#popover.open();\n } else {\n this.#popover.close();\n }\n }\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n if (!this.#popover) return;\n\n // Discover trigger via commandfor linkage.\n const triggerEl = this.#position.findTrigger();\n this.#syncTrigger(triggerEl);\n\n // Derive state from core + input.\n const input = this.#popover.input.current;\n this.#core.setInput(input);\n const state = this.#core.getState();\n\n // Apply popup ARIA and data attributes to self.\n applyElementProps(this, this.#core.getPopupAttrs(state));\n applyStateDataAttrs(this, state, PopoverDataAttrs);\n\n // Show/hide via Popover API AFTER data attributes are applied so\n // `data-starting-style` is present before the first visible frame.\n if (state.open) {\n tryShowPopover(this);\n } else {\n tryHidePopover(this);\n }\n\n // Apply trigger ARIA to the discovered trigger.\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, this.#core.getTriggerAttrs(state, this.id));\n }\n\n // Skip positioning when closed — no rects to measure.\n if (!state.open) {\n this.#position.cleanup();\n return;\n }\n\n this.#position.sync({\n anchorName: this.id,\n position: { side: state.side, align: state.align },\n trigger: this.#currentTrigger,\n boundary: this.boundary,\n container: this.#containerCtx.value?.container ?? null,\n onSideChange: (side) => this.setAttribute(PopoverDataAttrs.side, side),\n });\n }\n\n // --- Trigger management ---\n\n #syncTrigger(triggerEl: HTMLElement | null): void {\n if (triggerEl === this.#currentTrigger) return;\n\n this.#position.cleanup();\n this.#cleanupTrigger();\n this.#currentTrigger = triggerEl;\n this.#popover?.setTriggerElement(triggerEl);\n\n if (triggerEl && this.#popover) {\n this.#triggerAbort = new AbortController();\n applyElementProps(triggerEl, this.#popover.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","import type { SliderState, StateAttrMap } from '@videojs/core';\nimport type { SliderThumbProps } from '@videojs/core/dom';\nimport { createContext } from '@videojs/element/context';\n\nexport interface SliderContextValue {\n /** Base slider state — children use this for data attributes and value display. */\n state: SliderState;\n /** Maps state keys to `data-*` attribute names for part elements. */\n stateAttrMap: StateAttrMap<SliderState>;\n /** Domain value at the current pointer position (e.g., seconds for time, percent for volume). */\n pointerValue: number;\n /** ARIA attributes for the thumb element (role, tabindex, aria-value*, etc.). */\n thumbAttrs: Record<string, string | number | boolean | undefined>;\n /** Keyboard and focus event handlers for the thumb element. */\n thumbProps: SliderThumbProps;\n /** Optional formatter for value display. Receives domain value and value type. */\n formatValue?: ((value: number, type: 'current' | 'pointer') => string) | undefined;\n}\n\nconst SLIDER_CONTEXT_KEY = Symbol('@videojs/slider');\n\nexport const sliderContext = createContext<SliderContextValue>(SLIDER_CONTEXT_KEY);\n","import type { AlertDialogState, StateAttrMap } from '@videojs/core';\nimport { createContext } from '@videojs/element/context';\n\nexport interface AlertDialogContextValue {\n state: AlertDialogState;\n stateAttrMap: StateAttrMap<AlertDialogState>;\n close: () => void;\n}\n\nconst ALERT_DIALOG_CONTEXT_KEY = Symbol('@videojs/alert-dialog');\n\nexport const alertDialogContext = createContext<AlertDialogContextValue>(ALERT_DIALOG_CONTEXT_KEY);\n","import { applyElementProps, applyStateDataAttrs, createButton } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { alertDialogContext } from './context';\n\nexport class AlertDialogCloseElement extends MediaElement {\n static readonly tagName = 'media-alert-dialog-close';\n\n static override properties = {\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<'disabled'>;\n\n disabled = false;\n\n readonly #ctx = new ContextConsumer(this, { context: alertDialogContext, subscribe: true });\n\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => this.#ctx.value?.close(),\n isDisabled: () => this.disabled,\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n const ctx = this.#ctx.value;\n if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import type { StateAttrMap } from '@videojs/core';\nimport { applyStateDataAttrs } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport { MediaElement } from './media-element';\n\n/** Shape that compound context values must satisfy for parts to consume. */\nexport interface PartContextValue<State extends object> {\n state: State;\n stateAttrMap: StateAttrMap<State>;\n}\n\n/**\n * Abstract base for compound-component part elements that consume a parent\n * context and apply data attributes from `ctx.state` + `ctx.stateAttrMap`.\n *\n * Subclasses only need to declare the `consumer` property:\n *\n * ```ts\n * export class SliderTrackElement extends ContextPartElement<SliderState> {\n * static readonly tagName = 'media-slider-track';\n * protected readonly consumer = new ContextConsumer(this, { context: sliderContext, subscribe: true });\n * }\n * ```\n */\nexport abstract class ContextPartElement<State extends object> extends MediaElement {\n protected abstract readonly consumer: { value?: PartContextValue<State> | undefined };\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#applyState();\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n this.#applyState();\n }\n\n #applyState(): void {\n const ctx = this.consumer.value;\n if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import type { AlertDialogState } from '@videojs/core';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { alertDialogContext } from './context';\n\nexport class AlertDialogDescriptionElement extends ContextPartElement<AlertDialogState> {\n static readonly tagName = 'media-alert-dialog-description';\n\n protected readonly consumer = new ContextConsumer(this, { context: alertDialogContext, subscribe: true });\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n const descriptionId = this.consumer.value?.state.descriptionId;\n if (descriptionId) this.id = descriptionId;\n }\n}\n","import type { AlertDialogState } from '@videojs/core';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { alertDialogContext } from './context';\n\nexport class AlertDialogTitleElement extends ContextPartElement<AlertDialogState> {\n static readonly tagName = 'media-alert-dialog-title';\n\n protected readonly consumer = new ContextConsumer(this, { context: alertDialogContext, subscribe: true });\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n const titleId = this.consumer.value?.state.titleId;\n if (titleId) this.id = titleId;\n }\n}\n","import type { ControlsState, StateAttrMap } from '@videojs/core';\nimport { createContext } from '@videojs/element/context';\n\nexport interface ControlsContextValue {\n state: ControlsState;\n stateAttrMap: StateAttrMap<ControlsState>;\n}\n\nconst CONTROLS_CONTEXT_KEY = Symbol('@videojs/controls');\n\nexport const controlsContext = createContext<ControlsContextValue>(CONTROLS_CONTEXT_KEY);\n","import { ControlsCore, ControlsDataAttrs, POPUP_HOST_SELECTOR } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectControls } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { isFunction } from '@videojs/utils/predicate';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\nimport { controlsContext } from './context';\n\nexport class ControlsElement extends MediaElement {\n static readonly tagName = 'media-controls';\n\n readonly #core = new ControlsCore();\n readonly #mediaState = new PlayerController(this, playerContext, selectControls);\n readonly #provider = new ContextProvider(this, { context: controlsContext });\n #visible = true;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.setAttribute('data-interactive', '');\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 super.update(_changed);\n\n const media = this.#mediaState.value;\n if (!media) return;\n\n this.#core.setMedia(media);\n const state = this.#core.getState();\n\n applyStateDataAttrs(this, state, ControlsDataAttrs);\n\n this.#provider.setValue({\n state,\n stateAttrMap: ControlsDataAttrs,\n });\n\n const wasVisible = this.#visible;\n this.#visible = state.visible;\n\n if (wasVisible && !state.visible) {\n this.#closeOwnedOverlays();\n }\n }\n\n #closeOwnedOverlays(): void {\n for (const element of this.querySelectorAll(POPUP_HOST_SELECTOR)) {\n const host = element as Element & { close?: unknown };\n if (!isFunction(host.close)) continue;\n\n host.close('imperative-action');\n }\n }\n}\n","import type { ControlsState } from '@videojs/core';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { controlsContext } from './context';\n\nexport class ControlsGroupElement extends ContextPartElement<ControlsState> {\n static readonly tagName = 'media-controls-group';\n\n protected readonly consumer = new ContextConsumer(this, { context: controlsContext, subscribe: true });\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.hasAttribute('aria-label') || this.hasAttribute('aria-labelledby')) {\n this.setAttribute('role', 'group');\n }\n }\n}\n","import {\n AlertDialogDataAttrs,\n type AlertDialogInput,\n ErrorDialogCore,\n getErrorDialogDismissText,\n getErrorDialogTitleText,\n getErrorDialogUnexpectedText,\n resolveErrorDialogDescription,\n} from '@videojs/core';\nimport {\n type AlertDialogApi,\n applyElementProps,\n applyStateDataAttrs,\n createAlertDialog,\n createTransition,\n selectError,\n} from '@videojs/core/dom';\nimport { translateText } from '@videojs/core/i18n';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport type { ErrorLike } from '@videojs/media';\nimport { SnapshotController } from '@videojs/store/html';\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { alertDialogContext } from '../alert-dialog/context';\nimport { MediaElement } from '../media-element';\n\nlet idCounter = 0;\n\nfunction hasAuthoredContent(host: HTMLElement): boolean {\n return Array.from(host.childNodes).some((node) => !!node.textContent?.trim());\n}\n\nexport class ErrorDialogElement extends MediaElement {\n static readonly tagName = 'media-error-dialog';\n\n readonly #core = new ErrorDialogCore();\n readonly #provider = new ContextProvider(this, { context: alertDialogContext });\n readonly #titleId = `vjs-error-dialog-title-${idCounter++}`;\n readonly #descriptionId = `vjs-error-dialog-desc-${idCounter++}`;\n readonly #errorState = new PlayerController(this, playerContext, selectError);\n readonly #i18n = new I18nController(this, i18nContext);\n\n #dialog: AlertDialogApi | null = null;\n #snapshot: SnapshotController<AlertDialogInput> | null = null;\n #lastError: ErrorLike | null = null;\n #lastDescription: ReturnType<typeof resolveErrorDialogDescription> | null = null;\n #seenCopyParts = new WeakSet<HTMLElement>();\n #authoredCopyParts = new WeakSet<HTMLElement>();\n\n constructor() {\n super();\n this.#core.setTitleId(this.#titleId);\n this.#core.setDescriptionId(this.#descriptionId);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#dialog = createAlertDialog({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen) {\n this.#errorState.value?.dismissError();\n }\n },\n });\n\n this.#dialog.setElement(this);\n\n if (this.#snapshot) {\n this.#snapshot.track(this.#dialog.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#dialog.input);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#dialog?.destroy();\n this.#dialog = null;\n }\n\n protected override willUpdate(_changed: PropertyValues): void {\n super.willUpdate(_changed);\n if (!this.#dialog) return;\n\n const errorState = this.#errorState.value;\n const hasError = Boolean(errorState?.error);\n const { active: isOpen } = this.#dialog.input.current;\n\n if (errorState?.error) {\n this.#lastError = errorState.error;\n }\n\n const errorForCopy = errorState?.error ?? (isOpen ? this.#lastError : null);\n this.#syncDialogCopy(errorForCopy);\n\n if (!hasError && !isOpen) {\n this.#lastError = null;\n this.#lastDescription = null;\n }\n\n if (hasError && !isOpen) {\n this.#dialog.open();\n } else if (!hasError && isOpen) {\n this.#dialog.close();\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n if (!this.#dialog) return;\n\n const input = this.#dialog.input.current;\n this.#core.setInput(input);\n const state = this.#core.getState();\n\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, AlertDialogDataAttrs);\n\n this.#provider.setValue({\n state,\n stateAttrMap: AlertDialogDataAttrs,\n close: () => this.#dialog?.close(),\n });\n }\n\n #syncDialogCopy(error: ErrorLike | null): void {\n const t = this.#i18n.value;\n const title = this.querySelector<HTMLElement>('media-alert-dialog-title');\n if (title && !this.#hasAuthoredCopy(title)) {\n title.textContent = translateText(getErrorDialogTitleText(), t);\n }\n\n const desc = this.querySelector<HTMLElement>('media-alert-dialog-description');\n if (desc && !this.#hasAuthoredCopy(desc)) {\n const description = error ? resolveErrorDialogDescription(error) : null;\n if (description) {\n this.#lastDescription = description;\n }\n const copy = description ?? this.#lastDescription;\n desc.textContent = copy ? translateText(copy, t) : translateText(getErrorDialogUnexpectedText(), t);\n }\n\n const close = this.querySelector<HTMLElement>('media-alert-dialog-close');\n if (close && !this.#hasAuthoredCopy(close)) {\n close.textContent = translateText(getErrorDialogDismissText(), t);\n }\n }\n\n #hasAuthoredCopy(el: HTMLElement): boolean {\n if (!this.#seenCopyParts.has(el)) {\n this.#seenCopyParts.add(el);\n if (hasAuthoredContent(el)) {\n this.#authoredCopyParts.add(el);\n }\n }\n return this.#authoredCopyParts.has(el);\n }\n}\n","import { applyElementProps } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { menuContext } from './context';\n\nexport class MenuCheckboxItemElement extends MediaElement {\n static readonly tagName = 'media-menu-checkbox-item';\n\n static override properties = {\n checked: { type: Boolean },\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<'checked' | 'disabled'>;\n\n checked = false;\n disabled = false;\n\n readonly #ctx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n\n #disconnect: AbortController | null = null;\n #registered = false;\n #cleanupRegistration: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#disconnect = new AbortController();\n this.#registered = false;\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupRegistration?.();\n this.#cleanupRegistration = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n this.#registered = false;\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (!ctx || !this.#disconnect) return;\n\n if (!this.#registered) {\n this.#registered = true;\n\n this.#cleanupRegistration = ctx.menu.registerItem(this);\n\n applyElementProps(\n this,\n {\n onClick: () => {\n const currentCtx = this.#ctx.value;\n if (!currentCtx || this.disabled) return;\n\n this.checked = !this.checked;\n this.dispatchEvent(new CustomEvent('checked-change', { detail: { checked: this.checked }, bubbles: true }));\n },\n onPointerenter: () => {\n const currentCtx = this.#ctx.value;\n if (!this.disabled) currentCtx?.menu.highlight(this, { focus: false, pointer: true });\n },\n },\n { signal: this.#disconnect.signal }\n );\n }\n\n applyElementProps(this, {\n role: 'menuitemcheckbox',\n 'aria-checked': String(this.checked),\n 'aria-disabled': this.disabled ? 'true' : undefined,\n });\n }\n}\n","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","import type { PropertyValues } from '@videojs/element';\n\nimport { MediaElement } from '../media-element';\nimport { MenuGroupController } from './menu-group-controller';\n\nexport class MenuGroupElement extends MediaElement {\n static readonly tagName = 'media-menu-group';\n\n readonly #group = new MenuGroupController(this);\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n this.#group.applyProps();\n }\n}\n","import type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { menuGroupContext } from './context';\n\nlet idCounter = 0;\n\nexport class MenuGroupLabelElement extends MediaElement {\n static readonly tagName = 'media-menu-group-label';\n\n readonly #groupCtx = new ContextConsumer(this, { context: menuGroupContext, subscribe: true });\n readonly #generatedId = `vjs-menu-group-label-${idCounter++}`;\n\n #cleanupRegistration: (() => void) | null = null;\n #registeredId: string | null = null;\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupRegistration?.();\n this.#cleanupRegistration = null;\n this.#registeredId = null;\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n if (!this.id) {\n this.id = this.#generatedId;\n }\n\n this.#registerLabel();\n }\n\n #registerLabel(): void {\n const groupCtx = this.#groupCtx.value;\n\n if (!groupCtx) {\n this.#cleanupRegistration?.();\n this.#cleanupRegistration = null;\n this.#registeredId = null;\n return;\n }\n\n if (this.#registeredId === this.id) return;\n\n this.#cleanupRegistration?.();\n this.#registeredId = this.id;\n this.#cleanupRegistration = groupCtx.registerLabel(this.id);\n }\n}\n","import { applyElementProps, completeMenuItemSelection } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { MediaElement } from '../media-element';\nimport { type MenuContextValue, menuContext } from './context';\n\nexport class MenuItemElement extends MediaElement {\n static readonly tagName = 'media-menu-item';\n\n static override properties = {\n disabled: { type: Boolean },\n commandfor: { type: String },\n } satisfies PropertyDeclarationMap<'disabled' | 'commandfor'>;\n\n disabled = false;\n /** ID of a nested `<media-menu>` to open when this item is activated. */\n commandfor: string | undefined = undefined;\n readonly #ctx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n\n #disconnect: AbortController | null = null;\n #registeredMenu: MenuContextValue['menu'] | null = null;\n #cleanupRegistration: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#disconnect = new AbortController();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupRegistration?.();\n this.#cleanupRegistration = null;\n this.#registeredMenu = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (!ctx || !this.#disconnect) return;\n\n if (this.#registeredMenu !== ctx.menu) {\n this.#cleanupRegistration?.();\n this.#registeredMenu = ctx.menu;\n this.#cleanupRegistration = ctx.menu.registerItem(this);\n\n applyElementProps(\n this,\n {\n onClick: (event: MouseEvent) => {\n const currentCtx = this.#ctx.value;\n if (!currentCtx || this.#isDisabled()) return;\n\n const target = this.commandfor;\n if (target) {\n this.#openSubmenu(target);\n } else {\n const select = new CustomEvent('select', { bubbles: true, cancelable: true });\n if (!this.dispatchEvent(select)) {\n event.preventDefault();\n return;\n }\n completeMenuItemSelection(currentCtx.menu);\n }\n event.preventDefault();\n },\n onKeyDown: (event: KeyboardEvent) => {\n const currentCtx = this.#ctx.value;\n if (!currentCtx || this.#isDisabled() || event.key !== 'ArrowRight') return;\n\n const target = this.commandfor;\n if (!target) return;\n\n this.#openSubmenu(target);\n event.preventDefault();\n },\n onPointerenter: () => {\n const currentCtx = this.#ctx.value;\n if (!this.#isDisabled()) currentCtx?.menu.highlight(this, { focus: false, pointer: true });\n },\n },\n { signal: this.#disconnect.signal }\n );\n }\n\n const hasSubmenu = Boolean(this.commandfor);\n applyElementProps(this, {\n role: 'menuitem',\n 'aria-disabled': this.#isDisabled() ? 'true' : undefined,\n ...(hasSubmenu && {\n 'aria-haspopup': 'menu',\n 'aria-expanded': 'false',\n 'data-has-submenu': '',\n }),\n });\n }\n\n #openSubmenu(id: string): void {\n const root = this.getRootNode() as Document | ShadowRoot;\n const submenu = root.querySelector<HTMLElement>(`#${CSS.escape(id)}`) as HTMLElement & {\n openMenu?: (reason?: 'click') => void;\n };\n submenu?.openMenu?.('click');\n }\n\n #isDisabled(): boolean {\n return this.disabled || this.getAttribute('aria-disabled') === 'true';\n }\n}\n","import { applyElementProps } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport { MediaElement } from '../media-element';\n\nexport class MenuSeparatorElement extends MediaElement {\n static readonly tagName = 'media-menu-separator';\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n applyElementProps(this, { role: 'separator' });\n }\n}\n","import {\n getRenderedIndicatorState,\n type IndicatorLifecycleState,\n type IndicatorVisibilityHandle,\n type InputActionEvent,\n isIndicatorPresent,\n type MediaSnapshot,\n} from '@videojs/core';\nimport {\n getIndicatorVisibilityCoordinator,\n getMediaSnapshot,\n subscribeToInputActions,\n type TransitionApi,\n} from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { State as StoreState } from '@videojs/store';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\nimport type { LiveIndicator } from './live-indicator';\n\n/** Shared imperative API for status / volume / seek indicator cores. */\nexport interface InputIndicatorCoreApi<IndicatorState extends IndicatorLifecycleState> {\n readonly state: StoreState<IndicatorState>;\n destroy(): void;\n close(): void;\n processEvent(event: InputActionEvent, snapshot: MediaSnapshot): boolean;\n}\n\nexport interface InputIndicatorOptions {\n replayOnUpdate?: boolean | undefined;\n}\n\nexport abstract class InputIndicatorElement<IndicatorState extends IndicatorLifecycleState> extends MediaElement {\n protected abstract get core(): InputIndicatorCoreApi<IndicatorState>;\n protected abstract get transition(): TransitionApi;\n protected abstract get liveIndicator(): LiveIndicator<IndicatorState>;\n protected get options(): InputIndicatorOptions {\n return {};\n }\n\n protected abstract syncCoreProps(): void;\n\n protected readonly player = new PlayerController(this, playerContext);\n protected readonly container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.#reconnect(),\n subscribe: true,\n });\n\n #disconnect: AbortController | null = null;\n #inputActionUnsubscribe: (() => void) | null = null;\n #visibilityUnsubscribe: (() => void) | null = null;\n #visibilityHandle: IndicatorVisibilityHandle | null = null;\n #lastGeneration = 0;\n #snapshot: IndicatorState | null = null;\n\n #getVisibilityHandle(): IndicatorVisibilityHandle {\n return (this.#visibilityHandle ??= { close: () => this.core.close() });\n }\n\n #payloadSnapshot(): IndicatorState {\n return this.#snapshot ?? this.core.state.current;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#snapshot = this.core.state.current;\n\n this.#disconnect = new AbortController();\n this.core.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });\n this.transition.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });\n this.hidden = true;\n this.#reconnect();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.#inputActionUnsubscribe = null;\n this.#visibilityUnsubscribe = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.core.destroy();\n this.transition.destroy();\n this.liveIndicator.remove();\n super.destroyCallback();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.syncCoreProps();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n this.#syncTransition();\n\n const currentState = this.core.state.current;\n const transitionState = this.transition.state.current;\n const present = isIndicatorPresent(currentState, transitionState);\n\n if (!present) {\n this.liveIndicator.remove();\n return;\n }\n\n const state = getRenderedIndicatorState(currentState, this.#payloadSnapshot(), transitionState);\n this.liveIndicator.render(state);\n }\n\n #syncTransition(): void {\n const currentState = this.core.state.current;\n\n if (currentState.open) {\n this.#snapshot = currentState;\n if (this.#lastGeneration !== currentState.generation) {\n this.#lastGeneration = currentState.generation;\n const transitionState = this.transition.state.current;\n if (!transitionState.active || this.options.replayOnUpdate !== false) {\n void this.transition.open(this.liveIndicator.element);\n } else if (transitionState.status === 'ending') {\n this.transition.cancel();\n }\n }\n return;\n }\n\n const { active, status } = this.transition.state.current;\n if (active && status !== 'ending') {\n void this.transition.close(this.liveIndicator.element);\n }\n }\n\n #reconnect(): void {\n // Context can resolve before this field assignment completes.\n if (!this.container) return;\n\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.#inputActionUnsubscribe = null;\n this.#visibilityUnsubscribe = null;\n\n const container = this.container.value?.container;\n if (!container) return;\n\n const visibility = getIndicatorVisibilityCoordinator(container);\n const visibilityHandle = this.#getVisibilityHandle();\n this.#visibilityUnsubscribe = visibility.register(visibilityHandle);\n\n this.#inputActionUnsubscribe = subscribeToInputActions(container, (event) => {\n if (this.core.processEvent(event, getMediaSnapshot(this.player.value))) {\n visibility.show(visibilityHandle);\n }\n });\n }\n}\n","import type { StateAttrMap } from '@videojs/core';\nimport { applyStateDataAttrs } from '@videojs/core/dom';\n\nexport interface LiveIndicatorOptions<State extends object> {\n host: HTMLElement;\n dataAttrs: StateAttrMap<State>;\n render: (element: HTMLElement, state: State) => void;\n}\n\nexport class LiveIndicator<State extends object> {\n readonly #host: HTMLElement;\n readonly #dataAttrs: StateAttrMap<State>;\n readonly #render: (element: HTMLElement, state: State) => void;\n\n constructor(options: LiveIndicatorOptions<State>) {\n this.#host = options.host;\n this.#dataAttrs = options.dataAttrs;\n this.#render = options.render;\n }\n\n get element(): HTMLElement {\n return this.#host;\n }\n\n render(state: State): HTMLElement {\n this.#host.hidden = false;\n applyStateDataAttrs(this.#host, state, this.#dataAttrs);\n this.#render(this.#host, state);\n\n return this.#host;\n }\n\n remove(): void {\n this.#host.hidden = true;\n\n for (const key in this.#dataAttrs) {\n const name = this.#dataAttrs[key];\n if (name) this.#host.removeAttribute(name);\n }\n }\n}\n","import { getSeekIndicatorDisplayValue, SeekIndicatorCore, SeekIndicatorDataAttrs } from '@videojs/core';\nimport { createTransition } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap } from '@videojs/element';\n\nimport { InputIndicatorElement } from '../input-indicator/input-indicator-element';\nimport { LiveIndicator } from '../input-indicator/live-indicator';\n\nexport class SeekIndicatorElement extends InputIndicatorElement<SeekIndicatorCore.State> {\n static readonly tagName = 'media-seek-indicator';\n\n static override properties = {\n closeDelay: { type: Number, attribute: 'close-delay' },\n } satisfies PropertyDeclarationMap<'closeDelay'>;\n\n closeDelay: number | undefined;\n\n readonly #core = new SeekIndicatorCore();\n readonly #transition = createTransition();\n readonly #liveIndicator = new LiveIndicator({\n host: this,\n dataAttrs: SeekIndicatorDataAttrs,\n render: renderSeekIndicator,\n });\n\n protected get core() {\n return this.#core;\n }\n\n protected get transition() {\n return this.#transition;\n }\n\n protected get liveIndicator() {\n return this.#liveIndicator;\n }\n\n protected override syncCoreProps(): void {\n this.#core.setProps({ closeDelay: this.closeDelay });\n }\n}\n\nfunction renderSeekIndicator(element: HTMLElement, state: SeekIndicatorCore.State): void {\n const value = element.querySelector('media-seek-indicator-value');\n if (!value) return;\n\n value.textContent = getSeekIndicatorDisplayValue(state);\n}\n","import { MediaElement } from '../media-element';\n\nexport class SeekIndicatorValueElement extends MediaElement {\n static readonly tagName = 'media-seek-indicator-value';\n}\n","import type { SliderState } from '@videojs/core';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { sliderContext } from './context';\n\nexport class SliderBufferElement extends ContextPartElement<SliderState> {\n static readonly tagName = 'media-slider-buffer';\n\n protected readonly consumer = new ContextConsumer(this, { context: sliderContext, subscribe: true });\n}\n","import type { SliderState } from '@videojs/core';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { sliderContext } from './context';\n\nexport class SliderFillElement extends ContextPartElement<SliderState> {\n static readonly tagName = 'media-slider-fill';\n\n protected readonly consumer = new ContextConsumer(this, { context: sliderContext, subscribe: true });\n}\n","import type { SliderPreviewProps } from '@videojs/core';\nimport { applyStateDataAttrs, getSliderPreviewStyle } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { applyStyles, observeResize } from '@videojs/utils/dom';\n\nimport { MediaElement } from '../media-element';\nimport { sliderContext } from './context';\n\nexport class SliderPreviewElement extends MediaElement {\n static readonly tagName = 'media-slider-preview';\n\n static override properties = {\n overflow: { type: String },\n } satisfies PropertyDeclarationMap<'overflow'>;\n\n overflow: NonNullable<SliderPreviewProps['overflow']> = 'clamp';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n #stopObservingResize: (() => void) | null = null;\n #width = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.#stopObservingResize = observeResize(this, ([entry]) => {\n this.#width = entry!.contentRect.width;\n this.#applyPosition();\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#stopObservingResize?.();\n this.#stopObservingResize = null;\n }\n\n #applyPosition(): void {\n applyStyles(this, getSliderPreviewStyle(this.#width, this.overflow));\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n\n this.#applyPosition();\n }\n}\n","import { applyElementProps, applyStateDataAttrs } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { sliderContext } from './context';\n\nexport class SliderThumbElement extends MediaElement {\n static readonly tagName = 'media-slider-thumb';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n #disconnect: AbortController | null = null;\n #thumbPropsApplied = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#disconnect = new AbortController();\n this.#thumbPropsApplied = false;\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n this.#thumbPropsApplied = false;\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (!ctx) return;\n\n // Apply keyboard and focus handlers once — they don't change per slider instance.\n if (!this.#thumbPropsApplied && this.#disconnect) {\n applyElementProps(this, ctx.thumbProps, { signal: this.#disconnect.signal });\n this.#thumbPropsApplied = true;\n }\n\n // Apply ARIA attributes every update (values change as slider moves).\n applyElementProps(this, ctx.thumbAttrs);\n\n // Apply state data attributes.\n applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import {\n mapCuesToThumbnails,\n ThumbnailCore,\n ThumbnailDataAttrs,\n type ThumbnailImage,\n type ThumbnailResizeResult,\n} from '@videojs/core';\nimport type { ThumbnailApi } from '@videojs/core/dom';\nimport { applyElementProps, applyStateDataAttrs, createThumbnail, selectTextTrack } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { MediaTextTrackState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nconst SHADOW_CSS = `\\\n:host {\n display: inline-block;\n overflow: hidden;\n}\nimg {\n display: block;\n}`;\n\nexport class ThumbnailElement extends MediaElement {\n static readonly tagName = 'media-thumbnail';\n\n static override properties = {\n time: { type: Number },\n crossOrigin: { type: String, attribute: 'crossorigin' },\n loading: { type: String },\n fetchPriority: { type: String, attribute: 'fetchpriority' },\n } satisfies PropertyDeclarationMap<keyof ThumbnailCore.Props>;\n\n time = 0;\n crossOrigin: ThumbnailCore.Props['crossOrigin'];\n loading: ThumbnailCore.Props['loading'];\n fetchPriority: ThumbnailCore.Props['fetchPriority'];\n\n readonly #core = new ThumbnailCore();\n readonly #img = document.createElement('img');\n readonly #textTracks = new PlayerController(this, playerContext, selectTextTrack);\n\n #thumbnails: ThumbnailImage[] = [];\n #externalThumbnails: ThumbnailImage[] | undefined;\n #lastTextTrack: MediaTextTrackState | undefined;\n #api: ThumbnailApi | null = null;\n\n constructor() {\n super();\n\n const shadow = this.attachShadow({ mode: 'open' });\n\n const style = document.createElement('style');\n style.textContent = SHADOW_CSS;\n shadow.appendChild(style);\n\n this.#img.alt = '';\n this.#img.setAttribute('part', 'img');\n this.#img.setAttribute('aria-hidden', 'true');\n this.#img.setAttribute('decoding', 'async');\n shadow.appendChild(this.#img);\n }\n\n /**\n * Set thumbnail images directly, bypassing the automatic `<track>` detection.\n * When set, this takes priority over the text track path.\n */\n get thumbnails(): ThumbnailImage[] | undefined {\n return this.#externalThumbnails;\n }\n\n set thumbnails(value: ThumbnailImage[] | undefined) {\n this.#externalThumbnails = value;\n this.requestUpdate();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#api = createThumbnail({\n getContainer: () => this,\n getImg: () => this.#img,\n onStateChange: () => this.requestUpdate(),\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n }\n\n override destroyCallback(): void {\n this.#api?.destroy();\n super.destroyCallback();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Resolve thumbnails: external prop takes priority over auto <track> path.\n if (this.#externalThumbnails) {\n this.#thumbnails = this.#externalThumbnails;\n } else {\n const textTrack = this.#textTracks.value;\n\n if (textTrack !== this.#lastTextTrack) {\n this.#lastTextTrack = textTrack;\n this.#thumbnails =\n textTrack && textTrack.thumbnailCues.length > 0\n ? mapCuesToThumbnails(textTrack.thumbnailCues, textTrack.thumbnailTrackSrc ?? undefined)\n : [];\n }\n }\n\n const thumbnail = this.#core.findActiveThumbnail(this.#thumbnails, this.time);\n\n // Sync img attributes from element properties.\n applyElementProps(this.#img, {\n crossorigin: this.crossOrigin || undefined,\n loading: this.loading,\n fetchpriority: this.fetchPriority,\n });\n\n // Track src changes via the thumbnail API.\n this.#api?.updateSrc(thumbnail?.url);\n\n if (!thumbnail) {\n this.#img.removeAttribute('src');\n this.#resetStyles();\n\n const state = this.#core.getState(false, false, undefined);\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, ThumbnailDataAttrs);\n return;\n }\n\n // Set the img src directly (imperative DOM).\n if (this.#img.getAttribute('src') !== thumbnail.url) {\n this.#img.src = thumbnail.url;\n }\n\n const api = this.#api;\n const state = this.#core.getState(api?.loading ?? false, api?.error ?? false, thumbnail);\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, ThumbnailDataAttrs);\n\n if (api?.naturalWidth && api.naturalHeight) {\n const constraints = api.readConstraints();\n const result = this.#core.resize(thumbnail, api.naturalWidth, api.naturalHeight, constraints);\n\n if (result) {\n this.#applyResize(result);\n }\n }\n }\n\n #applyResize(result: ThumbnailResizeResult): void {\n this.style.width = `${result.containerWidth}px`;\n this.style.height = `${result.containerHeight}px`;\n\n const imgStyle = this.#img.style;\n imgStyle.width = `${result.imageWidth}px`;\n imgStyle.height = `${result.imageHeight}px`;\n imgStyle.maxWidth = 'none';\n imgStyle.transform =\n result.offsetX || result.offsetY ? `translate(-${result.offsetX}px, -${result.offsetY}px)` : '';\n }\n\n #resetStyles(): void {\n this.style.width = '';\n this.style.height = '';\n\n const imgStyle = this.#img.style;\n imgStyle.width = '';\n imgStyle.height = '';\n imgStyle.maxWidth = '';\n imgStyle.transform = '';\n }\n}\n","import type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ThumbnailElement } from '../thumbnail/thumbnail-element';\nimport { sliderContext } from './context';\n\n// @ts-expect-error TS2417 — tagName narrows to a different literal for custom element registration.\nexport class SliderThumbnailElement extends ThumbnailElement {\n static override readonly tagName = 'media-slider-thumbnail';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n protected override update(changed: PropertyValues): void {\n const ctx = this.#ctx.value;\n if (ctx) this.time = ctx.pointerValue;\n super.update(changed);\n }\n}\n","import type { SliderState } from '@videojs/core';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { sliderContext } from './context';\n\nexport class SliderTrackElement extends ContextPartElement<SliderState> {\n static readonly tagName = 'media-slider-track';\n\n protected readonly consumer = new ContextConsumer(this, { context: sliderContext, subscribe: true });\n}\n","import { applyStateDataAttrs } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { sliderContext } from './context';\n\nexport class SliderValueElement extends MediaElement {\n static readonly tagName = 'media-slider-value';\n\n static override properties = {\n type: { type: String },\n } satisfies PropertyDeclarationMap<'type'>;\n\n type: 'current' | 'pointer' = 'current';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('aria-live', 'off');\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (!ctx) return;\n\n const value = this.type === 'pointer' ? ctx.pointerValue : ctx.state.value;\n\n this.textContent = ctx.formatValue ? ctx.formatValue(value, this.type) : String(Math.round(value));\n\n applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import { createStatusAnnouncerLabels, StatusAnnouncerCore } from '@videojs/core';\nimport { type StatusAnnouncerStore, shouldAnnounceStatusChange, subscribeToStatusAnnouncer } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { containerContext, playerContext } from '../../player/context';\nimport { MediaElement } from '../media-element';\n\nexport class StatusAnnouncerElement extends MediaElement {\n static readonly tagName = 'media-status-announcer';\n\n static override properties = {\n closeDelay: { type: Number, attribute: 'close-delay' },\n } satisfies PropertyDeclarationMap<'closeDelay'>;\n\n closeDelay: number | undefined;\n\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #core = new StatusAnnouncerCore();\n // Context can resolve while connected markup is still upgrading.\n #storeUnsubscribe: (() => void) | null = null;\n readonly #player = new ContextConsumer(this, {\n context: playerContext,\n callback: (store) => this.#reconnect(store),\n subscribe: true,\n });\n readonly #container = new ContextConsumer(this, { context: containerContext, subscribe: true });\n\n #disconnect: AbortController | null = null;\n #liveText: HTMLElement | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.setAttribute('role', 'status');\n this.#ensureLiveText();\n\n this.#disconnect = new AbortController();\n this.#core.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });\n this.#reconnect();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#storeUnsubscribe?.();\n this.#storeUnsubscribe = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#storeUnsubscribe?.();\n this.#core.destroy();\n super.destroyCallback();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps({\n closeDelay: this.closeDelay,\n labels: createStatusAnnouncerLabels(this.#i18n.value, this.#i18n.locale),\n shouldAnnounce: () => shouldAnnounceStatusChange(this.#container.value?.container),\n });\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const label = this.#core.state.current.label;\n const liveText = this.#ensureLiveText();\n\n if (label === null) {\n liveText.replaceChildren();\n } else {\n liveText.replaceChildren(document.createTextNode(label));\n }\n }\n\n #reconnect(store: StatusAnnouncerStore | undefined = this.#player.value): void {\n this.#storeUnsubscribe?.();\n this.#storeUnsubscribe = null;\n if (!store) {\n this.#core.resetSnapshot();\n return;\n }\n\n this.#storeUnsubscribe = subscribeToStatusAnnouncer(store, this.#core);\n }\n\n #ensureLiveText(): HTMLElement {\n if (this.#liveText?.isConnected) return this.#liveText;\n\n const existing = this.querySelector<HTMLElement>('[data-status-announcer-content]');\n this.#liveText = existing ?? document.createElement('span');\n this.#liveText.setAttribute('data-status-announcer-content', '');\n\n if (!existing) this.append(this.#liveText);\n\n return this.#liveText;\n }\n}\n","import {\n createInputIndicatorLabels,\n getStatusIndicatorDisplayValue,\n type InputAction,\n StatusIndicatorCore,\n StatusIndicatorDataAttrs,\n} from '@videojs/core';\nimport { createTransition } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap } from '@videojs/element';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { InputIndicatorElement, type InputIndicatorOptions } from '../input-indicator/input-indicator-element';\nimport { LiveIndicator } from '../input-indicator/live-indicator';\n\nexport class StatusIndicatorElement extends InputIndicatorElement<StatusIndicatorCore.State> {\n static readonly tagName = 'media-status-indicator';\n\n static override properties = {\n actions: { type: String },\n closeDelay: { type: Number, attribute: 'close-delay' },\n } satisfies PropertyDeclarationMap<'actions' | 'closeDelay'>;\n\n actions: string | undefined;\n closeDelay: number | undefined;\n\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #core = new StatusIndicatorCore();\n readonly #transition = createTransition();\n readonly #liveIndicator = new LiveIndicator({\n host: this,\n dataAttrs: StatusIndicatorDataAttrs,\n render: renderStatusIndicator,\n });\n readonly #options = { replayOnUpdate: false } satisfies InputIndicatorOptions;\n\n protected get core() {\n return this.#core;\n }\n\n protected get transition() {\n return this.#transition;\n }\n\n protected get liveIndicator() {\n return this.#liveIndicator;\n }\n\n protected override get options() {\n return this.#options;\n }\n\n protected override syncCoreProps(): void {\n this.#core.setProps({\n actions: parseActions(this.actions),\n closeDelay: this.closeDelay,\n labels: createInputIndicatorLabels(this.#i18n.value),\n });\n }\n}\n\nfunction parseActions(actions: string | undefined): readonly InputAction[] | undefined {\n return actions?.split(/[\\s,]+/).filter(Boolean) as readonly InputAction[] | undefined;\n}\n\nfunction renderStatusIndicator(element: HTMLElement, state: StatusIndicatorCore.State): void {\n const value = element.querySelector('media-status-indicator-value');\n if (!value) return;\n\n value.textContent = getStatusIndicatorDisplayValue(state);\n}\n","import { MediaElement } from '../media-element';\n\nexport class StatusIndicatorValueElement extends MediaElement {\n static readonly tagName = 'media-status-indicator-value';\n}\n","import { TimeCore, TimeDataAttrs, type TimeType } from '@videojs/core';\nimport { applyElementProps, applyStateDataAttrs, logMissingFeature, selectTime } from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport { durationSuffixText, elapsedSuffixText, remainingSuffixText } from '@videojs/core/i18n/text/time';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { isInteractiveActivation } from '@videojs/utils/dom';\nimport { formatTimeAsPhrase } from '@videojs/utils/time';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class TimeElement extends MediaElement {\n static readonly tagName = 'media-time';\n\n static override properties = {\n type: { type: String },\n negativeSign: { type: String, attribute: 'negative-sign' },\n label: { type: String },\n toggle: { type: Boolean },\n } satisfies PropertyDeclarationMap<keyof TimeCore.Props>;\n\n type: TimeType = TimeCore.defaultProps.type;\n negativeSign = TimeCore.defaultProps.negativeSign;\n label: Text | string = '';\n toggle = TimeCore.defaultProps.toggle;\n\n readonly #core = new TimeCore();\n readonly #state = new PlayerController(this, playerContext, selectTime);\n readonly #i18n = new I18nController(this, i18nContext);\n\n readonly #signSpan = document.createElement('span');\n readonly #textNode = document.createTextNode('');\n\n #disconnect: AbortController | null = null;\n #listening = false;\n #activeType: TimeType = TimeCore.defaultProps.type;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.#disconnect = new AbortController();\n this.#syncListeners();\n\n if (!this.#signSpan.parentNode) {\n this.#signSpan.setAttribute('aria-hidden', 'true');\n this.#signSpan.hidden = true;\n this.appendChild(this.#signSpan);\n this.appendChild(this.#textNode);\n }\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(this.localName, this.#state.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n this.#listening = false;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n if (changed.has('type') || changed.has('toggle')) {\n this.#activeType = this.type;\n }\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n if (changed.has('toggle')) {\n this.#syncListeners();\n }\n\n const media = this.#state.value;\n if (!media) {\n this.#clearAttrs();\n return;\n }\n\n this.#core.setProps({\n type: this.toggle ? this.#activeType : this.type,\n negativeSign: this.negativeSign,\n label: this.label,\n toggle: this.toggle,\n });\n this.#core.setMedia(media);\n this.#core.setFormatLocale(this.#i18n.locale);\n const state = this.#core.getState();\n\n this.#signSpan.hidden = !state.negative;\n this.#signSpan.textContent = state.negative ? this.negativeSign : '';\n this.#textNode.textContent = state.text;\n\n const attrs = this.#core.getAttrs(state, this.type);\n const label = translateText(attrs['aria-label'], this.#i18n.value, this.#getLabelParams(state));\n const description = attrs['aria-description']\n ? translateText(attrs['aria-description'], this.#i18n.value)\n : undefined;\n\n applyElementProps(this, {\n 'aria-label': label,\n 'aria-description': description,\n role: this.toggle ? attrs.role : 'time',\n tabIndex: attrs.tabIndex,\n datetime: this.toggle ? undefined : state.datetime,\n });\n applyStateDataAttrs(this, state, TimeDataAttrs);\n }\n\n #getLabelParams(state: TimeCore.State): { duration: string } | undefined {\n const params = this.#core.getLabelParams(state);\n if (!params) return undefined;\n\n const duration = formatTimeAsPhrase(Math.abs(state.seconds), { locale: this.#i18n.locale });\n\n const text = {\n current: elapsedSuffixText,\n duration: durationSuffixText,\n remaining: remainingSuffixText,\n }[state.type];\n\n return { duration: translateText(text, this.#i18n.value, { duration }) };\n }\n\n #handleClick = (event: MouseEvent): void => {\n if (event.defaultPrevented || !this.toggle || !this.#state.value) return;\n this.#toggleType();\n };\n\n #handleKeyDown = (event: KeyboardEvent): void => {\n if (event.defaultPrevented || !isInteractiveActivation(event)) return;\n if (!this.toggle || !this.#state.value) return;\n // Prevent space from scrolling page.\n event.preventDefault();\n if (event.repeat) return;\n this.#toggleType();\n };\n\n #toggleType(): void {\n if (this.type === 'current') {\n this.#activeType = this.#activeType === 'remaining' ? 'current' : 'remaining';\n } else {\n this.#activeType = this.#activeType === 'duration' ? 'remaining' : 'duration';\n }\n\n this.requestUpdate();\n }\n\n #syncListeners(): void {\n if (!this.toggle || !this.#disconnect || this.#listening) return;\n\n this.#listening = true;\n applyElementProps(\n this,\n {\n onClick: this.#handleClick,\n onKeyDown: this.#handleKeyDown,\n },\n { signal: this.#disconnect.signal }\n );\n }\n\n #clearAttrs(): void {\n applyElementProps(this, {\n 'aria-label': undefined,\n 'aria-description': undefined,\n role: undefined,\n tabIndex: undefined,\n datetime: undefined,\n 'data-type': undefined,\n });\n }\n}\n","import { MediaElement } from '../media-element';\n\nexport class TimeGroupElement extends MediaElement {\n static readonly tagName = 'media-time-group';\n\n // Future: Could provide context for hoursDisplay to children via Lit context\n}\n","import { MediaElement } from '../media-element';\n\nexport class TimeSeparatorElement extends MediaElement {\n static readonly tagName = 'media-time-separator';\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Set aria-hidden for accessibility\n this.setAttribute('aria-hidden', 'true');\n\n // Set default content if empty\n if (!this.textContent?.trim()) {\n this.textContent = '/';\n }\n }\n}\n","import { TimeSliderCore, TimeSliderDataAttrs } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createSlider,\n getTimeSliderCSSVars,\n logMissingFeature,\n type SliderApi,\n selectBuffer,\n selectControls,\n selectPlayback,\n selectTime,\n} from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { applyStyles, isRTL } from '@videojs/utils/dom';\nimport { formatTime } from '@videojs/utils/time';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\nimport { sliderContext } from '../slider/context';\n\nexport class TimeSliderElement extends MediaElement {\n static readonly tagName = 'media-time-slider';\n\n static override properties = {\n label: { type: String },\n changeThrottle: { type: Number, attribute: 'change-throttle' },\n step: { type: Number },\n largeStep: { type: Number, attribute: 'large-step' },\n orientation: { type: String },\n disabled: { type: Boolean },\n thumbAlignment: { type: String, attribute: 'thumb-alignment' },\n pauseOnDrag: { type: Boolean, attribute: 'pause-on-drag' },\n } satisfies PropertyDeclarationMap<Exclude<keyof TimeSliderCore.Props, 'value' | 'min' | 'max'>>;\n\n label: Text | string = '';\n changeThrottle = TimeSliderCore.defaultProps.changeThrottle;\n step = TimeSliderCore.defaultProps.step;\n largeStep = TimeSliderCore.defaultProps.largeStep;\n orientation = TimeSliderCore.defaultProps.orientation;\n disabled = TimeSliderCore.defaultProps.disabled;\n thumbAlignment = TimeSliderCore.defaultProps.thumbAlignment;\n pauseOnDrag = TimeSliderCore.defaultProps.pauseOnDrag;\n\n readonly #core = new TimeSliderCore();\n readonly #controlsState = new PlayerController(this, playerContext, selectControls);\n readonly #provider = new ContextProvider(this, { context: sliderContext });\n readonly #timeState = new PlayerController(this, playerContext, selectTime);\n readonly #bufferState = new PlayerController(this, playerContext, selectBuffer);\n readonly #playbackState = new PlayerController(this, playerContext, selectPlayback);\n readonly #i18n = new I18nController(this, i18nContext);\n\n #slider: SliderApi | null = null;\n #disconnect: AbortController | null = null;\n #releaseControlsLock: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#disconnect = new AbortController();\n const signal = this.#disconnect.signal;\n\n this.#slider = createSlider({\n getElement: () => this,\n getThumbElement: () => this.querySelector<HTMLElement>('media-slider-thumb'),\n getOrientation: () => this.orientation,\n isRTL: () => isRTL(this),\n isDisabled: () => this.disabled || !this.#timeState.value,\n getPercent: () => {\n const media = this.#timeState.value;\n if (!media) return 0;\n return this.#core.percentFromValue(media.currentTime);\n },\n getStepPercent: () => this.#core.getStepPercent(),\n getLargeStepPercent: () => this.#core.getLargeStepPercent(),\n onValueCommit: (percent) => {\n const media = this.#timeState.value;\n if (media) media.seek(this.#core.rawValueFromPercent(percent));\n },\n changeThrottle: this.changeThrottle,\n onDragStart: () => {\n this.#releaseControlsLock ??= this.#controlsState.value?.requestControlsLock() ?? null;\n this.#core.startDrag(this.#playbackState.value);\n this.dispatchEvent(new CustomEvent('drag-start', { bubbles: true }));\n },\n onDragEnd: () => {\n this.#releaseControlsVisibilityLock();\n this.#core.endDrag(this.#playbackState.value);\n this.dispatchEvent(new CustomEvent('drag-end', { bubbles: true }));\n },\n adjustPercent: (raw, thumbSize, trackSize) => this.#core.adjustPercentForAlignment(raw, thumbSize, trackSize),\n onResize: () => this.requestUpdate(),\n });\n\n applyElementProps(this, this.#slider.rootProps, { signal });\n applyStyles(this, this.#slider.rootStyle);\n this.#slider.input.subscribe(() => this.requestUpdate(), { signal });\n\n if (__DEV__ && !this.#timeState.value) {\n logMissingFeature(this.localName, this.#timeState.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n this.#releaseControlsVisibilityLock();\n this.#resumeIfDragPaused();\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#releaseControlsVisibilityLock();\n this.#resumeIfDragPaused();\n this.#slider?.destroy();\n super.destroyCallback();\n }\n\n // createSlider's destroy() does not fire onDragEnd, so a teardown mid-drag\n // would leave playback paused. Called from both disconnect and destroy paths\n // before super so the PlayerController is still attached.\n #resumeIfDragPaused(): void {\n this.#core.endDrag(this.#playbackState.value);\n }\n\n #releaseControlsVisibilityLock(): void {\n this.#releaseControlsLock?.();\n this.#releaseControlsLock = null;\n }\n\n protected override willUpdate(_changed: PropertyValues): void {\n super.willUpdate(_changed);\n this.#core.setProps({\n label: this.label,\n changeThrottle: this.changeThrottle,\n step: this.step,\n largeStep: this.largeStep,\n orientation: this.orientation,\n disabled: this.disabled,\n thumbAlignment: this.thumbAlignment,\n pauseOnDrag: this.pauseOnDrag,\n });\n this.#core.setFormatLocale(this.#i18n.locale);\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n if (!this.#slider) return;\n\n const time = this.#timeState.value;\n const buffer = this.#bufferState.value;\n if (!time) return;\n\n this.#core.setInput(this.#slider.input.current);\n const media = { ...time, ...(buffer ?? { buffered: [], seekable: [] }) };\n this.#core.setMedia(media);\n const state = this.#core.getState();\n\n const cssVars = getTimeSliderCSSVars(this.#slider.adjustForAlignment(state));\n const thumbAttrs = this.#core.getAttrs(state);\n\n applyStyles(this, cssVars);\n\n // Domain-specific data attributes on root (includes data-seeking).\n applyStateDataAttrs(this, state, TimeSliderDataAttrs);\n\n // Provide context to child elements with base slider data attrs.\n this.#provider.setValue({\n state,\n stateAttrMap: TimeSliderDataAttrs,\n pointerValue: this.#core.rawValueFromPercent(state.pointerPercent),\n thumbAttrs: {\n ...thumbAttrs,\n 'aria-label': translateText(thumbAttrs['aria-label'], this.#i18n.value),\n 'aria-valuetext': translateText(\n thumbAttrs['aria-valuetext'],\n this.#i18n.value,\n this.#core.getValueTextParams(state)\n ),\n },\n thumbProps: this.#slider.thumbProps,\n formatValue: (value) => formatTime(value, state.duration, { locale: this.#i18n.locale }),\n });\n }\n}\n","import type { TooltipGroupCore } from '@videojs/core';\nimport { createContext } from '@videojs/element/context';\n\nconst TOOLTIP_GROUP_CONTEXT_KEY = Symbol('@videojs/tooltip-group');\n\nexport const tooltipGroupContext = createContext<TooltipGroupCore>(TOOLTIP_GROUP_CONTEXT_KEY);\n","import { MediaElement } from '../media-element';\n\nfunction hasAuthoredContent(host: HTMLElement): boolean {\n return Array.from(host.childNodes).some((node) => !!node.textContent?.trim());\n}\n\n/** Label region inside `media-tooltip`; parent syncs text from the trigger when linked to a media button. */\nexport class TooltipLabelElement extends MediaElement {\n static readonly tagName = 'media-tooltip-label';\n\n #hasAuthoredContent = false;\n\n static findIn(host: HTMLElement): TooltipLabelElement | null {\n return host.querySelector(TooltipLabelElement.tagName);\n }\n\n static create(): TooltipLabelElement {\n return document.createElement(TooltipLabelElement.tagName) as TooltipLabelElement;\n }\n\n override connectedCallback(): void {\n this.#hasAuthoredContent ||= hasAuthoredContent(this);\n super.connectedCallback();\n }\n\n setSyncedText(text: string): void {\n if (this.#hasAuthoredContent) return;\n this.textContent = text;\n }\n}\n","import { MediaElement } from '../media-element';\n\n/** Shortcut hint inside `media-tooltip`. CSS skins: `class=\"media-tooltip__kbd\"`; Tailwind skins: `class` from `popup.tooltipShortcut`. */\nexport class TooltipShortcutElement extends MediaElement {\n static readonly tagName = 'media-tooltip-shortcut';\n\n static findIn(host: HTMLElement): TooltipShortcutElement | null {\n return host.querySelector(TooltipShortcutElement.tagName);\n }\n\n static create(): TooltipShortcutElement {\n return document.createElement(TooltipShortcutElement.tagName) as TooltipShortcutElement;\n }\n\n setSyncedShortcut(shortcut: string | undefined): void {\n if (shortcut) {\n this.textContent = shortcut;\n this.hidden = false;\n } else {\n this.textContent = '';\n this.hidden = true;\n }\n }\n}\n","import {\n type ButtonState,\n POPUP_HOST_ATTR,\n TooltipCore,\n TooltipCSSVars,\n TooltipDataAttrs,\n type TooltipInput,\n} from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createTooltip,\n createTransition,\n HOTKEY_SHORTCUT_CHANGE_EVENT,\n type PositioningBoundary,\n type TooltipApi,\n type TooltipChangeDetails,\n type TooltipOpenChangeReason,\n} from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { State } from '@videojs/store';\nimport { SnapshotController } from '@videojs/store/html';\nimport { listen, tryHidePopover, tryShowPopover } from '@videojs/utils/dom';\nimport { isFunction } from '@videojs/utils/predicate';\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { containerContext } from '../../player/context';\nimport { popupGroupContext } from '../../player/popup-group-context';\nimport { MediaElement } from '../media-element';\nimport { PositionController } from '../position-controller';\nimport { tooltipGroupContext } from './context';\nimport { TooltipLabelElement } from './tooltip-label-element';\nimport { TooltipShortcutElement } from './tooltip-shortcut-element';\n\ntype TriggerElement = HTMLElement & {\n getLabel(): Text | string | undefined;\n getResolvedLabel?(): string | undefined;\n getShortcut?: (() => string | undefined) | undefined;\n $state: State<ButtonState>;\n};\n\nfunction isLabelTrigger(el: HTMLElement): el is TriggerElement {\n return '$state' in el;\n}\n\nexport class TooltipElement extends MediaElement {\n static readonly tagName = 'media-tooltip';\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 delay: { type: Number },\n closeDelay: { type: Number, attribute: 'close-delay' },\n disableHoverablePopup: { type: Boolean, attribute: 'disable-hoverable-popup' },\n disabled: { type: Boolean },\n boundary: { type: String },\n trigger: { type: String },\n } satisfies PropertyDeclarationMap<keyof TooltipCore.Props | 'boundary' | 'trigger'>;\n\n open = TooltipCore.defaultProps.open;\n defaultOpen = TooltipCore.defaultProps.defaultOpen;\n side = TooltipCore.defaultProps.side;\n align = TooltipCore.defaultProps.align;\n delay = TooltipCore.defaultProps.delay;\n closeDelay = TooltipCore.defaultProps.closeDelay;\n disableHoverablePopup = TooltipCore.defaultProps.disableHoverablePopup;\n disabled = TooltipCore.defaultProps.disabled;\n boundary: PositioningBoundary = 'container';\n trigger = '';\n\n readonly #core = new TooltipCore();\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #groupConsumer = new ContextConsumer(this, { context: tooltipGroupContext });\n readonly #containerCtx = new ContextConsumer(this, { context: containerContext, subscribe: true });\n readonly #popupGroupCtx = new ContextConsumer(this, { context: popupGroupContext });\n readonly #position = new PositionController(this);\n #tooltip: TooltipApi | null = null;\n #snapshot: SnapshotController<TooltipInput> | null = null;\n\n // Cleanup controllers\n #disconnect: AbortController | null = null;\n #triggerAbort: AbortController | null = null;\n #currentTrigger: HTMLElement | 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.#tooltip = createTooltip({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: TooltipChangeDetails) => {\n this.open = nextOpen;\n this.dispatchEvent(new CustomEvent('open-change', { detail: { open: nextOpen, ...details } }));\n },\n delay: () => this.delay,\n closeDelay: () => this.closeDelay,\n disableHoverablePopup: () => this.disableHoverablePopup,\n disabled: () => this.disabled,\n // Lazy getter — group may arrive after connect via context.\n group: () => this.#groupConsumer.value,\n popupGroup: () => this.#popupGroupCtx.value,\n });\n\n // Register self as the popup element — the element IS the popup.\n this.#tooltip.setPopupElement(this);\n\n // Apply popup event handlers (pointerenter/leave, focusout) to self.\n applyElementProps(this, this.#tooltip.popupProps, { signal: this.#disconnect.signal });\n\n // Subscribe to interaction state for reactive updates.\n if (this.#snapshot) {\n this.#snapshot.track(this.#tooltip.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#tooltip.input);\n }\n }\n\n protected override firstUpdated(changed: PropertyValues): void {\n super.firstUpdated(changed);\n\n // Uncontrolled mode: open if `defaultOpen` is set. Controlled `open`\n // is already synced by `willUpdate` on the first render cycle.\n if (this.defaultOpen && !this.open) {\n this.#tooltip?.open();\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupTrigger();\n this.#tooltip?.destroy();\n this.#tooltip = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n close(reason: TooltipOpenChangeReason = 'imperative-action'): void {\n this.#tooltip?.close(reason);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n\n // Sync controlled open state\n if (this.#tooltip && changed.has('open')) {\n const { active: interactionOpen } = this.#tooltip.input.current;\n if (this.open !== interactionOpen) {\n if (this.open) {\n this.#tooltip.open();\n } else {\n this.#tooltip.close();\n }\n }\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n if (!this.#tooltip) return;\n\n const triggerEl = this.#position.findTrigger(this.trigger);\n this.#syncTrigger(triggerEl);\n\n if (this.#currentTrigger && isLabelTrigger(this.#currentTrigger)) {\n this.#syncContent(this.#currentTrigger);\n }\n\n // Derive state from core + input.\n const input = this.#tooltip.input.current;\n this.#core.setInput(input);\n const state = this.#core.getState();\n\n // Apply popup ARIA and data attributes to self.\n applyElementProps(this, this.#core.getPopupAttrs(state));\n applyStateDataAttrs(this, state, TooltipDataAttrs);\n\n // Show/hide via Popover API AFTER data attributes are applied so\n // `data-starting-style` is present before the first visible frame.\n if (state.open) {\n tryShowPopover(this);\n } else {\n tryHidePopover(this);\n }\n\n // Skip positioning when closed — no rects to measure.\n if (!state.open) {\n this.#position.cleanup();\n return;\n }\n\n this.#position.sync({\n anchorName: this.id,\n position: { side: state.side, align: state.align },\n trigger: this.#currentTrigger,\n boundary: this.boundary,\n container: this.#containerCtx.value?.container ?? null,\n cssVars: TooltipCSSVars,\n onSideChange: (side) => this.setAttribute(TooltipDataAttrs.side, side),\n });\n }\n\n // --- Trigger management ---\n\n #syncTrigger(triggerEl: HTMLElement | null): void {\n if (triggerEl === this.#currentTrigger) return;\n\n this.#position.cleanup();\n this.#cleanupTrigger();\n this.#currentTrigger = triggerEl;\n this.#tooltip?.setTriggerElement(triggerEl);\n\n if (triggerEl && this.#tooltip) {\n this.#triggerAbort = new AbortController();\n applyElementProps(triggerEl, this.#tooltip.triggerProps, { signal: this.#triggerAbort.signal });\n\n if (isLabelTrigger(triggerEl)) {\n this.#syncContent(triggerEl);\n triggerEl.$state.subscribe(() => this.#syncContent(triggerEl), {\n signal: this.#triggerAbort.signal,\n });\n listen(triggerEl, HOTKEY_SHORTCUT_CHANGE_EVENT, () => this.#syncContent(triggerEl), {\n signal: this.#triggerAbort.signal,\n });\n }\n }\n }\n\n #syncContent(triggerEl: TriggerElement): void {\n const label = triggerEl.getLabel();\n let resolved = isFunction(triggerEl.getResolvedLabel) ? triggerEl.getResolvedLabel() : undefined;\n if (resolved === undefined && label) {\n resolved = translateText(label, this.#i18n.value);\n }\n const shortcut = triggerEl.getShortcut?.();\n\n let labelEl = TooltipLabelElement.findIn(this);\n let shortcutEl = TooltipShortcutElement.findIn(this);\n\n if (!labelEl && !shortcutEl) {\n if (this.#hostHasAuthoredTooltipContent()) return;\n\n labelEl = TooltipLabelElement.create();\n shortcutEl = TooltipShortcutElement.create();\n this.replaceChildren(labelEl, shortcutEl);\n }\n\n labelEl?.setSyncedText(resolved ?? '');\n shortcutEl?.setSyncedShortcut(shortcut);\n }\n\n #hostHasAuthoredTooltipContent(): boolean {\n return Array.from(this.childNodes).some((node) => !!node.textContent?.trim());\n }\n\n #cleanupTrigger(): void {\n this.#triggerAbort?.abort();\n this.#triggerAbort = null;\n this.#currentTrigger = null;\n }\n}\n","import { TooltipGroupCore } from '@videojs/core';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { tooltipGroupContext } from './context';\n\nexport class TooltipGroupElement extends MediaElement {\n static readonly tagName = 'media-tooltip-group';\n\n static override properties = {\n delay: { type: Number },\n closeDelay: { type: Number, attribute: 'close-delay' },\n timeout: { type: Number },\n } satisfies PropertyDeclarationMap<keyof TooltipGroupCore.Props>;\n\n delay = TooltipGroupCore.defaultProps.delay;\n closeDelay = TooltipGroupCore.defaultProps.closeDelay;\n timeout = TooltipGroupCore.defaultProps.timeout;\n\n readonly #core = new TooltipGroupCore();\n readonly #provider = new ContextProvider(this, { context: tooltipGroupContext, initialValue: this.#core });\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n this.#core.setProps(this);\n this.#provider.setValue(this.#core);\n }\n}\n","import {\n createInputIndicatorLabels,\n getVolumeIndicatorDisplayValue,\n VolumeIndicatorCore,\n VolumeIndicatorCSSVars,\n VolumeIndicatorDataAttrs,\n} from '@videojs/core';\nimport { createTransition } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap } from '@videojs/element';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { InputIndicatorElement, type InputIndicatorOptions } from '../input-indicator/input-indicator-element';\nimport { LiveIndicator } from '../input-indicator/live-indicator';\n\nexport class VolumeIndicatorElement extends InputIndicatorElement<VolumeIndicatorCore.State> {\n static readonly tagName = 'media-volume-indicator';\n\n static override properties = {\n closeDelay: { type: Number, attribute: 'close-delay' },\n } satisfies PropertyDeclarationMap<'closeDelay'>;\n\n closeDelay: number | undefined;\n\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #core = new VolumeIndicatorCore();\n readonly #transition = createTransition();\n readonly #liveIndicator = new LiveIndicator({\n host: this,\n dataAttrs: VolumeIndicatorDataAttrs,\n render: renderVolumeIndicator,\n });\n readonly #options = { replayOnUpdate: false } satisfies InputIndicatorOptions;\n\n protected get core() {\n return this.#core;\n }\n\n protected get transition() {\n return this.#transition;\n }\n\n protected get liveIndicator() {\n return this.#liveIndicator;\n }\n\n protected override get options() {\n return this.#options;\n }\n\n protected override syncCoreProps(): void {\n this.#core.setProps({\n closeDelay: this.closeDelay,\n labels: createInputIndicatorLabels(this.#i18n.value),\n });\n }\n}\n\nfunction renderVolumeIndicator(element: HTMLElement, state: VolumeIndicatorCore.State): void {\n const fill = element.querySelector<HTMLElement>('media-volume-indicator-fill');\n const value = element.querySelector('media-volume-indicator-value');\n\n if (state.fill) {\n fill?.style.setProperty(VolumeIndicatorCSSVars.fill, state.fill);\n } else {\n fill?.style.removeProperty(VolumeIndicatorCSSVars.fill);\n }\n\n if (value) {\n value.textContent = getVolumeIndicatorDisplayValue(state);\n }\n}\n","import { MediaElement } from '../media-element';\n\nexport class VolumeIndicatorFillElement extends MediaElement {\n static readonly tagName = 'media-volume-indicator-fill';\n}\n","import { MediaElement } from '../media-element';\n\nexport class VolumeIndicatorValueElement extends MediaElement {\n static readonly tagName = 'media-volume-indicator-value';\n}\n","import { VolumeSliderCore, VolumeSliderDataAttrs } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createSlider,\n createWheelStep,\n getSliderCSSVars,\n logMissingFeature,\n type SliderApi,\n selectControls,\n selectVolume,\n} from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { applyStyles, isRTL } from '@videojs/utils/dom';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\nimport { sliderContext } from '../slider/context';\n\nexport class VolumeSliderElement extends MediaElement {\n static readonly tagName = 'media-volume-slider';\n\n static override properties = {\n label: { type: String },\n step: { type: Number },\n largeStep: { type: Number, attribute: 'large-step' },\n wheelStep: { type: Number, attribute: 'wheel-step' },\n orientation: { type: String },\n disabled: { type: Boolean },\n thumbAlignment: { type: String, attribute: 'thumb-alignment' },\n } satisfies PropertyDeclarationMap<Exclude<keyof VolumeSliderCore.Props, 'value' | 'min' | 'max'>>;\n\n label: Text | string = '';\n step = VolumeSliderCore.defaultProps.step;\n largeStep = VolumeSliderCore.defaultProps.largeStep;\n wheelStep = VolumeSliderCore.defaultProps.wheelStep;\n orientation = VolumeSliderCore.defaultProps.orientation;\n disabled = VolumeSliderCore.defaultProps.disabled;\n thumbAlignment = VolumeSliderCore.defaultProps.thumbAlignment;\n\n readonly #core = new VolumeSliderCore();\n readonly #controlsState = new PlayerController(this, playerContext, selectControls);\n readonly #provider = new ContextProvider(this, { context: sliderContext });\n readonly #volumeState = new PlayerController(this, playerContext, selectVolume);\n readonly #i18n = new I18nController(this, i18nContext);\n\n #slider: SliderApi | null = null;\n #disconnect: AbortController | null = null;\n #releaseControlsLock: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#disconnect = new AbortController();\n const signal = this.#disconnect.signal;\n\n const isDisabled = () => {\n const volume = this.#volumeState.value;\n return this.disabled || !volume || volume.volumeAvailability !== 'available';\n };\n const getPercent = () => (this.#volumeState.value?.volume ?? 0) * 100;\n const getStepPercent = () => this.#core.getStepPercent();\n const setVolume = (percent: number) => this.#setVolume(percent);\n\n this.#slider = createSlider({\n getElement: () => this,\n getThumbElement: () => this.querySelector<HTMLElement>('media-slider-thumb'),\n getOrientation: () => this.orientation,\n isRTL: () => isRTL(this),\n isDisabled,\n getPercent,\n getStepPercent,\n getLargeStepPercent: () => this.#core.getLargeStepPercent(),\n onValueChange: setVolume,\n onValueCommit: setVolume,\n onDragStart: () => {\n this.#releaseControlsLock ??= this.#controlsState.value?.requestControlsLock() ?? null;\n this.dispatchEvent(new CustomEvent('drag-start', { bubbles: true }));\n },\n onDragEnd: () => {\n this.#releaseControlsVisibilityLock();\n this.dispatchEvent(new CustomEvent('drag-end', { bubbles: true }));\n },\n adjustPercent: (raw, thumbSize, trackSize) => this.#core.adjustPercentForAlignment(raw, thumbSize, trackSize),\n onResize: () => this.requestUpdate(),\n });\n\n const wheelProps = createWheelStep({\n isDisabled,\n getPercent,\n getStepPercent: () => this.#core.getWheelStepPercent(),\n onValueChange: setVolume,\n });\n\n applyElementProps(this, this.#slider.rootProps, { signal });\n applyElementProps(this, wheelProps, { signal });\n applyStyles(this, this.#slider.rootStyle);\n this.#slider.input.subscribe(() => this.requestUpdate(), { signal });\n\n if (__DEV__ && !this.#volumeState.value) {\n logMissingFeature(this.localName, this.#volumeState.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n this.#releaseControlsVisibilityLock();\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#releaseControlsVisibilityLock();\n this.#slider?.destroy();\n super.destroyCallback();\n }\n\n #releaseControlsVisibilityLock(): void {\n this.#releaseControlsLock?.();\n this.#releaseControlsLock = null;\n }\n\n protected override willUpdate(_changed: PropertyValues): void {\n super.willUpdate(_changed);\n this.#core.setProps(this);\n this.#core.setFormatLocale(this.#i18n.locale);\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n if (!this.#slider) return;\n\n const media = this.#volumeState.value;\n if (!media) return;\n\n this.#core.setInput(this.#slider.input.current);\n this.#core.setMedia(media);\n const state = this.#core.getState();\n\n const cssVars = getSliderCSSVars(this.#slider.adjustForAlignment(state));\n const thumbAttrs = this.#core.getAttrs(state);\n\n applyStyles(this, cssVars);\n\n // Apply data attributes to root.\n applyStateDataAttrs(this, state, VolumeSliderDataAttrs);\n applyElementProps(this, { hidden: state.hidden ? '' : undefined });\n\n // Provide context to child elements.\n this.#provider.setValue({\n state,\n stateAttrMap: VolumeSliderDataAttrs,\n pointerValue: this.#core.valueFromPercent(state.pointerPercent),\n thumbAttrs: {\n ...thumbAttrs,\n 'aria-label': translateText(thumbAttrs['aria-label'], this.#i18n.value),\n 'aria-valuetext': translateText(\n thumbAttrs['aria-valuetext'],\n this.#i18n.value,\n this.#core.getValueTextParams(state)\n ),\n },\n thumbProps: this.#slider.thumbProps,\n formatValue: (value) => `${Math.round(value)}%`,\n });\n }\n\n #setVolume(percent: number): void {\n const media = this.#volumeState.value;\n media?.setVolume(this.#core.valueFromPercent(percent) / 100);\n }\n}\n","import { AlertDialogCloseElement } from '../../ui/alert-dialog/alert-dialog-close-element';\nimport { AlertDialogDescriptionElement } from '../../ui/alert-dialog/alert-dialog-description-element';\nimport { AlertDialogTitleElement } from '../../ui/alert-dialog/alert-dialog-title-element';\nimport { ControlsElement } from '../../ui/controls/controls-element';\nimport { ControlsGroupElement } from '../../ui/controls/controls-group-element';\nimport { ErrorDialogElement } from '../../ui/error-dialog/error-dialog-element';\nimport { MenuCheckboxItemElement } from '../../ui/menu/menu-checkbox-item-element';\nimport { MenuElement } from '../../ui/menu/menu-element';\nimport { MenuGroupElement } from '../../ui/menu/menu-group-element';\nimport { MenuGroupLabelElement } from '../../ui/menu/menu-group-label-element';\nimport { MenuItemElement } from '../../ui/menu/menu-item-element';\nimport { MenuItemIndicatorElement } from '../../ui/menu/menu-item-indicator-element';\nimport { MenuRadioGroupElement } from '../../ui/menu/menu-radio-group-element';\nimport { MenuRadioItemElement } from '../../ui/menu/menu-radio-item-element';\nimport { MenuSeparatorElement } from '../../ui/menu/menu-separator-element';\nimport { SeekIndicatorElement } from '../../ui/seek-indicator/seek-indicator-element';\nimport { SeekIndicatorValueElement } from '../../ui/seek-indicator/seek-indicator-value-element';\nimport { SliderBufferElement } from '../../ui/slider/slider-buffer-element';\nimport { SliderElement } from '../../ui/slider/slider-element';\nimport { SliderFillElement } from '../../ui/slider/slider-fill-element';\nimport { SliderPreviewElement } from '../../ui/slider/slider-preview-element';\nimport { SliderThumbElement } from '../../ui/slider/slider-thumb-element';\nimport { SliderThumbnailElement } from '../../ui/slider/slider-thumbnail-element';\nimport { SliderTrackElement } from '../../ui/slider/slider-track-element';\nimport { SliderValueElement } from '../../ui/slider/slider-value-element';\nimport { StatusAnnouncerElement } from '../../ui/status-announcer/status-announcer-element';\nimport { StatusIndicatorElement } from '../../ui/status-indicator/status-indicator-element';\nimport { StatusIndicatorValueElement } from '../../ui/status-indicator/status-indicator-value-element';\nimport { TimeElement } from '../../ui/time/time-element';\nimport { TimeGroupElement } from '../../ui/time/time-group-element';\nimport { TimeSeparatorElement } from '../../ui/time/time-separator-element';\nimport { TimeSliderElement } from '../../ui/time-slider/time-slider-element';\nimport { TooltipElement } from '../../ui/tooltip/tooltip-element';\nimport { TooltipGroupElement } from '../../ui/tooltip/tooltip-group-element';\nimport { TooltipLabelElement } from '../../ui/tooltip/tooltip-label-element';\nimport { TooltipShortcutElement } from '../../ui/tooltip/tooltip-shortcut-element';\nimport { VolumeIndicatorElement } from '../../ui/volume-indicator/volume-indicator-element';\nimport { VolumeIndicatorFillElement } from '../../ui/volume-indicator/volume-indicator-fill-element';\nimport { VolumeIndicatorValueElement } from '../../ui/volume-indicator/volume-indicator-value-element';\nimport { VolumeSliderElement } from '../../ui/volume-slider/volume-slider-element';\nimport { safeDefine } from '../safe-define';\n\n// ── Define functions ────────────────────────────────────────────────────\n\nexport function defineMenu(): void {\n // Root first — part elements consume its context.\n safeDefine(MenuElement);\n safeDefine(MenuItemElement);\n safeDefine(MenuGroupLabelElement);\n safeDefine(MenuSeparatorElement);\n safeDefine(MenuGroupElement);\n safeDefine(MenuRadioGroupElement);\n safeDefine(MenuRadioItemElement);\n safeDefine(MenuCheckboxItemElement);\n safeDefine(MenuItemIndicatorElement);\n}\n\nexport function defineControls(): void {\n safeDefine(ControlsElement);\n safeDefine(ControlsGroupElement);\n}\n\nexport function defineErrorDialog(): void {\n // Parent first — child elements consume its context.\n safeDefine(ErrorDialogElement);\n safeDefine(AlertDialogCloseElement);\n safeDefine(AlertDialogDescriptionElement);\n safeDefine(AlertDialogTitleElement);\n}\n\nexport function defineInputIndicators(): void {\n safeDefine(StatusAnnouncerElement);\n safeDefine(StatusIndicatorElement);\n safeDefine(StatusIndicatorValueElement);\n safeDefine(VolumeIndicatorElement);\n safeDefine(VolumeIndicatorFillElement);\n safeDefine(VolumeIndicatorValueElement);\n safeDefine(SeekIndicatorElement);\n safeDefine(SeekIndicatorValueElement);\n}\n\n/** Shared slider sub-elements used by all slider types. */\nexport function defineSliderParts(): void {\n safeDefine(SliderFillElement);\n safeDefine(SliderPreviewElement);\n safeDefine(SliderThumbElement);\n safeDefine(SliderTrackElement);\n safeDefine(SliderValueElement);\n}\n\nexport function defineSlider(): void {\n safeDefine(SliderElement);\n defineSliderParts();\n}\n\nexport function defineTime(): void {\n safeDefine(TimeElement);\n safeDefine(TimeGroupElement);\n safeDefine(TimeSeparatorElement);\n}\n\nexport function defineTimeSlider(): void {\n safeDefine(TimeSliderElement);\n defineSliderParts();\n safeDefine(SliderBufferElement);\n safeDefine(SliderThumbnailElement);\n}\n\nexport function defineTooltip(): void {\n safeDefine(TooltipGroupElement);\n safeDefine(TooltipLabelElement);\n safeDefine(TooltipShortcutElement);\n safeDefine(TooltipElement);\n}\n\nexport function defineVolumeSlider(): void {\n safeDefine(VolumeSliderElement);\n defineSliderParts();\n}\n\nexport function defineSliders(): void {\n safeDefine(TimeSliderElement);\n safeDefine(VolumeSliderElement);\n defineSliderParts();\n safeDefine(SliderBufferElement);\n safeDefine(SliderThumbnailElement);\n}\n"],"mappings":"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"}