@videojs/html 10.0.0-beta.23 → 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/audio-minimal-ui.dev.js +2 -1
- package/cdn/audio-minimal-ui.js +1 -1
- package/cdn/audio-minimal.dev.js +22 -18
- 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 -1
- package/cdn/audio-ui.js +1 -1
- package/cdn/audio.dev.js +22 -17
- 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-BHHGcL_P.js → compounds-DxdDY3jr.js} +2753 -500
- 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-B-gVAMdr.js → create-player-_WED6HtK.js} +92 -12
- 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-DEP0AzDp.js → hls-CoCXCB8b.js} +3 -3
- package/cdn/hls-CoCXCB8b.js.map +1 -0
- package/cdn/{hls-DR-Xxpxv.js → hls-DjqAxSvY.js} +84 -9
- package/cdn/hls-DjqAxSvY.js.map +1 -0
- package/cdn/{hotkey-element-oEdY8YLl.js → hotkey-element-89VAnCrc.js} +27 -38
- 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.js +86 -8
- package/cdn/live-video-minimal.dev.js.map +1 -1
- package/cdn/live-video-minimal.js +1 -1
- package/cdn/live-video-minimal.js.map +1 -1
- package/cdn/live-video.dev.js +69 -5
- package/cdn/live-video.dev.js.map +1 -1
- package/cdn/live-video.js +1 -1
- package/cdn/live-video.js.map +1 -1
- package/cdn/media/dash-video.dev.js +3 -3
- package/cdn/media/dash-video.js +1 -1
- package/cdn/media/hls-video.dev.js +4 -4
- package/cdn/media/hls-video.js +1 -1
- package/cdn/media/mux-audio.dev.js +4 -4
- package/cdn/media/mux-audio.js +1 -1
- package/cdn/media/mux-video.dev.js +4 -4
- package/cdn/media/mux-video.js +1 -1
- package/cdn/media/native-hls-video.dev.js +4 -4
- package/cdn/media/native-hls-video.js +1 -1
- package/cdn/media/simple-hls-video.dev.js +3602 -2636
- 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-DuquRhAk.js → media-attach-mixin-0gzahJxP.js} +2 -2
- package/cdn/{media-attach-mixin-DuquRhAk.js.map → media-attach-mixin-0gzahJxP.js.map} +1 -1
- package/cdn/{media-attach-mixin-pV8deGiO.js → media-attach-mixin-C1KQy-y8.js} +2 -2
- package/cdn/{media-attach-mixin-pV8deGiO.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-DH3Kxyot.js → mux-CJn4lTbv.js} +3 -3
- package/cdn/{mux-DH3Kxyot.js.map → mux-CJn4lTbv.js.map} +1 -1
- package/cdn/{mux-D5M5HL6A.js → mux-wKbnuUQu.js} +3 -3
- package/cdn/{mux-D5M5HL6A.js.map → mux-wKbnuUQu.js.map} +1 -1
- package/cdn/{native-hls-DN_aWn2z.js → native-hls-1-isweaY.js} +2 -2
- package/cdn/{native-hls-DN_aWn2z.js.map → native-hls-1-isweaY.js.map} +1 -1
- package/cdn/{native-hls-ak4v9DN6.js → native-hls-D4f2-E9D.js} +2 -2
- package/cdn/{native-hls-ak4v9DN6.js.map → native-hls-D4f2-E9D.js.map} +1 -1
- 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-D468sScc.js → player-ClV0UtoS.js} +3 -3
- package/cdn/{player-D468sScc.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-CtegNw3g.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-C_6YjMl7.js → poster-element-IdY3MYJj.js} +6 -17
- package/cdn/poster-element-IdY3MYJj.js.map +1 -0
- package/cdn/{predicate-BOcV_HDG.js → predicate-Dqd8wbW6.js} +5 -2
- package/cdn/predicate-Dqd8wbW6.js.map +1 -0
- package/cdn/{predicate-Cad5WV4q.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/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/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-BR_2vUZH.js → video-host-BU9t26fe.js} +3 -3
- package/cdn/{video-host-BR_2vUZH.js.map → video-host-BU9t26fe.js.map} +1 -1
- package/cdn/{video-host-Bkh2OyyP.js → video-host-CvYvXa8l.js} +2 -2
- package/cdn/{video-host-Bkh2OyyP.js.map → video-host-CvYvXa8l.js.map} +1 -1
- package/cdn/video-minimal-ui.dev.js +2 -1
- package/cdn/video-minimal-ui.js +1 -1
- package/cdn/video-minimal.dev.js +83 -18
- 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 -1
- package/cdn/video-ui.js +1 -1
- package/cdn/video.dev.js +56 -15
- 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 +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
- 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 +225 -107
- 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 +251 -107
- 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/{base.css → global.css} +12 -8
- package/dist/default/define/live-audio/minimal-skin.css +225 -107
- package/dist/default/define/live-audio/minimal-skin.js +2 -2
- package/dist/default/define/live-audio/minimal-skin.js.map +1 -1
- package/dist/default/define/live-audio/minimal-skin.tailwind.js +2 -2
- package/dist/default/define/live-audio/minimal-skin.tailwind.js.map +1 -1
- 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 +251 -107
- package/dist/default/define/live-audio/skin.js +2 -2
- package/dist/default/define/live-audio/skin.js.map +1 -1
- package/dist/default/define/live-audio/skin.tailwind.js +2 -2
- package/dist/default/define/live-audio/skin.tailwind.js.map +1 -1
- 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 +569 -146
- package/dist/default/define/live-video/minimal-skin.js +2 -2
- package/dist/default/define/live-video/minimal-skin.js.map +1 -1
- package/dist/default/define/live-video/minimal-skin.tailwind.js +3 -2
- package/dist/default/define/live-video/minimal-skin.tailwind.js.map +1 -1
- 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 +579 -144
- package/dist/default/define/live-video/skin.js +2 -2
- package/dist/default/define/live-video/skin.js.map +1 -1
- package/dist/default/define/live-video/skin.tailwind.js +3 -3
- package/dist/default/define/live-video/skin.tailwind.js.map +1 -1
- 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 +2 -2
- 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 +569 -146
- 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 +579 -144
- 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 +25 -1
- package/dist/default/player/context.js.map +1 -1
- package/dist/default/presets/live-audio.js +2 -1
- package/dist/default/presets/live-video.js +2 -1
- 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/controls/controls-element.js +13 -1
- package/dist/default/ui/controls/controls-element.js.map +1 -1
- package/dist/default/ui/gesture/gesture-element.js +2 -1
- package/dist/default/ui/gesture/gesture-element.js.map +1 -1
- package/dist/default/ui/hotkey/hotkey-element.js +1 -0
- 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/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 +30 -9
- 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/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/tooltip/tooltip-element.js +27 -8
- package/dist/default/ui/tooltip/tooltip-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/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 +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
- 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 +225 -107
- 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/skin.css +251 -107
- 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/skin.css +4 -2
- package/dist/dev/define/{base.css → global.css} +12 -8
- package/dist/dev/define/live-audio/minimal-skin.css +225 -107
- package/dist/dev/define/live-audio/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/live-audio/minimal-skin.js +6 -4
- package/dist/dev/define/live-audio/minimal-skin.js.map +1 -1
- package/dist/dev/define/live-audio/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/live-audio/minimal-skin.tailwind.js +12 -10
- package/dist/dev/define/live-audio/minimal-skin.tailwind.js.map +1 -1
- 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 +251 -107
- package/dist/dev/define/live-audio/skin.d.ts.map +1 -1
- package/dist/dev/define/live-audio/skin.js +6 -4
- package/dist/dev/define/live-audio/skin.js.map +1 -1
- package/dist/dev/define/live-audio/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/live-audio/skin.tailwind.js +11 -9
- package/dist/dev/define/live-audio/skin.tailwind.js.map +1 -1
- 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 +569 -146
- package/dist/dev/define/live-video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.js +53 -5
- package/dist/dev/define/live-video/minimal-skin.js.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.tailwind.js +60 -9
- package/dist/dev/define/live-video/minimal-skin.tailwind.js.map +1 -1
- 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 +579 -144
- package/dist/dev/define/live-video/skin.d.ts.map +1 -1
- package/dist/dev/define/live-video/skin.js +36 -2
- package/dist/dev/define/live-video/skin.js.map +1 -1
- package/dist/dev/define/live-video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/live-video/skin.tailwind.js +57 -8
- package/dist/dev/define/live-video/skin.tailwind.js.map +1 -1
- 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.js +2 -2
- 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 +569 -146
- 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/skin.css +579 -144
- 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 +26 -2
- package/dist/dev/index.js +25 -1
- 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 +2 -1
- package/dist/dev/player/context.d.ts.map +1 -1
- package/dist/dev/player/context.js.map +1 -1
- package/dist/dev/presets/live-audio.d.ts +2 -1
- package/dist/dev/presets/live-audio.js +2 -1
- package/dist/dev/presets/live-video.d.ts +2 -1
- package/dist/dev/presets/live-video.js +2 -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/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/gesture/gesture-element.js +2 -1
- package/dist/dev/ui/gesture/gesture-element.js.map +1 -1
- package/dist/dev/ui/hotkey/hotkey-element.js +1 -0
- 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/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/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 +6 -0
- package/dist/dev/ui/popover/popover-element.d.ts.map +1 -1
- package/dist/dev/ui/popover/popover-element.js +30 -9
- 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/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/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/tooltip/tooltip-element.d.ts +6 -0
- package/dist/dev/ui/tooltip/tooltip-element.d.ts.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-element.js +27 -8
- package/dist/dev/ui/tooltip/tooltip-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/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 +23 -10
- package/cdn/compounds-BHHGcL_P.js.map +0 -1
- package/cdn/compounds-DJyzXLOB.js +0 -8
- package/cdn/compounds-DJyzXLOB.js.map +0 -1
- package/cdn/create-player-B-gVAMdr.js.map +0 -1
- package/cdn/create-player-C5ui1T2i.js +0 -7
- package/cdn/create-player-C5ui1T2i.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-DEP0AzDp.js.map +0 -1
- package/cdn/hls-DR-Xxpxv.js.map +0 -1
- package/cdn/hotkey-element-BvI78DTc.js +0 -2
- package/cdn/hotkey-element-BvI78DTc.js.map +0 -1
- package/cdn/hotkey-element-oEdY8YLl.js.map +0 -1
- package/cdn/minimal-CciG7Fsu.js +0 -30
- package/cdn/minimal-CciG7Fsu.js.map +0 -1
- package/cdn/minimal-DSLrhnDm.js +0 -2
- package/cdn/minimal-DSLrhnDm.js.map +0 -1
- package/cdn/minimal-ui-Bx-_SggT.js +0 -29
- package/cdn/minimal-ui-Bx-_SggT.js.map +0 -1
- package/cdn/minimal-ui-CFO4ssL8.js +0 -2
- package/cdn/minimal-ui-CFO4ssL8.js.map +0 -1
- package/cdn/minimal-ui-D6Pvbx1R.js +0 -2
- package/cdn/minimal-ui-D6Pvbx1R.js.map +0 -1
- package/cdn/minimal-ui-Dl-8ZL53.js +0 -22
- package/cdn/minimal-ui-Dl-8ZL53.js.map +0 -1
- package/cdn/player-BKKCelEs.js +0 -2
- package/cdn/player-BKKCelEs.js.map +0 -1
- package/cdn/player-C_6YjMl7.js.map +0 -1
- package/cdn/player-CtegNw3g.js +0 -2
- package/cdn/predicate-BOcV_HDG.js.map +0 -1
- package/cdn/predicate-Cad5WV4q.js.map +0 -1
- package/cdn/skin-element-BcbrkgGs.js +0 -55
- package/cdn/skin-element-BcbrkgGs.js.map +0 -1
- package/cdn/skin-element-DesLkJKs.js +0 -2
- package/cdn/skin-element-DesLkJKs.js.map +0 -1
- package/cdn/ui-CzxKbsyb.js +0 -32
- package/cdn/ui-CzxKbsyb.js.map +0 -1
- package/cdn/ui-D6DV-Emw.js +0 -2
- package/cdn/ui-D6DV-Emw.js.map +0 -1
- package/cdn/ui-Dw-n2AMs.js +0 -2
- package/cdn/ui-Dw-n2AMs.js.map +0 -1
- package/cdn/ui-S_eLj4ur.js +0 -25
- package/cdn/ui-S_eLj4ur.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
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { C as isMediaSeekCapable, D as noop, E as createState, F as isEditableTarget, I as isInteractiveActivation, M as ContextProvider, N as ContextConsumer, O as throwNoTargetError, S as isMediaBufferCapable, T as definePlayerFeature, _ as fullscreenFeature, b as getGestureCoordinator, c as volumeFeature, d as sourceFeature, f as remotePlaybackFeature, g as liveFeature, h as pipFeature, j as MediaElement, k as AbortControllerRegistry, l as timeFeature, m as playbackFeature, n as PlayerController, p as playbackRateFeature, r as SnapshotController, u as textTrackFeature, v as errorFeature, w as isMediaStreamTypeCapable, x as bufferFeature, y as controlsFeature } from "./create-player-_WED6HtK.js";
|
|
2
2
|
import { t as listen } from "./listen-CJT7C4kM.js";
|
|
3
3
|
import { n as kebabCase, t as pick } from "./pick-D-wCJ3iA.js";
|
|
4
|
-
import { a as
|
|
4
|
+
import { a as isString, f as safeDefine, l as playerContext, n as isNull, o as isUndefined, r as isNumber, s as containerContext, t as isFunction, u as createContext } from "./predicate-Dqd8wbW6.js";
|
|
5
5
|
import { t as MediaStreamTypes } from "./types-B_4Es-UH.js";
|
|
6
6
|
|
|
7
7
|
//#region ../utils/dist/dom/direction.js
|
|
@@ -75,12 +75,23 @@ function resolveCSSLength(el, value) {
|
|
|
75
75
|
|
|
76
76
|
//#endregion
|
|
77
77
|
//#region ../core/dist/dev/core/ui/transition.js
|
|
78
|
+
/** Shared data attributes for open/close transition state. Spread into component data-attrs objects. */
|
|
79
|
+
const TransitionDataAttrs = {
|
|
80
|
+
transitionStarting: "data-starting-style",
|
|
81
|
+
transitionEnding: "data-ending-style"
|
|
82
|
+
};
|
|
78
83
|
function getTransitionFlags(status) {
|
|
79
84
|
return {
|
|
80
85
|
transitionStarting: status === "starting",
|
|
81
86
|
transitionEnding: status === "ending"
|
|
82
87
|
};
|
|
83
88
|
}
|
|
89
|
+
function getTransitionStyleAttrs({ transitionStarting, transitionEnding }) {
|
|
90
|
+
return {
|
|
91
|
+
[TransitionDataAttrs.transitionStarting]: transitionStarting ? "" : void 0,
|
|
92
|
+
[TransitionDataAttrs.transitionEnding]: transitionEnding ? "" : void 0
|
|
93
|
+
};
|
|
94
|
+
}
|
|
84
95
|
|
|
85
96
|
//#endregion
|
|
86
97
|
//#region ../core/dist/dev/core/ui/alert-dialog/alert-dialog-core.js
|
|
@@ -127,8 +138,7 @@ var AlertDialogCore = class {
|
|
|
127
138
|
//#region ../core/dist/dev/core/ui/alert-dialog/alert-dialog-data-attrs.js
|
|
128
139
|
const AlertDialogDataAttrs = {
|
|
129
140
|
open: "data-open",
|
|
130
|
-
|
|
131
|
-
transitionEnding: "data-ending-style"
|
|
141
|
+
...TransitionDataAttrs
|
|
132
142
|
};
|
|
133
143
|
|
|
134
144
|
//#endregion
|
|
@@ -265,152 +275,757 @@ var ErrorDialogCore = class extends AlertDialogCore {
|
|
|
265
275
|
};
|
|
266
276
|
|
|
267
277
|
//#endregion
|
|
268
|
-
//#region ../core/dist/dev/core/ui/
|
|
269
|
-
var
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
278
|
+
//#region ../core/dist/dev/core/ui/input-feedback/indicator-lifecycle.js
|
|
279
|
+
var IndicatorCloseController = class {
|
|
280
|
+
#timer = null;
|
|
281
|
+
#close;
|
|
282
|
+
#getDelay;
|
|
283
|
+
constructor(close, getDelay) {
|
|
284
|
+
this.#close = close;
|
|
285
|
+
this.#getDelay = getDelay;
|
|
286
|
+
}
|
|
287
|
+
arm() {
|
|
288
|
+
this.clear();
|
|
289
|
+
this.#timer = setTimeout(() => {
|
|
290
|
+
this.#timer = null;
|
|
291
|
+
this.#close();
|
|
292
|
+
}, this.#getDelay());
|
|
293
|
+
}
|
|
294
|
+
clear() {
|
|
295
|
+
if (this.#timer === null) return;
|
|
296
|
+
clearTimeout(this.#timer);
|
|
297
|
+
this.#timer = null;
|
|
298
|
+
}
|
|
299
|
+
close() {
|
|
300
|
+
this.clear();
|
|
301
|
+
this.#close();
|
|
283
302
|
}
|
|
284
|
-
|
|
285
|
-
this
|
|
303
|
+
destroy() {
|
|
304
|
+
this.clear();
|
|
286
305
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
return state.muted ? "Unmute" : "Mute";
|
|
306
|
+
};
|
|
307
|
+
var IndicatorVisibilityCoordinator = class {
|
|
308
|
+
#handles = /* @__PURE__ */ new Set();
|
|
309
|
+
register(handle) {
|
|
310
|
+
this.#handles.add(handle);
|
|
311
|
+
return () => this.#handles.delete(handle);
|
|
294
312
|
}
|
|
295
|
-
|
|
313
|
+
show(handle) {
|
|
314
|
+
for (const nextHandle of this.#handles) if (nextHandle !== handle) nextHandle.close();
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
function getIndicatorCloseDelay(props) {
|
|
318
|
+
return props.closeDelay ?? 800;
|
|
319
|
+
}
|
|
320
|
+
function isIndicatorPresent(current, transition) {
|
|
321
|
+
return current.open || transition.active;
|
|
322
|
+
}
|
|
323
|
+
function getRenderedIndicatorState(current, snapshot, transition) {
|
|
324
|
+
const payload = current.open ? current : snapshot;
|
|
325
|
+
return {
|
|
326
|
+
...payload,
|
|
327
|
+
open: current.open && transition.active,
|
|
328
|
+
generation: current.open ? current.generation : payload.generation,
|
|
329
|
+
...getTransitionFlags(transition.status)
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
//#endregion
|
|
334
|
+
//#region ../utils/dist/number/number.js
|
|
335
|
+
/** Clamp a value between min and max (inclusive). */
|
|
336
|
+
function clamp(value, min, max) {
|
|
337
|
+
return Math.max(min, Math.min(max, value));
|
|
338
|
+
}
|
|
339
|
+
/** Snap a value to the nearest step, offset from min. */
|
|
340
|
+
function roundToStep(value, step, min) {
|
|
341
|
+
const nearest = Math.round((value - min) / step) * step + min;
|
|
342
|
+
const dot = `${step}`.indexOf(".");
|
|
343
|
+
return dot === -1 ? nearest : Number(nearest.toFixed(`${step}`.length - dot - 1));
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
//#endregion
|
|
347
|
+
//#region ../utils/dist/time/format.js
|
|
348
|
+
const UNIT_LABELS = [
|
|
349
|
+
{
|
|
350
|
+
singular: "hour",
|
|
351
|
+
plural: "hours"
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
singular: "minute",
|
|
355
|
+
plural: "minutes"
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
singular: "second",
|
|
359
|
+
plural: "seconds"
|
|
360
|
+
}
|
|
361
|
+
];
|
|
362
|
+
function isValidTime(value) {
|
|
363
|
+
return isNumber(value) && Number.isFinite(value);
|
|
364
|
+
}
|
|
365
|
+
function toTimeUnitPhrase(value, unitIndex) {
|
|
366
|
+
return `${value} ${value === 1 ? UNIT_LABELS[unitIndex]?.singular : UNIT_LABELS[unitIndex]?.plural}`;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Format seconds to digital display string.
|
|
370
|
+
*
|
|
371
|
+
* @param seconds - Time in seconds (can be negative)
|
|
372
|
+
* @param guide - Guide time (typically duration) to determine display format
|
|
373
|
+
* @returns Formatted string like "1:30" or "1:05:30"
|
|
374
|
+
*
|
|
375
|
+
* @example
|
|
376
|
+
* formatTime(90) // "1:30"
|
|
377
|
+
* formatTime(3661) // "1:01:01"
|
|
378
|
+
* formatTime(35, 3600) // "0:00:35" (guided by 1-hour duration)
|
|
379
|
+
* formatTime(35, 600) // "00:35" (guided by 10-minute duration)
|
|
380
|
+
*/
|
|
381
|
+
function formatTime(seconds, guide) {
|
|
382
|
+
if (!isValidTime(seconds)) return "0:00";
|
|
383
|
+
const negative = seconds < 0;
|
|
384
|
+
const positiveSeconds = Math.abs(seconds);
|
|
385
|
+
const h = Math.floor(positiveSeconds / 3600);
|
|
386
|
+
const m = Math.floor(positiveSeconds / 60 % 60);
|
|
387
|
+
const s = Math.floor(positiveSeconds % 60);
|
|
388
|
+
const guideAbs = guide ? Math.abs(guide) : 0;
|
|
389
|
+
const gh = Math.floor(guideAbs / 3600);
|
|
390
|
+
const gm = Math.floor(guideAbs / 60 % 60);
|
|
391
|
+
const showHours = h > 0 || gh > 0;
|
|
392
|
+
const padMinutes = showHours || gm >= 10;
|
|
393
|
+
const hoursStr = showHours ? `${h}:` : "";
|
|
394
|
+
const minutesStr = `${padMinutes && m < 10 ? "0" : ""}${m}:`;
|
|
395
|
+
const secondsStr = s < 10 ? `0${s}` : `${s}`;
|
|
396
|
+
return `${negative ? "-" : ""}${hoursStr}${minutesStr}${secondsStr}`;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Format seconds to human-readable phrase for screen readers.
|
|
400
|
+
*
|
|
401
|
+
* @param seconds - Time in seconds (negative indicates remaining)
|
|
402
|
+
* @returns Human-readable phrase like "1 minute, 30 seconds"
|
|
403
|
+
*
|
|
404
|
+
* @example
|
|
405
|
+
* formatTimeAsPhrase(90) // "1 minute, 30 seconds"
|
|
406
|
+
* formatTimeAsPhrase(3661) // "1 hour, 1 minute, 1 second"
|
|
407
|
+
* formatTimeAsPhrase(-270) // "4 minutes, 30 seconds remaining"
|
|
408
|
+
*/
|
|
409
|
+
function formatTimeAsPhrase(seconds) {
|
|
410
|
+
if (!isValidTime(seconds)) return "";
|
|
411
|
+
const negative = seconds < 0;
|
|
412
|
+
const positiveSeconds = Math.abs(seconds);
|
|
413
|
+
const h = Math.floor(positiveSeconds / 3600);
|
|
414
|
+
const m = Math.floor(positiveSeconds / 60 % 60);
|
|
415
|
+
const s = Math.floor(positiveSeconds % 60);
|
|
416
|
+
if (positiveSeconds === 0) return `${toTimeUnitPhrase(0, 2)}${negative ? " remaining" : ""}`;
|
|
417
|
+
return `${[
|
|
418
|
+
h,
|
|
419
|
+
m,
|
|
420
|
+
s
|
|
421
|
+
].map((value, index) => value > 0 ? toTimeUnitPhrase(value, index) : null).filter(Boolean).join(", ")}${negative ? " remaining" : ""}`;
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Convert seconds to ISO 8601 duration for datetime attribute.
|
|
425
|
+
*
|
|
426
|
+
* @param seconds - Time in seconds
|
|
427
|
+
* @returns ISO 8601 duration string like "PT1M30S"
|
|
428
|
+
*
|
|
429
|
+
* @example
|
|
430
|
+
* secondsToIsoDuration(90) // "PT1M30S"
|
|
431
|
+
* secondsToIsoDuration(3661) // "PT1H1M1S"
|
|
432
|
+
*/
|
|
433
|
+
function secondsToIsoDuration(seconds) {
|
|
434
|
+
if (!isValidTime(seconds)) return "PT0S";
|
|
435
|
+
const positiveSeconds = Math.abs(seconds);
|
|
436
|
+
const h = Math.floor(positiveSeconds / 3600);
|
|
437
|
+
const m = Math.floor(positiveSeconds / 60 % 60);
|
|
438
|
+
const s = Math.floor(positiveSeconds % 60);
|
|
439
|
+
let duration = "PT";
|
|
440
|
+
if (h > 0) duration += `${h}H`;
|
|
441
|
+
if (m > 0) duration += `${m}M`;
|
|
442
|
+
if (s > 0 || duration === "PT") duration += `${s}S`;
|
|
443
|
+
return duration;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
//#endregion
|
|
447
|
+
//#region ../core/dist/dev/core/ui/input-feedback/status.js
|
|
448
|
+
const DEFAULT_INPUT_INDICATOR_LABELS = {
|
|
449
|
+
muted: "Muted",
|
|
450
|
+
volume: "Volume",
|
|
451
|
+
captionsOn: "Captions on",
|
|
452
|
+
captionsOff: "Captions off",
|
|
453
|
+
paused: "Paused",
|
|
454
|
+
playing: "Playing",
|
|
455
|
+
fullscreen: "Fullscreen",
|
|
456
|
+
exitFullscreen: "Exit fullscreen",
|
|
457
|
+
pictureInPicture: "Picture in picture",
|
|
458
|
+
exitPictureInPicture: "Exit picture in picture"
|
|
459
|
+
};
|
|
460
|
+
function isVolumeIndicatorAction(action) {
|
|
461
|
+
return action === "toggleMuted" || action === "volumeStep";
|
|
462
|
+
}
|
|
463
|
+
function isSeekIndicatorAction(action) {
|
|
464
|
+
return action === "seekStep" || action === "seekToPercent";
|
|
465
|
+
}
|
|
466
|
+
function deriveStatus(event, snapshot, labels = DEFAULT_INPUT_INDICATOR_LABELS) {
|
|
467
|
+
switch (event.action) {
|
|
468
|
+
case "togglePaused": {
|
|
469
|
+
const paused = snapshot.paused !== void 0 ? !snapshot.paused : true;
|
|
470
|
+
return {
|
|
471
|
+
status: paused ? "pause" : "play",
|
|
472
|
+
label: paused ? labels.paused : labels.playing,
|
|
473
|
+
value: null,
|
|
474
|
+
volumeLevel: null
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
case "toggleMuted":
|
|
478
|
+
case "volumeStep": return deriveVolumeStatus(event, snapshot, labels);
|
|
479
|
+
case "toggleSubtitles": {
|
|
480
|
+
const showing = snapshot.subtitlesShowing !== void 0 ? !snapshot.subtitlesShowing : true;
|
|
481
|
+
return {
|
|
482
|
+
status: showing ? "captions-on" : "captions-off",
|
|
483
|
+
label: showing ? labels.captionsOn : labels.captionsOff,
|
|
484
|
+
value: null,
|
|
485
|
+
volumeLevel: null
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
case "toggleFullscreen": {
|
|
489
|
+
const fullscreen = snapshot.fullscreen !== void 0 ? !snapshot.fullscreen : true;
|
|
490
|
+
return {
|
|
491
|
+
status: fullscreen ? "fullscreen" : "exit-fullscreen",
|
|
492
|
+
label: fullscreen ? labels.fullscreen : labels.exitFullscreen,
|
|
493
|
+
value: null,
|
|
494
|
+
volumeLevel: null
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
case "togglePictureInPicture": {
|
|
498
|
+
const pip = snapshot.pip !== void 0 ? !snapshot.pip : true;
|
|
499
|
+
return {
|
|
500
|
+
status: pip ? "pip" : "exit-pip",
|
|
501
|
+
label: pip ? labels.pictureInPicture : labels.exitPictureInPicture,
|
|
502
|
+
value: null,
|
|
503
|
+
volumeLevel: null
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
default: return null;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
function deriveAnnouncerLabel(event, snapshot, labels = DEFAULT_INPUT_INDICATOR_LABELS) {
|
|
510
|
+
const details = deriveStatus(event, snapshot, labels);
|
|
511
|
+
if (!details) return null;
|
|
512
|
+
if (isVolumeIndicatorAction(event.action)) return details.status === "volume-off" ? labels.muted : `${labels.volume} ${details.value}`;
|
|
513
|
+
return details.label;
|
|
514
|
+
}
|
|
515
|
+
function getVolumeLevel$1(volume) {
|
|
516
|
+
if (volume <= 0) return "off";
|
|
517
|
+
return volume <= .5 ? "low" : "high";
|
|
518
|
+
}
|
|
519
|
+
function formatVolumeValue(volume) {
|
|
520
|
+
return `${Math.round(clamp(volume, 0, 1) * 100)}%`;
|
|
521
|
+
}
|
|
522
|
+
function formatCurrentTime(snapshot) {
|
|
523
|
+
return formatTime(snapshot.currentTime ?? 0, snapshot.duration);
|
|
524
|
+
}
|
|
525
|
+
function getStatusIndicatorDisplayValue(state) {
|
|
526
|
+
return state.value ?? state.label ?? "";
|
|
527
|
+
}
|
|
528
|
+
function getVolumeIndicatorDisplayValue(state) {
|
|
529
|
+
return state.value ?? "";
|
|
530
|
+
}
|
|
531
|
+
function getSeekIndicatorDisplayValue(state) {
|
|
532
|
+
return state.value ?? state.currentTime;
|
|
533
|
+
}
|
|
534
|
+
function getSeekToPercent(event) {
|
|
535
|
+
if (event.value !== void 0) return clamp(event.value, 0, 100);
|
|
536
|
+
if (!event.key || event.key < "0" || event.key > "9") return null;
|
|
537
|
+
return Number(event.key) * 10;
|
|
538
|
+
}
|
|
539
|
+
function getSeekDirection(event, snapshot) {
|
|
540
|
+
if (event.action === "seekStep" && event.value !== void 0) {
|
|
541
|
+
if (event.value > 0) return "forward";
|
|
542
|
+
if (event.value < 0) return "backward";
|
|
543
|
+
}
|
|
544
|
+
if (event.action === "seekToPercent") {
|
|
545
|
+
const percent = getSeekToPercent(event);
|
|
546
|
+
if (percent === null || snapshot.duration === void 0 || snapshot.duration <= 0) return null;
|
|
547
|
+
const targetTime = percent / 100 * snapshot.duration;
|
|
548
|
+
const currentTime = snapshot.currentTime ?? 0;
|
|
549
|
+
if (targetTime > currentTime) return "forward";
|
|
550
|
+
if (targetTime < currentTime) return "backward";
|
|
551
|
+
}
|
|
552
|
+
return null;
|
|
553
|
+
}
|
|
554
|
+
function isInputActionIncluded(action, actions) {
|
|
555
|
+
if (!action) return false;
|
|
556
|
+
return !actions || actions.includes(action);
|
|
557
|
+
}
|
|
558
|
+
function predictVolumeActionOutcome(event, snapshot) {
|
|
559
|
+
const muted = snapshot.muted === true;
|
|
560
|
+
const snapshotVolume = snapshot.volume ?? 0;
|
|
561
|
+
if (event.action === "toggleMuted") return {
|
|
562
|
+
snapshotVolume,
|
|
563
|
+
nextMuted: !muted,
|
|
564
|
+
nextVolume: snapshotVolume
|
|
565
|
+
};
|
|
566
|
+
if (event.action === "volumeStep") {
|
|
567
|
+
const nextVolume = clamp(snapshotVolume + (event.value ?? 0), 0, 1);
|
|
296
568
|
return {
|
|
297
|
-
|
|
298
|
-
|
|
569
|
+
snapshotVolume,
|
|
570
|
+
nextMuted: muted && nextVolume <= 0,
|
|
571
|
+
nextVolume
|
|
299
572
|
};
|
|
300
573
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
574
|
+
return {
|
|
575
|
+
snapshotVolume,
|
|
576
|
+
nextMuted: muted,
|
|
577
|
+
nextVolume: snapshotVolume
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
function volumePredictionToStatusDetails(prediction, labels) {
|
|
581
|
+
const level = prediction.nextMuted ? "off" : getVolumeLevel$1(prediction.nextVolume);
|
|
582
|
+
const value = prediction.nextMuted ? "0%" : formatVolumeValue(prediction.nextVolume);
|
|
583
|
+
return {
|
|
584
|
+
status: level === "off" ? "volume-off" : level === "low" ? "volume-low" : "volume-high",
|
|
585
|
+
label: level === "off" ? labels.muted : labels.volume,
|
|
586
|
+
value,
|
|
587
|
+
volumeLevel: level
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
/** Labels/value/level for volume actions — single source shared with `VolumeIndicatorCore`. */
|
|
591
|
+
function deriveVolumeStatus(event, snapshot, labels = DEFAULT_INPUT_INDICATOR_LABELS, cachedPrediction) {
|
|
592
|
+
return volumePredictionToStatusDetails(cachedPrediction ?? predictVolumeActionOutcome(event, snapshot), labels);
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
//#endregion
|
|
596
|
+
//#region ../core/dist/dev/core/ui/input-feedback/seek-indicator-core.js
|
|
597
|
+
const INITIAL_STATE$2 = {
|
|
598
|
+
open: false,
|
|
599
|
+
generation: 0,
|
|
600
|
+
direction: null,
|
|
601
|
+
count: 0,
|
|
602
|
+
seekTotal: 0,
|
|
603
|
+
value: null,
|
|
604
|
+
currentTime: "0:00",
|
|
605
|
+
transitionStarting: false,
|
|
606
|
+
transitionEnding: false
|
|
607
|
+
};
|
|
608
|
+
var SeekIndicatorCore = class {
|
|
609
|
+
state = createState({ ...INITIAL_STATE$2 });
|
|
610
|
+
#props = {};
|
|
611
|
+
#originTime = null;
|
|
612
|
+
#close = new IndicatorCloseController(() => {
|
|
613
|
+
this.#originTime = null;
|
|
306
614
|
this.state.patch({
|
|
307
|
-
|
|
308
|
-
|
|
615
|
+
open: false,
|
|
616
|
+
direction: null,
|
|
617
|
+
count: 0,
|
|
618
|
+
seekTotal: 0,
|
|
619
|
+
value: null
|
|
309
620
|
});
|
|
310
|
-
|
|
311
|
-
|
|
621
|
+
}, () => getIndicatorCloseDelay(this.#props));
|
|
622
|
+
setProps(props) {
|
|
623
|
+
this.#props = props;
|
|
312
624
|
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
625
|
+
destroy() {
|
|
626
|
+
this.#close.destroy();
|
|
627
|
+
}
|
|
628
|
+
close() {
|
|
629
|
+
this.#close.close();
|
|
630
|
+
}
|
|
631
|
+
processEvent(event, snapshot) {
|
|
632
|
+
if (!isSeekIndicatorAction(event.action)) return false;
|
|
633
|
+
const current = this.state.current;
|
|
634
|
+
const direction = getSeekDirection(event, snapshot);
|
|
635
|
+
const rapidRepeat = current.open && event.action === "seekStep" && current.direction === direction;
|
|
636
|
+
if (!rapidRepeat) this.#originTime = snapshot.currentTime ?? null;
|
|
637
|
+
const value = this.#getEffectiveSeekValue(event, snapshot, rapidRepeat);
|
|
638
|
+
const seekTotal = rapidRepeat ? current.seekTotal + Math.abs(value) : Math.abs(value);
|
|
639
|
+
this.state.patch({
|
|
640
|
+
open: true,
|
|
641
|
+
generation: current.generation + 1,
|
|
642
|
+
direction,
|
|
643
|
+
count: rapidRepeat ? current.count + 1 : 1,
|
|
644
|
+
seekTotal,
|
|
645
|
+
value: event.action === "seekStep" && seekTotal > 0 ? `${seekTotal}s` : null,
|
|
646
|
+
currentTime: formatCurrentTime(snapshot)
|
|
647
|
+
});
|
|
648
|
+
this.#close.arm();
|
|
649
|
+
return true;
|
|
650
|
+
}
|
|
651
|
+
#getEffectiveSeekValue(event, snapshot, rapidRepeat) {
|
|
652
|
+
if (event.action !== "seekStep" || event.value === void 0) return 0;
|
|
653
|
+
if (!rapidRepeat || this.#originTime === null) return event.value;
|
|
654
|
+
const originTime = this.#originTime;
|
|
655
|
+
const duration = snapshot.duration ?? Infinity;
|
|
656
|
+
const currentTotal = this.state.current.seekTotal;
|
|
657
|
+
const step = Math.abs(event.value);
|
|
658
|
+
return (event.value < 0 ? Math.max(0, originTime - currentTotal) : Math.max(0, duration - originTime - currentTotal)) >= step ? event.value : 0;
|
|
316
659
|
}
|
|
317
660
|
};
|
|
318
|
-
function getVolumeLevel(media) {
|
|
319
|
-
if (media.muted || media.volume === 0) return "off";
|
|
320
|
-
if (media.volume < .5) return "low";
|
|
321
|
-
if (media.volume < .75) return "medium";
|
|
322
|
-
return "high";
|
|
323
|
-
}
|
|
324
661
|
|
|
325
662
|
//#endregion
|
|
326
|
-
//#region ../core/dist/dev/core/ui/
|
|
327
|
-
const
|
|
328
|
-
|
|
329
|
-
|
|
663
|
+
//#region ../core/dist/dev/core/ui/input-feedback/seek-indicator-data-attrs.js
|
|
664
|
+
const SeekIndicatorDataAttrs = {
|
|
665
|
+
open: "data-open",
|
|
666
|
+
direction: "data-direction",
|
|
667
|
+
transitionStarting: "data-starting-style",
|
|
668
|
+
transitionEnding: "data-ending-style"
|
|
330
669
|
};
|
|
331
670
|
|
|
332
671
|
//#endregion
|
|
333
|
-
//#region ../core/dist/dev/core/ui/
|
|
334
|
-
var
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
};
|
|
339
|
-
state = createState({
|
|
340
|
-
paused: true,
|
|
341
|
-
ended: false,
|
|
342
|
-
started: false,
|
|
343
|
-
label: ""
|
|
344
|
-
});
|
|
345
|
-
#props = { ...PlayButtonCore.defaultProps };
|
|
346
|
-
#media = null;
|
|
347
|
-
constructor(props) {
|
|
348
|
-
if (props) this.setProps(props);
|
|
349
|
-
}
|
|
672
|
+
//#region ../core/dist/dev/core/ui/input-feedback/status-announcer-core.js
|
|
673
|
+
var StatusAnnouncerCore = class {
|
|
674
|
+
state = createState({ label: null });
|
|
675
|
+
#props = {};
|
|
676
|
+
#close = new IndicatorCloseController(() => this.state.patch({ label: null }), () => getIndicatorCloseDelay(this.#props));
|
|
350
677
|
setProps(props) {
|
|
351
|
-
this.#props =
|
|
678
|
+
this.#props = props;
|
|
352
679
|
}
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
if (isFunction(label)) {
|
|
356
|
-
const customLabel = label(state);
|
|
357
|
-
if (customLabel) return customLabel;
|
|
358
|
-
} else if (label) return label;
|
|
359
|
-
if (state.ended) return "Replay";
|
|
360
|
-
return state.paused ? "Play" : "Pause";
|
|
680
|
+
destroy() {
|
|
681
|
+
this.#close.destroy();
|
|
361
682
|
}
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
};
|
|
683
|
+
processEvent(event, snapshot) {
|
|
684
|
+
const label = deriveAnnouncerLabel(event, snapshot, {
|
|
685
|
+
...DEFAULT_INPUT_INDICATOR_LABELS,
|
|
686
|
+
...this.#props.labels
|
|
687
|
+
});
|
|
688
|
+
if (!label) return false;
|
|
689
|
+
this.state.patch({ label });
|
|
690
|
+
this.#close.arm();
|
|
691
|
+
return true;
|
|
367
692
|
}
|
|
368
|
-
|
|
693
|
+
};
|
|
694
|
+
|
|
695
|
+
//#endregion
|
|
696
|
+
//#region ../core/dist/dev/core/ui/input-feedback/status-indicator-core.js
|
|
697
|
+
const INITIAL_STATE$1 = {
|
|
698
|
+
open: false,
|
|
699
|
+
generation: 0,
|
|
700
|
+
status: null,
|
|
701
|
+
label: null,
|
|
702
|
+
value: null,
|
|
703
|
+
transitionStarting: false,
|
|
704
|
+
transitionEnding: false
|
|
705
|
+
};
|
|
706
|
+
var StatusIndicatorCore = class {
|
|
707
|
+
state = createState({ ...INITIAL_STATE$1 });
|
|
708
|
+
#props = {};
|
|
709
|
+
#close = new IndicatorCloseController(() => this.state.patch({
|
|
710
|
+
open: false,
|
|
711
|
+
status: null,
|
|
712
|
+
label: null,
|
|
713
|
+
value: null
|
|
714
|
+
}), () => getIndicatorCloseDelay(this.#props));
|
|
715
|
+
setProps(props) {
|
|
716
|
+
this.#props = props;
|
|
717
|
+
}
|
|
718
|
+
destroy() {
|
|
719
|
+
this.#close.destroy();
|
|
720
|
+
}
|
|
721
|
+
close() {
|
|
722
|
+
this.#close.close();
|
|
723
|
+
}
|
|
724
|
+
processEvent(event, snapshot) {
|
|
725
|
+
if (!isInputActionIncluded(event.action, this.#props.actions)) return false;
|
|
726
|
+
const details = deriveStatus(event, snapshot, {
|
|
727
|
+
...DEFAULT_INPUT_INDICATOR_LABELS,
|
|
728
|
+
...this.#props.labels
|
|
729
|
+
});
|
|
730
|
+
if (!details) return false;
|
|
731
|
+
this.state.patch({
|
|
732
|
+
open: true,
|
|
733
|
+
generation: this.state.current.generation + 1,
|
|
734
|
+
status: details.status,
|
|
735
|
+
label: details.label,
|
|
736
|
+
value: details.value
|
|
737
|
+
});
|
|
738
|
+
this.#close.arm();
|
|
739
|
+
return true;
|
|
740
|
+
}
|
|
741
|
+
};
|
|
742
|
+
|
|
743
|
+
//#endregion
|
|
744
|
+
//#region ../core/dist/dev/core/ui/input-feedback/status-indicator-data-attrs.js
|
|
745
|
+
const StatusIndicatorDataAttrs = {
|
|
746
|
+
open: "data-open",
|
|
747
|
+
status: "data-status",
|
|
748
|
+
transitionStarting: "data-starting-style",
|
|
749
|
+
transitionEnding: "data-ending-style"
|
|
750
|
+
};
|
|
751
|
+
|
|
752
|
+
//#endregion
|
|
753
|
+
//#region ../core/dist/dev/core/ui/input-feedback/volume-indicator-core.js
|
|
754
|
+
const BOUNDARY_CLEAR_DELAY = 300;
|
|
755
|
+
const INITIAL_STATE = {
|
|
756
|
+
open: false,
|
|
757
|
+
generation: 0,
|
|
758
|
+
level: null,
|
|
759
|
+
value: null,
|
|
760
|
+
fill: null,
|
|
761
|
+
min: false,
|
|
762
|
+
max: false,
|
|
763
|
+
transitionStarting: false,
|
|
764
|
+
transitionEnding: false
|
|
765
|
+
};
|
|
766
|
+
var VolumeIndicatorCore = class {
|
|
767
|
+
state = createState({ ...INITIAL_STATE });
|
|
768
|
+
#props = {};
|
|
769
|
+
#boundaryTimer = null;
|
|
770
|
+
#boundaryRestartTimer = null;
|
|
771
|
+
#close = new IndicatorCloseController(() => this.state.patch({
|
|
772
|
+
open: false,
|
|
773
|
+
level: null,
|
|
774
|
+
value: null,
|
|
775
|
+
fill: null,
|
|
776
|
+
min: false,
|
|
777
|
+
max: false
|
|
778
|
+
}), () => getIndicatorCloseDelay(this.#props));
|
|
779
|
+
setProps(props) {
|
|
780
|
+
this.#props = props;
|
|
781
|
+
}
|
|
782
|
+
destroy() {
|
|
783
|
+
this.#close.destroy();
|
|
784
|
+
this.#clearBoundaryTimers();
|
|
785
|
+
}
|
|
786
|
+
close() {
|
|
787
|
+
this.#clearBoundaryTimers();
|
|
788
|
+
this.#close.close();
|
|
789
|
+
}
|
|
790
|
+
processEvent(event, snapshot) {
|
|
791
|
+
if (!isVolumeIndicatorAction(event.action)) return false;
|
|
792
|
+
const current = this.state.current;
|
|
793
|
+
const prediction = predictVolumeActionOutcome(event, snapshot);
|
|
794
|
+
const details = deriveVolumeStatus(event, snapshot, DEFAULT_INPUT_INDICATOR_LABELS, prediction);
|
|
795
|
+
const boundary = getVolumeBoundary(event, prediction.snapshotVolume, prediction.nextVolume);
|
|
796
|
+
const repeatedBoundary = boundary !== null && current[boundary] === true;
|
|
797
|
+
if (!boundary) this.#clearBoundaryTimers();
|
|
798
|
+
this.state.patch({
|
|
799
|
+
open: true,
|
|
800
|
+
generation: current.generation + 1,
|
|
801
|
+
level: details.volumeLevel,
|
|
802
|
+
value: details.value,
|
|
803
|
+
fill: details.value,
|
|
804
|
+
min: boundary === "min" && !repeatedBoundary,
|
|
805
|
+
max: boundary === "max" && !repeatedBoundary
|
|
806
|
+
});
|
|
807
|
+
if (boundary) if (repeatedBoundary) this.#restartBoundary(boundary);
|
|
808
|
+
else this.#scheduleBoundaryClear();
|
|
809
|
+
this.#close.arm();
|
|
810
|
+
return true;
|
|
811
|
+
}
|
|
812
|
+
#scheduleBoundaryClear() {
|
|
813
|
+
this.#clearBoundaryTimer();
|
|
814
|
+
this.#boundaryTimer = setTimeout(() => {
|
|
815
|
+
this.#boundaryTimer = null;
|
|
816
|
+
this.state.patch({
|
|
817
|
+
min: false,
|
|
818
|
+
max: false
|
|
819
|
+
});
|
|
820
|
+
}, BOUNDARY_CLEAR_DELAY);
|
|
821
|
+
}
|
|
822
|
+
#restartBoundary(boundary) {
|
|
823
|
+
this.#clearBoundaryTimers();
|
|
824
|
+
this.state.patch({
|
|
825
|
+
min: false,
|
|
826
|
+
max: false
|
|
827
|
+
});
|
|
828
|
+
this.#boundaryRestartTimer = setTimeout(() => {
|
|
829
|
+
this.#boundaryRestartTimer = null;
|
|
830
|
+
this.state.patch({ [boundary]: true });
|
|
831
|
+
this.#scheduleBoundaryClear();
|
|
832
|
+
}, 0);
|
|
833
|
+
}
|
|
834
|
+
#clearBoundaryTimer() {
|
|
835
|
+
if (this.#boundaryTimer === null) return;
|
|
836
|
+
clearTimeout(this.#boundaryTimer);
|
|
837
|
+
this.#boundaryTimer = null;
|
|
838
|
+
}
|
|
839
|
+
#clearBoundaryRestartTimer() {
|
|
840
|
+
if (this.#boundaryRestartTimer === null) return;
|
|
841
|
+
clearTimeout(this.#boundaryRestartTimer);
|
|
842
|
+
this.#boundaryRestartTimer = null;
|
|
843
|
+
}
|
|
844
|
+
#clearBoundaryTimers() {
|
|
845
|
+
this.#clearBoundaryTimer();
|
|
846
|
+
this.#clearBoundaryRestartTimer();
|
|
847
|
+
}
|
|
848
|
+
};
|
|
849
|
+
function getVolumeBoundary(event, currentVolume, nextVolume) {
|
|
850
|
+
if (event.action !== "volumeStep" || event.value === void 0 || event.value === 0) return null;
|
|
851
|
+
if (nextVolume !== currentVolume) return null;
|
|
852
|
+
return event.value < 0 ? "min" : "max";
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
//#endregion
|
|
856
|
+
//#region ../core/dist/dev/core/ui/input-feedback/volume-indicator-css-vars.js
|
|
857
|
+
const VolumeIndicatorCSSVars = { fill: "--media-volume-fill" };
|
|
858
|
+
|
|
859
|
+
//#endregion
|
|
860
|
+
//#region ../core/dist/dev/core/ui/input-feedback/volume-indicator-data-attrs.js
|
|
861
|
+
const VolumeIndicatorDataAttrs = {
|
|
862
|
+
open: "data-open",
|
|
863
|
+
level: "data-level",
|
|
864
|
+
min: "data-min",
|
|
865
|
+
max: "data-max",
|
|
866
|
+
transitionStarting: "data-starting-style",
|
|
867
|
+
transitionEnding: "data-ending-style"
|
|
868
|
+
};
|
|
869
|
+
|
|
870
|
+
//#endregion
|
|
871
|
+
//#region ../core/dist/dev/core/ui/menu/menu-core.js
|
|
872
|
+
/** Base menu logic: ARIA attributes and open/close state computation. */
|
|
873
|
+
var MenuCore = class MenuCore {
|
|
874
|
+
static defaultProps = {
|
|
875
|
+
side: "bottom",
|
|
876
|
+
align: "start",
|
|
877
|
+
open: false,
|
|
878
|
+
defaultOpen: false,
|
|
879
|
+
closeOnEscape: true,
|
|
880
|
+
closeOnOutsideClick: true,
|
|
881
|
+
isSubmenu: false
|
|
882
|
+
};
|
|
883
|
+
#props = { ...MenuCore.defaultProps };
|
|
884
|
+
#input = null;
|
|
885
|
+
get props() {
|
|
886
|
+
return this.#props;
|
|
887
|
+
}
|
|
888
|
+
constructor(props) {
|
|
889
|
+
if (props) this.setProps(props);
|
|
890
|
+
}
|
|
891
|
+
setProps(props) {
|
|
892
|
+
this.#props = defaults(props, MenuCore.defaultProps);
|
|
893
|
+
}
|
|
894
|
+
setInput(input) {
|
|
895
|
+
this.#input = input;
|
|
896
|
+
}
|
|
897
|
+
getState() {
|
|
898
|
+
const input = this.#input;
|
|
899
|
+
const isSubmenu = this.#props.isSubmenu;
|
|
900
|
+
return {
|
|
901
|
+
open: input.active,
|
|
902
|
+
status: input.status,
|
|
903
|
+
side: isSubmenu ? void 0 : this.#props.side,
|
|
904
|
+
align: isSubmenu ? void 0 : this.#props.align,
|
|
905
|
+
isSubmenu,
|
|
906
|
+
...getTransitionFlags(input.status)
|
|
907
|
+
};
|
|
908
|
+
}
|
|
909
|
+
getTriggerAttrs(state, contentId) {
|
|
910
|
+
return {
|
|
911
|
+
"aria-haspopup": "menu",
|
|
912
|
+
"aria-expanded": state.open ? "true" : "false",
|
|
913
|
+
"aria-controls": contentId
|
|
914
|
+
};
|
|
915
|
+
}
|
|
916
|
+
getContentAttrs(state) {
|
|
917
|
+
return {
|
|
918
|
+
role: "menu",
|
|
919
|
+
tabIndex: -1,
|
|
920
|
+
...!state.isSubmenu && { popover: "manual" }
|
|
921
|
+
};
|
|
922
|
+
}
|
|
923
|
+
};
|
|
924
|
+
|
|
925
|
+
//#endregion
|
|
926
|
+
//#region ../core/dist/dev/core/ui/menu/menu-data-attrs.js
|
|
927
|
+
/** Data attributes set on the menu Content element and inherited by all children. */
|
|
928
|
+
const MenuDataAttrs = {
|
|
929
|
+
open: "data-open",
|
|
930
|
+
side: "data-side",
|
|
931
|
+
align: "data-align",
|
|
932
|
+
isSubmenu: "data-submenu",
|
|
933
|
+
...TransitionDataAttrs
|
|
934
|
+
};
|
|
935
|
+
|
|
936
|
+
//#endregion
|
|
937
|
+
//#region ../core/dist/dev/core/ui/menu/menu-item-data-attrs.js
|
|
938
|
+
/** Data attributes set on all navigable menu item elements. */
|
|
939
|
+
const MenuItemDataAttrs = {
|
|
940
|
+
item: "data-item",
|
|
941
|
+
highlighted: "data-highlighted"
|
|
942
|
+
};
|
|
943
|
+
|
|
944
|
+
//#endregion
|
|
945
|
+
//#region ../core/dist/dev/core/ui/mute-button/mute-button-core.js
|
|
946
|
+
var MuteButtonCore = class MuteButtonCore {
|
|
947
|
+
static defaultProps = {
|
|
948
|
+
label: "",
|
|
949
|
+
disabled: false
|
|
950
|
+
};
|
|
951
|
+
state = createState({
|
|
952
|
+
muted: false,
|
|
953
|
+
volumeLevel: "off",
|
|
954
|
+
label: ""
|
|
955
|
+
});
|
|
956
|
+
#props = { ...MuteButtonCore.defaultProps };
|
|
957
|
+
#media = null;
|
|
958
|
+
constructor(props) {
|
|
959
|
+
if (props) this.setProps(props);
|
|
960
|
+
}
|
|
961
|
+
setProps(props) {
|
|
962
|
+
this.#props = defaults(props, MuteButtonCore.defaultProps);
|
|
963
|
+
}
|
|
964
|
+
getLabel(state) {
|
|
965
|
+
const { label } = this.#props;
|
|
966
|
+
if (isFunction(label)) {
|
|
967
|
+
const customLabel = label(state);
|
|
968
|
+
if (customLabel) return customLabel;
|
|
969
|
+
} else if (label) return label;
|
|
970
|
+
return state.muted ? "Unmute" : "Mute";
|
|
971
|
+
}
|
|
972
|
+
getAttrs(state) {
|
|
973
|
+
return {
|
|
974
|
+
"aria-label": this.getLabel(state),
|
|
975
|
+
"aria-disabled": this.#props.disabled ? "true" : void 0
|
|
976
|
+
};
|
|
977
|
+
}
|
|
978
|
+
setMedia(media) {
|
|
369
979
|
this.#media = media;
|
|
370
980
|
}
|
|
371
981
|
getState() {
|
|
372
982
|
const media = this.#media;
|
|
373
983
|
this.state.patch({
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
started: media.started
|
|
984
|
+
muted: media.muted || media.volume === 0,
|
|
985
|
+
volumeLevel: getVolumeLevel(media)
|
|
377
986
|
});
|
|
378
987
|
this.state.patch({ label: this.getLabel(this.state.current) });
|
|
379
988
|
return this.state.current;
|
|
380
989
|
}
|
|
381
|
-
|
|
990
|
+
toggle(media) {
|
|
382
991
|
if (this.#props.disabled) return;
|
|
383
|
-
|
|
384
|
-
media.pause();
|
|
992
|
+
media.toggleMuted();
|
|
385
993
|
}
|
|
386
994
|
};
|
|
995
|
+
function getVolumeLevel(media) {
|
|
996
|
+
if (media.muted || media.volume === 0) return "off";
|
|
997
|
+
if (media.volume < .5) return "low";
|
|
998
|
+
if (media.volume < .75) return "medium";
|
|
999
|
+
return "high";
|
|
1000
|
+
}
|
|
387
1001
|
|
|
388
1002
|
//#endregion
|
|
389
|
-
//#region ../core/dist/dev/core/ui/
|
|
390
|
-
const
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
started: "data-started"
|
|
1003
|
+
//#region ../core/dist/dev/core/ui/mute-button/mute-button-data-attrs.js
|
|
1004
|
+
const MuteButtonDataAttrs = {
|
|
1005
|
+
muted: "data-muted",
|
|
1006
|
+
volumeLevel: "data-volume-level"
|
|
394
1007
|
};
|
|
395
1008
|
|
|
396
1009
|
//#endregion
|
|
397
|
-
//#region ../core/dist/dev/core/ui/
|
|
398
|
-
var
|
|
1010
|
+
//#region ../core/dist/dev/core/ui/play-button/play-button-core.js
|
|
1011
|
+
var PlayButtonCore = class PlayButtonCore {
|
|
399
1012
|
static defaultProps = {
|
|
400
1013
|
label: "",
|
|
401
1014
|
disabled: false
|
|
402
1015
|
};
|
|
403
1016
|
state = createState({
|
|
404
|
-
|
|
1017
|
+
paused: true,
|
|
1018
|
+
ended: false,
|
|
1019
|
+
started: false,
|
|
405
1020
|
label: ""
|
|
406
1021
|
});
|
|
407
|
-
#props = { ...
|
|
1022
|
+
#props = { ...PlayButtonCore.defaultProps };
|
|
408
1023
|
#media = null;
|
|
409
1024
|
constructor(props) {
|
|
410
1025
|
if (props) this.setProps(props);
|
|
411
1026
|
}
|
|
412
1027
|
setProps(props) {
|
|
413
|
-
this.#props = defaults(props,
|
|
1028
|
+
this.#props = defaults(props, PlayButtonCore.defaultProps);
|
|
414
1029
|
}
|
|
415
1030
|
getLabel(state) {
|
|
416
1031
|
const { label } = this.#props;
|
|
@@ -418,7 +1033,8 @@ var PlaybackRateButtonCore = class PlaybackRateButtonCore {
|
|
|
418
1033
|
const customLabel = label(state);
|
|
419
1034
|
if (customLabel) return customLabel;
|
|
420
1035
|
} else if (label) return label;
|
|
421
|
-
|
|
1036
|
+
if (state.ended) return "Replay";
|
|
1037
|
+
return state.paused ? "Play" : "Pause";
|
|
422
1038
|
}
|
|
423
1039
|
getAttrs(state) {
|
|
424
1040
|
return {
|
|
@@ -431,23 +1047,28 @@ var PlaybackRateButtonCore = class PlaybackRateButtonCore {
|
|
|
431
1047
|
}
|
|
432
1048
|
getState() {
|
|
433
1049
|
const media = this.#media;
|
|
434
|
-
this.state.patch({
|
|
1050
|
+
this.state.patch({
|
|
1051
|
+
paused: media.paused,
|
|
1052
|
+
ended: media.ended,
|
|
1053
|
+
started: media.started
|
|
1054
|
+
});
|
|
435
1055
|
this.state.patch({ label: this.getLabel(this.state.current) });
|
|
436
1056
|
return this.state.current;
|
|
437
1057
|
}
|
|
438
|
-
|
|
1058
|
+
async toggle(media) {
|
|
439
1059
|
if (this.#props.disabled) return;
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
const idx = playbackRates.indexOf(playbackRate);
|
|
443
|
-
const next = idx === -1 ? playbackRates.find((r) => r > playbackRate) ?? playbackRates[0] : playbackRates[(idx + 1) % playbackRates.length];
|
|
444
|
-
media.setPlaybackRate(next);
|
|
1060
|
+
if (media.paused || media.ended) return media.play();
|
|
1061
|
+
media.pause();
|
|
445
1062
|
}
|
|
446
1063
|
};
|
|
447
1064
|
|
|
448
1065
|
//#endregion
|
|
449
|
-
//#region ../core/dist/dev/core/ui/
|
|
450
|
-
const
|
|
1066
|
+
//#region ../core/dist/dev/core/ui/play-button/play-button-data-attrs.js
|
|
1067
|
+
const PlayButtonDataAttrs = {
|
|
1068
|
+
paused: "data-paused",
|
|
1069
|
+
ended: "data-ended",
|
|
1070
|
+
started: "data-started"
|
|
1071
|
+
};
|
|
451
1072
|
|
|
452
1073
|
//#endregion
|
|
453
1074
|
//#region ../core/dist/dev/core/ui/popover/popover-core.js
|
|
@@ -507,6 +1128,7 @@ var PopoverCore = class PopoverCore {
|
|
|
507
1128
|
const PopoverCSSVars = {
|
|
508
1129
|
sideOffset: "--media-popover-side-offset",
|
|
509
1130
|
alignOffset: "--media-popover-align-offset",
|
|
1131
|
+
boundaryOffset: "--media-popover-boundary-offset",
|
|
510
1132
|
anchorWidth: "--media-popover-anchor-width",
|
|
511
1133
|
anchorHeight: "--media-popover-anchor-height",
|
|
512
1134
|
availableWidth: "--media-popover-available-width",
|
|
@@ -519,84 +1141,19 @@ const PopoverDataAttrs = {
|
|
|
519
1141
|
open: "data-open",
|
|
520
1142
|
side: "data-side",
|
|
521
1143
|
align: "data-align",
|
|
522
|
-
|
|
523
|
-
transitionEnding: "data-ending-style"
|
|
524
|
-
};
|
|
525
|
-
|
|
526
|
-
//#endregion
|
|
527
|
-
//#region ../core/dist/dev/core/ui/seek-button/seek-button-core.js
|
|
528
|
-
var SeekButtonCore = class SeekButtonCore {
|
|
529
|
-
static defaultProps = {
|
|
530
|
-
seconds: 30,
|
|
531
|
-
label: "",
|
|
532
|
-
disabled: false
|
|
533
|
-
};
|
|
534
|
-
state = createState({
|
|
535
|
-
seeking: false,
|
|
536
|
-
direction: "forward",
|
|
537
|
-
label: ""
|
|
538
|
-
});
|
|
539
|
-
#props = { ...SeekButtonCore.defaultProps };
|
|
540
|
-
#media = null;
|
|
541
|
-
constructor(props) {
|
|
542
|
-
if (props) this.setProps(props);
|
|
543
|
-
}
|
|
544
|
-
setProps(props) {
|
|
545
|
-
this.#props = defaults(props, SeekButtonCore.defaultProps);
|
|
546
|
-
}
|
|
547
|
-
getLabel(state) {
|
|
548
|
-
const { label } = this.#props;
|
|
549
|
-
if (isFunction(label)) {
|
|
550
|
-
const customLabel = label(state);
|
|
551
|
-
if (customLabel) return customLabel;
|
|
552
|
-
} else if (label) return label;
|
|
553
|
-
const abs = Math.abs(this.#props.seconds);
|
|
554
|
-
return state.direction === "backward" ? `Seek backward ${abs} seconds` : `Seek forward ${abs} seconds`;
|
|
555
|
-
}
|
|
556
|
-
getAttrs(state) {
|
|
557
|
-
return {
|
|
558
|
-
"aria-label": this.getLabel(state),
|
|
559
|
-
"aria-disabled": this.#props.disabled ? "true" : void 0
|
|
560
|
-
};
|
|
561
|
-
}
|
|
562
|
-
setMedia(media) {
|
|
563
|
-
this.#media = media;
|
|
564
|
-
}
|
|
565
|
-
getState() {
|
|
566
|
-
const media = this.#media;
|
|
567
|
-
const direction = this.#props.seconds < 0 ? "backward" : "forward";
|
|
568
|
-
this.state.patch({
|
|
569
|
-
seeking: media.seeking,
|
|
570
|
-
direction
|
|
571
|
-
});
|
|
572
|
-
this.state.patch({ label: this.getLabel(this.state.current) });
|
|
573
|
-
return this.state.current;
|
|
574
|
-
}
|
|
575
|
-
async seek(media) {
|
|
576
|
-
if (this.#props.disabled) return;
|
|
577
|
-
await media.seek(media.currentTime + this.#props.seconds);
|
|
578
|
-
}
|
|
579
|
-
};
|
|
580
|
-
|
|
581
|
-
//#endregion
|
|
582
|
-
//#region ../core/dist/dev/core/ui/seek-button/seek-button-data-attrs.js
|
|
583
|
-
const SeekButtonDataAttrs = {
|
|
584
|
-
seeking: "data-seeking",
|
|
585
|
-
direction: "data-direction"
|
|
1144
|
+
...TransitionDataAttrs
|
|
586
1145
|
};
|
|
587
1146
|
|
|
588
1147
|
//#endregion
|
|
589
|
-
//#region ../
|
|
590
|
-
/**
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
return dot === -1 ? nearest : Number(nearest.toFixed(`${step}`.length - dot - 1));
|
|
599
|
-
}
|
|
1148
|
+
//#region ../core/dist/dev/core/ui/popover/popup-host-attr.js
|
|
1149
|
+
/**
|
|
1150
|
+
* Hosted floating UI surfaces (popover, menu, tooltip, and future overlays) that support
|
|
1151
|
+
* parent-driven lifecycle may set {@link POPUP_HOST_ATTR}. Ancestors can discover them with
|
|
1152
|
+
* {@link POPUP_HOST_SELECTOR} and call methods such as `close('imperative-action')` when
|
|
1153
|
+
* the element implements that contract.
|
|
1154
|
+
*/
|
|
1155
|
+
const POPUP_HOST_ATTR = "data-popup";
|
|
1156
|
+
const POPUP_HOST_SELECTOR = `[${POPUP_HOST_ATTR}]`;
|
|
600
1157
|
|
|
601
1158
|
//#endregion
|
|
602
1159
|
//#region ../core/dist/dev/core/ui/slider/slider-core.js
|
|
@@ -877,106 +1434,6 @@ function mapCuesToThumbnails(cues, baseURL) {
|
|
|
877
1434
|
return images;
|
|
878
1435
|
}
|
|
879
1436
|
|
|
880
|
-
//#endregion
|
|
881
|
-
//#region ../utils/dist/time/format.js
|
|
882
|
-
const UNIT_LABELS = [
|
|
883
|
-
{
|
|
884
|
-
singular: "hour",
|
|
885
|
-
plural: "hours"
|
|
886
|
-
},
|
|
887
|
-
{
|
|
888
|
-
singular: "minute",
|
|
889
|
-
plural: "minutes"
|
|
890
|
-
},
|
|
891
|
-
{
|
|
892
|
-
singular: "second",
|
|
893
|
-
plural: "seconds"
|
|
894
|
-
}
|
|
895
|
-
];
|
|
896
|
-
function isValidTime(value) {
|
|
897
|
-
return isNumber(value) && Number.isFinite(value);
|
|
898
|
-
}
|
|
899
|
-
function toTimeUnitPhrase(value, unitIndex) {
|
|
900
|
-
return `${value} ${value === 1 ? UNIT_LABELS[unitIndex]?.singular : UNIT_LABELS[unitIndex]?.plural}`;
|
|
901
|
-
}
|
|
902
|
-
/**
|
|
903
|
-
* Format seconds to digital display string.
|
|
904
|
-
*
|
|
905
|
-
* @param seconds - Time in seconds (can be negative)
|
|
906
|
-
* @param guide - Guide time (typically duration) to determine display format
|
|
907
|
-
* @returns Formatted string like "1:30" or "1:05:30"
|
|
908
|
-
*
|
|
909
|
-
* @example
|
|
910
|
-
* formatTime(90) // "1:30"
|
|
911
|
-
* formatTime(3661) // "1:01:01"
|
|
912
|
-
* formatTime(35, 3600) // "0:00:35" (guided by 1-hour duration)
|
|
913
|
-
* formatTime(35, 600) // "00:35" (guided by 10-minute duration)
|
|
914
|
-
*/
|
|
915
|
-
function formatTime(seconds, guide) {
|
|
916
|
-
if (!isValidTime(seconds)) return "0:00";
|
|
917
|
-
const negative = seconds < 0;
|
|
918
|
-
const positiveSeconds = Math.abs(seconds);
|
|
919
|
-
const h = Math.floor(positiveSeconds / 3600);
|
|
920
|
-
const m = Math.floor(positiveSeconds / 60 % 60);
|
|
921
|
-
const s = Math.floor(positiveSeconds % 60);
|
|
922
|
-
const guideAbs = guide ? Math.abs(guide) : 0;
|
|
923
|
-
const gh = Math.floor(guideAbs / 3600);
|
|
924
|
-
const gm = Math.floor(guideAbs / 60 % 60);
|
|
925
|
-
const showHours = h > 0 || gh > 0;
|
|
926
|
-
const padMinutes = showHours || gm >= 10;
|
|
927
|
-
const hoursStr = showHours ? `${h}:` : "";
|
|
928
|
-
const minutesStr = `${padMinutes && m < 10 ? "0" : ""}${m}:`;
|
|
929
|
-
const secondsStr = s < 10 ? `0${s}` : `${s}`;
|
|
930
|
-
return `${negative ? "-" : ""}${hoursStr}${minutesStr}${secondsStr}`;
|
|
931
|
-
}
|
|
932
|
-
/**
|
|
933
|
-
* Format seconds to human-readable phrase for screen readers.
|
|
934
|
-
*
|
|
935
|
-
* @param seconds - Time in seconds (negative indicates remaining)
|
|
936
|
-
* @returns Human-readable phrase like "1 minute, 30 seconds"
|
|
937
|
-
*
|
|
938
|
-
* @example
|
|
939
|
-
* formatTimeAsPhrase(90) // "1 minute, 30 seconds"
|
|
940
|
-
* formatTimeAsPhrase(3661) // "1 hour, 1 minute, 1 second"
|
|
941
|
-
* formatTimeAsPhrase(-270) // "4 minutes, 30 seconds remaining"
|
|
942
|
-
*/
|
|
943
|
-
function formatTimeAsPhrase(seconds) {
|
|
944
|
-
if (!isValidTime(seconds)) return "";
|
|
945
|
-
const negative = seconds < 0;
|
|
946
|
-
const positiveSeconds = Math.abs(seconds);
|
|
947
|
-
const h = Math.floor(positiveSeconds / 3600);
|
|
948
|
-
const m = Math.floor(positiveSeconds / 60 % 60);
|
|
949
|
-
const s = Math.floor(positiveSeconds % 60);
|
|
950
|
-
if (positiveSeconds === 0) return `${toTimeUnitPhrase(0, 2)}${negative ? " remaining" : ""}`;
|
|
951
|
-
return `${[
|
|
952
|
-
h,
|
|
953
|
-
m,
|
|
954
|
-
s
|
|
955
|
-
].map((value, index) => value > 0 ? toTimeUnitPhrase(value, index) : null).filter(Boolean).join(", ")}${negative ? " remaining" : ""}`;
|
|
956
|
-
}
|
|
957
|
-
/**
|
|
958
|
-
* Convert seconds to ISO 8601 duration for datetime attribute.
|
|
959
|
-
*
|
|
960
|
-
* @param seconds - Time in seconds
|
|
961
|
-
* @returns ISO 8601 duration string like "PT1M30S"
|
|
962
|
-
*
|
|
963
|
-
* @example
|
|
964
|
-
* secondsToIsoDuration(90) // "PT1M30S"
|
|
965
|
-
* secondsToIsoDuration(3661) // "PT1H1M1S"
|
|
966
|
-
*/
|
|
967
|
-
function secondsToIsoDuration(seconds) {
|
|
968
|
-
if (!isValidTime(seconds)) return "PT0S";
|
|
969
|
-
const positiveSeconds = Math.abs(seconds);
|
|
970
|
-
const h = Math.floor(positiveSeconds / 3600);
|
|
971
|
-
const m = Math.floor(positiveSeconds / 60 % 60);
|
|
972
|
-
const s = Math.floor(positiveSeconds % 60);
|
|
973
|
-
let duration = "PT";
|
|
974
|
-
if (h > 0) duration += `${h}H`;
|
|
975
|
-
if (m > 0) duration += `${m}M`;
|
|
976
|
-
if (s > 0 || duration === "PT") duration += `${s}S`;
|
|
977
|
-
return duration;
|
|
978
|
-
}
|
|
979
|
-
|
|
980
1437
|
//#endregion
|
|
981
1438
|
//#region ../core/dist/dev/core/ui/time/time-core.js
|
|
982
1439
|
const DEFAULT_LABELS = {
|
|
@@ -1171,6 +1628,7 @@ var TooltipCore = class TooltipCore {
|
|
|
1171
1628
|
const TooltipCSSVars = {
|
|
1172
1629
|
sideOffset: "--media-tooltip-side-offset",
|
|
1173
1630
|
alignOffset: "--media-tooltip-align-offset",
|
|
1631
|
+
boundaryOffset: "--media-tooltip-boundary-offset",
|
|
1174
1632
|
anchorWidth: "--media-tooltip-anchor-width",
|
|
1175
1633
|
anchorHeight: "--media-tooltip-anchor-height",
|
|
1176
1634
|
availableWidth: "--media-tooltip-available-width",
|
|
@@ -1183,8 +1641,7 @@ const TooltipDataAttrs = {
|
|
|
1183
1641
|
open: "data-open",
|
|
1184
1642
|
side: "data-side",
|
|
1185
1643
|
align: "data-align",
|
|
1186
|
-
|
|
1187
|
-
transitionEnding: "data-ending-style"
|
|
1644
|
+
...TransitionDataAttrs
|
|
1188
1645
|
};
|
|
1189
1646
|
|
|
1190
1647
|
//#endregion
|
|
@@ -1390,10 +1847,15 @@ var HotkeyCoordinator = class {
|
|
|
1390
1847
|
#docDisconnect = null;
|
|
1391
1848
|
/** Action name → bound keys. Controls query this to set `aria-keyshortcuts`. */
|
|
1392
1849
|
#ariaRegistry = /* @__PURE__ */ new Map();
|
|
1850
|
+
#subscribers = /* @__PURE__ */ new Set();
|
|
1393
1851
|
#destroyed = false;
|
|
1394
1852
|
constructor(target) {
|
|
1395
1853
|
this.#target = target;
|
|
1396
1854
|
}
|
|
1855
|
+
subscribe(callback) {
|
|
1856
|
+
this.#subscribers.add(callback);
|
|
1857
|
+
return () => this.#subscribers.delete(callback);
|
|
1858
|
+
}
|
|
1397
1859
|
add(options) {
|
|
1398
1860
|
const parsed = parseHotkeyPattern(options.keys);
|
|
1399
1861
|
const binding = {
|
|
@@ -1463,6 +1925,7 @@ var HotkeyCoordinator = class {
|
|
|
1463
1925
|
#handleEvent = (event) => {
|
|
1464
1926
|
if (event.key === "Unidentified") return;
|
|
1465
1927
|
if (isInteractiveActivation(event)) return;
|
|
1928
|
+
if (event.defaultPrevented) return;
|
|
1466
1929
|
const editable = isEditableTarget(event);
|
|
1467
1930
|
for (const binding of this.#bindings) {
|
|
1468
1931
|
const { options, parsed } = binding;
|
|
@@ -1472,6 +1935,19 @@ var HotkeyCoordinator = class {
|
|
|
1472
1935
|
for (const p of parsed) {
|
|
1473
1936
|
if (!matchesHotkeyEvent(p, event)) continue;
|
|
1474
1937
|
if (editable && p.modifiers.size === 0) continue;
|
|
1938
|
+
if (this.#subscribers.size > 0) {
|
|
1939
|
+
const activateEvent = {
|
|
1940
|
+
source: "hotkey",
|
|
1941
|
+
action: options.action,
|
|
1942
|
+
value: options.value,
|
|
1943
|
+
event
|
|
1944
|
+
};
|
|
1945
|
+
for (const cb of this.#subscribers) try {
|
|
1946
|
+
cb(activateEvent);
|
|
1947
|
+
} catch (error) {
|
|
1948
|
+
console.warn("[vjs-hotkey] subscribe callback threw:", error);
|
|
1949
|
+
}
|
|
1950
|
+
}
|
|
1475
1951
|
event.preventDefault();
|
|
1476
1952
|
options.onActivate(event, p.originalKey);
|
|
1477
1953
|
return;
|
|
@@ -1564,7 +2040,8 @@ const coordinators = /* @__PURE__ */ new WeakMap();
|
|
|
1564
2040
|
function findHotkeyCoordinator(target) {
|
|
1565
2041
|
return coordinators.get(target);
|
|
1566
2042
|
}
|
|
1567
|
-
|
|
2043
|
+
/** Look up or create the hotkey coordinator for a target element. */
|
|
2044
|
+
function getHotkeyCoordinator(target) {
|
|
1568
2045
|
let coordinator = coordinators.get(target);
|
|
1569
2046
|
if (!coordinator) {
|
|
1570
2047
|
coordinator = new HotkeyCoordinator(target);
|
|
@@ -1589,7 +2066,7 @@ function getCoordinator(target) {
|
|
|
1589
2066
|
* @returns A cleanup function that removes the binding.
|
|
1590
2067
|
*/
|
|
1591
2068
|
function createHotkey(target, options) {
|
|
1592
|
-
return
|
|
2069
|
+
return getHotkeyCoordinator(target).add(options);
|
|
1593
2070
|
}
|
|
1594
2071
|
|
|
1595
2072
|
//#endregion
|
|
@@ -1625,6 +2102,7 @@ function createDismissLayer(options) {
|
|
|
1625
2102
|
}
|
|
1626
2103
|
function handleKeydown(event) {
|
|
1627
2104
|
if (event.key !== "Escape") return;
|
|
2105
|
+
if (event.defaultPrevented) return;
|
|
1628
2106
|
if (!state.current.active) return;
|
|
1629
2107
|
if (!(options.closeOnEscape?.() ?? true)) return;
|
|
1630
2108
|
options.onEscapeDismiss(event);
|
|
@@ -1765,6 +2243,50 @@ function createButton(options) {
|
|
|
1765
2243
|
};
|
|
1766
2244
|
}
|
|
1767
2245
|
|
|
2246
|
+
//#endregion
|
|
2247
|
+
//#region ../core/dist/dev/dom/ui/input-action.js
|
|
2248
|
+
function toInputActionEvent(event) {
|
|
2249
|
+
return {
|
|
2250
|
+
action: event.action,
|
|
2251
|
+
value: event.value,
|
|
2252
|
+
source: event.source,
|
|
2253
|
+
key: "key" in event.event ? event.event.key : void 0
|
|
2254
|
+
};
|
|
2255
|
+
}
|
|
2256
|
+
function getMediaSnapshot(store) {
|
|
2257
|
+
if (!store) return {};
|
|
2258
|
+
const state = store.state;
|
|
2259
|
+
const time = selectTime(state);
|
|
2260
|
+
return {
|
|
2261
|
+
paused: selectPlayback(state)?.paused,
|
|
2262
|
+
volume: selectVolume(state)?.volume,
|
|
2263
|
+
muted: selectVolume(state)?.muted,
|
|
2264
|
+
fullscreen: selectFullscreen(state)?.fullscreen,
|
|
2265
|
+
subtitlesShowing: selectTextTrack(state)?.subtitlesShowing,
|
|
2266
|
+
pip: selectPiP(state)?.pip,
|
|
2267
|
+
currentTime: time?.currentTime,
|
|
2268
|
+
duration: time?.duration
|
|
2269
|
+
};
|
|
2270
|
+
}
|
|
2271
|
+
function subscribeToInputActions(container, callback) {
|
|
2272
|
+
const handleEvent = (event) => callback(toInputActionEvent(event));
|
|
2273
|
+
const gestureUnsubscribe = getGestureCoordinator(container).subscribe(handleEvent);
|
|
2274
|
+
const hotkeyUnsubscribe = getHotkeyCoordinator(container).subscribe(handleEvent);
|
|
2275
|
+
return () => {
|
|
2276
|
+
gestureUnsubscribe();
|
|
2277
|
+
hotkeyUnsubscribe();
|
|
2278
|
+
};
|
|
2279
|
+
}
|
|
2280
|
+
const indicatorVisibilityCoordinators = /* @__PURE__ */ new WeakMap();
|
|
2281
|
+
function getIndicatorVisibilityCoordinator(container) {
|
|
2282
|
+
let coordinator = indicatorVisibilityCoordinators.get(container);
|
|
2283
|
+
if (!coordinator) {
|
|
2284
|
+
coordinator = new IndicatorVisibilityCoordinator();
|
|
2285
|
+
indicatorVisibilityCoordinators.set(container, coordinator);
|
|
2286
|
+
}
|
|
2287
|
+
return coordinator;
|
|
2288
|
+
}
|
|
2289
|
+
|
|
1768
2290
|
//#endregion
|
|
1769
2291
|
//#region ../core/dist/dev/dom/ui/popover/popover.js
|
|
1770
2292
|
function createPopover(options) {
|
|
@@ -1788,6 +2310,9 @@ function createPopover(options) {
|
|
|
1788
2310
|
}
|
|
1789
2311
|
});
|
|
1790
2312
|
const state = layer.input;
|
|
2313
|
+
const groupMember = { close(reason) {
|
|
2314
|
+
applyClose(reason);
|
|
2315
|
+
} };
|
|
1791
2316
|
function clearHoverTimeout() {
|
|
1792
2317
|
if (hoverTimeout !== null) {
|
|
1793
2318
|
clearTimeout(hoverTimeout);
|
|
@@ -1823,6 +2348,7 @@ function createPopover(options) {
|
|
|
1823
2348
|
function applyOpen(reason, event) {
|
|
1824
2349
|
const opening = layer.open();
|
|
1825
2350
|
if (!opening) return;
|
|
2351
|
+
options.group?.()?.open(groupMember);
|
|
1826
2352
|
onOpenChange(true, event ? {
|
|
1827
2353
|
reason,
|
|
1828
2354
|
event
|
|
@@ -1835,6 +2361,7 @@ function createPopover(options) {
|
|
|
1835
2361
|
function applyClose(reason, event) {
|
|
1836
2362
|
const closing = layer.close(popupEl);
|
|
1837
2363
|
if (!closing) return;
|
|
2364
|
+
options.group?.()?.close(groupMember);
|
|
1838
2365
|
onOpenChange(false, event ? {
|
|
1839
2366
|
reason,
|
|
1840
2367
|
event
|
|
@@ -1858,6 +2385,7 @@ function createPopover(options) {
|
|
|
1858
2385
|
applyClose("outside-click", event);
|
|
1859
2386
|
}
|
|
1860
2387
|
layer.signal.addEventListener("abort", () => {
|
|
2388
|
+
options.group?.()?.close(groupMember);
|
|
1861
2389
|
clearHoverTimeout();
|
|
1862
2390
|
capturedPointers.clear();
|
|
1863
2391
|
triggerEl = null;
|
|
@@ -1947,14 +2475,621 @@ function createPopover(options) {
|
|
|
1947
2475
|
};
|
|
1948
2476
|
}
|
|
1949
2477
|
|
|
2478
|
+
//#endregion
|
|
2479
|
+
//#region ../core/dist/dev/dom/ui/menu/create-menu.js
|
|
2480
|
+
function isMenuNavigationKey(event) {
|
|
2481
|
+
const { key } = event;
|
|
2482
|
+
return 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;
|
|
2483
|
+
}
|
|
2484
|
+
function getRootPositionOptions(side, align) {
|
|
2485
|
+
if (!side || !align) return null;
|
|
2486
|
+
return {
|
|
2487
|
+
side,
|
|
2488
|
+
align
|
|
2489
|
+
};
|
|
2490
|
+
}
|
|
2491
|
+
function completeMenuItemSelection(menu, parentMenu = null) {
|
|
2492
|
+
if (parentMenu) parentMenu.pop();
|
|
2493
|
+
else menu.close();
|
|
2494
|
+
}
|
|
2495
|
+
function createMenu(options) {
|
|
2496
|
+
const items = [];
|
|
2497
|
+
let highlightedItem = null;
|
|
2498
|
+
let triggerElement = null;
|
|
2499
|
+
let contentElement = null;
|
|
2500
|
+
let typeaheadBuffer = "";
|
|
2501
|
+
let typeaheadTimer = null;
|
|
2502
|
+
let openRafId = 0;
|
|
2503
|
+
let lastCloseReason = null;
|
|
2504
|
+
const navigationState = createState({
|
|
2505
|
+
stack: [],
|
|
2506
|
+
direction: "forward"
|
|
2507
|
+
});
|
|
2508
|
+
function push(menuId, triggerId) {
|
|
2509
|
+
const stack = navigationState.current.stack;
|
|
2510
|
+
if (stack[stack.length - 1]?.menuId === menuId) return;
|
|
2511
|
+
navigationState.patch({
|
|
2512
|
+
stack: [...stack, {
|
|
2513
|
+
menuId,
|
|
2514
|
+
triggerId
|
|
2515
|
+
}],
|
|
2516
|
+
direction: "forward"
|
|
2517
|
+
});
|
|
2518
|
+
}
|
|
2519
|
+
function pop() {
|
|
2520
|
+
const stack = navigationState.current.stack;
|
|
2521
|
+
if (stack.length === 0) return;
|
|
2522
|
+
navigationState.patch({
|
|
2523
|
+
stack: stack.slice(0, -1),
|
|
2524
|
+
direction: "back"
|
|
2525
|
+
});
|
|
2526
|
+
}
|
|
2527
|
+
function highlight(element, highlightOptions) {
|
|
2528
|
+
if (highlightedItem === element) return;
|
|
2529
|
+
if (highlightedItem) {
|
|
2530
|
+
highlightedItem.tabIndex = -1;
|
|
2531
|
+
highlightedItem.removeAttribute(MenuItemDataAttrs.highlighted);
|
|
2532
|
+
}
|
|
2533
|
+
highlightedItem = element;
|
|
2534
|
+
if (element) {
|
|
2535
|
+
element.tabIndex = 0;
|
|
2536
|
+
element.setAttribute(MenuItemDataAttrs.highlighted, "");
|
|
2537
|
+
if (highlightOptions?.focus !== false) if (highlightOptions?.preventScroll) element.focus({ preventScroll: true });
|
|
2538
|
+
else element.focus();
|
|
2539
|
+
}
|
|
2540
|
+
options.onHighlightChange?.(element);
|
|
2541
|
+
}
|
|
2542
|
+
function clearHighlight() {
|
|
2543
|
+
if (highlightedItem) {
|
|
2544
|
+
highlightedItem.tabIndex = -1;
|
|
2545
|
+
highlightedItem.removeAttribute(MenuItemDataAttrs.highlighted);
|
|
2546
|
+
highlightedItem = null;
|
|
2547
|
+
options.onHighlightChange?.(null);
|
|
2548
|
+
}
|
|
2549
|
+
}
|
|
2550
|
+
function highlightFirstItem(options) {
|
|
2551
|
+
highlight(items[0] ?? null, options);
|
|
2552
|
+
}
|
|
2553
|
+
function getInitialHighlightItem() {
|
|
2554
|
+
return items.find((item) => item.matches("[aria-checked=\"true\"], [aria-selected=\"true\"]")) ?? items[0] ?? null;
|
|
2555
|
+
}
|
|
2556
|
+
function clearTypeahead() {
|
|
2557
|
+
if (typeaheadTimer !== null) {
|
|
2558
|
+
clearTimeout(typeaheadTimer);
|
|
2559
|
+
typeaheadTimer = null;
|
|
2560
|
+
}
|
|
2561
|
+
typeaheadBuffer = "";
|
|
2562
|
+
}
|
|
2563
|
+
function scheduleInitialHighlight() {
|
|
2564
|
+
cancelAnimationFrame(openRafId);
|
|
2565
|
+
openRafId = requestAnimationFrame(() => {
|
|
2566
|
+
openRafId = 0;
|
|
2567
|
+
if (!popover.input.current.active || popover.input.current.status === "ending" || highlightedItem) return;
|
|
2568
|
+
highlight(getInitialHighlightItem());
|
|
2569
|
+
});
|
|
2570
|
+
}
|
|
2571
|
+
function handleTypeahead(char) {
|
|
2572
|
+
typeaheadBuffer = typeaheadBuffer.length === 1 && typeaheadBuffer.toLowerCase() === char.toLowerCase() ? char : typeaheadBuffer + char;
|
|
2573
|
+
if (typeaheadTimer !== null) clearTimeout(typeaheadTimer);
|
|
2574
|
+
typeaheadTimer = setTimeout(clearTypeahead, 500);
|
|
2575
|
+
const searchStart = (highlightedItem ? items.indexOf(highlightedItem) : -1) + 1;
|
|
2576
|
+
const candidates = [...items.slice(searchStart), ...items.slice(0, searchStart)];
|
|
2577
|
+
const needle = typeaheadBuffer.toLowerCase();
|
|
2578
|
+
const match = candidates.find((candidate) => {
|
|
2579
|
+
return (candidate.textContent?.trim().toLowerCase() ?? "").startsWith(needle);
|
|
2580
|
+
});
|
|
2581
|
+
if (match) highlight(match);
|
|
2582
|
+
}
|
|
2583
|
+
const popover = createPopover({
|
|
2584
|
+
transition: options.transition,
|
|
2585
|
+
onOpenChange(open, details) {
|
|
2586
|
+
lastCloseReason = open ? null : details.reason;
|
|
2587
|
+
options.onOpenChange(open, details);
|
|
2588
|
+
if (open) scheduleInitialHighlight();
|
|
2589
|
+
else {
|
|
2590
|
+
clearHighlight();
|
|
2591
|
+
clearTypeahead();
|
|
2592
|
+
navigationState.patch({
|
|
2593
|
+
stack: [],
|
|
2594
|
+
direction: "forward"
|
|
2595
|
+
});
|
|
2596
|
+
}
|
|
2597
|
+
},
|
|
2598
|
+
onOpenChangeComplete(open) {
|
|
2599
|
+
options.onOpenChangeComplete?.(open);
|
|
2600
|
+
if (!open && lastCloseReason !== "imperative-action" && lastCloseReason !== "group-open") triggerElement?.focus();
|
|
2601
|
+
},
|
|
2602
|
+
closeOnEscape: options.closeOnEscape,
|
|
2603
|
+
closeOnOutsideClick: options.closeOnOutsideClick,
|
|
2604
|
+
...options.group ? { group: options.group } : {}
|
|
2605
|
+
});
|
|
2606
|
+
const contentProps = {
|
|
2607
|
+
onFocusOut: popover.popupProps.onFocusOut,
|
|
2608
|
+
onKeyDown(event) {
|
|
2609
|
+
const { key } = event;
|
|
2610
|
+
if (key !== "Escape" && isMenuNavigationKey(event) && !event.defaultPrevented) event.preventDefault();
|
|
2611
|
+
if (items.length === 0) return;
|
|
2612
|
+
switch (key) {
|
|
2613
|
+
case "ArrowDown":
|
|
2614
|
+
event.preventDefault();
|
|
2615
|
+
highlight(items[((highlightedItem ? items.indexOf(highlightedItem) : -1) + 1) % items.length] ?? null);
|
|
2616
|
+
break;
|
|
2617
|
+
case "ArrowUp": {
|
|
2618
|
+
event.preventDefault();
|
|
2619
|
+
const currentIndex = highlightedItem ? items.indexOf(highlightedItem) : 0;
|
|
2620
|
+
highlight(items[(currentIndex <= 0 ? items.length : currentIndex) - 1] ?? null);
|
|
2621
|
+
break;
|
|
2622
|
+
}
|
|
2623
|
+
case "Home":
|
|
2624
|
+
event.preventDefault();
|
|
2625
|
+
highlight(items[0] ?? null);
|
|
2626
|
+
break;
|
|
2627
|
+
case "End":
|
|
2628
|
+
event.preventDefault();
|
|
2629
|
+
highlight(items[items.length - 1] ?? null);
|
|
2630
|
+
break;
|
|
2631
|
+
case "Enter":
|
|
2632
|
+
case " ":
|
|
2633
|
+
event.preventDefault();
|
|
2634
|
+
highlightedItem?.click();
|
|
2635
|
+
break;
|
|
2636
|
+
default: if (key.length === 1 && !event.ctrlKey && !event.altKey && !event.metaKey) handleTypeahead(key);
|
|
2637
|
+
}
|
|
2638
|
+
}
|
|
2639
|
+
};
|
|
2640
|
+
function handleTriggerKeyDown(event) {
|
|
2641
|
+
const input = popover.input.current;
|
|
2642
|
+
if (!input.active || input.status === "ending") return;
|
|
2643
|
+
if (event.key === "Escape") return;
|
|
2644
|
+
if (!isMenuNavigationKey(event)) return;
|
|
2645
|
+
contentProps.onKeyDown(event);
|
|
2646
|
+
event.stopPropagation();
|
|
2647
|
+
}
|
|
2648
|
+
function setTriggerElement(element) {
|
|
2649
|
+
triggerElement = element;
|
|
2650
|
+
popover.setTriggerElement(element);
|
|
2651
|
+
}
|
|
2652
|
+
function setContentElement(element) {
|
|
2653
|
+
contentElement = element;
|
|
2654
|
+
popover.setPopupElement(element);
|
|
2655
|
+
}
|
|
2656
|
+
function compareItems(a, b) {
|
|
2657
|
+
if (a === b) return 0;
|
|
2658
|
+
const position = a.compareDocumentPosition(b);
|
|
2659
|
+
if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;
|
|
2660
|
+
if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;
|
|
2661
|
+
return 0;
|
|
2662
|
+
}
|
|
2663
|
+
function registerItem(element) {
|
|
2664
|
+
element.tabIndex = -1;
|
|
2665
|
+
element.setAttribute(MenuItemDataAttrs.item, "");
|
|
2666
|
+
items.push(element);
|
|
2667
|
+
items.sort(compareItems);
|
|
2668
|
+
if (popover.input.current.active && popover.input.current.status !== "ending" && !highlightedItem) scheduleInitialHighlight();
|
|
2669
|
+
return () => {
|
|
2670
|
+
const index = items.indexOf(element);
|
|
2671
|
+
if (index !== -1) items.splice(index, 1);
|
|
2672
|
+
if (highlightedItem === element) clearHighlight();
|
|
2673
|
+
};
|
|
2674
|
+
}
|
|
2675
|
+
function destroy() {
|
|
2676
|
+
cancelAnimationFrame(openRafId);
|
|
2677
|
+
openRafId = 0;
|
|
2678
|
+
clearTypeahead();
|
|
2679
|
+
popover.destroy();
|
|
2680
|
+
}
|
|
2681
|
+
return {
|
|
2682
|
+
input: popover.input,
|
|
2683
|
+
navigationInput: navigationState,
|
|
2684
|
+
triggerProps: {
|
|
2685
|
+
onClick: popover.triggerProps.onClick,
|
|
2686
|
+
onKeyDown: handleTriggerKeyDown
|
|
2687
|
+
},
|
|
2688
|
+
contentProps,
|
|
2689
|
+
get triggerElement() {
|
|
2690
|
+
return triggerElement;
|
|
2691
|
+
},
|
|
2692
|
+
get contentElement() {
|
|
2693
|
+
return contentElement;
|
|
2694
|
+
},
|
|
2695
|
+
setTriggerElement,
|
|
2696
|
+
setContentElement,
|
|
2697
|
+
registerItem,
|
|
2698
|
+
highlight,
|
|
2699
|
+
highlightFirstItem,
|
|
2700
|
+
push,
|
|
2701
|
+
pop,
|
|
2702
|
+
open: popover.open,
|
|
2703
|
+
close: popover.close,
|
|
2704
|
+
destroy
|
|
2705
|
+
};
|
|
2706
|
+
}
|
|
2707
|
+
|
|
2708
|
+
//#endregion
|
|
2709
|
+
//#region ../core/dist/dev/dom/utils/layout.js
|
|
2710
|
+
function forceLayout(element) {
|
|
2711
|
+
element?.getBoundingClientRect();
|
|
2712
|
+
}
|
|
2713
|
+
function createDOMRect(left, top, width, height) {
|
|
2714
|
+
const right = left + width;
|
|
2715
|
+
const bottom = top + height;
|
|
2716
|
+
return {
|
|
2717
|
+
x: left,
|
|
2718
|
+
y: top,
|
|
2719
|
+
width,
|
|
2720
|
+
height,
|
|
2721
|
+
top,
|
|
2722
|
+
right,
|
|
2723
|
+
bottom,
|
|
2724
|
+
left,
|
|
2725
|
+
toJSON() {
|
|
2726
|
+
return {
|
|
2727
|
+
x: left,
|
|
2728
|
+
y: top,
|
|
2729
|
+
width,
|
|
2730
|
+
height,
|
|
2731
|
+
top,
|
|
2732
|
+
right,
|
|
2733
|
+
bottom,
|
|
2734
|
+
left
|
|
2735
|
+
};
|
|
2736
|
+
}
|
|
2737
|
+
};
|
|
2738
|
+
}
|
|
2739
|
+
function intersectDOMRects(firstRect, secondRect) {
|
|
2740
|
+
const left = Math.max(firstRect.left, secondRect.left);
|
|
2741
|
+
const top = Math.max(firstRect.top, secondRect.top);
|
|
2742
|
+
const right = Math.min(firstRect.right, secondRect.right);
|
|
2743
|
+
const bottom = Math.min(firstRect.bottom, secondRect.bottom);
|
|
2744
|
+
return createDOMRect(left, top, Math.max(0, right - left), Math.max(0, bottom - top));
|
|
2745
|
+
}
|
|
2746
|
+
function getPositioningBoundaryRect(boundaryElement) {
|
|
2747
|
+
const viewportRect = document.documentElement.getBoundingClientRect();
|
|
2748
|
+
return boundaryElement ? intersectDOMRects(viewportRect, boundaryElement.getBoundingClientRect()) : viewportRect;
|
|
2749
|
+
}
|
|
2750
|
+
function resolvePositioningBoundary(boundary, options = {}) {
|
|
2751
|
+
if (!boundary) return null;
|
|
2752
|
+
if (!isString(boundary)) return boundary;
|
|
2753
|
+
if (boundary === "viewport") return null;
|
|
2754
|
+
if (boundary === "container") return options.container ?? null;
|
|
2755
|
+
try {
|
|
2756
|
+
return (options.root ?? document).querySelector(boundary);
|
|
2757
|
+
} catch {
|
|
2758
|
+
return null;
|
|
2759
|
+
}
|
|
2760
|
+
}
|
|
2761
|
+
|
|
2762
|
+
//#endregion
|
|
2763
|
+
//#region ../core/dist/dev/dom/ui/menu/create-menu-view-transition.js
|
|
2764
|
+
const DEFAULT_MENU_VIEW_TRANSITION_STATE = {
|
|
2765
|
+
phase: "hidden",
|
|
2766
|
+
direction: "forward",
|
|
2767
|
+
triggerId: null
|
|
2768
|
+
};
|
|
2769
|
+
async function waitForElementAnimations(element) {
|
|
2770
|
+
const animations = element.getAnimations?.() ?? [];
|
|
2771
|
+
if (!animations.length) return;
|
|
2772
|
+
await Promise.all(animations.map((animation) => animation.finished)).catch(() => {});
|
|
2773
|
+
}
|
|
2774
|
+
function focusFirstMenuViewItem(element) {
|
|
2775
|
+
element.querySelector("[data-item]")?.focus({ preventScroll: true });
|
|
2776
|
+
}
|
|
2777
|
+
function getMenuViewState(phase) {
|
|
2778
|
+
return phase === "entering" || phase === "active" ? "active" : "inactive";
|
|
2779
|
+
}
|
|
2780
|
+
function getMenuViewTransitionAttrs(state) {
|
|
2781
|
+
return {
|
|
2782
|
+
"data-menu-view": "",
|
|
2783
|
+
"data-menu-view-state": getMenuViewState(state.phase),
|
|
2784
|
+
"data-direction": state.direction,
|
|
2785
|
+
...getTransitionStyleAttrs({
|
|
2786
|
+
transitionStarting: state.phase === "entering",
|
|
2787
|
+
transitionEnding: state.phase === "exiting"
|
|
2788
|
+
}),
|
|
2789
|
+
"data-open": state.phase !== "hidden" ? "" : void 0,
|
|
2790
|
+
hidden: state.phase === "hidden"
|
|
2791
|
+
};
|
|
2792
|
+
}
|
|
2793
|
+
function createMenuViewTransition(options = {}) {
|
|
2794
|
+
const input = createState(DEFAULT_MENU_VIEW_TRANSITION_STATE);
|
|
2795
|
+
const waitForAnimations = options.waitForAnimations ?? waitForElementAnimations;
|
|
2796
|
+
const focusFirstItem = options.focusFirstItem ?? focusFirstMenuViewItem;
|
|
2797
|
+
let element = null;
|
|
2798
|
+
let transitionId = 0;
|
|
2799
|
+
let raf1 = 0;
|
|
2800
|
+
let raf2 = 0;
|
|
2801
|
+
let focusRaf = 0;
|
|
2802
|
+
let scheduledTransitionId = 0;
|
|
2803
|
+
let scheduledPhase = null;
|
|
2804
|
+
function cancelFrames() {
|
|
2805
|
+
cancelAnimationFrame(raf1);
|
|
2806
|
+
cancelAnimationFrame(raf2);
|
|
2807
|
+
cancelAnimationFrame(focusRaf);
|
|
2808
|
+
raf1 = 0;
|
|
2809
|
+
raf2 = 0;
|
|
2810
|
+
focusRaf = 0;
|
|
2811
|
+
scheduledTransitionId = 0;
|
|
2812
|
+
scheduledPhase = null;
|
|
2813
|
+
}
|
|
2814
|
+
function scheduleCurrentPhase() {
|
|
2815
|
+
const { phase } = input.current;
|
|
2816
|
+
if (!element || phase !== "entering" && phase !== "exiting") return;
|
|
2817
|
+
if (scheduledTransitionId === transitionId && scheduledPhase === phase) return;
|
|
2818
|
+
scheduledTransitionId = transitionId;
|
|
2819
|
+
scheduledPhase = phase;
|
|
2820
|
+
if (phase === "entering") scheduleEnterComplete(transitionId, element);
|
|
2821
|
+
else scheduleExitComplete(transitionId, element);
|
|
2822
|
+
}
|
|
2823
|
+
function scheduleEnterComplete(currentTransitionId, currentElement) {
|
|
2824
|
+
forceLayout(currentElement);
|
|
2825
|
+
raf1 = requestAnimationFrame(() => {
|
|
2826
|
+
if (currentTransitionId !== transitionId) return;
|
|
2827
|
+
raf2 = requestAnimationFrame(() => {
|
|
2828
|
+
if (currentTransitionId !== transitionId) return;
|
|
2829
|
+
forceLayout(currentElement);
|
|
2830
|
+
input.patch({ phase: "active" });
|
|
2831
|
+
focusRaf = requestAnimationFrame(() => {
|
|
2832
|
+
if (currentTransitionId !== transitionId) return;
|
|
2833
|
+
focusFirstItem(currentElement);
|
|
2834
|
+
});
|
|
2835
|
+
});
|
|
2836
|
+
});
|
|
2837
|
+
}
|
|
2838
|
+
function scheduleExitComplete(currentTransitionId, currentElement) {
|
|
2839
|
+
forceLayout(currentElement);
|
|
2840
|
+
raf1 = requestAnimationFrame(async () => {
|
|
2841
|
+
await waitForAnimations(currentElement);
|
|
2842
|
+
if (currentTransitionId !== transitionId) return;
|
|
2843
|
+
const { direction, triggerId } = input.current;
|
|
2844
|
+
input.patch({
|
|
2845
|
+
phase: "hidden",
|
|
2846
|
+
triggerId: null
|
|
2847
|
+
});
|
|
2848
|
+
if (direction === "back") options.restoreFocus?.(triggerId);
|
|
2849
|
+
});
|
|
2850
|
+
}
|
|
2851
|
+
function startEnter(direction, triggerId) {
|
|
2852
|
+
transitionId++;
|
|
2853
|
+
cancelFrames();
|
|
2854
|
+
input.patch({
|
|
2855
|
+
phase: "entering",
|
|
2856
|
+
direction,
|
|
2857
|
+
triggerId
|
|
2858
|
+
});
|
|
2859
|
+
scheduleCurrentPhase();
|
|
2860
|
+
}
|
|
2861
|
+
function startExit(direction) {
|
|
2862
|
+
transitionId++;
|
|
2863
|
+
cancelFrames();
|
|
2864
|
+
input.patch({
|
|
2865
|
+
phase: "exiting",
|
|
2866
|
+
direction
|
|
2867
|
+
});
|
|
2868
|
+
scheduleCurrentPhase();
|
|
2869
|
+
}
|
|
2870
|
+
function setElement(nextElement) {
|
|
2871
|
+
if (element === nextElement) return;
|
|
2872
|
+
element = nextElement;
|
|
2873
|
+
scheduleCurrentPhase();
|
|
2874
|
+
}
|
|
2875
|
+
function sync({ active, direction, triggerId = null }) {
|
|
2876
|
+
const { phase } = input.current;
|
|
2877
|
+
if (active && (phase === "hidden" || phase === "exiting")) startEnter(direction, triggerId);
|
|
2878
|
+
else if (!active && (phase === "active" || phase === "entering")) startExit(direction);
|
|
2879
|
+
}
|
|
2880
|
+
function destroy() {
|
|
2881
|
+
transitionId++;
|
|
2882
|
+
cancelFrames();
|
|
2883
|
+
element = null;
|
|
2884
|
+
input.patch(DEFAULT_MENU_VIEW_TRANSITION_STATE);
|
|
2885
|
+
}
|
|
2886
|
+
return {
|
|
2887
|
+
input,
|
|
2888
|
+
setElement,
|
|
2889
|
+
sync,
|
|
2890
|
+
destroy
|
|
2891
|
+
};
|
|
2892
|
+
}
|
|
2893
|
+
|
|
2894
|
+
//#endregion
|
|
2895
|
+
//#region ../core/dist/dev/dom/ui/menu/menu-viewport-transition.js
|
|
2896
|
+
const DEFAULT_MENU_VIEWPORT_MIN_WIDTH = 160;
|
|
2897
|
+
const MENU_VIEW_ATTR = "data-menu-view";
|
|
2898
|
+
const MENU_VIEW_STATE_ATTR = "data-menu-view-state";
|
|
2899
|
+
const MENU_VIEW_ACTIVE_STATE = "active";
|
|
2900
|
+
const MENU_VIEW_INACTIVE_STATE = "inactive";
|
|
2901
|
+
const MENU_ROOT_VIEW_ATTR = "data-menu-root-view";
|
|
2902
|
+
const MENU_VIEWPORT_ATTR = "data-menu-viewport";
|
|
2903
|
+
const MENU_WIDTH_VAR = "--media-menu-width";
|
|
2904
|
+
const MENU_HEIGHT_VAR = "--media-menu-height";
|
|
2905
|
+
const MENU_VIEW_MEASURE_STYLE_PROPERTIES = [
|
|
2906
|
+
"position",
|
|
2907
|
+
"top",
|
|
2908
|
+
"right",
|
|
2909
|
+
"bottom",
|
|
2910
|
+
"left",
|
|
2911
|
+
"width",
|
|
2912
|
+
"height",
|
|
2913
|
+
"min-width",
|
|
2914
|
+
"max-width"
|
|
2915
|
+
];
|
|
2916
|
+
const viewportTransitionStates = /* @__PURE__ */ new WeakMap();
|
|
2917
|
+
function getMenuViewportAttrs() {
|
|
2918
|
+
return { "data-menu-viewport": "" };
|
|
2919
|
+
}
|
|
2920
|
+
function getMenuRootViewAttrs() {
|
|
2921
|
+
return {
|
|
2922
|
+
"data-menu-root-view": "",
|
|
2923
|
+
"data-menu-view": ""
|
|
2924
|
+
};
|
|
2925
|
+
}
|
|
2926
|
+
function getViewportTransitionState(content) {
|
|
2927
|
+
let state = viewportTransitionStates.get(content);
|
|
2928
|
+
if (!state) {
|
|
2929
|
+
state = {
|
|
2930
|
+
pending: null,
|
|
2931
|
+
phaseKeys: /* @__PURE__ */ new WeakMap()
|
|
2932
|
+
};
|
|
2933
|
+
viewportTransitionStates.set(content, state);
|
|
2934
|
+
}
|
|
2935
|
+
return state;
|
|
2936
|
+
}
|
|
2937
|
+
function getMenuViewportElement(content) {
|
|
2938
|
+
if (!content) return null;
|
|
2939
|
+
return content.querySelector(`:scope > [${MENU_VIEWPORT_ATTR}]`) ?? content;
|
|
2940
|
+
}
|
|
2941
|
+
function getViewportElement(content, view) {
|
|
2942
|
+
const viewport = getMenuViewportElement(content);
|
|
2943
|
+
if (viewport && viewport !== content) return viewport;
|
|
2944
|
+
if (view?.parentElement && content.contains(view.parentElement)) return view.parentElement;
|
|
2945
|
+
return content;
|
|
2946
|
+
}
|
|
2947
|
+
function getRootViewElement(viewport) {
|
|
2948
|
+
return viewport.querySelector(`:scope > [${MENU_ROOT_VIEW_ATTR}]`);
|
|
2949
|
+
}
|
|
2950
|
+
function getActiveMenuViewElement(viewport) {
|
|
2951
|
+
return 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;
|
|
2952
|
+
}
|
|
2953
|
+
function resolveMinWidth(options) {
|
|
2954
|
+
return options?.minWidth ?? DEFAULT_MENU_VIEWPORT_MIN_WIDTH;
|
|
2955
|
+
}
|
|
2956
|
+
function snapshotInlineStyle(element) {
|
|
2957
|
+
return MENU_VIEW_MEASURE_STYLE_PROPERTIES.map((property) => ({
|
|
2958
|
+
property,
|
|
2959
|
+
value: element.style.getPropertyValue(property),
|
|
2960
|
+
priority: element.style.getPropertyPriority(property)
|
|
2961
|
+
}));
|
|
2962
|
+
}
|
|
2963
|
+
function restoreInlineStyle(element, snapshot) {
|
|
2964
|
+
for (const { property, value, priority } of snapshot) if (value) element.style.setProperty(property, value, priority);
|
|
2965
|
+
else element.style.removeProperty(property);
|
|
2966
|
+
}
|
|
2967
|
+
function measureMenuView(view, minWidth) {
|
|
2968
|
+
const snapshot = snapshotInlineStyle(view);
|
|
2969
|
+
try {
|
|
2970
|
+
view.style.setProperty("position", "absolute");
|
|
2971
|
+
view.style.setProperty("top", "0px");
|
|
2972
|
+
view.style.setProperty("right", "auto");
|
|
2973
|
+
view.style.setProperty("bottom", "auto");
|
|
2974
|
+
view.style.setProperty("left", "0px");
|
|
2975
|
+
view.style.setProperty("width", "max-content");
|
|
2976
|
+
view.style.setProperty("height", "auto");
|
|
2977
|
+
view.style.setProperty("min-width", `${minWidth}px`);
|
|
2978
|
+
view.style.setProperty("max-width", "none");
|
|
2979
|
+
forceLayout(view);
|
|
2980
|
+
const rect = view.getBoundingClientRect();
|
|
2981
|
+
return {
|
|
2982
|
+
width: Math.ceil(Math.max(minWidth, rect.width, view.scrollWidth)),
|
|
2983
|
+
height: Math.ceil(Math.max(rect.height, view.scrollHeight))
|
|
2984
|
+
};
|
|
2985
|
+
} finally {
|
|
2986
|
+
restoreInlineStyle(view, snapshot);
|
|
2987
|
+
forceLayout(view);
|
|
2988
|
+
}
|
|
2989
|
+
}
|
|
2990
|
+
function setViewportSize(content, size) {
|
|
2991
|
+
content.style.setProperty(MENU_WIDTH_VAR, `${size.width}px`);
|
|
2992
|
+
content.style.setProperty(MENU_HEIGHT_VAR, `${size.height}px`);
|
|
2993
|
+
}
|
|
2994
|
+
function setMenuViewState(view, state) {
|
|
2995
|
+
view.setAttribute(MENU_VIEW_STATE_ATTR, state);
|
|
2996
|
+
if (state === MENU_VIEW_ACTIVE_STATE) view.setAttribute("data-open", "");
|
|
2997
|
+
else view.removeAttribute("data-open");
|
|
2998
|
+
}
|
|
2999
|
+
function prepareEnteringMenuView(content, rootView, entering, state, options) {
|
|
3000
|
+
const minWidth = resolveMinWidth(options);
|
|
3001
|
+
const fromSize = measureMenuView(rootView, minWidth);
|
|
3002
|
+
state.pending = {
|
|
3003
|
+
entering,
|
|
3004
|
+
fromSize,
|
|
3005
|
+
toSize: measureMenuView(entering, minWidth)
|
|
3006
|
+
};
|
|
3007
|
+
setMenuViewState(rootView, MENU_VIEW_ACTIVE_STATE);
|
|
3008
|
+
setViewportSize(content, fromSize);
|
|
3009
|
+
forceLayout(content);
|
|
3010
|
+
}
|
|
3011
|
+
function startEnteringMenuView(content, rootView, entering, state, options) {
|
|
3012
|
+
const minWidth = resolveMinWidth(options);
|
|
3013
|
+
const current = state.pending?.entering === entering ? state.pending : {
|
|
3014
|
+
entering,
|
|
3015
|
+
fromSize: measureMenuView(rootView, minWidth),
|
|
3016
|
+
toSize: measureMenuView(entering, minWidth)
|
|
3017
|
+
};
|
|
3018
|
+
state.pending = null;
|
|
3019
|
+
setViewportSize(content, current.fromSize);
|
|
3020
|
+
forceLayout(rootView);
|
|
3021
|
+
setMenuViewState(rootView, MENU_VIEW_INACTIVE_STATE);
|
|
3022
|
+
forceLayout(rootView);
|
|
3023
|
+
setViewportSize(content, current.toSize);
|
|
3024
|
+
}
|
|
3025
|
+
function startExitingMenuView(content, rootView, exiting, transitionState, options) {
|
|
3026
|
+
transitionState.pending = null;
|
|
3027
|
+
const minWidth = resolveMinWidth(options);
|
|
3028
|
+
const fromSize = measureMenuView(exiting, minWidth);
|
|
3029
|
+
const toSize = measureMenuView(rootView, minWidth);
|
|
3030
|
+
setViewportSize(content, fromSize);
|
|
3031
|
+
setMenuViewState(rootView, MENU_VIEW_INACTIVE_STATE);
|
|
3032
|
+
forceLayout(rootView);
|
|
3033
|
+
setMenuViewState(rootView, MENU_VIEW_ACTIVE_STATE);
|
|
3034
|
+
forceLayout(rootView);
|
|
3035
|
+
setViewportSize(content, toSize);
|
|
3036
|
+
}
|
|
3037
|
+
function syncMenuViewRoot(content, hasActiveChildView, options) {
|
|
3038
|
+
if (!content || hasActiveChildView) return;
|
|
3039
|
+
const viewport = getViewportElement(content);
|
|
3040
|
+
const rootView = getRootViewElement(viewport);
|
|
3041
|
+
if (!rootView || getActiveMenuViewElement(viewport)) return;
|
|
3042
|
+
const size = measureMenuView(rootView, resolveMinWidth(options));
|
|
3043
|
+
setMenuViewState(rootView, MENU_VIEW_ACTIVE_STATE);
|
|
3044
|
+
setViewportSize(content, size);
|
|
3045
|
+
}
|
|
3046
|
+
function syncMenuViewTransition(content, view, viewState, options) {
|
|
3047
|
+
if (!content || !view) return;
|
|
3048
|
+
const viewport = getViewportElement(content, view);
|
|
3049
|
+
const rootView = getRootViewElement(viewport);
|
|
3050
|
+
if (!rootView) return;
|
|
3051
|
+
const state = getViewportTransitionState(content);
|
|
3052
|
+
const phaseKey = `${viewState.phase}:${viewState.direction}`;
|
|
3053
|
+
if (state.phaseKeys.get(view) === phaseKey) return;
|
|
3054
|
+
state.phaseKeys.set(view, phaseKey);
|
|
3055
|
+
if (viewState.phase === "hidden") {
|
|
3056
|
+
state.phaseKeys.delete(view);
|
|
3057
|
+
syncMenuViewRoot(content, getActiveMenuViewElement(viewport) !== null, options);
|
|
3058
|
+
return;
|
|
3059
|
+
}
|
|
3060
|
+
if (viewState.phase === "entering") {
|
|
3061
|
+
prepareEnteringMenuView(content, rootView, view, state, options);
|
|
3062
|
+
return;
|
|
3063
|
+
}
|
|
3064
|
+
if (viewState.phase === "active") {
|
|
3065
|
+
startEnteringMenuView(content, rootView, view, state, options);
|
|
3066
|
+
return;
|
|
3067
|
+
}
|
|
3068
|
+
startExitingMenuView(content, rootView, view, state, options);
|
|
3069
|
+
}
|
|
3070
|
+
|
|
1950
3071
|
//#endregion
|
|
1951
3072
|
//#region ../core/dist/dev/dom/ui/popover/popover-positioning.js
|
|
3073
|
+
const ZERO_OFFSETS = {
|
|
3074
|
+
sideOffset: 0,
|
|
3075
|
+
alignOffset: 0,
|
|
3076
|
+
boundaryOffset: 0
|
|
3077
|
+
};
|
|
1952
3078
|
const OPPOSITE_SIDE = {
|
|
1953
3079
|
top: "bottom",
|
|
1954
3080
|
bottom: "top",
|
|
1955
3081
|
left: "right",
|
|
1956
3082
|
right: "left"
|
|
1957
3083
|
};
|
|
3084
|
+
function formatPixels(value) {
|
|
3085
|
+
return `${clamp(value, 0, Infinity)}px`;
|
|
3086
|
+
}
|
|
3087
|
+
function getCrossAxisAvailable(start, end, size, boundaryStart, boundaryEnd, align, alignOffset) {
|
|
3088
|
+
if (align === "start") return boundaryEnd - (start + alignOffset);
|
|
3089
|
+
if (align === "end") return end + alignOffset - boundaryStart;
|
|
3090
|
+
const center = start + size / 2 + alignOffset;
|
|
3091
|
+
return Math.min(center - boundaryStart, boundaryEnd - center) * 2;
|
|
3092
|
+
}
|
|
1958
3093
|
/**
|
|
1959
3094
|
* Get positioning styles for the popup element.
|
|
1960
3095
|
*
|
|
@@ -1971,17 +3106,20 @@ const OPPOSITE_SIDE = {
|
|
|
1971
3106
|
* `applyStyles()` from `@videojs/utils/dom`.
|
|
1972
3107
|
*/
|
|
1973
3108
|
function getAnchorPositionStyle(anchorName, opts, triggerRect, popupRect, boundaryRect, offsets, cssVars = PopoverCSSVars) {
|
|
1974
|
-
if (supportsAnchorPositioning()) return
|
|
1975
|
-
|
|
1976
|
-
...
|
|
1977
|
-
sideOffset: 0,
|
|
1978
|
-
alignOffset: 0
|
|
1979
|
-
}),
|
|
1980
|
-
...boundaryRect ? getPositioningCSSVars(triggerRect, boundaryRect, opts.side, cssVars) : {},
|
|
1981
|
-
position: "fixed",
|
|
1982
|
-
inset: "auto",
|
|
1983
|
-
margin: "0"
|
|
3109
|
+
if (supportsAnchorPositioning()) return {
|
|
3110
|
+
...getAnchorPositionCSS(anchorName, opts, cssVars),
|
|
3111
|
+
...triggerRect && boundaryRect ? getPositioningCSSVars(triggerRect, boundaryRect, opts, offsets, cssVars) : {}
|
|
1984
3112
|
};
|
|
3113
|
+
if (triggerRect && popupRect) {
|
|
3114
|
+
const resolved = offsets ?? ZERO_OFFSETS;
|
|
3115
|
+
return {
|
|
3116
|
+
...getManualPositionStyle(triggerRect, popupRect, opts, resolved),
|
|
3117
|
+
...boundaryRect ? getPositioningCSSVars(triggerRect, boundaryRect, opts, resolved, cssVars) : {},
|
|
3118
|
+
position: "fixed",
|
|
3119
|
+
inset: "auto",
|
|
3120
|
+
margin: "0"
|
|
3121
|
+
};
|
|
3122
|
+
}
|
|
1985
3123
|
return {};
|
|
1986
3124
|
}
|
|
1987
3125
|
/** Generate style to set on the trigger for CSS Anchor Positioning. */
|
|
@@ -2029,16 +3167,24 @@ function getAnchorPositionCSS(anchorName, opts, cssVars = PopoverCSSVars) {
|
|
|
2029
3167
|
* Accepts a `cssVars` map so the same logic works for both popover
|
|
2030
3168
|
* (`--media-popover-*`) and tooltip (`--media-tooltip-*`) namespaces.
|
|
2031
3169
|
*/
|
|
2032
|
-
function getPositioningCSSVars(triggerRect, boundaryRect,
|
|
3170
|
+
function getPositioningCSSVars(triggerRect, boundaryRect, opts, offsets = ZERO_OFFSETS, cssVars = PopoverCSSVars) {
|
|
2033
3171
|
const vars = {};
|
|
3172
|
+
const { side, align } = opts;
|
|
3173
|
+
const boundaryOffset = offsets.boundaryOffset ?? 0;
|
|
3174
|
+
const boundaryStartX = boundaryRect.left + boundaryOffset;
|
|
3175
|
+
const boundaryEndX = boundaryRect.right - boundaryOffset;
|
|
3176
|
+
const boundaryStartY = boundaryRect.top + boundaryOffset;
|
|
3177
|
+
const boundaryEndY = boundaryRect.bottom - boundaryOffset;
|
|
2034
3178
|
vars[cssVars.anchorWidth] = `${triggerRect.width}px`;
|
|
2035
3179
|
vars[cssVars.anchorHeight] = `${triggerRect.height}px`;
|
|
2036
3180
|
if (side === "top" || side === "bottom") {
|
|
2037
|
-
|
|
2038
|
-
vars[cssVars.
|
|
3181
|
+
const sideSpace = side === "top" ? triggerRect.top - boundaryStartY : boundaryEndY - triggerRect.bottom;
|
|
3182
|
+
vars[cssVars.availableHeight] = formatPixels(sideSpace - offsets.sideOffset);
|
|
3183
|
+
vars[cssVars.availableWidth] = formatPixels(getCrossAxisAvailable(triggerRect.left, triggerRect.right, triggerRect.width, boundaryStartX, boundaryEndX, align, offsets.alignOffset));
|
|
2039
3184
|
} else {
|
|
2040
|
-
|
|
2041
|
-
vars[cssVars.
|
|
3185
|
+
const sideSpace = side === "left" ? triggerRect.left - boundaryStartX : boundaryEndX - triggerRect.right;
|
|
3186
|
+
vars[cssVars.availableWidth] = formatPixels(sideSpace - offsets.sideOffset);
|
|
3187
|
+
vars[cssVars.availableHeight] = formatPixels(getCrossAxisAvailable(triggerRect.top, triggerRect.bottom, triggerRect.height, boundaryStartY, boundaryEndY, align, offsets.alignOffset));
|
|
2042
3188
|
}
|
|
2043
3189
|
return vars;
|
|
2044
3190
|
}
|
|
@@ -2076,14 +3222,15 @@ function getManualPositionStyle(triggerRect, popupRect, opts, offsets = {
|
|
|
2076
3222
|
};
|
|
2077
3223
|
}
|
|
2078
3224
|
/**
|
|
2079
|
-
* Read
|
|
3225
|
+
* Read positioning offset CSS custom properties from the
|
|
2080
3226
|
* popup element's computed style, returning numeric pixel values.
|
|
2081
3227
|
*/
|
|
2082
3228
|
function resolveOffsets(el, cssVars = PopoverCSSVars) {
|
|
2083
3229
|
const computed = getComputedStyle(el);
|
|
2084
3230
|
return {
|
|
2085
3231
|
sideOffset: resolveCSSLength(el, computed.getPropertyValue(cssVars.sideOffset)),
|
|
2086
|
-
alignOffset: resolveCSSLength(el, computed.getPropertyValue(cssVars.alignOffset))
|
|
3232
|
+
alignOffset: resolveCSSLength(el, computed.getPropertyValue(cssVars.alignOffset)),
|
|
3233
|
+
boundaryOffset: resolveCSSLength(el, computed.getPropertyValue(cssVars.boundaryOffset))
|
|
2087
3234
|
};
|
|
2088
3235
|
}
|
|
2089
3236
|
/**
|
|
@@ -2097,17 +3244,7 @@ function getPopupPositionRect(el) {
|
|
|
2097
3244
|
const rect = el.getBoundingClientRect();
|
|
2098
3245
|
const width = el.offsetWidth || rect.width;
|
|
2099
3246
|
const height = el.offsetHeight || rect.height;
|
|
2100
|
-
|
|
2101
|
-
...rect,
|
|
2102
|
-
width,
|
|
2103
|
-
height,
|
|
2104
|
-
right: rect.left + width,
|
|
2105
|
-
bottom: rect.top + height
|
|
2106
|
-
};
|
|
2107
|
-
return {
|
|
2108
|
-
...adjustedRect,
|
|
2109
|
-
toJSON: () => adjustedRect
|
|
2110
|
-
};
|
|
3247
|
+
return createDOMRect(rect.left, rect.top, width, height);
|
|
2111
3248
|
}
|
|
2112
3249
|
|
|
2113
3250
|
//#endregion
|
|
@@ -2479,7 +3616,8 @@ const REASON_MAP = {
|
|
|
2479
3616
|
hover: "hover",
|
|
2480
3617
|
focus: "focus",
|
|
2481
3618
|
escape: "escape",
|
|
2482
|
-
blur: "blur"
|
|
3619
|
+
blur: "blur",
|
|
3620
|
+
"imperative-action": "imperative-action"
|
|
2483
3621
|
};
|
|
2484
3622
|
function createTooltip(options) {
|
|
2485
3623
|
const popoverOpts = {
|
|
@@ -2547,7 +3685,7 @@ function createTooltip(options) {
|
|
|
2547
3685
|
return popover.triggerElement;
|
|
2548
3686
|
},
|
|
2549
3687
|
open: () => popover.open("hover"),
|
|
2550
|
-
close: () => popover.close(
|
|
3688
|
+
close: (reason = "hover") => popover.close(reason)
|
|
2551
3689
|
};
|
|
2552
3690
|
}
|
|
2553
3691
|
|
|
@@ -2677,8 +3815,17 @@ function applyElementProps(element, props, options) {
|
|
|
2677
3815
|
}
|
|
2678
3816
|
|
|
2679
3817
|
//#endregion
|
|
2680
|
-
//#region ../core/dist/dev/dom/utils/
|
|
2681
|
-
|
|
3818
|
+
//#region ../core/dist/dev/dom/utils/event.js
|
|
3819
|
+
function isEventWithinElement(event, element) {
|
|
3820
|
+
if (!element) return false;
|
|
3821
|
+
if (isFunction(event.composedPath)) return event.composedPath().includes(element);
|
|
3822
|
+
const target = event.target;
|
|
3823
|
+
return target instanceof Node && element.contains(target);
|
|
3824
|
+
}
|
|
3825
|
+
|
|
3826
|
+
//#endregion
|
|
3827
|
+
//#region ../core/dist/dev/dom/utils/log.js
|
|
3828
|
+
const warned = /* @__PURE__ */ new Set();
|
|
2682
3829
|
function logMissingFeature(displayName, featureName) {
|
|
2683
3830
|
const key = `${displayName}:${featureName}`;
|
|
2684
3831
|
if (warned.has(key)) return;
|
|
@@ -2836,23 +3983,6 @@ var PlayButtonElement = class extends MediaButtonElement {
|
|
|
2836
3983
|
}
|
|
2837
3984
|
};
|
|
2838
3985
|
|
|
2839
|
-
//#endregion
|
|
2840
|
-
//#region src/ui/playback-rate-button/playback-rate-button-element.ts
|
|
2841
|
-
var PlaybackRateButtonElement = class extends MediaButtonElement {
|
|
2842
|
-
constructor(..._args) {
|
|
2843
|
-
super(..._args);
|
|
2844
|
-
this.core = new PlaybackRateButtonCore();
|
|
2845
|
-
this.stateAttrMap = PlaybackRateButtonDataAttrs;
|
|
2846
|
-
this.mediaState = new PlayerController(this, playerContext, selectPlaybackRate);
|
|
2847
|
-
}
|
|
2848
|
-
static {
|
|
2849
|
-
this.tagName = "media-playback-rate-button";
|
|
2850
|
-
}
|
|
2851
|
-
activate(state) {
|
|
2852
|
-
this.core.cycle(state);
|
|
2853
|
-
}
|
|
2854
|
-
};
|
|
2855
|
-
|
|
2856
3986
|
//#endregion
|
|
2857
3987
|
//#region src/ui/position-controller.ts
|
|
2858
3988
|
/**
|
|
@@ -2860,7 +3990,8 @@ var PlaybackRateButtonElement = class extends MediaButtonElement {
|
|
|
2860
3990
|
* popup elements (tooltips, popovers). Tracks scroll, resize, and
|
|
2861
3991
|
* ResizeObserver events to keep the popup aligned with its trigger.
|
|
2862
3992
|
*
|
|
2863
|
-
*
|
|
3993
|
+
* Native CSS Anchor Positioning still uses this controller for dynamic
|
|
3994
|
+
* sizing variables such as available width/height.
|
|
2864
3995
|
*/
|
|
2865
3996
|
var PositionController = class {
|
|
2866
3997
|
#host;
|
|
@@ -2868,6 +3999,7 @@ var PositionController = class {
|
|
|
2868
3999
|
#frame = 0;
|
|
2869
4000
|
#resizeObserver = null;
|
|
2870
4001
|
#trigger = null;
|
|
4002
|
+
#boundary = null;
|
|
2871
4003
|
constructor(host) {
|
|
2872
4004
|
this.#host = host;
|
|
2873
4005
|
host.addController(this);
|
|
@@ -2878,15 +4010,16 @@ var PositionController = class {
|
|
|
2878
4010
|
return this.#host.getRootNode().querySelector(`[commandfor="${this.#host.id}"]`);
|
|
2879
4011
|
}
|
|
2880
4012
|
/** Start or update position tracking for the given trigger. */
|
|
2881
|
-
sync(trigger) {
|
|
2882
|
-
if (supportsAnchorPositioning()) return;
|
|
4013
|
+
sync(trigger, boundary = null) {
|
|
2883
4014
|
if (!trigger) return;
|
|
2884
|
-
if (this.#abort && this.#trigger === trigger) return;
|
|
4015
|
+
if (this.#abort && this.#trigger === trigger && this.#boundary === boundary) return;
|
|
2885
4016
|
this.cleanup();
|
|
2886
4017
|
this.#abort = new AbortController();
|
|
2887
4018
|
this.#trigger = trigger;
|
|
4019
|
+
this.#boundary = boundary;
|
|
2888
4020
|
const { signal } = this.#abort;
|
|
2889
|
-
const reposition = () => {
|
|
4021
|
+
const reposition = (event) => {
|
|
4022
|
+
if (event && isEventWithinElement(event, this.#host)) return;
|
|
2890
4023
|
cancelAnimationFrame(this.#frame);
|
|
2891
4024
|
this.#frame = requestAnimationFrame(() => {
|
|
2892
4025
|
if (signal.aborted) return;
|
|
@@ -2905,6 +4038,7 @@ var PositionController = class {
|
|
|
2905
4038
|
});
|
|
2906
4039
|
this.#resizeObserver.observe(trigger);
|
|
2907
4040
|
this.#resizeObserver.observe(this.#host);
|
|
4041
|
+
if (boundary) this.#resizeObserver.observe(boundary);
|
|
2908
4042
|
}
|
|
2909
4043
|
reposition();
|
|
2910
4044
|
}
|
|
@@ -2913,6 +4047,7 @@ var PositionController = class {
|
|
|
2913
4047
|
this.#abort?.abort();
|
|
2914
4048
|
this.#abort = null;
|
|
2915
4049
|
this.#trigger = null;
|
|
4050
|
+
this.#boundary = null;
|
|
2916
4051
|
cancelAnimationFrame(this.#frame);
|
|
2917
4052
|
this.#frame = 0;
|
|
2918
4053
|
this.#resizeObserver?.disconnect();
|
|
@@ -2926,6 +4061,440 @@ var PositionController = class {
|
|
|
2926
4061
|
}
|
|
2927
4062
|
};
|
|
2928
4063
|
|
|
4064
|
+
//#endregion
|
|
4065
|
+
//#region src/ui/menu/context.ts
|
|
4066
|
+
const MENU_CONTEXT_KEY = Symbol("@videojs/menu");
|
|
4067
|
+
const MENU_RADIO_GROUP_CONTEXT_KEY = Symbol("@videojs/menu-radio-group");
|
|
4068
|
+
const menuContext = createContext(MENU_CONTEXT_KEY);
|
|
4069
|
+
const menuRadioGroupContext = createContext(MENU_RADIO_GROUP_CONTEXT_KEY);
|
|
4070
|
+
|
|
4071
|
+
//#endregion
|
|
4072
|
+
//#region src/ui/menu/menu-element.ts
|
|
4073
|
+
var MenuElement = class extends MediaElement {
|
|
4074
|
+
constructor(..._args) {
|
|
4075
|
+
super(..._args);
|
|
4076
|
+
this.open = MenuCore.defaultProps.open;
|
|
4077
|
+
this.defaultOpen = MenuCore.defaultProps.defaultOpen;
|
|
4078
|
+
this.side = MenuCore.defaultProps.side;
|
|
4079
|
+
this.align = MenuCore.defaultProps.align;
|
|
4080
|
+
this.closeOnEscape = MenuCore.defaultProps.closeOnEscape;
|
|
4081
|
+
this.closeOnOutsideClick = MenuCore.defaultProps.closeOnOutsideClick;
|
|
4082
|
+
this.boundary = "container";
|
|
4083
|
+
this.#core = new MenuCore();
|
|
4084
|
+
this.#provider = new ContextProvider(this, { context: menuContext });
|
|
4085
|
+
this.#position = new PositionController(this);
|
|
4086
|
+
this.#containerCtx = new ContextConsumer(this, {
|
|
4087
|
+
context: containerContext,
|
|
4088
|
+
subscribe: true
|
|
4089
|
+
});
|
|
4090
|
+
this.#parentCtx = new ContextConsumer(this, {
|
|
4091
|
+
context: menuContext,
|
|
4092
|
+
subscribe: true
|
|
4093
|
+
});
|
|
4094
|
+
this.#menuViewTransition = createMenuViewTransition({
|
|
4095
|
+
focusFirstItem: () => {
|
|
4096
|
+
this.#menu?.highlightFirstItem({ preventScroll: true });
|
|
4097
|
+
},
|
|
4098
|
+
restoreFocus: (triggerId) => {
|
|
4099
|
+
const triggerElement = triggerId ? document.getElementById(triggerId) : null;
|
|
4100
|
+
const fallbackTrigger = this.parentElement?.querySelector(`[data-has-submenu][commandfor="${this.id}"]`);
|
|
4101
|
+
(triggerElement ?? fallbackTrigger)?.focus({ preventScroll: true });
|
|
4102
|
+
}
|
|
4103
|
+
});
|
|
4104
|
+
this.#menu = null;
|
|
4105
|
+
this.#snapshot = null;
|
|
4106
|
+
this.#navSnapshot = null;
|
|
4107
|
+
this.#menuViewSnapshot = null;
|
|
4108
|
+
this.#navState = {
|
|
4109
|
+
stack: [],
|
|
4110
|
+
direction: "forward"
|
|
4111
|
+
};
|
|
4112
|
+
this.#disconnect = null;
|
|
4113
|
+
this.#triggerAbort = null;
|
|
4114
|
+
this.#currentTrigger = null;
|
|
4115
|
+
this.#handleContentKeyDown = (event) => {
|
|
4116
|
+
const isNavigationKey = isMenuNavigationKey(event);
|
|
4117
|
+
const defaultPreventedBeforeMenu = event.defaultPrevented;
|
|
4118
|
+
this.#menu?.contentProps.onKeyDown(event);
|
|
4119
|
+
const parentCtx = this.#parentCtx.value ?? null;
|
|
4120
|
+
if (!parentCtx) {
|
|
4121
|
+
if (event.key === "Escape") return;
|
|
4122
|
+
if (isNavigationKey) event.stopPropagation();
|
|
4123
|
+
return;
|
|
4124
|
+
}
|
|
4125
|
+
const stack = parentCtx.menu.navigationInput.current.stack;
|
|
4126
|
+
const ownsActiveSubmenu = stack[stack.length - 1]?.menuId === this.id;
|
|
4127
|
+
const isBackNavigationKey = event.key === "ArrowLeft" || event.key === "Escape";
|
|
4128
|
+
if (isBackNavigationKey && ownsActiveSubmenu && !defaultPreventedBeforeMenu) {
|
|
4129
|
+
event.preventDefault();
|
|
4130
|
+
parentCtx.menu.pop();
|
|
4131
|
+
}
|
|
4132
|
+
if (isNavigationKey && (!isBackNavigationKey || ownsActiveSubmenu)) event.stopPropagation();
|
|
4133
|
+
};
|
|
4134
|
+
this.#handleContentFocusOut = (event) => {
|
|
4135
|
+
this.#menu?.contentProps.onFocusOut(event);
|
|
4136
|
+
};
|
|
4137
|
+
}
|
|
4138
|
+
static {
|
|
4139
|
+
this.tagName = "media-menu";
|
|
4140
|
+
}
|
|
4141
|
+
static {
|
|
4142
|
+
this.properties = {
|
|
4143
|
+
open: { type: Boolean },
|
|
4144
|
+
defaultOpen: {
|
|
4145
|
+
type: Boolean,
|
|
4146
|
+
attribute: "default-open"
|
|
4147
|
+
},
|
|
4148
|
+
side: { type: String },
|
|
4149
|
+
align: { type: String },
|
|
4150
|
+
closeOnEscape: {
|
|
4151
|
+
type: Boolean,
|
|
4152
|
+
attribute: "close-on-escape"
|
|
4153
|
+
},
|
|
4154
|
+
closeOnOutsideClick: {
|
|
4155
|
+
type: Boolean,
|
|
4156
|
+
attribute: "close-on-outside-click"
|
|
4157
|
+
},
|
|
4158
|
+
boundary: { type: String }
|
|
4159
|
+
};
|
|
4160
|
+
}
|
|
4161
|
+
#core;
|
|
4162
|
+
#provider;
|
|
4163
|
+
#position;
|
|
4164
|
+
#containerCtx;
|
|
4165
|
+
#parentCtx;
|
|
4166
|
+
#menuViewTransition;
|
|
4167
|
+
#menu;
|
|
4168
|
+
#snapshot;
|
|
4169
|
+
#navSnapshot;
|
|
4170
|
+
#menuViewSnapshot;
|
|
4171
|
+
#navState;
|
|
4172
|
+
#disconnect;
|
|
4173
|
+
#triggerAbort;
|
|
4174
|
+
#currentTrigger;
|
|
4175
|
+
connectedCallback() {
|
|
4176
|
+
super.connectedCallback();
|
|
4177
|
+
if (this.destroyed) return;
|
|
4178
|
+
this.setAttribute(POPUP_HOST_ATTR, "");
|
|
4179
|
+
this.#disconnect = new AbortController();
|
|
4180
|
+
this.#menu = createMenu({
|
|
4181
|
+
transition: createTransition(),
|
|
4182
|
+
onOpenChange: (nextOpen, details) => {
|
|
4183
|
+
this.open = nextOpen;
|
|
4184
|
+
this.dispatchEvent(new CustomEvent("open-change", { detail: {
|
|
4185
|
+
open: nextOpen,
|
|
4186
|
+
...details
|
|
4187
|
+
} }));
|
|
4188
|
+
},
|
|
4189
|
+
closeOnEscape: () => this.closeOnEscape,
|
|
4190
|
+
closeOnOutsideClick: () => this.closeOnOutsideClick,
|
|
4191
|
+
group: () => this.#parentCtx.value ? void 0 : this.#containerCtx.value?.popupGroup
|
|
4192
|
+
});
|
|
4193
|
+
this.#menu.setContentElement(this);
|
|
4194
|
+
applyElementProps(this, {
|
|
4195
|
+
onKeyDown: this.#handleContentKeyDown,
|
|
4196
|
+
onFocusOut: this.#handleContentFocusOut
|
|
4197
|
+
}, { signal: this.#disconnect.signal });
|
|
4198
|
+
if (this.#snapshot) this.#snapshot.track(this.#menu.input);
|
|
4199
|
+
else this.#snapshot = new SnapshotController(this, this.#menu.input);
|
|
4200
|
+
if (this.#navSnapshot) this.#navSnapshot.track(this.#menu.navigationInput);
|
|
4201
|
+
else this.#navSnapshot = new SnapshotController(this, this.#menu.navigationInput);
|
|
4202
|
+
if (this.#menuViewSnapshot) this.#menuViewSnapshot.track(this.#menuViewTransition.input);
|
|
4203
|
+
else this.#menuViewSnapshot = new SnapshotController(this, this.#menuViewTransition.input);
|
|
4204
|
+
}
|
|
4205
|
+
firstUpdated(changed) {
|
|
4206
|
+
super.firstUpdated(changed);
|
|
4207
|
+
if (this.defaultOpen && !this.open) this.#menu?.open();
|
|
4208
|
+
}
|
|
4209
|
+
disconnectedCallback() {
|
|
4210
|
+
super.disconnectedCallback();
|
|
4211
|
+
this.#cleanupTrigger();
|
|
4212
|
+
this.#menu?.destroy();
|
|
4213
|
+
this.#menu = null;
|
|
4214
|
+
this.#disconnect?.abort();
|
|
4215
|
+
this.#disconnect = null;
|
|
4216
|
+
this.#menuViewTransition.destroy();
|
|
4217
|
+
}
|
|
4218
|
+
close(reason = "imperative-action") {
|
|
4219
|
+
this.#menu?.close(reason);
|
|
4220
|
+
}
|
|
4221
|
+
willUpdate(changed) {
|
|
4222
|
+
super.willUpdate(changed);
|
|
4223
|
+
const isSubmenu = (this.#parentCtx.value ?? null) !== null;
|
|
4224
|
+
this.#core.setProps({
|
|
4225
|
+
open: this.open,
|
|
4226
|
+
defaultOpen: this.defaultOpen,
|
|
4227
|
+
side: this.side,
|
|
4228
|
+
align: this.align,
|
|
4229
|
+
closeOnEscape: this.closeOnEscape,
|
|
4230
|
+
closeOnOutsideClick: this.closeOnOutsideClick,
|
|
4231
|
+
isSubmenu
|
|
4232
|
+
});
|
|
4233
|
+
if (this.#menu && changed.has("open") && !isSubmenu) {
|
|
4234
|
+
const { active: interactionOpen } = this.#menu.input.current;
|
|
4235
|
+
if (this.open !== interactionOpen) if (this.open) this.#menu.open();
|
|
4236
|
+
else this.#menu.close();
|
|
4237
|
+
}
|
|
4238
|
+
}
|
|
4239
|
+
update(_changed) {
|
|
4240
|
+
super.update(_changed);
|
|
4241
|
+
if (!this.#menu) return;
|
|
4242
|
+
const parentCtx = this.#parentCtx.value ?? null;
|
|
4243
|
+
const isSubmenu = parentCtx !== null;
|
|
4244
|
+
this.#navState = this.#menu.navigationInput.current;
|
|
4245
|
+
const input = this.#menu.input.current;
|
|
4246
|
+
this.#core.setInput(input);
|
|
4247
|
+
const state = this.#core.getState();
|
|
4248
|
+
if (isSubmenu && parentCtx) this.#updateAsSubmenu(parentCtx);
|
|
4249
|
+
else this.#updateAsRoot(state);
|
|
4250
|
+
const parentMenu = parentCtx?.menu ?? null;
|
|
4251
|
+
this.#provider.setValue({
|
|
4252
|
+
menu: this.#menu,
|
|
4253
|
+
state,
|
|
4254
|
+
stateAttrMap: MenuDataAttrs,
|
|
4255
|
+
navigation: this.#navState,
|
|
4256
|
+
parentMenu
|
|
4257
|
+
});
|
|
4258
|
+
}
|
|
4259
|
+
#updateAsRoot(state) {
|
|
4260
|
+
if (!this.#menu) return;
|
|
4261
|
+
const triggerElement = this.#position.findTrigger();
|
|
4262
|
+
this.#syncTrigger(triggerElement);
|
|
4263
|
+
applyElementProps(this, {
|
|
4264
|
+
...this.#core.getContentAttrs(state),
|
|
4265
|
+
...getMenuViewportAttrs()
|
|
4266
|
+
});
|
|
4267
|
+
applyStateDataAttrs(this, state, MenuDataAttrs);
|
|
4268
|
+
if (state.open) tryShowPopover(this);
|
|
4269
|
+
else tryHidePopover(this);
|
|
4270
|
+
if (this.#currentTrigger) {
|
|
4271
|
+
applyElementProps(this.#currentTrigger, this.#core.getTriggerAttrs(state, this.id));
|
|
4272
|
+
applyStyles(this.#currentTrigger, getAnchorNameStyle(this.id));
|
|
4273
|
+
}
|
|
4274
|
+
if (!state.open) {
|
|
4275
|
+
this.#position.cleanup();
|
|
4276
|
+
return;
|
|
4277
|
+
}
|
|
4278
|
+
syncMenuViewRoot(this, this.#navState.stack.length > 0);
|
|
4279
|
+
const positionOptions = getRootPositionOptions(state.side, state.align);
|
|
4280
|
+
if (!positionOptions) return;
|
|
4281
|
+
const boundaryElement = this.#getBoundaryElement();
|
|
4282
|
+
const triggerRect = this.#currentTrigger?.getBoundingClientRect();
|
|
4283
|
+
const boundaryRect = getPositioningBoundaryRect(boundaryElement);
|
|
4284
|
+
const offsets = resolveOffsets(this);
|
|
4285
|
+
if (supportsAnchorPositioning()) applyStyles(this, getAnchorPositionStyle(this.id, positionOptions, triggerRect, void 0, boundaryRect, offsets));
|
|
4286
|
+
else {
|
|
4287
|
+
const selfRect = getPopupPositionRect(this);
|
|
4288
|
+
applyStyles(this, getAnchorPositionStyle(this.id, positionOptions, triggerRect, selfRect, boundaryRect, offsets));
|
|
4289
|
+
}
|
|
4290
|
+
this.#position.sync(this.#currentTrigger, boundaryElement);
|
|
4291
|
+
}
|
|
4292
|
+
#updateAsSubmenu(parentCtx) {
|
|
4293
|
+
const parentNavigation = parentCtx.navigation;
|
|
4294
|
+
const topEntry = parentNavigation.stack[parentNavigation.stack.length - 1];
|
|
4295
|
+
const isActive = (topEntry?.menuId ?? null) === this.id;
|
|
4296
|
+
this.#menuViewTransition.setElement(this);
|
|
4297
|
+
this.#menuViewTransition.sync({
|
|
4298
|
+
active: isActive,
|
|
4299
|
+
direction: parentNavigation.direction,
|
|
4300
|
+
triggerId: topEntry?.triggerId ?? null
|
|
4301
|
+
});
|
|
4302
|
+
const transitionState = this.#menuViewTransition.input.current;
|
|
4303
|
+
applyElementProps(this, {
|
|
4304
|
+
...getMenuViewTransitionAttrs(transitionState),
|
|
4305
|
+
role: "menu",
|
|
4306
|
+
tabIndex: -1,
|
|
4307
|
+
"data-submenu": ""
|
|
4308
|
+
});
|
|
4309
|
+
syncMenuViewTransition(parentCtx.menu.contentElement, this, transitionState);
|
|
4310
|
+
}
|
|
4311
|
+
#handleContentKeyDown;
|
|
4312
|
+
#handleContentFocusOut;
|
|
4313
|
+
#syncTrigger(triggerElement) {
|
|
4314
|
+
if (triggerElement === this.#currentTrigger) return;
|
|
4315
|
+
this.#position.cleanup();
|
|
4316
|
+
this.#cleanupTrigger();
|
|
4317
|
+
this.#currentTrigger = triggerElement;
|
|
4318
|
+
this.#menu?.setTriggerElement(triggerElement);
|
|
4319
|
+
if (triggerElement && this.#menu) {
|
|
4320
|
+
this.#triggerAbort = new AbortController();
|
|
4321
|
+
applyElementProps(triggerElement, this.#menu.triggerProps, { signal: this.#triggerAbort.signal });
|
|
4322
|
+
}
|
|
4323
|
+
}
|
|
4324
|
+
#cleanupTrigger() {
|
|
4325
|
+
if (this.#currentTrigger) {
|
|
4326
|
+
applyElementProps(this.#currentTrigger, {
|
|
4327
|
+
"aria-expanded": void 0,
|
|
4328
|
+
"aria-haspopup": void 0,
|
|
4329
|
+
"aria-controls": void 0
|
|
4330
|
+
});
|
|
4331
|
+
this.#currentTrigger.style.removeProperty("anchor-name");
|
|
4332
|
+
}
|
|
4333
|
+
this.#triggerAbort?.abort();
|
|
4334
|
+
this.#triggerAbort = null;
|
|
4335
|
+
this.#currentTrigger = null;
|
|
4336
|
+
}
|
|
4337
|
+
#getBoundaryElement() {
|
|
4338
|
+
return resolvePositioningBoundary(this.boundary, {
|
|
4339
|
+
container: this.#containerCtx.value?.container ?? null,
|
|
4340
|
+
root: this.getRootNode()
|
|
4341
|
+
});
|
|
4342
|
+
}
|
|
4343
|
+
};
|
|
4344
|
+
|
|
4345
|
+
//#endregion
|
|
4346
|
+
//#region src/ui/menu/menu-item-indicator-element.ts
|
|
4347
|
+
var MenuItemIndicatorElement = class extends MediaElement {
|
|
4348
|
+
constructor(..._args) {
|
|
4349
|
+
super(..._args);
|
|
4350
|
+
this.checked = false;
|
|
4351
|
+
this.forceMount = false;
|
|
4352
|
+
}
|
|
4353
|
+
static {
|
|
4354
|
+
this.tagName = "media-menu-item-indicator";
|
|
4355
|
+
}
|
|
4356
|
+
static {
|
|
4357
|
+
this.properties = {
|
|
4358
|
+
checked: { type: Boolean },
|
|
4359
|
+
forceMount: {
|
|
4360
|
+
type: Boolean,
|
|
4361
|
+
attribute: "force-mount"
|
|
4362
|
+
}
|
|
4363
|
+
};
|
|
4364
|
+
}
|
|
4365
|
+
update(_changed) {
|
|
4366
|
+
super.update(_changed);
|
|
4367
|
+
const hidden = !this.checked && !this.forceMount;
|
|
4368
|
+
applyElementProps(this, {
|
|
4369
|
+
"aria-hidden": "true",
|
|
4370
|
+
hidden
|
|
4371
|
+
});
|
|
4372
|
+
}
|
|
4373
|
+
};
|
|
4374
|
+
|
|
4375
|
+
//#endregion
|
|
4376
|
+
//#region src/ui/menu/menu-radio-group-element.ts
|
|
4377
|
+
var MenuRadioGroupElement = class extends MediaElement {
|
|
4378
|
+
constructor(..._args) {
|
|
4379
|
+
super(..._args);
|
|
4380
|
+
this.value = "";
|
|
4381
|
+
this.label = void 0;
|
|
4382
|
+
this.#menuCtx = new ContextConsumer(this, {
|
|
4383
|
+
context: menuContext,
|
|
4384
|
+
subscribe: true
|
|
4385
|
+
});
|
|
4386
|
+
this.#provider = new ContextProvider(this, { context: menuRadioGroupContext });
|
|
4387
|
+
}
|
|
4388
|
+
static {
|
|
4389
|
+
this.tagName = "media-menu-radio-group";
|
|
4390
|
+
}
|
|
4391
|
+
static {
|
|
4392
|
+
this.properties = {
|
|
4393
|
+
value: { type: String },
|
|
4394
|
+
label: { type: String }
|
|
4395
|
+
};
|
|
4396
|
+
}
|
|
4397
|
+
#menuCtx;
|
|
4398
|
+
#provider;
|
|
4399
|
+
update(_changed) {
|
|
4400
|
+
super.update(_changed);
|
|
4401
|
+
applyElementProps(this, {
|
|
4402
|
+
role: "group",
|
|
4403
|
+
"aria-label": this.label
|
|
4404
|
+
});
|
|
4405
|
+
const ctx = this.#menuCtx.value;
|
|
4406
|
+
if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);
|
|
4407
|
+
this.#provider.setValue({
|
|
4408
|
+
value: this.value,
|
|
4409
|
+
onValueChange: (next) => {
|
|
4410
|
+
this.value = next;
|
|
4411
|
+
this.dispatchEvent(new CustomEvent("value-change", {
|
|
4412
|
+
detail: { value: next },
|
|
4413
|
+
bubbles: true
|
|
4414
|
+
}));
|
|
4415
|
+
}
|
|
4416
|
+
});
|
|
4417
|
+
}
|
|
4418
|
+
};
|
|
4419
|
+
|
|
4420
|
+
//#endregion
|
|
4421
|
+
//#region src/ui/menu/menu-radio-item-element.ts
|
|
4422
|
+
var MenuRadioItemElement = class extends MediaElement {
|
|
4423
|
+
constructor(..._args) {
|
|
4424
|
+
super(..._args);
|
|
4425
|
+
this.value = "";
|
|
4426
|
+
this.disabled = false;
|
|
4427
|
+
this.#menuCtx = new ContextConsumer(this, {
|
|
4428
|
+
context: menuContext,
|
|
4429
|
+
subscribe: true
|
|
4430
|
+
});
|
|
4431
|
+
this.#groupCtx = new ContextConsumer(this, {
|
|
4432
|
+
context: menuRadioGroupContext,
|
|
4433
|
+
subscribe: true
|
|
4434
|
+
});
|
|
4435
|
+
this.#disconnect = null;
|
|
4436
|
+
this.#registered = false;
|
|
4437
|
+
this.#cleanupRegistration = null;
|
|
4438
|
+
}
|
|
4439
|
+
static {
|
|
4440
|
+
this.tagName = "media-menu-radio-item";
|
|
4441
|
+
}
|
|
4442
|
+
static {
|
|
4443
|
+
this.properties = {
|
|
4444
|
+
value: { type: String },
|
|
4445
|
+
disabled: { type: Boolean }
|
|
4446
|
+
};
|
|
4447
|
+
}
|
|
4448
|
+
#menuCtx;
|
|
4449
|
+
#groupCtx;
|
|
4450
|
+
#disconnect;
|
|
4451
|
+
#registered;
|
|
4452
|
+
#cleanupRegistration;
|
|
4453
|
+
connectedCallback() {
|
|
4454
|
+
super.connectedCallback();
|
|
4455
|
+
this.#disconnect = new AbortController();
|
|
4456
|
+
this.#registered = false;
|
|
4457
|
+
}
|
|
4458
|
+
disconnectedCallback() {
|
|
4459
|
+
super.disconnectedCallback();
|
|
4460
|
+
this.#cleanupRegistration?.();
|
|
4461
|
+
this.#cleanupRegistration = null;
|
|
4462
|
+
this.#disconnect?.abort();
|
|
4463
|
+
this.#disconnect = null;
|
|
4464
|
+
this.#registered = false;
|
|
4465
|
+
}
|
|
4466
|
+
update(_changed) {
|
|
4467
|
+
super.update(_changed);
|
|
4468
|
+
const menuCtx = this.#menuCtx.value;
|
|
4469
|
+
const groupCtx = this.#groupCtx.value;
|
|
4470
|
+
if (!menuCtx || !groupCtx || !this.#disconnect) return;
|
|
4471
|
+
if (!this.#registered) {
|
|
4472
|
+
this.#registered = true;
|
|
4473
|
+
this.#cleanupRegistration = menuCtx.menu.registerItem(this);
|
|
4474
|
+
applyElementProps(this, {
|
|
4475
|
+
onClick: () => {
|
|
4476
|
+
const currentMenuCtx = this.#menuCtx.value;
|
|
4477
|
+
const currentGroupCtx = this.#groupCtx.value;
|
|
4478
|
+
if (!currentMenuCtx || !currentGroupCtx || this.disabled) return;
|
|
4479
|
+
currentGroupCtx.onValueChange(this.value);
|
|
4480
|
+
completeMenuItemSelection(currentMenuCtx.menu, currentMenuCtx.parentMenu);
|
|
4481
|
+
},
|
|
4482
|
+
onPointerenter: () => {
|
|
4483
|
+
const currentMenuCtx = this.#menuCtx.value;
|
|
4484
|
+
if (!this.disabled) currentMenuCtx?.menu.highlight(this, { focus: false });
|
|
4485
|
+
}
|
|
4486
|
+
}, { signal: this.#disconnect.signal });
|
|
4487
|
+
}
|
|
4488
|
+
const checked = groupCtx.value === this.value;
|
|
4489
|
+
applyElementProps(this, {
|
|
4490
|
+
role: "menuitemradio",
|
|
4491
|
+
"aria-checked": String(checked),
|
|
4492
|
+
"aria-disabled": this.disabled ? "true" : void 0
|
|
4493
|
+
});
|
|
4494
|
+
applyStateDataAttrs(this, menuCtx.state, menuCtx.stateAttrMap);
|
|
4495
|
+
}
|
|
4496
|
+
};
|
|
4497
|
+
|
|
2929
4498
|
//#endregion
|
|
2930
4499
|
//#region src/ui/popover/popover-element.ts
|
|
2931
4500
|
var PopoverElement = class extends MediaElement {
|
|
@@ -2941,7 +4510,12 @@ var PopoverElement = class extends MediaElement {
|
|
|
2941
4510
|
this.openOnHover = PopoverCore.defaultProps.openOnHover;
|
|
2942
4511
|
this.delay = PopoverCore.defaultProps.delay;
|
|
2943
4512
|
this.closeDelay = PopoverCore.defaultProps.closeDelay;
|
|
4513
|
+
this.boundary = "container";
|
|
2944
4514
|
this.#core = new PopoverCore();
|
|
4515
|
+
this.#containerCtx = new ContextConsumer(this, {
|
|
4516
|
+
context: containerContext,
|
|
4517
|
+
subscribe: true
|
|
4518
|
+
});
|
|
2945
4519
|
this.#position = new PositionController(this);
|
|
2946
4520
|
this.#popover = null;
|
|
2947
4521
|
this.#snapshot = null;
|
|
@@ -2978,10 +4552,12 @@ var PopoverElement = class extends MediaElement {
|
|
|
2978
4552
|
closeDelay: {
|
|
2979
4553
|
type: Number,
|
|
2980
4554
|
attribute: "close-delay"
|
|
2981
|
-
}
|
|
4555
|
+
},
|
|
4556
|
+
boundary: { type: String }
|
|
2982
4557
|
};
|
|
2983
4558
|
}
|
|
2984
4559
|
#core;
|
|
4560
|
+
#containerCtx;
|
|
2985
4561
|
#position;
|
|
2986
4562
|
#popover;
|
|
2987
4563
|
#snapshot;
|
|
@@ -2991,6 +4567,7 @@ var PopoverElement = class extends MediaElement {
|
|
|
2991
4567
|
connectedCallback() {
|
|
2992
4568
|
super.connectedCallback();
|
|
2993
4569
|
if (this.destroyed) return;
|
|
4570
|
+
this.setAttribute(POPUP_HOST_ATTR, "");
|
|
2994
4571
|
this.#disconnect = new AbortController();
|
|
2995
4572
|
this.#popover = createPopover({
|
|
2996
4573
|
transition: createTransition(),
|
|
@@ -3005,7 +4582,8 @@ var PopoverElement = class extends MediaElement {
|
|
|
3005
4582
|
closeOnOutsideClick: () => this.closeOnOutsideClick,
|
|
3006
4583
|
openOnHover: () => this.openOnHover,
|
|
3007
4584
|
delay: () => this.delay,
|
|
3008
|
-
closeDelay: () => this.closeDelay
|
|
4585
|
+
closeDelay: () => this.closeDelay,
|
|
4586
|
+
group: () => this.#containerCtx.value?.popupGroup
|
|
3009
4587
|
});
|
|
3010
4588
|
this.#popover.setPopupElement(this);
|
|
3011
4589
|
applyElementProps(this, this.#popover.popupProps, { signal: this.#disconnect.signal });
|
|
@@ -3026,6 +4604,9 @@ var PopoverElement = class extends MediaElement {
|
|
|
3026
4604
|
this.#popover?.destroy();
|
|
3027
4605
|
super.destroyCallback();
|
|
3028
4606
|
}
|
|
4607
|
+
close(reason = "imperative-action") {
|
|
4608
|
+
this.#popover?.close(reason);
|
|
4609
|
+
}
|
|
3029
4610
|
willUpdate(changed) {
|
|
3030
4611
|
super.willUpdate(changed);
|
|
3031
4612
|
this.#core.setProps(this);
|
|
@@ -3059,15 +4640,16 @@ var PopoverElement = class extends MediaElement {
|
|
|
3059
4640
|
side: state.side,
|
|
3060
4641
|
align: state.align
|
|
3061
4642
|
};
|
|
3062
|
-
|
|
4643
|
+
const boundaryElement = this.#getBoundaryElement();
|
|
4644
|
+
const triggerRect = this.#currentTrigger?.getBoundingClientRect();
|
|
4645
|
+
const boundaryRect = getPositioningBoundaryRect(boundaryElement);
|
|
4646
|
+
const offsets = resolveOffsets(this);
|
|
4647
|
+
if (supportsAnchorPositioning()) applyStyles(this, getAnchorPositionStyle(this.id, posOpts, triggerRect, void 0, boundaryRect, offsets));
|
|
3063
4648
|
else {
|
|
3064
|
-
const triggerRect = this.#currentTrigger?.getBoundingClientRect();
|
|
3065
4649
|
const selfRect = getPopupPositionRect(this);
|
|
3066
|
-
const boundaryRect = document.documentElement.getBoundingClientRect();
|
|
3067
|
-
const offsets = resolveOffsets(this);
|
|
3068
4650
|
applyStyles(this, getAnchorPositionStyle(this.id, posOpts, triggerRect, selfRect, boundaryRect, offsets));
|
|
3069
4651
|
}
|
|
3070
|
-
this.#position.sync(this.#currentTrigger);
|
|
4652
|
+
this.#position.sync(this.#currentTrigger, boundaryElement);
|
|
3071
4653
|
}
|
|
3072
4654
|
#syncTrigger(triggerEl) {
|
|
3073
4655
|
if (triggerEl === this.#currentTrigger) return;
|
|
@@ -3093,29 +4675,11 @@ var PopoverElement = class extends MediaElement {
|
|
|
3093
4675
|
this.#triggerAbort = null;
|
|
3094
4676
|
this.#currentTrigger = null;
|
|
3095
4677
|
}
|
|
3096
|
-
|
|
3097
|
-
|
|
3098
|
-
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
constructor(..._args) {
|
|
3102
|
-
super(..._args);
|
|
3103
|
-
this.seconds = SeekButtonCore.defaultProps.seconds;
|
|
3104
|
-
this.core = new SeekButtonCore();
|
|
3105
|
-
this.stateAttrMap = SeekButtonDataAttrs;
|
|
3106
|
-
this.mediaState = new PlayerController(this, playerContext, selectTime);
|
|
3107
|
-
}
|
|
3108
|
-
static {
|
|
3109
|
-
this.tagName = "media-seek-button";
|
|
3110
|
-
}
|
|
3111
|
-
static {
|
|
3112
|
-
this.properties = {
|
|
3113
|
-
...MediaButtonElement.properties,
|
|
3114
|
-
seconds: { type: Number }
|
|
3115
|
-
};
|
|
3116
|
-
}
|
|
3117
|
-
activate(state) {
|
|
3118
|
-
this.core.seek(state);
|
|
4678
|
+
#getBoundaryElement() {
|
|
4679
|
+
return resolvePositioningBoundary(this.boundary, {
|
|
4680
|
+
container: this.#containerCtx.value?.container ?? null,
|
|
4681
|
+
root: this.getRootNode()
|
|
4682
|
+
});
|
|
3119
4683
|
}
|
|
3120
4684
|
};
|
|
3121
4685
|
|
|
@@ -3140,8 +4704,13 @@ var TooltipElement = class extends MediaElement {
|
|
|
3140
4704
|
this.closeDelay = TooltipCore.defaultProps.closeDelay;
|
|
3141
4705
|
this.disableHoverablePopup = TooltipCore.defaultProps.disableHoverablePopup;
|
|
3142
4706
|
this.disabled = TooltipCore.defaultProps.disabled;
|
|
4707
|
+
this.boundary = "container";
|
|
3143
4708
|
this.#core = new TooltipCore();
|
|
3144
4709
|
this.#groupConsumer = new ContextConsumer(this, { context: tooltipGroupContext });
|
|
4710
|
+
this.#containerCtx = new ContextConsumer(this, {
|
|
4711
|
+
context: containerContext,
|
|
4712
|
+
subscribe: true
|
|
4713
|
+
});
|
|
3145
4714
|
this.#position = new PositionController(this);
|
|
3146
4715
|
this.#tooltip = null;
|
|
3147
4716
|
this.#snapshot = null;
|
|
@@ -3170,11 +4739,13 @@ var TooltipElement = class extends MediaElement {
|
|
|
3170
4739
|
type: Boolean,
|
|
3171
4740
|
attribute: "disable-hoverable-popup"
|
|
3172
4741
|
},
|
|
3173
|
-
disabled: { type: Boolean }
|
|
4742
|
+
disabled: { type: Boolean },
|
|
4743
|
+
boundary: { type: String }
|
|
3174
4744
|
};
|
|
3175
4745
|
}
|
|
3176
4746
|
#core;
|
|
3177
4747
|
#groupConsumer;
|
|
4748
|
+
#containerCtx;
|
|
3178
4749
|
#position;
|
|
3179
4750
|
#tooltip;
|
|
3180
4751
|
#snapshot;
|
|
@@ -3184,6 +4755,7 @@ var TooltipElement = class extends MediaElement {
|
|
|
3184
4755
|
connectedCallback() {
|
|
3185
4756
|
super.connectedCallback();
|
|
3186
4757
|
if (this.destroyed) return;
|
|
4758
|
+
this.setAttribute(POPUP_HOST_ATTR, "");
|
|
3187
4759
|
this.#disconnect = new AbortController();
|
|
3188
4760
|
this.#tooltip = createTooltip({
|
|
3189
4761
|
transition: createTransition(),
|
|
@@ -3217,6 +4789,9 @@ var TooltipElement = class extends MediaElement {
|
|
|
3217
4789
|
this.#disconnect?.abort();
|
|
3218
4790
|
this.#disconnect = null;
|
|
3219
4791
|
}
|
|
4792
|
+
close(reason = "imperative-action") {
|
|
4793
|
+
this.#tooltip?.close(reason);
|
|
4794
|
+
}
|
|
3220
4795
|
willUpdate(changed) {
|
|
3221
4796
|
super.willUpdate(changed);
|
|
3222
4797
|
this.#core.setProps(this);
|
|
@@ -3247,15 +4822,16 @@ var TooltipElement = class extends MediaElement {
|
|
|
3247
4822
|
side: state.side,
|
|
3248
4823
|
align: state.align
|
|
3249
4824
|
};
|
|
3250
|
-
|
|
4825
|
+
const boundaryElement = this.#getBoundaryElement();
|
|
4826
|
+
const triggerRect = this.#currentTrigger?.getBoundingClientRect();
|
|
4827
|
+
const boundaryRect = getPositioningBoundaryRect(boundaryElement);
|
|
4828
|
+
const offsets = resolveOffsets(this, TooltipCSSVars);
|
|
4829
|
+
if (supportsAnchorPositioning()) applyStyles(this, getAnchorPositionStyle(this.id, posOpts, triggerRect, void 0, boundaryRect, offsets, TooltipCSSVars));
|
|
3251
4830
|
else {
|
|
3252
|
-
const triggerRect = this.#currentTrigger?.getBoundingClientRect();
|
|
3253
4831
|
const selfRect = getPopupPositionRect(this);
|
|
3254
|
-
const boundaryRect = document.documentElement.getBoundingClientRect();
|
|
3255
|
-
const offsets = resolveOffsets(this, TooltipCSSVars);
|
|
3256
4832
|
applyStyles(this, getAnchorPositionStyle(this.id, posOpts, triggerRect, selfRect, boundaryRect, offsets, TooltipCSSVars));
|
|
3257
4833
|
}
|
|
3258
|
-
this.#position.sync(this.#currentTrigger);
|
|
4834
|
+
this.#position.sync(this.#currentTrigger, boundaryElement);
|
|
3259
4835
|
}
|
|
3260
4836
|
#syncTrigger(triggerEl) {
|
|
3261
4837
|
if (triggerEl === this.#currentTrigger) return;
|
|
@@ -3281,6 +4857,12 @@ var TooltipElement = class extends MediaElement {
|
|
|
3281
4857
|
this.#triggerAbort = null;
|
|
3282
4858
|
this.#currentTrigger = null;
|
|
3283
4859
|
}
|
|
4860
|
+
#getBoundaryElement() {
|
|
4861
|
+
return resolvePositioningBoundary(this.boundary, {
|
|
4862
|
+
container: this.#containerCtx.value?.container ?? null,
|
|
4863
|
+
root: this.getRootNode()
|
|
4864
|
+
});
|
|
4865
|
+
}
|
|
3284
4866
|
};
|
|
3285
4867
|
|
|
3286
4868
|
//#endregion
|
|
@@ -3383,169 +4965,644 @@ var AlertDialogCloseElement = class extends MediaElement {
|
|
|
3383
4965
|
var ContextPartElement = class extends MediaElement {
|
|
3384
4966
|
update(_changed) {
|
|
3385
4967
|
super.update(_changed);
|
|
3386
|
-
const ctx = this.consumer.value;
|
|
3387
|
-
if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);
|
|
4968
|
+
const ctx = this.consumer.value;
|
|
4969
|
+
if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);
|
|
4970
|
+
}
|
|
4971
|
+
};
|
|
4972
|
+
|
|
4973
|
+
//#endregion
|
|
4974
|
+
//#region src/ui/alert-dialog/alert-dialog-description-element.ts
|
|
4975
|
+
var AlertDialogDescriptionElement = class extends ContextPartElement {
|
|
4976
|
+
constructor(..._args) {
|
|
4977
|
+
super(..._args);
|
|
4978
|
+
this.consumer = new ContextConsumer(this, {
|
|
4979
|
+
context: alertDialogContext,
|
|
4980
|
+
subscribe: true
|
|
4981
|
+
});
|
|
4982
|
+
}
|
|
4983
|
+
static {
|
|
4984
|
+
this.tagName = "media-alert-dialog-description";
|
|
4985
|
+
}
|
|
4986
|
+
update(changed) {
|
|
4987
|
+
super.update(changed);
|
|
4988
|
+
const descriptionId = this.consumer.value?.state.descriptionId;
|
|
4989
|
+
if (descriptionId) this.id = descriptionId;
|
|
4990
|
+
}
|
|
4991
|
+
};
|
|
4992
|
+
|
|
4993
|
+
//#endregion
|
|
4994
|
+
//#region src/ui/alert-dialog/alert-dialog-title-element.ts
|
|
4995
|
+
var AlertDialogTitleElement = class extends ContextPartElement {
|
|
4996
|
+
constructor(..._args) {
|
|
4997
|
+
super(..._args);
|
|
4998
|
+
this.consumer = new ContextConsumer(this, {
|
|
4999
|
+
context: alertDialogContext,
|
|
5000
|
+
subscribe: true
|
|
5001
|
+
});
|
|
5002
|
+
}
|
|
5003
|
+
static {
|
|
5004
|
+
this.tagName = "media-alert-dialog-title";
|
|
5005
|
+
}
|
|
5006
|
+
update(changed) {
|
|
5007
|
+
super.update(changed);
|
|
5008
|
+
const titleId = this.consumer.value?.state.titleId;
|
|
5009
|
+
if (titleId) this.id = titleId;
|
|
5010
|
+
}
|
|
5011
|
+
};
|
|
5012
|
+
|
|
5013
|
+
//#endregion
|
|
5014
|
+
//#region src/ui/controls/context.ts
|
|
5015
|
+
const CONTROLS_CONTEXT_KEY = Symbol("@videojs/controls");
|
|
5016
|
+
const controlsContext = createContext(CONTROLS_CONTEXT_KEY);
|
|
5017
|
+
|
|
5018
|
+
//#endregion
|
|
5019
|
+
//#region src/ui/controls/controls-element.ts
|
|
5020
|
+
var ControlsElement = class extends MediaElement {
|
|
5021
|
+
static {
|
|
5022
|
+
this.tagName = "media-controls";
|
|
5023
|
+
}
|
|
5024
|
+
#core = new ControlsCore();
|
|
5025
|
+
#mediaState = new PlayerController(this, playerContext, selectControls);
|
|
5026
|
+
#provider = new ContextProvider(this, { context: controlsContext });
|
|
5027
|
+
#visible = true;
|
|
5028
|
+
connectedCallback() {
|
|
5029
|
+
super.connectedCallback();
|
|
5030
|
+
if (!this.#mediaState.value && this.#mediaState.displayName) logMissingFeature(this.localName, this.#mediaState.displayName);
|
|
5031
|
+
}
|
|
5032
|
+
update(_changed) {
|
|
5033
|
+
super.update(_changed);
|
|
5034
|
+
const media = this.#mediaState.value;
|
|
5035
|
+
if (!media) return;
|
|
5036
|
+
this.#core.setMedia(media);
|
|
5037
|
+
const state = this.#core.getState();
|
|
5038
|
+
applyStateDataAttrs(this, state, ControlsDataAttrs);
|
|
5039
|
+
this.#provider.setValue({
|
|
5040
|
+
state,
|
|
5041
|
+
stateAttrMap: ControlsDataAttrs
|
|
5042
|
+
});
|
|
5043
|
+
const wasVisible = this.#visible;
|
|
5044
|
+
this.#visible = state.visible;
|
|
5045
|
+
if (wasVisible && !state.visible) this.#closeOwnedOverlays();
|
|
5046
|
+
}
|
|
5047
|
+
#closeOwnedOverlays() {
|
|
5048
|
+
for (const element of this.querySelectorAll(POPUP_HOST_SELECTOR)) {
|
|
5049
|
+
const host = element;
|
|
5050
|
+
if (!isFunction(host.close)) continue;
|
|
5051
|
+
host.close("imperative-action");
|
|
5052
|
+
}
|
|
5053
|
+
}
|
|
5054
|
+
};
|
|
5055
|
+
|
|
5056
|
+
//#endregion
|
|
5057
|
+
//#region src/ui/controls/controls-group-element.ts
|
|
5058
|
+
var ControlsGroupElement = class extends ContextPartElement {
|
|
5059
|
+
constructor(..._args) {
|
|
5060
|
+
super(..._args);
|
|
5061
|
+
this.consumer = new ContextConsumer(this, {
|
|
5062
|
+
context: controlsContext,
|
|
5063
|
+
subscribe: true
|
|
5064
|
+
});
|
|
5065
|
+
}
|
|
5066
|
+
static {
|
|
5067
|
+
this.tagName = "media-controls-group";
|
|
5068
|
+
}
|
|
5069
|
+
connectedCallback() {
|
|
5070
|
+
super.connectedCallback();
|
|
5071
|
+
if (this.hasAttribute("aria-label") || this.hasAttribute("aria-labelledby")) this.setAttribute("role", "group");
|
|
5072
|
+
}
|
|
5073
|
+
};
|
|
5074
|
+
|
|
5075
|
+
//#endregion
|
|
5076
|
+
//#region src/ui/error-dialog/error-dialog-element.ts
|
|
5077
|
+
const FALLBACK_MESSAGE = "An error occurred. Please try again.";
|
|
5078
|
+
let idCounter = 0;
|
|
5079
|
+
var ErrorDialogElement = class extends MediaElement {
|
|
5080
|
+
static {
|
|
5081
|
+
this.tagName = "media-error-dialog";
|
|
5082
|
+
}
|
|
5083
|
+
#core = new ErrorDialogCore();
|
|
5084
|
+
#provider = new ContextProvider(this, { context: alertDialogContext });
|
|
5085
|
+
#titleId = `vjs-error-dialog-title-${idCounter++}`;
|
|
5086
|
+
#descriptionId = `vjs-error-dialog-desc-${idCounter++}`;
|
|
5087
|
+
#errorState = new PlayerController(this, playerContext, selectError);
|
|
5088
|
+
#dialog = null;
|
|
5089
|
+
#snapshot = null;
|
|
5090
|
+
#lastErrorMessage = null;
|
|
5091
|
+
constructor() {
|
|
5092
|
+
super();
|
|
5093
|
+
this.#core.setTitleId(this.#titleId);
|
|
5094
|
+
this.#core.setDescriptionId(this.#descriptionId);
|
|
5095
|
+
}
|
|
5096
|
+
connectedCallback() {
|
|
5097
|
+
super.connectedCallback();
|
|
5098
|
+
if (this.destroyed) return;
|
|
5099
|
+
this.#dialog = createAlertDialog({
|
|
5100
|
+
transition: createTransition(),
|
|
5101
|
+
onOpenChange: (nextOpen) => {
|
|
5102
|
+
if (!nextOpen) this.#errorState.value?.dismissError();
|
|
5103
|
+
}
|
|
5104
|
+
});
|
|
5105
|
+
this.#dialog.setElement(this);
|
|
5106
|
+
if (this.#snapshot) this.#snapshot.track(this.#dialog.input);
|
|
5107
|
+
else this.#snapshot = new SnapshotController(this, this.#dialog.input);
|
|
5108
|
+
}
|
|
5109
|
+
disconnectedCallback() {
|
|
5110
|
+
super.disconnectedCallback();
|
|
5111
|
+
this.#dialog?.destroy();
|
|
5112
|
+
this.#dialog = null;
|
|
5113
|
+
}
|
|
5114
|
+
willUpdate(_changed) {
|
|
5115
|
+
super.willUpdate(_changed);
|
|
5116
|
+
if (!this.#dialog) return;
|
|
5117
|
+
const errorState = this.#errorState.value;
|
|
5118
|
+
const hasError = Boolean(errorState?.error);
|
|
5119
|
+
const { active: isOpen } = this.#dialog.input.current;
|
|
5120
|
+
if (errorState?.error) {
|
|
5121
|
+
const message = errorState.error.message?.trim();
|
|
5122
|
+
this.#lastErrorMessage = message || null;
|
|
5123
|
+
}
|
|
5124
|
+
const desc = this.querySelector("media-alert-dialog-description");
|
|
5125
|
+
if (desc) desc.textContent = this.#lastErrorMessage ?? FALLBACK_MESSAGE;
|
|
5126
|
+
if (hasError && !isOpen) this.#dialog.open();
|
|
5127
|
+
else if (!hasError && isOpen) this.#dialog.close();
|
|
5128
|
+
}
|
|
5129
|
+
update(_changed) {
|
|
5130
|
+
super.update(_changed);
|
|
5131
|
+
if (!this.#dialog) return;
|
|
5132
|
+
const input = this.#dialog.input.current;
|
|
5133
|
+
this.#core.setInput(input);
|
|
5134
|
+
const state = this.#core.getState();
|
|
5135
|
+
applyElementProps(this, this.#core.getAttrs(state));
|
|
5136
|
+
applyStateDataAttrs(this, state, AlertDialogDataAttrs);
|
|
5137
|
+
this.#provider.setValue({
|
|
5138
|
+
state,
|
|
5139
|
+
stateAttrMap: AlertDialogDataAttrs,
|
|
5140
|
+
close: () => this.#dialog?.close()
|
|
5141
|
+
});
|
|
5142
|
+
}
|
|
5143
|
+
};
|
|
5144
|
+
|
|
5145
|
+
//#endregion
|
|
5146
|
+
//#region src/ui/menu/menu-back-element.ts
|
|
5147
|
+
var MenuBackElement = class extends MediaElement {
|
|
5148
|
+
constructor(..._args) {
|
|
5149
|
+
super(..._args);
|
|
5150
|
+
this.label = "Back";
|
|
5151
|
+
this.#ctx = new ContextConsumer(this, {
|
|
5152
|
+
context: menuContext,
|
|
5153
|
+
subscribe: true
|
|
5154
|
+
});
|
|
5155
|
+
this.#disconnect = null;
|
|
5156
|
+
this.#bound = false;
|
|
5157
|
+
}
|
|
5158
|
+
static {
|
|
5159
|
+
this.tagName = "media-menu-back";
|
|
5160
|
+
}
|
|
5161
|
+
static {
|
|
5162
|
+
this.properties = { label: { type: String } };
|
|
5163
|
+
}
|
|
5164
|
+
#ctx;
|
|
5165
|
+
#disconnect;
|
|
5166
|
+
#bound;
|
|
5167
|
+
connectedCallback() {
|
|
5168
|
+
super.connectedCallback();
|
|
5169
|
+
this.#disconnect = new AbortController();
|
|
5170
|
+
this.#bound = false;
|
|
5171
|
+
}
|
|
5172
|
+
disconnectedCallback() {
|
|
5173
|
+
super.disconnectedCallback();
|
|
5174
|
+
this.#disconnect?.abort();
|
|
5175
|
+
this.#disconnect = null;
|
|
5176
|
+
this.#bound = false;
|
|
5177
|
+
}
|
|
5178
|
+
update(_changed) {
|
|
5179
|
+
super.update(_changed);
|
|
5180
|
+
const ctx = this.#ctx.value;
|
|
5181
|
+
if (!ctx || !this.#disconnect) return;
|
|
5182
|
+
if (!this.#bound) {
|
|
5183
|
+
this.#bound = true;
|
|
5184
|
+
applyElementProps(this, { onClick: () => {
|
|
5185
|
+
ctx.parentMenu?.pop();
|
|
5186
|
+
} }, { signal: this.#disconnect.signal });
|
|
5187
|
+
}
|
|
5188
|
+
applyElementProps(this, {
|
|
5189
|
+
role: "button",
|
|
5190
|
+
"aria-label": this.label
|
|
5191
|
+
});
|
|
5192
|
+
if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);
|
|
5193
|
+
}
|
|
5194
|
+
};
|
|
5195
|
+
|
|
5196
|
+
//#endregion
|
|
5197
|
+
//#region src/ui/menu/menu-checkbox-item-element.ts
|
|
5198
|
+
var MenuCheckboxItemElement = class extends MediaElement {
|
|
5199
|
+
constructor(..._args) {
|
|
5200
|
+
super(..._args);
|
|
5201
|
+
this.checked = false;
|
|
5202
|
+
this.disabled = false;
|
|
5203
|
+
this.#ctx = new ContextConsumer(this, {
|
|
5204
|
+
context: menuContext,
|
|
5205
|
+
subscribe: true
|
|
5206
|
+
});
|
|
5207
|
+
this.#disconnect = null;
|
|
5208
|
+
this.#registered = false;
|
|
5209
|
+
this.#cleanupRegistration = null;
|
|
5210
|
+
}
|
|
5211
|
+
static {
|
|
5212
|
+
this.tagName = "media-menu-checkbox-item";
|
|
5213
|
+
}
|
|
5214
|
+
static {
|
|
5215
|
+
this.properties = {
|
|
5216
|
+
checked: { type: Boolean },
|
|
5217
|
+
disabled: { type: Boolean }
|
|
5218
|
+
};
|
|
5219
|
+
}
|
|
5220
|
+
#ctx;
|
|
5221
|
+
#disconnect;
|
|
5222
|
+
#registered;
|
|
5223
|
+
#cleanupRegistration;
|
|
5224
|
+
connectedCallback() {
|
|
5225
|
+
super.connectedCallback();
|
|
5226
|
+
this.#disconnect = new AbortController();
|
|
5227
|
+
this.#registered = false;
|
|
5228
|
+
}
|
|
5229
|
+
disconnectedCallback() {
|
|
5230
|
+
super.disconnectedCallback();
|
|
5231
|
+
this.#cleanupRegistration?.();
|
|
5232
|
+
this.#cleanupRegistration = null;
|
|
5233
|
+
this.#disconnect?.abort();
|
|
5234
|
+
this.#disconnect = null;
|
|
5235
|
+
this.#registered = false;
|
|
5236
|
+
}
|
|
5237
|
+
update(_changed) {
|
|
5238
|
+
super.update(_changed);
|
|
5239
|
+
const ctx = this.#ctx.value;
|
|
5240
|
+
if (!ctx || !this.#disconnect) return;
|
|
5241
|
+
if (!this.#registered) {
|
|
5242
|
+
this.#registered = true;
|
|
5243
|
+
this.#cleanupRegistration = ctx.menu.registerItem(this);
|
|
5244
|
+
applyElementProps(this, {
|
|
5245
|
+
onClick: () => {
|
|
5246
|
+
if (!this.#ctx.value || this.disabled) return;
|
|
5247
|
+
this.checked = !this.checked;
|
|
5248
|
+
this.dispatchEvent(new CustomEvent("checked-change", {
|
|
5249
|
+
detail: { checked: this.checked },
|
|
5250
|
+
bubbles: true
|
|
5251
|
+
}));
|
|
5252
|
+
},
|
|
5253
|
+
onPointerenter: () => {
|
|
5254
|
+
const currentCtx = this.#ctx.value;
|
|
5255
|
+
if (!this.disabled) currentCtx?.menu.highlight(this, { focus: false });
|
|
5256
|
+
}
|
|
5257
|
+
}, { signal: this.#disconnect.signal });
|
|
5258
|
+
}
|
|
5259
|
+
applyElementProps(this, {
|
|
5260
|
+
role: "menuitemcheckbox",
|
|
5261
|
+
"aria-checked": String(this.checked),
|
|
5262
|
+
"aria-disabled": this.disabled ? "true" : void 0
|
|
5263
|
+
});
|
|
5264
|
+
applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);
|
|
5265
|
+
}
|
|
5266
|
+
};
|
|
5267
|
+
|
|
5268
|
+
//#endregion
|
|
5269
|
+
//#region src/ui/menu/menu-group-element.ts
|
|
5270
|
+
var MenuGroupElement = class extends MediaElement {
|
|
5271
|
+
constructor(..._args) {
|
|
5272
|
+
super(..._args);
|
|
5273
|
+
this.label = void 0;
|
|
5274
|
+
this.#ctx = new ContextConsumer(this, {
|
|
5275
|
+
context: menuContext,
|
|
5276
|
+
subscribe: true
|
|
5277
|
+
});
|
|
5278
|
+
}
|
|
5279
|
+
static {
|
|
5280
|
+
this.tagName = "media-menu-group";
|
|
5281
|
+
}
|
|
5282
|
+
static {
|
|
5283
|
+
this.properties = { label: { type: String } };
|
|
5284
|
+
}
|
|
5285
|
+
#ctx;
|
|
5286
|
+
update(_changed) {
|
|
5287
|
+
super.update(_changed);
|
|
5288
|
+
applyElementProps(this, {
|
|
5289
|
+
role: "group",
|
|
5290
|
+
"aria-label": this.label
|
|
5291
|
+
});
|
|
5292
|
+
const ctx = this.#ctx.value;
|
|
5293
|
+
if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);
|
|
5294
|
+
}
|
|
5295
|
+
};
|
|
5296
|
+
|
|
5297
|
+
//#endregion
|
|
5298
|
+
//#region src/ui/menu/menu-item-element.ts
|
|
5299
|
+
var MenuItemElement = class extends MediaElement {
|
|
5300
|
+
constructor(..._args) {
|
|
5301
|
+
super(..._args);
|
|
5302
|
+
this.disabled = false;
|
|
5303
|
+
this.commandfor = void 0;
|
|
5304
|
+
this.#ctx = new ContextConsumer(this, {
|
|
5305
|
+
context: menuContext,
|
|
5306
|
+
subscribe: true
|
|
5307
|
+
});
|
|
5308
|
+
this.#disconnect = null;
|
|
5309
|
+
this.#registered = false;
|
|
5310
|
+
this.#cleanupRegistration = null;
|
|
5311
|
+
}
|
|
5312
|
+
static {
|
|
5313
|
+
this.tagName = "media-menu-item";
|
|
5314
|
+
}
|
|
5315
|
+
static {
|
|
5316
|
+
this.properties = {
|
|
5317
|
+
disabled: { type: Boolean },
|
|
5318
|
+
commandfor: { type: String }
|
|
5319
|
+
};
|
|
5320
|
+
}
|
|
5321
|
+
#ctx;
|
|
5322
|
+
#disconnect;
|
|
5323
|
+
#registered;
|
|
5324
|
+
#cleanupRegistration;
|
|
5325
|
+
connectedCallback() {
|
|
5326
|
+
super.connectedCallback();
|
|
5327
|
+
this.#disconnect = new AbortController();
|
|
5328
|
+
this.#registered = false;
|
|
5329
|
+
}
|
|
5330
|
+
disconnectedCallback() {
|
|
5331
|
+
super.disconnectedCallback();
|
|
5332
|
+
this.#cleanupRegistration?.();
|
|
5333
|
+
this.#cleanupRegistration = null;
|
|
5334
|
+
this.#disconnect?.abort();
|
|
5335
|
+
this.#disconnect = null;
|
|
5336
|
+
this.#registered = false;
|
|
5337
|
+
}
|
|
5338
|
+
update(_changed) {
|
|
5339
|
+
super.update(_changed);
|
|
5340
|
+
const ctx = this.#ctx.value;
|
|
5341
|
+
if (!ctx || !this.#disconnect) return;
|
|
5342
|
+
if (!this.#registered) {
|
|
5343
|
+
this.#registered = true;
|
|
5344
|
+
this.#cleanupRegistration = ctx.menu.registerItem(this);
|
|
5345
|
+
applyElementProps(this, {
|
|
5346
|
+
onClick: (event) => {
|
|
5347
|
+
const currentCtx = this.#ctx.value;
|
|
5348
|
+
if (!currentCtx || this.disabled) return;
|
|
5349
|
+
const target = this.commandfor;
|
|
5350
|
+
if (target) currentCtx.menu.push(target, this.id);
|
|
5351
|
+
else {
|
|
5352
|
+
this.dispatchEvent(new CustomEvent("select", { bubbles: true }));
|
|
5353
|
+
completeMenuItemSelection(currentCtx.menu, currentCtx.parentMenu);
|
|
5354
|
+
}
|
|
5355
|
+
event.preventDefault();
|
|
5356
|
+
},
|
|
5357
|
+
onKeyDown: (event) => {
|
|
5358
|
+
const currentCtx = this.#ctx.value;
|
|
5359
|
+
if (!currentCtx || this.disabled || event.key !== "ArrowRight") return;
|
|
5360
|
+
const target = this.commandfor;
|
|
5361
|
+
if (!target) return;
|
|
5362
|
+
currentCtx.menu.push(target, this.id);
|
|
5363
|
+
event.preventDefault();
|
|
5364
|
+
},
|
|
5365
|
+
onPointerenter: () => {
|
|
5366
|
+
const currentCtx = this.#ctx.value;
|
|
5367
|
+
if (!this.disabled) currentCtx?.menu.highlight(this, { focus: false });
|
|
5368
|
+
}
|
|
5369
|
+
}, { signal: this.#disconnect.signal });
|
|
5370
|
+
}
|
|
5371
|
+
const hasSubmenu = Boolean(this.commandfor);
|
|
5372
|
+
const activeSubMenuId = ctx.navigation.stack[ctx.navigation.stack.length - 1]?.menuId ?? null;
|
|
5373
|
+
const isExpanded = hasSubmenu ? activeSubMenuId === this.commandfor : void 0;
|
|
5374
|
+
applyElementProps(this, {
|
|
5375
|
+
role: "menuitem",
|
|
5376
|
+
"aria-disabled": this.disabled ? "true" : void 0,
|
|
5377
|
+
...hasSubmenu && {
|
|
5378
|
+
"aria-haspopup": "menu",
|
|
5379
|
+
"aria-expanded": isExpanded ? "true" : "false",
|
|
5380
|
+
"data-has-submenu": ""
|
|
5381
|
+
}
|
|
5382
|
+
});
|
|
5383
|
+
applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);
|
|
3388
5384
|
}
|
|
3389
5385
|
};
|
|
3390
5386
|
|
|
3391
5387
|
//#endregion
|
|
3392
|
-
//#region src/ui/
|
|
3393
|
-
var
|
|
5388
|
+
//#region src/ui/menu/menu-label-element.ts
|
|
5389
|
+
var MenuLabelElement = class extends ContextPartElement {
|
|
3394
5390
|
constructor(..._args) {
|
|
3395
5391
|
super(..._args);
|
|
3396
5392
|
this.consumer = new ContextConsumer(this, {
|
|
3397
|
-
context:
|
|
5393
|
+
context: menuContext,
|
|
3398
5394
|
subscribe: true
|
|
3399
5395
|
});
|
|
3400
5396
|
}
|
|
3401
5397
|
static {
|
|
3402
|
-
this.tagName = "media-
|
|
3403
|
-
}
|
|
3404
|
-
update(changed) {
|
|
3405
|
-
super.update(changed);
|
|
3406
|
-
const descriptionId = this.consumer.value?.state.descriptionId;
|
|
3407
|
-
if (descriptionId) this.id = descriptionId;
|
|
5398
|
+
this.tagName = "media-menu-label";
|
|
3408
5399
|
}
|
|
3409
5400
|
};
|
|
3410
5401
|
|
|
3411
5402
|
//#endregion
|
|
3412
|
-
//#region src/ui/
|
|
3413
|
-
var
|
|
3414
|
-
constructor(..._args) {
|
|
3415
|
-
super(..._args);
|
|
3416
|
-
this.consumer = new ContextConsumer(this, {
|
|
3417
|
-
context: alertDialogContext,
|
|
3418
|
-
subscribe: true
|
|
3419
|
-
});
|
|
3420
|
-
}
|
|
5403
|
+
//#region src/ui/menu/menu-separator-element.ts
|
|
5404
|
+
var MenuSeparatorElement = class extends MediaElement {
|
|
3421
5405
|
static {
|
|
3422
|
-
this.tagName = "media-
|
|
5406
|
+
this.tagName = "media-menu-separator";
|
|
3423
5407
|
}
|
|
3424
|
-
|
|
3425
|
-
|
|
3426
|
-
|
|
3427
|
-
|
|
5408
|
+
#ctx = new ContextConsumer(this, {
|
|
5409
|
+
context: menuContext,
|
|
5410
|
+
subscribe: true
|
|
5411
|
+
});
|
|
5412
|
+
update(_changed) {
|
|
5413
|
+
super.update(_changed);
|
|
5414
|
+
applyElementProps(this, { role: "separator" });
|
|
5415
|
+
const ctx = this.#ctx.value;
|
|
5416
|
+
if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);
|
|
3428
5417
|
}
|
|
3429
5418
|
};
|
|
3430
5419
|
|
|
3431
5420
|
//#endregion
|
|
3432
|
-
//#region src/ui/
|
|
3433
|
-
|
|
3434
|
-
const controlsContext = createContext(CONTROLS_CONTEXT_KEY);
|
|
3435
|
-
|
|
3436
|
-
//#endregion
|
|
3437
|
-
//#region src/ui/controls/controls-element.ts
|
|
3438
|
-
var ControlsElement = class extends MediaElement {
|
|
5421
|
+
//#region src/ui/menu/menu-view-element.ts
|
|
5422
|
+
var MenuViewElement = class extends MediaElement {
|
|
3439
5423
|
static {
|
|
3440
|
-
this.tagName = "media-
|
|
3441
|
-
}
|
|
3442
|
-
#core = new ControlsCore();
|
|
3443
|
-
#mediaState = new PlayerController(this, playerContext, selectControls);
|
|
3444
|
-
#provider = new ContextProvider(this, { context: controlsContext });
|
|
3445
|
-
connectedCallback() {
|
|
3446
|
-
super.connectedCallback();
|
|
3447
|
-
if (!this.#mediaState.value && this.#mediaState.displayName) logMissingFeature(this.localName, this.#mediaState.displayName);
|
|
5424
|
+
this.tagName = "media-menu-view";
|
|
3448
5425
|
}
|
|
3449
|
-
update(
|
|
3450
|
-
super.update(
|
|
3451
|
-
|
|
3452
|
-
if (!media) return;
|
|
3453
|
-
this.#core.setMedia(media);
|
|
3454
|
-
const state = this.#core.getState();
|
|
3455
|
-
applyStateDataAttrs(this, state, ControlsDataAttrs);
|
|
3456
|
-
this.#provider.setValue({
|
|
3457
|
-
state,
|
|
3458
|
-
stateAttrMap: ControlsDataAttrs
|
|
3459
|
-
});
|
|
5426
|
+
update(changed) {
|
|
5427
|
+
super.update(changed);
|
|
5428
|
+
applyElementProps(this, getMenuRootViewAttrs());
|
|
3460
5429
|
}
|
|
3461
5430
|
};
|
|
3462
5431
|
|
|
3463
5432
|
//#endregion
|
|
3464
|
-
//#region src/ui/
|
|
3465
|
-
var
|
|
5433
|
+
//#region src/ui/input-indicators/input-indicator-element.ts
|
|
5434
|
+
var InputIndicatorElement = class extends MediaElement {
|
|
3466
5435
|
constructor(..._args) {
|
|
3467
5436
|
super(..._args);
|
|
3468
|
-
this.
|
|
3469
|
-
|
|
5437
|
+
this.player = new PlayerController(this, playerContext);
|
|
5438
|
+
this.container = new ContextConsumer(this, {
|
|
5439
|
+
context: containerContext,
|
|
5440
|
+
callback: () => this.#reconnect(),
|
|
3470
5441
|
subscribe: true
|
|
3471
5442
|
});
|
|
5443
|
+
this.#disconnect = null;
|
|
5444
|
+
this.#inputActionUnsubscribe = null;
|
|
5445
|
+
this.#visibilityUnsubscribe = null;
|
|
5446
|
+
this.#visibilityHandle = null;
|
|
5447
|
+
this.#lastGeneration = 0;
|
|
5448
|
+
this.#snapshot = null;
|
|
3472
5449
|
}
|
|
3473
|
-
|
|
3474
|
-
|
|
5450
|
+
#disconnect;
|
|
5451
|
+
#inputActionUnsubscribe;
|
|
5452
|
+
#visibilityUnsubscribe;
|
|
5453
|
+
#visibilityHandle;
|
|
5454
|
+
#lastGeneration;
|
|
5455
|
+
#snapshot;
|
|
5456
|
+
#getVisibilityHandle() {
|
|
5457
|
+
return this.#visibilityHandle ??= { close: () => this.core.close() };
|
|
5458
|
+
}
|
|
5459
|
+
#payloadSnapshot() {
|
|
5460
|
+
return this.#snapshot ?? this.core.state.current;
|
|
3475
5461
|
}
|
|
3476
5462
|
connectedCallback() {
|
|
3477
5463
|
super.connectedCallback();
|
|
3478
|
-
if (this.
|
|
5464
|
+
if (this.destroyed) return;
|
|
5465
|
+
this.#snapshot = this.core.state.current;
|
|
5466
|
+
this.#disconnect = new AbortController();
|
|
5467
|
+
this.core.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });
|
|
5468
|
+
this.transition.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });
|
|
5469
|
+
this.hidden = true;
|
|
5470
|
+
this.#reconnect();
|
|
5471
|
+
}
|
|
5472
|
+
disconnectedCallback() {
|
|
5473
|
+
super.disconnectedCallback();
|
|
5474
|
+
this.#inputActionUnsubscribe?.();
|
|
5475
|
+
this.#visibilityUnsubscribe?.();
|
|
5476
|
+
this.#inputActionUnsubscribe = null;
|
|
5477
|
+
this.#visibilityUnsubscribe = null;
|
|
5478
|
+
this.#disconnect?.abort();
|
|
5479
|
+
this.#disconnect = null;
|
|
5480
|
+
}
|
|
5481
|
+
destroyCallback() {
|
|
5482
|
+
this.#inputActionUnsubscribe?.();
|
|
5483
|
+
this.#visibilityUnsubscribe?.();
|
|
5484
|
+
this.core.destroy();
|
|
5485
|
+
this.transition.destroy();
|
|
5486
|
+
this.liveIndicator.remove();
|
|
5487
|
+
super.destroyCallback();
|
|
5488
|
+
}
|
|
5489
|
+
willUpdate(changed) {
|
|
5490
|
+
super.willUpdate(changed);
|
|
5491
|
+
this.syncCoreProps();
|
|
5492
|
+
}
|
|
5493
|
+
update(changed) {
|
|
5494
|
+
super.update(changed);
|
|
5495
|
+
this.#syncTransition();
|
|
5496
|
+
const currentState = this.core.state.current;
|
|
5497
|
+
const transitionState = this.transition.state.current;
|
|
5498
|
+
if (!isIndicatorPresent(currentState, transitionState)) {
|
|
5499
|
+
this.liveIndicator.remove();
|
|
5500
|
+
return;
|
|
5501
|
+
}
|
|
5502
|
+
const state = getRenderedIndicatorState(currentState, this.#payloadSnapshot(), transitionState);
|
|
5503
|
+
this.liveIndicator.render(state);
|
|
5504
|
+
}
|
|
5505
|
+
#syncTransition() {
|
|
5506
|
+
const currentState = this.core.state.current;
|
|
5507
|
+
if (currentState.open) {
|
|
5508
|
+
this.#snapshot = currentState;
|
|
5509
|
+
if (this.#lastGeneration !== currentState.generation) {
|
|
5510
|
+
this.#lastGeneration = currentState.generation;
|
|
5511
|
+
this.transition.open();
|
|
5512
|
+
}
|
|
5513
|
+
return;
|
|
5514
|
+
}
|
|
5515
|
+
const { active, status } = this.transition.state.current;
|
|
5516
|
+
if (active && status !== "ending") this.transition.close(this.liveIndicator.element);
|
|
5517
|
+
}
|
|
5518
|
+
#reconnect() {
|
|
5519
|
+
this.#inputActionUnsubscribe?.();
|
|
5520
|
+
this.#visibilityUnsubscribe?.();
|
|
5521
|
+
this.#inputActionUnsubscribe = null;
|
|
5522
|
+
this.#visibilityUnsubscribe = null;
|
|
5523
|
+
const container = this.container.value?.container;
|
|
5524
|
+
if (!container) return;
|
|
5525
|
+
const visibility = getIndicatorVisibilityCoordinator(container);
|
|
5526
|
+
const visibilityHandle = this.#getVisibilityHandle();
|
|
5527
|
+
this.#visibilityUnsubscribe = visibility.register(visibilityHandle);
|
|
5528
|
+
this.#inputActionUnsubscribe = subscribeToInputActions(container, (event) => {
|
|
5529
|
+
if (this.core.processEvent(event, getMediaSnapshot(this.player.value))) visibility.show(visibilityHandle);
|
|
5530
|
+
});
|
|
3479
5531
|
}
|
|
3480
5532
|
};
|
|
3481
5533
|
|
|
3482
5534
|
//#endregion
|
|
3483
|
-
//#region src/ui/
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
5535
|
+
//#region src/ui/input-indicators/live-indicator.ts
|
|
5536
|
+
var LiveIndicator = class {
|
|
5537
|
+
#host;
|
|
5538
|
+
#dataAttrs;
|
|
5539
|
+
#render;
|
|
5540
|
+
constructor(options) {
|
|
5541
|
+
this.#host = options.host;
|
|
5542
|
+
this.#dataAttrs = options.dataAttrs;
|
|
5543
|
+
this.#render = options.render;
|
|
5544
|
+
}
|
|
5545
|
+
get element() {
|
|
5546
|
+
return this.#host;
|
|
5547
|
+
}
|
|
5548
|
+
render(state) {
|
|
5549
|
+
this.#host.hidden = false;
|
|
5550
|
+
applyStateDataAttrs(this.#host, state, this.#dataAttrs);
|
|
5551
|
+
this.#render(this.#host, state);
|
|
5552
|
+
return this.#host;
|
|
5553
|
+
}
|
|
5554
|
+
remove() {
|
|
5555
|
+
this.#host.hidden = true;
|
|
5556
|
+
for (const key in this.#dataAttrs) {
|
|
5557
|
+
const name = this.#dataAttrs[key];
|
|
5558
|
+
if (name) this.#host.removeAttribute(name);
|
|
5559
|
+
}
|
|
5560
|
+
}
|
|
5561
|
+
};
|
|
5562
|
+
|
|
5563
|
+
//#endregion
|
|
5564
|
+
//#region src/ui/seek-indicator/seek-indicator-element.ts
|
|
5565
|
+
var SeekIndicatorElement = class extends InputIndicatorElement {
|
|
3487
5566
|
static {
|
|
3488
|
-
this.tagName = "media-
|
|
5567
|
+
this.tagName = "media-seek-indicator";
|
|
3489
5568
|
}
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
|
|
3495
|
-
|
|
3496
|
-
#
|
|
3497
|
-
#
|
|
3498
|
-
|
|
3499
|
-
|
|
3500
|
-
|
|
3501
|
-
|
|
5569
|
+
static {
|
|
5570
|
+
this.properties = { closeDelay: {
|
|
5571
|
+
type: Number,
|
|
5572
|
+
attribute: "close-delay"
|
|
5573
|
+
} };
|
|
5574
|
+
}
|
|
5575
|
+
#core = new SeekIndicatorCore();
|
|
5576
|
+
#transition = createTransition();
|
|
5577
|
+
#liveIndicator = new LiveIndicator({
|
|
5578
|
+
host: this,
|
|
5579
|
+
dataAttrs: SeekIndicatorDataAttrs,
|
|
5580
|
+
render: renderSeekIndicator
|
|
5581
|
+
});
|
|
5582
|
+
get core() {
|
|
5583
|
+
return this.#core;
|
|
3502
5584
|
}
|
|
3503
|
-
|
|
3504
|
-
|
|
3505
|
-
if (this.destroyed) return;
|
|
3506
|
-
this.#dialog = createAlertDialog({
|
|
3507
|
-
transition: createTransition(),
|
|
3508
|
-
onOpenChange: (nextOpen) => {
|
|
3509
|
-
if (!nextOpen) this.#errorState.value?.dismissError();
|
|
3510
|
-
}
|
|
3511
|
-
});
|
|
3512
|
-
this.#dialog.setElement(this);
|
|
3513
|
-
if (this.#snapshot) this.#snapshot.track(this.#dialog.input);
|
|
3514
|
-
else this.#snapshot = new SnapshotController(this, this.#dialog.input);
|
|
5585
|
+
get transition() {
|
|
5586
|
+
return this.#transition;
|
|
3515
5587
|
}
|
|
3516
|
-
|
|
3517
|
-
|
|
3518
|
-
this.#dialog?.destroy();
|
|
3519
|
-
this.#dialog = null;
|
|
5588
|
+
get liveIndicator() {
|
|
5589
|
+
return this.#liveIndicator;
|
|
3520
5590
|
}
|
|
3521
|
-
|
|
3522
|
-
|
|
3523
|
-
if (!this.#dialog) return;
|
|
3524
|
-
const errorState = this.#errorState.value;
|
|
3525
|
-
const hasError = Boolean(errorState?.error);
|
|
3526
|
-
const { active: isOpen } = this.#dialog.input.current;
|
|
3527
|
-
if (errorState?.error) {
|
|
3528
|
-
const message = errorState.error.message?.trim();
|
|
3529
|
-
this.#lastErrorMessage = message || null;
|
|
3530
|
-
}
|
|
3531
|
-
const desc = this.querySelector("media-alert-dialog-description");
|
|
3532
|
-
if (desc) desc.textContent = this.#lastErrorMessage ?? FALLBACK_MESSAGE;
|
|
3533
|
-
if (hasError && !isOpen) this.#dialog.open();
|
|
3534
|
-
else if (!hasError && isOpen) this.#dialog.close();
|
|
5591
|
+
syncCoreProps() {
|
|
5592
|
+
this.#core.setProps({ closeDelay: this.closeDelay });
|
|
3535
5593
|
}
|
|
3536
|
-
|
|
3537
|
-
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
});
|
|
5594
|
+
};
|
|
5595
|
+
function renderSeekIndicator(element, state) {
|
|
5596
|
+
const value = element.querySelector("media-seek-indicator-value");
|
|
5597
|
+
if (!value) return;
|
|
5598
|
+
value.textContent = getSeekIndicatorDisplayValue(state);
|
|
5599
|
+
}
|
|
5600
|
+
|
|
5601
|
+
//#endregion
|
|
5602
|
+
//#region src/ui/seek-indicator/seek-indicator-value-element.ts
|
|
5603
|
+
var SeekIndicatorValueElement = class extends MediaElement {
|
|
5604
|
+
static {
|
|
5605
|
+
this.tagName = "media-seek-indicator-value";
|
|
3549
5606
|
}
|
|
3550
5607
|
};
|
|
3551
5608
|
|
|
@@ -3866,6 +5923,123 @@ var SliderValueElement = class extends MediaElement {
|
|
|
3866
5923
|
}
|
|
3867
5924
|
};
|
|
3868
5925
|
|
|
5926
|
+
//#endregion
|
|
5927
|
+
//#region src/ui/status-announcer/status-announcer-element.ts
|
|
5928
|
+
var StatusAnnouncerElement = class extends MediaElement {
|
|
5929
|
+
static {
|
|
5930
|
+
this.tagName = "media-status-announcer";
|
|
5931
|
+
}
|
|
5932
|
+
static {
|
|
5933
|
+
this.properties = { closeDelay: {
|
|
5934
|
+
type: Number,
|
|
5935
|
+
attribute: "close-delay"
|
|
5936
|
+
} };
|
|
5937
|
+
}
|
|
5938
|
+
#core = new StatusAnnouncerCore();
|
|
5939
|
+
#player = new PlayerController(this, playerContext);
|
|
5940
|
+
#container = new ContextConsumer(this, {
|
|
5941
|
+
context: containerContext,
|
|
5942
|
+
callback: () => this.#reconnect(),
|
|
5943
|
+
subscribe: true
|
|
5944
|
+
});
|
|
5945
|
+
#disconnect = null;
|
|
5946
|
+
#inputActionUnsubscribe = null;
|
|
5947
|
+
connectedCallback() {
|
|
5948
|
+
super.connectedCallback();
|
|
5949
|
+
if (this.destroyed) return;
|
|
5950
|
+
this.setAttribute("role", "status");
|
|
5951
|
+
this.#disconnect = new AbortController();
|
|
5952
|
+
this.#core.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });
|
|
5953
|
+
this.#reconnect();
|
|
5954
|
+
}
|
|
5955
|
+
disconnectedCallback() {
|
|
5956
|
+
super.disconnectedCallback();
|
|
5957
|
+
this.#inputActionUnsubscribe?.();
|
|
5958
|
+
this.#inputActionUnsubscribe = null;
|
|
5959
|
+
this.#disconnect?.abort();
|
|
5960
|
+
this.#disconnect = null;
|
|
5961
|
+
}
|
|
5962
|
+
destroyCallback() {
|
|
5963
|
+
this.#inputActionUnsubscribe?.();
|
|
5964
|
+
this.#core.destroy();
|
|
5965
|
+
super.destroyCallback();
|
|
5966
|
+
}
|
|
5967
|
+
willUpdate(changed) {
|
|
5968
|
+
super.willUpdate(changed);
|
|
5969
|
+
this.#core.setProps({ closeDelay: this.closeDelay });
|
|
5970
|
+
}
|
|
5971
|
+
update(changed) {
|
|
5972
|
+
super.update(changed);
|
|
5973
|
+
const label = this.#core.state.current.label;
|
|
5974
|
+
if (label) this.setAttribute("aria-label", label);
|
|
5975
|
+
else this.removeAttribute("aria-label");
|
|
5976
|
+
}
|
|
5977
|
+
#reconnect() {
|
|
5978
|
+
this.#inputActionUnsubscribe?.();
|
|
5979
|
+
this.#inputActionUnsubscribe = null;
|
|
5980
|
+
const container = this.#container.value?.container;
|
|
5981
|
+
if (!container) return;
|
|
5982
|
+
this.#inputActionUnsubscribe = subscribeToInputActions(container, (event) => {
|
|
5983
|
+
this.#core.processEvent(event, getMediaSnapshot(this.#player.value));
|
|
5984
|
+
});
|
|
5985
|
+
}
|
|
5986
|
+
};
|
|
5987
|
+
|
|
5988
|
+
//#endregion
|
|
5989
|
+
//#region src/ui/status-indicator/status-indicator-element.ts
|
|
5990
|
+
var StatusIndicatorElement = class extends InputIndicatorElement {
|
|
5991
|
+
static {
|
|
5992
|
+
this.tagName = "media-status-indicator";
|
|
5993
|
+
}
|
|
5994
|
+
static {
|
|
5995
|
+
this.properties = {
|
|
5996
|
+
actions: { type: String },
|
|
5997
|
+
closeDelay: {
|
|
5998
|
+
type: Number,
|
|
5999
|
+
attribute: "close-delay"
|
|
6000
|
+
}
|
|
6001
|
+
};
|
|
6002
|
+
}
|
|
6003
|
+
#core = new StatusIndicatorCore();
|
|
6004
|
+
#transition = createTransition();
|
|
6005
|
+
#liveIndicator = new LiveIndicator({
|
|
6006
|
+
host: this,
|
|
6007
|
+
dataAttrs: StatusIndicatorDataAttrs,
|
|
6008
|
+
render: renderStatusIndicator
|
|
6009
|
+
});
|
|
6010
|
+
get core() {
|
|
6011
|
+
return this.#core;
|
|
6012
|
+
}
|
|
6013
|
+
get transition() {
|
|
6014
|
+
return this.#transition;
|
|
6015
|
+
}
|
|
6016
|
+
get liveIndicator() {
|
|
6017
|
+
return this.#liveIndicator;
|
|
6018
|
+
}
|
|
6019
|
+
syncCoreProps() {
|
|
6020
|
+
this.#core.setProps({
|
|
6021
|
+
actions: parseActions(this.actions),
|
|
6022
|
+
closeDelay: this.closeDelay
|
|
6023
|
+
});
|
|
6024
|
+
}
|
|
6025
|
+
};
|
|
6026
|
+
function parseActions(actions) {
|
|
6027
|
+
return actions?.split(/[\s,]+/).filter(Boolean);
|
|
6028
|
+
}
|
|
6029
|
+
function renderStatusIndicator(element, state) {
|
|
6030
|
+
const value = element.querySelector("media-status-indicator-value");
|
|
6031
|
+
if (!value) return;
|
|
6032
|
+
value.textContent = getStatusIndicatorDisplayValue(state);
|
|
6033
|
+
}
|
|
6034
|
+
|
|
6035
|
+
//#endregion
|
|
6036
|
+
//#region src/ui/status-indicator/status-indicator-value-element.ts
|
|
6037
|
+
var StatusIndicatorValueElement = class extends MediaElement {
|
|
6038
|
+
static {
|
|
6039
|
+
this.tagName = "media-status-indicator-value";
|
|
6040
|
+
}
|
|
6041
|
+
};
|
|
6042
|
+
|
|
3869
6043
|
//#endregion
|
|
3870
6044
|
//#region src/ui/time/time-element.ts
|
|
3871
6045
|
var TimeElement = class extends MediaElement {
|
|
@@ -4073,6 +6247,62 @@ var TimeSliderElement = class extends MediaElement {
|
|
|
4073
6247
|
}
|
|
4074
6248
|
};
|
|
4075
6249
|
|
|
6250
|
+
//#endregion
|
|
6251
|
+
//#region src/ui/volume-indicator/volume-indicator-element.ts
|
|
6252
|
+
var VolumeIndicatorElement = class extends InputIndicatorElement {
|
|
6253
|
+
static {
|
|
6254
|
+
this.tagName = "media-volume-indicator";
|
|
6255
|
+
}
|
|
6256
|
+
static {
|
|
6257
|
+
this.properties = { closeDelay: {
|
|
6258
|
+
type: Number,
|
|
6259
|
+
attribute: "close-delay"
|
|
6260
|
+
} };
|
|
6261
|
+
}
|
|
6262
|
+
#core = new VolumeIndicatorCore();
|
|
6263
|
+
#transition = createTransition();
|
|
6264
|
+
#liveIndicator = new LiveIndicator({
|
|
6265
|
+
host: this,
|
|
6266
|
+
dataAttrs: VolumeIndicatorDataAttrs,
|
|
6267
|
+
render: renderVolumeIndicator
|
|
6268
|
+
});
|
|
6269
|
+
get core() {
|
|
6270
|
+
return this.#core;
|
|
6271
|
+
}
|
|
6272
|
+
get transition() {
|
|
6273
|
+
return this.#transition;
|
|
6274
|
+
}
|
|
6275
|
+
get liveIndicator() {
|
|
6276
|
+
return this.#liveIndicator;
|
|
6277
|
+
}
|
|
6278
|
+
syncCoreProps() {
|
|
6279
|
+
this.#core.setProps({ closeDelay: this.closeDelay });
|
|
6280
|
+
}
|
|
6281
|
+
};
|
|
6282
|
+
function renderVolumeIndicator(element, state) {
|
|
6283
|
+
const fill = element.querySelector("media-volume-indicator-fill");
|
|
6284
|
+
const value = element.querySelector("media-volume-indicator-value");
|
|
6285
|
+
if (state.fill) fill?.style.setProperty(VolumeIndicatorCSSVars.fill, state.fill);
|
|
6286
|
+
else fill?.style.removeProperty(VolumeIndicatorCSSVars.fill);
|
|
6287
|
+
if (value) value.textContent = getVolumeIndicatorDisplayValue(state);
|
|
6288
|
+
}
|
|
6289
|
+
|
|
6290
|
+
//#endregion
|
|
6291
|
+
//#region src/ui/volume-indicator/volume-indicator-fill-element.ts
|
|
6292
|
+
var VolumeIndicatorFillElement = class extends MediaElement {
|
|
6293
|
+
static {
|
|
6294
|
+
this.tagName = "media-volume-indicator-fill";
|
|
6295
|
+
}
|
|
6296
|
+
};
|
|
6297
|
+
|
|
6298
|
+
//#endregion
|
|
6299
|
+
//#region src/ui/volume-indicator/volume-indicator-value-element.ts
|
|
6300
|
+
var VolumeIndicatorValueElement = class extends MediaElement {
|
|
6301
|
+
static {
|
|
6302
|
+
this.tagName = "media-volume-indicator-value";
|
|
6303
|
+
}
|
|
6304
|
+
};
|
|
6305
|
+
|
|
4076
6306
|
//#endregion
|
|
4077
6307
|
//#region src/ui/volume-slider/volume-slider-element.ts
|
|
4078
6308
|
var VolumeSliderElement = class extends MediaElement {
|
|
@@ -4200,6 +6430,19 @@ var VolumeSliderElement = class extends MediaElement {
|
|
|
4200
6430
|
|
|
4201
6431
|
//#endregion
|
|
4202
6432
|
//#region src/define/ui/compounds.ts
|
|
6433
|
+
function defineMenu() {
|
|
6434
|
+
safeDefine(MenuElement);
|
|
6435
|
+
safeDefine(MenuBackElement);
|
|
6436
|
+
safeDefine(MenuItemElement);
|
|
6437
|
+
safeDefine(MenuLabelElement);
|
|
6438
|
+
safeDefine(MenuSeparatorElement);
|
|
6439
|
+
safeDefine(MenuGroupElement);
|
|
6440
|
+
safeDefine(MenuRadioGroupElement);
|
|
6441
|
+
safeDefine(MenuRadioItemElement);
|
|
6442
|
+
safeDefine(MenuCheckboxItemElement);
|
|
6443
|
+
safeDefine(MenuItemIndicatorElement);
|
|
6444
|
+
safeDefine(MenuViewElement);
|
|
6445
|
+
}
|
|
4203
6446
|
function defineControls() {
|
|
4204
6447
|
safeDefine(ControlsElement);
|
|
4205
6448
|
safeDefine(ControlsGroupElement);
|
|
@@ -4210,6 +6453,16 @@ function defineErrorDialog() {
|
|
|
4210
6453
|
safeDefine(AlertDialogDescriptionElement);
|
|
4211
6454
|
safeDefine(AlertDialogTitleElement);
|
|
4212
6455
|
}
|
|
6456
|
+
function defineInputIndicators() {
|
|
6457
|
+
safeDefine(StatusAnnouncerElement);
|
|
6458
|
+
safeDefine(StatusIndicatorElement);
|
|
6459
|
+
safeDefine(StatusIndicatorValueElement);
|
|
6460
|
+
safeDefine(VolumeIndicatorElement);
|
|
6461
|
+
safeDefine(VolumeIndicatorFillElement);
|
|
6462
|
+
safeDefine(VolumeIndicatorValueElement);
|
|
6463
|
+
safeDefine(SeekIndicatorElement);
|
|
6464
|
+
safeDefine(SeekIndicatorValueElement);
|
|
6465
|
+
}
|
|
4213
6466
|
/** Shared slider sub-elements used by all slider types. */
|
|
4214
6467
|
function defineSliderParts() {
|
|
4215
6468
|
safeDefine(SliderFillElement);
|
|
@@ -4235,5 +6488,5 @@ function defineVolumeSlider() {
|
|
|
4235
6488
|
}
|
|
4236
6489
|
|
|
4237
6490
|
//#endregion
|
|
4238
|
-
export {
|
|
4239
|
-
//# sourceMappingURL=compounds-
|
|
6491
|
+
export { selectTextTrack as A, selectBuffer as C, selectPlayback as D, selectPiP as E, selectVolume as M, defaults as N, selectPlaybackRate as O, createHotkey as S, selectLive as T, MediaButtonElement as _, defineTime as a, applyElementProps as b, TooltipGroupElement as c, MenuRadioItemElement as d, MenuRadioGroupElement as f, MuteButtonElement as g, PlayButtonElement as h, defineMenu as i, selectTime as j, selectRemotePlayback as k, TooltipElement as l, MenuElement as m, defineErrorDialog as n, defineTimeSlider as o, MenuItemIndicatorElement as p, defineInputIndicators as r, defineVolumeSlider as s, defineControls as t, PopoverElement as u, applyStateDataAttrs as v, selectFullscreen as w, createButton as x, logMissingFeature as y };
|
|
6492
|
+
//# sourceMappingURL=compounds-DxdDY3jr.js.map
|