@videojs/html 10.0.0-beta.22 → 10.0.0-beta.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/cdn/{abort-C9UiBdVU.js → abort-0nUH9HXc.js} +1 -1
- package/cdn/{abort-C9UiBdVU.js.map → abort-0nUH9HXc.js.map} +1 -1
- package/cdn/{abort-DsTff8mS.js → abort-DQxwCs92.js} +1 -1
- package/cdn/{abort-DsTff8mS.js.map → abort-DQxwCs92.js.map} +1 -1
- package/cdn/audio-minimal-ui.dev.js +2 -4
- package/cdn/audio-minimal-ui.js +1 -1
- package/cdn/audio-minimal.dev.js +22 -20
- package/cdn/audio-minimal.dev.js.map +1 -1
- package/cdn/audio-minimal.js +1 -1
- package/cdn/audio-minimal.js.map +1 -1
- package/cdn/audio-ui.dev.js +2 -4
- package/cdn/audio-ui.js +1 -1
- package/cdn/audio.dev.js +22 -19
- package/cdn/audio.dev.js.map +1 -1
- package/cdn/audio.js +1 -1
- package/cdn/audio.js.map +1 -1
- package/cdn/background.dev.js +4 -4
- package/cdn/background.dev.js.map +1 -1
- package/cdn/background.js +1 -1
- package/cdn/background.js.map +1 -1
- package/cdn/base-CaXY3kMA.js +66 -0
- package/cdn/base-CaXY3kMA.js.map +1 -0
- package/cdn/base-JIGv_MlJ.js +2 -0
- package/cdn/base-JIGv_MlJ.js.map +1 -0
- package/cdn/compounds-CJ9NGNJr.js +8 -0
- package/cdn/compounds-CJ9NGNJr.js.map +1 -0
- package/cdn/{compounds-DD3MYkSc.js → compounds-DxdDY3jr.js} +2872 -537
- package/cdn/compounds-DxdDY3jr.js.map +1 -0
- package/cdn/create-player-B2W5yr5I.js +7 -0
- package/cdn/create-player-B2W5yr5I.js.map +1 -0
- package/cdn/{create-player-BKLw7l1a.js → create-player-_WED6HtK.js} +288 -183
- package/cdn/create-player-_WED6HtK.js.map +1 -0
- package/cdn/default-BtA2xVd7.js +33 -0
- package/cdn/default-BtA2xVd7.js.map +1 -0
- package/cdn/default-Ci15Ic2n.js +2 -0
- package/cdn/default-Ci15Ic2n.js.map +1 -0
- package/cdn/default-Ciudg7Lh.js +32 -0
- package/cdn/default-Ciudg7Lh.js.map +1 -0
- package/cdn/default-CmbctS5n.js +2 -0
- package/cdn/default-CmbctS5n.js.map +1 -0
- package/cdn/hls-CoCXCB8b.js +41 -0
- package/cdn/hls-CoCXCB8b.js.map +1 -0
- package/cdn/{hls-CcSAx_3I.js → hls-DjqAxSvY.js} +236 -21
- package/cdn/hls-DjqAxSvY.js.map +1 -0
- package/cdn/{hotkey-element-BONs_FyJ.js → hotkey-element-89VAnCrc.js} +47 -52
- package/cdn/hotkey-element-89VAnCrc.js.map +1 -0
- package/cdn/hotkey-element-CmUxzW-C.js +2 -0
- package/cdn/hotkey-element-CmUxzW-C.js.map +1 -0
- package/cdn/live-button-element-BMneBAzX.js +208 -0
- package/cdn/live-button-element-BMneBAzX.js.map +1 -0
- package/cdn/live-button-element-CPEl1qK3.js +2 -0
- package/cdn/live-button-element-CPEl1qK3.js.map +1 -0
- package/cdn/live-video-minimal.dev.d.ts +1 -0
- package/cdn/live-video-minimal.dev.js +193 -0
- package/cdn/live-video-minimal.dev.js.map +1 -0
- package/cdn/live-video-minimal.js +2 -0
- package/cdn/live-video-minimal.js.map +1 -0
- package/cdn/live-video.dev.d.ts +1 -0
- package/cdn/live-video.dev.js +194 -0
- package/cdn/live-video.dev.js.map +1 -0
- package/cdn/live-video.js +2 -0
- package/cdn/live-video.js.map +1 -0
- package/cdn/media/dash-video.dev.js +8 -7
- package/cdn/media/dash-video.dev.js.map +1 -1
- package/cdn/media/dash-video.js +6 -6
- package/cdn/media/dash-video.js.map +1 -1
- package/cdn/media/hls-video.dev.js +4 -4
- package/cdn/media/hls-video.js +1 -1
- package/cdn/media/hls-video.js.map +1 -1
- package/cdn/media/mux-audio.dev.js +8 -6
- package/cdn/media/mux-audio.dev.js.map +1 -1
- package/cdn/media/mux-audio.js +1 -1
- package/cdn/media/mux-audio.js.map +1 -1
- package/cdn/media/mux-video.dev.js +8 -6
- package/cdn/media/mux-video.dev.js.map +1 -1
- package/cdn/media/mux-video.js +1 -1
- package/cdn/media/mux-video.js.map +1 -1
- package/cdn/media/native-hls-video.dev.js +4 -4
- package/cdn/media/native-hls-video.js +1 -1
- package/cdn/media/native-hls-video.js.map +1 -1
- package/cdn/media/simple-hls-video.dev.js +3604 -2632
- package/cdn/media/simple-hls-video.dev.js.map +1 -1
- package/cdn/media/simple-hls-video.js +7 -7
- package/cdn/media/simple-hls-video.js.map +1 -1
- package/cdn/media-attach-mixin-0gzahJxP.js +2 -0
- package/cdn/{media-attach-mixin-C2wz0Qbd.js.map → media-attach-mixin-0gzahJxP.js.map} +1 -1
- package/cdn/{media-attach-mixin-CYoNe7Sh.js → media-attach-mixin-C1KQy-y8.js} +2 -2
- package/cdn/{media-attach-mixin-CYoNe7Sh.js.map → media-attach-mixin-C1KQy-y8.js.map} +1 -1
- package/cdn/minimal-BGKTRgLy.js +2 -0
- package/cdn/minimal-BGKTRgLy.js.map +1 -0
- package/cdn/minimal-BY8ZmNCh.js +33 -0
- package/cdn/minimal-BY8ZmNCh.js.map +1 -0
- package/cdn/minimal-D-o7FGL2.js +2 -0
- package/cdn/minimal-D-o7FGL2.js.map +1 -0
- package/cdn/minimal-b3s_qClU.js +32 -0
- package/cdn/minimal-b3s_qClU.js.map +1 -0
- package/cdn/minimal-ui-B0PWg1gR.js +2 -0
- package/cdn/minimal-ui-B0PWg1gR.js.map +1 -0
- package/cdn/minimal-ui-B6AtFmJO.js +2 -0
- package/cdn/minimal-ui-B6AtFmJO.js.map +1 -0
- package/cdn/minimal-ui-BjQUqQ_m.js +26 -0
- package/cdn/minimal-ui-BjQUqQ_m.js.map +1 -0
- package/cdn/minimal-ui-C2NRTvWx.js +38 -0
- package/cdn/minimal-ui-C2NRTvWx.js.map +1 -0
- package/cdn/{mux-BgWl50KW.js → mux-CJn4lTbv.js} +10 -10
- package/cdn/mux-CJn4lTbv.js.map +1 -0
- package/cdn/{mux-BhHIeG3e.js → mux-wKbnuUQu.js} +55 -20
- package/cdn/mux-wKbnuUQu.js.map +1 -0
- package/cdn/native-hls-1-isweaY.js +2 -0
- package/cdn/native-hls-1-isweaY.js.map +1 -0
- package/cdn/native-hls-D4f2-E9D.js +371 -0
- package/cdn/native-hls-D4f2-E9D.js.map +1 -0
- package/cdn/playback-rate-button-element-Ck7CCs0t.js +2 -0
- package/cdn/playback-rate-button-element-Ck7CCs0t.js.map +1 -0
- package/cdn/playback-rate-button-element-DN78puhg.js +79 -0
- package/cdn/playback-rate-button-element-DN78puhg.js.map +1 -0
- package/cdn/player-9_6BPhTP.js +16 -0
- package/cdn/player-9_6BPhTP.js.map +1 -0
- package/cdn/player-C6DIXZpP.js +16 -0
- package/cdn/player-C6DIXZpP.js.map +1 -0
- package/cdn/{player-BVGWmIbQ.js → player-ClV0UtoS.js} +3 -3
- package/cdn/{player-BVGWmIbQ.js.map → player-ClV0UtoS.js.map} +1 -1
- package/cdn/player-D7lHFQo6.js +2 -0
- package/cdn/player-D7lHFQo6.js.map +1 -0
- package/cdn/player-DzqwkiTI.js +2 -0
- package/cdn/{player-ChdQN3H5.js.map → player-DzqwkiTI.js.map} +1 -1
- package/cdn/player-_4EjFnET.js +2 -0
- package/cdn/player-_4EjFnET.js.map +1 -0
- package/cdn/poster-element-DmfmTRCV.js +2 -0
- package/cdn/poster-element-DmfmTRCV.js.map +1 -0
- package/cdn/{player-DX5Ka0vt.js → poster-element-IdY3MYJj.js} +18 -25
- package/cdn/poster-element-IdY3MYJj.js.map +1 -0
- package/cdn/{context-0rI_P6jf.js → predicate-Dqd8wbW6.js} +26 -2
- package/cdn/predicate-Dqd8wbW6.js.map +1 -0
- package/cdn/{context-CEFisYD0.js → predicate-Dxl3IuYh.js} +2 -2
- package/cdn/predicate-Dxl3IuYh.js.map +1 -0
- package/cdn/seek-button-element-BkC8xrVR.js +394 -0
- package/cdn/seek-button-element-BkC8xrVR.js.map +1 -0
- package/cdn/seek-button-element-C0uAXebE.js +2 -0
- package/cdn/seek-button-element-C0uAXebE.js.map +1 -0
- package/cdn/{shallow-equal-xh6Wj-hj.js → shallow-equal-D-fthE54.js} +1 -1
- package/cdn/{shallow-equal-xh6Wj-hj.js.map → shallow-equal-D-fthE54.js.map} +1 -1
- package/cdn/{shallow-equal-Daj3-_LC.js → shallow-equal-DSpD9PMp.js} +1 -1
- package/cdn/{shallow-equal-Daj3-_LC.js.map → shallow-equal-DSpD9PMp.js.map} +1 -1
- package/cdn/skin-element-D0TDGWJH.js +2 -0
- package/cdn/skin-element-D0TDGWJH.js.map +1 -0
- package/cdn/skin-element-mgqcAutZ.js +55 -0
- package/cdn/skin-element-mgqcAutZ.js.map +1 -0
- package/cdn/types-B_4Es-UH.js +20 -0
- package/cdn/types-B_4Es-UH.js.map +1 -0
- package/cdn/types-DRezN4yy.js +2 -0
- package/cdn/types-DRezN4yy.js.map +1 -0
- package/cdn/ui-BH0azXYN.js +2 -0
- package/cdn/ui-BH0azXYN.js.map +1 -0
- package/cdn/ui-B_E6hb1k.js +33 -0
- package/cdn/ui-B_E6hb1k.js.map +1 -0
- package/cdn/ui-ByhUcpaY.js +2 -0
- package/cdn/ui-ByhUcpaY.js.map +1 -0
- package/cdn/ui-DG0AlJbU.js +42 -0
- package/cdn/ui-DG0AlJbU.js.map +1 -0
- package/cdn/{video-host-BtD61mpF.js → video-host-BU9t26fe.js} +29 -16
- package/cdn/{video-host-BtD61mpF.js.map → video-host-BU9t26fe.js.map} +1 -1
- package/cdn/{video-host-LeB1FKfO.js → video-host-CvYvXa8l.js} +10 -10
- package/cdn/{video-host-LeB1FKfO.js.map → video-host-CvYvXa8l.js.map} +1 -1
- package/cdn/video-minimal-ui.dev.js +2 -4
- package/cdn/video-minimal-ui.js +1 -1
- package/cdn/video-minimal.dev.js +83 -20
- package/cdn/video-minimal.dev.js.map +1 -1
- package/cdn/video-minimal.js +1 -1
- package/cdn/video-minimal.js.map +1 -1
- package/cdn/video-ui.dev.js +2 -4
- package/cdn/video-ui.js +1 -1
- package/cdn/video.dev.js +56 -17
- package/cdn/video.dev.js.map +1 -1
- package/cdn/video.js +1 -1
- package/cdn/video.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/background/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/background/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/global.js +6 -0
- package/dist/default/_virtual/inline-css_src/define/global.js.map +1 -0
- package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js +6 -0
- package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -0
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +6 -0
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -0
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +6 -0
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -0
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +6 -0
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -0
- package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
- package/dist/default/define/audio/minimal-skin.css +227 -108
- package/dist/default/define/audio/minimal-skin.js +1 -1
- package/dist/default/define/audio/minimal-skin.js.map +1 -1
- package/dist/default/define/audio/minimal-skin.tailwind.js +3 -2
- package/dist/default/define/audio/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/audio/minimal-ui.js +8 -3
- package/dist/default/define/audio/minimal-ui.js.map +1 -1
- package/dist/default/define/audio/skin.css +253 -108
- package/dist/default/define/audio/skin.js +1 -1
- package/dist/default/define/audio/skin.js.map +1 -1
- package/dist/default/define/audio/skin.tailwind.js +2 -1
- package/dist/default/define/audio/skin.tailwind.js.map +1 -1
- package/dist/default/define/audio/ui.js +10 -1
- package/dist/default/define/audio/ui.js.map +1 -1
- package/dist/default/define/background/skin.css +4 -2
- package/dist/default/define/background/skin.js +1 -1
- package/dist/{dev/define/base.css → default/define/global.css} +12 -8
- package/dist/default/define/live-audio/minimal-skin.css +897 -0
- package/dist/default/define/live-audio/minimal-skin.js +26 -0
- package/dist/default/define/live-audio/minimal-skin.js.map +1 -0
- package/dist/default/define/live-audio/minimal-skin.tailwind.js +29 -0
- package/dist/default/define/live-audio/minimal-skin.tailwind.js.map +1 -0
- package/dist/default/define/live-audio/minimal-ui.js +26 -0
- package/dist/default/define/live-audio/minimal-ui.js.map +1 -0
- package/dist/default/define/live-audio/player.js +18 -0
- package/dist/default/define/live-audio/player.js.map +1 -0
- package/dist/default/define/live-audio/skin.css +939 -0
- package/dist/default/define/live-audio/skin.js +26 -0
- package/dist/default/define/live-audio/skin.js.map +1 -0
- package/dist/default/define/live-audio/skin.tailwind.js +28 -0
- package/dist/default/define/live-audio/skin.tailwind.js.map +1 -0
- package/dist/default/define/live-audio/ui.js +30 -0
- package/dist/default/define/live-audio/ui.js.map +1 -0
- package/dist/default/define/live-video/minimal-skin.css +1593 -0
- package/dist/default/define/live-video/minimal-skin.js +26 -0
- package/dist/default/define/live-video/minimal-skin.js.map +1 -0
- package/dist/default/define/live-video/minimal-skin.tailwind.js +31 -0
- package/dist/default/define/live-video/minimal-skin.tailwind.js.map +1 -0
- package/dist/default/define/live-video/minimal-ui.js +44 -0
- package/dist/default/define/live-video/minimal-ui.js.map +1 -0
- package/dist/default/define/live-video/player.js +18 -0
- package/dist/default/define/live-video/player.js.map +1 -0
- package/dist/default/define/live-video/skin.css +1595 -0
- package/dist/default/define/live-video/skin.js +26 -0
- package/dist/default/define/live-video/skin.js.map +1 -0
- package/dist/default/define/live-video/skin.tailwind.js +29 -0
- package/dist/default/define/live-video/skin.tailwind.js.map +1 -0
- package/dist/default/define/live-video/ui.js +44 -0
- package/dist/default/define/live-video/ui.js.map +1 -0
- package/dist/default/define/shared.css +4 -0
- package/dist/default/define/skin-element.js +3 -3
- package/dist/default/define/skin-element.js.map +1 -1
- package/dist/default/define/tailwind.css +66 -0
- package/dist/default/define/ui/compounds.js +43 -1
- package/dist/default/define/ui/compounds.js.map +1 -1
- package/dist/default/define/ui/menu.js +6 -0
- package/dist/default/define/ui/menu.js.map +1 -0
- package/dist/default/define/ui/playback-rate-menu.js +13 -0
- package/dist/default/define/ui/playback-rate-menu.js.map +1 -0
- package/dist/default/define/ui/seek-indicator-value.js +7 -0
- package/dist/default/define/ui/seek-indicator-value.js.map +1 -0
- package/dist/default/define/ui/seek-indicator.js +9 -0
- package/dist/default/define/ui/seek-indicator.js.map +1 -0
- package/dist/default/define/ui/status-announcer.js +7 -0
- package/dist/default/define/ui/status-announcer.js.map +1 -0
- package/dist/default/define/ui/status-indicator-value.js +7 -0
- package/dist/default/define/ui/status-indicator-value.js.map +1 -0
- package/dist/default/define/ui/status-indicator.js +9 -0
- package/dist/default/define/ui/status-indicator.js.map +1 -0
- package/dist/default/define/ui/volume-indicator-fill.js +7 -0
- package/dist/default/define/ui/volume-indicator-fill.js.map +1 -0
- package/dist/default/define/ui/volume-indicator-value.js +7 -0
- package/dist/default/define/ui/volume-indicator-value.js.map +1 -0
- package/dist/default/define/ui/volume-indicator.js +11 -0
- package/dist/default/define/ui/volume-indicator.js.map +1 -0
- package/dist/default/define/video/minimal-skin.css +571 -147
- package/dist/default/define/video/minimal-skin.js +1 -1
- package/dist/default/define/video/minimal-skin.js.map +1 -1
- package/dist/default/define/video/minimal-skin.tailwind.js +4 -2
- package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/video/minimal-ui.js +13 -3
- package/dist/default/define/video/minimal-ui.js.map +1 -1
- package/dist/default/define/video/skin.css +581 -145
- package/dist/default/define/video/skin.js +1 -1
- package/dist/default/define/video/skin.js.map +1 -1
- package/dist/default/define/video/skin.tailwind.js +3 -2
- package/dist/default/define/video/skin.tailwind.js.map +1 -1
- package/dist/default/define/video/ui.js +11 -1
- package/dist/default/define/video/ui.js.map +1 -1
- package/dist/default/icons/default/index.js +19 -0
- package/dist/default/icons/dist/element/base.js +66 -0
- package/dist/default/icons/dist/element/base.js.map +1 -0
- package/dist/default/icons/dist/element/default/icons.js +25 -0
- package/dist/default/icons/dist/element/default/icons.js.map +1 -0
- package/dist/default/icons/dist/element/default/index.js +10 -0
- package/dist/default/icons/dist/element/default/index.js.map +1 -0
- package/dist/default/icons/dist/element/index.js +11 -0
- package/dist/default/icons/dist/element/index.js.map +1 -0
- package/dist/default/icons/dist/element/minimal/icons.js +25 -0
- package/dist/default/icons/dist/element/minimal/icons.js.map +1 -0
- package/dist/default/icons/dist/element/minimal/index.js +10 -0
- package/dist/default/icons/dist/element/minimal/index.js.map +1 -0
- package/dist/default/icons/dist/html/default/captions-off.js +6 -0
- package/dist/default/icons/dist/html/default/captions-off.js.map +1 -0
- package/dist/default/icons/dist/html/default/captions-on.js +6 -0
- package/dist/default/icons/dist/html/default/captions-on.js.map +1 -0
- package/dist/default/icons/dist/html/default/cast-enter.js +6 -0
- package/dist/default/icons/dist/html/default/cast-enter.js.map +1 -0
- package/dist/default/icons/dist/html/default/cast-exit.js +6 -0
- package/dist/default/icons/dist/html/default/cast-exit.js.map +1 -0
- package/dist/default/icons/dist/html/default/check.js +6 -0
- package/dist/default/icons/dist/html/default/check.js.map +1 -0
- package/dist/default/icons/dist/html/default/chevron.js +6 -0
- package/dist/default/icons/dist/html/default/chevron.js.map +1 -0
- package/dist/default/icons/dist/html/default/fullscreen-enter.js +6 -0
- package/dist/default/icons/dist/html/default/fullscreen-enter.js.map +1 -0
- package/dist/default/icons/dist/html/default/fullscreen-exit.js +6 -0
- package/dist/default/icons/dist/html/default/fullscreen-exit.js.map +1 -0
- package/dist/default/icons/dist/html/default/pause.js +6 -0
- package/dist/default/icons/dist/html/default/pause.js.map +1 -0
- package/dist/default/icons/dist/html/default/pip-enter.js +6 -0
- package/dist/default/icons/dist/html/default/pip-enter.js.map +1 -0
- package/dist/default/icons/dist/html/default/pip-exit.js +6 -0
- package/dist/default/icons/dist/html/default/pip-exit.js.map +1 -0
- package/dist/default/icons/dist/html/default/play.js +6 -0
- package/dist/default/icons/dist/html/default/play.js.map +1 -0
- package/dist/default/icons/dist/html/default/restart.js +6 -0
- package/dist/default/icons/dist/html/default/restart.js.map +1 -0
- package/dist/default/icons/dist/html/default/seek.js +6 -0
- package/dist/default/icons/dist/html/default/seek.js.map +1 -0
- package/dist/default/icons/dist/html/default/spinner.js +6 -0
- package/dist/default/icons/dist/html/default/spinner.js.map +1 -0
- package/dist/default/icons/dist/html/default/volume-high.js +6 -0
- package/dist/default/icons/dist/html/default/volume-high.js.map +1 -0
- package/dist/default/icons/dist/html/default/volume-low.js +6 -0
- package/dist/default/icons/dist/html/default/volume-low.js.map +1 -0
- package/dist/default/icons/dist/html/default/volume-off.js +6 -0
- package/dist/default/icons/dist/html/default/volume-off.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/captions-off.js +6 -0
- package/dist/default/icons/dist/html/minimal/captions-off.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/captions-on.js +6 -0
- package/dist/default/icons/dist/html/minimal/captions-on.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/cast-enter.js +6 -0
- package/dist/default/icons/dist/html/minimal/cast-enter.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/cast-exit.js +6 -0
- package/dist/default/icons/dist/html/minimal/cast-exit.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/check.js +6 -0
- package/dist/default/icons/dist/html/minimal/check.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/chevron.js +6 -0
- package/dist/default/icons/dist/html/minimal/chevron.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/fullscreen-enter.js +6 -0
- package/dist/default/icons/dist/html/minimal/fullscreen-enter.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/fullscreen-exit.js +6 -0
- package/dist/default/icons/dist/html/minimal/fullscreen-exit.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/pause.js +6 -0
- package/dist/default/icons/dist/html/minimal/pause.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/pip-enter.js +6 -0
- package/dist/default/icons/dist/html/minimal/pip-enter.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/pip-exit.js +6 -0
- package/dist/default/icons/dist/html/minimal/pip-exit.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/play.js +6 -0
- package/dist/default/icons/dist/html/minimal/play.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/restart.js +6 -0
- package/dist/default/icons/dist/html/minimal/restart.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/seek.js +6 -0
- package/dist/default/icons/dist/html/minimal/seek.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/spinner.js +6 -0
- package/dist/default/icons/dist/html/minimal/spinner.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/volume-high.js +6 -0
- package/dist/default/icons/dist/html/minimal/volume-high.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/volume-low.js +6 -0
- package/dist/default/icons/dist/html/minimal/volume-low.js.map +1 -0
- package/dist/default/icons/dist/html/minimal/volume-off.js +6 -0
- package/dist/default/icons/dist/html/minimal/volume-off.js.map +1 -0
- package/dist/default/icons/dist/render/default/index.js +17 -15
- package/dist/default/icons/dist/render/default/index.js.map +1 -1
- package/dist/default/icons/dist/render/minimal/index.js +17 -15
- package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
- package/dist/default/icons/element/default/index.js +1 -0
- package/dist/default/icons/element/index.js +1 -0
- package/dist/default/icons/element/minimal/index.js +1 -0
- package/dist/default/icons/index.js +19 -0
- package/dist/default/icons/minimal/index.js +19 -0
- package/dist/default/index.js +26 -1
- package/dist/default/media/mux-audio/index.js +4 -1
- package/dist/default/media/mux-audio/index.js.map +1 -1
- package/dist/default/media/mux-video/index.js +4 -1
- package/dist/default/media/mux-video/index.js.map +1 -1
- package/dist/default/player/context.js.map +1 -1
- package/dist/default/presets/live-audio.js +7 -0
- package/dist/default/presets/live-video.js +7 -0
- package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +3 -2
- package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/buffering.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/buffering.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js +3 -2
- package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/controls.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/icon.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/icon.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/input-feedback.js +40 -0
- package/dist/default/skins/dist/default/default/tailwind/components/input-feedback.js.map +1 -0
- package/dist/default/skins/dist/default/default/tailwind/components/menu.js +12 -0
- package/dist/default/skins/dist/default/default/tailwind/components/menu.js.map +1 -0
- package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/preview.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/reset.js +7 -0
- package/dist/default/skins/dist/default/default/tailwind/components/reset.js.map +1 -0
- package/dist/default/skins/dist/default/default/tailwind/components/root.js +2 -1
- package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +13 -4
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +4 -2
- package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +3 -2
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/input-feedback.js +41 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/input-feedback.js.map +1 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js +12 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/reset.js +7 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/reset.js.map +1 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +2 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -4
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/store/provider-mixin.js +8 -3
- package/dist/default/store/provider-mixin.js.map +1 -1
- package/dist/default/ui/alert-dialog/alert-dialog-close-element.js +7 -5
- package/dist/default/ui/alert-dialog/alert-dialog-close-element.js.map +1 -1
- package/dist/default/ui/alert-dialog/alert-dialog-element.js +12 -6
- package/dist/default/ui/alert-dialog/alert-dialog-element.js.map +1 -1
- package/dist/default/ui/buffering-indicator/buffering-indicator-element.js +6 -3
- package/dist/default/ui/buffering-indicator/buffering-indicator-element.js.map +1 -1
- package/dist/default/ui/cast-button/cast-button-element.js +2 -2
- package/dist/default/ui/cast-button/cast-button-element.js.map +1 -1
- package/dist/default/ui/controls/controls-element.js +13 -1
- package/dist/default/ui/controls/controls-element.js.map +1 -1
- package/dist/default/ui/error-dialog/error-dialog-element.js +4 -1
- package/dist/default/ui/error-dialog/error-dialog-element.js.map +1 -1
- package/dist/default/ui/gesture/gesture-element.js +12 -8
- package/dist/default/ui/gesture/gesture-element.js.map +1 -1
- package/dist/default/ui/hotkey/hotkey-element.js +11 -7
- package/dist/default/ui/hotkey/hotkey-element.js.map +1 -1
- package/dist/default/ui/input-indicators/input-indicator-element.js +110 -0
- package/dist/default/ui/input-indicators/input-indicator-element.js.map +1 -0
- package/dist/default/ui/input-indicators/live-indicator.js +32 -0
- package/dist/default/ui/input-indicators/live-indicator.js.map +1 -0
- package/dist/default/ui/live-button/live-button-element.js +97 -0
- package/dist/default/ui/live-button/live-button-element.js.map +1 -0
- package/dist/default/ui/media-button-element.js +4 -2
- package/dist/default/ui/media-button-element.js.map +1 -1
- package/dist/default/ui/menu/context.js +10 -0
- package/dist/default/ui/menu/context.js.map +1 -0
- package/dist/default/ui/menu/menu-back-element.js +57 -0
- package/dist/default/ui/menu/menu-back-element.js.map +1 -0
- package/dist/default/ui/menu/menu-checkbox-item-element.js +78 -0
- package/dist/default/ui/menu/menu-checkbox-item-element.js.map +1 -0
- package/dist/default/ui/menu/menu-element.js +285 -0
- package/dist/default/ui/menu/menu-element.js.map +1 -0
- package/dist/default/ui/menu/menu-group-element.js +35 -0
- package/dist/default/ui/menu/menu-group-element.js.map +1 -0
- package/dist/default/ui/menu/menu-item-element.js +96 -0
- package/dist/default/ui/menu/menu-item-element.js.map +1 -0
- package/dist/default/ui/menu/menu-item-indicator-element.js +34 -0
- package/dist/default/ui/menu/menu-item-indicator-element.js.map +1 -0
- package/dist/default/ui/menu/menu-label-element.js +20 -0
- package/dist/default/ui/menu/menu-label-element.js.map +1 -0
- package/dist/default/ui/menu/menu-radio-group-element.js +51 -0
- package/dist/default/ui/menu/menu-radio-group-element.js.map +1 -0
- package/dist/default/ui/menu/menu-radio-item-element.js +84 -0
- package/dist/default/ui/menu/menu-radio-item-element.js.map +1 -0
- package/dist/default/ui/menu/menu-separator-element.js +24 -0
- package/dist/default/ui/menu/menu-separator-element.js.map +1 -0
- package/dist/default/ui/menu/menu-view-element.js +16 -0
- package/dist/default/ui/menu/menu-view-element.js.map +1 -0
- package/dist/default/ui/playback-rate-menu/playback-rate-menu-element.js +47 -0
- package/dist/default/ui/playback-rate-menu/playback-rate-menu-element.js.map +1 -0
- package/dist/default/ui/playback-rate-menu/playback-rate-menu-trigger-element.js +85 -0
- package/dist/default/ui/playback-rate-menu/playback-rate-menu-trigger-element.js.map +1 -0
- package/dist/default/ui/playback-rate-menu/playback-rate-options-element.js +113 -0
- package/dist/default/ui/playback-rate-menu/playback-rate-options-element.js.map +1 -0
- package/dist/default/ui/popover/popover-element.js +44 -16
- package/dist/default/ui/popover/popover-element.js.map +1 -1
- package/dist/default/ui/position-controller.js +11 -6
- package/dist/default/ui/position-controller.js.map +1 -1
- package/dist/default/ui/seek-indicator/seek-indicator-element.js +44 -0
- package/dist/default/ui/seek-indicator/seek-indicator-element.js.map +1 -0
- package/dist/default/ui/seek-indicator/seek-indicator-value-element.js +11 -0
- package/dist/default/ui/seek-indicator/seek-indicator-value-element.js.map +1 -0
- package/dist/default/ui/slider/slider-element.js +8 -4
- package/dist/default/ui/slider/slider-element.js.map +1 -1
- package/dist/default/ui/slider/slider-preview-element.js +9 -6
- package/dist/default/ui/slider/slider-preview-element.js.map +1 -1
- package/dist/default/ui/slider/slider-value-element.js +5 -4
- package/dist/default/ui/slider/slider-value-element.js.map +1 -1
- package/dist/default/ui/status-announcer/status-announcer-element.js +70 -0
- package/dist/default/ui/status-announcer/status-announcer-element.js.map +1 -0
- package/dist/default/ui/status-indicator/status-indicator-element.js +53 -0
- package/dist/default/ui/status-indicator/status-indicator-element.js.map +1 -0
- package/dist/default/ui/status-indicator/status-indicator-value-element.js +11 -0
- package/dist/default/ui/status-indicator/status-indicator-value-element.js.map +1 -0
- package/dist/default/ui/thumbnail/thumbnail-element.js +10 -5
- package/dist/default/ui/thumbnail/thumbnail-element.js.map +1 -1
- package/dist/default/ui/time/time-element.js +8 -4
- package/dist/default/ui/time/time-element.js.map +1 -1
- package/dist/default/ui/time-slider/time-slider-element.js +12 -6
- package/dist/default/ui/time-slider/time-slider-element.js.map +1 -1
- package/dist/default/ui/tooltip/tooltip-element.js +43 -16
- package/dist/default/ui/tooltip/tooltip-element.js.map +1 -1
- package/dist/default/ui/tooltip/tooltip-group-element.js +7 -5
- package/dist/default/ui/tooltip/tooltip-group-element.js.map +1 -1
- package/dist/default/ui/volume-indicator/volume-indicator-element.js +46 -0
- package/dist/default/ui/volume-indicator/volume-indicator-element.js.map +1 -0
- package/dist/default/ui/volume-indicator/volume-indicator-fill-element.js +11 -0
- package/dist/default/ui/volume-indicator/volume-indicator-fill-element.js.map +1 -0
- package/dist/default/ui/volume-indicator/volume-indicator-value-element.js +11 -0
- package/dist/default/ui/volume-indicator/volume-indicator-value-element.js.map +1 -0
- package/dist/default/ui/volume-slider/volume-slider-element.js +10 -5
- package/dist/default/ui/volume-slider/volume-slider-element.js.map +1 -1
- package/dist/dev/_virtual/_rolldown/runtime.js +27 -0
- package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/background/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/background/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/global.js +6 -0
- package/dist/dev/_virtual/inline-css_src/define/global.js.map +1 -0
- package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js +6 -0
- package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -0
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +6 -0
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -0
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +6 -0
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -0
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +6 -0
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -0
- package/dist/dev/_virtual/inline-css_src/define/shared.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/shared.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
- package/dist/dev/define/audio/minimal-skin.css +227 -108
- package/dist/dev/define/audio/minimal-skin.d.ts +2 -2
- package/dist/dev/define/audio/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/audio/minimal-skin.js +18 -14
- package/dist/dev/define/audio/minimal-skin.js.map +1 -1
- package/dist/dev/define/audio/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/audio/minimal-skin.tailwind.js +29 -23
- package/dist/dev/define/audio/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/audio/minimal-ui.js +8 -3
- package/dist/dev/define/audio/minimal-ui.js.map +1 -1
- package/dist/dev/define/audio/player.d.ts +2 -2
- package/dist/dev/define/audio/skin.css +253 -108
- package/dist/dev/define/audio/skin.d.ts +2 -2
- package/dist/dev/define/audio/skin.d.ts.map +1 -1
- package/dist/dev/define/audio/skin.js +18 -13
- package/dist/dev/define/audio/skin.js.map +1 -1
- package/dist/dev/define/audio/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/audio/skin.tailwind.js +27 -21
- package/dist/dev/define/audio/skin.tailwind.js.map +1 -1
- package/dist/dev/define/audio/ui.js +10 -1
- package/dist/dev/define/audio/ui.js.map +1 -1
- package/dist/dev/define/background/player.d.ts +2 -2
- package/dist/dev/define/background/skin.css +4 -2
- package/dist/dev/define/background/skin.d.ts.map +1 -1
- package/dist/dev/define/background/skin.js +1 -1
- package/dist/{default/define/base.css → dev/define/global.css} +12 -8
- package/dist/dev/define/live-audio/minimal-skin.css +897 -0
- package/dist/dev/define/live-audio/minimal-skin.d.ts +17 -0
- package/dist/dev/define/live-audio/minimal-skin.d.ts.map +1 -0
- package/dist/dev/define/live-audio/minimal-skin.js +78 -0
- package/dist/dev/define/live-audio/minimal-skin.js.map +1 -0
- package/dist/dev/define/live-audio/minimal-skin.tailwind.d.ts +14 -0
- package/dist/dev/define/live-audio/minimal-skin.tailwind.d.ts.map +1 -0
- package/dist/dev/define/live-audio/minimal-skin.tailwind.js +81 -0
- package/dist/dev/define/live-audio/minimal-skin.tailwind.js.map +1 -0
- package/dist/dev/define/live-audio/minimal-ui.d.ts +1 -0
- package/dist/dev/define/live-audio/minimal-ui.js +26 -0
- package/dist/dev/define/live-audio/minimal-ui.js.map +1 -0
- package/dist/dev/define/live-audio/player.d.ts +17 -0
- package/dist/dev/define/live-audio/player.d.ts.map +1 -0
- package/dist/dev/define/live-audio/player.js +18 -0
- package/dist/dev/define/live-audio/player.js.map +1 -0
- package/dist/dev/define/live-audio/skin.css +939 -0
- package/dist/dev/define/live-audio/skin.d.ts +17 -0
- package/dist/dev/define/live-audio/skin.d.ts.map +1 -0
- package/dist/dev/define/live-audio/skin.js +85 -0
- package/dist/dev/define/live-audio/skin.js.map +1 -0
- package/dist/dev/define/live-audio/skin.tailwind.d.ts +14 -0
- package/dist/dev/define/live-audio/skin.tailwind.d.ts.map +1 -0
- package/dist/dev/define/live-audio/skin.tailwind.js +80 -0
- package/dist/dev/define/live-audio/skin.tailwind.js.map +1 -0
- package/dist/dev/define/live-audio/ui.d.ts +1 -0
- package/dist/dev/define/live-audio/ui.js +30 -0
- package/dist/dev/define/live-audio/ui.js.map +1 -0
- package/dist/dev/define/live-video/minimal-skin.css +1593 -0
- package/dist/dev/define/live-video/minimal-skin.d.ts +17 -0
- package/dist/dev/define/live-video/minimal-skin.d.ts.map +1 -0
- package/dist/dev/define/live-video/minimal-skin.js +160 -0
- package/dist/dev/define/live-video/minimal-skin.js.map +1 -0
- package/dist/dev/define/live-video/minimal-skin.tailwind.d.ts +14 -0
- package/dist/dev/define/live-video/minimal-skin.tailwind.d.ts.map +1 -0
- package/dist/dev/define/live-video/minimal-skin.tailwind.js +161 -0
- package/dist/dev/define/live-video/minimal-skin.tailwind.js.map +1 -0
- package/dist/dev/define/live-video/minimal-ui.d.ts +1 -0
- package/dist/dev/define/live-video/minimal-ui.js +44 -0
- package/dist/dev/define/live-video/minimal-ui.js.map +1 -0
- package/dist/dev/define/live-video/player.d.ts +17 -0
- package/dist/dev/define/live-video/player.d.ts.map +1 -0
- package/dist/dev/define/live-video/player.js +18 -0
- package/dist/dev/define/live-video/player.js.map +1 -0
- package/dist/dev/define/live-video/skin.css +1595 -0
- package/dist/dev/define/live-video/skin.d.ts +17 -0
- package/dist/dev/define/live-video/skin.d.ts.map +1 -0
- package/dist/dev/define/live-video/skin.js +161 -0
- package/dist/dev/define/live-video/skin.js.map +1 -0
- package/dist/dev/define/live-video/skin.tailwind.d.ts +14 -0
- package/dist/dev/define/live-video/skin.tailwind.d.ts.map +1 -0
- package/dist/dev/define/live-video/skin.tailwind.js +160 -0
- package/dist/dev/define/live-video/skin.tailwind.js.map +1 -0
- package/dist/dev/define/live-video/ui.d.ts +1 -0
- package/dist/dev/define/live-video/ui.js +44 -0
- package/dist/dev/define/live-video/ui.js.map +1 -0
- package/dist/dev/define/shared.css +4 -0
- package/dist/dev/define/skin-element.d.ts +1 -1
- package/dist/dev/define/skin-element.d.ts.map +1 -1
- package/dist/dev/define/skin-element.js +3 -3
- package/dist/dev/define/skin-element.js.map +1 -1
- package/dist/dev/define/tailwind.css +66 -0
- package/dist/dev/define/ui/compounds.d.ts +3 -1
- package/dist/dev/define/ui/compounds.d.ts.map +1 -1
- package/dist/dev/define/ui/compounds.js +43 -1
- package/dist/dev/define/ui/compounds.js.map +1 -1
- package/dist/dev/define/ui/menu.d.ts +25 -0
- package/dist/dev/define/ui/menu.d.ts.map +1 -0
- package/dist/dev/define/ui/menu.js +6 -0
- package/dist/dev/define/ui/menu.js.map +1 -0
- package/dist/dev/define/ui/playback-rate-menu.d.ts +13 -0
- package/dist/dev/define/ui/playback-rate-menu.d.ts.map +1 -0
- package/dist/dev/define/ui/playback-rate-menu.js +13 -0
- package/dist/dev/define/ui/playback-rate-menu.js.map +1 -0
- package/dist/dev/define/ui/seek-indicator-value.d.ts +9 -0
- package/dist/dev/define/ui/seek-indicator-value.d.ts.map +1 -0
- package/dist/dev/define/ui/seek-indicator-value.js +7 -0
- package/dist/dev/define/ui/seek-indicator-value.js.map +1 -0
- package/dist/dev/define/ui/seek-indicator.d.ts +11 -0
- package/dist/dev/define/ui/seek-indicator.d.ts.map +1 -0
- package/dist/dev/define/ui/seek-indicator.js +9 -0
- package/dist/dev/define/ui/seek-indicator.js.map +1 -0
- package/dist/dev/define/ui/status-announcer.d.ts +9 -0
- package/dist/dev/define/ui/status-announcer.d.ts.map +1 -0
- package/dist/dev/define/ui/status-announcer.js +7 -0
- package/dist/dev/define/ui/status-announcer.js.map +1 -0
- package/dist/dev/define/ui/status-indicator-value.d.ts +9 -0
- package/dist/dev/define/ui/status-indicator-value.d.ts.map +1 -0
- package/dist/dev/define/ui/status-indicator-value.js +7 -0
- package/dist/dev/define/ui/status-indicator-value.js.map +1 -0
- package/dist/dev/define/ui/status-indicator.d.ts +11 -0
- package/dist/dev/define/ui/status-indicator.d.ts.map +1 -0
- package/dist/dev/define/ui/status-indicator.js +9 -0
- package/dist/dev/define/ui/status-indicator.js.map +1 -0
- package/dist/dev/define/ui/volume-indicator-fill.d.ts +9 -0
- package/dist/dev/define/ui/volume-indicator-fill.d.ts.map +1 -0
- package/dist/dev/define/ui/volume-indicator-fill.js +7 -0
- package/dist/dev/define/ui/volume-indicator-fill.js.map +1 -0
- package/dist/dev/define/ui/volume-indicator-value.d.ts +9 -0
- package/dist/dev/define/ui/volume-indicator-value.d.ts.map +1 -0
- package/dist/dev/define/ui/volume-indicator-value.js +7 -0
- package/dist/dev/define/ui/volume-indicator-value.js.map +1 -0
- package/dist/dev/define/ui/volume-indicator.d.ts +13 -0
- package/dist/dev/define/ui/volume-indicator.d.ts.map +1 -0
- package/dist/dev/define/ui/volume-indicator.js +11 -0
- package/dist/dev/define/ui/volume-indicator.js.map +1 -0
- package/dist/dev/define/video/minimal-skin.css +571 -147
- package/dist/dev/define/video/minimal-skin.d.ts +2 -2
- package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/video/minimal-skin.js +79 -14
- package/dist/dev/define/video/minimal-skin.js.map +1 -1
- package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/video/minimal-skin.tailwind.js +93 -21
- package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/video/minimal-ui.js +13 -3
- package/dist/dev/define/video/minimal-ui.js.map +1 -1
- package/dist/dev/define/video/player.d.ts +2 -2
- package/dist/dev/define/video/skin.css +581 -145
- package/dist/dev/define/video/skin.d.ts +2 -2
- package/dist/dev/define/video/skin.d.ts.map +1 -1
- package/dist/dev/define/video/skin.js +52 -11
- package/dist/dev/define/video/skin.js.map +1 -1
- package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/video/skin.tailwind.js +89 -19
- package/dist/dev/define/video/skin.tailwind.js.map +1 -1
- package/dist/dev/define/video/ui.js +11 -1
- package/dist/dev/define/video/ui.js.map +1 -1
- package/dist/dev/icons/default/index.d.ts +2 -0
- package/dist/dev/icons/default/index.js +19 -0
- package/dist/dev/icons/element/default/index.d.ts +1 -0
- package/dist/dev/icons/element/default/index.js +1 -0
- package/dist/dev/icons/element/index.d.ts +1 -0
- package/dist/dev/icons/element/index.js +1 -0
- package/dist/dev/icons/element/minimal/index.d.ts +1 -0
- package/dist/dev/icons/element/minimal/index.js +1 -0
- package/dist/dev/icons/index.d.ts +2 -0
- package/dist/dev/icons/index.js +19 -0
- package/dist/dev/icons/minimal/index.d.ts +2 -0
- package/dist/dev/icons/minimal/index.js +19 -0
- package/dist/dev/index.d.ts +36 -3
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +26 -1
- package/dist/dev/media/background-video/index.d.ts.map +1 -1
- package/dist/dev/media/container-element.d.ts +2 -2
- package/dist/dev/media/dash-video/index.d.ts +2 -2
- package/dist/dev/media/hls-video/index.d.ts +2 -2
- package/dist/dev/media/mux-audio/index.d.ts +2 -2
- package/dist/dev/media/mux-audio/index.js +4 -1
- package/dist/dev/media/mux-audio/index.js.map +1 -1
- package/dist/dev/media/mux-video/index.d.ts +2 -2
- package/dist/dev/media/mux-video/index.js +4 -1
- package/dist/dev/media/mux-video/index.js.map +1 -1
- package/dist/dev/media/native-hls-video/index.d.ts +2 -2
- package/dist/dev/media/simple-hls-video/index.d.ts +2 -2
- package/dist/dev/node_modules/.pnpm/@lit_context@1.1.6/node_modules/@lit/context/development/index.d.ts +2 -0
- package/dist/dev/node_modules/.pnpm/@lit_context@1.1.6/node_modules/@lit/context/development/lib/context-request-event.d.ts +61 -0
- package/dist/dev/node_modules/.pnpm/@lit_context@1.1.6/node_modules/@lit/context/development/lib/context-request-event.d.ts.map +1 -0
- package/dist/dev/node_modules/.pnpm/@lit_context@1.1.6/node_modules/@lit/context/development/lib/controllers/context-consumer.d.ts +1 -0
- package/dist/dev/node_modules/.pnpm/@lit_context@1.1.6/node_modules/@lit/context/development/lib/controllers/context-provider.d.ts +22 -0
- package/dist/dev/node_modules/.pnpm/@lit_context@1.1.6/node_modules/@lit/context/development/lib/controllers/context-provider.d.ts.map +1 -0
- package/dist/dev/node_modules/.pnpm/@lit_context@1.1.6/node_modules/@lit/context/development/lib/create-context.d.ts +19 -0
- package/dist/dev/node_modules/.pnpm/@lit_context@1.1.6/node_modules/@lit/context/development/lib/create-context.d.ts.map +1 -0
- package/dist/dev/node_modules/.pnpm/@lit_context@1.1.6/node_modules/@lit/context/development/lib/decorators/consume.d.ts +1 -0
- package/dist/dev/node_modules/.pnpm/@lit_context@1.1.6/node_modules/@lit/context/development/lib/decorators/provide.d.ts +1 -0
- package/dist/dev/node_modules/.pnpm/@lit_context@1.1.6/node_modules/@lit/context/development/lib/value-notifier.d.ts +1 -0
- package/dist/dev/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/development/reactive-element.d.ts +116 -0
- package/dist/dev/node_modules/.pnpm/@lit_reactive-element@2.1.2/node_modules/@lit/reactive-element/development/reactive-element.d.ts.map +1 -0
- package/dist/dev/packages/icons/dist/element/base.js +66 -0
- package/dist/dev/packages/icons/dist/element/base.js.map +1 -0
- package/dist/dev/packages/icons/dist/element/default/icons.js +25 -0
- package/dist/dev/packages/icons/dist/element/default/icons.js.map +1 -0
- package/dist/dev/packages/icons/dist/element/default/index.d.ts +1 -0
- package/dist/dev/packages/icons/dist/element/default/index.js +10 -0
- package/dist/dev/packages/icons/dist/element/default/index.js.map +1 -0
- package/dist/dev/packages/icons/dist/element/index.d.ts +1 -0
- package/dist/dev/packages/icons/dist/element/index.js +11 -0
- package/dist/dev/packages/icons/dist/element/index.js.map +1 -0
- package/dist/dev/packages/icons/dist/element/minimal/icons.js +25 -0
- package/dist/dev/packages/icons/dist/element/minimal/icons.js.map +1 -0
- package/dist/dev/packages/icons/dist/element/minimal/index.d.ts +1 -0
- package/dist/dev/packages/icons/dist/element/minimal/index.js +10 -0
- package/dist/dev/packages/icons/dist/element/minimal/index.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/captions-off.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/captions-off.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/captions-on.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/captions-on.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/cast-enter.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/cast-enter.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/cast-exit.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/cast-exit.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/check.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/check.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/chevron.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/chevron.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/fullscreen-enter.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/fullscreen-enter.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/fullscreen-exit.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/fullscreen-exit.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/index.d.ts +23 -0
- package/dist/dev/packages/icons/dist/html/default/index.d.ts.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/pause.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/pause.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/pip-enter.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/pip-enter.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/pip-exit.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/pip-exit.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/play.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/play.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/restart.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/restart.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/seek.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/seek.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/spinner.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/spinner.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/volume-high.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/volume-high.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/volume-low.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/volume-low.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/default/volume-off.js +6 -0
- package/dist/dev/packages/icons/dist/html/default/volume-off.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/captions-off.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/captions-off.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/captions-on.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/captions-on.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/cast-enter.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/cast-enter.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/cast-exit.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/cast-exit.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/check.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/check.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/chevron.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/chevron.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/fullscreen-enter.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/fullscreen-enter.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/fullscreen-exit.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/fullscreen-exit.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/index.d.ts +23 -0
- package/dist/dev/packages/icons/dist/html/minimal/index.d.ts.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/pause.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/pause.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/pip-enter.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/pip-enter.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/pip-exit.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/pip-exit.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/play.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/play.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/restart.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/restart.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/seek.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/seek.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/spinner.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/spinner.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/volume-high.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/volume-high.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/volume-low.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/volume-low.js.map +1 -0
- package/dist/dev/packages/icons/dist/html/minimal/volume-off.js +6 -0
- package/dist/dev/packages/icons/dist/html/minimal/volume-off.js.map +1 -0
- package/dist/dev/packages/icons/dist/render/default/index.js +32 -0
- package/dist/dev/packages/icons/dist/render/default/index.js.map +1 -0
- package/dist/dev/packages/icons/dist/render/minimal/index.js +32 -0
- package/dist/dev/packages/icons/dist/render/minimal/index.js.map +1 -0
- package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/audio.tailwind.js +3 -2
- package/dist/dev/packages/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -0
- package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/components/buffering.js +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/buffering.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/button-group.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js +13 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/controls.js +7 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/controls.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/error.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/icon.js +9 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/icon.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/input-feedback.js +40 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/input-feedback.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/menu.js +12 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/menu.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/overlay.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/playback-rate.js +6 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/playback-rate.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/popup.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
- package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/components/preview.js +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/reset.js +7 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/reset.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/root.js +8 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/root.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/seek.js.map +1 -0
- package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/components/slider.js +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/surface.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/time.js.map +1 -0
- package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/video.tailwind.js +13 -4
- package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -0
- package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/audio.tailwind.js +4 -2
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -0
- package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/components/buffering.js +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/buffering.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/button.js +13 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/button.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/controls.js +7 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/error.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/icon.js +9 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/icon.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/input-feedback.js +41 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/input-feedback.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/menu.js +12 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/playback-rate.js +6 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
- package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/components/preview.js +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/reset.js +7 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/reset.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/root.js +8 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/root.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -0
- package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/components/slider.js +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/time.js.map +1 -0
- package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/video.tailwind.js +6 -4
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -0
- package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
- package/dist/dev/player/context.d.ts +3 -2
- package/dist/dev/player/context.d.ts.map +1 -1
- package/dist/dev/player/context.js.map +1 -1
- package/dist/dev/player/player-controller.d.ts +1 -1
- package/dist/dev/player/player-controller.d.ts.map +1 -1
- package/dist/dev/presets/live-audio.d.ts +7 -0
- package/dist/dev/presets/live-audio.js +7 -0
- package/dist/dev/presets/live-video.d.ts +7 -0
- package/dist/dev/presets/live-video.js +7 -0
- package/dist/dev/store/container-mixin.d.ts +1 -1
- package/dist/dev/store/provider-mixin.d.ts +1 -1
- package/dist/dev/store/provider-mixin.d.ts.map +1 -1
- package/dist/dev/store/provider-mixin.js +8 -3
- package/dist/dev/store/provider-mixin.js.map +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-close-element.d.ts.map +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-close-element.js +7 -5
- package/dist/dev/ui/alert-dialog/alert-dialog-close-element.js.map +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-description-element.d.ts +2 -2
- package/dist/dev/ui/alert-dialog/alert-dialog-element.d.ts.map +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-element.js +12 -6
- package/dist/dev/ui/alert-dialog/alert-dialog-element.js.map +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-title-element.d.ts +2 -2
- package/dist/dev/ui/buffering-indicator/buffering-indicator-element.d.ts.map +1 -1
- package/dist/dev/ui/buffering-indicator/buffering-indicator-element.js +6 -3
- package/dist/dev/ui/buffering-indicator/buffering-indicator-element.js.map +1 -1
- package/dist/dev/ui/captions-button/captions-button-element.d.ts +4 -4
- package/dist/dev/ui/captions-button/captions-button-element.d.ts.map +1 -1
- package/dist/dev/ui/cast-button/cast-button-element.d.ts +6 -6
- package/dist/dev/ui/cast-button/cast-button-element.d.ts.map +1 -1
- package/dist/dev/ui/cast-button/cast-button-element.js +2 -2
- package/dist/dev/ui/cast-button/cast-button-element.js.map +1 -1
- package/dist/dev/ui/controls/controls-element.d.ts.map +1 -1
- package/dist/dev/ui/controls/controls-element.js +13 -1
- package/dist/dev/ui/controls/controls-element.js.map +1 -1
- package/dist/dev/ui/error-dialog/error-dialog-element.d.ts.map +1 -1
- package/dist/dev/ui/error-dialog/error-dialog-element.js +4 -1
- package/dist/dev/ui/error-dialog/error-dialog-element.js.map +1 -1
- package/dist/dev/ui/fullscreen-button/fullscreen-button-element.d.ts +4 -4
- package/dist/dev/ui/fullscreen-button/fullscreen-button-element.d.ts.map +1 -1
- package/dist/dev/ui/gesture/gesture-element.js +12 -8
- package/dist/dev/ui/gesture/gesture-element.js.map +1 -1
- package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.d.ts.map +1 -1
- package/dist/dev/ui/hotkey/hotkey-element.js +11 -7
- package/dist/dev/ui/hotkey/hotkey-element.js.map +1 -1
- package/dist/dev/ui/input-indicators/input-indicator-element.d.ts +37 -0
- package/dist/dev/ui/input-indicators/input-indicator-element.d.ts.map +1 -0
- package/dist/dev/ui/input-indicators/input-indicator-element.js +110 -0
- package/dist/dev/ui/input-indicators/input-indicator-element.js.map +1 -0
- package/dist/dev/ui/input-indicators/live-indicator.d.ts +18 -0
- package/dist/dev/ui/input-indicators/live-indicator.d.ts.map +1 -0
- package/dist/dev/ui/input-indicators/live-indicator.js +32 -0
- package/dist/dev/ui/input-indicators/live-indicator.js.map +1 -0
- package/dist/dev/ui/live-button/live-button-element.d.ts +38 -0
- package/dist/dev/ui/live-button/live-button-element.d.ts.map +1 -0
- package/dist/dev/ui/live-button/live-button-element.js +98 -0
- package/dist/dev/ui/live-button/live-button-element.js.map +1 -0
- package/dist/dev/ui/media-button-element.d.ts +1 -1
- package/dist/dev/ui/media-button-element.js +4 -2
- package/dist/dev/ui/media-button-element.js.map +1 -1
- package/dist/dev/ui/media-element.d.ts +2 -2
- package/dist/dev/ui/menu/context.d.ts +25 -0
- package/dist/dev/ui/menu/context.d.ts.map +1 -0
- package/dist/dev/ui/menu/context.js +10 -0
- package/dist/dev/ui/menu/context.js.map +1 -0
- package/dist/dev/ui/menu/menu-back-element.d.ts +20 -0
- package/dist/dev/ui/menu/menu-back-element.d.ts.map +1 -0
- package/dist/dev/ui/menu/menu-back-element.js +57 -0
- package/dist/dev/ui/menu/menu-back-element.js.map +1 -0
- package/dist/dev/ui/menu/menu-checkbox-item-element.d.ts +24 -0
- package/dist/dev/ui/menu/menu-checkbox-item-element.d.ts.map +1 -0
- package/dist/dev/ui/menu/menu-checkbox-item-element.js +78 -0
- package/dist/dev/ui/menu/menu-checkbox-item-element.js.map +1 -0
- package/dist/dev/ui/menu/menu-element.d.ts +52 -0
- package/dist/dev/ui/menu/menu-element.d.ts.map +1 -0
- package/dist/dev/ui/menu/menu-element.js +285 -0
- package/dist/dev/ui/menu/menu-element.js.map +1 -0
- package/dist/dev/ui/menu/menu-group-element.d.ts +18 -0
- package/dist/dev/ui/menu/menu-group-element.d.ts.map +1 -0
- package/dist/dev/ui/menu/menu-group-element.js +35 -0
- package/dist/dev/ui/menu/menu-group-element.js.map +1 -0
- package/dist/dev/ui/menu/menu-item-element.d.ts +25 -0
- package/dist/dev/ui/menu/menu-item-element.d.ts.map +1 -0
- package/dist/dev/ui/menu/menu-item-element.js +96 -0
- package/dist/dev/ui/menu/menu-item-element.js.map +1 -0
- package/dist/dev/ui/menu/menu-item-indicator-element.d.ts +22 -0
- package/dist/dev/ui/menu/menu-item-indicator-element.d.ts.map +1 -0
- package/dist/dev/ui/menu/menu-item-indicator-element.js +34 -0
- package/dist/dev/ui/menu/menu-item-indicator-element.js.map +1 -0
- package/dist/dev/ui/menu/menu-label-element.d.ts +15 -0
- package/dist/dev/ui/menu/menu-label-element.d.ts.map +1 -0
- package/dist/dev/ui/menu/menu-label-element.js +20 -0
- package/dist/dev/ui/menu/menu-label-element.js.map +1 -0
- package/dist/dev/ui/menu/menu-radio-group-element.d.ts +22 -0
- package/dist/dev/ui/menu/menu-radio-group-element.d.ts.map +1 -0
- package/dist/dev/ui/menu/menu-radio-group-element.js +51 -0
- package/dist/dev/ui/menu/menu-radio-group-element.js.map +1 -0
- package/dist/dev/ui/menu/menu-radio-item-element.d.ts +24 -0
- package/dist/dev/ui/menu/menu-radio-item-element.d.ts.map +1 -0
- package/dist/dev/ui/menu/menu-radio-item-element.js +84 -0
- package/dist/dev/ui/menu/menu-radio-item-element.js.map +1 -0
- package/dist/dev/ui/menu/menu-separator-element.d.ts +12 -0
- package/dist/dev/ui/menu/menu-separator-element.d.ts.map +1 -0
- package/dist/dev/ui/menu/menu-separator-element.js +24 -0
- package/dist/dev/ui/menu/menu-separator-element.js.map +1 -0
- package/dist/dev/ui/menu/menu-view-element.d.ts +11 -0
- package/dist/dev/ui/menu/menu-view-element.d.ts.map +1 -0
- package/dist/dev/ui/menu/menu-view-element.js +16 -0
- package/dist/dev/ui/menu/menu-view-element.js.map +1 -0
- package/dist/dev/ui/mute-button/mute-button-element.d.ts +4 -4
- package/dist/dev/ui/mute-button/mute-button-element.d.ts.map +1 -1
- package/dist/dev/ui/pip-button/pip-button-element.d.ts +4 -4
- package/dist/dev/ui/pip-button/pip-button-element.d.ts.map +1 -1
- package/dist/dev/ui/play-button/play-button-element.d.ts +5 -5
- package/dist/dev/ui/play-button/play-button-element.d.ts.map +1 -1
- package/dist/dev/ui/playback-rate-button/playback-rate-button-element.d.ts +3 -3
- package/dist/dev/ui/playback-rate-button/playback-rate-button-element.d.ts.map +1 -1
- package/dist/dev/ui/playback-rate-menu/playback-rate-menu-element.d.ts +53 -0
- package/dist/dev/ui/playback-rate-menu/playback-rate-menu-element.d.ts.map +1 -0
- package/dist/dev/ui/playback-rate-menu/playback-rate-menu-element.js +48 -0
- package/dist/dev/ui/playback-rate-menu/playback-rate-menu-element.js.map +1 -0
- package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger-element.d.ts +35 -0
- package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger-element.d.ts.map +1 -0
- package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger-element.js +86 -0
- package/dist/dev/ui/playback-rate-menu/playback-rate-menu-trigger-element.js.map +1 -0
- package/dist/dev/ui/playback-rate-menu/playback-rate-options-element.d.ts +31 -0
- package/dist/dev/ui/playback-rate-menu/playback-rate-options-element.d.ts.map +1 -0
- package/dist/dev/ui/playback-rate-menu/playback-rate-options-element.js +114 -0
- package/dist/dev/ui/playback-rate-menu/playback-rate-options-element.js.map +1 -0
- package/dist/dev/ui/popover/popover-element.d.ts +9 -3
- package/dist/dev/ui/popover/popover-element.d.ts.map +1 -1
- package/dist/dev/ui/popover/popover-element.js +44 -16
- package/dist/dev/ui/popover/popover-element.js.map +1 -1
- package/dist/dev/ui/position-controller.js +11 -6
- package/dist/dev/ui/position-controller.js.map +1 -1
- package/dist/dev/ui/poster/poster-element.d.ts +4 -4
- package/dist/dev/ui/poster/poster-element.d.ts.map +1 -1
- package/dist/dev/ui/seek-button/seek-button-element.d.ts +4 -4
- package/dist/dev/ui/seek-button/seek-button-element.d.ts.map +1 -1
- package/dist/dev/ui/seek-indicator/seek-indicator-element.d.ts +25 -0
- package/dist/dev/ui/seek-indicator/seek-indicator-element.d.ts.map +1 -0
- package/dist/dev/ui/seek-indicator/seek-indicator-element.js +44 -0
- package/dist/dev/ui/seek-indicator/seek-indicator-element.js.map +1 -0
- package/dist/dev/ui/seek-indicator/seek-indicator-value-element.d.ts +9 -0
- package/dist/dev/ui/seek-indicator/seek-indicator-value-element.d.ts.map +1 -0
- package/dist/dev/ui/seek-indicator/seek-indicator-value-element.js +11 -0
- package/dist/dev/ui/seek-indicator/seek-indicator-value-element.js.map +1 -0
- package/dist/dev/ui/slider/slider-element.d.ts +2 -2
- package/dist/dev/ui/slider/slider-element.d.ts.map +1 -1
- package/dist/dev/ui/slider/slider-element.js +8 -4
- package/dist/dev/ui/slider/slider-element.js.map +1 -1
- package/dist/dev/ui/slider/slider-preview-element.d.ts.map +1 -1
- package/dist/dev/ui/slider/slider-preview-element.js +9 -6
- package/dist/dev/ui/slider/slider-preview-element.js.map +1 -1
- package/dist/dev/ui/slider/slider-value-element.d.ts.map +1 -1
- package/dist/dev/ui/slider/slider-value-element.js +5 -4
- package/dist/dev/ui/slider/slider-value-element.js.map +1 -1
- package/dist/dev/ui/status-announcer/status-announcer-element.d.ts +23 -0
- package/dist/dev/ui/status-announcer/status-announcer-element.d.ts.map +1 -0
- package/dist/dev/ui/status-announcer/status-announcer-element.js +70 -0
- package/dist/dev/ui/status-announcer/status-announcer-element.js.map +1 -0
- package/dist/dev/ui/status-indicator/status-indicator-element.d.ts +29 -0
- package/dist/dev/ui/status-indicator/status-indicator-element.d.ts.map +1 -0
- package/dist/dev/ui/status-indicator/status-indicator-element.js +53 -0
- package/dist/dev/ui/status-indicator/status-indicator-element.js.map +1 -0
- package/dist/dev/ui/status-indicator/status-indicator-value-element.d.ts +9 -0
- package/dist/dev/ui/status-indicator/status-indicator-value-element.d.ts.map +1 -0
- package/dist/dev/ui/status-indicator/status-indicator-value-element.js +11 -0
- package/dist/dev/ui/status-indicator/status-indicator-value-element.js.map +1 -0
- package/dist/dev/ui/thumbnail/thumbnail-element.d.ts.map +1 -1
- package/dist/dev/ui/thumbnail/thumbnail-element.js +10 -5
- package/dist/dev/ui/thumbnail/thumbnail-element.js.map +1 -1
- package/dist/dev/ui/time/time-element.d.ts +2 -2
- package/dist/dev/ui/time/time-element.d.ts.map +1 -1
- package/dist/dev/ui/time/time-element.js +8 -4
- package/dist/dev/ui/time/time-element.js.map +1 -1
- package/dist/dev/ui/time-slider/time-slider-element.d.ts +2 -2
- package/dist/dev/ui/time-slider/time-slider-element.d.ts.map +1 -1
- package/dist/dev/ui/time-slider/time-slider-element.js +12 -6
- package/dist/dev/ui/time-slider/time-slider-element.js.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-element.d.ts +9 -3
- package/dist/dev/ui/tooltip/tooltip-element.d.ts.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-element.js +43 -16
- package/dist/dev/ui/tooltip/tooltip-element.js.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-group-element.d.ts.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-group-element.js +7 -5
- package/dist/dev/ui/tooltip/tooltip-group-element.js.map +1 -1
- package/dist/dev/ui/volume-indicator/volume-indicator-element.d.ts +25 -0
- package/dist/dev/ui/volume-indicator/volume-indicator-element.d.ts.map +1 -0
- package/dist/dev/ui/volume-indicator/volume-indicator-element.js +46 -0
- package/dist/dev/ui/volume-indicator/volume-indicator-element.js.map +1 -0
- package/dist/dev/ui/volume-indicator/volume-indicator-fill-element.d.ts +9 -0
- package/dist/dev/ui/volume-indicator/volume-indicator-fill-element.d.ts.map +1 -0
- package/dist/dev/ui/volume-indicator/volume-indicator-fill-element.js +11 -0
- package/dist/dev/ui/volume-indicator/volume-indicator-fill-element.js.map +1 -0
- package/dist/dev/ui/volume-indicator/volume-indicator-value-element.d.ts +9 -0
- package/dist/dev/ui/volume-indicator/volume-indicator-value-element.d.ts.map +1 -0
- package/dist/dev/ui/volume-indicator/volume-indicator-value-element.js +11 -0
- package/dist/dev/ui/volume-indicator/volume-indicator-value-element.js.map +1 -0
- package/dist/dev/ui/volume-slider/volume-slider-element.d.ts +2 -2
- package/dist/dev/ui/volume-slider/volume-slider-element.d.ts.map +1 -1
- package/dist/dev/ui/volume-slider/volume-slider-element.js +10 -5
- package/dist/dev/ui/volume-slider/volume-slider-element.js.map +1 -1
- package/docs/README.md +7 -0
- package/docs/concepts/accessibility.md +60 -0
- package/docs/concepts/browser-support.md +37 -0
- package/docs/concepts/features.md +129 -0
- package/docs/concepts/overview.md +118 -0
- package/docs/concepts/presets.md +207 -0
- package/docs/concepts/skins.md +2006 -0
- package/docs/concepts/ui-components.md +59 -0
- package/docs/concepts/v10-roadmap.md +75 -0
- package/docs/concepts/why-videojs.md +113 -0
- package/docs/how-to/build-with-ai.md +39 -0
- package/docs/how-to/build-your-own-component.md +217 -0
- package/docs/how-to/customize-skins.md +5711 -0
- package/docs/how-to/installation.md +172 -0
- package/docs/llms.txt +88 -0
- package/docs/reference/buffering-indicator.md +152 -0
- package/docs/reference/captions-button.md +216 -0
- package/docs/reference/container-mixin.md +69 -0
- package/docs/reference/controls.md +248 -0
- package/docs/reference/create-selector.md +59 -0
- package/docs/reference/feature-buffer.md +52 -0
- package/docs/reference/feature-controls.md +70 -0
- package/docs/reference/feature-error.md +60 -0
- package/docs/reference/feature-fullscreen.md +90 -0
- package/docs/reference/feature-live.md +60 -0
- package/docs/reference/feature-pip.md +90 -0
- package/docs/reference/feature-playback-rate.md +70 -0
- package/docs/reference/feature-playback.md +110 -0
- package/docs/reference/feature-remote-playback.md +70 -0
- package/docs/reference/feature-source.md +70 -0
- package/docs/reference/feature-stream-type.md +46 -0
- package/docs/reference/feature-text-tracks.md +100 -0
- package/docs/reference/feature-time.md +80 -0
- package/docs/reference/feature-volume.md +90 -0
- package/docs/reference/fullscreen-button.md +229 -0
- package/docs/reference/html-create-player.md +449 -0
- package/docs/reference/media-attach-mixin.md +83 -0
- package/docs/reference/mute-button.md +301 -0
- package/docs/reference/pip-button.md +229 -0
- package/docs/reference/play-button.md +251 -0
- package/docs/reference/playback-rate-button.md +170 -0
- package/docs/reference/player-container.md +126 -0
- package/docs/reference/player-context.md +50 -0
- package/docs/reference/player-controller.md +276 -0
- package/docs/reference/player-provider.md +114 -0
- package/docs/reference/popover.md +460 -0
- package/docs/reference/poster.md +158 -0
- package/docs/reference/provider-mixin.md +71 -0
- package/docs/reference/seek-button.md +223 -0
- package/docs/reference/slider.md +862 -0
- package/docs/reference/snapshot-controller.md +208 -0
- package/docs/reference/store-controller.md +180 -0
- package/docs/reference/thumbnail.md +364 -0
- package/docs/reference/time-slider.md +794 -0
- package/docs/reference/time.md +488 -0
- package/docs/reference/tooltip.md +547 -0
- package/docs/reference/volume-slider.md +783 -0
- package/package.json +46 -12
- package/cdn/compounds-CCgS3IGo.js +0 -8
- package/cdn/compounds-CCgS3IGo.js.map +0 -1
- package/cdn/compounds-DD3MYkSc.js.map +0 -1
- package/cdn/context-0rI_P6jf.js.map +0 -1
- package/cdn/context-CEFisYD0.js.map +0 -1
- package/cdn/create-player-B-PGzhq2.js +0 -7
- package/cdn/create-player-B-PGzhq2.js.map +0 -1
- package/cdn/create-player-BKLw7l1a.js.map +0 -1
- package/cdn/default-Djy9PEXm.js +0 -2
- package/cdn/default-Djy9PEXm.js.map +0 -1
- package/cdn/default-YzaLyoYg.js +0 -30
- package/cdn/default-YzaLyoYg.js.map +0 -1
- package/cdn/hls-CcSAx_3I.js.map +0 -1
- package/cdn/hls-Dl2v35sW.js +0 -41
- package/cdn/hls-Dl2v35sW.js.map +0 -1
- package/cdn/hotkey-element-BONs_FyJ.js.map +0 -1
- package/cdn/hotkey-element-DWWkfH3A.js +0 -2
- package/cdn/hotkey-element-DWWkfH3A.js.map +0 -1
- package/cdn/media-attach-mixin-C2wz0Qbd.js +0 -2
- package/cdn/minimal-AX_y2YBU.js +0 -30
- package/cdn/minimal-AX_y2YBU.js.map +0 -1
- package/cdn/minimal-Bc74CFqg.js +0 -2
- package/cdn/minimal-Bc74CFqg.js.map +0 -1
- package/cdn/minimal-ui-CE1sVxKB.js +0 -22
- package/cdn/minimal-ui-CE1sVxKB.js.map +0 -1
- package/cdn/minimal-ui-hC8-_9_F.js +0 -2
- package/cdn/minimal-ui-hC8-_9_F.js.map +0 -1
- package/cdn/minimal-ui-lnw8AjaS.js +0 -2
- package/cdn/minimal-ui-lnw8AjaS.js.map +0 -1
- package/cdn/minimal-ui-yKur3jyD.js +0 -29
- package/cdn/minimal-ui-yKur3jyD.js.map +0 -1
- package/cdn/mux-BgWl50KW.js.map +0 -1
- package/cdn/mux-BhHIeG3e.js.map +0 -1
- package/cdn/native-hls-lhip4tV9.js +0 -123
- package/cdn/native-hls-lhip4tV9.js.map +0 -1
- package/cdn/native-hls-odPBXxK7.js +0 -2
- package/cdn/native-hls-odPBXxK7.js.map +0 -1
- package/cdn/player-B7jISTmQ.js +0 -2
- package/cdn/player-B7jISTmQ.js.map +0 -1
- package/cdn/player-ChdQN3H5.js +0 -2
- package/cdn/player-DX5Ka0vt.js.map +0 -1
- package/cdn/skin-element-D3iVinGP.js +0 -55
- package/cdn/skin-element-D3iVinGP.js.map +0 -1
- package/cdn/skin-element-DM82PPxz.js +0 -2
- package/cdn/skin-element-DM82PPxz.js.map +0 -1
- package/cdn/ui-BGvi0TNr.js +0 -2
- package/cdn/ui-BGvi0TNr.js.map +0 -1
- package/cdn/ui-BN57BxYZ.js +0 -2
- package/cdn/ui-BN57BxYZ.js.map +0 -1
- package/cdn/ui-CKR6dVbQ.js +0 -25
- package/cdn/ui-CKR6dVbQ.js.map +0 -1
- package/cdn/ui-CZ4yl3t3.js +0 -32
- package/cdn/ui-CZ4yl3t3.js.map +0 -1
- package/dist/default/_virtual/inline-css_src/define/base.js +0 -6
- package/dist/default/_virtual/inline-css_src/define/base.js.map +0 -1
- package/dist/dev/_virtual/inline-css_src/define/base.js +0 -6
- package/dist/dev/_virtual/inline-css_src/define/base.js.map +0 -1
- package/dist/dev/icons/dist/render/default/index.js +0 -30
- package/dist/dev/icons/dist/render/default/index.js.map +0 -1
- package/dist/dev/icons/dist/render/minimal/index.js +0 -30
- package/dist/dev/icons/dist/render/minimal/index.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/buffering.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/button-group.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js +0 -12
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/controls.js +0 -7
- package/dist/dev/skins/dist/default/default/tailwind/components/controls.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/error.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/icon.js +0 -9
- package/dist/dev/skins/dist/default/default/tailwind/components/icon.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js +0 -6
- package/dist/dev/skins/dist/default/default/tailwind/components/playback-rate.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/root.js +0 -7
- package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/seek.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/surface.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/time.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/buffering.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button-group.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +0 -12
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js +0 -7
- package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js +0 -9
- package/dist/dev/skins/dist/default/minimal/tailwind/components/icon.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js +0 -6
- package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +0 -7
- package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +0 -1
- package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +0 -1
- /package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/components/button-group.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/components/error.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/components/overlay.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/components/popup.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/components/poster.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/components/seek.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/components/surface.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/default/tailwind/components/time.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/components/button-group.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/components/error.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/components/overlay.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/components/popup.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/components/poster.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/components/seek.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/minimal/tailwind/components/time.js +0 -0
- /package/dist/dev/{skins → packages/skins}/dist/default/shared/tailwind/icon-state.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compounds-DxdDY3jr.js","names":["#input","#titleId","#descriptionId","#media","#close","#getDelay","#timer","#handles","getVolumeLevel","INITIAL_STATE","#originTime","#props","#close","#getEffectiveSeekValue","#props","#close","INITIAL_STATE","#props","#close","#props","#close","#clearBoundaryTimers","#restartBoundary","#scheduleBoundaryClear","#clearBoundaryTimer","#boundaryTimer","#boundaryRestartTimer","#clearBoundaryRestartTimer","#props","#input","#props","#media","#props","#media","#props","#input","#props","#input","#props","#media","#getSeconds","#getText","#getPhrase","#getDatetime","#props","#media","#props","#input","#props","#isOpen","#lastCloseTime","#media","#target","#subscribers","#nextId","#bindings","#sortBindings","#addToAriaRegistry","#connectDocument","#connect","#removeFromAriaRegistry","#maybeDisconnect","#ariaRegistry","#destroyed","#disconnect","#docDisconnect","#handleEvent","#action","#container","#hotkeyRegistry","#disconnect","#host","#abort","#trigger","#boundary","#frame","#resizeObserver","#menu","#parentCtx","#core","#provider","#position","#containerCtx","#menuViewTransition","#disconnect","#handleContentKeyDown","#handleContentFocusOut","#snapshot","#navSnapshot","#menuViewSnapshot","#cleanupTrigger","#navState","#updateAsSubmenu","#updateAsRoot","#syncTrigger","#currentTrigger","#getBoundaryElement","#triggerAbort","#menuCtx","#provider","#menuCtx","#groupCtx","#disconnect","#registered","#cleanupRegistration","#core","#containerCtx","#position","#disconnect","#popover","#snapshot","#cleanupTrigger","#syncTrigger","#currentTrigger","#getBoundaryElement","#triggerAbort","#core","#groupConsumer","#containerCtx","#position","#disconnect","#tooltip","#snapshot","#cleanupTrigger","#syncTrigger","#currentTrigger","#getBoundaryElement","#triggerAbort","#syncContent","#core","#provider","#ctx","#disconnect","#core","#mediaState","#provider","#visible","#closeOwnedOverlays","#core","#provider","#titleId","#descriptionId","#errorState","#dialog","#snapshot","#lastErrorMessage","#ctx","#disconnect","#bound","#ctx","#disconnect","#registered","#cleanupRegistration","#ctx","#ctx","#disconnect","#registered","#cleanupRegistration","#ctx","#reconnect","#visibilityHandle","#snapshot","#disconnect","#inputActionUnsubscribe","#visibilityUnsubscribe","#syncTransition","#payloadSnapshot","#lastGeneration","#getVisibilityHandle","#host","#dataAttrs","#render","#core","#transition","#liveIndicator","#ctx","#resizeObserver","#width","#applyPosition","#ctx","#disconnect","#thumbPropsApplied","#core","#img","#textTracks","#externalThumbnails","#api","#thumbnails","#lastTextTrack","#resetStyles","#applyResize","#ctx","#ctx","#core","#player","#container","#reconnect","#disconnect","#inputActionUnsubscribe","#core","#transition","#liveIndicator","#core","#state","#signSpan","#textNode","#core","#provider","#timeState","#bufferState","#disconnect","#slider","#core","#transition","#liveIndicator","#core","#provider","#volumeState","#disconnect","#setVolume","#slider"],"sources":["../../utils/dist/dom/direction.js","../../utils/dist/dom/supports.js","../../utils/dist/dom/platform.js","../../utils/dist/dom/popover.js","../../utils/dist/dom/style.js","../../core/dist/dev/core/ui/transition.js","../../core/dist/dev/core/ui/alert-dialog/alert-dialog-core.js","../../core/dist/dev/core/ui/alert-dialog/alert-dialog-data-attrs.js","../../utils/dist/object/defaults.js","../../store/dist/dev/core/selector.js","../../utils/dist/function/throttle.js","../../core/dist/dev/core/ui/controls/controls-core.js","../../core/dist/dev/core/ui/controls/controls-data-attrs.js","../../core/dist/dev/core/ui/error-dialog/error-dialog-core.js","../../core/dist/dev/core/ui/input-feedback/indicator-lifecycle.js","../../utils/dist/number/number.js","../../utils/dist/time/format.js","../../core/dist/dev/core/ui/input-feedback/status.js","../../core/dist/dev/core/ui/input-feedback/seek-indicator-core.js","../../core/dist/dev/core/ui/input-feedback/seek-indicator-data-attrs.js","../../core/dist/dev/core/ui/input-feedback/status-announcer-core.js","../../core/dist/dev/core/ui/input-feedback/status-indicator-core.js","../../core/dist/dev/core/ui/input-feedback/status-indicator-data-attrs.js","../../core/dist/dev/core/ui/input-feedback/volume-indicator-core.js","../../core/dist/dev/core/ui/input-feedback/volume-indicator-css-vars.js","../../core/dist/dev/core/ui/input-feedback/volume-indicator-data-attrs.js","../../core/dist/dev/core/ui/menu/menu-core.js","../../core/dist/dev/core/ui/menu/menu-data-attrs.js","../../core/dist/dev/core/ui/menu/menu-item-data-attrs.js","../../core/dist/dev/core/ui/mute-button/mute-button-core.js","../../core/dist/dev/core/ui/mute-button/mute-button-data-attrs.js","../../core/dist/dev/core/ui/play-button/play-button-core.js","../../core/dist/dev/core/ui/play-button/play-button-data-attrs.js","../../core/dist/dev/core/ui/popover/popover-core.js","../../core/dist/dev/core/ui/popover/popover-css-vars.js","../../core/dist/dev/core/ui/popover/popover-data-attrs.js","../../core/dist/dev/core/ui/popover/popup-host-attr.js","../../core/dist/dev/core/ui/slider/slider-core.js","../../core/dist/dev/core/ui/slider/slider-css-vars.js","../../core/dist/dev/core/ui/slider/slider-data-attrs.js","../../core/dist/dev/core/ui/thumbnail/thumbnail-core.js","../../core/dist/dev/core/ui/thumbnail/thumbnail-data-attrs.js","../../core/dist/dev/core/ui/thumbnail/thumbnail-media-fragment.js","../../core/dist/dev/core/ui/time/time-core.js","../../core/dist/dev/core/ui/time/time-data-attrs.js","../../core/dist/dev/core/ui/time-slider/time-slider-core.js","../../core/dist/dev/core/ui/time-slider/time-slider-data-attrs.js","../../core/dist/dev/core/ui/tooltip/tooltip-core.js","../../core/dist/dev/core/ui/tooltip/tooltip-css-vars.js","../../core/dist/dev/core/ui/tooltip/tooltip-data-attrs.js","../../core/dist/dev/core/ui/tooltip/tooltip-group-core.js","../../core/dist/dev/core/ui/volume-slider/volume-slider-core.js","../../core/dist/dev/core/ui/volume-slider/volume-slider-data-attrs.js","../../core/dist/dev/dom/store/features/stream-type.js","../../core/dist/dev/dom/store/selectors.js","../../core/dist/dev/dom/hotkey/aria.js","../../core/dist/dev/dom/hotkey/coordinator.js","../../core/dist/dev/dom/hotkey/hotkey.js","../../core/dist/dev/dom/ui/dismiss-layer.js","../../core/dist/dev/dom/ui/alert-dialog.js","../../core/dist/dev/dom/ui/button.js","../../core/dist/dev/dom/ui/input-action.js","../../core/dist/dev/dom/ui/popover/popover.js","../../core/dist/dev/dom/ui/menu/create-menu.js","../../core/dist/dev/dom/utils/layout.js","../../core/dist/dev/dom/ui/menu/create-menu-view-transition.js","../../core/dist/dev/dom/ui/menu/menu-viewport-transition.js","../../core/dist/dev/dom/ui/popover/popover-positioning.js","../../core/dist/dev/dom/utils/pointer.js","../../core/dist/dev/dom/ui/slider.js","../../core/dist/dev/dom/ui/slider-css-vars.js","../../core/dist/dev/dom/ui/thumbnail.js","../../core/dist/dev/dom/ui/tooltip/tooltip.js","../../core/dist/dev/dom/ui/transition.js","../../core/dist/dev/dom/ui/wheel-step.js","../../core/dist/dev/dom/utils/element-props.js","../../core/dist/dev/dom/utils/event.js","../../core/dist/dev/dom/utils/log.js","../../core/dist/dev/dom/utils/state-data-attrs.js","../src/ui/hotkey/aria-key-shortcuts-controller.ts","../src/ui/media-button-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/menu/context.ts","../src/ui/menu/menu-element.ts","../src/ui/menu/menu-item-indicator-element.ts","../src/ui/menu/menu-radio-group-element.ts","../src/ui/menu/menu-radio-item-element.ts","../src/ui/popover/popover-element.ts","../src/ui/tooltip/context.ts","../src/ui/tooltip/tooltip-element.ts","../src/ui/tooltip/tooltip-group-element.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-back-element.ts","../src/ui/menu/menu-checkbox-item-element.ts","../src/ui/menu/menu-group-element.ts","../src/ui/menu/menu-item-element.ts","../src/ui/menu/menu-label-element.ts","../src/ui/menu/menu-separator-element.ts","../src/ui/menu/menu-view-element.ts","../src/ui/input-indicators/input-indicator-element.ts","../src/ui/input-indicators/live-indicator.ts","../src/ui/seek-indicator/seek-indicator-element.ts","../src/ui/seek-indicator/seek-indicator-value-element.ts","../src/ui/slider/context.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/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":["//#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","//#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\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 { tryHidePopover, tryShowPopover };\n\n//# sourceMappingURL=popover.js.map","import { kebabCase } from \"../string/casing.js\";\n//#region src/dom/style.ts\nfunction applyStyles(element, styles) {\n\tfor (const [prop, value] of Object.entries(styles)) if (typeof value === \"string\") {\n\t\tconst key = prop.startsWith(\"--\") ? prop : kebabCase(prop);\n\t\telement.style.setProperty(key, value);\n\t}\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)) return 0;\n\tif (/^-?\\d*\\.?\\d+$/.test(trimmed) || trimmed.endsWith(\"px\")) return parsed;\n\tconst doc = el.ownerDocument;\n\tconst root = doc?.documentElement;\n\tif (trimmed.endsWith(\"rem\")) return parsed * (root ? Number.parseFloat(getComputedStyle(root).fontSize) || 16 : 16);\n\tif (trimmed.endsWith(\"em\")) return parsed * (el instanceof HTMLElement ? Number.parseFloat(getComputedStyle(el).fontSize) || 16 : 16);\n\tif (!doc) return 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\tmeasurementEl.style.blockSize = \"0\";\n\tmeasurementEl.style.padding = \"0\";\n\tmeasurementEl.style.border = \"0\";\n\tmeasurementEl.style.inset = \"0\";\n\tconst parent = doc.body ?? doc.documentElement;\n\tif (!parent) return parsed;\n\tparent.appendChild(measurementEl);\n\tconst pixels = measurementEl.getBoundingClientRect().width;\n\tmeasurementEl.remove();\n\treturn Number.isFinite(pixels) ? pixels : parsed;\n}\n//#endregion\nexport { applyStyles, resolveCSSLength };\n\n//# sourceMappingURL=style.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\ttransitionStarting: \"data-starting-style\",\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/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\topen: \"data-open\",\n\t...TransitionDataAttrs\n};\n//#endregion\nexport { AlertDialogDataAttrs };\n\n//# sourceMappingURL=alert-dialog-data-attrs.js.map","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* @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 in object) if (!isUndefined(object[key])) result[key] = object[key];\n\treturn result;\n}\n//#endregion\nexport { defaults };\n\n//# sourceMappingURL=defaults.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);\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","//#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\tvisible: \"data-visible\",\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","import { getTransitionFlags } from \"../transition.js\";\n//#region src/core/ui/input-feedback/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","//#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/** 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 };\n\n//# sourceMappingURL=number.js.map","import { isNumber } from \"../predicate/predicate.js\";\n//#region src/time/format.ts\nconst UNIT_LABELS = [\n\t{\n\t\tsingular: \"hour\",\n\t\tplural: \"hours\"\n\t},\n\t{\n\t\tsingular: \"minute\",\n\t\tplural: \"minutes\"\n\t},\n\t{\n\t\tsingular: \"second\",\n\t\tplural: \"seconds\"\n\t}\n];\nfunction isValidTime(value) {\n\treturn isNumber(value) && Number.isFinite(value);\n}\nfunction toTimeUnitPhrase(value, unitIndex) {\n\treturn `${value} ${value === 1 ? UNIT_LABELS[unitIndex]?.singular : UNIT_LABELS[unitIndex]?.plural}`;\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* @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) {\n\tif (!isValidTime(seconds)) return \"0:00\";\n\tconst negative = seconds < 0;\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\tconst guideAbs = guide ? Math.abs(guide) : 0;\n\tconst gh = Math.floor(guideAbs / 3600);\n\tconst gm = Math.floor(guideAbs / 60 % 60);\n\tconst showHours = h > 0 || gh > 0;\n\tconst padMinutes = showHours || gm >= 10;\n\tconst hoursStr = showHours ? `${h}:` : \"\";\n\tconst minutesStr = `${padMinutes && m < 10 ? \"0\" : \"\"}${m}:`;\n\tconst secondsStr = s < 10 ? `0${s}` : `${s}`;\n\treturn `${negative ? \"-\" : \"\"}${hoursStr}${minutesStr}${secondsStr}`;\n}\n/**\n* Format seconds to human-readable phrase for screen readers.\n*\n* @param seconds - Time in seconds (negative indicates remaining)\n* @returns Human-readable phrase like \"1 minute, 30 seconds\"\n*\n* @example\n* formatTimeAsPhrase(90) // \"1 minute, 30 seconds\"\n* formatTimeAsPhrase(3661) // \"1 hour, 1 minute, 1 second\"\n* formatTimeAsPhrase(-270) // \"4 minutes, 30 seconds remaining\"\n*/\nfunction formatTimeAsPhrase(seconds) {\n\tif (!isValidTime(seconds)) return \"\";\n\tconst negative = seconds < 0;\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\tif (positiveSeconds === 0) return `${toTimeUnitPhrase(0, 2)}${negative ? \" remaining\" : \"\"}`;\n\treturn `${[\n\t\th,\n\t\tm,\n\t\ts\n\t].map((value, index) => value > 0 ? toTimeUnitPhrase(value, index) : null).filter(Boolean).join(\", \")}${negative ? \" remaining\" : \"\"}`;\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//#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/input-feedback/status.ts\nconst DEFAULT_INPUT_INDICATOR_LABELS = {\n\tmuted: \"Muted\",\n\tvolume: \"Volume\",\n\tcaptionsOn: \"Captions on\",\n\tcaptionsOff: \"Captions off\",\n\tpaused: \"Paused\",\n\tplaying: \"Playing\",\n\tfullscreen: \"Fullscreen\",\n\texitFullscreen: \"Exit fullscreen\",\n\tpictureInPicture: \"Picture in picture\",\n\texitPictureInPicture: \"Exit picture in picture\"\n};\nfunction isVolumeIndicatorAction(action) {\n\treturn action === \"toggleMuted\" || action === \"volumeStep\";\n}\nfunction isSeekIndicatorAction(action) {\n\treturn action === \"seekStep\" || action === \"seekToPercent\";\n}\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\tvolumeLevel: 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\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\tvolumeLevel: 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\tvolumeLevel: 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\tvolumeLevel: null\n\t\t\t};\n\t\t}\n\t\tdefault: return null;\n\t}\n}\nfunction deriveAnnouncerLabel(event, snapshot, labels = DEFAULT_INPUT_INDICATOR_LABELS) {\n\tconst details = deriveStatus(event, snapshot, labels);\n\tif (!details) return null;\n\tif (isVolumeIndicatorAction(event.action)) return details.status === \"volume-off\" ? labels.muted : `${labels.volume} ${details.value}`;\n\treturn details.label;\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 formatCurrentTime(snapshot) {\n\treturn formatTime(snapshot.currentTime ?? 0, snapshot.duration);\n}\nfunction getStatusIndicatorDisplayValue(state) {\n\treturn state.value ?? state.label ?? \"\";\n}\nfunction getVolumeIndicatorDisplayValue(state) {\n\treturn state.value ?? \"\";\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}\nfunction isInputActionIncluded(action, actions) {\n\tif (!action) return false;\n\treturn !actions || actions.includes(action);\n}\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}\nfunction volumePredictionToStatusDetails(prediction, labels) {\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/** Labels/value/level for volume actions — single source shared with `VolumeIndicatorCore`. */\nfunction deriveVolumeStatus(event, snapshot, labels = DEFAULT_INPUT_INDICATOR_LABELS, cachedPrediction) {\n\treturn volumePredictionToStatusDetails(cachedPrediction ?? predictVolumeActionOutcome(event, snapshot), labels);\n}\n//#endregion\nexport { DEFAULT_INPUT_INDICATOR_LABELS, deriveAnnouncerLabel, deriveStatus, deriveVolumeStatus, formatCurrentTime, formatVolumeValue, getSeekDirection, getSeekIndicatorDisplayValue, getSeekToPercent, getStatusIndicatorDisplayValue, getVolumeIndicatorDisplayValue, getVolumeLevel, isInputActionIncluded, isSeekIndicatorAction, isVolumeIndicatorAction, predictVolumeActionOutcome };\n\n//# sourceMappingURL=status.js.map","import { IndicatorCloseController, getIndicatorCloseDelay } from \"./indicator-lifecycle.js\";\nimport { formatCurrentTime, getSeekDirection, isSeekIndicatorAction } from \"./status.js\";\nimport { createState } from \"@videojs/store\";\n//#region src/core/ui/input-feedback/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/input-feedback/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 { IndicatorCloseController, getIndicatorCloseDelay } from \"./indicator-lifecycle.js\";\nimport { DEFAULT_INPUT_INDICATOR_LABELS, deriveAnnouncerLabel } from \"./status.js\";\nimport { createState } from \"@videojs/store\";\n//#region src/core/ui/input-feedback/status-announcer-core.ts\nvar StatusAnnouncerCore = class {\n\tstate = createState({ label: null });\n\t#props = {};\n\t#close = new IndicatorCloseController(() => this.state.patch({ label: null }), () => getIndicatorCloseDelay(this.#props));\n\tsetProps(props) {\n\t\tthis.#props = props;\n\t}\n\tdestroy() {\n\t\tthis.#close.destroy();\n\t}\n\tprocessEvent(event, snapshot) {\n\t\tconst label = deriveAnnouncerLabel(event, snapshot, {\n\t\t\t...DEFAULT_INPUT_INDICATOR_LABELS,\n\t\t\t...this.#props.labels\n\t\t});\n\t\tif (!label) return false;\n\t\tthis.state.patch({ label });\n\t\tthis.#close.arm();\n\t\treturn true;\n\t}\n};\n//#endregion\nexport { StatusAnnouncerCore };\n\n//# sourceMappingURL=status-announcer-core.js.map","import { IndicatorCloseController, getIndicatorCloseDelay } from \"./indicator-lifecycle.js\";\nimport { DEFAULT_INPUT_INDICATOR_LABELS, deriveStatus, isInputActionIncluded } from \"./status.js\";\nimport { createState } from \"@videojs/store\";\n//#region src/core/ui/input-feedback/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/input-feedback/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","import { IndicatorCloseController, getIndicatorCloseDelay } from \"./indicator-lifecycle.js\";\nimport { DEFAULT_INPUT_INDICATOR_LABELS, deriveVolumeStatus, isVolumeIndicatorAction, predictVolumeActionOutcome } from \"./status.js\";\nimport { createState } from \"@videojs/store\";\n//#region src/core/ui/input-feedback/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, DEFAULT_INPUT_INDICATOR_LABELS, 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/input-feedback/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/input-feedback/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 { 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\tisSubmenu: false\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 = this.#props.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\"aria-haspopup\": \"menu\",\n\t\t\t\"aria-expanded\": state.open ? \"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\topen: \"data-open\",\n\tside: \"data-side\",\n\talign: \"data-align\",\n\tisSubmenu: \"data-submenu\",\n\t...TransitionDataAttrs\n};\n//#endregion\nexport { MenuDataAttrs };\n\n//# sourceMappingURL=menu-data-attrs.js.map","//#region src/core/ui/menu/menu-item-data-attrs.ts\n/** Data attributes set on all navigable menu item elements. */\nconst MenuItemDataAttrs = {\n\titem: \"data-item\",\n\thighlighted: \"data-highlighted\"\n};\n//#endregion\nexport { MenuItemDataAttrs };\n\n//# sourceMappingURL=menu-item-data-attrs.js.map","import { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\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\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 } = this.#props;\n\t\tif (isFunction(label)) {\n\t\t\tconst customLabel = label(state);\n\t\t\tif (customLabel) return customLabel;\n\t\t} else if (label) return label;\n\t\treturn state.muted ? \"Unmute\" : \"Mute\";\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\tmuted: media.muted || media.volume === 0,\n\t\t\tvolumeLevel: getVolumeLevel(media)\n\t\t});\n\t\tthis.state.patch({ label: this.getLabel(this.state.current) });\n\t\treturn this.state.current;\n\t}\n\ttoggle(media) {\n\t\tif (this.#props.disabled) 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\tmuted: \"data-muted\",\n\tvolumeLevel: \"data-volume-level\"\n};\n//#endregion\nexport { MuteButtonDataAttrs };\n\n//# sourceMappingURL=mute-button-data-attrs.js.map","import { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\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 } = this.#props;\n\t\tif (isFunction(label)) {\n\t\t\tconst customLabel = label(state);\n\t\t\tif (customLabel) return customLabel;\n\t\t} else if (label) return label;\n\t\tif (state.ended) return \"Replay\";\n\t\treturn state.paused ? \"Play\" : \"Pause\";\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: 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\tpaused: \"data-paused\",\n\tended: \"data-ended\",\n\tstarted: \"data-started\"\n};\n//#endregion\nexport { PlayButtonDataAttrs };\n\n//# sourceMappingURL=play-button-data-attrs.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 ? \"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","//#region src/core/ui/popover/popover-css-vars.ts\nconst PopoverCSSVars = {\n\tsideOffset: \"--media-popover-side-offset\",\n\talignOffset: \"--media-popover-align-offset\",\n\tboundaryOffset: \"--media-popover-boundary-offset\",\n\tanchorWidth: \"--media-popover-anchor-width\",\n\tanchorHeight: \"--media-popover-anchor-height\",\n\tavailableWidth: \"--media-popover-available-width\",\n\tavailableHeight: \"--media-popover-available-height\"\n};\n//#endregion\nexport { PopoverCSSVars };\n\n//# sourceMappingURL=popover-css-vars.js.map","import { TransitionDataAttrs } from \"../transition.js\";\n//#region src/core/ui/popover/popover-data-attrs.ts\nconst PopoverDataAttrs = {\n\topen: \"data-open\",\n\tside: \"data-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 { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\nimport { clamp, roundToStep } 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\tconst { label } = this.#props;\n\t\tif (isFunction(label)) {\n\t\t\tconst customLabel = label(state);\n\t\t\tif (customLabel) return customLabel;\n\t\t} else if (label) return label;\n\t\treturn \"\";\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\tif (max === min) return 0;\n\t\treturn (value - min) / (max - min) * 100;\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-css-vars.ts\n/** CSS custom property names for slider visual state. */\nconst SliderCSSVars = {\n\tfill: \"--media-slider-fill\",\n\tpointer: \"--media-slider-pointer\",\n\tbuffer: \"--media-slider-buffer\"\n};\n//#endregion\nexport { SliderCSSVars };\n\n//# sourceMappingURL=slider-css-vars.js.map","//#region src/core/ui/slider/slider-data-attrs.ts\nconst SliderDataAttrs = {\n\tdragging: \"data-dragging\",\n\tpointing: \"data-pointing\",\n\tinteractive: \"data-interactive\",\n\torientation: \"data-orientation\",\n\tdisabled: \"data-disabled\"\n};\n//#endregion\nexport { SliderDataAttrs };\n\n//# sourceMappingURL=slider-data-attrs.js.map","//#region src/core/ui/thumbnail/thumbnail-core.ts\nvar ThumbnailCore = class {\n\tfindActiveThumbnail(thumbnails, time) {\n\t\tif (thumbnails.length === 0) return void 0;\n\t\tlet low = 0;\n\t\tlet high = thumbnails.length - 1;\n\t\tlet result;\n\t\twhile (low <= high) {\n\t\t\tconst mid = low + high >>> 1;\n\t\t\tconst image = thumbnails[mid];\n\t\t\tif (time >= image.startTime) {\n\t\t\t\tresult = image;\n\t\t\t\tlow = mid + 1;\n\t\t\t} else high = mid - 1;\n\t\t}\n\t\treturn result;\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","//#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","import { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\nimport { formatTime, formatTimeAsPhrase, secondsToIsoDuration } from \"@videojs/utils/time\";\n//#region src/core/ui/time/time-core.ts\nconst DEFAULT_LABELS = {\n\tcurrent: \"Current time\",\n\tduration: \"Duration\",\n\tremaining: \"Remaining\"\n};\nvar TimeCore = class TimeCore {\n\tstatic defaultProps = {\n\t\ttype: \"current\",\n\t\tnegativeSign: \"-\",\n\t\tlabel: \"\"\n\t};\n\t#props = { ...TimeCore.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, TimeCore.defaultProps);\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\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\treturn formatTime(Math.abs(seconds), media.duration);\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\tgetLabel(state) {\n\t\tconst { label } = this.#props;\n\t\tif (isFunction(label)) {\n\t\t\tconst customLabel = label(state);\n\t\t\tif (customLabel) return customLabel;\n\t\t} else if (label) return label;\n\t\treturn DEFAULT_LABELS[this.#props.type];\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-valuetext\": state.phrase\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 = { type: \"data-type\" };\n//#endregion\nexport { TimeDataAttrs };\n\n//# sourceMappingURL=time-data-attrs.js.map","import { SliderCore } from \"../slider/slider-core.js\";\nimport { defaults } from \"@videojs/utils/object\";\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: \"Seek\",\n\t\tchangeThrottle: 100\n\t};\n\t#props = { ...TimeSliderCore.defaultProps };\n\t#media = null;\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\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 bufferedEnd = buffered.length > 0 ? buffered[buffered.length - 1][1] : 0;\n\t\tconst bufferPercent = duration > 0 ? bufferedEnd / duration * 100 : 0;\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) || \"Seek\";\n\t}\n\tgetAttrs(state) {\n\t\tconst base = super.getAttrs(state);\n\t\tconst announceValue = state.dragging ? this.rawValueFromPercent(state.pointerPercent) : state.value;\n\t\tconst currentPhrase = formatTimeAsPhrase(announceValue);\n\t\tconst durationPhrase = formatTimeAsPhrase(state.duration);\n\t\tconst valuetext = durationPhrase ? `${currentPhrase} of ${durationPhrase}` : currentPhrase;\n\t\treturn {\n\t\t\t...base,\n\t\t\t\"aria-valuenow\": announceValue,\n\t\t\t\"aria-valuetext\": valuetext\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\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\tsideOffset: \"--media-tooltip-side-offset\",\n\talignOffset: \"--media-tooltip-align-offset\",\n\tboundaryOffset: \"--media-tooltip-boundary-offset\",\n\tanchorWidth: \"--media-tooltip-anchor-width\",\n\tanchorHeight: \"--media-tooltip-anchor-height\",\n\tavailableWidth: \"--media-tooltip-available-width\",\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\topen: \"data-open\",\n\tside: \"data-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 { SliderCore } from \"../slider/slider-core.js\";\nimport { defaults } from \"@videojs/utils/object\";\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: \"Volume\",\n\t\twheelStep: 5\n\t};\n\t#media = null;\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\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\treturn {\n\t\t\t...base,\n\t\t\tfillPercent: effectivelyMuted ? 0 : base.fillPercent,\n\t\t\tvolume,\n\t\t\tmuted: effectivelyMuted,\n\t\t\tavailability: media.volumeAvailability\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) || \"Volume\";\n\t}\n\tgetAttrs(state) {\n\t\tconst base = super.getAttrs(state);\n\t\tconst valuetext = `${Math.round(state.value)} percent${state.muted ? \", muted\" : \"\"}`;\n\t\treturn {\n\t\t\t...base,\n\t\t\t\"aria-valuetext\": valuetext\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};\n//#endregion\nexport { VolumeSliderDataAttrs };\n\n//# sourceMappingURL=volume-slider-data-attrs.js.map","import { MediaStreamTypes } from \"../../../core/media/types.js\";\nimport { definePlayerFeature } from \"../../feature.js\";\nimport { isMediaBufferCapable, isMediaSeekCapable, isMediaStreamTypeCapable } from \"../../media/predicate.js\";\nimport { listen } from \"@videojs/utils/dom\";\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 { 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 { pipFeature } from \"./features/pip.js\";\nimport { playbackFeature } from \"./features/playback.js\";\nimport { playbackRateFeature } from \"./features/playback-rate.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 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 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 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 { selectBuffer, selectControls, selectError, selectFullscreen, selectLive, selectPiP, selectPlayback, selectPlaybackRate, selectRemotePlayback, selectSource, selectStreamType, selectTextTrack, selectTime, selectVolume };\n\n//# sourceMappingURL=selectors.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 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//#endregion\nexport { toAriaKeyShortcut };\n\n//# sourceMappingURL=aria.js.map","import { toAriaKeyShortcut } from \"./aria.js\";\nimport { matchesHotkeyEvent, parseHotkeyPattern } from \"./hotkey.js\";\nimport { isEditableTarget, isInteractiveActivation, listen } from \"@videojs/utils/dom\";\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/** Action name → bound keys. Controls query this to set `aria-keyshortcuts`. */\n\t#ariaRegistry = /* @__PURE__ */ new Map();\n\t#subscribers = /* @__PURE__ */ new Set();\n\t#destroyed = false;\n\tconstructor(target) {\n\t\tthis.#target = target;\n\t}\n\tsubscribe(callback) {\n\t\tthis.#subscribers.add(callback);\n\t\treturn () => this.#subscribers.delete(callback);\n\t}\n\tadd(options) {\n\t\tconst parsed = parseHotkeyPattern(options.keys);\n\t\tconst binding = {\n\t\t\tparsed,\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.action) this.#addToAriaRegistry(options.action, parsed);\n\t\tif (options.target === \"document\") this.#connectDocument();\n\t\telse this.#connect();\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\tif (options.action) this.#removeFromAriaRegistry(options.action, parsed);\n\t\t\tthis.#maybeDisconnect();\n\t\t};\n\t}\n\tgetAriaKeys(action) {\n\t\tconst bindings = this.#ariaRegistry.get(action);\n\t\tif (!bindings?.length) return void 0;\n\t\treturn toAriaKeyShortcut(bindings);\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.#ariaRegistry.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.#subscribers.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.#subscribers) try {\n\t\t\t\t\t\tcb(activateEvent);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn(\"[vjs-hotkey] subscribe callback threw:\", error);\n\t\t\t\t\t}\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#addToAriaRegistry(action, bindings) {\n\t\tlet existing = this.#ariaRegistry.get(action);\n\t\tif (!existing) {\n\t\t\texisting = [];\n\t\t\tthis.#ariaRegistry.set(action, existing);\n\t\t}\n\t\texisting.push(...bindings);\n\t}\n\t#removeFromAriaRegistry(action, bindings) {\n\t\tconst existing = this.#ariaRegistry.get(action);\n\t\tif (!existing) return;\n\t\tconst filtered = existing.filter((b) => !bindings.includes(b));\n\t\tif (filtered.length === 0) this.#ariaRegistry.delete(action);\n\t\telse this.#ariaRegistry.set(action, filtered);\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 = 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\telse console.warn(`[vjs-hotkey] Unknown modifier: \"${seg}\" in pattern \"${pattern}\"`);\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","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() {\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();\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();\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();\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();\n\t\t}\n\t};\n}\n//#endregion\nexport { createButton };\n\n//# sourceMappingURL=button.js.map","import { IndicatorVisibilityCoordinator } from \"../../core/ui/input-feedback/indicator-lifecycle.js\";\nimport { getGestureCoordinator } from \"../gesture/coordinator.js\";\nimport { selectFullscreen, selectPiP, selectPlayback, selectTextTrack, selectTime, selectVolume } from \"../store/selectors.js\";\nimport { getHotkeyCoordinator } from \"../hotkey/hotkey.js\";\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\treturn {\n\t\tpaused: selectPlayback(state)?.paused,\n\t\tvolume: selectVolume(state)?.volume,\n\t\tmuted: selectVolume(state)?.muted,\n\t\tfullscreen: selectFullscreen(state)?.fullscreen,\n\t\tsubtitlesShowing: selectTextTrack(state)?.subtitlesShowing,\n\t\tpip: selectPiP(state)?.pip,\n\t\tcurrentTime: time?.currentTime,\n\t\tduration: time?.duration\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 { 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\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 = { close(reason) {\n\t\tapplyClose(reason);\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\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 one RAF it patches `{ status: 'idle' }` and 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 applyOpen(reason, event) {\n\t\tconst opening = layer.open();\n\t\tif (!opening) return;\n\t\toptions.group?.()?.open(groupMember);\n\t\tonOpenChange(true, event ? {\n\t\t\treason,\n\t\t\tevent\n\t\t} : { reason });\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(reason, event) {\n\t\tconst closing = layer.close(popupEl);\n\t\tif (!closing) return;\n\t\toptions.group?.()?.close(groupMember);\n\t\tonOpenChange(false, event ? {\n\t\t\treason,\n\t\t\tevent\n\t\t} : { reason });\n\t\tclosing.then(() => {\n\t\t\tif (layer.signal.aborted) return;\n\t\t\ttryHidePopover(popupEl);\n\t\t\toptions.onOpenChangeComplete?.(false);\n\t\t});\n\t}\n\tfunction open(reason = \"click\") {\n\t\tapplyOpen(reason);\n\t}\n\tfunction close(reason = \"click\") {\n\t\tapplyClose(reason);\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)) return;\n\t\tapplyClose(\"outside-click\", event);\n\t}\n\tlayer.signal.addEventListener(\"abort\", () => {\n\t\toptions.group?.()?.close(groupMember);\n\t\tclearHoverTimeout();\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 (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\tapplyClose(\"blur\");\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\tdestroy: layer.destroy\n\t};\n}\n//#endregion\nexport { createPopover };\n\n//# sourceMappingURL=popover.js.map","import { MenuItemDataAttrs } from \"../../../core/ui/menu/menu-item-data-attrs.js\";\nimport { createPopover } from \"../popover/popover.js\";\nimport { createState } from \"@videojs/store\";\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}\nfunction completeMenuItemSelection(menu, parentMenu = null) {\n\tif (parentMenu) parentMenu.pop();\n\telse menu.close();\n}\nfunction createMenu(options) {\n\tconst items = [];\n\tlet highlightedItem = null;\n\tlet triggerElement = null;\n\tlet contentElement = null;\n\tlet typeaheadBuffer = \"\";\n\tlet typeaheadTimer = null;\n\tlet openRafId = 0;\n\tlet lastCloseReason = null;\n\tconst navigationState = createState({\n\t\tstack: [],\n\t\tdirection: \"forward\"\n\t});\n\tfunction push(menuId, triggerId) {\n\t\tconst stack = navigationState.current.stack;\n\t\tif (stack[stack.length - 1]?.menuId === menuId) return;\n\t\tnavigationState.patch({\n\t\t\tstack: [...stack, {\n\t\t\t\tmenuId,\n\t\t\t\ttriggerId\n\t\t\t}],\n\t\t\tdirection: \"forward\"\n\t\t});\n\t}\n\tfunction pop() {\n\t\tconst stack = navigationState.current.stack;\n\t\tif (stack.length === 0) return;\n\t\tnavigationState.patch({\n\t\t\tstack: stack.slice(0, -1),\n\t\t\tdirection: \"back\"\n\t\t});\n\t}\n\tfunction highlight(element, highlightOptions) {\n\t\tif (highlightedItem === element) return;\n\t\tif (highlightedItem) {\n\t\t\thighlightedItem.tabIndex = -1;\n\t\t\thighlightedItem.removeAttribute(MenuItemDataAttrs.highlighted);\n\t\t}\n\t\thighlightedItem = element;\n\t\tif (element) {\n\t\t\telement.tabIndex = 0;\n\t\t\telement.setAttribute(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}\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(items[0] ?? null, options);\n\t}\n\tfunction getInitialHighlightItem() {\n\t\treturn items.find((item) => item.matches(\"[aria-checked=\\\"true\\\"], [aria-selected=\\\"true\\\"]\")) ?? items[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 searchStart = (highlightedItem ? items.indexOf(highlightedItem) : -1) + 1;\n\t\tconst candidates = [...items.slice(searchStart), ...items.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\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\tnavigationState.patch({\n\t\t\t\t\tstack: [],\n\t\t\t\t\tdirection: \"forward\"\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tonOpenChangeComplete(open) {\n\t\t\toptions.onOpenChangeComplete?.(open);\n\t\t\tif (!open && lastCloseReason !== \"imperative-action\" && lastCloseReason !== \"group-open\") triggerElement?.focus();\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\tif (key !== \"Escape\" && isMenuNavigationKey(event) && !event.defaultPrevented) event.preventDefault();\n\t\t\tif (items.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(items[((highlightedItem ? items.indexOf(highlightedItem) : -1) + 1) % items.length] ?? null);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowUp\": {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tconst currentIndex = highlightedItem ? items.indexOf(highlightedItem) : 0;\n\t\t\t\t\thighlight(items[(currentIndex <= 0 ? items.length : currentIndex) - 1] ?? null);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"Home\":\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\thighlight(items[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(items[items.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\thighlightedItem?.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 destroy() {\n\t\tcancelAnimationFrame(openRafId);\n\t\topenRafId = 0;\n\t\tclearTypeahead();\n\t\tpopover.destroy();\n\t}\n\treturn {\n\t\tinput: popover.input,\n\t\tnavigationInput: navigationState,\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\thighlight,\n\t\thighlightFirstItem,\n\t\tpush,\n\t\tpop,\n\t\topen: popover.open,\n\t\tclose: popover.close,\n\t\tdestroy\n\t};\n}\n//#endregion\nexport { completeMenuItemSelection, createMenu, getRootPositionOptions, isMenuNavigationKey };\n\n//# sourceMappingURL=create-menu.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 { getTransitionStyleAttrs } from \"../../../core/ui/transition.js\";\nimport { forceLayout } from \"../../utils/layout.js\";\nimport { createState } from \"@videojs/store\";\n//#region src/dom/ui/menu/create-menu-view-transition.ts\nconst DEFAULT_MENU_VIEW_TRANSITION_STATE = {\n\tphase: \"hidden\",\n\tdirection: \"forward\",\n\ttriggerId: null\n};\nasync function waitForElementAnimations(element) {\n\tconst animations = element.getAnimations?.() ?? [];\n\tif (!animations.length) return;\n\tawait Promise.all(animations.map((animation) => animation.finished)).catch(() => {});\n}\nfunction focusFirstMenuViewItem(element) {\n\telement.querySelector(\"[data-item]\")?.focus({ preventScroll: true });\n}\nfunction getMenuViewState(phase) {\n\treturn phase === \"entering\" || phase === \"active\" ? \"active\" : \"inactive\";\n}\nfunction getMenuViewTransitionAttrs(state) {\n\treturn {\n\t\t\"data-menu-view\": \"\",\n\t\t\"data-menu-view-state\": getMenuViewState(state.phase),\n\t\t\"data-direction\": state.direction,\n\t\t...getTransitionStyleAttrs({\n\t\t\ttransitionStarting: state.phase === \"entering\",\n\t\t\ttransitionEnding: state.phase === \"exiting\"\n\t\t}),\n\t\t\"data-open\": state.phase !== \"hidden\" ? \"\" : void 0,\n\t\thidden: state.phase === \"hidden\"\n\t};\n}\nfunction createMenuViewTransition(options = {}) {\n\tconst input = createState(DEFAULT_MENU_VIEW_TRANSITION_STATE);\n\tconst waitForAnimations = options.waitForAnimations ?? waitForElementAnimations;\n\tconst focusFirstItem = options.focusFirstItem ?? focusFirstMenuViewItem;\n\tlet element = null;\n\tlet transitionId = 0;\n\tlet raf1 = 0;\n\tlet raf2 = 0;\n\tlet focusRaf = 0;\n\tlet scheduledTransitionId = 0;\n\tlet scheduledPhase = null;\n\tfunction cancelFrames() {\n\t\tcancelAnimationFrame(raf1);\n\t\tcancelAnimationFrame(raf2);\n\t\tcancelAnimationFrame(focusRaf);\n\t\traf1 = 0;\n\t\traf2 = 0;\n\t\tfocusRaf = 0;\n\t\tscheduledTransitionId = 0;\n\t\tscheduledPhase = null;\n\t}\n\tfunction scheduleCurrentPhase() {\n\t\tconst { phase } = input.current;\n\t\tif (!element || phase !== \"entering\" && phase !== \"exiting\") return;\n\t\tif (scheduledTransitionId === transitionId && scheduledPhase === phase) return;\n\t\tscheduledTransitionId = transitionId;\n\t\tscheduledPhase = phase;\n\t\tif (phase === \"entering\") scheduleEnterComplete(transitionId, element);\n\t\telse scheduleExitComplete(transitionId, element);\n\t}\n\tfunction scheduleEnterComplete(currentTransitionId, currentElement) {\n\t\tforceLayout(currentElement);\n\t\traf1 = requestAnimationFrame(() => {\n\t\t\tif (currentTransitionId !== transitionId) return;\n\t\t\traf2 = requestAnimationFrame(() => {\n\t\t\t\tif (currentTransitionId !== transitionId) return;\n\t\t\t\tforceLayout(currentElement);\n\t\t\t\tinput.patch({ phase: \"active\" });\n\t\t\t\tfocusRaf = requestAnimationFrame(() => {\n\t\t\t\t\tif (currentTransitionId !== transitionId) return;\n\t\t\t\t\tfocusFirstItem(currentElement);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\tfunction scheduleExitComplete(currentTransitionId, currentElement) {\n\t\tforceLayout(currentElement);\n\t\traf1 = requestAnimationFrame(async () => {\n\t\t\tawait waitForAnimations(currentElement);\n\t\t\tif (currentTransitionId !== transitionId) return;\n\t\t\tconst { direction, triggerId } = input.current;\n\t\t\tinput.patch({\n\t\t\t\tphase: \"hidden\",\n\t\t\t\ttriggerId: null\n\t\t\t});\n\t\t\tif (direction === \"back\") options.restoreFocus?.(triggerId);\n\t\t});\n\t}\n\tfunction startEnter(direction, triggerId) {\n\t\ttransitionId++;\n\t\tcancelFrames();\n\t\tinput.patch({\n\t\t\tphase: \"entering\",\n\t\t\tdirection,\n\t\t\ttriggerId\n\t\t});\n\t\tscheduleCurrentPhase();\n\t}\n\tfunction startExit(direction) {\n\t\ttransitionId++;\n\t\tcancelFrames();\n\t\tinput.patch({\n\t\t\tphase: \"exiting\",\n\t\t\tdirection\n\t\t});\n\t\tscheduleCurrentPhase();\n\t}\n\tfunction setElement(nextElement) {\n\t\tif (element === nextElement) return;\n\t\telement = nextElement;\n\t\tscheduleCurrentPhase();\n\t}\n\tfunction sync({ active, direction, triggerId = null }) {\n\t\tconst { phase } = input.current;\n\t\tif (active && (phase === \"hidden\" || phase === \"exiting\")) startEnter(direction, triggerId);\n\t\telse if (!active && (phase === \"active\" || phase === \"entering\")) startExit(direction);\n\t}\n\tfunction destroy() {\n\t\ttransitionId++;\n\t\tcancelFrames();\n\t\telement = null;\n\t\tinput.patch(DEFAULT_MENU_VIEW_TRANSITION_STATE);\n\t}\n\treturn {\n\t\tinput,\n\t\tsetElement,\n\t\tsync,\n\t\tdestroy\n\t};\n}\n//#endregion\nexport { createMenuViewTransition, getMenuViewTransitionAttrs };\n\n//# sourceMappingURL=create-menu-view-transition.js.map","import { TransitionDataAttrs } from \"../../../core/ui/transition.js\";\nimport { forceLayout } from \"../../utils/layout.js\";\n//#region src/dom/ui/menu/menu-viewport-transition.ts\nconst DEFAULT_MENU_VIEWPORT_MIN_WIDTH = 160;\nconst MENU_VIEW_ATTR = \"data-menu-view\";\nconst MENU_VIEW_STATE_ATTR = \"data-menu-view-state\";\nconst MENU_VIEW_ACTIVE_STATE = \"active\";\nconst MENU_VIEW_INACTIVE_STATE = \"inactive\";\nconst MENU_ROOT_VIEW_ATTR = \"data-menu-root-view\";\nconst MENU_VIEWPORT_ATTR = \"data-menu-viewport\";\nconst MENU_WIDTH_VAR = \"--media-menu-width\";\nconst MENU_HEIGHT_VAR = \"--media-menu-height\";\nconst MENU_VIEW_MEASURE_STYLE_PROPERTIES = [\n\t\"position\",\n\t\"top\",\n\t\"right\",\n\t\"bottom\",\n\t\"left\",\n\t\"width\",\n\t\"height\",\n\t\"min-width\",\n\t\"max-width\"\n];\nconst viewportTransitionStates = /* @__PURE__ */ new WeakMap();\nfunction getMenuViewportAttrs() {\n\treturn { \"data-menu-viewport\": \"\" };\n}\nfunction getMenuRootViewAttrs() {\n\treturn {\n\t\t\"data-menu-root-view\": \"\",\n\t\t\"data-menu-view\": \"\"\n\t};\n}\nfunction getViewportTransitionState(content) {\n\tlet state = viewportTransitionStates.get(content);\n\tif (!state) {\n\t\tstate = {\n\t\t\tpending: null,\n\t\t\tphaseKeys: /* @__PURE__ */ new WeakMap()\n\t\t};\n\t\tviewportTransitionStates.set(content, state);\n\t}\n\treturn state;\n}\nfunction getMenuViewportElement(content) {\n\tif (!content) return null;\n\treturn content.querySelector(`:scope > [${MENU_VIEWPORT_ATTR}]`) ?? content;\n}\nfunction getViewportElement(content, view) {\n\tconst viewport = getMenuViewportElement(content);\n\tif (viewport && viewport !== content) return viewport;\n\tif (view?.parentElement && content.contains(view.parentElement)) return view.parentElement;\n\treturn content;\n}\nfunction getRootViewElement(viewport) {\n\treturn viewport.querySelector(`:scope > [${MENU_ROOT_VIEW_ATTR}]`);\n}\nfunction getActiveMenuViewElement(viewport) {\n\treturn Array.from(viewport.children).find((child) => child instanceof HTMLElement && child.hasAttribute(MENU_VIEW_ATTR) && !child.hasAttribute(MENU_ROOT_VIEW_ATTR) && !child.hidden && !child.hasAttribute(TransitionDataAttrs.transitionEnding)) ?? null;\n}\nfunction resolveMinWidth(options) {\n\treturn options?.minWidth ?? DEFAULT_MENU_VIEWPORT_MIN_WIDTH;\n}\nfunction snapshotInlineStyle(element) {\n\treturn MENU_VIEW_MEASURE_STYLE_PROPERTIES.map((property) => ({\n\t\tproperty,\n\t\tvalue: element.style.getPropertyValue(property),\n\t\tpriority: element.style.getPropertyPriority(property)\n\t}));\n}\nfunction restoreInlineStyle(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}\nfunction measureMenuView(view, minWidth) {\n\tconst snapshot = snapshotInlineStyle(view);\n\ttry {\n\t\tview.style.setProperty(\"position\", \"absolute\");\n\t\tview.style.setProperty(\"top\", \"0px\");\n\t\tview.style.setProperty(\"right\", \"auto\");\n\t\tview.style.setProperty(\"bottom\", \"auto\");\n\t\tview.style.setProperty(\"left\", \"0px\");\n\t\tview.style.setProperty(\"width\", \"max-content\");\n\t\tview.style.setProperty(\"height\", \"auto\");\n\t\tview.style.setProperty(\"min-width\", `${minWidth}px`);\n\t\tview.style.setProperty(\"max-width\", \"none\");\n\t\tforceLayout(view);\n\t\tconst rect = view.getBoundingClientRect();\n\t\treturn {\n\t\t\twidth: Math.ceil(Math.max(minWidth, rect.width, view.scrollWidth)),\n\t\t\theight: Math.ceil(Math.max(rect.height, view.scrollHeight))\n\t\t};\n\t} finally {\n\t\trestoreInlineStyle(view, snapshot);\n\t\tforceLayout(view);\n\t}\n}\nfunction setViewportSize(content, size) {\n\tcontent.style.setProperty(MENU_WIDTH_VAR, `${size.width}px`);\n\tcontent.style.setProperty(MENU_HEIGHT_VAR, `${size.height}px`);\n}\nfunction setMenuViewState(view, state) {\n\tview.setAttribute(MENU_VIEW_STATE_ATTR, state);\n\tif (state === MENU_VIEW_ACTIVE_STATE) view.setAttribute(\"data-open\", \"\");\n\telse view.removeAttribute(\"data-open\");\n}\nfunction prepareEnteringMenuView(content, rootView, entering, state, options) {\n\tconst minWidth = resolveMinWidth(options);\n\tconst fromSize = measureMenuView(rootView, minWidth);\n\tstate.pending = {\n\t\tentering,\n\t\tfromSize,\n\t\ttoSize: measureMenuView(entering, minWidth)\n\t};\n\tsetMenuViewState(rootView, MENU_VIEW_ACTIVE_STATE);\n\tsetViewportSize(content, fromSize);\n\tforceLayout(content);\n}\nfunction startEnteringMenuView(content, rootView, entering, state, options) {\n\tconst minWidth = resolveMinWidth(options);\n\tconst current = state.pending?.entering === entering ? state.pending : {\n\t\tentering,\n\t\tfromSize: measureMenuView(rootView, minWidth),\n\t\ttoSize: measureMenuView(entering, minWidth)\n\t};\n\tstate.pending = null;\n\tsetViewportSize(content, current.fromSize);\n\tforceLayout(rootView);\n\tsetMenuViewState(rootView, MENU_VIEW_INACTIVE_STATE);\n\tforceLayout(rootView);\n\tsetViewportSize(content, current.toSize);\n}\nfunction startExitingMenuView(content, rootView, exiting, transitionState, options) {\n\ttransitionState.pending = null;\n\tconst minWidth = resolveMinWidth(options);\n\tconst fromSize = measureMenuView(exiting, minWidth);\n\tconst toSize = measureMenuView(rootView, minWidth);\n\tsetViewportSize(content, fromSize);\n\tsetMenuViewState(rootView, MENU_VIEW_INACTIVE_STATE);\n\tforceLayout(rootView);\n\tsetMenuViewState(rootView, MENU_VIEW_ACTIVE_STATE);\n\tforceLayout(rootView);\n\tsetViewportSize(content, toSize);\n}\nfunction syncMenuViewRoot(content, hasActiveChildView, options) {\n\tif (!content || hasActiveChildView) return;\n\tconst viewport = getViewportElement(content);\n\tconst rootView = getRootViewElement(viewport);\n\tif (!rootView || getActiveMenuViewElement(viewport)) return;\n\tconst size = measureMenuView(rootView, resolveMinWidth(options));\n\tsetMenuViewState(rootView, MENU_VIEW_ACTIVE_STATE);\n\tsetViewportSize(content, size);\n}\nfunction syncMenuViewTransition(content, view, viewState, options) {\n\tif (!content || !view) return;\n\tconst viewport = getViewportElement(content, view);\n\tconst rootView = getRootViewElement(viewport);\n\tif (!rootView) return;\n\tconst state = getViewportTransitionState(content);\n\tconst phaseKey = `${viewState.phase}:${viewState.direction}`;\n\tif (state.phaseKeys.get(view) === phaseKey) return;\n\tstate.phaseKeys.set(view, phaseKey);\n\tif (viewState.phase === \"hidden\") {\n\t\tstate.phaseKeys.delete(view);\n\t\tsyncMenuViewRoot(content, getActiveMenuViewElement(viewport) !== null, options);\n\t\treturn;\n\t}\n\tif (viewState.phase === \"entering\") {\n\t\tprepareEnteringMenuView(content, rootView, view, state, options);\n\t\treturn;\n\t}\n\tif (viewState.phase === \"active\") {\n\t\tstartEnteringMenuView(content, rootView, view, state, options);\n\t\treturn;\n\t}\n\tstartExitingMenuView(content, rootView, view, state, options);\n}\n//#endregion\nexport { getMenuRootViewAttrs, getMenuViewportAttrs, getMenuViewportElement, syncMenuViewRoot, syncMenuViewTransition };\n\n//# sourceMappingURL=menu-viewport-transition.js.map","import { PopoverCSSVars } from \"../../../core/ui/popover/popover-css-vars.js\";\nimport { createDOMRect } from \"../../utils/layout.js\";\nimport { clamp } from \"@videojs/utils/number\";\nimport { resolveCSSLength, supportsAnchorPositioning } from \"@videojs/utils/dom\";\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 getCrossAxisAvailable(start, end, size, boundaryStart, boundaryEnd, align, alignOffset) {\n\tif (align === \"start\") return boundaryEnd - (start + alignOffset);\n\tif (align === \"end\") return end + alignOffset - boundaryStart;\n\tconst center = start + size / 2 + alignOffset;\n\treturn Math.min(center - boundaryStart, boundaryEnd - center) * 2;\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),\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\t...getManualPositionStyle(triggerRect, popupRect, opts, resolved),\n\t\t\t...boundaryRect ? getPositioningCSSVars(triggerRect, boundaryRect, opts, resolved, cssVars) : {},\n\t\t\tposition: \"fixed\",\n\t\t\tinset: \"auto\",\n\t\t\tmargin: \"0\"\n\t\t};\n\t}\n\treturn {};\n}\n/** Generate style to set on the trigger for CSS Anchor Positioning. */\nfunction getAnchorNameStyle(anchorName) {\n\tif (!supportsAnchorPositioning()) return {};\n\treturn { anchorName: `--${anchorName}` };\n}\nfunction getAnchorPositionCSS(anchorName, opts, cssVars = PopoverCSSVars) {\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 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};\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 (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 (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, align } = 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(getCrossAxisAvailable(triggerRect.left, triggerRect.right, triggerRect.width, boundaryStartX, boundaryEndX, align, offsets.alignOffset));\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(getCrossAxisAvailable(triggerRect.top, triggerRect.bottom, triggerRect.height, boundaryStartY, boundaryEndY, align, offsets.alignOffset));\n\t}\n\treturn vars;\n}\n/** @deprecated Use `getPositioningCSSVars` instead. */\nfunction getPopoverCSSVars(triggerRect, boundaryRect, side) {\n\tconst vars = {\n\t\t[PopoverCSSVars.anchorWidth]: `${triggerRect.width}px`,\n\t\t[PopoverCSSVars.anchorHeight]: `${triggerRect.height}px`\n\t};\n\tif (side === \"top\" || side === \"bottom\") {\n\t\tvars[PopoverCSSVars.availableHeight] = side === \"top\" ? `${triggerRect.top - boundaryRect.top}px` : `${boundaryRect.bottom - triggerRect.bottom}px`;\n\t\tvars[PopoverCSSVars.availableWidth] = `${boundaryRect.width}px`;\n\t} else {\n\t\tvars[PopoverCSSVars.availableWidth] = side === \"left\" ? `${triggerRect.left - boundaryRect.left}px` : `${boundaryRect.right - triggerRect.right}px`;\n\t\tvars[PopoverCSSVars.availableHeight] = `${boundaryRect.height}px`;\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}) {\n\tconst { side, align } = opts;\n\tconst { sideOffset, alignOffset } = offsets;\n\tlet top = 0;\n\tlet left = 0;\n\tif (side === \"top\") top = triggerRect.top - popupRect.height - sideOffset;\n\telse if (side === \"bottom\") top = triggerRect.bottom + sideOffset;\n\telse if (side === \"left\") left = triggerRect.left - popupRect.width - sideOffset;\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\treturn {\n\t\ttop: `${top}px`,\n\t\tleft: `${left}px`\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 `offsetWidth`/`offsetHeight` preserves the untransformed size.\n*/\nfunction getPopupPositionRect(el) {\n\tconst rect = el.getBoundingClientRect();\n\tconst width = el.offsetWidth || rect.width;\n\tconst height = el.offsetHeight || rect.height;\n\treturn createDOMRect(rect.left, rect.top, width, height);\n}\n//#endregion\nexport { getAnchorNameStyle, getAnchorPositionStyle, getManualPositionStyle, getPopoverCSSVars, getPopupPositionRect, getPositioningCSSVars, resolveOffsets };\n\n//# sourceMappingURL=popover-positioning.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 { 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;\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) input.patch({ pointing: false });\n\t\telse {\n\t\t\tif (!committedOnRelease) options.onValueCommit?.(lastDragPercent);\n\t\t\tisDragging = false;\n\t\t\tinput.patch({\n\t\t\t\tdragging: false,\n\t\t\t\tpointing: false\n\t\t\t});\n\t\t\toptions.onDragEnd?.();\n\t\t}\n\t\tcommittedOnRelease = 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\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\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\tdefault:\n\t\t\t\t\tif (!event.metaKey && !event.ctrlKey && !event.altKey && event.key >= \"0\" && event.key <= \"9\") newPercent = Number(event.key) * 10;\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});\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 resizeObserver = null;\n\tif (options.onResize) {\n\t\tresizeObserver = new ResizeObserver(() => options.onResize());\n\t\tresizeObserver.observe(options.getElement());\n\t}\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\tresizeObserver?.disconnect();\n\t\t\treleaseCapture();\n\t\t\tcleanup();\n\t\t}\n\t};\n}\n//#endregion\nexport { createSlider };\n\n//# sourceMappingURL=slider.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 { ThumbnailCore } from \"../../core/ui/thumbnail/thumbnail-core.js\";\nimport { listen } 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 resizeObserver = 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 (!resizeObserver) {\n\t\t\tconst container = getContainer();\n\t\t\tif (container) {\n\t\t\t\tresizeObserver = new ResizeObserver(onStateChange);\n\t\t\t\tresizeObserver.observe(container);\n\t\t\t}\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\tresizeObserver?.disconnect();\n\t\tresizeObserver = 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\tconst { onClick: _, ...baseTriggerProps } = popover.triggerProps;\n\tconst triggerProps = {\n\t\t...baseTriggerProps,\n\t\tonPointerDown() {\n\t\t\tisPointerDown = true;\n\t\t},\n\t\tonPointerEnter(event) {\n\t\t\tif (options.disabled?.()) 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\tif (options.disabled?.()) 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\topen: () => popover.open(\"hover\"),\n\t\tclose: (reason = \"hover\") => popover.close(reason)\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.\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\tfunction open() {\n\t\tcancelAnimationFrame(rafId1);\n\t\tcancelAnimationFrame(rafId2);\n\t\trafId1 = 0;\n\t\trafId2 = 0;\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\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 || !state.current.active) return resolve();\n\t\t\t\t\tstate.patch({ status: \"idle\" });\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n\tfunction close(el) {\n\t\tcancelAnimationFrame(rafId1);\n\t\tcancelAnimationFrame(rafId2);\n\t\trafId1 = 0;\n\t\trafId2 = 0;\n\t\tstate.patch({ status: \"ending\" });\n\t\treturn new Promise((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) return resolve();\n\t\t\t\t\twaitForAnimations(el).finally(() => {\n\t\t\t\t\t\tif (destroyed || state.current.status !== \"ending\") return resolve();\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\tresolve();\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\tcancelAnimationFrame(rafId1);\n\t\tcancelAnimationFrame(rafId2);\n\t\trafId1 = 0;\n\t\trafId2 = 0;\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 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 { isFunction, isUndefined } from \"@videojs/utils/predicate\";\nimport { listen } from \"@videojs/utils/dom\";\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","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/dom/utils/log.ts\nconst warned = /* @__PURE__ */ new Set();\nfunction logMissingFeature(displayName, featureName) {\n\tconst key = `${displayName}:${featureName}`;\n\tif (warned.has(key)) return;\n\twarned.add(key);\n\tconsole.warn(`${displayName} requires ${featureName} feature`);\n}\n//#endregion\nexport { logMissingFeature };\n\n//# sourceMappingURL=log.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 { findHotkeyCoordinator } 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\n/** Provides `aria-keyshortcuts` for a given hotkey action name. */\nexport class AriaKeyShortcutsController implements ReactiveController {\n #action: string;\n #container: ContainerContextConsumer;\n\n constructor(host: PlayerControllerHost, action: string) {\n this.#action = action;\n this.#container = new ContextConsumer(host, { context: containerContext, subscribe: true });\n host.addController(this);\n }\n\n get value(): string | undefined {\n const container = this.#container.value?.container;\n if (!container) return undefined;\n return findHotkeyCoordinator(container)?.getAriaKeys(this.#action);\n }\n\n hostConnected(): void {}\n hostDisconnected(): void {}\n}\n","import type {\n ButtonState,\n InferComponentState,\n InferMediaState,\n MediaButtonComponent,\n StateAttrMap,\n} from '@videojs/core';\nimport { applyElementProps, applyStateDataAttrs, createButton, logMissingFeature } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\n\nimport type { PlayerController } from '../player/player-controller';\nimport { AriaKeyShortcutsController } from './hotkey/aria-key-shortcuts-controller';\nimport { MediaElement } from './media-element';\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 = '';\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>): void;\n\n /** Override to set the hotkey action name for `aria-keyshortcuts`. */\n protected readonly hotkeyAction: string | undefined = undefined;\n\n get $state(): State<ButtonState> {\n return this.core.state;\n }\n\n #disconnect: AbortController | null = null;\n #hotkeyRegistry: AriaKeyShortcutsController | null = null;\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 }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => this.activate(this.mediaState.value!),\n isDisabled: () => this.disabled || !this.mediaState.value,\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 || undefined;\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 if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n applyElementProps(this, {\n ...this.core.getAttrs?.(state),\n 'aria-keyshortcuts': this.#hotkeyRegistry?.value,\n });\n applyStateDataAttrs(this, state, this.stateAttrMap);\n }\n}\n","import { type MediaVolumeState, MuteButtonCore, MuteButtonDataAttrs } from '@videojs/core';\nimport { selectVolume } from '@videojs/core/dom';\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 { type MediaPlaybackState, PlayButtonCore, PlayButtonDataAttrs } from '@videojs/core';\nimport { selectPlayback } from '@videojs/core/dom';\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 { isEventWithinElement } from '@videojs/core/dom';\nimport type { ReactiveController, ReactiveControllerHost } from '@videojs/element';\n\nexport type PositionControllerHost = ReactiveControllerHost & HTMLElement;\n\n/**\n * Reactive controller that manages JS-fallback positioning for floating\n * popup elements (tooltips, popovers). Tracks scroll, resize, and\n * ResizeObserver events to keep the popup aligned with its trigger.\n *\n * Native CSS Anchor Positioning still uses this controller for dynamic\n * sizing variables such as available width/height.\n */\nexport class PositionController implements ReactiveController {\n readonly #host: PositionControllerHost;\n\n #abort: AbortController | null = null;\n #frame = 0;\n #resizeObserver: ResizeObserver | null = null;\n #trigger: HTMLElement | null = null;\n #boundary: Element | null = null;\n\n constructor(host: PositionControllerHost) {\n this.#host = host;\n host.addController(this);\n }\n\n /** Discover a trigger element linked via `commandfor` attribute. */\n findTrigger(): HTMLElement | null {\n if (!this.#host.id) return null;\n const root = this.#host.getRootNode() as Document | ShadowRoot;\n return root.querySelector<HTMLElement>(`[commandfor=\"${this.#host.id}\"]`);\n }\n\n /** Start or update position tracking for the given trigger. */\n sync(trigger: HTMLElement | null, boundary: Element | null = null): void {\n if (!trigger) return;\n if (this.#abort && this.#trigger === trigger && this.#boundary === boundary) return;\n\n this.cleanup();\n this.#abort = new AbortController();\n this.#trigger = trigger;\n this.#boundary = boundary;\n const { signal } = this.#abort;\n\n const reposition = (event?: Event) => {\n if (event && isEventWithinElement(event, this.#host)) return;\n\n cancelAnimationFrame(this.#frame);\n this.#frame = requestAnimationFrame(() => {\n if (signal.aborted) return;\n this.#host.requestUpdate();\n });\n };\n\n window.addEventListener('scroll', reposition, { capture: true, passive: true, signal });\n window.addEventListener('resize', reposition, { signal });\n\n if (typeof ResizeObserver === 'function') {\n this.#resizeObserver = new ResizeObserver(() => {\n reposition();\n });\n this.#resizeObserver.observe(trigger);\n this.#resizeObserver.observe(this.#host);\n if (boundary) this.#resizeObserver.observe(boundary);\n }\n\n reposition();\n }\n\n /** Stop all position tracking. */\n cleanup(): void {\n this.#abort?.abort();\n this.#abort = null;\n this.#trigger = null;\n this.#boundary = null;\n cancelAnimationFrame(this.#frame);\n this.#frame = 0;\n // Disconnect unobserves trigger, host, and boundary together.\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = null;\n }\n\n hostDisconnected(): void {\n this.cleanup();\n }\n\n hostDestroyed(): void {\n this.cleanup();\n }\n}\n","import type { MenuState, StateAttrMap } from '@videojs/core';\nimport type { MenuApi, NavigationState } from '@videojs/core/dom';\nimport { createContext } from '@videojs/element/context';\n\nexport interface MenuContextValue {\n menu: MenuApi;\n state: MenuState;\n stateAttrMap: StateAttrMap<MenuState>;\n navigation: NavigationState;\n /** The parent menu's API — set by nested submenus for pop-on-select behavior. */\n parentMenu: MenuApi | null;\n}\n\nexport interface MenuRadioGroupContextValue {\n value: string;\n onValueChange: (value: string) => void;\n}\n\nconst MENU_CONTEXT_KEY = Symbol('@videojs/menu');\nconst MENU_RADIO_GROUP_CONTEXT_KEY = Symbol('@videojs/menu-radio-group');\n\nexport const menuContext = createContext<MenuContextValue>(MENU_CONTEXT_KEY);\nexport const menuRadioGroupContext = createContext<MenuRadioGroupContextValue>(MENU_RADIO_GROUP_CONTEXT_KEY);\n","import { MenuCore, MenuDataAttrs, type MenuInput, POPUP_HOST_ATTR } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createMenu,\n createMenuViewTransition,\n createTransition,\n getAnchorNameStyle,\n getAnchorPositionStyle,\n getMenuViewportAttrs,\n getMenuViewTransitionAttrs,\n getPopupPositionRect,\n getPositioningBoundaryRect,\n getRootPositionOptions,\n isMenuNavigationKey,\n type MenuApi,\n type MenuChangeDetails,\n type MenuOpenChangeReason,\n type MenuViewTransitionState,\n type NavigationState,\n type PositioningBoundary,\n resolveOffsets,\n resolvePositioningBoundary,\n syncMenuViewRoot,\n syncMenuViewTransition,\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 { applyStyles, supportsAnchorPositioning, tryHidePopover, tryShowPopover } from '@videojs/utils/dom';\nimport { containerContext } from '../../player/context';\nimport { MediaElement } from '../media-element';\nimport { PositionController } from '../position-controller';\nimport { type MenuContextValue, menuContext } from './context';\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 #containerCtx = new ContextConsumer(this, { context: containerContext, subscribe: true });\n // Consume parent menu context — present when this is a nested (submenu) element.\n readonly #parentCtx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n readonly #menuViewTransition = createMenuViewTransition({\n focusFirstItem: () => {\n this.#menu?.highlightFirstItem({ preventScroll: true });\n },\n restoreFocus: (triggerId) => {\n const triggerElement = triggerId ? document.getElementById(triggerId) : null;\n const fallbackTrigger = this.parentElement?.querySelector<HTMLElement>(\n `[data-has-submenu][commandfor=\"${this.id}\"]`\n );\n\n (triggerElement ?? fallbackTrigger)?.focus({ preventScroll: true });\n },\n });\n #menu: MenuApi | null = null;\n #snapshot: SnapshotController<MenuInput> | null = null;\n #navSnapshot: SnapshotController<NavigationState> | null = null;\n #menuViewSnapshot: SnapshotController<MenuViewTransitionState> | null = null;\n #navState: NavigationState = { stack: [], direction: 'forward' };\n\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.#menu = createMenu({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: MenuChangeDetails) => {\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 group: () => (this.#parentCtx.value ? undefined : this.#containerCtx.value?.popupGroup),\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 if (this.#navSnapshot) {\n this.#navSnapshot.track(this.#menu.navigationInput);\n } else {\n this.#navSnapshot = new SnapshotController(this, this.#menu.navigationInput);\n }\n\n if (this.#menuViewSnapshot) {\n this.#menuViewSnapshot.track(this.#menuViewTransition.input);\n } else {\n this.#menuViewSnapshot = new SnapshotController(this, this.#menuViewTransition.input);\n }\n }\n\n protected override firstUpdated(changed: PropertyValues): void {\n super.firstUpdated(changed);\n\n if (this.defaultOpen && !this.open) {\n this.#menu?.open();\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupTrigger();\n this.#menu?.destroy();\n this.#menu = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n this.#menuViewTransition.destroy();\n }\n\n close(reason: MenuOpenChangeReason = 'imperative-action'): void {\n this.#menu?.close(reason);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n\n const parentCtx = this.#parentCtx.value ?? null;\n const isSubmenu = parentCtx !== null;\n\n this.#core.setProps({\n open: this.open,\n defaultOpen: this.defaultOpen,\n side: this.side,\n align: this.align,\n closeOnEscape: this.closeOnEscape,\n closeOnOutsideClick: this.closeOnOutsideClick,\n isSubmenu,\n });\n\n if (this.#menu && changed.has('open') && !isSubmenu) {\n const { active: interactionOpen } = this.#menu.input.current;\n if (this.open !== interactionOpen) {\n if (this.open) {\n this.#menu.open();\n } else {\n this.#menu.close();\n }\n }\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 this.#navState = this.#menu.navigationInput.current;\n const input = this.#menu.input.current;\n this.#core.setInput(input);\n const state = this.#core.getState();\n\n if (isSubmenu && parentCtx) {\n this.#updateAsSubmenu(parentCtx);\n } else {\n this.#updateAsRoot(state);\n }\n\n // Provide context to child parts.\n // When nested, expose the parent menu's API so items can pop on select.\n const parentMenu = parentCtx?.menu ?? null;\n this.#provider.setValue({\n menu: this.#menu,\n state,\n stateAttrMap: MenuDataAttrs,\n navigation: this.#navState,\n parentMenu,\n });\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 ...getMenuViewportAttrs(),\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 applyStyles(this.#currentTrigger, getAnchorNameStyle(this.id));\n }\n\n if (!state.open) {\n this.#position.cleanup();\n return;\n }\n\n syncMenuViewRoot(this, this.#navState.stack.length > 0);\n\n const positionOptions = getRootPositionOptions(state.side, state.align);\n if (!positionOptions) return;\n\n const boundaryElement = this.#getBoundaryElement();\n const triggerRect = this.#currentTrigger?.getBoundingClientRect();\n const boundaryRect = getPositioningBoundaryRect(boundaryElement);\n const offsets = resolveOffsets(this);\n\n if (supportsAnchorPositioning()) {\n applyStyles(\n this,\n getAnchorPositionStyle(this.id, positionOptions, triggerRect, undefined, boundaryRect, offsets)\n );\n } else {\n const selfRect = getPopupPositionRect(this);\n applyStyles(this, getAnchorPositionStyle(this.id, positionOptions, triggerRect, selfRect, boundaryRect, offsets));\n }\n\n this.#position.sync(this.#currentTrigger, boundaryElement);\n }\n\n #updateAsSubmenu(parentCtx: MenuContextValue): void {\n const parentNavigation = parentCtx.navigation;\n const topEntry = parentNavigation.stack[parentNavigation.stack.length - 1];\n const activeSubMenuId = topEntry?.menuId ?? null;\n const isActive = activeSubMenuId === this.id;\n\n this.#menuViewTransition.setElement(this);\n this.#menuViewTransition.sync({\n active: isActive,\n direction: parentNavigation.direction,\n triggerId: topEntry?.triggerId ?? null,\n });\n\n // Apply base submenu attributes regardless of phase.\n const transitionState = this.#menuViewTransition.input.current;\n\n applyElementProps(this, {\n ...getMenuViewTransitionAttrs(transitionState),\n role: 'menu',\n tabIndex: -1,\n 'data-submenu': '',\n });\n syncMenuViewTransition(parentCtx.menu.contentElement, this, transitionState);\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 stack = parentCtx.menu.navigationInput.current.stack;\n const topEntry = stack[stack.length - 1];\n const ownsActiveSubmenu = topEntry?.menuId === this.id;\n const isBackNavigationKey = event.key === 'ArrowLeft' || event.key === 'Escape';\n\n if (isBackNavigationKey && ownsActiveSubmenu && !defaultPreventedBeforeMenu) {\n event.preventDefault();\n parentCtx.menu.pop();\n }\n\n if (isNavigationKey && (!isBackNavigationKey || ownsActiveSubmenu)) {\n event.stopPropagation();\n }\n };\n\n #handleContentFocusOut = (event: UIFocusEvent): void => {\n this.#menu?.contentProps.onFocusOut(event);\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 this.#currentTrigger.style.removeProperty('anchor-name');\n }\n\n this.#triggerAbort?.abort();\n this.#triggerAbort = null;\n this.#currentTrigger = null;\n }\n\n #getBoundaryElement(): Element | null {\n return resolvePositioningBoundary(this.boundary, {\n container: this.#containerCtx.value?.container ?? null,\n root: this.getRootNode() as Document | ShadowRoot,\n });\n }\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 { applyElementProps, applyStateDataAttrs } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer, ContextProvider } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { menuContext, menuRadioGroupContext } from './context';\n\nexport class MenuRadioGroupElement extends MediaElement {\n static readonly tagName: string = 'media-menu-radio-group';\n\n static override properties = {\n value: { type: String },\n label: { type: String },\n } satisfies PropertyDeclarationMap<'value' | 'label'>;\n\n value = '';\n label: string | undefined = undefined;\n\n readonly #menuCtx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n readonly #provider = new ContextProvider(this, { context: menuRadioGroupContext });\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n applyElementProps(this, {\n role: 'group',\n 'aria-label': this.label,\n });\n\n const ctx = this.#menuCtx.value;\n if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\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 { applyElementProps, applyStateDataAttrs, 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, currentMenuCtx.parentMenu);\n },\n onPointerenter: () => {\n const currentMenuCtx = this.#menuCtx.value;\n if (!this.disabled) currentMenuCtx?.menu.highlight(this, { focus: false });\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 applyStateDataAttrs(this, menuCtx.state, menuCtx.stateAttrMap);\n }\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 getAnchorNameStyle,\n getAnchorPositionStyle,\n getPopupPositionRect,\n getPositioningBoundaryRect,\n type PopoverApi,\n type PopoverChangeDetails,\n type PopoverOpenChangeReason,\n type PositioningBoundary,\n resolveOffsets,\n resolvePositioningBoundary,\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 { applyStyles, supportsAnchorPositioning, tryHidePopover, tryShowPopover } from '@videojs/utils/dom';\nimport { containerContext } from '../../player/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 #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.#containerCtx.value?.popupGroup,\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 and anchor-name to the discovered trigger.\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, this.#core.getTriggerAttrs(state, this.id));\n applyStyles(this.#currentTrigger, getAnchorNameStyle(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 // Apply positioning styles to self.\n const posOpts = { side: state.side, align: state.align };\n const boundaryElement = this.#getBoundaryElement();\n const triggerRect = this.#currentTrigger?.getBoundingClientRect();\n const boundaryRect = getPositioningBoundaryRect(boundaryElement);\n const offsets = resolveOffsets(this);\n\n if (supportsAnchorPositioning()) {\n applyStyles(this, getAnchorPositionStyle(this.id, posOpts, triggerRect, undefined, boundaryRect, offsets));\n } else {\n // JS fallback: measure rects and resolve CSS var offsets.\n const selfRect = getPopupPositionRect(this);\n applyStyles(this, getAnchorPositionStyle(this.id, posOpts, triggerRect, selfRect, boundaryRect, offsets));\n }\n\n this.#position.sync(this.#currentTrigger, boundaryElement);\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 // Remove ARIA attributes and anchor-name style from the old trigger.\n applyElementProps(this.#currentTrigger, {\n 'aria-expanded': undefined,\n 'aria-haspopup': undefined,\n 'aria-controls': undefined,\n });\n this.#currentTrigger.style.removeProperty('anchor-name');\n }\n\n this.#triggerAbort?.abort();\n this.#triggerAbort = null;\n this.#currentTrigger = null;\n }\n\n #getBoundaryElement(): Element | null {\n return resolvePositioningBoundary(this.boundary, {\n container: this.#containerCtx.value?.container ?? null,\n root: this.getRootNode() as Document | ShadowRoot,\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 {\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 getAnchorNameStyle,\n getAnchorPositionStyle,\n getPopupPositionRect,\n getPositioningBoundaryRect,\n type PositioningBoundary,\n resolveOffsets,\n resolvePositioningBoundary,\n type TooltipApi,\n type TooltipChangeDetails,\n type TooltipOpenChangeReason,\n} from '@videojs/core/dom';\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 { applyStyles, supportsAnchorPositioning, tryHidePopover, tryShowPopover } from '@videojs/utils/dom';\n\nimport { containerContext } from '../../player/context';\nimport { MediaElement } from '../media-element';\nimport { PositionController } from '../position-controller';\nimport { tooltipGroupContext } from './context';\n\ntype TriggerElement = HTMLElement & {\n getLabel(): string | 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 } satisfies PropertyDeclarationMap<keyof TooltipCore.Props | 'boundary'>;\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\n readonly #core = new TooltipCore();\n readonly #groupConsumer = new ContextConsumer(this, { context: tooltipGroupContext });\n readonly #containerCtx = new ContextConsumer(this, { context: containerContext, subscribe: true });\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 });\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 // 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.#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 // Apply anchor-name to the discovered trigger for CSS positioning.\n if (this.#currentTrigger) {\n applyStyles(this.#currentTrigger, getAnchorNameStyle(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 // Apply positioning styles to self.\n const posOpts = { side: state.side, align: state.align };\n const boundaryElement = this.#getBoundaryElement();\n const triggerRect = this.#currentTrigger?.getBoundingClientRect();\n const boundaryRect = getPositioningBoundaryRect(boundaryElement);\n const offsets = resolveOffsets(this, TooltipCSSVars);\n\n if (supportsAnchorPositioning()) {\n applyStyles(\n this,\n getAnchorPositionStyle(this.id, posOpts, triggerRect, undefined, boundaryRect, offsets, TooltipCSSVars)\n );\n } else {\n // JS fallback: measure rects and resolve CSS var offsets.\n const selfRect = getPopupPositionRect(this);\n applyStyles(\n this,\n getAnchorPositionStyle(this.id, posOpts, triggerRect, selfRect, boundaryRect, offsets, TooltipCSSVars)\n );\n }\n\n this.#position.sync(this.#currentTrigger, boundaryElement);\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 }\n }\n }\n\n #syncContent(triggerEl: TriggerElement): void {\n this.textContent = triggerEl.getLabel() ?? '';\n }\n\n #cleanupTrigger(): void {\n if (this.#currentTrigger) {\n this.#currentTrigger.style.removeProperty('anchor-name');\n }\n\n this.#triggerAbort?.abort();\n this.#triggerAbort = null;\n this.#currentTrigger = null;\n }\n\n #getBoundaryElement(): Element | null {\n return resolvePositioningBoundary(this.boundary, {\n container: this.#containerCtx.value?.container ?? null,\n root: this.getRootNode() as Document | ShadowRoot,\n });\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 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 protected override update(_changed: PropertyValues): void {\n super.update(_changed);\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 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 { AlertDialogDataAttrs, type AlertDialogInput, ErrorDialogCore } from '@videojs/core';\nimport {\n type AlertDialogApi,\n applyElementProps,\n applyStateDataAttrs,\n createAlertDialog,\n createTransition,\n selectError,\n} from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { SnapshotController } from '@videojs/store/html';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { alertDialogContext } from '../alert-dialog/context';\nimport { MediaElement } from '../media-element';\n\nconst FALLBACK_MESSAGE = 'An error occurred. Please try again.';\n\nlet idCounter = 0;\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\n #dialog: AlertDialogApi | null = null;\n #snapshot: SnapshotController<AlertDialogInput> | null = null;\n #lastErrorMessage: string | null = null;\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 const message = errorState.error.message?.trim();\n this.#lastErrorMessage = message || null;\n }\n\n // Set description text before opening so content is ready for the transition.\n const desc = this.querySelector('media-alert-dialog-description');\n if (desc) {\n desc.textContent = this.#lastErrorMessage ?? FALLBACK_MESSAGE;\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","import { applyElementProps, 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 { menuContext } from './context';\n\nexport class MenuBackElement extends MediaElement {\n static readonly tagName = 'media-menu-back';\n\n static override properties = {\n label: { type: String },\n } satisfies PropertyDeclarationMap<'label'>;\n\n label = 'Back';\n\n readonly #ctx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n\n #disconnect: AbortController | null = null;\n #bound = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#disconnect = new AbortController();\n this.#bound = false;\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n this.#bound = 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.#bound) {\n this.#bound = true;\n\n applyElementProps(\n this,\n {\n onClick: () => {\n // Pop to the parent menu view.\n ctx.parentMenu?.pop();\n },\n },\n { signal: this.#disconnect.signal }\n );\n }\n\n applyElementProps(this, {\n role: 'button',\n 'aria-label': this.label,\n });\n\n if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import { applyElementProps, 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 { 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 });\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 applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import { applyElementProps, 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 { menuContext } from './context';\n\nexport class MenuGroupElement extends MediaElement {\n static readonly tagName = 'media-menu-group';\n\n static override properties = {\n label: { type: String },\n } satisfies PropertyDeclarationMap<'label'>;\n\n label: string | undefined = undefined;\n\n readonly #ctx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n applyElementProps(this, {\n role: 'group',\n 'aria-label': this.label,\n });\n\n const ctx = this.#ctx.value;\n if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import { applyElementProps, applyStateDataAttrs, 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 } 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\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: (event: MouseEvent) => {\n const currentCtx = this.#ctx.value;\n if (!currentCtx || this.disabled) return;\n\n const target = this.commandfor;\n if (target) {\n // Push the linked submenu — use this element's id as triggerId\n // (ensure the element has an id for focus restoration).\n currentCtx.menu.push(target, this.id);\n } else {\n this.dispatchEvent(new CustomEvent('select', { bubbles: true }));\n completeMenuItemSelection(currentCtx.menu, currentCtx.parentMenu);\n }\n event.preventDefault();\n },\n onKeyDown: (event: KeyboardEvent) => {\n const currentCtx = this.#ctx.value;\n if (!currentCtx || this.disabled || event.key !== 'ArrowRight') return;\n\n const target = this.commandfor;\n if (!target) return;\n\n currentCtx.menu.push(target, this.id);\n event.preventDefault();\n },\n onPointerenter: () => {\n const currentCtx = this.#ctx.value;\n if (!this.disabled) currentCtx?.menu.highlight(this, { focus: false });\n },\n },\n { signal: this.#disconnect.signal }\n );\n }\n\n const hasSubmenu = Boolean(this.commandfor);\n const topEntry = ctx.navigation.stack[ctx.navigation.stack.length - 1];\n const activeSubMenuId = topEntry?.menuId ?? null;\n const isExpanded = hasSubmenu ? activeSubMenuId === this.commandfor : undefined;\n\n applyElementProps(this, {\n role: 'menuitem',\n 'aria-disabled': this.disabled ? 'true' : undefined,\n ...(hasSubmenu && {\n 'aria-haspopup': 'menu',\n 'aria-expanded': isExpanded ? 'true' : 'false',\n 'data-has-submenu': '',\n }),\n });\n\n applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import type { MenuState } from '@videojs/core';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { menuContext } from './context';\n\nexport class MenuLabelElement extends ContextPartElement<MenuState> {\n static readonly tagName = 'media-menu-label';\n\n protected readonly consumer = new ContextConsumer(this, { context: menuContext, subscribe: true });\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 { menuContext } from './context';\n\nexport class MenuSeparatorElement extends MediaElement {\n static readonly tagName = 'media-menu-separator';\n\n readonly #ctx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n applyElementProps(this, { role: 'separator' });\n\n const ctx = this.#ctx.value;\n if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import { applyElementProps, getMenuRootViewAttrs } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport { MediaElement } from '../media-element';\n\nexport class MenuViewElement extends MediaElement {\n static readonly tagName = 'media-menu-view';\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n applyElementProps(this, getMenuRootViewAttrs());\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 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\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 void this.transition.open();\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 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-indicators/input-indicator-element';\nimport { LiveIndicator } from '../input-indicators/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, 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 { 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 { SliderPreviewOverflow } from '@videojs/core/dom';\nimport { applyStateDataAttrs, getSliderPreviewStyle } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { applyStyles } 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: SliderPreviewOverflow = 'clamp';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n #resizeObserver: ResizeObserver | null = null;\n #width = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.#resizeObserver = new ResizeObserver(([entry]) => {\n this.#width = entry!.contentRect.width;\n this.#applyPosition();\n });\n\n this.#resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = 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 type MediaTextTrackState,\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';\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 { StatusAnnouncerCore } from '@videojs/core';\nimport { getMediaSnapshot, subscribeToInputActions } 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 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 #core = new StatusAnnouncerCore();\n readonly #player = new PlayerController(this, playerContext);\n 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\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.setAttribute('role', 'status');\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.#inputActionUnsubscribe?.();\n this.#inputActionUnsubscribe = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#inputActionUnsubscribe?.();\n this.#core.destroy();\n super.destroyCallback();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps({ closeDelay: this.closeDelay });\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const label = this.#core.state.current.label;\n if (label) {\n this.setAttribute('aria-label', label);\n } else {\n this.removeAttribute('aria-label');\n }\n }\n\n #reconnect(): void {\n this.#inputActionUnsubscribe?.();\n this.#inputActionUnsubscribe = null;\n\n const container = this.#container.value?.container;\n if (!container) return;\n\n this.#inputActionUnsubscribe = subscribeToInputActions(container, (event) => {\n this.#core.processEvent(event, getMediaSnapshot(this.#player.value));\n });\n }\n}\n","import {\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 { InputIndicatorElement } from '../input-indicators/input-indicator-element';\nimport { LiveIndicator } from '../input-indicators/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 #core = new StatusIndicatorCore();\n readonly #transition = createTransition();\n readonly #liveIndicator = new LiveIndicator({\n host: this,\n dataAttrs: StatusIndicatorDataAttrs,\n render: renderStatusIndicator,\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({ actions: parseActions(this.actions), closeDelay: this.closeDelay });\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 { 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 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 } satisfies PropertyDeclarationMap<keyof TimeCore.Props>;\n\n type: TimeType = TimeCore.defaultProps.type;\n negativeSign = TimeCore.defaultProps.negativeSign;\n label = TimeCore.defaultProps.label;\n\n readonly #core = new TimeCore();\n readonly #state = new PlayerController(this, playerContext, selectTime);\n\n readonly #signSpan = document.createElement('span');\n readonly #textNode = document.createTextNode('');\n\n override connectedCallback(): void {\n super.connectedCallback();\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 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.setMedia(media);\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 applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, TimeDataAttrs);\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 selectTime,\n} from '@videojs/core/dom';\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 { 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 } satisfies PropertyDeclarationMap<Exclude<keyof TimeSliderCore.Props, 'value' | 'min' | 'max'>>;\n\n label = TimeSliderCore.defaultProps.label;\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\n readonly #core = new TimeSliderCore();\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\n #slider: SliderApi | null = null;\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 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.dispatchEvent(new CustomEvent('drag-start', { bubbles: true }));\n },\n onDragEnd: () => {\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 super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#slider?.destroy();\n super.destroyCallback();\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 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\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.valueFromPercent(state.pointerPercent),\n thumbAttrs: this.#core.getAttrs(state),\n thumbProps: this.#slider.thumbProps,\n formatValue: (value) => formatTime(value, state.duration),\n });\n }\n}\n","import {\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 { InputIndicatorElement } from '../input-indicators/input-indicator-element';\nimport { LiveIndicator } from '../input-indicators/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 #core = new VolumeIndicatorCore();\n readonly #transition = createTransition();\n readonly #liveIndicator = new LiveIndicator({\n host: this,\n dataAttrs: VolumeIndicatorDataAttrs,\n render: renderVolumeIndicator,\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 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 selectVolume,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { applyStyles, isRTL } from '@videojs/utils/dom';\n\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 = VolumeSliderCore.defaultProps.label;\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 #provider = new ContextProvider(this, { context: sliderContext });\n readonly #volumeState = new PlayerController(this, playerContext, selectVolume);\n\n #slider: SliderApi | null = null;\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 const signal = this.#disconnect.signal;\n\n const isDisabled = () => this.disabled || !this.#volumeState.value;\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.dispatchEvent(new CustomEvent('drag-start', { bubbles: true }));\n },\n onDragEnd: () => {\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 super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#slider?.destroy();\n super.destroyCallback();\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 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\n applyStyles(this, cssVars);\n\n // Apply data attributes to root.\n applyStateDataAttrs(this, state, VolumeSliderDataAttrs);\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: this.#core.getAttrs(state),\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 { MenuBackElement } from '../../ui/menu/menu-back-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 { MenuItemElement } from '../../ui/menu/menu-item-element';\nimport { MenuItemIndicatorElement } from '../../ui/menu/menu-item-indicator-element';\nimport { MenuLabelElement } from '../../ui/menu/menu-label-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 { MenuViewElement } from '../../ui/menu/menu-view-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 { 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(MenuBackElement);\n safeDefine(MenuItemElement);\n safeDefine(MenuLabelElement);\n safeDefine(MenuSeparatorElement);\n safeDefine(MenuGroupElement);\n safeDefine(MenuRadioGroupElement);\n safeDefine(MenuRadioItemElement);\n safeDefine(MenuCheckboxItemElement);\n safeDefine(MenuItemIndicatorElement);\n safeDefine(MenuViewElement);\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 defineVolumeSlider(): void {\n safeDefine(VolumeSliderElement);\n defineSliderParts();\n}\n"],"mappings":"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"}
|