@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,23 @@
|
|
|
1
|
+
import { PLAYER_CONTEXT_KEY, PlayerContext, PlayerContextValue, playerContext } from "./player/context.js";
|
|
2
|
+
import { MediaElement, MediaElementConstructor } from "./ui/media-element.js";
|
|
3
|
+
import { PlayerConsumer, PlayerConsumerConstructor, PlayerElement, PlayerElementConstructor, PlayerProvider, PlayerProviderConstructor } from "./store/types.js";
|
|
4
|
+
import { ContainerMixin, createContainerMixin } from "./store/container-mixin.js";
|
|
5
|
+
import { ProviderMixin, createProviderMixin } from "./store/provider-mixin.js";
|
|
6
|
+
import { PlayerController, PlayerControllerHost } from "./player/player-controller.js";
|
|
7
|
+
import { PlayerMixin, createPlayerMixin } from "./player/player-mixin.js";
|
|
8
|
+
import { CreatePlayerConfig, CreatePlayerResult, createPlayer } from "./player/create-player.js";
|
|
9
|
+
import { BufferingIndicatorElement } from "./ui/buffering-indicator/buffering-indicator-element.js";
|
|
10
|
+
import { ControlsElement } from "./ui/controls/controls-element.js";
|
|
11
|
+
import { ControlsGroupElement } from "./ui/controls/controls-group-element.js";
|
|
12
|
+
import { FullscreenButtonElement } from "./ui/fullscreen-button/fullscreen-button-element.js";
|
|
13
|
+
import { MuteButtonElement } from "./ui/mute-button/mute-button-element.js";
|
|
14
|
+
import { PiPButtonElement } from "./ui/pip-button/pip-button-element.js";
|
|
15
|
+
import { PlayButtonElement } from "./ui/play-button/play-button-element.js";
|
|
16
|
+
import { PosterElement } from "./ui/poster/poster-element.js";
|
|
17
|
+
import { SeekButtonElement } from "./ui/seek-button/seek-button-element.js";
|
|
18
|
+
import { TimeElement } from "./ui/time/time-element.js";
|
|
19
|
+
import { TimeGroupElement } from "./ui/time/time-group-element.js";
|
|
20
|
+
import { TimeSeparatorElement } from "./ui/time/time-separator-element.js";
|
|
21
|
+
import { Comparator, Selector, createSelector, shallowEqual } from "@videojs/store";
|
|
22
|
+
export * from "@videojs/core/dom";
|
|
23
|
+
export { BufferingIndicatorElement, type Comparator, ContainerMixin, ControlsElement, ControlsGroupElement, CreatePlayerConfig, CreatePlayerResult, FullscreenButtonElement, MediaElement, MediaElementConstructor, MuteButtonElement, PLAYER_CONTEXT_KEY, PiPButtonElement, PlayButtonElement, PlayerConsumer, PlayerConsumerConstructor, PlayerContext, PlayerContextValue, PlayerController, PlayerControllerHost, PlayerElement, PlayerElementConstructor, PlayerMixin, PlayerProvider, PlayerProviderConstructor, PosterElement, ProviderMixin, SeekButtonElement, type Selector, TimeElement, TimeGroupElement, TimeSeparatorElement, createContainerMixin, createPlayer, createPlayerMixin, createProviderMixin, createSelector, playerContext, shallowEqual };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { PLAYER_CONTEXT_KEY, playerContext } from "./player/context.js";
|
|
2
|
+
import { createContainerMixin } from "./store/container-mixin.js";
|
|
3
|
+
import { createProviderMixin } from "./store/provider-mixin.js";
|
|
4
|
+
import { MediaElement } from "./ui/media-element.js";
|
|
5
|
+
import { PlayerController } from "./player/player-controller.js";
|
|
6
|
+
import { createPlayerMixin } from "./player/player-mixin.js";
|
|
7
|
+
import { createPlayer } from "./player/create-player.js";
|
|
8
|
+
import { BufferingIndicatorElement } from "./ui/buffering-indicator/buffering-indicator-element.js";
|
|
9
|
+
import { ControlsElement } from "./ui/controls/controls-element.js";
|
|
10
|
+
import { ControlsGroupElement } from "./ui/controls/controls-group-element.js";
|
|
11
|
+
import { FullscreenButtonElement } from "./ui/fullscreen-button/fullscreen-button-element.js";
|
|
12
|
+
import { MuteButtonElement } from "./ui/mute-button/mute-button-element.js";
|
|
13
|
+
import { PiPButtonElement } from "./ui/pip-button/pip-button-element.js";
|
|
14
|
+
import { PlayButtonElement } from "./ui/play-button/play-button-element.js";
|
|
15
|
+
import { PosterElement } from "./ui/poster/poster-element.js";
|
|
16
|
+
import { SeekButtonElement } from "./ui/seek-button/seek-button-element.js";
|
|
17
|
+
import { TimeElement } from "./ui/time/time-element.js";
|
|
18
|
+
import { TimeGroupElement } from "./ui/time/time-group-element.js";
|
|
19
|
+
import { TimeSeparatorElement } from "./ui/time/time-separator-element.js";
|
|
20
|
+
import { createSelector, shallowEqual } from "@videojs/store";
|
|
21
|
+
|
|
22
|
+
export * from "@videojs/core/dom"
|
|
23
|
+
|
|
24
|
+
export { BufferingIndicatorElement, ControlsElement, ControlsGroupElement, FullscreenButtonElement, MediaElement, MuteButtonElement, PLAYER_CONTEXT_KEY, PiPButtonElement, PlayButtonElement, PlayerController, PosterElement, SeekButtonElement, TimeElement, TimeGroupElement, TimeSeparatorElement, createContainerMixin, createPlayer, createPlayerMixin, createProviderMixin, createSelector, playerContext, shallowEqual };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as _videojs_core_dom_media_custom_media_element0 from "@videojs/core/dom/media/custom-media-element";
|
|
2
|
+
|
|
3
|
+
//#region src/media/background-video/index.d.ts
|
|
4
|
+
declare function getTemplateHTML(attrs: Record<string, string>): string;
|
|
5
|
+
declare const BackgroundVideo_base: _videojs_core_dom_media_custom_media_element0.CustomVideoElement;
|
|
6
|
+
declare class BackgroundVideo extends BackgroundVideo_base {
|
|
7
|
+
static shadowRootOptions: {
|
|
8
|
+
mode: ShadowRootMode;
|
|
9
|
+
};
|
|
10
|
+
static getTemplateHTML: typeof getTemplateHTML;
|
|
11
|
+
constructor();
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { BackgroundVideo };
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/media/background-video/index.ts"],"mappings":";;;iBAES,eAAA,CAAgB,KAAA,EAAO,MAAA;AAAA,cAAsB,oBAAA;cAoBzC,eAAA,SAAwB,oBAAA;EAAA,OAC5B,iBAAA;UAAsC,cAAA;EAAA;EAAA,OACtC,eAAA,SAAe,eAAA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { CustomMediaMixin } from "@videojs/core/dom/media/custom-media-element";
|
|
2
|
+
|
|
3
|
+
//#region src/media/background-video/index.ts
|
|
4
|
+
function getTemplateHTML(attrs) {
|
|
5
|
+
return `
|
|
6
|
+
<style>
|
|
7
|
+
:host {
|
|
8
|
+
position: relative;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
video {
|
|
12
|
+
position: absolute;
|
|
13
|
+
inset: 0;
|
|
14
|
+
width: 100%;
|
|
15
|
+
height: 100%;
|
|
16
|
+
object-fit: inherit;
|
|
17
|
+
}
|
|
18
|
+
</style>
|
|
19
|
+
<slot></slot>
|
|
20
|
+
<video ${serializeAttributes(attrs)}></video>
|
|
21
|
+
`;
|
|
22
|
+
}
|
|
23
|
+
var BackgroundVideo = class extends CustomMediaMixin(HTMLElement, { tag: "video" }) {
|
|
24
|
+
static {
|
|
25
|
+
this.shadowRootOptions = { mode: "open" };
|
|
26
|
+
}
|
|
27
|
+
static {
|
|
28
|
+
this.getTemplateHTML = getTemplateHTML;
|
|
29
|
+
}
|
|
30
|
+
constructor() {
|
|
31
|
+
super();
|
|
32
|
+
if (!this.shadowRoot) {
|
|
33
|
+
this.attachShadow(this.constructor.shadowRootOptions);
|
|
34
|
+
const attrs = {
|
|
35
|
+
...namedNodeMapToObject(this.attributes),
|
|
36
|
+
...!this.hasAttribute("nomuted") && { muted: "" },
|
|
37
|
+
...!this.hasAttribute("noloop") && { loop: "" },
|
|
38
|
+
...!this.hasAttribute("noautoplay") && { autoplay: "" },
|
|
39
|
+
playsinline: "",
|
|
40
|
+
disableremoteplayback: "",
|
|
41
|
+
disablepictureinpicture: ""
|
|
42
|
+
};
|
|
43
|
+
this.shadowRoot.innerHTML = getTemplateHTML(attrs);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
function namedNodeMapToObject(namedNodeMap) {
|
|
48
|
+
const obj = {};
|
|
49
|
+
for (const attr of namedNodeMap) obj[attr.name] = attr.value;
|
|
50
|
+
return obj;
|
|
51
|
+
}
|
|
52
|
+
const VideoAttributes = [
|
|
53
|
+
"autoplay",
|
|
54
|
+
"controls",
|
|
55
|
+
"controlslist",
|
|
56
|
+
"crossorigin",
|
|
57
|
+
"disablepictureinpicture",
|
|
58
|
+
"disableremoteplayback",
|
|
59
|
+
"loop",
|
|
60
|
+
"muted",
|
|
61
|
+
"playsinline",
|
|
62
|
+
"preload"
|
|
63
|
+
];
|
|
64
|
+
function serializeAttributes(attrs) {
|
|
65
|
+
let html = "";
|
|
66
|
+
for (const key in attrs) {
|
|
67
|
+
if (!VideoAttributes.includes(key)) continue;
|
|
68
|
+
const value = attrs[key];
|
|
69
|
+
if (value === "") html += ` ${key}`;
|
|
70
|
+
else html += ` ${key}="${value}"`;
|
|
71
|
+
}
|
|
72
|
+
return html;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
//#endregion
|
|
76
|
+
export { BackgroundVideo };
|
|
77
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/media/background-video/index.ts"],"sourcesContent":["import { CustomMediaMixin } from '@videojs/core/dom/media/custom-media-element';\n\nfunction getTemplateHTML(attrs: Record<string, string>) {\n return /*html*/ `\n <style>\n :host {\n position: relative;\n }\n\n video {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: inherit;\n }\n </style>\n <slot></slot>\n <video ${serializeAttributes(attrs)}></video>\n `;\n}\n\nexport class BackgroundVideo extends CustomMediaMixin(HTMLElement, { tag: 'video' }) {\n static shadowRootOptions = { mode: 'open' as ShadowRootMode };\n static getTemplateHTML = getTemplateHTML;\n\n constructor() {\n super();\n\n if (!this.shadowRoot) {\n this.attachShadow((this.constructor as typeof BackgroundVideo).shadowRootOptions);\n\n const attrs = {\n ...namedNodeMapToObject(this.attributes),\n ...(!this.hasAttribute('nomuted') && { muted: '' }),\n ...(!this.hasAttribute('noloop') && { loop: '' }),\n ...(!this.hasAttribute('noautoplay') && { autoplay: '' }),\n playsinline: '',\n disableremoteplayback: '',\n disablepictureinpicture: '',\n };\n\n this.shadowRoot!.innerHTML = getTemplateHTML(attrs);\n }\n }\n}\n\nfunction namedNodeMapToObject(namedNodeMap: NamedNodeMap) {\n const obj: Record<string, string> = {};\n for (const attr of namedNodeMap) {\n obj[attr.name] = attr.value;\n }\n return obj;\n}\n\nconst VideoAttributes = [\n 'autoplay',\n 'controls',\n 'controlslist',\n 'crossorigin',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'loop',\n 'muted',\n 'playsinline',\n 'preload',\n] as const;\n\nfunction serializeAttributes(attrs: Record<string, string>): string {\n let html = '';\n for (const key in attrs) {\n // Skip forwarding non native video attributes.\n if (!VideoAttributes.includes(key as any)) continue;\n\n const value = attrs[key];\n if (value === '') html += ` ${key}`;\n else html += ` ${key}=\"${value}\"`;\n }\n return html;\n}\n"],"mappings":";;;AAEA,SAAS,gBAAgB,OAA+B;AACtD,QAAgB;;;;;;;;;;;;;;;aAeL,oBAAoB,MAAM,CAAC;;;AAIxC,IAAa,kBAAb,cAAqC,iBAAiB,aAAa,EAAE,KAAK,SAAS,CAAC,CAAC;;2BACxD,EAAE,MAAM,QAA0B;;;yBACpC;;CAEzB,cAAc;AACZ,SAAO;AAEP,MAAI,CAAC,KAAK,YAAY;AACpB,QAAK,aAAc,KAAK,YAAuC,kBAAkB;GAEjF,MAAM,QAAQ;IACZ,GAAG,qBAAqB,KAAK,WAAW;IACxC,GAAI,CAAC,KAAK,aAAa,UAAU,IAAI,EAAE,OAAO,IAAI;IAClD,GAAI,CAAC,KAAK,aAAa,SAAS,IAAI,EAAE,MAAM,IAAI;IAChD,GAAI,CAAC,KAAK,aAAa,aAAa,IAAI,EAAE,UAAU,IAAI;IACxD,aAAa;IACb,uBAAuB;IACvB,yBAAyB;IAC1B;AAED,QAAK,WAAY,YAAY,gBAAgB,MAAM;;;;AAKzD,SAAS,qBAAqB,cAA4B;CACxD,MAAM,MAA8B,EAAE;AACtC,MAAK,MAAM,QAAQ,aACjB,KAAI,KAAK,QAAQ,KAAK;AAExB,QAAO;;AAGT,MAAM,kBAAkB;CACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAS,oBAAoB,OAAuC;CAClE,IAAI,OAAO;AACX,MAAK,MAAM,OAAO,OAAO;AAEvB,MAAI,CAAC,gBAAgB,SAAS,IAAW,CAAE;EAE3C,MAAM,QAAQ,MAAM;AACpB,MAAI,UAAU,GAAI,SAAQ,IAAI;MACzB,SAAQ,IAAI,IAAI,IAAI,MAAM;;AAEjC,QAAO"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { HlsCustomMedia } from "@videojs/core/dom/media/hls";
|
|
2
|
+
|
|
3
|
+
//#region src/media/hls-video/index.d.ts
|
|
4
|
+
declare class HlsVideo extends HlsCustomMedia {
|
|
5
|
+
static getTemplateHTML(attrs: Record<string, string>): string;
|
|
6
|
+
constructor();
|
|
7
|
+
attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null): void;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { HlsVideo };
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/media/hls-video/index.ts"],"mappings":";;;cAEa,QAAA,SAAiB,cAAA;EAAA,OACrB,eAAA,CAAgB,KAAA,EAAO,MAAA;;EAe9B,wBAAA,CAAyB,QAAA,UAAkB,QAAA,iBAAyB,QAAA;AAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { HlsCustomMedia } from "@videojs/core/dom/media/hls";
|
|
2
|
+
|
|
3
|
+
//#region src/media/hls-video/index.ts
|
|
4
|
+
var HlsVideo = class extends HlsCustomMedia {
|
|
5
|
+
static getTemplateHTML(attrs) {
|
|
6
|
+
const { src, ...rest } = attrs;
|
|
7
|
+
return super.getTemplateHTML(rest);
|
|
8
|
+
}
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
this.attach(this.nativeEl);
|
|
12
|
+
}
|
|
13
|
+
attributeChangedCallback(attrName, oldValue, newValue) {
|
|
14
|
+
if (attrName !== "src") super.attributeChangedCallback(attrName, oldValue, newValue);
|
|
15
|
+
if (attrName === "src" && oldValue !== newValue) this.src = newValue ?? "";
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { HlsVideo };
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/media/hls-video/index.ts"],"sourcesContent":["import { HlsCustomMedia } from '@videojs/core/dom/media/hls';\n\nexport class HlsVideo extends HlsCustomMedia {\n static getTemplateHTML(attrs: Record<string, string>): string {\n const { src, ...rest } = attrs;\n // biome-ignore lint/complexity/noThisInStatic: intentional use of super\n return super.getTemplateHTML(rest);\n }\n\n constructor() {\n super();\n // TODO: If we like to support native media elements that\n // are appended after the custom element is created, we need to\n // attach the native element to the Media API after the native element\n // is appended to the DOM. This is currently not supported.\n this.attach(this.nativeEl);\n }\n\n attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null): void {\n if (attrName !== 'src') {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n }\n\n if (attrName === 'src' && oldValue !== newValue) {\n this.src = newValue ?? '';\n }\n }\n}\n"],"mappings":";;;AAEA,IAAa,WAAb,cAA8B,eAAe;CAC3C,OAAO,gBAAgB,OAAuC;EAC5D,MAAM,EAAE,KAAK,GAAG,SAAS;AAEzB,SAAO,MAAM,gBAAgB,KAAK;;CAGpC,cAAc;AACZ,SAAO;AAKP,OAAK,OAAO,KAAK,SAAS;;CAG5B,yBAAyB,UAAkB,UAAyB,UAA+B;AACjG,MAAI,aAAa,MACf,OAAM,yBAAyB,UAAU,UAAU,SAAS;AAG9D,MAAI,aAAa,SAAS,aAAa,SACrC,MAAK,MAAM,YAAY"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AnyPlayerStore, PlayerStore } from "@videojs/core/dom";
|
|
2
|
+
import { Context } from "@videojs/element/context";
|
|
3
|
+
|
|
4
|
+
//#region src/player/context.d.ts
|
|
5
|
+
declare const PLAYER_CONTEXT_KEY: unique symbol;
|
|
6
|
+
type PlayerContextValue<Store extends PlayerStore = AnyPlayerStore> = Store;
|
|
7
|
+
type PlayerContext<Store extends PlayerStore = AnyPlayerStore> = Context<typeof PLAYER_CONTEXT_KEY, PlayerContextValue<Store>>;
|
|
8
|
+
/**
|
|
9
|
+
* The default player context instance for consuming the player store in controllers.
|
|
10
|
+
*
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
declare const playerContext: Context<typeof PLAYER_CONTEXT_KEY, AnyPlayerStore>;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { PLAYER_CONTEXT_KEY, PlayerContext, PlayerContextValue, playerContext };
|
|
16
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","names":[],"sources":["../../../src/player/context.ts"],"mappings":";;;;cAGa,kBAAA;AAAA,KAED,kBAAA,eAAiC,WAAA,GAAc,cAAA,IAAkB,KAAA;AAAA,KAEjE,aAAA,eAA4B,WAAA,GAAc,cAAA,IAAkB,OAAA,QAC/D,kBAAA,EACP,kBAAA,CAAmB,KAAA;;;;;AAJrB;cAYa,aAAA,EAAa,OAAA,QAAA,kBAAA,EAAA,cAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createContext } from "@videojs/element/context";
|
|
2
|
+
|
|
3
|
+
//#region src/player/context.ts
|
|
4
|
+
const PLAYER_CONTEXT_KEY = Symbol("@videojs/player");
|
|
5
|
+
/**
|
|
6
|
+
* The default player context instance for consuming the player store in controllers.
|
|
7
|
+
*
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
const playerContext = createContext(PLAYER_CONTEXT_KEY);
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
export { PLAYER_CONTEXT_KEY, playerContext };
|
|
14
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/player/context.ts"],"sourcesContent":["import type { AnyPlayerStore, PlayerStore } from '@videojs/core/dom';\nimport { type Context, createContext } from '@videojs/element/context';\n\nexport const PLAYER_CONTEXT_KEY = Symbol('@videojs/player');\n\nexport type PlayerContextValue<Store extends PlayerStore = AnyPlayerStore> = Store;\n\nexport type PlayerContext<Store extends PlayerStore = AnyPlayerStore> = Context<\n typeof PLAYER_CONTEXT_KEY,\n PlayerContextValue<Store>\n>;\n\n/**\n * The default player context instance for consuming the player store in controllers.\n *\n * @public\n */\nexport const playerContext = createContext<PlayerContextValue, typeof PLAYER_CONTEXT_KEY>(PLAYER_CONTEXT_KEY);\n"],"mappings":";;;AAGA,MAAa,qBAAqB,OAAO,kBAAkB;;;;;;AAc3D,MAAa,gBAAgB,cAA6D,mBAAmB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { PlayerContext } from "./context.js";
|
|
2
|
+
import { PlayerElementConstructor } from "../store/types.js";
|
|
3
|
+
import { ContainerMixin } from "../store/container-mixin.js";
|
|
4
|
+
import { ProviderMixin } from "../store/provider-mixin.js";
|
|
5
|
+
import { PlayerController } from "./player-controller.js";
|
|
6
|
+
import { PlayerMixin } from "./player-mixin.js";
|
|
7
|
+
import { AnyPlayerFeature, AudioFeatures, AudioPlayerStore, PlayerStore, VideoFeatures, VideoPlayerStore } from "@videojs/core/dom";
|
|
8
|
+
|
|
9
|
+
//#region src/player/create-player.d.ts
|
|
10
|
+
interface CreatePlayerConfig<Features extends AnyPlayerFeature[]> {
|
|
11
|
+
features: Features;
|
|
12
|
+
}
|
|
13
|
+
interface CreatePlayerResult<Store extends PlayerStore> {
|
|
14
|
+
/** Context for consuming player in controllers. */
|
|
15
|
+
context: PlayerContext<Store>;
|
|
16
|
+
/** Creates a store instance for imperative access. */
|
|
17
|
+
create: () => Store;
|
|
18
|
+
/** Player controller bound to this player's context. */
|
|
19
|
+
PlayerController: PlayerController.Constructor<Store>;
|
|
20
|
+
/** Pre-composed player element ready for customElements.define(). */
|
|
21
|
+
PlayerElement: PlayerElementConstructor<Store>;
|
|
22
|
+
/** Mixin for a complete player element (provider + container). */
|
|
23
|
+
PlayerMixin: PlayerMixin<Store>;
|
|
24
|
+
/** Mixin that provides player context to descendants. */
|
|
25
|
+
ProviderMixin: ProviderMixin<Store>;
|
|
26
|
+
/** Mixin that consumes player context and auto-attaches media elements. */
|
|
27
|
+
ContainerMixin: ContainerMixin<Store>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Creates a player factory with typed store, mixins, and controller.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* import { features } from '@videojs/core/dom';
|
|
35
|
+
* import { createPlayer, MediaElement } from '@videojs/html';
|
|
36
|
+
*
|
|
37
|
+
* const { PlayerElement, PlayerController, context } = createPlayer({
|
|
38
|
+
* features: features.video,
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* // Simple: register pre-composed PlayerElement
|
|
42
|
+
* customElements.define('video-player', PlayerElement);
|
|
43
|
+
*
|
|
44
|
+
* // Custom: extend with PlayerMixin
|
|
45
|
+
* class MyPlayer extends PlayerMixin(MediaElement) {}
|
|
46
|
+
*
|
|
47
|
+
* // Control element with selector
|
|
48
|
+
* class PlayButton extends MediaElement {
|
|
49
|
+
* #playback = new PlayerController(this, context, selectPlayback);
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @label Video
|
|
54
|
+
* @param config - Player configuration with features.
|
|
55
|
+
*/
|
|
56
|
+
declare function createPlayer(config: CreatePlayerConfig<VideoFeatures>): CreatePlayerResult<VideoPlayerStore>;
|
|
57
|
+
/**
|
|
58
|
+
* Creates a player factory for audio media.
|
|
59
|
+
*
|
|
60
|
+
* @label Audio
|
|
61
|
+
* @param config - Player configuration with features.
|
|
62
|
+
*/
|
|
63
|
+
declare function createPlayer(config: CreatePlayerConfig<AudioFeatures>): CreatePlayerResult<AudioPlayerStore>;
|
|
64
|
+
/**
|
|
65
|
+
* Creates a player factory with custom features.
|
|
66
|
+
*
|
|
67
|
+
* @label Generic
|
|
68
|
+
* @param config - Player configuration with features.
|
|
69
|
+
*/
|
|
70
|
+
declare function createPlayer<const Features extends AnyPlayerFeature[]>(config: CreatePlayerConfig<Features>): CreatePlayerResult<PlayerStore<Features>>;
|
|
71
|
+
//#endregion
|
|
72
|
+
export { CreatePlayerConfig, CreatePlayerResult, createPlayer };
|
|
73
|
+
//# sourceMappingURL=create-player.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-player.d.ts","names":[],"sources":["../../../src/player/create-player.ts"],"mappings":";;;;;;;;;UAmBiB,kBAAA,kBAAoC,gBAAA;EACnD,QAAA,EAAU,QAAA;AAAA;AAAA,UAGK,kBAAA,eAAiC,WAAA;EAJf;EAMjC,OAAA,EAAS,aAAA,CAAc,KAAA;EANW;EASlC,MAAA,QAAc,KAAA;EARd;EAWA,gBAAA,EAAkB,gBAAA,CAAiB,WAAA,CAAY,KAAA;EAX7B;EAclB,aAAA,EAAe,wBAAA,CAAyB,KAAA;EAXzB;EAcf,WAAA,EAAa,WAAA,CAAY,KAAA;EAdQ;EAiBjC,aAAA,EAAe,aAAA,CAAc,KAAA;EAfN;EAkBvB,cAAA,EAAgB,cAAA,CAAe,KAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BjB,YAAA,CAAa,MAAA,EAAQ,kBAAA,CAAmB,aAAA,IAAiB,kBAAA,CAAmB,gBAAA;;;;;;;iBAQ5E,YAAA,CAAa,MAAA,EAAQ,kBAAA,CAAmB,aAAA,IAAiB,kBAAA,CAAmB,gBAAA;;;AAR5F;;;;iBAgBgB,YAAA,wBAAoC,gBAAA,GAAA,CAClD,MAAA,EAAQ,kBAAA,CAAmB,QAAA,IAC1B,kBAAA,CAAmB,WAAA,CAAY,QAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { playerContext } from "./context.js";
|
|
2
|
+
import { createContainerMixin } from "../store/container-mixin.js";
|
|
3
|
+
import { createProviderMixin } from "../store/provider-mixin.js";
|
|
4
|
+
import { MediaElement } from "../ui/media-element.js";
|
|
5
|
+
import { PlayerController } from "./player-controller.js";
|
|
6
|
+
import { createPlayerMixin } from "./player-mixin.js";
|
|
7
|
+
import { combine, createStore } from "@videojs/store";
|
|
8
|
+
|
|
9
|
+
//#region src/player/create-player.ts
|
|
10
|
+
function createPlayer(config) {
|
|
11
|
+
const slice = combine(...config.features);
|
|
12
|
+
function create() {
|
|
13
|
+
return createStore()(slice);
|
|
14
|
+
}
|
|
15
|
+
const PlayerMixin = createPlayerMixin(playerContext, create);
|
|
16
|
+
return {
|
|
17
|
+
context: playerContext,
|
|
18
|
+
create,
|
|
19
|
+
PlayerController,
|
|
20
|
+
PlayerElement: PlayerMixin(MediaElement),
|
|
21
|
+
PlayerMixin,
|
|
22
|
+
ProviderMixin: createProviderMixin(playerContext, create),
|
|
23
|
+
ContainerMixin: createContainerMixin(playerContext)
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
export { createPlayer };
|
|
29
|
+
//# sourceMappingURL=create-player.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-player.js","names":[],"sources":["../../../src/player/create-player.ts"],"sourcesContent":["import type {\n AnyPlayerFeature,\n AudioFeatures,\n AudioPlayerStore,\n PlayerStore,\n PlayerTarget,\n VideoFeatures,\n VideoPlayerStore,\n} from '@videojs/core/dom';\nimport { combine, createStore } from '@videojs/store';\n\nimport { type ContainerMixin, createContainerMixin } from '../store/container-mixin';\nimport { createProviderMixin, type ProviderMixin } from '../store/provider-mixin';\nimport type { PlayerElementConstructor } from '../store/types';\nimport { MediaElement } from '../ui/media-element';\nimport { type PlayerContext, playerContext } from './context';\nimport { PlayerController } from './player-controller';\nimport { createPlayerMixin, type PlayerMixin } from './player-mixin';\n\nexport interface CreatePlayerConfig<Features extends AnyPlayerFeature[]> {\n features: Features;\n}\n\nexport interface CreatePlayerResult<Store extends PlayerStore> {\n /** Context for consuming player in controllers. */\n context: PlayerContext<Store>;\n\n /** Creates a store instance for imperative access. */\n create: () => Store;\n\n /** Player controller bound to this player's context. */\n PlayerController: PlayerController.Constructor<Store>;\n\n /** Pre-composed player element ready for customElements.define(). */\n PlayerElement: PlayerElementConstructor<Store>;\n\n /** Mixin for a complete player element (provider + container). */\n PlayerMixin: PlayerMixin<Store>;\n\n /** Mixin that provides player context to descendants. */\n ProviderMixin: ProviderMixin<Store>;\n\n /** Mixin that consumes player context and auto-attaches media elements. */\n ContainerMixin: ContainerMixin<Store>;\n}\n\n/**\n * Creates a player factory with typed store, mixins, and controller.\n *\n * @example\n * ```ts\n * import { features } from '@videojs/core/dom';\n * import { createPlayer, MediaElement } from '@videojs/html';\n *\n * const { PlayerElement, PlayerController, context } = createPlayer({\n * features: features.video,\n * });\n *\n * // Simple: register pre-composed PlayerElement\n * customElements.define('video-player', PlayerElement);\n *\n * // Custom: extend with PlayerMixin\n * class MyPlayer extends PlayerMixin(MediaElement) {}\n *\n * // Control element with selector\n * class PlayButton extends MediaElement {\n * #playback = new PlayerController(this, context, selectPlayback);\n * }\n * ```\n *\n * @label Video\n * @param config - Player configuration with features.\n */\nexport function createPlayer(config: CreatePlayerConfig<VideoFeatures>): CreatePlayerResult<VideoPlayerStore>;\n\n/**\n * Creates a player factory for audio media.\n *\n * @label Audio\n * @param config - Player configuration with features.\n */\nexport function createPlayer(config: CreatePlayerConfig<AudioFeatures>): CreatePlayerResult<AudioPlayerStore>;\n\n/**\n * Creates a player factory with custom features.\n *\n * @label Generic\n * @param config - Player configuration with features.\n */\nexport function createPlayer<const Features extends AnyPlayerFeature[]>(\n config: CreatePlayerConfig<Features>\n): CreatePlayerResult<PlayerStore<Features>>;\n\nexport function createPlayer(config: CreatePlayerConfig<AnyPlayerFeature[]>): CreatePlayerResult<PlayerStore> {\n const slice = combine<PlayerTarget, AnyPlayerFeature[]>(...config.features);\n\n function create(): PlayerStore {\n return createStore<PlayerTarget>()(slice);\n }\n\n const PlayerMixin = createPlayerMixin<PlayerStore>(playerContext, create);\n const PlayerElement = PlayerMixin(MediaElement);\n const ProviderMixin = createProviderMixin<PlayerStore>(playerContext, create);\n const ContainerMixin = createContainerMixin<PlayerStore>(playerContext);\n\n return {\n context: playerContext,\n create,\n PlayerController,\n PlayerElement,\n PlayerMixin,\n ProviderMixin,\n ContainerMixin,\n };\n}\n"],"mappings":";;;;;;;;;AA6FA,SAAgB,aAAa,QAAiF;CAC5G,MAAM,QAAQ,QAA0C,GAAG,OAAO,SAAS;CAE3E,SAAS,SAAsB;AAC7B,SAAO,aAA2B,CAAC,MAAM;;CAG3C,MAAM,cAAc,kBAA+B,eAAe,OAAO;AAKzE,QAAO;EACL,SAAS;EACT;EACA;EACA,eARoB,YAAY,aAAa;EAS7C;EACA,eAToB,oBAAiC,eAAe,OAAO;EAU3E,gBATqB,qBAAkC,cAAc;EAUtE"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { PlayerContext } from "./context.js";
|
|
2
|
+
import { PlayerStore } from "@videojs/core/dom";
|
|
3
|
+
import { InferStoreState, Selector } from "@videojs/store";
|
|
4
|
+
import { ReactiveController, ReactiveControllerHost } from "@videojs/element";
|
|
5
|
+
|
|
6
|
+
//#region src/player/player-controller.d.ts
|
|
7
|
+
type PlayerControllerHost = ReactiveControllerHost & HTMLElement;
|
|
8
|
+
/**
|
|
9
|
+
* Reactive controller for accessing player store state.
|
|
10
|
+
*
|
|
11
|
+
* Without selector: Returns the store, does NOT subscribe to changes.
|
|
12
|
+
* With selector: Returns selected state, subscribes with shallowEqual comparison.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* // Store access (no subscription)
|
|
17
|
+
* class Controls extends MediaElement {
|
|
18
|
+
* #player = new PlayerController(this, playerContext);
|
|
19
|
+
*
|
|
20
|
+
* handleClick() {
|
|
21
|
+
* this.#player.value.setVolume(0.5);
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* // Selector-based subscription
|
|
26
|
+
* class PlayButton extends MediaElement {
|
|
27
|
+
* #playback = new PlayerController(this, playerContext, selectPlayback);
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
declare class PlayerController<Store extends PlayerStore, Result = Store> implements ReactiveController {
|
|
32
|
+
#private;
|
|
33
|
+
/**
|
|
34
|
+
* @label Without Selector
|
|
35
|
+
* @param host - The host element that owns this controller.
|
|
36
|
+
* @param context - Player context to resolve the store from.
|
|
37
|
+
*/
|
|
38
|
+
constructor(host: PlayerControllerHost, context: PlayerContext<Store>);
|
|
39
|
+
/**
|
|
40
|
+
* @label With Selector
|
|
41
|
+
* @param host - The host element that owns this controller.
|
|
42
|
+
* @param context - Player context to resolve the store from.
|
|
43
|
+
* @param selector - Derives a value from the player store state.
|
|
44
|
+
*/
|
|
45
|
+
constructor(host: PlayerControllerHost, context: PlayerContext<Store>, selector: Selector<InferStoreState<Store>, Result>);
|
|
46
|
+
get value(): Result | undefined;
|
|
47
|
+
hostConnected(): void;
|
|
48
|
+
hostDisconnected(): void;
|
|
49
|
+
}
|
|
50
|
+
declare namespace PlayerController {
|
|
51
|
+
type Host = PlayerControllerHost;
|
|
52
|
+
type Constructor<Store extends PlayerStore = PlayerStore, Result = Store> = typeof PlayerController<Store, Result>;
|
|
53
|
+
}
|
|
54
|
+
//#endregion
|
|
55
|
+
export { PlayerController, PlayerControllerHost };
|
|
56
|
+
//# sourceMappingURL=player-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player-controller.d.ts","names":[],"sources":["../../../src/player/player-controller.ts"],"mappings":";;;;;;KAQY,oBAAA,GAAuB,sBAAA,GAAyB,WAAA;;AAA5D;;;;;AAyBA;;;;;;;;;;;;;;;;;cAAa,gBAAA,eAA+B,WAAA,WAAsB,KAAA,aAAkB,kBAAA;EAAA;EAAtD;;;;;cAYhB,IAAA,EAAM,oBAAA,EAAsB,OAAA,EAAS,aAAA,CAAc,KAAA;;;;;;;cAQ7D,IAAA,EAAM,oBAAA,EACN,OAAA,EAAS,aAAA,CAAc,KAAA,GACvB,QAAA,EAAU,QAAA,CAAS,eAAA,CAAgB,KAAA,GAAQ,MAAA;EAAA,IAmBzC,KAAA,CAAA,GAAS,MAAA;EAWb,aAAA,CAAA;EAKA,gBAAA,CAAA;AAAA;AAAA,kBAWe,gBAAA;EAAA,KACH,IAAA,GAAO,oBAAA;EAAA,KAEP,WAAA,eAA0B,WAAA,GAAc,WAAA,WAAsB,KAAA,WAAgB,gBAAA,CACxF,KAAA,EACA,MAAA;AAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { ContextConsumer } from "@videojs/element/context";
|
|
2
|
+
import { StoreController } from "@videojs/store/html";
|
|
3
|
+
|
|
4
|
+
//#region src/player/player-controller.ts
|
|
5
|
+
/**
|
|
6
|
+
* Reactive controller for accessing player store state.
|
|
7
|
+
*
|
|
8
|
+
* Without selector: Returns the store, does NOT subscribe to changes.
|
|
9
|
+
* With selector: Returns selected state, subscribes with shallowEqual comparison.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* // Store access (no subscription)
|
|
14
|
+
* class Controls extends MediaElement {
|
|
15
|
+
* #player = new PlayerController(this, playerContext);
|
|
16
|
+
*
|
|
17
|
+
* handleClick() {
|
|
18
|
+
* this.#player.value.setVolume(0.5);
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
*
|
|
22
|
+
* // Selector-based subscription
|
|
23
|
+
* class PlayButton extends MediaElement {
|
|
24
|
+
* #playback = new PlayerController(this, playerContext, selectPlayback);
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
var PlayerController = class {
|
|
29
|
+
#host;
|
|
30
|
+
#selector;
|
|
31
|
+
#consumer;
|
|
32
|
+
#store = null;
|
|
33
|
+
constructor(host, context, selector) {
|
|
34
|
+
this.#host = host;
|
|
35
|
+
this.#selector = selector;
|
|
36
|
+
this.#consumer = new ContextConsumer(host, {
|
|
37
|
+
context,
|
|
38
|
+
callback: (ctx) => this.#connect(ctx),
|
|
39
|
+
subscribe: true
|
|
40
|
+
});
|
|
41
|
+
host.addController(this);
|
|
42
|
+
}
|
|
43
|
+
get value() {
|
|
44
|
+
const store = this.#consumer.value;
|
|
45
|
+
if (!store) return void 0;
|
|
46
|
+
if (!this.#selector) return store;
|
|
47
|
+
return this.#store?.value;
|
|
48
|
+
}
|
|
49
|
+
hostConnected() {
|
|
50
|
+
const store = this.#consumer.value;
|
|
51
|
+
if (store) this.#connect(store);
|
|
52
|
+
}
|
|
53
|
+
hostDisconnected() {
|
|
54
|
+
this.#store = null;
|
|
55
|
+
}
|
|
56
|
+
#connect(store) {
|
|
57
|
+
if (!this.#store && this.#selector) this.#store = new StoreController(this.#host, store, this.#selector);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
//#endregion
|
|
62
|
+
export { PlayerController };
|
|
63
|
+
//# sourceMappingURL=player-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player-controller.js","names":["#host","#selector","#consumer","#connect","#store"],"sources":["../../../src/player/player-controller.ts"],"sourcesContent":["import type { PlayerStore } from '@videojs/core/dom';\nimport type { ReactiveController, ReactiveControllerHost } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { InferStoreState, Selector } from '@videojs/store';\nimport { StoreController } from '@videojs/store/html';\n\nimport type { PlayerContext } from './context';\n\nexport type PlayerControllerHost = ReactiveControllerHost & HTMLElement;\n\n/**\n * Reactive controller for accessing player store state.\n *\n * Without selector: Returns the store, does NOT subscribe to changes.\n * With selector: Returns selected state, subscribes with shallowEqual comparison.\n *\n * @example\n * ```ts\n * // Store access (no subscription)\n * class Controls extends MediaElement {\n * #player = new PlayerController(this, playerContext);\n *\n * handleClick() {\n * this.#player.value.setVolume(0.5);\n * }\n * }\n *\n * // Selector-based subscription\n * class PlayButton extends MediaElement {\n * #playback = new PlayerController(this, playerContext, selectPlayback);\n * }\n * ```\n */\nexport class PlayerController<Store extends PlayerStore, Result = Store> implements ReactiveController {\n readonly #host: PlayerControllerHost;\n readonly #selector: Selector<InferStoreState<Store>, Result> | undefined;\n\n #consumer: ContextConsumer<PlayerContext<Store>, PlayerControllerHost>;\n #store: StoreController<Store, Result> | null = null;\n\n /**\n * @label Without Selector\n * @param host - The host element that owns this controller.\n * @param context - Player context to resolve the store from.\n */\n constructor(host: PlayerControllerHost, context: PlayerContext<Store>);\n /**\n * @label With Selector\n * @param host - The host element that owns this controller.\n * @param context - Player context to resolve the store from.\n * @param selector - Derives a value from the player store state.\n */\n constructor(\n host: PlayerControllerHost,\n context: PlayerContext<Store>,\n selector: Selector<InferStoreState<Store>, Result>\n );\n constructor(\n host: PlayerControllerHost,\n context: PlayerContext<Store>,\n selector?: Selector<InferStoreState<Store>, Result>\n ) {\n this.#host = host;\n this.#selector = selector;\n\n this.#consumer = new ContextConsumer(host, {\n context,\n callback: (ctx) => this.#connect(ctx),\n subscribe: true,\n });\n\n host.addController(this);\n }\n\n get value(): Result | undefined {\n const store = this.#consumer.value;\n if (!store) return undefined;\n\n // Without selector: return store directly\n if (!this.#selector) return store as unknown as Result;\n\n // With selector: use StoreController\n return this.#store?.value;\n }\n\n hostConnected(): void {\n const store = this.#consumer.value;\n if (store) this.#connect(store);\n }\n\n hostDisconnected(): void {\n this.#store = null;\n }\n\n #connect(store: Store): void {\n if (!this.#store && this.#selector) {\n this.#store = new StoreController(this.#host, store, this.#selector);\n }\n }\n}\n\nexport namespace PlayerController {\n export type Host = PlayerControllerHost;\n\n export type Constructor<Store extends PlayerStore = PlayerStore, Result = Store> = typeof PlayerController<\n Store,\n Result\n >;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,IAAa,mBAAb,MAAuG;CACrG,CAASA;CACT,CAASC;CAET;CACA,SAAgD;CAmBhD,YACE,MACA,SACA,UACA;AACA,QAAKD,OAAQ;AACb,QAAKC,WAAY;AAEjB,QAAKC,WAAY,IAAI,gBAAgB,MAAM;GACzC;GACA,WAAW,QAAQ,MAAKC,QAAS,IAAI;GACrC,WAAW;GACZ,CAAC;AAEF,OAAK,cAAc,KAAK;;CAG1B,IAAI,QAA4B;EAC9B,MAAM,QAAQ,MAAKD,SAAU;AAC7B,MAAI,CAAC,MAAO,QAAO;AAGnB,MAAI,CAAC,MAAKD,SAAW,QAAO;AAG5B,SAAO,MAAKG,OAAQ;;CAGtB,gBAAsB;EACpB,MAAM,QAAQ,MAAKF,SAAU;AAC7B,MAAI,MAAO,OAAKC,QAAS,MAAM;;CAGjC,mBAAyB;AACvB,QAAKC,QAAS;;CAGhB,SAAS,OAAoB;AAC3B,MAAI,CAAC,MAAKA,SAAU,MAAKH,SACvB,OAAKG,QAAS,IAAI,gBAAgB,MAAKJ,MAAO,OAAO,MAAKC,SAAU"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PlayerContext } from "./context.js";
|
|
2
|
+
import { MediaElementConstructor } from "../ui/media-element.js";
|
|
3
|
+
import { PlayerProviderConstructor } from "../store/types.js";
|
|
4
|
+
import { PlayerStore } from "@videojs/core/dom";
|
|
5
|
+
|
|
6
|
+
//#region src/player/player-mixin.d.ts
|
|
7
|
+
type Result<Class extends MediaElementConstructor, Store extends PlayerStore> = Class & PlayerProviderConstructor<Store>;
|
|
8
|
+
type PlayerMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(BaseClass: Class) => Result<Class, Store>;
|
|
9
|
+
/**
|
|
10
|
+
* Creates a mixin that combines provider and container functionality.
|
|
11
|
+
*
|
|
12
|
+
* Use for a complete player element that owns the store and attaches media.
|
|
13
|
+
*
|
|
14
|
+
* @param context - Player context for descendant consumption.
|
|
15
|
+
* @param factory - Factory function that creates a store instance.
|
|
16
|
+
*/
|
|
17
|
+
declare function createPlayerMixin<Store extends PlayerStore>(context: PlayerContext<Store>, factory: () => Store): PlayerMixin<Store>;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { PlayerMixin, createPlayerMixin };
|
|
20
|
+
//# sourceMappingURL=player-mixin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player-mixin.d.ts","names":[],"sources":["../../../src/player/player-mixin.ts"],"mappings":";;;;;;KAOK,MAAA,eAAqB,uBAAA,gBAAuC,WAAA,IAAe,KAAA,GAC9E,yBAAA,CAA0B,KAAA;AAAA,KAEhB,WAAA,eAA0B,WAAA,mBAA8B,uBAAA,EAClE,SAAA,EAAW,KAAA,KACR,MAAA,CAAO,KAAA,EAAO,KAAA;AAP4B;;;;;;;;AAAA,iBAiB/B,iBAAA,eAAgC,WAAA,CAAA,CAC9C,OAAA,EAAS,aAAA,CAAc,KAAA,GACvB,OAAA,QAAe,KAAA,GACd,WAAA,CAAY,KAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createContainerMixin } from "../store/container-mixin.js";
|
|
2
|
+
import { createProviderMixin } from "../store/provider-mixin.js";
|
|
3
|
+
|
|
4
|
+
//#region src/player/player-mixin.ts
|
|
5
|
+
/**
|
|
6
|
+
* Creates a mixin that combines provider and container functionality.
|
|
7
|
+
*
|
|
8
|
+
* Use for a complete player element that owns the store and attaches media.
|
|
9
|
+
*
|
|
10
|
+
* @param context - Player context for descendant consumption.
|
|
11
|
+
* @param factory - Factory function that creates a store instance.
|
|
12
|
+
*/
|
|
13
|
+
function createPlayerMixin(context, factory) {
|
|
14
|
+
const ProviderMixin = createProviderMixin(context, factory);
|
|
15
|
+
const ContainerMixin = createContainerMixin(context);
|
|
16
|
+
return (BaseClass) => {
|
|
17
|
+
return ProviderMixin(ContainerMixin(BaseClass));
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
export { createPlayerMixin };
|
|
23
|
+
//# sourceMappingURL=player-mixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player-mixin.js","names":[],"sources":["../../../src/player/player-mixin.ts"],"sourcesContent":["import type { PlayerStore } from '@videojs/core/dom';\nimport type { MediaElementConstructor } from '@/ui/media-element';\nimport { createContainerMixin } from '../store/container-mixin';\nimport { createProviderMixin } from '../store/provider-mixin';\nimport type { PlayerProviderConstructor } from '../store/types';\nimport type { PlayerContext } from './context';\n\ntype Result<Class extends MediaElementConstructor, Store extends PlayerStore> = Class &\n PlayerProviderConstructor<Store>;\n\nexport type PlayerMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(\n BaseClass: Class\n) => Result<Class, Store>;\n\n/**\n * Creates a mixin that combines provider and container functionality.\n *\n * Use for a complete player element that owns the store and attaches media.\n *\n * @param context - Player context for descendant consumption.\n * @param factory - Factory function that creates a store instance.\n */\nexport function createPlayerMixin<Store extends PlayerStore>(\n context: PlayerContext<Store>,\n factory: () => Store\n): PlayerMixin<Store> {\n const ProviderMixin = createProviderMixin<Store>(context, factory);\n const ContainerMixin = createContainerMixin<Store>(context);\n\n return <Class extends MediaElementConstructor>(BaseClass: Class) => {\n return ProviderMixin(ContainerMixin(BaseClass)) as unknown as Result<Class, Store>;\n };\n}\n"],"mappings":";;;;;;;;;;;;AAsBA,SAAgB,kBACd,SACA,SACoB;CACpB,MAAM,gBAAgB,oBAA2B,SAAS,QAAQ;CAClE,MAAM,iBAAiB,qBAA4B,QAAQ;AAE3D,SAA+C,cAAqB;AAClE,SAAO,cAAc,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PlayerContext } from "../player/context.js";
|
|
2
|
+
import { MediaElementConstructor } from "../ui/media-element.js";
|
|
3
|
+
import { PlayerConsumerConstructor } from "./types.js";
|
|
4
|
+
import { PlayerStore } from "@videojs/core/dom";
|
|
5
|
+
|
|
6
|
+
//#region src/store/container-mixin.d.ts
|
|
7
|
+
type ContainerMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(BaseClass: Class) => Class & PlayerConsumerConstructor<Store>;
|
|
8
|
+
/**
|
|
9
|
+
* Create a mixin that consumes player context and auto-attaches media elements.
|
|
10
|
+
*
|
|
11
|
+
* @param context - Player context to consume from an ancestor provider.
|
|
12
|
+
*/
|
|
13
|
+
declare function createContainerMixin<Store extends PlayerStore>(context: PlayerContext<Store>): ContainerMixin<Store>;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { ContainerMixin, createContainerMixin };
|
|
16
|
+
//# sourceMappingURL=container-mixin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container-mixin.d.ts","names":[],"sources":["../../../src/store/container-mixin.ts"],"mappings":";;;;;;KAOY,cAAA,eAA6B,WAAA,mBAA8B,uBAAA,EACrE,SAAA,EAAW,KAAA,KACR,KAAA,GAAQ,yBAAA,CAA0B,KAAA;;AAFvC;;;;iBASgB,oBAAA,eAAmC,WAAA,CAAA,CAAa,OAAA,EAAS,aAAA,CAAc,KAAA,IAAS,cAAA,CAAe,KAAA"}
|