@videojs/html 0.1.0-preview.8 → 10.0.0-alpha.3
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 +4 -2
- package/dist/default/define/audio/player.js +15 -0
- package/dist/default/define/audio/player.js.map +1 -0
- package/dist/default/define/background/player.js +15 -0
- package/dist/default/define/background/player.js.map +1 -0
- package/dist/default/define/background/skin.js +0 -0
- package/dist/default/define/feature/video.js +0 -0
- package/dist/default/define/media/background-video.js +13 -0
- package/dist/default/define/media/background-video.js.map +1 -0
- package/dist/default/define/media/hls-video.js +13 -0
- package/dist/default/define/media/hls-video.js.map +1 -0
- package/dist/default/define/ui/buffering-indicator.js +7 -0
- package/dist/default/define/ui/buffering-indicator.js.map +1 -0
- package/dist/default/define/ui/controls.js +9 -0
- package/dist/default/define/ui/controls.js.map +1 -0
- package/dist/default/define/ui/fullscreen-button.js +7 -0
- package/dist/default/define/ui/fullscreen-button.js.map +1 -0
- package/dist/default/define/ui/mute-button.js +7 -0
- package/dist/default/define/ui/mute-button.js.map +1 -0
- package/dist/default/define/ui/pip-button.js +7 -0
- package/dist/default/define/ui/pip-button.js.map +1 -0
- package/dist/default/define/ui/play-button.js +7 -0
- package/dist/default/define/ui/play-button.js.map +1 -0
- package/dist/default/define/ui/poster.js +7 -0
- package/dist/default/define/ui/poster.js.map +1 -0
- package/dist/default/define/ui/seek-button.js +7 -0
- package/dist/default/define/ui/seek-button.js.map +1 -0
- package/dist/default/define/ui/time.js +11 -0
- package/dist/default/define/ui/time.js.map +1 -0
- package/dist/default/define/video/player.js +15 -0
- package/dist/default/define/video/player.js.map +1 -0
- package/dist/default/define/video/skin.js +0 -0
- package/dist/default/index.js +24 -0
- package/dist/default/media/background-video/index.js +77 -0
- package/dist/default/media/background-video/index.js.map +1 -0
- package/dist/default/media/hls-video/index.js +21 -0
- package/dist/default/media/hls-video/index.js.map +1 -0
- package/dist/default/player/context.js +14 -0
- package/dist/default/player/context.js.map +1 -0
- package/dist/default/player/create-player.js +29 -0
- package/dist/default/player/create-player.js.map +1 -0
- package/dist/default/player/player-controller.js +63 -0
- package/dist/default/player/player-controller.js.map +1 -0
- package/dist/default/player/player-mixin.js +23 -0
- package/dist/default/player/player-mixin.js.map +1 -0
- package/dist/default/store/container-mixin.js +74 -0
- package/dist/default/store/container-mixin.js.map +1 -0
- package/dist/default/store/provider-mixin.js +39 -0
- package/dist/default/store/provider-mixin.js.map +1 -0
- package/dist/default/ui/buffering-indicator/buffering-indicator-element.js +47 -0
- package/dist/default/ui/buffering-indicator/buffering-indicator-element.js.map +1 -0
- package/dist/default/ui/controls/controls-element.js +27 -0
- package/dist/default/ui/controls/controls-element.js.map +1 -0
- package/dist/default/ui/controls/controls-group-element.js +16 -0
- package/dist/default/ui/controls/controls-group-element.js.map +1 -0
- package/dist/default/ui/fullscreen-button/fullscreen-button-element.js +56 -0
- package/dist/default/ui/fullscreen-button/fullscreen-button-element.js.map +1 -0
- package/dist/default/ui/media-element.js +8 -0
- package/dist/default/ui/media-element.js.map +1 -0
- package/dist/default/ui/mute-button/mute-button-element.js +56 -0
- package/dist/default/ui/mute-button/mute-button-element.js.map +1 -0
- package/dist/default/ui/pip-button/pip-button-element.js +56 -0
- package/dist/default/ui/pip-button/pip-button-element.js.map +1 -0
- package/dist/default/ui/play-button/play-button-element.js +56 -0
- package/dist/default/ui/play-button/play-button-element.js.map +1 -0
- package/dist/default/ui/poster/poster-element.js +27 -0
- package/dist/default/ui/poster/poster-element.js.map +1 -0
- package/dist/default/ui/seek-button/seek-button-element.js +58 -0
- package/dist/default/ui/seek-button/seek-button-element.js.map +1 -0
- package/dist/default/ui/time/time-element.js +67 -0
- package/dist/default/ui/time/time-element.js.map +1 -0
- package/dist/default/ui/time/time-group-element.js +12 -0
- package/dist/default/ui/time/time-group-element.js.map +1 -0
- package/dist/default/ui/time/time-separator-element.js +17 -0
- package/dist/default/ui/time/time-separator-element.js.map +1 -0
- package/dist/dev/define/audio/player.d.ts +17 -0
- package/dist/dev/define/audio/player.d.ts.map +1 -0
- package/dist/dev/define/audio/player.js +15 -0
- package/dist/dev/define/audio/player.js.map +1 -0
- package/dist/dev/define/audio/skin.js +0 -0
- package/dist/dev/define/background/player.d.ts +17 -0
- package/dist/dev/define/background/player.d.ts.map +1 -0
- package/dist/dev/define/background/player.js +15 -0
- package/dist/dev/define/background/player.js.map +1 -0
- package/dist/dev/define/background/skin.js +0 -0
- package/dist/dev/define/feature/video.js +0 -0
- package/dist/dev/define/media/background-video.d.ts +14 -0
- package/dist/dev/define/media/background-video.d.ts.map +1 -0
- package/dist/dev/define/media/background-video.js +13 -0
- package/dist/dev/define/media/background-video.js.map +1 -0
- package/dist/dev/define/media/hls-video.d.ts +14 -0
- package/dist/dev/define/media/hls-video.d.ts.map +1 -0
- package/dist/dev/define/media/hls-video.js +13 -0
- package/dist/dev/define/media/hls-video.js.map +1 -0
- package/dist/dev/define/ui/buffering-indicator.d.ts +9 -0
- package/dist/dev/define/ui/buffering-indicator.d.ts.map +1 -0
- package/dist/dev/define/ui/buffering-indicator.js +7 -0
- package/dist/dev/define/ui/buffering-indicator.js.map +1 -0
- package/dist/dev/define/ui/controls.d.ts +11 -0
- package/dist/dev/define/ui/controls.d.ts.map +1 -0
- package/dist/dev/define/ui/controls.js +9 -0
- package/dist/dev/define/ui/controls.js.map +1 -0
- package/dist/dev/define/ui/fullscreen-button.d.ts +9 -0
- package/dist/dev/define/ui/fullscreen-button.d.ts.map +1 -0
- package/dist/dev/define/ui/fullscreen-button.js +7 -0
- package/dist/dev/define/ui/fullscreen-button.js.map +1 -0
- package/dist/dev/define/ui/mute-button.d.ts +9 -0
- package/dist/dev/define/ui/mute-button.d.ts.map +1 -0
- package/dist/dev/define/ui/mute-button.js +7 -0
- package/dist/dev/define/ui/mute-button.js.map +1 -0
- package/dist/dev/define/ui/pip-button.d.ts +9 -0
- package/dist/dev/define/ui/pip-button.d.ts.map +1 -0
- package/dist/dev/define/ui/pip-button.js +7 -0
- package/dist/dev/define/ui/pip-button.js.map +1 -0
- package/dist/dev/define/ui/play-button.d.ts +9 -0
- package/dist/dev/define/ui/play-button.d.ts.map +1 -0
- package/dist/dev/define/ui/play-button.js +7 -0
- package/dist/dev/define/ui/play-button.js.map +1 -0
- package/dist/dev/define/ui/poster.d.ts +9 -0
- package/dist/dev/define/ui/poster.d.ts.map +1 -0
- package/dist/dev/define/ui/poster.js +7 -0
- package/dist/dev/define/ui/poster.js.map +1 -0
- package/dist/dev/define/ui/seek-button.d.ts +9 -0
- package/dist/dev/define/ui/seek-button.d.ts.map +1 -0
- package/dist/dev/define/ui/seek-button.js +7 -0
- package/dist/dev/define/ui/seek-button.js.map +1 -0
- package/dist/dev/define/ui/time.d.ts +13 -0
- package/dist/dev/define/ui/time.d.ts.map +1 -0
- package/dist/dev/define/ui/time.js +11 -0
- package/dist/dev/define/ui/time.js.map +1 -0
- package/dist/dev/define/video/player.d.ts +17 -0
- package/dist/dev/define/video/player.d.ts.map +1 -0
- package/dist/dev/define/video/player.js +15 -0
- package/dist/dev/define/video/player.js.map +1 -0
- package/dist/dev/define/video/skin.js +0 -0
- package/dist/dev/index.d.ts +23 -0
- package/dist/dev/index.js +24 -0
- package/dist/dev/media/background-video/index.d.ts +15 -0
- package/dist/dev/media/background-video/index.d.ts.map +1 -0
- package/dist/dev/media/background-video/index.js +77 -0
- package/dist/dev/media/background-video/index.js.map +1 -0
- package/dist/dev/media/hls-video/index.d.ts +11 -0
- package/dist/dev/media/hls-video/index.d.ts.map +1 -0
- package/dist/dev/media/hls-video/index.js +21 -0
- package/dist/dev/media/hls-video/index.js.map +1 -0
- package/dist/dev/player/context.d.ts +16 -0
- package/dist/dev/player/context.d.ts.map +1 -0
- package/dist/dev/player/context.js +14 -0
- package/dist/dev/player/context.js.map +1 -0
- package/dist/dev/player/create-player.d.ts +73 -0
- package/dist/dev/player/create-player.d.ts.map +1 -0
- package/dist/dev/player/create-player.js +29 -0
- package/dist/dev/player/create-player.js.map +1 -0
- package/dist/dev/player/player-controller.d.ts +56 -0
- package/dist/dev/player/player-controller.d.ts.map +1 -0
- package/dist/dev/player/player-controller.js +63 -0
- package/dist/dev/player/player-controller.js.map +1 -0
- package/dist/dev/player/player-mixin.d.ts +20 -0
- package/dist/dev/player/player-mixin.d.ts.map +1 -0
- package/dist/dev/player/player-mixin.js +23 -0
- package/dist/dev/player/player-mixin.js.map +1 -0
- package/dist/dev/store/container-mixin.d.ts +16 -0
- package/dist/dev/store/container-mixin.d.ts.map +1 -0
- package/dist/dev/store/container-mixin.js +74 -0
- package/dist/dev/store/container-mixin.js.map +1 -0
- package/dist/dev/store/provider-mixin.d.ts +17 -0
- package/dist/dev/store/provider-mixin.d.ts.map +1 -0
- package/dist/dev/store/provider-mixin.js +39 -0
- package/dist/dev/store/provider-mixin.js.map +1 -0
- package/dist/dev/store/types.d.ts +18 -0
- package/dist/dev/store/types.d.ts.map +1 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator-element.d.ts +21 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator-element.d.ts.map +1 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator-element.js +48 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator-element.js.map +1 -0
- package/dist/dev/ui/controls/controls-element.d.ts +13 -0
- package/dist/dev/ui/controls/controls-element.d.ts.map +1 -0
- package/dist/dev/ui/controls/controls-element.js +28 -0
- package/dist/dev/ui/controls/controls-element.js.map +1 -0
- package/dist/dev/ui/controls/controls-group-element.d.ts +10 -0
- package/dist/dev/ui/controls/controls-group-element.d.ts.map +1 -0
- package/dist/dev/ui/controls/controls-group-element.js +16 -0
- package/dist/dev/ui/controls/controls-group-element.js.map +1 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button-element.d.ts +26 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button-element.d.ts.map +1 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button-element.js +57 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button-element.js.map +1 -0
- package/dist/dev/ui/media-element.d.ts +9 -0
- package/dist/dev/ui/media-element.d.ts.map +1 -0
- package/dist/dev/ui/media-element.js +8 -0
- package/dist/dev/ui/media-element.js.map +1 -0
- package/dist/dev/ui/mute-button/mute-button-element.d.ts +26 -0
- package/dist/dev/ui/mute-button/mute-button-element.d.ts.map +1 -0
- package/dist/dev/ui/mute-button/mute-button-element.js +57 -0
- package/dist/dev/ui/mute-button/mute-button-element.js.map +1 -0
- package/dist/dev/ui/pip-button/pip-button-element.d.ts +26 -0
- package/dist/dev/ui/pip-button/pip-button-element.d.ts.map +1 -0
- package/dist/dev/ui/pip-button/pip-button-element.js +57 -0
- package/dist/dev/ui/pip-button/pip-button-element.js.map +1 -0
- package/dist/dev/ui/play-button/play-button-element.d.ts +26 -0
- package/dist/dev/ui/play-button/play-button-element.d.ts.map +1 -0
- package/dist/dev/ui/play-button/play-button-element.js +57 -0
- package/dist/dev/ui/play-button/play-button-element.js.map +1 -0
- package/dist/dev/ui/poster/poster-element.d.ts +13 -0
- package/dist/dev/ui/poster/poster-element.d.ts.map +1 -0
- package/dist/dev/ui/poster/poster-element.js +28 -0
- package/dist/dev/ui/poster/poster-element.js.map +1 -0
- package/dist/dev/ui/seek-button/seek-button-element.d.ts +30 -0
- package/dist/dev/ui/seek-button/seek-button-element.d.ts.map +1 -0
- package/dist/dev/ui/seek-button/seek-button-element.js +59 -0
- package/dist/dev/ui/seek-button/seek-button-element.js.map +1 -0
- package/dist/dev/ui/time/time-element.d.ts +32 -0
- package/dist/dev/ui/time/time-element.d.ts.map +1 -0
- package/dist/dev/ui/time/time-element.js +68 -0
- package/dist/dev/ui/time/time-element.js.map +1 -0
- package/dist/dev/ui/time/time-group-element.d.ts +9 -0
- package/dist/dev/ui/time/time-group-element.d.ts.map +1 -0
- package/dist/dev/ui/time/time-group-element.js +12 -0
- package/dist/dev/ui/time/time-group-element.js.map +1 -0
- package/dist/dev/ui/time/time-separator-element.d.ts +10 -0
- package/dist/dev/ui/time/time-separator-element.d.ts.map +1 -0
- package/dist/dev/ui/time/time-separator-element.js +17 -0
- package/dist/dev/ui/time/time-separator-element.js.map +1 -0
- package/package.json +62 -40
- package/dist/button-Bu1mGG-F.js +0 -63
- package/dist/button-Bu1mGG-F.js.map +0 -1
- package/dist/component-factory-DeAN6cjC.js +0 -47
- package/dist/component-factory-DeAN6cjC.js.map +0 -1
- package/dist/current-time-display-C3qndGf5.js +0 -47
- package/dist/current-time-display-C3qndGf5.js.map +0 -1
- package/dist/custom-element-3bDlB2XO.js +0 -10
- package/dist/custom-element-3bDlB2XO.js.map +0 -1
- package/dist/define/index.d.ts +0 -12
- package/dist/define/index.js +0 -27
- package/dist/define/media-container.d.ts +0 -1
- package/dist/define/media-container.js +0 -3
- package/dist/define/media-current-time-display.d.ts +0 -1
- package/dist/define/media-current-time-display.js +0 -4
- package/dist/define/media-duration-display.d.ts +0 -1
- package/dist/define/media-duration-display.js +0 -4
- package/dist/define/media-fullscreen-button.d.ts +0 -1
- package/dist/define/media-fullscreen-button.js +0 -5
- package/dist/define/media-mute-button.d.ts +0 -1
- package/dist/define/media-mute-button.js +0 -5
- package/dist/define/media-play-button.d.ts +0 -1
- package/dist/define/media-play-button.js +0 -5
- package/dist/define/media-popover.d.ts +0 -1
- package/dist/define/media-popover.js +0 -3
- package/dist/define/media-preview-time-display.d.ts +0 -1
- package/dist/define/media-preview-time-display.js +0 -4
- package/dist/define/media-time-slider.d.ts +0 -1
- package/dist/define/media-time-slider.js +0 -4
- package/dist/define/media-tooltip.d.ts +0 -1
- package/dist/define/media-tooltip.js +0 -3
- package/dist/define/media-volume-slider.d.ts +0 -1
- package/dist/define/media-volume-slider.js +0 -4
- package/dist/define/video-provider.d.ts +0 -1
- package/dist/define/video-provider.js +0 -3
- package/dist/duration-display-JOPp3bdU.js +0 -49
- package/dist/duration-display-JOPp3bdU.js.map +0 -1
- package/dist/fullscreen-button-C1nq8yP-.js +0 -48
- package/dist/fullscreen-button-C1nq8yP-.js.map +0 -1
- package/dist/icons-CuxuONCk.js +0 -209
- package/dist/icons-CuxuONCk.js.map +0 -1
- package/dist/icons.d.ts +0 -1
- package/dist/icons.js +0 -2
- package/dist/index.d.ts +0 -154
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -17
- package/dist/media-container-BOL0PKuG.js +0 -80
- package/dist/media-container-BOL0PKuG.js.map +0 -1
- package/dist/media-container-DwKSOa1h.js +0 -8
- package/dist/media-container-DwKSOa1h.js.map +0 -1
- package/dist/media-current-time-display-B-4Cp845.js +0 -8
- package/dist/media-current-time-display-B-4Cp845.js.map +0 -1
- package/dist/media-duration-display-BLMr7VHo.js +0 -8
- package/dist/media-duration-display-BLMr7VHo.js.map +0 -1
- package/dist/media-fullscreen-button-BgUK3lgu.d.ts +0 -1
- package/dist/media-fullscreen-button-CIpcLhtU.js +0 -8
- package/dist/media-fullscreen-button-CIpcLhtU.js.map +0 -1
- package/dist/media-mute-button-CHHISH91.js +0 -8
- package/dist/media-mute-button-CHHISH91.js.map +0 -1
- package/dist/media-mute-button-NVJF2EEW.d.ts +0 -1
- package/dist/media-play-button-DhSK0JQk.js +0 -8
- package/dist/media-play-button-DhSK0JQk.js.map +0 -1
- package/dist/media-play-button-oq8yDlxe.d.ts +0 -1
- package/dist/media-popover-BtJmPv0E.d.ts +0 -1
- package/dist/media-popover-Cw9d_Bh3.js +0 -8
- package/dist/media-popover-Cw9d_Bh3.js.map +0 -1
- package/dist/media-preview-time-display-4YX5Rics.d.ts +0 -1
- package/dist/media-preview-time-display-DAiMgLPX.js +0 -8
- package/dist/media-preview-time-display-DAiMgLPX.js.map +0 -1
- package/dist/media-skin-CxnuHwhu.js +0 -36
- package/dist/media-skin-CxnuHwhu.js.map +0 -1
- package/dist/media-skin-Di3vSHvS.d.ts +0 -11
- package/dist/media-skin-Di3vSHvS.d.ts.map +0 -1
- package/dist/media-time-slider-DvMnfYXZ.d.ts +0 -1
- package/dist/media-time-slider-SuxR3Rep.js +0 -12
- package/dist/media-time-slider-SuxR3Rep.js.map +0 -1
- package/dist/media-tooltip-BqV17mdM.d.ts +0 -1
- package/dist/media-tooltip-CMRN_X4D.js +0 -8
- package/dist/media-tooltip-CMRN_X4D.js.map +0 -1
- package/dist/media-volume-slider-B-n6b3Y8.js +0 -11
- package/dist/media-volume-slider-B-n6b3Y8.js.map +0 -1
- package/dist/media-volume-slider-DP47VLVi.d.ts +0 -1
- package/dist/mute-button-BSDoCZs3.js +0 -50
- package/dist/mute-button-BSDoCZs3.js.map +0 -1
- package/dist/play-button-gaqIKsrv.js +0 -44
- package/dist/play-button-gaqIKsrv.js.map +0 -1
- package/dist/popover-BUCVOjnO.js +0 -167
- package/dist/popover-BUCVOjnO.js.map +0 -1
- package/dist/preview-time-display-Dax0FQ2X.js +0 -44
- package/dist/preview-time-display-Dax0FQ2X.js.map +0 -1
- package/dist/skins/frosted.d.ts +0 -23
- package/dist/skins/frosted.d.ts.map +0 -1
- package/dist/skins/frosted.js +0 -145
- package/dist/skins/frosted.js.map +0 -1
- package/dist/skins/minimal.d.ts +0 -23
- package/dist/skins/minimal.d.ts.map +0 -1
- package/dist/skins/minimal.js +0 -150
- package/dist/skins/minimal.js.map +0 -1
- package/dist/store.d.ts +0 -1
- package/dist/time-slider-DKamO_2Q.js +0 -202
- package/dist/time-slider-DKamO_2Q.js.map +0 -1
- package/dist/tooltip-B-glki2f.js +0 -171
- package/dist/tooltip-B-glki2f.js.map +0 -1
- package/dist/video-provider-BKDqoKFf.js +0 -17
- package/dist/video-provider-BKDqoKFf.js.map +0 -1
- package/dist/video-provider-BPPI5e47.js +0 -8
- package/dist/video-provider-BPPI5e47.js.map +0 -1
- package/dist/video-provider-nSCfwA7l.d.ts +0 -1
- package/dist/volume-slider-CbFzCHX4.js +0 -206
- package/dist/volume-slider-CbFzCHX4.js.map +0 -1
- /package/dist/{store.js → default/define/audio/skin.js} +0 -0
- /package/dist/{index-LKrIp3Oo.d.ts → dev/define/audio/skin.d.ts} +0 -0
- /package/dist/{media-container-ChS9lZvf.d.ts → dev/define/background/skin.d.ts} +0 -0
- /package/dist/{media-current-time-display-Cd0rPAuj.d.ts → dev/define/feature/video.d.ts} +0 -0
- /package/dist/{media-duration-display-qvm6YX-q.d.ts → dev/define/video/skin.d.ts} +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ContextConsumer } from "@videojs/element/context";
|
|
2
|
+
import { noop } from "@videojs/utils/function";
|
|
3
|
+
|
|
4
|
+
//#region src/store/container-mixin.ts
|
|
5
|
+
/**
|
|
6
|
+
* Create a mixin that consumes player context and auto-attaches media elements.
|
|
7
|
+
*
|
|
8
|
+
* @param context - Player context to consume from an ancestor provider.
|
|
9
|
+
*/
|
|
10
|
+
function createContainerMixin(context) {
|
|
11
|
+
return (BaseClass) => {
|
|
12
|
+
class PlayerContainerElement extends BaseClass {
|
|
13
|
+
#detach = noop;
|
|
14
|
+
#observer = null;
|
|
15
|
+
#consumer = new ContextConsumer(this, {
|
|
16
|
+
context,
|
|
17
|
+
callback: () => this.#attachMedia(),
|
|
18
|
+
subscribe: true
|
|
19
|
+
});
|
|
20
|
+
get store() {
|
|
21
|
+
return this.#consumer.value ?? null;
|
|
22
|
+
}
|
|
23
|
+
connectedCallback() {
|
|
24
|
+
super.connectedCallback();
|
|
25
|
+
this.#observer = new MutationObserver((records) => {
|
|
26
|
+
if (records.some(hasMediaNode)) this.#attachMedia();
|
|
27
|
+
});
|
|
28
|
+
this.#observer.observe(this, {
|
|
29
|
+
childList: true,
|
|
30
|
+
subtree: true
|
|
31
|
+
});
|
|
32
|
+
this.#attachMedia();
|
|
33
|
+
}
|
|
34
|
+
disconnectedCallback() {
|
|
35
|
+
super.disconnectedCallback();
|
|
36
|
+
this.#observer?.disconnect();
|
|
37
|
+
this.#observer = null;
|
|
38
|
+
this.#detach();
|
|
39
|
+
}
|
|
40
|
+
#attachMedia() {
|
|
41
|
+
const store = this.#consumer.value ?? this.store;
|
|
42
|
+
if (!store) return;
|
|
43
|
+
const media = this.querySelector("video, audio");
|
|
44
|
+
if (!media) {
|
|
45
|
+
this.#detach();
|
|
46
|
+
this.#detach = noop;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const target = {
|
|
50
|
+
media,
|
|
51
|
+
container: this
|
|
52
|
+
};
|
|
53
|
+
const hasMediaChanged = store.target?.media !== target.media, hasContainerChanged = store.target?.container !== target.container;
|
|
54
|
+
if (hasMediaChanged || hasContainerChanged) {
|
|
55
|
+
this.#detach();
|
|
56
|
+
this.#detach = store.attach(target);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return PlayerContainerElement;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function isMediaNode(node) {
|
|
64
|
+
return node instanceof HTMLMediaElement;
|
|
65
|
+
}
|
|
66
|
+
function hasMediaNode(record) {
|
|
67
|
+
for (const node of record.addedNodes) if (isMediaNode(node)) return true;
|
|
68
|
+
for (const node of record.removedNodes) if (isMediaNode(node)) return true;
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
//#endregion
|
|
73
|
+
export { createContainerMixin };
|
|
74
|
+
//# sourceMappingURL=container-mixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-mixin.js","names":["#attachMedia","#consumer","#observer","#detach"],"sources":["../../../src/store/container-mixin.ts"],"sourcesContent":["import type { MediaContainer, PlayerStore, PlayerTarget } from '@videojs/core/dom';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { noop } from '@videojs/utils/function';\nimport type { MediaElementConstructor } from '@/ui/media-element';\nimport type { PlayerContext } from '../player/context';\nimport type { PlayerConsumer, PlayerConsumerConstructor } from './types';\n\nexport type ContainerMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(\n BaseClass: Class\n) => Class & PlayerConsumerConstructor<Store>;\n\n/**\n * Create a mixin that consumes player context and auto-attaches media elements.\n *\n * @param context - Player context to consume from an ancestor provider.\n */\nexport function createContainerMixin<Store extends PlayerStore>(context: PlayerContext<Store>): ContainerMixin<Store> {\n return <Class extends MediaElementConstructor>(BaseClass: Class) => {\n class PlayerContainerElement extends BaseClass implements PlayerConsumer<Store>, MediaContainer {\n #detach = noop;\n #observer: MutationObserver | null = null;\n\n #consumer = new ContextConsumer(this, {\n context,\n callback: () => this.#attachMedia(),\n subscribe: true,\n });\n\n get store(): Store | null {\n return this.#consumer.value ?? null;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n\n this.#observer = new MutationObserver((records) => {\n if (records.some(hasMediaNode)) this.#attachMedia();\n });\n\n this.#observer.observe(this, { childList: true, subtree: true });\n\n this.#attachMedia();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.#observer?.disconnect();\n this.#observer = null;\n this.#detach();\n }\n\n #attachMedia() {\n // Store will be overridden and set by provider mixin if consumer is empty.\n const store = this.#consumer.value ?? this.store;\n if (!store) return;\n\n const media = this.querySelector<HTMLMediaElement>('video, audio');\n\n if (!media) {\n this.#detach();\n this.#detach = noop;\n return;\n }\n\n const target: PlayerTarget = {\n media,\n container: this,\n };\n\n const hasMediaChanged = store.target?.media !== target.media,\n hasContainerChanged = store.target?.container !== target.container;\n\n if (hasMediaChanged || hasContainerChanged) {\n this.#detach();\n this.#detach = store.attach(target);\n }\n }\n }\n\n return PlayerContainerElement;\n };\n}\n\nfunction isMediaNode(node: Node): boolean {\n return node instanceof HTMLMediaElement;\n}\n\nfunction hasMediaNode(record: MutationRecord): boolean {\n for (const node of record.addedNodes) {\n if (isMediaNode(node)) return true;\n }\n\n for (const node of record.removedNodes) {\n if (isMediaNode(node)) return true;\n }\n\n return false;\n}\n"],"mappings":";;;;;;;;;AAgBA,SAAgB,qBAAgD,SAAsD;AACpH,SAA+C,cAAqB;EAClE,MAAM,+BAA+B,UAA2D;GAC9F,UAAU;GACV,YAAqC;GAErC,YAAY,IAAI,gBAAgB,MAAM;IACpC;IACA,gBAAgB,MAAKA,aAAc;IACnC,WAAW;IACZ,CAAC;GAEF,IAAI,QAAsB;AACxB,WAAO,MAAKC,SAAU,SAAS;;GAGjC,AAAS,oBAAoB;AAC3B,UAAM,mBAAmB;AAEzB,UAAKC,WAAY,IAAI,kBAAkB,YAAY;AACjD,SAAI,QAAQ,KAAK,aAAa,CAAE,OAAKF,aAAc;MACnD;AAEF,UAAKE,SAAU,QAAQ,MAAM;KAAE,WAAW;KAAM,SAAS;KAAM,CAAC;AAEhE,UAAKF,aAAc;;GAGrB,AAAS,uBAAuB;AAC9B,UAAM,sBAAsB;AAC5B,UAAKE,UAAW,YAAY;AAC5B,UAAKA,WAAY;AACjB,UAAKC,QAAS;;GAGhB,eAAe;IAEb,MAAM,QAAQ,MAAKF,SAAU,SAAS,KAAK;AAC3C,QAAI,CAAC,MAAO;IAEZ,MAAM,QAAQ,KAAK,cAAgC,eAAe;AAElE,QAAI,CAAC,OAAO;AACV,WAAKE,QAAS;AACd,WAAKA,SAAU;AACf;;IAGF,MAAM,SAAuB;KAC3B;KACA,WAAW;KACZ;IAED,MAAM,kBAAkB,MAAM,QAAQ,UAAU,OAAO,OACrD,sBAAsB,MAAM,QAAQ,cAAc,OAAO;AAE3D,QAAI,mBAAmB,qBAAqB;AAC1C,WAAKA,QAAS;AACd,WAAKA,SAAU,MAAM,OAAO,OAAO;;;;AAKzC,SAAO;;;AAIX,SAAS,YAAY,MAAqB;AACxC,QAAO,gBAAgB;;AAGzB,SAAS,aAAa,QAAiC;AACrD,MAAK,MAAM,QAAQ,OAAO,WACxB,KAAI,YAAY,KAAK,CAAE,QAAO;AAGhC,MAAK,MAAM,QAAQ,OAAO,aACxB,KAAI,YAAY,KAAK,CAAE,QAAO;AAGhC,QAAO"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { PlayerContext } from "../player/context.js";
|
|
2
|
+
import { MediaElementConstructor } from "../ui/media-element.js";
|
|
3
|
+
import { PlayerProviderConstructor } from "./types.js";
|
|
4
|
+
import { PlayerStore } from "@videojs/core/dom";
|
|
5
|
+
|
|
6
|
+
//#region src/store/provider-mixin.d.ts
|
|
7
|
+
type ProviderMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(BaseClass: Class) => Class & PlayerProviderConstructor<Store>;
|
|
8
|
+
/**
|
|
9
|
+
* Create a mixin that provides player context to descendant elements.
|
|
10
|
+
*
|
|
11
|
+
* @param context - Player context to provide to descendants.
|
|
12
|
+
* @param factory - Factory function that creates a store instance.
|
|
13
|
+
*/
|
|
14
|
+
declare function createProviderMixin<Store extends PlayerStore>(context: PlayerContext<Store>, factory: () => Store): ProviderMixin<Store>;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { ProviderMixin, createProviderMixin };
|
|
17
|
+
//# sourceMappingURL=provider-mixin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-mixin.d.ts","names":[],"sources":["../../../src/store/provider-mixin.ts"],"mappings":";;;;;;KAOY,aAAA,eAA4B,WAAA,mBAA8B,uBAAA,EACpE,SAAA,EAAW,KAAA,KACR,KAAA,GAAQ,yBAAA,CAA0B,KAAA;;AAFvC;;;;;iBAUgB,mBAAA,eAAkC,WAAA,CAAA,CAChD,OAAA,EAAS,aAAA,CAAc,KAAA,GACvB,OAAA,QAAe,KAAA,GACd,aAAA,CAAc,KAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ContextProvider } from "@videojs/element/context";
|
|
2
|
+
import { isNull } from "@videojs/utils/predicate";
|
|
3
|
+
|
|
4
|
+
//#region src/store/provider-mixin.ts
|
|
5
|
+
/**
|
|
6
|
+
* Create a mixin that provides player context to descendant elements.
|
|
7
|
+
*
|
|
8
|
+
* @param context - Player context to provide to descendants.
|
|
9
|
+
* @param factory - Factory function that creates a store instance.
|
|
10
|
+
*/
|
|
11
|
+
function createProviderMixin(context, factory) {
|
|
12
|
+
return (BaseClass) => {
|
|
13
|
+
class PlayerProviderElement extends BaseClass {
|
|
14
|
+
#store = factory();
|
|
15
|
+
#provider = new ContextProvider(this, {
|
|
16
|
+
context,
|
|
17
|
+
initialValue: this.store
|
|
18
|
+
});
|
|
19
|
+
get store() {
|
|
20
|
+
if (isNull(this.#store)) this.#store = factory();
|
|
21
|
+
return this.#store;
|
|
22
|
+
}
|
|
23
|
+
connectedCallback() {
|
|
24
|
+
super.connectedCallback();
|
|
25
|
+
this.#provider.setValue(this.store);
|
|
26
|
+
}
|
|
27
|
+
disconnectedCallback() {
|
|
28
|
+
super.disconnectedCallback();
|
|
29
|
+
this.#store?.destroy();
|
|
30
|
+
this.#store = null;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return PlayerProviderElement;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
38
|
+
export { createProviderMixin };
|
|
39
|
+
//# sourceMappingURL=provider-mixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-mixin.js","names":["#store","#provider"],"sources":["../../../src/store/provider-mixin.ts"],"sourcesContent":["import type { PlayerStore } from '@videojs/core/dom';\nimport { ContextProvider } from '@videojs/element/context';\nimport { isNull } from '@videojs/utils/predicate';\nimport type { MediaElementConstructor } from '@/ui/media-element';\nimport type { PlayerContext } from '../player/context';\nimport type { PlayerProvider, PlayerProviderConstructor } from './types';\n\nexport type ProviderMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(\n BaseClass: Class\n) => Class & PlayerProviderConstructor<Store>;\n\n/**\n * Create a mixin that provides player context to descendant elements.\n *\n * @param context - Player context to provide to descendants.\n * @param factory - Factory function that creates a store instance.\n */\nexport function createProviderMixin<Store extends PlayerStore>(\n context: PlayerContext<Store>,\n factory: () => Store\n): ProviderMixin<Store> {\n return <Class extends MediaElementConstructor>(BaseClass: Class) => {\n class PlayerProviderElement extends BaseClass implements PlayerProvider<Store> {\n #store: Store | null = factory();\n\n #provider = new ContextProvider(this, {\n context,\n initialValue: this.store,\n });\n\n get store(): Store {\n if (isNull(this.#store)) {\n this.#store = factory();\n }\n\n return this.#store;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.#provider.setValue(this.store);\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.#store?.destroy();\n this.#store = null;\n }\n }\n\n return PlayerProviderElement;\n };\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,oBACd,SACA,SACsB;AACtB,SAA+C,cAAqB;EAClE,MAAM,8BAA8B,UAA2C;GAC7E,SAAuB,SAAS;GAEhC,YAAY,IAAI,gBAAgB,MAAM;IACpC;IACA,cAAc,KAAK;IACpB,CAAC;GAEF,IAAI,QAAe;AACjB,QAAI,OAAO,MAAKA,MAAO,CACrB,OAAKA,QAAS,SAAS;AAGzB,WAAO,MAAKA;;GAGd,AAAS,oBAAoB;AAC3B,UAAM,mBAAmB;AACzB,UAAKC,SAAU,SAAS,KAAK,MAAM;;GAGrC,AAAS,uBAAuB;AAC9B,UAAM,sBAAsB;AAC5B,UAAKD,OAAQ,SAAS;AACtB,UAAKA,QAAS;;;AAIlB,SAAO"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { MediaElement } from "../ui/media-element.js";
|
|
2
|
+
import { PlayerStore } from "@videojs/core/dom";
|
|
3
|
+
import { Constructor } from "@videojs/utils/types";
|
|
4
|
+
|
|
5
|
+
//#region src/store/types.d.ts
|
|
6
|
+
interface PlayerElement<Store extends PlayerStore> extends MediaElement, PlayerProvider<Store> {}
|
|
7
|
+
interface PlayerElementConstructor<Store extends PlayerStore> extends Constructor<PlayerElement<Store>> {}
|
|
8
|
+
interface PlayerProvider<Store extends PlayerStore> extends MediaElement {
|
|
9
|
+
readonly store: Store;
|
|
10
|
+
}
|
|
11
|
+
interface PlayerProviderConstructor<Store extends PlayerStore> extends Constructor<PlayerProvider<Store>> {}
|
|
12
|
+
interface PlayerConsumer<Store extends PlayerStore> extends MediaElement {
|
|
13
|
+
readonly store: Store | null;
|
|
14
|
+
}
|
|
15
|
+
interface PlayerConsumerConstructor<Store extends PlayerStore> extends Constructor<PlayerConsumer<Store>> {}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { PlayerConsumer, PlayerConsumerConstructor, PlayerElement, PlayerElementConstructor, PlayerProvider, PlayerProviderConstructor };
|
|
18
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/store/types.ts"],"mappings":";;;;;UAQiB,aAAA,eAA4B,WAAA,UAAqB,YAAA,EAAc,cAAA,CAAe,KAAA;AAAA,UAE9E,wBAAA,eAAuC,WAAA,UAAqB,WAAA,CAAY,aAAA,CAAc,KAAA;AAAA,UAMtF,cAAA,eAA6B,WAAA,UAAqB,YAAA;EAAA,SACxD,KAAA,EAAO,KAAA;AAAA;AAAA,UAGD,yBAAA,eAAwC,WAAA,UAAqB,WAAA,CAAY,cAAA,CAAe,KAAA;AAAA,UAMxF,cAAA,eAA6B,WAAA,UAAqB,YAAA;EAAA,SACxD,KAAA,EAAO,KAAA;AAAA;AAAA,UAGD,yBAAA,eAAwC,WAAA,UAAqB,WAAA,CAAY,cAAA,CAAe,KAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { MediaElement } from "../media-element.js";
|
|
2
|
+
import { PropertyValues } from "@videojs/element";
|
|
3
|
+
|
|
4
|
+
//#region src/ui/buffering-indicator/buffering-indicator-element.d.ts
|
|
5
|
+
declare class BufferingIndicatorElement extends MediaElement {
|
|
6
|
+
#private;
|
|
7
|
+
static readonly tagName = "media-buffering-indicator";
|
|
8
|
+
static properties: {
|
|
9
|
+
delay: {
|
|
10
|
+
type: NumberConstructor;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
delay: number;
|
|
14
|
+
connectedCallback(): void;
|
|
15
|
+
disconnectedCallback(): void;
|
|
16
|
+
protected willUpdate(changed: PropertyValues): void;
|
|
17
|
+
protected update(changed: PropertyValues): void;
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { BufferingIndicatorElement };
|
|
21
|
+
//# sourceMappingURL=buffering-indicator-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffering-indicator-element.d.ts","names":[],"sources":["../../../../src/ui/buffering-indicator/buffering-indicator-element.ts"],"mappings":";;;;cAQa,yBAAA,SAAkC,YAAA;EAAA;kBAC7B,OAAA;EAAA,OAEA,UAAA;;;;;EAIhB,KAAA;EAOS,iBAAA,CAAA;EAcA,oBAAA,CAAA;EAAA,UAMU,UAAA,CAAW,OAAA,EAAS,cAAA;EAAA,UAKpB,MAAA,CAAO,OAAA,EAAS,cAAA;AAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { playerContext } from "../../player/context.js";
|
|
2
|
+
import { MediaElement } from "../media-element.js";
|
|
3
|
+
import { PlayerController } from "../../player/player-controller.js";
|
|
4
|
+
import { applyStateDataAttrs, logMissingFeature, selectPlayback } from "@videojs/core/dom";
|
|
5
|
+
import { BufferingIndicatorCore, BufferingIndicatorDataAttrs } from "@videojs/core";
|
|
6
|
+
|
|
7
|
+
//#region src/ui/buffering-indicator/buffering-indicator-element.ts
|
|
8
|
+
var BufferingIndicatorElement = class BufferingIndicatorElement extends MediaElement {
|
|
9
|
+
constructor(..._args) {
|
|
10
|
+
super(..._args);
|
|
11
|
+
this.delay = BufferingIndicatorCore.defaultProps.delay;
|
|
12
|
+
}
|
|
13
|
+
static {
|
|
14
|
+
this.tagName = "media-buffering-indicator";
|
|
15
|
+
}
|
|
16
|
+
static {
|
|
17
|
+
this.properties = { delay: { type: Number } };
|
|
18
|
+
}
|
|
19
|
+
#core = new BufferingIndicatorCore();
|
|
20
|
+
#state = new PlayerController(this, playerContext, selectPlayback);
|
|
21
|
+
#disconnect = null;
|
|
22
|
+
connectedCallback() {
|
|
23
|
+
super.connectedCallback();
|
|
24
|
+
this.#disconnect = new AbortController();
|
|
25
|
+
this.#core.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });
|
|
26
|
+
if (!this.#state.value) logMissingFeature(BufferingIndicatorElement.tagName, "playback");
|
|
27
|
+
}
|
|
28
|
+
disconnectedCallback() {
|
|
29
|
+
super.disconnectedCallback();
|
|
30
|
+
this.#disconnect?.abort();
|
|
31
|
+
this.#disconnect = null;
|
|
32
|
+
}
|
|
33
|
+
willUpdate(changed) {
|
|
34
|
+
super.willUpdate(changed);
|
|
35
|
+
this.#core.setProps(this);
|
|
36
|
+
}
|
|
37
|
+
update(changed) {
|
|
38
|
+
super.update(changed);
|
|
39
|
+
const media = this.#state.value;
|
|
40
|
+
if (!media) return;
|
|
41
|
+
this.#core.update(media);
|
|
42
|
+
applyStateDataAttrs(this, this.#core.state.current, BufferingIndicatorDataAttrs);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
export { BufferingIndicatorElement };
|
|
48
|
+
//# sourceMappingURL=buffering-indicator-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffering-indicator-element.js","names":["#core","#state","#disconnect"],"sources":["../../../../src/ui/buffering-indicator/buffering-indicator-element.ts"],"sourcesContent":["import { BufferingIndicatorCore, BufferingIndicatorDataAttrs } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectPlayback } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class BufferingIndicatorElement extends MediaElement {\n static readonly tagName = 'media-buffering-indicator';\n\n static override properties = {\n delay: { type: Number },\n } satisfies PropertyDeclarationMap<keyof BufferingIndicatorCore.Props>;\n\n delay = BufferingIndicatorCore.defaultProps.delay;\n\n readonly #core = new BufferingIndicatorCore();\n readonly #state = new PlayerController(this, playerContext, selectPlayback);\n\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.#disconnect = new AbortController();\n\n this.#core.state.subscribe(() => this.requestUpdate(), {\n signal: this.#disconnect.signal,\n });\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(BufferingIndicatorElement.tagName, 'playback');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.#state.value;\n\n if (!media) return;\n\n this.#core.update(media);\n applyStateDataAttrs(this, this.#core.state.current, BufferingIndicatorDataAttrs);\n }\n}\n"],"mappings":";;;;;;;AAQA,IAAa,4BAAb,MAAa,kCAAkC,aAAa;;;eAOlD,uBAAuB,aAAa;;;iBANlB;;;oBAEG,EAC3B,OAAO,EAAE,MAAM,QAAQ,EACxB;;CAID,CAASA,OAAQ,IAAI,wBAAwB;CAC7C,CAASC,QAAS,IAAI,iBAAiB,MAAM,eAAe,eAAe;CAE3E,cAAsC;CAEtC,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AAEzB,QAAKC,aAAc,IAAI,iBAAiB;AAExC,QAAKF,KAAM,MAAM,gBAAgB,KAAK,eAAe,EAAE,EACrD,QAAQ,MAAKE,WAAY,QAC1B,CAAC;AAEF,MAAe,CAAC,MAAKD,MAAO,MAC1B,mBAAkB,0BAA0B,SAAS,WAAW;;CAIpE,AAAS,uBAA6B;AACpC,QAAM,sBAAsB;AAC5B,QAAKC,YAAa,OAAO;AACzB,QAAKA,aAAc;;CAGrB,AAAmB,WAAW,SAA+B;AAC3D,QAAM,WAAW,QAAQ;AACzB,QAAKF,KAAM,SAAS,KAAK;;CAG3B,AAAmB,OAAO,SAA+B;AACvD,QAAM,OAAO,QAAQ;EAErB,MAAM,QAAQ,MAAKC,MAAO;AAE1B,MAAI,CAAC,MAAO;AAEZ,QAAKD,KAAM,OAAO,MAAM;AACxB,sBAAoB,MAAM,MAAKA,KAAM,MAAM,SAAS,4BAA4B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { MediaElement } from "../media-element.js";
|
|
2
|
+
import { PropertyValues } from "@videojs/element";
|
|
3
|
+
|
|
4
|
+
//#region src/ui/controls/controls-element.d.ts
|
|
5
|
+
declare class ControlsElement extends MediaElement {
|
|
6
|
+
#private;
|
|
7
|
+
static readonly tagName = "media-controls";
|
|
8
|
+
connectedCallback(): void;
|
|
9
|
+
protected update(changed: PropertyValues): void;
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
export { ControlsElement };
|
|
13
|
+
//# sourceMappingURL=controls-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls-element.d.ts","names":[],"sources":["../../../../src/ui/controls/controls-element.ts"],"mappings":";;;;cAQa,eAAA,SAAwB,YAAA;EAAA;kBACnB,OAAA;EAKP,iBAAA,CAAA;EAAA,UAQU,MAAA,CAAO,OAAA,EAAS,cAAA;AAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { playerContext } from "../../player/context.js";
|
|
2
|
+
import { MediaElement } from "../media-element.js";
|
|
3
|
+
import { PlayerController } from "../../player/player-controller.js";
|
|
4
|
+
import { applyStateDataAttrs, logMissingFeature, selectControls } from "@videojs/core/dom";
|
|
5
|
+
import { ControlsCore, ControlsDataAttrs } from "@videojs/core";
|
|
6
|
+
|
|
7
|
+
//#region src/ui/controls/controls-element.ts
|
|
8
|
+
var ControlsElement = class ControlsElement extends MediaElement {
|
|
9
|
+
static {
|
|
10
|
+
this.tagName = "media-controls";
|
|
11
|
+
}
|
|
12
|
+
#core = new ControlsCore();
|
|
13
|
+
#state = new PlayerController(this, playerContext, selectControls);
|
|
14
|
+
connectedCallback() {
|
|
15
|
+
super.connectedCallback();
|
|
16
|
+
if (!this.#state.value) logMissingFeature(ControlsElement.tagName, "controls");
|
|
17
|
+
}
|
|
18
|
+
update(changed) {
|
|
19
|
+
super.update(changed);
|
|
20
|
+
const controls = this.#state.value;
|
|
21
|
+
if (!controls) return;
|
|
22
|
+
applyStateDataAttrs(this, this.#core.getState(controls), ControlsDataAttrs);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
27
|
+
export { ControlsElement };
|
|
28
|
+
//# sourceMappingURL=controls-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls-element.js","names":["#core","#state"],"sources":["../../../../src/ui/controls/controls-element.ts"],"sourcesContent":["import { ControlsCore, ControlsDataAttrs } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectControls } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class ControlsElement extends MediaElement {\n static readonly tagName = 'media-controls';\n\n readonly #core = new ControlsCore();\n readonly #state = new PlayerController(this, playerContext, selectControls);\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(ControlsElement.tagName, 'controls');\n }\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const controls = this.#state.value;\n\n if (!controls) {\n return;\n }\n\n applyStateDataAttrs(this, this.#core.getState(controls), ControlsDataAttrs);\n }\n}\n"],"mappings":";;;;;;;AAQA,IAAa,kBAAb,MAAa,wBAAwB,aAAa;;iBACtB;;CAE1B,CAASA,OAAQ,IAAI,cAAc;CACnC,CAASC,QAAS,IAAI,iBAAiB,MAAM,eAAe,eAAe;CAE3E,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AAEzB,MAAe,CAAC,MAAKA,MAAO,MAC1B,mBAAkB,gBAAgB,SAAS,WAAW;;CAI1D,AAAmB,OAAO,SAA+B;AACvD,QAAM,OAAO,QAAQ;EAErB,MAAM,WAAW,MAAKA,MAAO;AAE7B,MAAI,CAAC,SACH;AAGF,sBAAoB,MAAM,MAAKD,KAAM,SAAS,SAAS,EAAE,kBAAkB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MediaElement } from "../media-element.js";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/controls/controls-group-element.d.ts
|
|
4
|
+
declare class ControlsGroupElement extends MediaElement {
|
|
5
|
+
static readonly tagName = "media-controls-group";
|
|
6
|
+
connectedCallback(): void;
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { ControlsGroupElement };
|
|
10
|
+
//# sourceMappingURL=controls-group-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls-group-element.d.ts","names":[],"sources":["../../../../src/ui/controls/controls-group-element.ts"],"mappings":";;;cAEa,oBAAA,SAA6B,YAAA;EAAA,gBACxB,OAAA;EAEP,iBAAA,CAAA;AAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MediaElement } from "../media-element.js";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/controls/controls-group-element.ts
|
|
4
|
+
var ControlsGroupElement = class extends MediaElement {
|
|
5
|
+
static {
|
|
6
|
+
this.tagName = "media-controls-group";
|
|
7
|
+
}
|
|
8
|
+
connectedCallback() {
|
|
9
|
+
super.connectedCallback();
|
|
10
|
+
if (this.hasAttribute("aria-label") || this.hasAttribute("aria-labelledby")) this.setAttribute("role", "group");
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { ControlsGroupElement };
|
|
16
|
+
//# sourceMappingURL=controls-group-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls-group-element.js","names":[],"sources":["../../../../src/ui/controls/controls-group-element.ts"],"sourcesContent":["import { MediaElement } from '../media-element';\n\nexport class ControlsGroupElement extends MediaElement {\n static readonly tagName = 'media-controls-group';\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.hasAttribute('aria-label') || this.hasAttribute('aria-labelledby')) {\n this.setAttribute('role', 'group');\n }\n }\n}\n"],"mappings":";;;AAEA,IAAa,uBAAb,cAA0C,aAAa;;iBAC3B;;CAE1B,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AAEzB,MAAI,KAAK,aAAa,aAAa,IAAI,KAAK,aAAa,kBAAkB,CACzE,MAAK,aAAa,QAAQ,QAAQ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { MediaElement } from "../media-element.js";
|
|
2
|
+
import { PropertyValues } from "@videojs/element";
|
|
3
|
+
import * as _videojs_core0 from "@videojs/core";
|
|
4
|
+
|
|
5
|
+
//#region src/ui/fullscreen-button/fullscreen-button-element.d.ts
|
|
6
|
+
declare class FullscreenButtonElement extends MediaElement {
|
|
7
|
+
#private;
|
|
8
|
+
static readonly tagName = "media-fullscreen-button";
|
|
9
|
+
static properties: {
|
|
10
|
+
label: {
|
|
11
|
+
type: StringConstructor;
|
|
12
|
+
};
|
|
13
|
+
disabled: {
|
|
14
|
+
type: BooleanConstructor;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
label: string | ((state: _videojs_core0.FullscreenButtonState) => string);
|
|
18
|
+
disabled: boolean;
|
|
19
|
+
connectedCallback(): void;
|
|
20
|
+
disconnectedCallback(): void;
|
|
21
|
+
protected willUpdate(changed: PropertyValues): void;
|
|
22
|
+
protected update(changed: PropertyValues): void;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { FullscreenButtonElement };
|
|
26
|
+
//# sourceMappingURL=fullscreen-button-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fullscreen-button-element.d.ts","names":[],"sources":["../../../../src/ui/fullscreen-button/fullscreen-button-element.ts"],"mappings":";;;;;cAca,uBAAA,SAAgC,YAAA;EAAA;kBAC3B,OAAA;EAAA,OAEA,UAAA;;;;;;;;EAKhB,KAAA,aAAK,KAAA,iBAAA,qBAAA;EACL,QAAA;EAOS,iBAAA,CAAA;EAiBA,oBAAA,CAAA;EAAA,UAMU,UAAA,CAAW,OAAA,EAAS,cAAA;EAAA,UAKpB,MAAA,CAAO,OAAA,EAAS,cAAA;AAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { playerContext } from "../../player/context.js";
|
|
2
|
+
import { MediaElement } from "../media-element.js";
|
|
3
|
+
import { PlayerController } from "../../player/player-controller.js";
|
|
4
|
+
import { applyElementProps, applyStateDataAttrs, createButton, logMissingFeature, selectFullscreen } from "@videojs/core/dom";
|
|
5
|
+
import { FullscreenButtonCore, FullscreenButtonDataAttrs } from "@videojs/core";
|
|
6
|
+
|
|
7
|
+
//#region src/ui/fullscreen-button/fullscreen-button-element.ts
|
|
8
|
+
var FullscreenButtonElement = class FullscreenButtonElement extends MediaElement {
|
|
9
|
+
constructor(..._args) {
|
|
10
|
+
super(..._args);
|
|
11
|
+
this.label = FullscreenButtonCore.defaultProps.label;
|
|
12
|
+
this.disabled = FullscreenButtonCore.defaultProps.disabled;
|
|
13
|
+
}
|
|
14
|
+
static {
|
|
15
|
+
this.tagName = "media-fullscreen-button";
|
|
16
|
+
}
|
|
17
|
+
static {
|
|
18
|
+
this.properties = {
|
|
19
|
+
label: { type: String },
|
|
20
|
+
disabled: { type: Boolean }
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
#core = new FullscreenButtonCore();
|
|
24
|
+
#state = new PlayerController(this, playerContext, selectFullscreen);
|
|
25
|
+
#disconnect = null;
|
|
26
|
+
connectedCallback() {
|
|
27
|
+
super.connectedCallback();
|
|
28
|
+
this.#disconnect = new AbortController();
|
|
29
|
+
const buttonProps = createButton({
|
|
30
|
+
onActivate: () => this.#core.toggle(this.#state.value),
|
|
31
|
+
isDisabled: () => this.disabled || !this.#state.value
|
|
32
|
+
});
|
|
33
|
+
applyElementProps(this, buttonProps, this.#disconnect.signal);
|
|
34
|
+
if (!this.#state.value) logMissingFeature(FullscreenButtonElement.tagName, "fullscreen");
|
|
35
|
+
}
|
|
36
|
+
disconnectedCallback() {
|
|
37
|
+
super.disconnectedCallback();
|
|
38
|
+
this.#disconnect?.abort();
|
|
39
|
+
this.#disconnect = null;
|
|
40
|
+
}
|
|
41
|
+
willUpdate(changed) {
|
|
42
|
+
super.willUpdate(changed);
|
|
43
|
+
this.#core.setProps(this);
|
|
44
|
+
}
|
|
45
|
+
update(changed) {
|
|
46
|
+
super.update(changed);
|
|
47
|
+
const media = this.#state.value;
|
|
48
|
+
if (!media) return;
|
|
49
|
+
const state = this.#core.getState(media);
|
|
50
|
+
applyElementProps(this, this.#core.getAttrs(state));
|
|
51
|
+
applyStateDataAttrs(this, state, FullscreenButtonDataAttrs);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
//#endregion
|
|
56
|
+
export { FullscreenButtonElement };
|
|
57
|
+
//# sourceMappingURL=fullscreen-button-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fullscreen-button-element.js","names":["#core","#state","#disconnect"],"sources":["../../../../src/ui/fullscreen-button/fullscreen-button-element.ts"],"sourcesContent":["import { FullscreenButtonCore, FullscreenButtonDataAttrs } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createButton,\n logMissingFeature,\n selectFullscreen,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class FullscreenButtonElement extends MediaElement {\n static readonly tagName = 'media-fullscreen-button';\n\n static override properties = {\n label: { type: String },\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<keyof FullscreenButtonCore.Props>;\n\n label = FullscreenButtonCore.defaultProps.label;\n disabled = FullscreenButtonCore.defaultProps.disabled;\n\n readonly #core = new FullscreenButtonCore();\n readonly #state = new PlayerController(this, playerContext, selectFullscreen);\n\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => this.#core.toggle(this.#state.value!),\n isDisabled: () => this.disabled || !this.#state.value,\n });\n\n applyElementProps(this, buttonProps, this.#disconnect.signal);\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(FullscreenButtonElement.tagName, 'fullscreen');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.#state.value;\n\n if (!media) return;\n\n const state = this.#core.getState(media);\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, FullscreenButtonDataAttrs);\n }\n}\n"],"mappings":";;;;;;;AAcA,IAAa,0BAAb,MAAa,gCAAgC,aAAa;;;eAQhD,qBAAqB,aAAa;kBAC/B,qBAAqB,aAAa;;;iBARnB;;;oBAEG;GAC3B,OAAO,EAAE,MAAM,QAAQ;GACvB,UAAU,EAAE,MAAM,SAAS;GAC5B;;CAKD,CAASA,OAAQ,IAAI,sBAAsB;CAC3C,CAASC,QAAS,IAAI,iBAAiB,MAAM,eAAe,iBAAiB;CAE7E,cAAsC;CAEtC,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AAEzB,QAAKC,aAAc,IAAI,iBAAiB;EAExC,MAAM,cAAc,aAAa;GAC/B,kBAAkB,MAAKF,KAAM,OAAO,MAAKC,MAAO,MAAO;GACvD,kBAAkB,KAAK,YAAY,CAAC,MAAKA,MAAO;GACjD,CAAC;AAEF,oBAAkB,MAAM,aAAa,MAAKC,WAAY,OAAO;AAE7D,MAAe,CAAC,MAAKD,MAAO,MAC1B,mBAAkB,wBAAwB,SAAS,aAAa;;CAIpE,AAAS,uBAA6B;AACpC,QAAM,sBAAsB;AAC5B,QAAKC,YAAa,OAAO;AACzB,QAAKA,aAAc;;CAGrB,AAAmB,WAAW,SAA+B;AAC3D,QAAM,WAAW,QAAQ;AACzB,QAAKF,KAAM,SAAS,KAAK;;CAG3B,AAAmB,OAAO,SAA+B;AACvD,QAAM,OAAO,QAAQ;EAErB,MAAM,QAAQ,MAAKC,MAAO;AAE1B,MAAI,CAAC,MAAO;EAEZ,MAAM,QAAQ,MAAKD,KAAM,SAAS,MAAM;AACxC,oBAAkB,MAAM,MAAKA,KAAM,SAAS,MAAM,CAAC;AACnD,sBAAoB,MAAM,OAAO,0BAA0B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactiveElement } from "@videojs/element";
|
|
2
|
+
import { Constructor } from "@videojs/utils/types";
|
|
3
|
+
|
|
4
|
+
//#region src/ui/media-element.d.ts
|
|
5
|
+
declare class MediaElement extends ReactiveElement {}
|
|
6
|
+
interface MediaElementConstructor extends Constructor<MediaElement> {}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { MediaElement, MediaElementConstructor };
|
|
9
|
+
//# sourceMappingURL=media-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-element.d.ts","names":[],"sources":["../../../src/ui/media-element.ts"],"mappings":";;;;cAGa,YAAA,SAAqB,eAAA;AAAA,UAEjB,uBAAA,SAAgC,WAAA,CAAY,YAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-element.js","names":[],"sources":["../../../src/ui/media-element.ts"],"sourcesContent":["import { ReactiveElement } from '@videojs/element';\nimport type { Constructor } from '@videojs/utils/types';\n\nexport class MediaElement extends ReactiveElement {}\n\nexport interface MediaElementConstructor extends Constructor<MediaElement> {}\n"],"mappings":";;;AAGA,IAAa,eAAb,cAAkC,gBAAgB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { MediaElement } from "../media-element.js";
|
|
2
|
+
import { PropertyValues } from "@videojs/element";
|
|
3
|
+
import * as _videojs_core0 from "@videojs/core";
|
|
4
|
+
|
|
5
|
+
//#region src/ui/mute-button/mute-button-element.d.ts
|
|
6
|
+
declare class MuteButtonElement extends MediaElement {
|
|
7
|
+
#private;
|
|
8
|
+
static readonly tagName = "media-mute-button";
|
|
9
|
+
static properties: {
|
|
10
|
+
label: {
|
|
11
|
+
type: StringConstructor;
|
|
12
|
+
};
|
|
13
|
+
disabled: {
|
|
14
|
+
type: BooleanConstructor;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
label: string | ((state: _videojs_core0.MuteButtonState) => string);
|
|
18
|
+
disabled: boolean;
|
|
19
|
+
connectedCallback(): void;
|
|
20
|
+
disconnectedCallback(): void;
|
|
21
|
+
protected willUpdate(changed: PropertyValues): void;
|
|
22
|
+
protected update(changed: PropertyValues): void;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { MuteButtonElement };
|
|
26
|
+
//# sourceMappingURL=mute-button-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mute-button-element.d.ts","names":[],"sources":["../../../../src/ui/mute-button/mute-button-element.ts"],"mappings":";;;;;cAca,iBAAA,SAA0B,YAAA;EAAA;kBACrB,OAAA;EAAA,OAEA,UAAA;;;;;;;;EAKhB,KAAA,aAAK,KAAA,iBAAA,eAAA;EACL,QAAA;EAOS,iBAAA,CAAA;EAiBA,oBAAA,CAAA;EAAA,UAMU,UAAA,CAAW,OAAA,EAAS,cAAA;EAAA,UAKpB,MAAA,CAAO,OAAA,EAAS,cAAA;AAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { playerContext } from "../../player/context.js";
|
|
2
|
+
import { MediaElement } from "../media-element.js";
|
|
3
|
+
import { PlayerController } from "../../player/player-controller.js";
|
|
4
|
+
import { applyElementProps, applyStateDataAttrs, createButton, logMissingFeature, selectVolume } from "@videojs/core/dom";
|
|
5
|
+
import { MuteButtonCore, MuteButtonDataAttrs } from "@videojs/core";
|
|
6
|
+
|
|
7
|
+
//#region src/ui/mute-button/mute-button-element.ts
|
|
8
|
+
var MuteButtonElement = class MuteButtonElement extends MediaElement {
|
|
9
|
+
constructor(..._args) {
|
|
10
|
+
super(..._args);
|
|
11
|
+
this.label = MuteButtonCore.defaultProps.label;
|
|
12
|
+
this.disabled = MuteButtonCore.defaultProps.disabled;
|
|
13
|
+
}
|
|
14
|
+
static {
|
|
15
|
+
this.tagName = "media-mute-button";
|
|
16
|
+
}
|
|
17
|
+
static {
|
|
18
|
+
this.properties = {
|
|
19
|
+
label: { type: String },
|
|
20
|
+
disabled: { type: Boolean }
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
#core = new MuteButtonCore();
|
|
24
|
+
#state = new PlayerController(this, playerContext, selectVolume);
|
|
25
|
+
#disconnect = null;
|
|
26
|
+
connectedCallback() {
|
|
27
|
+
super.connectedCallback();
|
|
28
|
+
this.#disconnect = new AbortController();
|
|
29
|
+
const buttonProps = createButton({
|
|
30
|
+
onActivate: () => this.#core.toggle(this.#state.value),
|
|
31
|
+
isDisabled: () => this.disabled || !this.#state.value
|
|
32
|
+
});
|
|
33
|
+
applyElementProps(this, buttonProps, this.#disconnect.signal);
|
|
34
|
+
if (!this.#state.value) logMissingFeature(MuteButtonElement.tagName, "volume");
|
|
35
|
+
}
|
|
36
|
+
disconnectedCallback() {
|
|
37
|
+
super.disconnectedCallback();
|
|
38
|
+
this.#disconnect?.abort();
|
|
39
|
+
this.#disconnect = null;
|
|
40
|
+
}
|
|
41
|
+
willUpdate(changed) {
|
|
42
|
+
super.willUpdate(changed);
|
|
43
|
+
this.#core.setProps(this);
|
|
44
|
+
}
|
|
45
|
+
update(changed) {
|
|
46
|
+
super.update(changed);
|
|
47
|
+
const media = this.#state.value;
|
|
48
|
+
if (!media) return;
|
|
49
|
+
const state = this.#core.getState(media);
|
|
50
|
+
applyElementProps(this, this.#core.getAttrs(state));
|
|
51
|
+
applyStateDataAttrs(this, state, MuteButtonDataAttrs);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
//#endregion
|
|
56
|
+
export { MuteButtonElement };
|
|
57
|
+
//# sourceMappingURL=mute-button-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mute-button-element.js","names":["#core","#state","#disconnect"],"sources":["../../../../src/ui/mute-button/mute-button-element.ts"],"sourcesContent":["import { MuteButtonCore, MuteButtonDataAttrs } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createButton,\n logMissingFeature,\n selectVolume,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class MuteButtonElement extends MediaElement {\n static readonly tagName = 'media-mute-button';\n\n static override properties = {\n label: { type: String },\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<keyof MuteButtonCore.Props>;\n\n label = MuteButtonCore.defaultProps.label;\n disabled = MuteButtonCore.defaultProps.disabled;\n\n readonly #core = new MuteButtonCore();\n readonly #state = new PlayerController(this, playerContext, selectVolume);\n\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => this.#core.toggle(this.#state.value!),\n isDisabled: () => this.disabled || !this.#state.value,\n });\n\n applyElementProps(this, buttonProps, this.#disconnect.signal);\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(MuteButtonElement.tagName, 'volume');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.#state.value;\n\n if (!media) return;\n\n const state = this.#core.getState(media);\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, MuteButtonDataAttrs);\n }\n}\n"],"mappings":";;;;;;;AAcA,IAAa,oBAAb,MAAa,0BAA0B,aAAa;;;eAQ1C,eAAe,aAAa;kBACzB,eAAe,aAAa;;;iBARb;;;oBAEG;GAC3B,OAAO,EAAE,MAAM,QAAQ;GACvB,UAAU,EAAE,MAAM,SAAS;GAC5B;;CAKD,CAASA,OAAQ,IAAI,gBAAgB;CACrC,CAASC,QAAS,IAAI,iBAAiB,MAAM,eAAe,aAAa;CAEzE,cAAsC;CAEtC,AAAS,oBAA0B;AACjC,QAAM,mBAAmB;AAEzB,QAAKC,aAAc,IAAI,iBAAiB;EAExC,MAAM,cAAc,aAAa;GAC/B,kBAAkB,MAAKF,KAAM,OAAO,MAAKC,MAAO,MAAO;GACvD,kBAAkB,KAAK,YAAY,CAAC,MAAKA,MAAO;GACjD,CAAC;AAEF,oBAAkB,MAAM,aAAa,MAAKC,WAAY,OAAO;AAE7D,MAAe,CAAC,MAAKD,MAAO,MAC1B,mBAAkB,kBAAkB,SAAS,SAAS;;CAI1D,AAAS,uBAA6B;AACpC,QAAM,sBAAsB;AAC5B,QAAKC,YAAa,OAAO;AACzB,QAAKA,aAAc;;CAGrB,AAAmB,WAAW,SAA+B;AAC3D,QAAM,WAAW,QAAQ;AACzB,QAAKF,KAAM,SAAS,KAAK;;CAG3B,AAAmB,OAAO,SAA+B;AACvD,QAAM,OAAO,QAAQ;EAErB,MAAM,QAAQ,MAAKC,MAAO;AAE1B,MAAI,CAAC,MAAO;EAEZ,MAAM,QAAQ,MAAKD,KAAM,SAAS,MAAM;AACxC,oBAAkB,MAAM,MAAKA,KAAM,SAAS,MAAM,CAAC;AACnD,sBAAoB,MAAM,OAAO,oBAAoB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { MediaElement } from "../media-element.js";
|
|
2
|
+
import { PropertyValues } from "@videojs/element";
|
|
3
|
+
import * as _videojs_core0 from "@videojs/core";
|
|
4
|
+
|
|
5
|
+
//#region src/ui/pip-button/pip-button-element.d.ts
|
|
6
|
+
declare class PiPButtonElement extends MediaElement {
|
|
7
|
+
#private;
|
|
8
|
+
static readonly tagName = "media-pip-button";
|
|
9
|
+
static properties: {
|
|
10
|
+
label: {
|
|
11
|
+
type: StringConstructor;
|
|
12
|
+
};
|
|
13
|
+
disabled: {
|
|
14
|
+
type: BooleanConstructor;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
label: string | ((state: _videojs_core0.PiPButtonState) => string);
|
|
18
|
+
disabled: boolean;
|
|
19
|
+
connectedCallback(): void;
|
|
20
|
+
disconnectedCallback(): void;
|
|
21
|
+
protected willUpdate(changed: PropertyValues): void;
|
|
22
|
+
protected update(changed: PropertyValues): void;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { PiPButtonElement };
|
|
26
|
+
//# sourceMappingURL=pip-button-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pip-button-element.d.ts","names":[],"sources":["../../../../src/ui/pip-button/pip-button-element.ts"],"mappings":";;;;;cAQa,gBAAA,SAAyB,YAAA;EAAA;kBACpB,OAAA;EAAA,OAEA,UAAA;;;;;;;;EAKhB,KAAA,aAAK,KAAA,iBAAA,cAAA;EACL,QAAA;EAOS,iBAAA,CAAA;EAiBA,oBAAA,CAAA;EAAA,UAMU,UAAA,CAAW,OAAA,EAAS,cAAA;EAAA,UAKpB,MAAA,CAAO,OAAA,EAAS,cAAA;AAAA"}
|