@mattebox/player 0.1.0 → 0.3.0
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 -3
- package/dist/cdn/mattebox-player.min.js +222 -198
- package/dist/compose.d.ts +5 -0
- package/dist/compose.d.ts.map +1 -0
- package/dist/compose.js +31 -0
- package/dist/compose.js.map +1 -0
- package/dist/controls/chapters.d.ts +29 -0
- package/dist/controls/chapters.d.ts.map +1 -0
- package/dist/controls/chapters.js +81 -0
- package/dist/controls/chapters.js.map +1 -0
- package/dist/controls/cues.d.ts +8 -3
- package/dist/controls/cues.d.ts.map +1 -1
- package/dist/controls/cues.js +44 -10
- package/dist/controls/cues.js.map +1 -1
- package/dist/controls/fullscreen.d.ts +9 -9
- package/dist/controls/fullscreen.d.ts.map +1 -1
- package/dist/controls/fullscreen.js +17 -21
- package/dist/controls/fullscreen.js.map +1 -1
- package/dist/controls/icons.d.ts +1 -3
- package/dist/controls/icons.d.ts.map +1 -1
- package/dist/controls/icons.js +3 -6
- package/dist/controls/icons.js.map +1 -1
- package/dist/controls/menu.d.ts +14 -11
- package/dist/controls/menu.d.ts.map +1 -1
- package/dist/controls/menu.js +39 -34
- package/dist/controls/menu.js.map +1 -1
- package/dist/controls/session.d.ts +27 -0
- package/dist/controls/session.d.ts.map +1 -0
- package/dist/controls/session.js +36 -0
- package/dist/controls/session.js.map +1 -0
- package/dist/controls/slider.d.ts +6 -6
- package/dist/controls/slider.d.ts.map +1 -1
- package/dist/controls/slider.js +18 -13
- package/dist/controls/slider.js.map +1 -1
- package/dist/dom.d.ts +4 -10
- package/dist/dom.d.ts.map +1 -1
- package/dist/dom.js +4 -24
- package/dist/dom.js.map +1 -1
- package/dist/element-entry.d.ts +4 -0
- package/dist/element-entry.d.ts.map +1 -0
- package/dist/element-entry.js +9 -0
- package/dist/element-entry.js.map +1 -0
- package/dist/element.d.ts +54 -14
- package/dist/element.d.ts.map +1 -1
- package/dist/element.js +154 -73
- package/dist/element.js.map +1 -1
- package/dist/elements/audio-menu.d.ts +24 -0
- package/dist/elements/audio-menu.d.ts.map +1 -0
- package/dist/elements/audio-menu.js +70 -0
- package/dist/elements/audio-menu.js.map +1 -0
- package/dist/elements/chapters-menu.d.ts +12 -0
- package/dist/elements/chapters-menu.d.ts.map +1 -0
- package/dist/elements/chapters-menu.js +67 -0
- package/dist/elements/chapters-menu.js.map +1 -0
- package/dist/elements/component.d.ts +45 -0
- package/dist/elements/component.d.ts.map +1 -0
- package/dist/elements/component.js +90 -0
- package/dist/elements/component.js.map +1 -0
- package/dist/elements/control-bar.d.ts +75 -0
- package/dist/elements/control-bar.d.ts.map +1 -0
- package/dist/elements/control-bar.js +339 -0
- package/dist/elements/control-bar.js.map +1 -0
- package/dist/elements/current-time.d.ts +5 -0
- package/dist/elements/current-time.d.ts.map +1 -0
- package/dist/elements/current-time.js +27 -0
- package/dist/elements/current-time.js.map +1 -0
- package/dist/elements/drm-badge.d.ts +29 -0
- package/dist/elements/drm-badge.d.ts.map +1 -0
- package/dist/elements/drm-badge.js +145 -0
- package/dist/elements/drm-badge.js.map +1 -0
- package/dist/elements/duration.d.ts +6 -0
- package/dist/elements/duration.d.ts.map +1 -0
- package/dist/elements/duration.js +23 -0
- package/dist/elements/duration.js.map +1 -0
- package/dist/elements/error-screen.d.ts +17 -0
- package/dist/elements/error-screen.d.ts.map +1 -0
- package/dist/elements/error-screen.js +103 -0
- package/dist/elements/error-screen.js.map +1 -0
- package/dist/elements/fullscreen-button.d.ts +19 -0
- package/dist/elements/fullscreen-button.d.ts.map +1 -0
- package/dist/elements/fullscreen-button.js +55 -0
- package/dist/elements/fullscreen-button.js.map +1 -0
- package/dist/elements/live-button.d.ts +12 -0
- package/dist/elements/live-button.d.ts.map +1 -0
- package/dist/elements/live-button.js +96 -0
- package/dist/elements/live-button.js.map +1 -0
- package/dist/elements/menu-element.d.ts +22 -0
- package/dist/elements/menu-element.d.ts.map +1 -0
- package/dist/elements/menu-element.js +31 -0
- package/dist/elements/menu-element.js.map +1 -0
- package/dist/elements/mute-button.d.ts +12 -0
- package/dist/elements/mute-button.d.ts.map +1 -0
- package/dist/elements/mute-button.js +61 -0
- package/dist/elements/mute-button.js.map +1 -0
- package/dist/elements/panels.d.ts +15 -0
- package/dist/elements/panels.d.ts.map +1 -0
- package/dist/elements/panels.js +55 -0
- package/dist/elements/panels.js.map +1 -0
- package/dist/elements/pip-button.d.ts +13 -0
- package/dist/elements/pip-button.d.ts.map +1 -0
- package/dist/elements/pip-button.js +56 -0
- package/dist/elements/pip-button.js.map +1 -0
- package/dist/elements/play-button.d.ts +12 -0
- package/dist/elements/play-button.d.ts.map +1 -0
- package/dist/elements/play-button.js +60 -0
- package/dist/elements/play-button.js.map +1 -0
- package/dist/elements/quality-menu.d.ts +11 -0
- package/dist/elements/quality-menu.d.ts.map +1 -0
- package/dist/elements/quality-menu.js +72 -0
- package/dist/elements/quality-menu.js.map +1 -0
- package/dist/elements/remaining-time.d.ts +6 -0
- package/dist/elements/remaining-time.d.ts.map +1 -0
- package/dist/elements/remaining-time.js +26 -0
- package/dist/elements/remaining-time.js.map +1 -0
- package/dist/elements/seek-bar.d.ts +83 -0
- package/dist/elements/seek-bar.d.ts.map +1 -0
- package/dist/elements/seek-bar.js +352 -0
- package/dist/elements/seek-bar.js.map +1 -0
- package/dist/elements/shared.d.ts +27 -0
- package/dist/elements/shared.d.ts.map +1 -0
- package/dist/elements/shared.js +155 -0
- package/dist/elements/shared.js.map +1 -0
- package/dist/elements/skip-button.d.ts +14 -0
- package/dist/elements/skip-button.d.ts.map +1 -0
- package/dist/elements/skip-button.js +60 -0
- package/dist/elements/skip-button.js.map +1 -0
- package/dist/elements/spacer.d.ts +4 -0
- package/dist/elements/spacer.d.ts.map +1 -0
- package/dist/elements/spacer.js +9 -0
- package/dist/elements/spacer.js.map +1 -0
- package/dist/elements/speed-menu.d.ts +18 -0
- package/dist/elements/speed-menu.d.ts.map +1 -0
- package/dist/elements/speed-menu.js +56 -0
- package/dist/elements/speed-menu.js.map +1 -0
- package/dist/elements/start-button.d.ts +23 -0
- package/dist/elements/start-button.d.ts.map +1 -0
- package/dist/elements/start-button.js +120 -0
- package/dist/elements/start-button.js.map +1 -0
- package/dist/elements/subtitles-menu.d.ts +17 -0
- package/dist/elements/subtitles-menu.d.ts.map +1 -0
- package/dist/elements/subtitles-menu.js +108 -0
- package/dist/elements/subtitles-menu.js.map +1 -0
- package/dist/elements/time-element.d.ts +14 -0
- package/dist/elements/time-element.d.ts.map +1 -0
- package/dist/elements/time-element.js +29 -0
- package/dist/elements/time-element.js.map +1 -0
- package/dist/elements/volume-slider.d.ts +10 -0
- package/dist/elements/volume-slider.d.ts.map +1 -0
- package/dist/elements/volume-slider.js +46 -0
- package/dist/elements/volume-slider.js.map +1 -0
- package/dist/elements/volume.d.ts +9 -0
- package/dist/elements/volume.d.ts.map +1 -0
- package/dist/elements/volume.js +52 -0
- package/dist/elements/volume.js.map +1 -0
- package/dist/entries/audio-menu.d.ts +5 -0
- package/dist/entries/audio-menu.d.ts.map +1 -0
- package/dist/entries/audio-menu.js +8 -0
- package/dist/entries/audio-menu.js.map +1 -0
- package/dist/entries/chapters-menu.d.ts +5 -0
- package/dist/entries/chapters-menu.d.ts.map +1 -0
- package/dist/entries/chapters-menu.js +9 -0
- package/dist/entries/chapters-menu.js.map +1 -0
- package/dist/entries/control-bar.d.ts +5 -0
- package/dist/entries/control-bar.d.ts.map +1 -0
- package/dist/entries/control-bar.js +8 -0
- package/dist/entries/control-bar.js.map +1 -0
- package/dist/entries/current-time.d.ts +5 -0
- package/dist/entries/current-time.d.ts.map +1 -0
- package/dist/entries/current-time.js +8 -0
- package/dist/entries/current-time.js.map +1 -0
- package/dist/entries/drm-badge.d.ts +5 -0
- package/dist/entries/drm-badge.d.ts.map +1 -0
- package/dist/entries/drm-badge.js +8 -0
- package/dist/entries/drm-badge.js.map +1 -0
- package/dist/entries/duration.d.ts +5 -0
- package/dist/entries/duration.d.ts.map +1 -0
- package/dist/entries/duration.js +8 -0
- package/dist/entries/duration.js.map +1 -0
- package/dist/entries/error-screen.d.ts +5 -0
- package/dist/entries/error-screen.d.ts.map +1 -0
- package/dist/entries/error-screen.js +8 -0
- package/dist/entries/error-screen.js.map +1 -0
- package/dist/entries/fullscreen-button.d.ts +5 -0
- package/dist/entries/fullscreen-button.d.ts.map +1 -0
- package/dist/entries/fullscreen-button.js +8 -0
- package/dist/entries/fullscreen-button.js.map +1 -0
- package/dist/entries/live-button.d.ts +5 -0
- package/dist/entries/live-button.d.ts.map +1 -0
- package/dist/entries/live-button.js +8 -0
- package/dist/entries/live-button.js.map +1 -0
- package/dist/entries/mute-button.d.ts +5 -0
- package/dist/entries/mute-button.d.ts.map +1 -0
- package/dist/entries/mute-button.js +8 -0
- package/dist/entries/mute-button.js.map +1 -0
- package/dist/entries/panels.d.ts +5 -0
- package/dist/entries/panels.d.ts.map +1 -0
- package/dist/entries/panels.js +8 -0
- package/dist/entries/panels.js.map +1 -0
- package/dist/entries/pip-button.d.ts +5 -0
- package/dist/entries/pip-button.d.ts.map +1 -0
- package/dist/entries/pip-button.js +8 -0
- package/dist/entries/pip-button.js.map +1 -0
- package/dist/entries/play-button.d.ts +5 -0
- package/dist/entries/play-button.d.ts.map +1 -0
- package/dist/entries/play-button.js +8 -0
- package/dist/entries/play-button.js.map +1 -0
- package/dist/entries/quality-menu.d.ts +5 -0
- package/dist/entries/quality-menu.d.ts.map +1 -0
- package/dist/entries/quality-menu.js +8 -0
- package/dist/entries/quality-menu.js.map +1 -0
- package/dist/entries/remaining-time.d.ts +5 -0
- package/dist/entries/remaining-time.d.ts.map +1 -0
- package/dist/entries/remaining-time.js +9 -0
- package/dist/entries/remaining-time.js.map +1 -0
- package/dist/entries/seek-bar.d.ts +5 -0
- package/dist/entries/seek-bar.d.ts.map +1 -0
- package/dist/entries/seek-bar.js +8 -0
- package/dist/entries/seek-bar.js.map +1 -0
- package/dist/entries/skip-button.d.ts +5 -0
- package/dist/entries/skip-button.d.ts.map +1 -0
- package/dist/entries/skip-button.js +8 -0
- package/dist/entries/skip-button.js.map +1 -0
- package/dist/entries/spacer.d.ts +5 -0
- package/dist/entries/spacer.d.ts.map +1 -0
- package/dist/entries/spacer.js +8 -0
- package/dist/entries/spacer.js.map +1 -0
- package/dist/entries/speed-menu.d.ts +5 -0
- package/dist/entries/speed-menu.d.ts.map +1 -0
- package/dist/entries/speed-menu.js +8 -0
- package/dist/entries/speed-menu.js.map +1 -0
- package/dist/entries/start-button.d.ts +5 -0
- package/dist/entries/start-button.d.ts.map +1 -0
- package/dist/entries/start-button.js +8 -0
- package/dist/entries/start-button.js.map +1 -0
- package/dist/entries/subtitles-menu.d.ts +5 -0
- package/dist/entries/subtitles-menu.d.ts.map +1 -0
- package/dist/entries/subtitles-menu.js +8 -0
- package/dist/entries/subtitles-menu.js.map +1 -0
- package/dist/entries/volume-slider.d.ts +5 -0
- package/dist/entries/volume-slider.d.ts.map +1 -0
- package/dist/entries/volume-slider.js +8 -0
- package/dist/entries/volume-slider.js.map +1 -0
- package/dist/entries/volume.d.ts +7 -0
- package/dist/entries/volume.d.ts.map +1 -0
- package/dist/entries/volume.js +10 -0
- package/dist/entries/volume.js.map +1 -0
- package/dist/es2015/compose.js +33 -0
- package/dist/es2015/controls/chapters.js +61 -0
- package/dist/es2015/controls/cues.js +39 -11
- package/dist/es2015/controls/fullscreen.js +25 -23
- package/dist/es2015/controls/icons.js +5 -9
- package/dist/es2015/controls/menu.js +39 -35
- package/dist/es2015/controls/session.js +40 -0
- package/dist/es2015/controls/slider.js +18 -13
- package/dist/es2015/controls/time.js +1 -5
- package/dist/es2015/dom.js +5 -25
- package/dist/es2015/element-entry.js +10 -0
- package/dist/es2015/element.js +118 -65
- package/dist/es2015/elements/audio-menu.js +68 -0
- package/dist/es2015/elements/chapters-menu.js +68 -0
- package/dist/es2015/elements/component.js +85 -0
- package/dist/es2015/elements/control-bar.js +299 -0
- package/dist/es2015/elements/current-time.js +27 -0
- package/dist/es2015/elements/drm-badge.js +138 -0
- package/dist/es2015/elements/duration.js +23 -0
- package/dist/es2015/elements/error-screen.js +97 -0
- package/dist/es2015/elements/fullscreen-button.js +49 -0
- package/dist/es2015/elements/live-button.js +97 -0
- package/dist/es2015/elements/menu-element.js +39 -0
- package/dist/es2015/elements/mute-button.js +60 -0
- package/dist/es2015/elements/panels.js +52 -0
- package/dist/es2015/elements/pip-button.js +56 -0
- package/dist/es2015/elements/play-button.js +68 -0
- package/dist/es2015/elements/quality-menu.js +68 -0
- package/dist/es2015/elements/remaining-time.js +26 -0
- package/dist/es2015/elements/seek-bar.js +314 -0
- package/dist/es2015/elements/shared.js +155 -0
- package/dist/es2015/elements/skip-button.js +59 -0
- package/dist/es2015/elements/spacer.js +11 -0
- package/dist/es2015/elements/speed-menu.js +60 -0
- package/dist/es2015/elements/start-button.js +124 -0
- package/dist/es2015/elements/subtitles-menu.js +103 -0
- package/dist/es2015/elements/time-element.js +38 -0
- package/dist/es2015/elements/volume-slider.js +47 -0
- package/dist/es2015/elements/volume.js +52 -0
- package/dist/es2015/entries/audio-menu.js +7 -0
- package/dist/es2015/entries/chapters-menu.js +7 -0
- package/dist/es2015/entries/control-bar.js +7 -0
- package/dist/es2015/entries/current-time.js +7 -0
- package/dist/es2015/entries/drm-badge.js +7 -0
- package/dist/es2015/entries/duration.js +7 -0
- package/dist/es2015/entries/error-screen.js +7 -0
- package/dist/es2015/entries/fullscreen-button.js +7 -0
- package/dist/es2015/entries/live-button.js +7 -0
- package/dist/es2015/entries/mute-button.js +7 -0
- package/dist/es2015/entries/panels.js +7 -0
- package/dist/es2015/entries/pip-button.js +7 -0
- package/dist/es2015/entries/play-button.js +7 -0
- package/dist/es2015/entries/quality-menu.js +7 -0
- package/dist/es2015/entries/remaining-time.js +7 -0
- package/dist/es2015/entries/seek-bar.js +7 -0
- package/dist/es2015/entries/skip-button.js +7 -0
- package/dist/es2015/entries/spacer.js +7 -0
- package/dist/es2015/entries/speed-menu.js +7 -0
- package/dist/es2015/entries/start-button.js +7 -0
- package/dist/es2015/entries/subtitles-menu.js +7 -0
- package/dist/es2015/entries/volume-slider.js +7 -0
- package/dist/es2015/entries/volume.js +9 -0
- package/dist/es2015/host.js +23 -0
- package/dist/es2015/index.js +48 -9
- package/dist/es2015/labels.js +14 -0
- package/dist/es2015/style.js +40 -292
- package/dist/es2015/{panels/error.js → surface.js} +3 -3
- package/dist/es2015/tags.js +28 -0
- package/dist/host.d.ts +26 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +23 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +84 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -8
- package/dist/index.js.map +1 -1
- package/dist/labels.d.ts +7 -0
- package/dist/labels.d.ts.map +1 -0
- package/dist/labels.js +12 -0
- package/dist/labels.js.map +1 -0
- package/dist/style.d.ts +10 -2
- package/dist/style.d.ts.map +1 -1
- package/dist/style.js +40 -292
- package/dist/style.js.map +1 -1
- package/dist/surface.d.ts +15 -0
- package/dist/surface.d.ts.map +1 -0
- package/dist/{panels/error.js → surface.js} +3 -3
- package/dist/surface.js.map +1 -0
- package/dist/tags.d.ts +26 -0
- package/dist/tags.d.ts.map +1 -0
- package/dist/tags.js +26 -0
- package/dist/tags.js.map +1 -0
- package/package.json +22 -2
- package/dist/controls/bar.d.ts +0 -56
- package/dist/controls/bar.d.ts.map +0 -1
- package/dist/controls/bar.js +0 -245
- package/dist/controls/bar.js.map +0 -1
- package/dist/controls/buttons.d.ts +0 -13
- package/dist/controls/buttons.d.ts.map +0 -1
- package/dist/controls/buttons.js +0 -157
- package/dist/controls/buttons.js.map +0 -1
- package/dist/controls/control.d.ts +0 -12
- package/dist/controls/control.d.ts.map +0 -1
- package/dist/controls/control.js +0 -2
- package/dist/controls/control.js.map +0 -1
- package/dist/controls/keys.d.ts +0 -26
- package/dist/controls/keys.d.ts.map +0 -1
- package/dist/controls/keys.js +0 -66
- package/dist/controls/keys.js.map +0 -1
- package/dist/controls/live.d.ts +0 -10
- package/dist/controls/live.d.ts.map +0 -1
- package/dist/controls/live.js +0 -59
- package/dist/controls/live.js.map +0 -1
- package/dist/controls/menus.d.ts +0 -43
- package/dist/controls/menus.d.ts.map +0 -1
- package/dist/controls/menus.js +0 -262
- package/dist/controls/menus.js.map +0 -1
- package/dist/controls/options.d.ts +0 -44
- package/dist/controls/options.d.ts.map +0 -1
- package/dist/controls/options.js +0 -54
- package/dist/controls/options.js.map +0 -1
- package/dist/controls/screens.d.ts +0 -22
- package/dist/controls/screens.d.ts.map +0 -1
- package/dist/controls/screens.js +0 -69
- package/dist/controls/screens.js.map +0 -1
- package/dist/controls/seek.d.ts +0 -52
- package/dist/controls/seek.d.ts.map +0 -1
- package/dist/controls/seek.js +0 -215
- package/dist/controls/seek.js.map +0 -1
- package/dist/controls/speed.d.ts +0 -8
- package/dist/controls/speed.d.ts.map +0 -1
- package/dist/controls/speed.js +0 -34
- package/dist/controls/speed.js.map +0 -1
- package/dist/controls/volume.d.ts +0 -8
- package/dist/controls/volume.d.ts.map +0 -1
- package/dist/controls/volume.js +0 -29
- package/dist/controls/volume.js.map +0 -1
- package/dist/es2015/controls/bar.js +0 -227
- package/dist/es2015/controls/buttons.js +0 -146
- package/dist/es2015/controls/keys.js +0 -60
- package/dist/es2015/controls/live.js +0 -60
- package/dist/es2015/controls/menus.js +0 -258
- package/dist/es2015/controls/options.js +0 -46
- package/dist/es2015/controls/screens.js +0 -74
- package/dist/es2015/controls/seek.js +0 -203
- package/dist/es2015/controls/speed.js +0 -41
- package/dist/es2015/controls/volume.js +0 -30
- package/dist/es2015/panels/drm.js +0 -29
- package/dist/es2015/panels/live.js +0 -48
- package/dist/es2015/panels/quality.js +0 -52
- package/dist/es2015/panels/tracks.js +0 -47
- package/dist/panels/drm.d.ts +0 -8
- package/dist/panels/drm.d.ts.map +0 -1
- package/dist/panels/drm.js +0 -36
- package/dist/panels/drm.js.map +0 -1
- package/dist/panels/error.d.ts +0 -13
- package/dist/panels/error.d.ts.map +0 -1
- package/dist/panels/error.js.map +0 -1
- package/dist/panels/live.d.ts +0 -3
- package/dist/panels/live.d.ts.map +0 -1
- package/dist/panels/live.js +0 -56
- package/dist/panels/live.js.map +0 -1
- package/dist/panels/panel.d.ts +0 -13
- package/dist/panels/panel.d.ts.map +0 -1
- package/dist/panels/panel.js +0 -2
- package/dist/panels/panel.js.map +0 -1
- package/dist/panels/quality.d.ts +0 -3
- package/dist/panels/quality.d.ts.map +0 -1
- package/dist/panels/quality.js +0 -59
- package/dist/panels/quality.js.map +0 -1
- package/dist/panels/tracks.d.ts +0 -3
- package/dist/panels/tracks.d.ts.map +0 -1
- package/dist/panels/tracks.js +0 -49
- package/dist/panels/tracks.js.map +0 -1
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
import { el } from "../dom.js";
|
|
2
|
-
import { EMPTY, at, clip, fraction, spans, window } from "./ranges.js";
|
|
3
|
-
import { slider } from "./slider.js";
|
|
4
|
-
import { clock, describe, format } from "./time.js";
|
|
5
|
-
//#region src/controls/seek.ts
|
|
6
|
-
/** What the tile scales down to when the page sets no `--mbx-preview-width`. */
|
|
7
|
-
const PREVIEW_WIDTH = 160;
|
|
8
|
-
/** The buffer goal assumed for a session that reports none. */
|
|
9
|
-
const BUFFER_GOAL = 30;
|
|
10
|
-
/** The events on which the row re-reads the video. */
|
|
11
|
-
const EVENTS = [
|
|
12
|
-
"timeupdate",
|
|
13
|
-
"progress",
|
|
14
|
-
"durationchange",
|
|
15
|
-
"loadedmetadata",
|
|
16
|
-
"seeking",
|
|
17
|
-
"seeked",
|
|
18
|
-
"emptied"
|
|
19
|
-
];
|
|
20
|
-
function percent(part) {
|
|
21
|
-
return `${part * 100}%`;
|
|
22
|
-
}
|
|
23
|
-
function seekBar(video, flag, options) {
|
|
24
|
-
let source = {};
|
|
25
|
-
let span = EMPTY;
|
|
26
|
-
let pending = null;
|
|
27
|
-
let frame = 0;
|
|
28
|
-
function isLive() {
|
|
29
|
-
const live = source.live;
|
|
30
|
-
return live !== void 0 && live.edge !== null;
|
|
31
|
-
}
|
|
32
|
-
/** The wall clock at a presentation time, when the session can say it. */
|
|
33
|
-
function wall(time) {
|
|
34
|
-
var _source$pdt$toWallClo, _source$pdt;
|
|
35
|
-
const epoch = (_source$pdt$toWallClo = (_source$pdt = source.pdt) === null || _source$pdt === void 0 ? void 0 : _source$pdt.toWallClock(time)) !== null && _source$pdt$toWallClo !== void 0 ? _source$pdt$toWallClo : null;
|
|
36
|
-
return epoch === null ? null : clock(epoch);
|
|
37
|
-
}
|
|
38
|
-
/** What a screen reader hears at a time. */
|
|
39
|
-
function say(time) {
|
|
40
|
-
if (!isLive()) return describe(time, span.end);
|
|
41
|
-
const behind = `${format(span.end - time)} behind live`;
|
|
42
|
-
const at = wall(time);
|
|
43
|
-
return at === null ? behind : `${at}, ${behind}`;
|
|
44
|
-
}
|
|
45
|
-
/** What the preview and the time show at a time. */
|
|
46
|
-
function label(time) {
|
|
47
|
-
var _wall;
|
|
48
|
-
if (!isLive()) return format(time);
|
|
49
|
-
return (_wall = wall(time)) !== null && _wall !== void 0 ? _wall : `-${format(span.end - time)}`;
|
|
50
|
-
}
|
|
51
|
-
function flush() {
|
|
52
|
-
frame = 0;
|
|
53
|
-
if (pending === null) return;
|
|
54
|
-
video.currentTime = pending;
|
|
55
|
-
pending = null;
|
|
56
|
-
}
|
|
57
|
-
const current = el("span", "current-time", "0:00");
|
|
58
|
-
const duration = el("span", "duration", "0:00");
|
|
59
|
-
const bar = slider({
|
|
60
|
-
name: "seek",
|
|
61
|
-
label: "Seek",
|
|
62
|
-
step: options.seekStep,
|
|
63
|
-
page: options.seekPage,
|
|
64
|
-
onInput(value) {
|
|
65
|
-
bar.set(value, say(value));
|
|
66
|
-
current.textContent = label(value);
|
|
67
|
-
if (!bar.dragging()) {
|
|
68
|
-
pending = null;
|
|
69
|
-
video.currentTime = value;
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
pending = value;
|
|
73
|
-
if (frame === 0) frame = requestAnimationFrame(flush);
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
const root = el("div", "row seek-row");
|
|
77
|
-
root.append(current, bar.root, duration);
|
|
78
|
-
const buffered = el("div", "buffered seek-buffered");
|
|
79
|
-
const hover = el("div", "hover seek-hover");
|
|
80
|
-
const edge = el("div", "edge seek-edge");
|
|
81
|
-
hover.hidden = true;
|
|
82
|
-
edge.hidden = true;
|
|
83
|
-
bar.track.prepend(buffered);
|
|
84
|
-
bar.track.append(hover, edge);
|
|
85
|
-
const preview = el("div", "preview seek-preview");
|
|
86
|
-
const image = el("div", "preview-image seek-preview-image");
|
|
87
|
-
const tile = el("div", "preview-tile seek-preview-tile");
|
|
88
|
-
const time = el("span", "preview-time seek-preview-time");
|
|
89
|
-
image.append(tile);
|
|
90
|
-
image.hidden = true;
|
|
91
|
-
preview.append(image, time);
|
|
92
|
-
preview.hidden = true;
|
|
93
|
-
bar.root.append(preview);
|
|
94
|
-
/** The width the page asked for through the token, or the default. */
|
|
95
|
-
function previewWidth() {
|
|
96
|
-
const set = Number.parseFloat(getComputedStyle(preview).getPropertyValue("--mbx-preview-width"));
|
|
97
|
-
return Number.isFinite(set) && set > 0 ? set : PREVIEW_WIDTH;
|
|
98
|
-
}
|
|
99
|
-
/** The tile for a time, if the track has one, drawn at its size and scaled to fit. */
|
|
100
|
-
function paintTile(when) {
|
|
101
|
-
var _source$thumbnails$at, _source$thumbnails;
|
|
102
|
-
const found = (_source$thumbnails$at = (_source$thumbnails = source.thumbnails) === null || _source$thumbnails === void 0 ? void 0 : _source$thumbnails.at(when)) !== null && _source$thumbnails$at !== void 0 ? _source$thumbnails$at : null;
|
|
103
|
-
image.hidden = found === null;
|
|
104
|
-
if (found === null) return;
|
|
105
|
-
const scale = previewWidth() / found.width;
|
|
106
|
-
image.style.width = `${found.width * scale}px`;
|
|
107
|
-
image.style.height = `${found.height * scale}px`;
|
|
108
|
-
tile.style.width = `${found.width}px`;
|
|
109
|
-
tile.style.height = `${found.height}px`;
|
|
110
|
-
tile.style.backgroundImage = `url("${found.url}")`;
|
|
111
|
-
tile.style.backgroundPosition = `-${found.x}px -${found.y}px`;
|
|
112
|
-
tile.style.transform = `scale(${scale})`;
|
|
113
|
-
}
|
|
114
|
-
function paintBuffered() {
|
|
115
|
-
var _buffered$lastElement;
|
|
116
|
-
const parts = clip(spans(video.buffered), span);
|
|
117
|
-
while (buffered.childElementCount > parts.length) (_buffered$lastElement = buffered.lastElementChild) === null || _buffered$lastElement === void 0 || _buffered$lastElement.remove();
|
|
118
|
-
while (buffered.childElementCount < parts.length) buffered.append(el("div", "buffered-range seek-buffered-range"));
|
|
119
|
-
let i = 0;
|
|
120
|
-
for (const child of buffered.children) {
|
|
121
|
-
const part = parts[i];
|
|
122
|
-
i += 1;
|
|
123
|
-
if (part === void 0) break;
|
|
124
|
-
const node = child;
|
|
125
|
-
node.style.left = percent(part[0]);
|
|
126
|
-
node.style.width = percent(part[1] - part[0]);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
/** Whether a live window is wide enough to be worth a bar. */
|
|
130
|
-
function worthSeeking() {
|
|
131
|
-
var _source$bufferGoal, _source$bufferGoal2;
|
|
132
|
-
if (options.liveWindow === 0) return true;
|
|
133
|
-
const goal = (_source$bufferGoal = (_source$bufferGoal2 = source.bufferGoal) === null || _source$bufferGoal2 === void 0 ? void 0 : _source$bufferGoal2.call(source)) !== null && _source$bufferGoal !== void 0 ? _source$bufferGoal : BUFFER_GOAL;
|
|
134
|
-
return span.end - span.start >= options.liveWindow * goal;
|
|
135
|
-
}
|
|
136
|
-
function tick() {
|
|
137
|
-
var _source$window, _source$window2;
|
|
138
|
-
const on = isLive();
|
|
139
|
-
const own = on ? (_source$window = (_source$window2 = source.window) === null || _source$window2 === void 0 ? void 0 : _source$window2.call(source)) !== null && _source$window !== void 0 ? _source$window : null : null;
|
|
140
|
-
span = own !== null && own.end > own.start ? own : window(video.duration, spans(video.seekable), on);
|
|
141
|
-
bar.range(span.start, span.end);
|
|
142
|
-
paintBuffered();
|
|
143
|
-
const live = source.live;
|
|
144
|
-
edge.hidden = !on;
|
|
145
|
-
if (on && live !== void 0 && live.edge !== null) edge.style.left = percent(fraction(live.edge, span));
|
|
146
|
-
const seekable = !on || worthSeeking();
|
|
147
|
-
bar.root.hidden = !seekable;
|
|
148
|
-
current.hidden = !seekable;
|
|
149
|
-
duration.hidden = on;
|
|
150
|
-
flag("live", on);
|
|
151
|
-
flag("seekable", seekable);
|
|
152
|
-
if (!on) duration.textContent = format(span.end);
|
|
153
|
-
if (!bar.dragging()) {
|
|
154
|
-
bar.set(video.currentTime, say(video.currentTime));
|
|
155
|
-
current.textContent = label(video.currentTime);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
/** The hover marker and the preview follow the pointer, clamped to the bar. */
|
|
159
|
-
function point(event) {
|
|
160
|
-
const rect = bar.rail.getBoundingClientRect();
|
|
161
|
-
if (rect.width === 0 || span.end <= span.start) return;
|
|
162
|
-
const part = Math.min(1, Math.max(0, (event.clientX - rect.left) / rect.width));
|
|
163
|
-
hover.hidden = false;
|
|
164
|
-
hover.style.left = percent(part);
|
|
165
|
-
preview.hidden = false;
|
|
166
|
-
const when = at(part, span);
|
|
167
|
-
time.textContent = label(when);
|
|
168
|
-
paintTile(when);
|
|
169
|
-
const whole = bar.root.getBoundingClientRect();
|
|
170
|
-
const half = preview.offsetWidth / 2;
|
|
171
|
-
const x = rect.left - whole.left + part * rect.width;
|
|
172
|
-
preview.style.left = `${Math.min(whole.width - half, Math.max(half, x))}px`;
|
|
173
|
-
}
|
|
174
|
-
function leave() {
|
|
175
|
-
hover.hidden = true;
|
|
176
|
-
preview.hidden = true;
|
|
177
|
-
}
|
|
178
|
-
bar.root.addEventListener("pointermove", point);
|
|
179
|
-
bar.root.addEventListener("pointerleave", leave);
|
|
180
|
-
for (const name of EVENTS) video.addEventListener(name, tick);
|
|
181
|
-
tick();
|
|
182
|
-
return {
|
|
183
|
-
root,
|
|
184
|
-
attach(found) {
|
|
185
|
-
source = found;
|
|
186
|
-
tick();
|
|
187
|
-
},
|
|
188
|
-
detach() {
|
|
189
|
-
source = {};
|
|
190
|
-
leave();
|
|
191
|
-
tick();
|
|
192
|
-
},
|
|
193
|
-
dispose() {
|
|
194
|
-
cancelAnimationFrame(frame);
|
|
195
|
-
bar.root.removeEventListener("pointermove", point);
|
|
196
|
-
bar.root.removeEventListener("pointerleave", leave);
|
|
197
|
-
for (const name of EVENTS) video.removeEventListener(name, tick);
|
|
198
|
-
bar.dispose();
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
//#endregion
|
|
203
|
-
export { seekBar };
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { menu } from "./menu.js";
|
|
2
|
-
//#region src/controls/speed.ts
|
|
3
|
-
const RATES = [
|
|
4
|
-
.5,
|
|
5
|
-
.75,
|
|
6
|
-
1,
|
|
7
|
-
1.25,
|
|
8
|
-
1.5,
|
|
9
|
-
2
|
|
10
|
-
];
|
|
11
|
-
function speedMenu(video) {
|
|
12
|
-
const control = menu({
|
|
13
|
-
name: "speed",
|
|
14
|
-
label: "Playback speed",
|
|
15
|
-
icon: "playback-speed"
|
|
16
|
-
});
|
|
17
|
-
function render() {
|
|
18
|
-
const items = RATES.map((rate) => [String(rate), rate === 1 ? "Normal" : `${rate}×`]);
|
|
19
|
-
const current = String(video.playbackRate);
|
|
20
|
-
if (!RATES.some((rate) => String(rate) === current)) items.push([current, `${current}×`]);
|
|
21
|
-
control.fill([{
|
|
22
|
-
name: "rate",
|
|
23
|
-
items,
|
|
24
|
-
value: current,
|
|
25
|
-
onSelect(value) {
|
|
26
|
-
video.playbackRate = Number(value);
|
|
27
|
-
}
|
|
28
|
-
}]);
|
|
29
|
-
}
|
|
30
|
-
video.addEventListener("ratechange", render);
|
|
31
|
-
render();
|
|
32
|
-
return {
|
|
33
|
-
root: control.root,
|
|
34
|
-
dispose() {
|
|
35
|
-
video.removeEventListener("ratechange", render);
|
|
36
|
-
control.dispose();
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
//#endregion
|
|
41
|
-
export { speedMenu };
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { slider } from "./slider.js";
|
|
2
|
-
//#region src/controls/volume.ts
|
|
3
|
-
function volumeSlider(video) {
|
|
4
|
-
const bar = slider({
|
|
5
|
-
name: "volume",
|
|
6
|
-
label: "Volume",
|
|
7
|
-
step: .05,
|
|
8
|
-
page: .2,
|
|
9
|
-
onInput(value) {
|
|
10
|
-
video.volume = value;
|
|
11
|
-
if (value > 0) video.muted = false;
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
bar.range(0, 1);
|
|
15
|
-
function render() {
|
|
16
|
-
const level = video.muted ? 0 : video.volume;
|
|
17
|
-
bar.set(level, `${Math.round(level * 100)}%`);
|
|
18
|
-
}
|
|
19
|
-
video.addEventListener("volumechange", render);
|
|
20
|
-
render();
|
|
21
|
-
return {
|
|
22
|
-
root: bar.root,
|
|
23
|
-
dispose() {
|
|
24
|
-
video.removeEventListener("volumechange", render);
|
|
25
|
-
bar.dispose();
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
//#endregion
|
|
30
|
-
export { volumeSlider };
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { el } from "../dom.js";
|
|
2
|
-
import { namespaces } from "../namespaces.js";
|
|
3
|
-
//#region src/panels/drm.ts
|
|
4
|
-
const drmPanel = (session) => {
|
|
5
|
-
const engine = session.engine;
|
|
6
|
-
if (engine === null) return null;
|
|
7
|
-
const found = namespaces(engine).drm;
|
|
8
|
-
if (found === void 0) return null;
|
|
9
|
-
const drm = found;
|
|
10
|
-
const root = el("div", "panel drm");
|
|
11
|
-
root.append(el("span", "text drm-text", "DRM"));
|
|
12
|
-
const keySystem = el("span", "value drm-key-system");
|
|
13
|
-
root.append(keySystem);
|
|
14
|
-
function render() {
|
|
15
|
-
const name = drm.keySystem;
|
|
16
|
-
keySystem.textContent = name !== null && name !== void 0 ? name : "";
|
|
17
|
-
root.hidden = name === null;
|
|
18
|
-
}
|
|
19
|
-
const off = engine.on("drm:keysystem", render);
|
|
20
|
-
render();
|
|
21
|
-
return {
|
|
22
|
-
root,
|
|
23
|
-
dispose() {
|
|
24
|
-
off();
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
//#endregion
|
|
29
|
-
export { drmPanel };
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { el, state } from "../dom.js";
|
|
2
|
-
import { namespaces } from "../namespaces.js";
|
|
3
|
-
//#region src/panels/live.ts
|
|
4
|
-
/**
|
|
5
|
-
* The live badge over `engine.live`. Present only when a live stage is
|
|
6
|
-
* composed, so the factory answers null for VOD-only engines and for native.
|
|
7
|
-
*
|
|
8
|
-
* Latency has no event; it moves with the playhead. The video's `timeupdate`
|
|
9
|
-
* is the clock the browser already runs, so the badge reads on that.
|
|
10
|
-
*/
|
|
11
|
-
const livePanel = (session, video) => {
|
|
12
|
-
const engine = session.engine;
|
|
13
|
-
if (engine === null) return null;
|
|
14
|
-
const found = namespaces(engine).live;
|
|
15
|
-
if (found === void 0) return null;
|
|
16
|
-
const live = found;
|
|
17
|
-
const root = el("div", "panel live");
|
|
18
|
-
const badge = el("span", "badge live-badge", "Live");
|
|
19
|
-
const latency = el("span", "value live-latency");
|
|
20
|
-
const button = el("button", "button live-edge-button", "Go to live");
|
|
21
|
-
button.type = "button";
|
|
22
|
-
root.append(badge, latency, button);
|
|
23
|
-
let shown = "";
|
|
24
|
-
function tick() {
|
|
25
|
-
root.hidden = live.edge === null;
|
|
26
|
-
const atEdge = live.atEdge;
|
|
27
|
-
state(root, "panel live", { "at-edge": atEdge });
|
|
28
|
-
button.disabled = atEdge;
|
|
29
|
-
const seconds = live.latency;
|
|
30
|
-
const text = seconds === null ? "" : `${seconds.toFixed(1)}s behind`;
|
|
31
|
-
if (text === shown) return;
|
|
32
|
-
shown = text;
|
|
33
|
-
latency.textContent = text;
|
|
34
|
-
}
|
|
35
|
-
button.addEventListener("click", () => {
|
|
36
|
-
live.seekToEdge();
|
|
37
|
-
});
|
|
38
|
-
video.addEventListener("timeupdate", tick);
|
|
39
|
-
tick();
|
|
40
|
-
return {
|
|
41
|
-
root,
|
|
42
|
-
dispose() {
|
|
43
|
-
video.removeEventListener("timeupdate", tick);
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
};
|
|
47
|
-
//#endregion
|
|
48
|
-
export { livePanel };
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { el, fill, menu } from "../dom.js";
|
|
2
|
-
//#region src/panels/quality.ts
|
|
3
|
-
const AUTO = "auto";
|
|
4
|
-
/** A rendition's height when the manifest declared one, its bitrate otherwise. */
|
|
5
|
-
function label(rendition) {
|
|
6
|
-
if (rendition.height !== void 0) return `${rendition.height}p`;
|
|
7
|
-
return `${Math.round(rendition.bitrate / 1e3)} kbps`;
|
|
8
|
-
}
|
|
9
|
-
const qualityPanel = (session, video) => {
|
|
10
|
-
const engine = session.engine;
|
|
11
|
-
if (engine === null) return null;
|
|
12
|
-
const quality = engine.quality;
|
|
13
|
-
const root = el("div", "panel quality");
|
|
14
|
-
const [wrapper, select] = menu("quality", "Quality");
|
|
15
|
-
const playing = el("span", "value quality-playing");
|
|
16
|
-
root.append(wrapper, playing);
|
|
17
|
-
let shown = "";
|
|
18
|
-
function render() {
|
|
19
|
-
var _quality$pinned;
|
|
20
|
-
const items = [[AUTO, "Auto"]];
|
|
21
|
-
for (const rendition of quality.renditions) items.push([rendition.id, label(rendition)]);
|
|
22
|
-
fill(select, items, (_quality$pinned = quality.pinned) !== null && _quality$pinned !== void 0 ? _quality$pinned : AUTO);
|
|
23
|
-
root.hidden = quality.renditions.length === 0;
|
|
24
|
-
}
|
|
25
|
-
function tick() {
|
|
26
|
-
const current = quality.playing === null ? "" : label(quality.playing);
|
|
27
|
-
if (current === shown) return;
|
|
28
|
-
shown = current;
|
|
29
|
-
playing.textContent = current;
|
|
30
|
-
}
|
|
31
|
-
select.addEventListener("change", () => {
|
|
32
|
-
if (select.value === AUTO) quality.auto();
|
|
33
|
-
else quality.pin(select.value);
|
|
34
|
-
});
|
|
35
|
-
const offs = [
|
|
36
|
-
engine.on("tracks:changed", render),
|
|
37
|
-
engine.on("quality:constraints-unsatisfiable", render),
|
|
38
|
-
engine.on("quality:pin-unsatisfiable", render)
|
|
39
|
-
];
|
|
40
|
-
video.addEventListener("timeupdate", tick);
|
|
41
|
-
render();
|
|
42
|
-
tick();
|
|
43
|
-
return {
|
|
44
|
-
root,
|
|
45
|
-
dispose() {
|
|
46
|
-
for (const off of offs) off();
|
|
47
|
-
video.removeEventListener("timeupdate", tick);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
};
|
|
51
|
-
//#endregion
|
|
52
|
-
export { qualityPanel };
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { el, fill, menu } from "../dom.js";
|
|
2
|
-
//#region src/panels/tracks.ts
|
|
3
|
-
const OFF = "off";
|
|
4
|
-
/** The language, then the role, then the id: whichever the manifest gave. */
|
|
5
|
-
function label(track) {
|
|
6
|
-
const parts = [track.lang, track.role].filter((part) => part !== void 0);
|
|
7
|
-
return parts.length === 0 ? track.id : parts.join(" · ");
|
|
8
|
-
}
|
|
9
|
-
const tracksPanel = (session) => {
|
|
10
|
-
const engine = session.engine;
|
|
11
|
-
if (engine === null) return null;
|
|
12
|
-
const tracks = engine.tracks;
|
|
13
|
-
const root = el("div", "panel tracks");
|
|
14
|
-
const [audioLabel, audio] = menu("audio", "Audio");
|
|
15
|
-
const [textLabel, text] = menu("text", "Subtitles");
|
|
16
|
-
root.append(audioLabel, textLabel);
|
|
17
|
-
function renderOne(select, wrapper, contentType, off) {
|
|
18
|
-
var _tracks$active$id, _tracks$active;
|
|
19
|
-
const available = tracks.available.filter((track) => track.contentType === contentType);
|
|
20
|
-
const items = off ? [[OFF, "Off"]] : [];
|
|
21
|
-
for (const track of available) items.push([track.id, label(track)]);
|
|
22
|
-
fill(select, items, (_tracks$active$id = (_tracks$active = tracks.active(contentType)) === null || _tracks$active === void 0 ? void 0 : _tracks$active.id) !== null && _tracks$active$id !== void 0 ? _tracks$active$id : OFF);
|
|
23
|
-
wrapper.hidden = available.length === 0;
|
|
24
|
-
return available.length;
|
|
25
|
-
}
|
|
26
|
-
function render() {
|
|
27
|
-
const count = renderOne(audio, audioLabel, "audio", false) + renderOne(text, textLabel, "text", true);
|
|
28
|
-
root.hidden = count === 0;
|
|
29
|
-
}
|
|
30
|
-
audio.addEventListener("change", () => {
|
|
31
|
-
tracks.select(audio.value);
|
|
32
|
-
});
|
|
33
|
-
text.addEventListener("change", () => {
|
|
34
|
-
if (text.value === OFF) tracks.deselect("text");
|
|
35
|
-
else tracks.select(text.value);
|
|
36
|
-
});
|
|
37
|
-
const offs = [engine.on("tracks:changed", render), engine.on("tracks:selected", render)];
|
|
38
|
-
render();
|
|
39
|
-
return {
|
|
40
|
-
root,
|
|
41
|
-
dispose() {
|
|
42
|
-
for (const off of offs) off();
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
};
|
|
46
|
-
//#endregion
|
|
47
|
-
export { tracksPanel };
|
package/dist/panels/drm.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The DRM indicator over `engine.drm`. Present only when the EME stages are
|
|
3
|
-
* composed. It shows the key system in use and nothing else: sessions and key
|
|
4
|
-
* statuses are diagnostics, and the element is not a diagnostics surface.
|
|
5
|
-
*/
|
|
6
|
-
import type { PanelFactory } from './panel.js';
|
|
7
|
-
export declare const drmPanel: PanelFactory;
|
|
8
|
-
//# sourceMappingURL=drm.d.ts.map
|
package/dist/panels/drm.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"drm.d.ts","sourceRoot":"","sources":["../../src/panels/drm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtD,eAAO,MAAM,QAAQ,EAAE,YA6BtB,CAAC"}
|
package/dist/panels/drm.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The DRM indicator over `engine.drm`. Present only when the EME stages are
|
|
3
|
-
* composed. It shows the key system in use and nothing else: sessions and key
|
|
4
|
-
* statuses are diagnostics, and the element is not a diagnostics surface.
|
|
5
|
-
*/
|
|
6
|
-
import { el } from '../dom.js';
|
|
7
|
-
import { namespaces } from '../namespaces.js';
|
|
8
|
-
export const drmPanel = (session) => {
|
|
9
|
-
const engine = session.engine;
|
|
10
|
-
if (engine === null)
|
|
11
|
-
return null;
|
|
12
|
-
const found = namespaces(engine).drm;
|
|
13
|
-
if (found === undefined)
|
|
14
|
-
return null;
|
|
15
|
-
const drm = found;
|
|
16
|
-
const root = el('div', 'panel drm');
|
|
17
|
-
root.append(el('span', 'text drm-text', 'DRM'));
|
|
18
|
-
const keySystem = el('span', 'value drm-key-system');
|
|
19
|
-
root.append(keySystem);
|
|
20
|
-
function render() {
|
|
21
|
-
const name = drm.keySystem;
|
|
22
|
-
keySystem.textContent = name ?? '';
|
|
23
|
-
// Nothing to show until a key session opens, and an empty indicator is
|
|
24
|
-
// worse than none.
|
|
25
|
-
root.hidden = name === null;
|
|
26
|
-
}
|
|
27
|
-
const off = engine.on('drm:keysystem', render);
|
|
28
|
-
render();
|
|
29
|
-
return {
|
|
30
|
-
root,
|
|
31
|
-
dispose() {
|
|
32
|
-
off();
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=drm.js.map
|
package/dist/panels/drm.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"drm.js","sourceRoot":"","sources":["../../src/panels/drm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,CAAC,MAAM,QAAQ,GAAiB,CAAC,OAAO,EAAgB,EAAE;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;IACrC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,GAAG,GAAW,KAAK,CAAC;IAE1B,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEvB,SAAS,MAAM;QACb,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;QAC3B,SAAS,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QACnC,uEAAuE;QACvE,mBAAmB;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC9B,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC;IAET,OAAO;QACL,IAAI;QACJ,OAAO;YACL,GAAG,EAAE,CAAC;QACR,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/panels/error.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The error surface. It is not a panel: it outlives a session, because the
|
|
3
|
-
* core reports "no handler claimed this source" when there is no session to
|
|
4
|
-
* hang it on. It stays hidden until a fatal error arrives.
|
|
5
|
-
*/
|
|
6
|
-
import type { PlayerError } from '@mattebox/player-core';
|
|
7
|
-
export interface ErrorSurface {
|
|
8
|
-
readonly root: HTMLElement;
|
|
9
|
-
show(error: PlayerError): void;
|
|
10
|
-
clear(): void;
|
|
11
|
-
}
|
|
12
|
-
export declare function errorSurface(retry: () => void): ErrorSurface;
|
|
13
|
-
//# sourceMappingURL=error.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/panels/error.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,YAAY,CAqB5D"}
|
package/dist/panels/error.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/panels/error.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAQ/B,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IAEnB,OAAO;QACL,IAAI;QACJ,IAAI,CAAC,KAAkB;YACrB,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC;YACtC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,KAAK;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/panels/live.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/panels/live.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtD,eAAO,MAAM,SAAS,EAAE,YA8CvB,CAAC"}
|
package/dist/panels/live.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The live badge over `engine.live`. Present only when a live stage is
|
|
3
|
-
* composed, so the factory answers null for VOD-only engines and for native.
|
|
4
|
-
*
|
|
5
|
-
* Latency has no event; it moves with the playhead. The video's `timeupdate`
|
|
6
|
-
* is the clock the browser already runs, so the badge reads on that.
|
|
7
|
-
*/
|
|
8
|
-
import { el, state } from '../dom.js';
|
|
9
|
-
import { namespaces } from '../namespaces.js';
|
|
10
|
-
export const livePanel = (session, video) => {
|
|
11
|
-
const engine = session.engine;
|
|
12
|
-
if (engine === null)
|
|
13
|
-
return null;
|
|
14
|
-
const found = namespaces(engine).live;
|
|
15
|
-
if (found === undefined)
|
|
16
|
-
return null;
|
|
17
|
-
// Annotated, not narrowed: a hoisted function declaration below reads it.
|
|
18
|
-
const live = found;
|
|
19
|
-
const root = el('div', 'panel live');
|
|
20
|
-
const badge = el('span', 'badge live-badge', 'Live');
|
|
21
|
-
const latency = el('span', 'value live-latency');
|
|
22
|
-
const button = el('button', 'button live-edge-button', 'Go to live');
|
|
23
|
-
button.type = 'button';
|
|
24
|
-
root.append(badge, latency, button);
|
|
25
|
-
let shown = '';
|
|
26
|
-
function tick() {
|
|
27
|
-
// The namespace is present whenever a live stage was composed, which says
|
|
28
|
-
// nothing about the stream: `full` carries both live adapters, so a VOD
|
|
29
|
-
// presentation has `engine.live` too. A window that never opened leaves
|
|
30
|
-
// `edge` null, and that is what makes a stream live.
|
|
31
|
-
root.hidden = live.edge === null;
|
|
32
|
-
const atEdge = live.atEdge;
|
|
33
|
-
// State rides the part name: `::part()` takes no attribute selector, so
|
|
34
|
-
// `::part(at-edge)` is the only way a page can style the edge state.
|
|
35
|
-
state(root, 'panel live', { 'at-edge': atEdge });
|
|
36
|
-
button.disabled = atEdge;
|
|
37
|
-
const seconds = live.latency;
|
|
38
|
-
const text = seconds === null ? '' : `${seconds.toFixed(1)}s behind`;
|
|
39
|
-
if (text === shown)
|
|
40
|
-
return;
|
|
41
|
-
shown = text;
|
|
42
|
-
latency.textContent = text;
|
|
43
|
-
}
|
|
44
|
-
button.addEventListener('click', () => {
|
|
45
|
-
live.seekToEdge();
|
|
46
|
-
});
|
|
47
|
-
video.addEventListener('timeupdate', tick);
|
|
48
|
-
tick();
|
|
49
|
-
return {
|
|
50
|
-
root,
|
|
51
|
-
dispose() {
|
|
52
|
-
video.removeEventListener('timeupdate', tick);
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
//# sourceMappingURL=live.js.map
|
package/dist/panels/live.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/panels/live.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,MAAM,CAAC,MAAM,SAAS,GAAiB,CAAC,OAAO,EAAE,KAAK,EAAgB,EAAE;IACtE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IACtC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,0EAA0E;IAC1E,MAAM,IAAI,GAAY,KAAK,CAAC;IAE5B,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,EAAE,yBAAyB,EAAE,YAAY,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEpC,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,SAAS,IAAI;QACX,0EAA0E;QAC1E,wEAAwE;QACxE,wEAAwE;QACxE,qDAAqD;QACrD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,wEAAwE;QACxE,qEAAqE;QACrE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,MAAM,IAAI,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;QACrE,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO;QAC3B,KAAK,GAAG,IAAI,CAAC;QACb,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,EAAE,CAAC;IAEP,OAAO;QACL,IAAI;QACJ,OAAO;YACL,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/panels/panel.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What a panel is. A panel reads one engine namespace, subscribes to what it
|
|
3
|
-
* needs, and hands back a root and a teardown. It renders nothing for a
|
|
4
|
-
* native session, and nothing for an engine whose stage was not composed:
|
|
5
|
-
* the factory answers null and the element never inserts it.
|
|
6
|
-
*/
|
|
7
|
-
import type { Session } from '@mattebox/player-core';
|
|
8
|
-
export interface Panel {
|
|
9
|
-
readonly root: HTMLElement;
|
|
10
|
-
dispose(): void;
|
|
11
|
-
}
|
|
12
|
-
export type PanelFactory = (session: Session, video: HTMLVideoElement) => Panel | null;
|
|
13
|
-
//# sourceMappingURL=panel.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/panels/panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,KAAK,KAAK,GAAG,IAAI,CAAC"}
|
package/dist/panels/panel.js
DELETED
package/dist/panels/panel.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/panels/panel.ts"],"names":[],"mappings":""}
|
package/dist/panels/quality.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../../src/panels/quality.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,YAAY,CAAC;AAUtD,eAAO,MAAM,YAAY,EAAE,YAiD1B,CAAC"}
|