@videojs/html 10.0.0-beta.17 → 10.0.0-beta.21
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/cdn/{abort-DGNIECLn.js → abort-C9UiBdVU.js} +1 -1
- package/cdn/{abort-DGNIECLn.js.map → abort-C9UiBdVU.js.map} +1 -1
- package/cdn/{abort-BL-SGV3o.js → abort-DsTff8mS.js} +1 -1
- package/cdn/{abort-BL-SGV3o.js.map → abort-DsTff8mS.js.map} +1 -1
- package/cdn/audio-minimal-ui.dev.js +4 -4
- package/cdn/audio-minimal-ui.js +1 -1
- package/cdn/audio-minimal.dev.js +7 -7
- package/cdn/audio-minimal.js +1 -1
- package/cdn/audio-ui.dev.js +4 -4
- package/cdn/audio-ui.js +1 -1
- package/cdn/audio.dev.js +6 -6
- package/cdn/audio.js +1 -1
- package/cdn/background.dev.js +4 -12
- package/cdn/background.dev.js.map +1 -1
- package/cdn/background.js +1 -1
- package/cdn/background.js.map +1 -1
- package/cdn/{compounds-VFPcCeRV.js → compounds-CM_NP-ej.js} +7 -35
- package/cdn/compounds-CM_NP-ej.js.map +1 -0
- package/cdn/compounds-Vvz-YfXP.js +8 -0
- package/cdn/{compounds-Df_1JbZD.js.map → compounds-Vvz-YfXP.js.map} +1 -1
- package/cdn/{context-CvJ83xGk.js → context-0rI_P6jf.js} +1 -1
- package/cdn/{context-CvJ83xGk.js.map → context-0rI_P6jf.js.map} +1 -1
- package/cdn/{context-C-IpVHEt.js → context-CEFisYD0.js} +1 -1
- package/cdn/{context-C-IpVHEt.js.map → context-CEFisYD0.js.map} +1 -1
- package/cdn/{create-player-CyG77t-m.js → create-player-Bi6WUwDZ.js} +140 -99
- package/cdn/create-player-Bi6WUwDZ.js.map +1 -0
- package/cdn/create-player-CKuX8YI5.js +7 -0
- package/cdn/create-player-CKuX8YI5.js.map +1 -0
- package/cdn/{hls-BrzPpueW.js → hls-BotloEPN.js} +25 -22
- package/cdn/hls-BotloEPN.js.map +1 -0
- package/cdn/hls-CBpGTZXU.js +41 -0
- package/cdn/hls-CBpGTZXU.js.map +1 -0
- package/cdn/{hotkey-element-Dlta37Be.js → hotkey-element-317kwVH5.js} +5 -5
- package/cdn/{hotkey-element-Dlta37Be.js.map → hotkey-element-317kwVH5.js.map} +1 -1
- package/cdn/{hotkey-element-DR3ZAqKa.js → hotkey-element-DRGCbVj9.js} +2 -2
- package/cdn/{hotkey-element-DR3ZAqKa.js.map → hotkey-element-DRGCbVj9.js.map} +1 -1
- package/cdn/{listen-w-Aun0yN.js → listen-CJT7C4kM.js} +1 -1
- package/cdn/{listen-w-Aun0yN.js.map → listen-CJT7C4kM.js.map} +1 -1
- package/cdn/{listen-D7fcau5d.js → listen-DFX-0NbX.js} +1 -1
- package/cdn/{listen-D7fcau5d.js.map → listen-DFX-0NbX.js.map} +1 -1
- package/cdn/media/dash-video.dev.js +16 -22
- package/cdn/media/dash-video.dev.js.map +1 -1
- package/cdn/media/dash-video.js +3 -3
- package/cdn/media/dash-video.js.map +1 -1
- package/cdn/media/hls-video.dev.js +12 -12
- package/cdn/media/hls-video.dev.js.map +1 -1
- package/cdn/media/hls-video.js +1 -1
- package/cdn/media/hls-video.js.map +1 -1
- package/cdn/media/mux-audio.dev.js +13 -13
- package/cdn/media/mux-audio.dev.js.map +1 -1
- package/cdn/media/mux-audio.js +1 -1
- package/cdn/media/mux-audio.js.map +1 -1
- package/cdn/media/mux-video.dev.js +13 -13
- package/cdn/media/mux-video.dev.js.map +1 -1
- package/cdn/media/mux-video.js +1 -1
- package/cdn/media/mux-video.js.map +1 -1
- package/cdn/media/native-hls-video.dev.js +5 -14
- package/cdn/media/native-hls-video.dev.js.map +1 -1
- package/cdn/media/native-hls-video.js +1 -1
- package/cdn/media/native-hls-video.js.map +1 -1
- package/cdn/media/simple-hls-video.dev.js +83 -85
- 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-C2wz0Qbd.js +2 -0
- package/cdn/media-attach-mixin-C2wz0Qbd.js.map +1 -0
- package/cdn/{media-attach-mixin-CMH1ziXP.js → media-attach-mixin-CYoNe7Sh.js} +26 -3
- package/cdn/media-attach-mixin-CYoNe7Sh.js.map +1 -0
- package/cdn/{minimal-D9Dw-L2P.js → minimal-BnDnlwbj.js} +1 -1
- package/cdn/{minimal-D9Dw-L2P.js.map → minimal-BnDnlwbj.js.map} +1 -1
- package/cdn/{minimal-Dc5nNl_-.js → minimal-CqBxBoLe.js} +1 -1
- package/cdn/{minimal-Dc5nNl_-.js.map → minimal-CqBxBoLe.js.map} +1 -1
- package/cdn/minimal-ui-C_G24FML.js +2 -0
- package/cdn/{minimal-ui-B3BBK5nX.js.map → minimal-ui-C_G24FML.js.map} +1 -1
- package/cdn/minimal-ui-CroDYUGf.js +2 -0
- package/cdn/{minimal-ui-DOePmQfq.js.map → minimal-ui-CroDYUGf.js.map} +1 -1
- package/cdn/{minimal-ui-Cnaig4X6.js → minimal-ui-DhxN21v5.js} +5 -5
- package/cdn/{minimal-ui-Cnaig4X6.js.map → minimal-ui-DhxN21v5.js.map} +1 -1
- package/cdn/{minimal-ui-CPRSYky_.js → minimal-ui-cy2oEbFm.js} +5 -5
- package/cdn/{minimal-ui-CPRSYky_.js.map → minimal-ui-cy2oEbFm.js.map} +1 -1
- package/cdn/{mux-DGgCyz_A.js → mux-B5K6kOzg.js} +115 -145
- package/cdn/mux-B5K6kOzg.js.map +1 -0
- package/cdn/mux-DJhfbcCw.js +25 -0
- package/cdn/mux-DJhfbcCw.js.map +1 -0
- package/cdn/{native-hls-BuCYu7Rd.js → native-hls-CU2F7L5C.js} +20 -22
- package/cdn/native-hls-CU2F7L5C.js.map +1 -0
- package/cdn/native-hls-DKcYYWRt.js +2 -0
- package/cdn/native-hls-DKcYYWRt.js.map +1 -0
- package/cdn/pick-CERGq1No.js +2 -0
- package/cdn/pick-CERGq1No.js.map +1 -0
- package/cdn/pick-D-wCJ3iA.js +23 -0
- package/cdn/pick-D-wCJ3iA.js.map +1 -0
- package/cdn/player-BK35-ndY.js +2 -0
- package/cdn/{player-Cu5_r0Gk.js.map → player-BK35-ndY.js.map} +1 -1
- package/cdn/{player-eEH-XjnF.js → player-C7ajkBi4.js} +2 -2
- package/cdn/{player-eEH-XjnF.js.map → player-C7ajkBi4.js.map} +1 -1
- package/cdn/{player-DIOgBqQf.js → player-CatrGW7l.js} +4 -4
- package/cdn/{player-DIOgBqQf.js.map → player-CatrGW7l.js.map} +1 -1
- package/cdn/{player-DxBoqZVw.js → player-xstFHOgW.js} +3 -3
- package/cdn/{player-DxBoqZVw.js.map → player-xstFHOgW.js.map} +1 -1
- package/cdn/{shadow-styles-62Yo__Ni.js → shadow-styles-BYZ6q3Q4.js} +1 -1
- package/cdn/{shadow-styles-62Yo__Ni.js.map → shadow-styles-BYZ6q3Q4.js.map} +1 -1
- package/cdn/{shadow-styles-I-_QR-PM.js → shadow-styles-DKXFMmyD.js} +1 -1
- package/cdn/{shadow-styles-I-_QR-PM.js.map → shadow-styles-DKXFMmyD.js.map} +1 -1
- package/cdn/{shallow-equal-Ca0qjpLJ.js → shallow-equal-Daj3-_LC.js} +1 -1
- package/cdn/{shallow-equal-Ca0qjpLJ.js.map → shallow-equal-Daj3-_LC.js.map} +1 -1
- package/cdn/{shallow-equal-1KBb-lrM.js → shallow-equal-xh6Wj-hj.js} +1 -1
- package/cdn/{shallow-equal-1KBb-lrM.js.map → shallow-equal-xh6Wj-hj.js.map} +1 -1
- package/cdn/{skin-element-u6pdmSSs.js → skin-element-BGP23sop.js} +2 -2
- package/cdn/{skin-element-u6pdmSSs.js.map → skin-element-BGP23sop.js.map} +1 -1
- package/cdn/{skin-element-BTPr5DoY.js → skin-element-CDUkmCtS.js} +3 -3
- package/cdn/{skin-element-BTPr5DoY.js.map → skin-element-CDUkmCtS.js.map} +1 -1
- package/cdn/{ui-34pkHFdT.js → ui-AFHQtrqa.js} +6 -6
- package/cdn/{ui-34pkHFdT.js.map → ui-AFHQtrqa.js.map} +1 -1
- package/cdn/ui-B7vt9mp-.js +2 -0
- package/cdn/{ui-DWoV_Da1.js.map → ui-B7vt9mp-.js.map} +1 -1
- package/cdn/{ui-X5WOdCCw.js → ui-Em9rF9Ah.js} +6 -6
- package/cdn/{ui-X5WOdCCw.js.map → ui-Em9rF9Ah.js.map} +1 -1
- package/cdn/ui-QHwo6iyo.js +2 -0
- package/cdn/{ui-DXtTKomo.js.map → ui-QHwo6iyo.js.map} +1 -1
- package/cdn/video-host-CPRJVRi3.js +47 -0
- package/cdn/video-host-CPRJVRi3.js.map +1 -0
- package/cdn/video-host-ycP7ckxU.js +410 -0
- package/cdn/video-host-ycP7ckxU.js.map +1 -0
- package/cdn/video-minimal-ui.dev.js +4 -4
- package/cdn/video-minimal-ui.js +1 -1
- package/cdn/video-minimal.dev.js +7 -7
- package/cdn/video-minimal.js +1 -1
- package/cdn/video-ui.dev.js +4 -4
- package/cdn/video-ui.js +1 -1
- package/cdn/video.dev.js +6 -6
- package/cdn/video.js +1 -1
- package/dist/default/index.js +1 -2
- package/dist/default/media/dash-video/index.js +3 -12
- package/dist/default/media/dash-video/index.js.map +1 -1
- package/dist/default/media/hls-video/index.js +10 -10
- package/dist/default/media/hls-video/index.js.map +1 -1
- package/dist/default/media/mux-audio/index.js +10 -10
- package/dist/default/media/mux-audio/index.js.map +1 -1
- package/dist/default/media/mux-video/index.js +10 -10
- package/dist/default/media/mux-video/index.js.map +1 -1
- package/dist/default/media/native-hls-video/index.js +3 -12
- package/dist/default/media/native-hls-video/index.js.map +1 -1
- package/dist/default/media/simple-hls-video/index.js +3 -9
- package/dist/default/media/simple-hls-video/index.js.map +1 -1
- package/dist/default/ui/alert-dialog/alert-dialog-element.js +1 -1
- package/dist/default/ui/buffering-indicator/buffering-indicator-element.js +1 -1
- package/dist/default/ui/captions-button/captions-button-element.js +1 -1
- package/dist/default/ui/controls/controls-element.js +1 -1
- package/dist/default/ui/error-dialog/error-dialog-element.js +1 -1
- package/dist/default/ui/fullscreen-button/fullscreen-button-element.js +1 -1
- package/dist/default/ui/mute-button/mute-button-element.js +1 -1
- package/dist/default/ui/pip-button/pip-button-element.js +1 -1
- package/dist/default/ui/play-button/play-button-element.js +1 -1
- package/dist/default/ui/playback-rate-button/playback-rate-button-element.js +1 -1
- package/dist/default/ui/popover/popover-element.js +1 -1
- package/dist/default/ui/poster/poster-element.js +1 -1
- package/dist/default/ui/seek-button/seek-button-element.js +1 -1
- package/dist/default/ui/slider/slider-element.js +1 -1
- package/dist/default/ui/thumbnail/thumbnail-element.js +1 -1
- package/dist/default/ui/time/time-element.js +1 -1
- package/dist/default/ui/time-slider/time-slider-element.js +1 -1
- package/dist/default/ui/tooltip/tooltip-element.js +1 -1
- package/dist/default/ui/tooltip/tooltip-group-element.js +1 -1
- package/dist/default/ui/volume-slider/volume-slider-element.js +1 -1
- package/dist/dev/index.d.ts +1 -2
- package/dist/dev/index.js +1 -2
- package/dist/dev/media/dash-video/index.d.ts +12 -6
- package/dist/dev/media/dash-video/index.d.ts.map +1 -1
- package/dist/dev/media/dash-video/index.js +3 -12
- package/dist/dev/media/dash-video/index.js.map +1 -1
- package/dist/dev/media/hls-video/index.d.ts +12 -4
- package/dist/dev/media/hls-video/index.d.ts.map +1 -1
- package/dist/dev/media/hls-video/index.js +10 -10
- package/dist/dev/media/hls-video/index.js.map +1 -1
- package/dist/dev/media/mux-audio/index.d.ts +12 -4
- package/dist/dev/media/mux-audio/index.d.ts.map +1 -1
- package/dist/dev/media/mux-audio/index.js +10 -10
- package/dist/dev/media/mux-audio/index.js.map +1 -1
- package/dist/dev/media/mux-video/index.d.ts +12 -4
- package/dist/dev/media/mux-video/index.d.ts.map +1 -1
- package/dist/dev/media/mux-video/index.js +10 -10
- package/dist/dev/media/mux-video/index.js.map +1 -1
- package/dist/dev/media/native-hls-video/index.d.ts +12 -6
- package/dist/dev/media/native-hls-video/index.d.ts.map +1 -1
- package/dist/dev/media/native-hls-video/index.js +3 -12
- package/dist/dev/media/native-hls-video/index.js.map +1 -1
- package/dist/dev/media/simple-hls-video/index.d.ts +12 -5
- package/dist/dev/media/simple-hls-video/index.d.ts.map +1 -1
- package/dist/dev/media/simple-hls-video/index.js +3 -9
- package/dist/dev/media/simple-hls-video/index.js.map +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-description-element.d.ts +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-element.js +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-title-element.d.ts +1 -1
- package/dist/dev/ui/buffering-indicator/buffering-indicator-element.js +1 -1
- package/dist/dev/ui/captions-button/captions-button-element.d.ts +1 -1
- package/dist/dev/ui/captions-button/captions-button-element.js +1 -1
- package/dist/dev/ui/context-part-element.d.ts +1 -1
- package/dist/dev/ui/controls/controls-element.js +1 -1
- package/dist/dev/ui/controls/controls-group-element.d.ts +1 -1
- package/dist/dev/ui/error-dialog/error-dialog-element.js +1 -1
- package/dist/dev/ui/fullscreen-button/fullscreen-button-element.d.ts +1 -1
- package/dist/dev/ui/fullscreen-button/fullscreen-button-element.js +1 -1
- package/dist/dev/ui/media-button-element.d.ts +1 -1
- package/dist/dev/ui/media-ui-element.d.ts +1 -1
- package/dist/dev/ui/mute-button/mute-button-element.d.ts +1 -1
- package/dist/dev/ui/mute-button/mute-button-element.js +1 -1
- package/dist/dev/ui/pip-button/pip-button-element.d.ts +1 -1
- package/dist/dev/ui/pip-button/pip-button-element.js +1 -1
- package/dist/dev/ui/play-button/play-button-element.d.ts +1 -1
- package/dist/dev/ui/play-button/play-button-element.js +1 -1
- package/dist/dev/ui/playback-rate-button/playback-rate-button-element.d.ts +1 -1
- package/dist/dev/ui/playback-rate-button/playback-rate-button-element.js +1 -1
- package/dist/dev/ui/popover/popover-element.d.ts +1 -1
- package/dist/dev/ui/popover/popover-element.js +1 -1
- package/dist/dev/ui/poster/poster-element.d.ts +1 -1
- package/dist/dev/ui/poster/poster-element.js +1 -1
- package/dist/dev/ui/seek-button/seek-button-element.d.ts +1 -1
- package/dist/dev/ui/seek-button/seek-button-element.js +1 -1
- package/dist/dev/ui/slider/context.d.ts +1 -1
- package/dist/dev/ui/slider/slider-buffer-element.d.ts +1 -1
- package/dist/dev/ui/slider/slider-element.d.ts +1 -1
- package/dist/dev/ui/slider/slider-element.js +1 -1
- package/dist/dev/ui/slider/slider-fill-element.d.ts +1 -1
- package/dist/dev/ui/slider/slider-track-element.d.ts +1 -1
- package/dist/dev/ui/thumbnail/thumbnail-element.d.ts +1 -1
- package/dist/dev/ui/thumbnail/thumbnail-element.js +1 -1
- package/dist/dev/ui/time/time-element.d.ts +1 -1
- package/dist/dev/ui/time/time-element.js +1 -1
- package/dist/dev/ui/time-slider/time-slider-element.d.ts +1 -1
- package/dist/dev/ui/time-slider/time-slider-element.js +1 -1
- package/dist/dev/ui/tooltip/tooltip-element.d.ts +1 -1
- package/dist/dev/ui/tooltip/tooltip-element.js +1 -1
- package/dist/dev/ui/tooltip/tooltip-group-element.js +1 -1
- package/dist/dev/ui/volume-slider/volume-slider-element.d.ts +1 -1
- package/dist/dev/ui/volume-slider/volume-slider-element.js +1 -1
- package/package.json +8 -8
- package/cdn/compounds-Df_1JbZD.js +0 -8
- package/cdn/compounds-VFPcCeRV.js.map +0 -1
- package/cdn/create-player-CyG77t-m.js.map +0 -1
- package/cdn/create-player-Gom2ZZe3.js +0 -7
- package/cdn/create-player-Gom2ZZe3.js.map +0 -1
- package/cdn/hls-BAbdl84H.js +0 -41
- package/cdn/hls-BAbdl84H.js.map +0 -1
- package/cdn/hls-BrzPpueW.js.map +0 -1
- package/cdn/media-attach-mixin-CMH1ziXP.js.map +0 -1
- package/cdn/media-attach-mixin-DUzmXEJ3.js +0 -2
- package/cdn/media-attach-mixin-DUzmXEJ3.js.map +0 -1
- package/cdn/media-props-mixin-hheRmkup.js +0 -432
- package/cdn/media-props-mixin-hheRmkup.js.map +0 -1
- package/cdn/media-props-mixin-yRWj8yXF.js +0 -47
- package/cdn/media-props-mixin-yRWj8yXF.js.map +0 -1
- package/cdn/minimal-ui-B3BBK5nX.js +0 -2
- package/cdn/minimal-ui-DOePmQfq.js +0 -2
- package/cdn/mux-DGgCyz_A.js.map +0 -1
- package/cdn/mux-fYfPUpq3.js +0 -25
- package/cdn/mux-fYfPUpq3.js.map +0 -1
- package/cdn/native-hls-BuCYu7Rd.js.map +0 -1
- package/cdn/native-hls-DnqJ-0zL.js +0 -2
- package/cdn/native-hls-DnqJ-0zL.js.map +0 -1
- package/cdn/player-Cu5_r0Gk.js +0 -2
- package/cdn/ui-DWoV_Da1.js +0 -2
- package/cdn/ui-DXtTKomo.js +0 -2
- package/dist/default/utils/media-props-mixin.js +0 -44
- package/dist/default/utils/media-props-mixin.js.map +0 -1
- package/dist/dev/utils/media-props-mixin.js +0 -44
- package/dist/dev/utils/media-props-mixin.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { C as selectVolume, S as selectTime, _ as selectFullscreen, b as selectPlaybackRate, g as createHotkey, v as selectPiP, x as selectTextTrack, y as selectPlayback } from "./compounds-
|
|
2
|
-
import { A as ContextConsumer, C as isFunction, E as isUndefined, O as MediaElement, _ as getGestureCoordinator, n as PlayerController } from "./create-player-
|
|
3
|
-
import { r as playerContext, t as containerContext } from "./context-
|
|
1
|
+
import { C as selectVolume, S as selectTime, _ as selectFullscreen, b as selectPlaybackRate, g as createHotkey, v as selectPiP, x as selectTextTrack, y as selectPlayback } from "./compounds-CM_NP-ej.js";
|
|
2
|
+
import { A as ContextConsumer, C as isFunction, E as isUndefined, O as MediaElement, _ as getGestureCoordinator, n as PlayerController } from "./create-player-Bi6WUwDZ.js";
|
|
3
|
+
import { r as playerContext, t as containerContext } from "./context-0rI_P6jf.js";
|
|
4
4
|
|
|
5
5
|
//#region ../core/dist/dev/dom/gesture/actions.js
|
|
6
6
|
/** Actions that need custom logic beyond `store.state[action]()`. */
|
|
@@ -46,7 +46,7 @@ function resolveGestureAction(name) {
|
|
|
46
46
|
|
|
47
47
|
//#endregion
|
|
48
48
|
//#region ../core/dist/dev/dom/gesture/tap.js
|
|
49
|
-
const DOUBLETAP_WINDOW =
|
|
49
|
+
const DOUBLETAP_WINDOW = 200;
|
|
50
50
|
/**
|
|
51
51
|
* Recognizes tap vs doubletap from quick pointer-up events.
|
|
52
52
|
*
|
|
@@ -366,4 +366,4 @@ var HotkeyElement = class extends MediaElement {
|
|
|
366
366
|
|
|
367
367
|
//#endregion
|
|
368
368
|
export { GestureElement as n, HotkeyElement as t };
|
|
369
|
-
//# sourceMappingURL=hotkey-element-
|
|
369
|
+
//# sourceMappingURL=hotkey-element-317kwVH5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hotkey-element-Dlta37Be.js","names":["#lastTapTime","#clearTimer","#tapTimer","#player","#container","#register","#unregister","#cleanup","#player","#container","#register","#unregister","#cleanup"],"sources":["../../core/dist/dev/dom/gesture/actions.js","../../core/dist/dev/dom/gesture/tap.js","../../core/dist/dev/dom/gesture/create-tap-gesture.js","../../core/dist/dev/dom/hotkey/actions.js","../src/ui/gesture/gesture-element.ts","../src/ui/hotkey/hotkey-element.ts"],"sourcesContent":["import { selectPlaybackRate, selectTime, selectVolume } from \"../store/selectors.js\";\nimport { isFunction, isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/gesture/actions.ts\n/** Actions that need custom logic beyond `store.state[action]()`. */\nconst GESTURE_ACTION_OVERRIDES = {\n\tseekStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst time = selectTime(store.state);\n\t\tif (!time) return;\n\t\ttime.seek(time.currentTime + value);\n\t},\n\tvolumeStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst vol = selectVolume(store.state);\n\t\tif (!vol) return;\n\t\tvol.setVolume(vol.volume + value);\n\t},\n\tspeedUp({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx < 0 || idx >= playbackRates.length - 1 ? 0 : idx + 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tspeedDown({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx <= 0 ? playbackRates.length - 1 : idx - 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t}\n};\nfunction resolveGestureAction(name) {\n\tconst override = GESTURE_ACTION_OVERRIDES[name];\n\tif (override) return override;\n\treturn ({ store }) => {\n\t\tconst method = store.state[name];\n\t\tif (isFunction(method)) method();\n\t\telse console.warn(`[vjs-gesture] Unknown action: \"${name}\"`);\n\t};\n}\n//#endregion\nexport { resolveGestureAction };\n\n//# sourceMappingURL=actions.js.map","//#region src/dom/gesture/tap.ts\nconst DOUBLETAP_WINDOW = 300;\n/**\n* Recognizes tap vs doubletap from quick pointer-up events.\n*\n* Stateful recognizer — tracks tap count and doubletap timing.\n* The coordinator handles pointer-down timing (tap threshold) and\n* calls `handleUp()` only for quick taps that passed the threshold check.\n*/\nvar TapRecognizer = class {\n\t#lastTapTime = 0;\n\t#tapTimer = null;\n\thandleUp(matches, event) {\n\t\tif (matches.resolve(\"doubletap\").length > 0) {\n\t\t\tconst now = Date.now();\n\t\t\tif (now - this.#lastTapTime < DOUBLETAP_WINDOW) {\n\t\t\t\tthis.#clearTimer();\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"doubletap\")[0]?.onActivate(event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#lastTapTime = now;\n\t\t\tthis.#clearTimer();\n\t\t\tthis.#tapTimer = setTimeout(() => {\n\t\t\t\tthis.#tapTimer = null;\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t\t\t}, DOUBLETAP_WINDOW);\n\t\t\treturn;\n\t\t}\n\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t}\n\t#clearTimer() {\n\t\tif (this.#tapTimer !== null) {\n\t\t\tclearTimeout(this.#tapTimer);\n\t\t\tthis.#tapTimer = null;\n\t\t}\n\t}\n\treset() {\n\t\tthis.#clearTimer();\n\t\tthis.#lastTapTime = 0;\n\t}\n};\n//#endregion\nexport { TapRecognizer };\n\n//# sourceMappingURL=tap.js.map","import { getGestureCoordinator } from \"./coordinator.js\";\nimport { TapRecognizer } from \"./tap.js\";\n//#region src/dom/gesture/create-tap-gesture.ts\nconst recognizers = /* @__PURE__ */ new WeakMap();\nfunction getRecognizer(target) {\n\tlet recognizer = recognizers.get(target);\n\tif (recognizer) return recognizer;\n\trecognizer = new TapRecognizer();\n\trecognizers.set(target, recognizer);\n\treturn recognizer;\n}\n/**\n* Register a tap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createTapGesture(container, (event) => {\n* store.paused ? store.play() : store.pause();\n* }, { pointer: 'mouse' });\n* ```\n*/\nfunction createTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"tap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action\n\t});\n}\n/**\n* Register a doubletap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createDoubleTapGesture(container, (event) => {\n* store.fullscreen ? store.exitFullscreen() : store.requestFullscreen();\n* }, { region: 'center' });\n* ```\n*/\nfunction createDoubleTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"doubletap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action\n\t});\n}\n//#endregion\nexport { createDoubleTapGesture, createTapGesture };\n\n//# sourceMappingURL=create-tap-gesture.js.map","import { selectFullscreen, selectPiP, selectPlayback, selectPlaybackRate, selectTextTrack, selectTime, selectVolume } from \"../store/selectors.js\";\nimport { isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/hotkey/actions.ts\nfunction isHotkeyToggleAction(action) {\n\treturn action.startsWith(\"toggle\");\n}\nconst HOTKEY_ACTIONS = {\n\ttogglePaused({ store }) {\n\t\tconst playback = selectPlayback(store.state);\n\t\tif (!playback) return;\n\t\tplayback.paused ? playback.play() : playback.pause();\n\t},\n\ttoggleMuted({ store }) {\n\t\tselectVolume(store.state)?.toggleMuted();\n\t},\n\ttoggleFullscreen({ store }) {\n\t\tconst fs = selectFullscreen(store.state);\n\t\tif (!fs) return;\n\t\tfs.fullscreen ? fs.exitFullscreen() : fs.requestFullscreen();\n\t},\n\ttoggleSubtitles({ store }) {\n\t\tselectTextTrack(store.state)?.toggleSubtitles();\n\t},\n\ttogglePictureInPicture({ store }) {\n\t\tconst pip = selectPiP(store.state);\n\t\tif (!pip) return;\n\t\tpip.pip ? pip.exitPictureInPicture() : pip.requestPictureInPicture();\n\t},\n\tseekStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst time = selectTime(store.state);\n\t\tif (!time) return;\n\t\ttime.seek(time.currentTime + value);\n\t},\n\tvolumeStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst vol = selectVolume(store.state);\n\t\tif (!vol) return;\n\t\tvol.setVolume(vol.volume + value);\n\t},\n\tspeedUp({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx < 0 || idx >= playbackRates.length - 1 ? 0 : idx + 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tspeedDown({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx <= 0 ? playbackRates.length - 1 : idx - 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tseekToPercent({ store, value, key }) {\n\t\tconst time = selectTime(store.state);\n\t\tif (!time || time.duration <= 0) return;\n\t\tlet percent;\n\t\tif (!isUndefined(value)) percent = value;\n\t\telse if (key >= \"0\" && key <= \"9\") percent = Number(key) * 10;\n\t\telse return;\n\t\ttime.seek(percent / 100 * time.duration);\n\t}\n};\nfunction resolveHotkeyAction(name) {\n\tconst resolver = HOTKEY_ACTIONS[name];\n\tif (!resolver) console.warn(`[vjs-hotkey] Unknown action: \"${name}\"`);\n\treturn resolver;\n}\n//#endregion\nexport { isHotkeyToggleAction, resolveHotkeyAction };\n\n//# sourceMappingURL=actions.js.map","import {\n createDoubleTapGesture,\n createTapGesture,\n type GestureActionName,\n type GesturePointerType,\n type GestureRegion,\n resolveGestureAction,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class GestureElement extends MediaElement {\n static readonly tagName = 'media-gesture';\n\n static override properties: PropertyDeclarationMap = {\n type: { type: String },\n action: { type: String },\n value: { type: Number },\n pointer: { type: String },\n region: { type: String },\n disabled: { type: Boolean },\n };\n\n type: 'tap' | 'doubletap' | (string & {}) = '';\n action: GestureActionName | (string & {}) = '';\n value: number | undefined = undefined;\n pointer: GesturePointerType | undefined = undefined;\n region: GestureRegion | undefined = undefined;\n disabled = false;\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.type || !this.action || !store || !container) return;\n\n const resolver = resolveGestureAction(this.action);\n if (!resolver) return;\n\n const { value } = this;\n\n const onActivate = (event: PointerEvent) => {\n resolver({ store, value, event });\n };\n\n const options = {\n pointer: this.pointer,\n region: this.region,\n disabled: this.disabled,\n action: this.action,\n };\n\n if (this.type === 'doubletap') {\n this.#cleanup = createDoubleTapGesture(container, onActivate, options);\n } else {\n this.#cleanup = createTapGesture(container, onActivate, options);\n }\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n","import { createHotkey, type HotkeyActionName, isHotkeyToggleAction, resolveHotkeyAction } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class HotkeyElement extends MediaElement {\n static readonly tagName = 'media-hotkey';\n\n static override properties: PropertyDeclarationMap = {\n keys: { type: String },\n action: { type: String },\n value: { type: Number },\n disabled: { type: Boolean },\n target: { type: String },\n };\n\n keys = '';\n action: HotkeyActionName | (string & {}) = '';\n value: number | undefined = undefined;\n disabled = false;\n target: 'player' | 'document' = 'player';\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.keys || !this.action || !store || !container) return;\n\n const resolver = resolveHotkeyAction(this.action);\n if (!resolver) return;\n\n const { value, action } = this;\n\n this.#cleanup = createHotkey(container, {\n keys: this.keys,\n action,\n target: this.target,\n disabled: this.disabled,\n repeatable: !isHotkeyToggleAction(action),\n onActivate: (_event, key) => {\n resolver({ store, key, value });\n },\n });\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":";;;;;;AAIA,MAAM,2BAA2B;CAChC,SAAS,EAAE,OAAO,SAAS;AAC1B,MAAI,YAAY,MAAM,CAAE;EACxB,MAAM,OAAO,WAAW,MAAM,MAAM;AACpC,MAAI,CAAC,KAAM;AACX,OAAK,KAAK,KAAK,cAAc,MAAM;;CAEpC,WAAW,EAAE,OAAO,SAAS;AAC5B,MAAI,YAAY,MAAM,CAAE;EACxB,MAAM,MAAM,aAAa,MAAM,MAAM;AACrC,MAAI,CAAC,IAAK;AACV,MAAI,UAAU,IAAI,SAAS,MAAM;;CAElC,QAAQ,EAAE,SAAS;EAClB,MAAM,OAAO,mBAAmB,MAAM,MAAM;AAC5C,MAAI,CAAC,KAAM;EACX,MAAM,EAAE,eAAe,iBAAiB;EACxC,MAAM,MAAM,cAAc,QAAQ,aAAa;EAC/C,MAAM,OAAO,MAAM,KAAK,OAAO,cAAc,SAAS,IAAI,IAAI,MAAM;AACpE,OAAK,gBAAgB,cAAc,MAAM;;CAE1C,UAAU,EAAE,SAAS;EACpB,MAAM,OAAO,mBAAmB,MAAM,MAAM;AAC5C,MAAI,CAAC,KAAM;EACX,MAAM,EAAE,eAAe,iBAAiB;EACxC,MAAM,MAAM,cAAc,QAAQ,aAAa;EAC/C,MAAM,OAAO,OAAO,IAAI,cAAc,SAAS,IAAI,MAAM;AACzD,OAAK,gBAAgB,cAAc,MAAM;;CAE1C;AACD,SAAS,qBAAqB,MAAM;CACnC,MAAM,WAAW,yBAAyB;AAC1C,KAAI,SAAU,QAAO;AACrB,SAAQ,EAAE,YAAY;EACrB,MAAM,SAAS,MAAM,MAAM;AAC3B,MAAI,WAAW,OAAO,CAAE,SAAQ;MAC3B,SAAQ,KAAK,kCAAkC,KAAK,GAAG;;;;;;ACvC9D,MAAM,mBAAmB;;;;;;;;AAQzB,IAAI,gBAAgB,MAAM;CACzB,eAAe;CACf,YAAY;CACZ,SAAS,SAAS,OAAO;AACxB,MAAI,QAAQ,QAAQ,YAAY,CAAC,SAAS,GAAG;GAC5C,MAAM,MAAM,KAAK,KAAK;AACtB,OAAI,MAAM,MAAKA,cAAe,kBAAkB;AAC/C,UAAKC,YAAa;AAClB,UAAKD,cAAe;AACpB,YAAQ,QAAQ,YAAY,CAAC,IAAI,WAAW,MAAM;AAClD;;AAED,SAAKA,cAAe;AACpB,SAAKC,YAAa;AAClB,SAAKC,WAAY,iBAAiB;AACjC,UAAKA,WAAY;AACjB,UAAKF,cAAe;AACpB,YAAQ,QAAQ,MAAM,CAAC,IAAI,WAAW,MAAM;MAC1C,iBAAiB;AACpB;;AAED,UAAQ,QAAQ,MAAM,CAAC,IAAI,WAAW,MAAM;;CAE7C,cAAc;AACb,MAAI,MAAKE,aAAc,MAAM;AAC5B,gBAAa,MAAKA,SAAU;AAC5B,SAAKA,WAAY;;;CAGnB,QAAQ;AACP,QAAKD,YAAa;AAClB,QAAKD,cAAe;;;;;;ACrCtB,MAAM,8BAA8B,IAAI,SAAS;AACjD,SAAS,cAAc,QAAQ;CAC9B,IAAI,aAAa,YAAY,IAAI,OAAO;AACxC,KAAI,WAAY,QAAO;AACvB,cAAa,IAAI,eAAe;AAChC,aAAY,IAAI,QAAQ,WAAW;AACnC,QAAO;;;;;;;;;;;;AAYR,SAAS,iBAAiB,QAAQ,YAAY,SAAS;AACtD,QAAO,sBAAsB,OAAO,CAAC,IAAI;EACxC,MAAM;EACN,YAAY,cAAc,OAAO;EACjC;EACA,SAAS,SAAS;EAClB,QAAQ,SAAS;EACjB,UAAU,SAAS;EACnB,QAAQ,SAAS;EACjB,CAAC;;;;;;;;;;;;AAYH,SAAS,uBAAuB,QAAQ,YAAY,SAAS;AAC5D,QAAO,sBAAsB,OAAO,CAAC,IAAI;EACxC,MAAM;EACN,YAAY,cAAc,OAAO;EACjC;EACA,SAAS,SAAS;EAClB,QAAQ,SAAS;EACjB,UAAU,SAAS;EACnB,QAAQ,SAAS;EACjB,CAAC;;;;;AChDH,SAAS,qBAAqB,QAAQ;AACrC,QAAO,OAAO,WAAW,SAAS;;AAEnC,MAAM,iBAAiB;CACtB,aAAa,EAAE,SAAS;EACvB,MAAM,WAAW,eAAe,MAAM,MAAM;AAC5C,MAAI,CAAC,SAAU;AACf,WAAS,SAAS,SAAS,MAAM,GAAG,SAAS,OAAO;;CAErD,YAAY,EAAE,SAAS;AACtB,eAAa,MAAM,MAAM,EAAE,aAAa;;CAEzC,iBAAiB,EAAE,SAAS;EAC3B,MAAM,KAAK,iBAAiB,MAAM,MAAM;AACxC,MAAI,CAAC,GAAI;AACT,KAAG,aAAa,GAAG,gBAAgB,GAAG,GAAG,mBAAmB;;CAE7D,gBAAgB,EAAE,SAAS;AAC1B,kBAAgB,MAAM,MAAM,EAAE,iBAAiB;;CAEhD,uBAAuB,EAAE,SAAS;EACjC,MAAM,MAAM,UAAU,MAAM,MAAM;AAClC,MAAI,CAAC,IAAK;AACV,MAAI,MAAM,IAAI,sBAAsB,GAAG,IAAI,yBAAyB;;CAErE,SAAS,EAAE,OAAO,SAAS;AAC1B,MAAI,YAAY,MAAM,CAAE;EACxB,MAAM,OAAO,WAAW,MAAM,MAAM;AACpC,MAAI,CAAC,KAAM;AACX,OAAK,KAAK,KAAK,cAAc,MAAM;;CAEpC,WAAW,EAAE,OAAO,SAAS;AAC5B,MAAI,YAAY,MAAM,CAAE;EACxB,MAAM,MAAM,aAAa,MAAM,MAAM;AACrC,MAAI,CAAC,IAAK;AACV,MAAI,UAAU,IAAI,SAAS,MAAM;;CAElC,QAAQ,EAAE,SAAS;EAClB,MAAM,OAAO,mBAAmB,MAAM,MAAM;AAC5C,MAAI,CAAC,KAAM;EACX,MAAM,EAAE,eAAe,iBAAiB;EACxC,MAAM,MAAM,cAAc,QAAQ,aAAa;EAC/C,MAAM,OAAO,MAAM,KAAK,OAAO,cAAc,SAAS,IAAI,IAAI,MAAM;AACpE,OAAK,gBAAgB,cAAc,MAAM;;CAE1C,UAAU,EAAE,SAAS;EACpB,MAAM,OAAO,mBAAmB,MAAM,MAAM;AAC5C,MAAI,CAAC,KAAM;EACX,MAAM,EAAE,eAAe,iBAAiB;EACxC,MAAM,MAAM,cAAc,QAAQ,aAAa;EAC/C,MAAM,OAAO,OAAO,IAAI,cAAc,SAAS,IAAI,MAAM;AACzD,OAAK,gBAAgB,cAAc,MAAM;;CAE1C,cAAc,EAAE,OAAO,OAAO,OAAO;EACpC,MAAM,OAAO,WAAW,MAAM,MAAM;AACpC,MAAI,CAAC,QAAQ,KAAK,YAAY,EAAG;EACjC,IAAI;AACJ,MAAI,CAAC,YAAY,MAAM,CAAE,WAAU;WAC1B,OAAO,OAAO,OAAO,IAAK,WAAU,OAAO,IAAI,GAAG;MACtD;AACL,OAAK,KAAK,UAAU,MAAM,KAAK,SAAS;;CAEzC;AACD,SAAS,oBAAoB,MAAM;CAClC,MAAM,WAAW,eAAe;AAChC,KAAI,CAAC,SAAU,SAAQ,KAAK,iCAAiC,KAAK,GAAG;AACrE,QAAO;;;;;ACtDR,IAAa,iBAAb,cAAoC,aAAa;;;cAYH;gBACA;eAChB;iBACc;gBACN;kBACzB;;;iBAhBe;;;oBAE2B;GACnD,MAAM,EAAE,MAAM,QAAQ;GACtB,QAAQ,EAAE,MAAM,QAAQ;GACxB,OAAO,EAAE,MAAM,QAAQ;GACvB,SAAS,EAAE,MAAM,QAAQ;GACzB,QAAQ,EAAE,MAAM,QAAQ;GACxB,UAAU,EAAE,MAAM,SAAS;GAC5B;;CASD,CAASG,SAAU,IAAI,iBAAiB,MAAM,cAAc;CAC5D,CAASC,YAAa,IAAI,gBAAgB,MAAM;EAC9C,SAAS;EACT,gBAAgB,KAAK,eAAe;EACpC,WAAW;EACZ,CAAC;CACF,WAAgC;CAEhC,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AACzB,OAAK,MAAM,UAAU;AACrB,QAAKC,UAAW;;CAGlB,AAAS,uBAA6B;AACpC,QAAM,sBAAsB;AAC5B,QAAKC,YAAa;;CAGpB,AAAmB,OAAO,SAA+B;AACvD,QAAM,OAAO,QAAQ;AAGrB,MAAI,KAAK,aAAa;AACpB,SAAKA,YAAa;AAClB,SAAKD,UAAW;;;CAIpB,YAAkB;EAChB,MAAM,QAAQ,MAAKF,OAAQ;EAC3B,MAAM,YAAY,MAAKC,UAAW,OAAO;AACzC,MAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU,CAAC,SAAS,CAAC,UAAW;EAExD,MAAM,WAAW,qBAAqB,KAAK,OAAO;AAClD,MAAI,CAAC,SAAU;EAEf,MAAM,EAAE,UAAU;EAElB,MAAM,cAAc,UAAwB;AAC1C,YAAS;IAAE;IAAO;IAAO;IAAO,CAAC;;EAGnC,MAAM,UAAU;GACd,SAAS,KAAK;GACd,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,QAAQ,KAAK;GACd;AAED,MAAI,KAAK,SAAS,YAChB,OAAKG,UAAW,uBAAuB,WAAW,YAAY,QAAQ;MAEtE,OAAKA,UAAW,iBAAiB,WAAW,YAAY,QAAQ;;CAIpE,cAAoB;AAClB,QAAKA,WAAY;AACjB,QAAKA,UAAW;;;;;;ACrFpB,IAAa,gBAAb,cAAmC,aAAa;;;cAWvC;gBACoC;eACf;kBACjB;gBACqB;;;iBAdN;;;oBAE2B;GACnD,MAAM,EAAE,MAAM,QAAQ;GACtB,QAAQ,EAAE,MAAM,QAAQ;GACxB,OAAO,EAAE,MAAM,QAAQ;GACvB,UAAU,EAAE,MAAM,SAAS;GAC3B,QAAQ,EAAE,MAAM,QAAQ;GACzB;;CAQD,CAASC,SAAU,IAAI,iBAAiB,MAAM,cAAc;CAC5D,CAASC,YAAa,IAAI,gBAAgB,MAAM;EAC9C,SAAS;EACT,gBAAgB,KAAK,eAAe;EACpC,WAAW;EACZ,CAAC;CACF,WAAgC;CAEhC,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AACzB,OAAK,MAAM,UAAU;AACrB,QAAKC,UAAW;;CAGlB,AAAS,uBAA6B;AACpC,QAAM,sBAAsB;AAC5B,QAAKC,YAAa;;CAGpB,AAAmB,OAAO,SAA+B;AACvD,QAAM,OAAO,QAAQ;AAGrB,MAAI,KAAK,aAAa;AACpB,SAAKA,YAAa;AAClB,SAAKD,UAAW;;;CAIpB,YAAkB;EAChB,MAAM,QAAQ,MAAKF,OAAQ;EAC3B,MAAM,YAAY,MAAKC,UAAW,OAAO;AACzC,MAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU,CAAC,SAAS,CAAC,UAAW;EAExD,MAAM,WAAW,oBAAoB,KAAK,OAAO;AACjD,MAAI,CAAC,SAAU;EAEf,MAAM,EAAE,OAAO,WAAW;AAE1B,QAAKG,UAAW,aAAa,WAAW;GACtC,MAAM,KAAK;GACX;GACA,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,YAAY,CAAC,qBAAqB,OAAO;GACzC,aAAa,QAAQ,QAAQ;AAC3B,aAAS;KAAE;KAAO;KAAK;KAAO,CAAC;;GAElC,CAAC;;CAGJ,cAAoB;AAClB,QAAKA,WAAY;AACjB,QAAKA,UAAW"}
|
|
1
|
+
{"version":3,"file":"hotkey-element-317kwVH5.js","names":["#lastTapTime","#clearTimer","#tapTimer","#player","#container","#register","#unregister","#cleanup","#player","#container","#register","#unregister","#cleanup"],"sources":["../../core/dist/dev/dom/gesture/actions.js","../../core/dist/dev/dom/gesture/tap.js","../../core/dist/dev/dom/gesture/create-tap-gesture.js","../../core/dist/dev/dom/hotkey/actions.js","../src/ui/gesture/gesture-element.ts","../src/ui/hotkey/hotkey-element.ts"],"sourcesContent":["import { selectPlaybackRate, selectTime, selectVolume } from \"../store/selectors.js\";\nimport { isFunction, isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/gesture/actions.ts\n/** Actions that need custom logic beyond `store.state[action]()`. */\nconst GESTURE_ACTION_OVERRIDES = {\n\tseekStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst time = selectTime(store.state);\n\t\tif (!time) return;\n\t\ttime.seek(time.currentTime + value);\n\t},\n\tvolumeStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst vol = selectVolume(store.state);\n\t\tif (!vol) return;\n\t\tvol.setVolume(vol.volume + value);\n\t},\n\tspeedUp({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx < 0 || idx >= playbackRates.length - 1 ? 0 : idx + 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tspeedDown({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx <= 0 ? playbackRates.length - 1 : idx - 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t}\n};\nfunction resolveGestureAction(name) {\n\tconst override = GESTURE_ACTION_OVERRIDES[name];\n\tif (override) return override;\n\treturn ({ store }) => {\n\t\tconst method = store.state[name];\n\t\tif (isFunction(method)) method();\n\t\telse console.warn(`[vjs-gesture] Unknown action: \"${name}\"`);\n\t};\n}\n//#endregion\nexport { resolveGestureAction };\n\n//# sourceMappingURL=actions.js.map","//#region src/dom/gesture/tap.ts\nconst DOUBLETAP_WINDOW = 200;\n/**\n* Recognizes tap vs doubletap from quick pointer-up events.\n*\n* Stateful recognizer — tracks tap count and doubletap timing.\n* The coordinator handles pointer-down timing (tap threshold) and\n* calls `handleUp()` only for quick taps that passed the threshold check.\n*/\nvar TapRecognizer = class {\n\t#lastTapTime = 0;\n\t#tapTimer = null;\n\thandleUp(matches, event) {\n\t\tif (matches.resolve(\"doubletap\").length > 0) {\n\t\t\tconst now = Date.now();\n\t\t\tif (now - this.#lastTapTime < DOUBLETAP_WINDOW) {\n\t\t\t\tthis.#clearTimer();\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"doubletap\")[0]?.onActivate(event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#lastTapTime = now;\n\t\t\tthis.#clearTimer();\n\t\t\tthis.#tapTimer = setTimeout(() => {\n\t\t\t\tthis.#tapTimer = null;\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t\t\t}, DOUBLETAP_WINDOW);\n\t\t\treturn;\n\t\t}\n\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t}\n\t#clearTimer() {\n\t\tif (this.#tapTimer !== null) {\n\t\t\tclearTimeout(this.#tapTimer);\n\t\t\tthis.#tapTimer = null;\n\t\t}\n\t}\n\treset() {\n\t\tthis.#clearTimer();\n\t\tthis.#lastTapTime = 0;\n\t}\n};\n//#endregion\nexport { TapRecognizer };\n\n//# sourceMappingURL=tap.js.map","import { getGestureCoordinator } from \"./coordinator.js\";\nimport { TapRecognizer } from \"./tap.js\";\n//#region src/dom/gesture/create-tap-gesture.ts\nconst recognizers = /* @__PURE__ */ new WeakMap();\nfunction getRecognizer(target) {\n\tlet recognizer = recognizers.get(target);\n\tif (recognizer) return recognizer;\n\trecognizer = new TapRecognizer();\n\trecognizers.set(target, recognizer);\n\treturn recognizer;\n}\n/**\n* Register a tap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createTapGesture(container, (event) => {\n* store.paused ? store.play() : store.pause();\n* }, { pointer: 'mouse' });\n* ```\n*/\nfunction createTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"tap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action\n\t});\n}\n/**\n* Register a doubletap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createDoubleTapGesture(container, (event) => {\n* store.fullscreen ? store.exitFullscreen() : store.requestFullscreen();\n* }, { region: 'center' });\n* ```\n*/\nfunction createDoubleTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"doubletap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action\n\t});\n}\n//#endregion\nexport { createDoubleTapGesture, createTapGesture };\n\n//# sourceMappingURL=create-tap-gesture.js.map","import { selectFullscreen, selectPiP, selectPlayback, selectPlaybackRate, selectTextTrack, selectTime, selectVolume } from \"../store/selectors.js\";\nimport { isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/hotkey/actions.ts\nfunction isHotkeyToggleAction(action) {\n\treturn action.startsWith(\"toggle\");\n}\nconst HOTKEY_ACTIONS = {\n\ttogglePaused({ store }) {\n\t\tconst playback = selectPlayback(store.state);\n\t\tif (!playback) return;\n\t\tplayback.paused ? playback.play() : playback.pause();\n\t},\n\ttoggleMuted({ store }) {\n\t\tselectVolume(store.state)?.toggleMuted();\n\t},\n\ttoggleFullscreen({ store }) {\n\t\tconst fs = selectFullscreen(store.state);\n\t\tif (!fs) return;\n\t\tfs.fullscreen ? fs.exitFullscreen() : fs.requestFullscreen();\n\t},\n\ttoggleSubtitles({ store }) {\n\t\tselectTextTrack(store.state)?.toggleSubtitles();\n\t},\n\ttogglePictureInPicture({ store }) {\n\t\tconst pip = selectPiP(store.state);\n\t\tif (!pip) return;\n\t\tpip.pip ? pip.exitPictureInPicture() : pip.requestPictureInPicture();\n\t},\n\tseekStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst time = selectTime(store.state);\n\t\tif (!time) return;\n\t\ttime.seek(time.currentTime + value);\n\t},\n\tvolumeStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst vol = selectVolume(store.state);\n\t\tif (!vol) return;\n\t\tvol.setVolume(vol.volume + value);\n\t},\n\tspeedUp({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx < 0 || idx >= playbackRates.length - 1 ? 0 : idx + 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tspeedDown({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx <= 0 ? playbackRates.length - 1 : idx - 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tseekToPercent({ store, value, key }) {\n\t\tconst time = selectTime(store.state);\n\t\tif (!time || time.duration <= 0) return;\n\t\tlet percent;\n\t\tif (!isUndefined(value)) percent = value;\n\t\telse if (key >= \"0\" && key <= \"9\") percent = Number(key) * 10;\n\t\telse return;\n\t\ttime.seek(percent / 100 * time.duration);\n\t}\n};\nfunction resolveHotkeyAction(name) {\n\tconst resolver = HOTKEY_ACTIONS[name];\n\tif (!resolver) console.warn(`[vjs-hotkey] Unknown action: \"${name}\"`);\n\treturn resolver;\n}\n//#endregion\nexport { isHotkeyToggleAction, resolveHotkeyAction };\n\n//# sourceMappingURL=actions.js.map","import {\n createDoubleTapGesture,\n createTapGesture,\n type GestureActionName,\n type GesturePointerType,\n type GestureRegion,\n resolveGestureAction,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class GestureElement extends MediaElement {\n static readonly tagName = 'media-gesture';\n\n static override properties: PropertyDeclarationMap = {\n type: { type: String },\n action: { type: String },\n value: { type: Number },\n pointer: { type: String },\n region: { type: String },\n disabled: { type: Boolean },\n };\n\n type: 'tap' | 'doubletap' | (string & {}) = '';\n action: GestureActionName | (string & {}) = '';\n value: number | undefined = undefined;\n pointer: GesturePointerType | undefined = undefined;\n region: GestureRegion | undefined = undefined;\n disabled = false;\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.type || !this.action || !store || !container) return;\n\n const resolver = resolveGestureAction(this.action);\n if (!resolver) return;\n\n const { value } = this;\n\n const onActivate = (event: PointerEvent) => {\n resolver({ store, value, event });\n };\n\n const options = {\n pointer: this.pointer,\n region: this.region,\n disabled: this.disabled,\n action: this.action,\n };\n\n if (this.type === 'doubletap') {\n this.#cleanup = createDoubleTapGesture(container, onActivate, options);\n } else {\n this.#cleanup = createTapGesture(container, onActivate, options);\n }\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n","import { createHotkey, type HotkeyActionName, isHotkeyToggleAction, resolveHotkeyAction } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class HotkeyElement extends MediaElement {\n static readonly tagName = 'media-hotkey';\n\n static override properties: PropertyDeclarationMap = {\n keys: { type: String },\n action: { type: String },\n value: { type: Number },\n disabled: { type: Boolean },\n target: { type: String },\n };\n\n keys = '';\n action: HotkeyActionName | (string & {}) = '';\n value: number | undefined = undefined;\n disabled = false;\n target: 'player' | 'document' = 'player';\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.keys || !this.action || !store || !container) return;\n\n const resolver = resolveHotkeyAction(this.action);\n if (!resolver) return;\n\n const { value, action } = this;\n\n this.#cleanup = createHotkey(container, {\n keys: this.keys,\n action,\n target: this.target,\n disabled: this.disabled,\n repeatable: !isHotkeyToggleAction(action),\n onActivate: (_event, key) => {\n resolver({ store, key, value });\n },\n });\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{S as e,_ as t,b as n,g as r,h as i,v as a,x as o,y as s}from"./compounds-
|
|
2
|
-
//# sourceMappingURL=hotkey-element-
|
|
1
|
+
import{S as e,_ as t,b as n,g as r,h as i,v as a,x as o,y as s}from"./compounds-Vvz-YfXP.js";import{A as c,C as l,E as u,O as d,_ as f,n as p}from"./create-player-CKuX8YI5.js";import{r as m,t as h}from"./context-CEFisYD0.js";const g={seekStep({store:e,value:t}){if(u(t))return;let n=o(e.state);n&&n.seek(n.currentTime+t)},volumeStep({store:t,value:n}){if(u(n))return;let r=e(t.state);r&&r.setVolume(r.volume+n)},speedUp({store:e}){let t=s(e.state);if(!t)return;let{playbackRates:n,playbackRate:r}=t,i=n.indexOf(r),a=i<0||i>=n.length-1?0:i+1;t.setPlaybackRate(n[a])},speedDown({store:e}){let t=s(e.state);if(!t)return;let{playbackRates:n,playbackRate:r}=t,i=n.indexOf(r),a=i<=0?n.length-1:i-1;t.setPlaybackRate(n[a])}};function _(e){return g[e]||(({store:t})=>{let n=t.state[e];l(n)&&n()})}var v=class{#e=0;#t=null;handleUp(e,t){if(e.resolve(`doubletap`).length>0){let n=Date.now();if(n-this.#e<200){this.#n(),this.#e=0,e.resolve(`doubletap`)[0]?.onActivate(t);return}this.#e=n,this.#n(),this.#t=setTimeout(()=>{this.#t=null,this.#e=0,e.resolve(`tap`)[0]?.onActivate(t)},200);return}e.resolve(`tap`)[0]?.onActivate(t)}#n(){this.#t!==null&&(clearTimeout(this.#t),this.#t=null)}reset(){this.#n(),this.#e=0}};const y=new WeakMap;function b(e){let t=y.get(e);return t||(t=new v,y.set(e,t),t)}function x(e,t,n){return f(e).add({type:`tap`,recognizer:b(e),onActivate:t,pointer:n?.pointer,region:n?.region,disabled:n?.disabled,action:n?.action})}function S(e,t,n){return f(e).add({type:`doubletap`,recognizer:b(e),onActivate:t,pointer:n?.pointer,region:n?.region,disabled:n?.disabled,action:n?.action})}function C(e){return e.startsWith(`toggle`)}const w={togglePaused({store:e}){let t=a(e.state);t&&(t.paused?t.play():t.pause())},toggleMuted({store:t}){e(t.state)?.toggleMuted()},toggleFullscreen({store:e}){let t=r(e.state);t&&(t.fullscreen?t.exitFullscreen():t.requestFullscreen())},toggleSubtitles({store:e}){n(e.state)?.toggleSubtitles()},togglePictureInPicture({store:e}){let n=t(e.state);n&&(n.pip?n.exitPictureInPicture():n.requestPictureInPicture())},seekStep({store:e,value:t}){if(u(t))return;let n=o(e.state);n&&n.seek(n.currentTime+t)},volumeStep({store:t,value:n}){if(u(n))return;let r=e(t.state);r&&r.setVolume(r.volume+n)},speedUp({store:e}){let t=s(e.state);if(!t)return;let{playbackRates:n,playbackRate:r}=t,i=n.indexOf(r),a=i<0||i>=n.length-1?0:i+1;t.setPlaybackRate(n[a])},speedDown({store:e}){let t=s(e.state);if(!t)return;let{playbackRates:n,playbackRate:r}=t,i=n.indexOf(r),a=i<=0?n.length-1:i-1;t.setPlaybackRate(n[a])},seekToPercent({store:e,value:t,key:n}){let r=o(e.state);if(!r||r.duration<=0)return;let i;if(!u(t))i=t;else if(n>=`0`&&n<=`9`)i=Number(n)*10;else return;r.seek(i/100*r.duration)}};function T(e){return w[e]}var E=class extends d{constructor(...e){super(...e),this.type=``,this.action=``,this.value=void 0,this.pointer=void 0,this.region=void 0,this.disabled=!1}static{this.tagName=`media-gesture`}static{this.properties={type:{type:String},action:{type:String},value:{type:Number},pointer:{type:String},region:{type:String},disabled:{type:Boolean}}}#e=new p(this,m);#t=new c(this,{context:h,callback:()=>this.requestUpdate(),subscribe:!0});#n=null;connectedCallback(){super.connectedCallback(),this.style.display=`none`,this.#r()}disconnectedCallback(){super.disconnectedCallback(),this.#i()}update(e){super.update(e),this.isConnected&&(this.#i(),this.#r())}#r(){let e=this.#e.value,t=this.#t.value?.container;if(!this.type||!this.action||!e||!t)return;let n=_(this.action);if(!n)return;let{value:r}=this,i=t=>{n({store:e,value:r,event:t})},a={pointer:this.pointer,region:this.region,disabled:this.disabled,action:this.action};this.type===`doubletap`?this.#n=S(t,i,a):this.#n=x(t,i,a)}#i(){this.#n?.(),this.#n=null}},D=class extends d{constructor(...e){super(...e),this.keys=``,this.action=``,this.value=void 0,this.disabled=!1,this.target=`player`}static{this.tagName=`media-hotkey`}static{this.properties={keys:{type:String},action:{type:String},value:{type:Number},disabled:{type:Boolean},target:{type:String}}}#e=new p(this,m);#t=new c(this,{context:h,callback:()=>this.requestUpdate(),subscribe:!0});#n=null;connectedCallback(){super.connectedCallback(),this.style.display=`none`,this.#r()}disconnectedCallback(){super.disconnectedCallback(),this.#i()}update(e){super.update(e),this.isConnected&&(this.#i(),this.#r())}#r(){let e=this.#e.value,t=this.#t.value?.container;if(!this.keys||!this.action||!e||!t)return;let n=T(this.action);if(!n)return;let{value:r,action:a}=this;this.#n=i(t,{keys:this.keys,action:a,target:this.target,disabled:this.disabled,repeatable:!C(a),onActivate:(t,i)=>{n({store:e,key:i,value:r})}})}#i(){this.#n?.(),this.#n=null}};export{E as n,D as t};
|
|
2
|
+
//# sourceMappingURL=hotkey-element-DRGCbVj9.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hotkey-element-DR3ZAqKa.js","names":["#lastTapTime","#clearTimer","#tapTimer","#player","#container","ContextConsumer","#register","#unregister","#cleanup","#player","#container","ContextConsumer","#register","#unregister","#cleanup"],"sources":["../../core/dist/default/dom/gesture/actions.js","../../core/dist/default/dom/gesture/tap.js","../../core/dist/default/dom/gesture/create-tap-gesture.js","../../core/dist/default/dom/hotkey/actions.js","../src/ui/gesture/gesture-element.ts","../src/ui/hotkey/hotkey-element.ts"],"sourcesContent":["import { selectPlaybackRate, selectTime, selectVolume } from \"../store/selectors.js\";\nimport { isFunction, isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/gesture/actions.ts\n/** Actions that need custom logic beyond `store.state[action]()`. */\nconst GESTURE_ACTION_OVERRIDES = {\n\tseekStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst time = selectTime(store.state);\n\t\tif (!time) return;\n\t\ttime.seek(time.currentTime + value);\n\t},\n\tvolumeStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst vol = selectVolume(store.state);\n\t\tif (!vol) return;\n\t\tvol.setVolume(vol.volume + value);\n\t},\n\tspeedUp({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx < 0 || idx >= playbackRates.length - 1 ? 0 : idx + 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tspeedDown({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx <= 0 ? playbackRates.length - 1 : idx - 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t}\n};\nfunction resolveGestureAction(name) {\n\tconst override = GESTURE_ACTION_OVERRIDES[name];\n\tif (override) return override;\n\treturn ({ store }) => {\n\t\tconst method = store.state[name];\n\t\tif (isFunction(method)) method();\n\t};\n}\n//#endregion\nexport { resolveGestureAction };\n\n//# sourceMappingURL=actions.js.map","//#region src/dom/gesture/tap.ts\nconst DOUBLETAP_WINDOW = 300;\n/**\n* Recognizes tap vs doubletap from quick pointer-up events.\n*\n* Stateful recognizer — tracks tap count and doubletap timing.\n* The coordinator handles pointer-down timing (tap threshold) and\n* calls `handleUp()` only for quick taps that passed the threshold check.\n*/\nvar TapRecognizer = class {\n\t#lastTapTime = 0;\n\t#tapTimer = null;\n\thandleUp(matches, event) {\n\t\tif (matches.resolve(\"doubletap\").length > 0) {\n\t\t\tconst now = Date.now();\n\t\t\tif (now - this.#lastTapTime < DOUBLETAP_WINDOW) {\n\t\t\t\tthis.#clearTimer();\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"doubletap\")[0]?.onActivate(event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#lastTapTime = now;\n\t\t\tthis.#clearTimer();\n\t\t\tthis.#tapTimer = setTimeout(() => {\n\t\t\t\tthis.#tapTimer = null;\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t\t\t}, DOUBLETAP_WINDOW);\n\t\t\treturn;\n\t\t}\n\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t}\n\t#clearTimer() {\n\t\tif (this.#tapTimer !== null) {\n\t\t\tclearTimeout(this.#tapTimer);\n\t\t\tthis.#tapTimer = null;\n\t\t}\n\t}\n\treset() {\n\t\tthis.#clearTimer();\n\t\tthis.#lastTapTime = 0;\n\t}\n};\n//#endregion\nexport { TapRecognizer };\n\n//# sourceMappingURL=tap.js.map","import { getGestureCoordinator } from \"./coordinator.js\";\nimport { TapRecognizer } from \"./tap.js\";\n//#region src/dom/gesture/create-tap-gesture.ts\nconst recognizers = /* @__PURE__ */ new WeakMap();\nfunction getRecognizer(target) {\n\tlet recognizer = recognizers.get(target);\n\tif (recognizer) return recognizer;\n\trecognizer = new TapRecognizer();\n\trecognizers.set(target, recognizer);\n\treturn recognizer;\n}\n/**\n* Register a tap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createTapGesture(container, (event) => {\n* store.paused ? store.play() : store.pause();\n* }, { pointer: 'mouse' });\n* ```\n*/\nfunction createTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"tap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action\n\t});\n}\n/**\n* Register a doubletap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createDoubleTapGesture(container, (event) => {\n* store.fullscreen ? store.exitFullscreen() : store.requestFullscreen();\n* }, { region: 'center' });\n* ```\n*/\nfunction createDoubleTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"doubletap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action\n\t});\n}\n//#endregion\nexport { createDoubleTapGesture, createTapGesture };\n\n//# sourceMappingURL=create-tap-gesture.js.map","import { selectFullscreen, selectPiP, selectPlayback, selectPlaybackRate, selectTextTrack, selectTime, selectVolume } from \"../store/selectors.js\";\nimport { isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/hotkey/actions.ts\nfunction isHotkeyToggleAction(action) {\n\treturn action.startsWith(\"toggle\");\n}\nconst HOTKEY_ACTIONS = {\n\ttogglePaused({ store }) {\n\t\tconst playback = selectPlayback(store.state);\n\t\tif (!playback) return;\n\t\tplayback.paused ? playback.play() : playback.pause();\n\t},\n\ttoggleMuted({ store }) {\n\t\tselectVolume(store.state)?.toggleMuted();\n\t},\n\ttoggleFullscreen({ store }) {\n\t\tconst fs = selectFullscreen(store.state);\n\t\tif (!fs) return;\n\t\tfs.fullscreen ? fs.exitFullscreen() : fs.requestFullscreen();\n\t},\n\ttoggleSubtitles({ store }) {\n\t\tselectTextTrack(store.state)?.toggleSubtitles();\n\t},\n\ttogglePictureInPicture({ store }) {\n\t\tconst pip = selectPiP(store.state);\n\t\tif (!pip) return;\n\t\tpip.pip ? pip.exitPictureInPicture() : pip.requestPictureInPicture();\n\t},\n\tseekStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst time = selectTime(store.state);\n\t\tif (!time) return;\n\t\ttime.seek(time.currentTime + value);\n\t},\n\tvolumeStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst vol = selectVolume(store.state);\n\t\tif (!vol) return;\n\t\tvol.setVolume(vol.volume + value);\n\t},\n\tspeedUp({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx < 0 || idx >= playbackRates.length - 1 ? 0 : idx + 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tspeedDown({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx <= 0 ? playbackRates.length - 1 : idx - 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tseekToPercent({ store, value, key }) {\n\t\tconst time = selectTime(store.state);\n\t\tif (!time || time.duration <= 0) return;\n\t\tlet percent;\n\t\tif (!isUndefined(value)) percent = value;\n\t\telse if (key >= \"0\" && key <= \"9\") percent = Number(key) * 10;\n\t\telse return;\n\t\ttime.seek(percent / 100 * time.duration);\n\t}\n};\nfunction resolveHotkeyAction(name) {\n\treturn HOTKEY_ACTIONS[name];\n}\n//#endregion\nexport { isHotkeyToggleAction, resolveHotkeyAction };\n\n//# sourceMappingURL=actions.js.map","import {\n createDoubleTapGesture,\n createTapGesture,\n type GestureActionName,\n type GesturePointerType,\n type GestureRegion,\n resolveGestureAction,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class GestureElement extends MediaElement {\n static readonly tagName = 'media-gesture';\n\n static override properties: PropertyDeclarationMap = {\n type: { type: String },\n action: { type: String },\n value: { type: Number },\n pointer: { type: String },\n region: { type: String },\n disabled: { type: Boolean },\n };\n\n type: 'tap' | 'doubletap' | (string & {}) = '';\n action: GestureActionName | (string & {}) = '';\n value: number | undefined = undefined;\n pointer: GesturePointerType | undefined = undefined;\n region: GestureRegion | undefined = undefined;\n disabled = false;\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.type || !this.action || !store || !container) return;\n\n const resolver = resolveGestureAction(this.action);\n if (!resolver) return;\n\n const { value } = this;\n\n const onActivate = (event: PointerEvent) => {\n resolver({ store, value, event });\n };\n\n const options = {\n pointer: this.pointer,\n region: this.region,\n disabled: this.disabled,\n action: this.action,\n };\n\n if (this.type === 'doubletap') {\n this.#cleanup = createDoubleTapGesture(container, onActivate, options);\n } else {\n this.#cleanup = createTapGesture(container, onActivate, options);\n }\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n","import { createHotkey, type HotkeyActionName, isHotkeyToggleAction, resolveHotkeyAction } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class HotkeyElement extends MediaElement {\n static readonly tagName = 'media-hotkey';\n\n static override properties: PropertyDeclarationMap = {\n keys: { type: String },\n action: { type: String },\n value: { type: Number },\n disabled: { type: Boolean },\n target: { type: String },\n };\n\n keys = '';\n action: HotkeyActionName | (string & {}) = '';\n value: number | undefined = undefined;\n disabled = false;\n target: 'player' | 'document' = 'player';\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.keys || !this.action || !store || !container) return;\n\n const resolver = resolveHotkeyAction(this.action);\n if (!resolver) return;\n\n const { value, action } = this;\n\n this.#cleanup = createHotkey(container, {\n keys: this.keys,\n action,\n target: this.target,\n disabled: this.disabled,\n repeatable: !isHotkeyToggleAction(action),\n onActivate: (_event, key) => {\n resolver({ store, key, value });\n },\n });\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hotkey-element-DRGCbVj9.js","names":["#lastTapTime","#clearTimer","#tapTimer","#player","#container","ContextConsumer","#register","#unregister","#cleanup","#player","#container","ContextConsumer","#register","#unregister","#cleanup"],"sources":["../../core/dist/default/dom/gesture/actions.js","../../core/dist/default/dom/gesture/tap.js","../../core/dist/default/dom/gesture/create-tap-gesture.js","../../core/dist/default/dom/hotkey/actions.js","../src/ui/gesture/gesture-element.ts","../src/ui/hotkey/hotkey-element.ts"],"sourcesContent":["import { selectPlaybackRate, selectTime, selectVolume } from \"../store/selectors.js\";\nimport { isFunction, isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/gesture/actions.ts\n/** Actions that need custom logic beyond `store.state[action]()`. */\nconst GESTURE_ACTION_OVERRIDES = {\n\tseekStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst time = selectTime(store.state);\n\t\tif (!time) return;\n\t\ttime.seek(time.currentTime + value);\n\t},\n\tvolumeStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst vol = selectVolume(store.state);\n\t\tif (!vol) return;\n\t\tvol.setVolume(vol.volume + value);\n\t},\n\tspeedUp({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx < 0 || idx >= playbackRates.length - 1 ? 0 : idx + 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tspeedDown({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx <= 0 ? playbackRates.length - 1 : idx - 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t}\n};\nfunction resolveGestureAction(name) {\n\tconst override = GESTURE_ACTION_OVERRIDES[name];\n\tif (override) return override;\n\treturn ({ store }) => {\n\t\tconst method = store.state[name];\n\t\tif (isFunction(method)) method();\n\t};\n}\n//#endregion\nexport { resolveGestureAction };\n\n//# sourceMappingURL=actions.js.map","//#region src/dom/gesture/tap.ts\nconst DOUBLETAP_WINDOW = 200;\n/**\n* Recognizes tap vs doubletap from quick pointer-up events.\n*\n* Stateful recognizer — tracks tap count and doubletap timing.\n* The coordinator handles pointer-down timing (tap threshold) and\n* calls `handleUp()` only for quick taps that passed the threshold check.\n*/\nvar TapRecognizer = class {\n\t#lastTapTime = 0;\n\t#tapTimer = null;\n\thandleUp(matches, event) {\n\t\tif (matches.resolve(\"doubletap\").length > 0) {\n\t\t\tconst now = Date.now();\n\t\t\tif (now - this.#lastTapTime < DOUBLETAP_WINDOW) {\n\t\t\t\tthis.#clearTimer();\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"doubletap\")[0]?.onActivate(event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#lastTapTime = now;\n\t\t\tthis.#clearTimer();\n\t\t\tthis.#tapTimer = setTimeout(() => {\n\t\t\t\tthis.#tapTimer = null;\n\t\t\t\tthis.#lastTapTime = 0;\n\t\t\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t\t\t}, DOUBLETAP_WINDOW);\n\t\t\treturn;\n\t\t}\n\t\tmatches.resolve(\"tap\")[0]?.onActivate(event);\n\t}\n\t#clearTimer() {\n\t\tif (this.#tapTimer !== null) {\n\t\t\tclearTimeout(this.#tapTimer);\n\t\t\tthis.#tapTimer = null;\n\t\t}\n\t}\n\treset() {\n\t\tthis.#clearTimer();\n\t\tthis.#lastTapTime = 0;\n\t}\n};\n//#endregion\nexport { TapRecognizer };\n\n//# sourceMappingURL=tap.js.map","import { getGestureCoordinator } from \"./coordinator.js\";\nimport { TapRecognizer } from \"./tap.js\";\n//#region src/dom/gesture/create-tap-gesture.ts\nconst recognizers = /* @__PURE__ */ new WeakMap();\nfunction getRecognizer(target) {\n\tlet recognizer = recognizers.get(target);\n\tif (recognizer) return recognizer;\n\trecognizer = new TapRecognizer();\n\trecognizers.set(target, recognizer);\n\treturn recognizer;\n}\n/**\n* Register a tap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createTapGesture(container, (event) => {\n* store.paused ? store.play() : store.pause();\n* }, { pointer: 'mouse' });\n* ```\n*/\nfunction createTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"tap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action\n\t});\n}\n/**\n* Register a doubletap gesture on a target element.\n*\n* @example\n* ```ts\n* const cleanup = createDoubleTapGesture(container, (event) => {\n* store.fullscreen ? store.exitFullscreen() : store.requestFullscreen();\n* }, { region: 'center' });\n* ```\n*/\nfunction createDoubleTapGesture(target, onActivate, options) {\n\treturn getGestureCoordinator(target).add({\n\t\ttype: \"doubletap\",\n\t\trecognizer: getRecognizer(target),\n\t\tonActivate,\n\t\tpointer: options?.pointer,\n\t\tregion: options?.region,\n\t\tdisabled: options?.disabled,\n\t\taction: options?.action\n\t});\n}\n//#endregion\nexport { createDoubleTapGesture, createTapGesture };\n\n//# sourceMappingURL=create-tap-gesture.js.map","import { selectFullscreen, selectPiP, selectPlayback, selectPlaybackRate, selectTextTrack, selectTime, selectVolume } from \"../store/selectors.js\";\nimport { isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/hotkey/actions.ts\nfunction isHotkeyToggleAction(action) {\n\treturn action.startsWith(\"toggle\");\n}\nconst HOTKEY_ACTIONS = {\n\ttogglePaused({ store }) {\n\t\tconst playback = selectPlayback(store.state);\n\t\tif (!playback) return;\n\t\tplayback.paused ? playback.play() : playback.pause();\n\t},\n\ttoggleMuted({ store }) {\n\t\tselectVolume(store.state)?.toggleMuted();\n\t},\n\ttoggleFullscreen({ store }) {\n\t\tconst fs = selectFullscreen(store.state);\n\t\tif (!fs) return;\n\t\tfs.fullscreen ? fs.exitFullscreen() : fs.requestFullscreen();\n\t},\n\ttoggleSubtitles({ store }) {\n\t\tselectTextTrack(store.state)?.toggleSubtitles();\n\t},\n\ttogglePictureInPicture({ store }) {\n\t\tconst pip = selectPiP(store.state);\n\t\tif (!pip) return;\n\t\tpip.pip ? pip.exitPictureInPicture() : pip.requestPictureInPicture();\n\t},\n\tseekStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst time = selectTime(store.state);\n\t\tif (!time) return;\n\t\ttime.seek(time.currentTime + value);\n\t},\n\tvolumeStep({ store, value }) {\n\t\tif (isUndefined(value)) return;\n\t\tconst vol = selectVolume(store.state);\n\t\tif (!vol) return;\n\t\tvol.setVolume(vol.volume + value);\n\t},\n\tspeedUp({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx < 0 || idx >= playbackRates.length - 1 ? 0 : idx + 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tspeedDown({ store }) {\n\t\tconst rate = selectPlaybackRate(store.state);\n\t\tif (!rate) return;\n\t\tconst { playbackRates, playbackRate } = rate;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx <= 0 ? playbackRates.length - 1 : idx - 1;\n\t\trate.setPlaybackRate(playbackRates[next]);\n\t},\n\tseekToPercent({ store, value, key }) {\n\t\tconst time = selectTime(store.state);\n\t\tif (!time || time.duration <= 0) return;\n\t\tlet percent;\n\t\tif (!isUndefined(value)) percent = value;\n\t\telse if (key >= \"0\" && key <= \"9\") percent = Number(key) * 10;\n\t\telse return;\n\t\ttime.seek(percent / 100 * time.duration);\n\t}\n};\nfunction resolveHotkeyAction(name) {\n\treturn HOTKEY_ACTIONS[name];\n}\n//#endregion\nexport { isHotkeyToggleAction, resolveHotkeyAction };\n\n//# sourceMappingURL=actions.js.map","import {\n createDoubleTapGesture,\n createTapGesture,\n type GestureActionName,\n type GesturePointerType,\n type GestureRegion,\n resolveGestureAction,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class GestureElement extends MediaElement {\n static readonly tagName = 'media-gesture';\n\n static override properties: PropertyDeclarationMap = {\n type: { type: String },\n action: { type: String },\n value: { type: Number },\n pointer: { type: String },\n region: { type: String },\n disabled: { type: Boolean },\n };\n\n type: 'tap' | 'doubletap' | (string & {}) = '';\n action: GestureActionName | (string & {}) = '';\n value: number | undefined = undefined;\n pointer: GesturePointerType | undefined = undefined;\n region: GestureRegion | undefined = undefined;\n disabled = false;\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.type || !this.action || !store || !container) return;\n\n const resolver = resolveGestureAction(this.action);\n if (!resolver) return;\n\n const { value } = this;\n\n const onActivate = (event: PointerEvent) => {\n resolver({ store, value, event });\n };\n\n const options = {\n pointer: this.pointer,\n region: this.region,\n disabled: this.disabled,\n action: this.action,\n };\n\n if (this.type === 'doubletap') {\n this.#cleanup = createDoubleTapGesture(container, onActivate, options);\n } else {\n this.#cleanup = createTapGesture(container, onActivate, options);\n }\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n","import { createHotkey, type HotkeyActionName, isHotkeyToggleAction, resolveHotkeyAction } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class HotkeyElement extends MediaElement {\n static readonly tagName = 'media-hotkey';\n\n static override properties: PropertyDeclarationMap = {\n keys: { type: String },\n action: { type: String },\n value: { type: Number },\n disabled: { type: Boolean },\n target: { type: String },\n };\n\n keys = '';\n action: HotkeyActionName | (string & {}) = '';\n value: number | undefined = undefined;\n disabled = false;\n target: 'player' | 'document' = 'player';\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.keys || !this.action || !store || !container) return;\n\n const resolver = resolveHotkeyAction(this.action);\n if (!resolver) return;\n\n const { value, action } = this;\n\n this.#cleanup = createHotkey(container, {\n keys: this.keys,\n action,\n target: this.target,\n disabled: this.disabled,\n repeatable: !isHotkeyToggleAction(action),\n onActivate: (_event, key) => {\n resolver({ store, key, value });\n },\n });\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listen-
|
|
1
|
+
{"version":3,"file":"listen-CJT7C4kM.js","names":[],"sources":["../../utils/dist/dom/listen.js"],"sourcesContent":["//#region src/dom/listen.ts\nfunction listen(target, type, listener, options) {\n\ttarget.addEventListener(type, listener, options);\n\treturn () => target.removeEventListener(type, listener, options);\n}\n//#endregion\nexport { listen };\n\n//# sourceMappingURL=listen.js.map"],"mappings":";AACA,SAAS,OAAO,QAAQ,MAAM,UAAU,SAAS;AAChD,QAAO,iBAAiB,MAAM,UAAU,QAAQ;AAChD,cAAa,OAAO,oBAAoB,MAAM,UAAU,QAAQ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
function e(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}export{e as t};
|
|
2
|
-
//# sourceMappingURL=listen-
|
|
2
|
+
//# sourceMappingURL=listen-DFX-0NbX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listen-
|
|
1
|
+
{"version":3,"file":"listen-DFX-0NbX.js","names":[],"sources":["../../utils/dist/dom/listen.js"],"sourcesContent":["//#region src/dom/listen.ts\nfunction listen(target, type, listener, options) {\n\ttarget.addEventListener(type, listener, options);\n\treturn () => target.removeEventListener(type, listener, options);\n}\n//#endregion\nexport { listen };\n\n//# sourceMappingURL=listen.js.map"],"mappings":"AACA,SAAS,EAAO,EAAQ,EAAM,EAAU,EAAS,CAEhD,OADA,EAAO,iBAAiB,EAAM,EAAU,EAAQ,KACnC,EAAO,oBAAoB,EAAM,EAAU,EAAQ"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
1
|
+
import { t as MediaAttachMixin } from "../media-attach-mixin-CYoNe7Sh.js";
|
|
2
|
+
import { o as safeDefine } from "../context-0rI_P6jf.js";
|
|
3
|
+
import { n as CustomMediaElement, t as HTMLVideoElementHost } from "../video-host-ycP7ckxU.js";
|
|
4
4
|
|
|
5
5
|
//#region ../../node_modules/.pnpm/dashjs@5.1.1_@svta+cml-cta@1.0.1_@svta+cml-structured-field-values@1.0.1_@svta+cml-util_e62e22cdd187b69d7eef3f6641da2ae0/node_modules/dashjs/dist/modern/esm/dash.all.min.js
|
|
6
6
|
/*! For license information please see dash.all.min.js.LICENSE.txt */
|
|
@@ -39104,47 +39104,41 @@ var b = dashjs, y = (r = r.default).Constants, E = r.Debug, T = r.ExternalSubtit
|
|
|
39104
39104
|
|
|
39105
39105
|
//#endregion
|
|
39106
39106
|
//#region ../core/dist/dev/dom/media/dash/index.js
|
|
39107
|
-
var
|
|
39107
|
+
var DashMedia = class extends HTMLVideoElementHost {
|
|
39108
39108
|
#engine;
|
|
39109
39109
|
#src = "";
|
|
39110
39110
|
constructor() {
|
|
39111
|
+
super();
|
|
39111
39112
|
this.#engine = _().create();
|
|
39112
39113
|
this.#engine.initialize(void 0, void 0, false);
|
|
39113
39114
|
}
|
|
39114
39115
|
get engine() {
|
|
39115
39116
|
return this.#engine;
|
|
39116
39117
|
}
|
|
39118
|
+
get src() {
|
|
39119
|
+
return this.#src;
|
|
39120
|
+
}
|
|
39121
|
+
set src(src) {
|
|
39122
|
+
this.#src = src;
|
|
39123
|
+
this.#engine.attachSource(src);
|
|
39124
|
+
}
|
|
39117
39125
|
attach(target) {
|
|
39126
|
+
super.attach(target);
|
|
39118
39127
|
this.#engine.attachView(target);
|
|
39119
39128
|
}
|
|
39120
39129
|
detach() {
|
|
39130
|
+
super.detach();
|
|
39121
39131
|
this.#engine.attachView(null);
|
|
39122
39132
|
}
|
|
39123
39133
|
destroy() {
|
|
39134
|
+
this.detach();
|
|
39124
39135
|
this.#engine.destroy();
|
|
39125
39136
|
}
|
|
39126
|
-
set src(src) {
|
|
39127
|
-
this.#src = src;
|
|
39128
|
-
this.#engine.attachSource(src);
|
|
39129
|
-
}
|
|
39130
|
-
get src() {
|
|
39131
|
-
return this.#src;
|
|
39132
|
-
}
|
|
39133
39137
|
};
|
|
39134
|
-
var DashCustomMedia = class extends DelegateMixin(CustomVideoElement, DashMediaDelegate) {};
|
|
39135
39138
|
|
|
39136
39139
|
//#endregion
|
|
39137
39140
|
//#region src/media/dash-video/index.ts
|
|
39138
|
-
var DashVideo = class extends
|
|
39139
|
-
constructor() {
|
|
39140
|
-
super();
|
|
39141
|
-
this.attach(this.target);
|
|
39142
|
-
}
|
|
39143
|
-
disconnectedCallback() {
|
|
39144
|
-
super.disconnectedCallback?.();
|
|
39145
|
-
if (!this.hasAttribute("keep-alive")) this.destroy();
|
|
39146
|
-
}
|
|
39147
|
-
};
|
|
39141
|
+
var DashVideo = class extends MediaAttachMixin(CustomMediaElement("video", DashMedia)) {};
|
|
39148
39142
|
|
|
39149
39143
|
//#endregion
|
|
39150
39144
|
//#region src/define/media/dash-video.ts
|