@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
package/dist/controls/bar.d.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The control bar: an overlay over the bottom of the video, mounted while
|
|
3
|
-
* `controls="custom"` and nothing else. Two rows. The seek row is the time,
|
|
4
|
-
* the bar, the duration, and the live button. The buttons row is whatever
|
|
5
|
-
* the `layout` knob names, in its order: by default skip back, play, skip
|
|
6
|
-
* forward and the volume on the left; speed, the menus, picture in picture
|
|
7
|
-
* and fullscreen on the right.
|
|
8
|
-
*
|
|
9
|
-
* The bar owns two things of its own: the state it carries on its part
|
|
10
|
-
* name, and the idle fade. State rides the part name, so a page styles
|
|
11
|
-
* `::part(playing)`, `::part(muted)`, `::part(fullscreen)`, `::part(live)`,
|
|
12
|
-
* `::part(seekable)` and `::part(idle)`.
|
|
13
|
-
*
|
|
14
|
-
* The fade is one timer and nothing else. Any activity, a pointer moving or
|
|
15
|
-
* pressing, a key, playback starting, re-arms it for `idleMs`, and when it
|
|
16
|
-
* fires the bar hides unless something the bar can know for certain holds
|
|
17
|
-
* it: the video is paused, a menu is open, or keyboard focus is inside it,
|
|
18
|
-
* where keyboard means the last input was a key and not a pointer. Whether
|
|
19
|
-
* the pointer is over the element is never tracked: that state goes stale
|
|
20
|
-
* when the pointer leaves without a move the element sees, and a bar that
|
|
21
|
-
* will not hide is worse than one that hides under a still pointer.
|
|
22
|
-
*
|
|
23
|
-
* Pointer events on the slotted video bubble through the slot to the stage,
|
|
24
|
-
* so the stage is the one listener target, and fullscreen goes on the stage
|
|
25
|
-
* too, so it is the video and the bar and nothing else. The host is where
|
|
26
|
-
* the shortcuts listen, so they hear every key pressed inside.
|
|
27
|
-
*
|
|
28
|
-
* The menus over the engine's namespaces live per session, the way the
|
|
29
|
-
* panels do: built on attach, dropped on detach, none for a native session.
|
|
30
|
-
* The speed menu reads the video alone, so it is there for every session.
|
|
31
|
-
*
|
|
32
|
-
* While the bar shows, the subtitles are lifted above it; while it hides,
|
|
33
|
-
* they return to the bottom of the video.
|
|
34
|
-
*
|
|
35
|
-
* Two more things sit in the stage with the bar: the start button in the
|
|
36
|
-
* middle of the picture, and the error screen that takes the place of the
|
|
37
|
-
* row under the video while the bar is the interface.
|
|
38
|
-
*/
|
|
39
|
-
import type { PlayerError, Session } from '@mattebox/player-core';
|
|
40
|
-
import type { Controls } from './options.js';
|
|
41
|
-
export interface ControlBar {
|
|
42
|
-
readonly root: HTMLElement;
|
|
43
|
-
/** The session now feeding the video, for the parts that read its engine. */
|
|
44
|
-
attach(session: Session): void;
|
|
45
|
-
detach(): void;
|
|
46
|
-
/** A fatal error, shown over the picture until the next load. */
|
|
47
|
-
error(error: PlayerError): void;
|
|
48
|
-
clearError(): void;
|
|
49
|
-
dispose(): void;
|
|
50
|
-
}
|
|
51
|
-
export declare function controlBar(host: HTMLElement, stage: HTMLElement, video: HTMLVideoElement, options: Controls,
|
|
52
|
-
/** Told of the states the host reflects, so the page can reach the light-DOM video by them. */
|
|
53
|
-
reflect: (name: string, on: boolean) => void,
|
|
54
|
-
/** What the error screen's retry does. */
|
|
55
|
-
retry: () => void): ControlBar;
|
|
56
|
-
//# sourceMappingURL=bar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bar.d.ts","sourceRoot":"","sources":["../../src/controls/bar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAUlE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAQ7C,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,6EAA6E;IAC7E,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,MAAM,IAAI,IAAI,CAAC;IACf,iEAAiE;IACjE,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,UAAU,IAAI,IAAI,CAAC;IACnB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,QAAQ;AACjB,+FAA+F;AAC/F,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,KAAK,IAAI;AAC5C,0CAA0C;AAC1C,KAAK,EAAE,MAAM,IAAI,GAChB,UAAU,CA8NZ"}
|
package/dist/controls/bar.js
DELETED
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
import { el, state } from '../dom.js';
|
|
2
|
-
import { namespaces } from '../namespaces.js';
|
|
3
|
-
import { fullscreenButton, muteButton, pipButton, playButton, skipButton } from './buttons.js';
|
|
4
|
-
import { cueLift, cueStyle } from './cues.js';
|
|
5
|
-
import { fullscreen } from './fullscreen.js';
|
|
6
|
-
import { keys } from './keys.js';
|
|
7
|
-
import { liveButton } from './live.js';
|
|
8
|
-
import { MENUS } from './menus.js';
|
|
9
|
-
import { clusters } from './options.js';
|
|
10
|
-
import { pictureInPicture } from './pip.js';
|
|
11
|
-
import { errorScreen, startButton } from './screens.js';
|
|
12
|
-
import { seekBar } from './seek.js';
|
|
13
|
-
import { speedMenu } from './speed.js';
|
|
14
|
-
import { volumeSlider } from './volume.js';
|
|
15
|
-
export function controlBar(host, stage, video, options,
|
|
16
|
-
/** Told of the states the host reflects, so the page can reach the light-DOM video by them. */
|
|
17
|
-
reflect,
|
|
18
|
-
/** What the error screen's retry does. */
|
|
19
|
-
retry) {
|
|
20
|
-
const root = el('div', 'controls');
|
|
21
|
-
const flags = {};
|
|
22
|
-
let timer;
|
|
23
|
-
/** Whether the last input was a key, so focus inside is a keyboard user's and holds the bar. */
|
|
24
|
-
let keyboard = false;
|
|
25
|
-
function render() {
|
|
26
|
-
state(root, 'controls', flags);
|
|
27
|
-
}
|
|
28
|
-
function flag(name, on) {
|
|
29
|
-
if (flags[name] === on)
|
|
30
|
-
return;
|
|
31
|
-
flags[name] = on;
|
|
32
|
-
render();
|
|
33
|
-
if (name === 'fullscreen')
|
|
34
|
-
reflect(name, on);
|
|
35
|
-
if (name === 'idle')
|
|
36
|
-
cues.lifted(!on);
|
|
37
|
-
if (name === 'seekable')
|
|
38
|
-
live.seekable(on);
|
|
39
|
-
}
|
|
40
|
-
/** What keeps the bar up when the timer fires. Read then, never remembered. */
|
|
41
|
-
function held() {
|
|
42
|
-
if (video.paused)
|
|
43
|
-
return true;
|
|
44
|
-
if (root.querySelector('[part~="open"]') !== null)
|
|
45
|
-
return true;
|
|
46
|
-
if (!keyboard)
|
|
47
|
-
return false;
|
|
48
|
-
const active = root.getRootNode().activeElement;
|
|
49
|
-
return active !== null && root.contains(active);
|
|
50
|
-
}
|
|
51
|
-
function sleep() {
|
|
52
|
-
timer = undefined;
|
|
53
|
-
// A hold is checked again later: a menu closes and a pause ends without
|
|
54
|
-
// an event the bar hears.
|
|
55
|
-
if (held()) {
|
|
56
|
-
timer = setTimeout(sleep, options.idleMs);
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
flag('idle', true);
|
|
60
|
-
}
|
|
61
|
-
/** Shows the bar and arms the timer again. */
|
|
62
|
-
function wake() {
|
|
63
|
-
clearTimeout(timer);
|
|
64
|
-
if (flags.idle === true)
|
|
65
|
-
flag('idle', false);
|
|
66
|
-
timer = setTimeout(sleep, options.idleMs);
|
|
67
|
-
}
|
|
68
|
-
function pointer() {
|
|
69
|
-
keyboard = false;
|
|
70
|
-
wake();
|
|
71
|
-
}
|
|
72
|
-
function key() {
|
|
73
|
-
keyboard = true;
|
|
74
|
-
wake();
|
|
75
|
-
}
|
|
76
|
-
cueStyle();
|
|
77
|
-
const cues = cueLift(video, root, host);
|
|
78
|
-
// The live button first: the seek row reports whether it is seekable as
|
|
79
|
-
// it is built, and the flag passes that on to the button.
|
|
80
|
-
const live = liveButton(video);
|
|
81
|
-
const seek = seekBar(video, flag, options);
|
|
82
|
-
seek.root.append(live.root);
|
|
83
|
-
const screen = fullscreen(host, stage, video);
|
|
84
|
-
const start = startButton(video, flag, options.start !== 0);
|
|
85
|
-
const failure = errorScreen(retry);
|
|
86
|
-
/** An error over a picture that then plays is wrong by definition: playback resuming clears it. */
|
|
87
|
-
function played() {
|
|
88
|
-
if (failure.shown()) {
|
|
89
|
-
failure.clear();
|
|
90
|
-
start.root.hidden = !video.paused;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
video.addEventListener('playing', played);
|
|
94
|
-
stage.append(start.root, failure.root);
|
|
95
|
-
/** The menus' places in the row, filled per session. */
|
|
96
|
-
const slots = new Map();
|
|
97
|
-
let session = [];
|
|
98
|
-
/** A control by the name the layout gives it, or null for a name that is not one. */
|
|
99
|
-
function build(name) {
|
|
100
|
-
switch (name) {
|
|
101
|
-
case 'skip-back':
|
|
102
|
-
return options.skipBack > 0 ? skipButton(video, -options.skipBack) : null;
|
|
103
|
-
case 'skip-forward':
|
|
104
|
-
return options.skipForward > 0 ? skipButton(video, options.skipForward) : null;
|
|
105
|
-
case 'play':
|
|
106
|
-
return playButton(video, flag);
|
|
107
|
-
case 'volume': {
|
|
108
|
-
const group = el('div', 'group volume-group');
|
|
109
|
-
const sound = [muteButton(video, flag), volumeSlider(video)];
|
|
110
|
-
for (const control of sound)
|
|
111
|
-
group.append(control.root);
|
|
112
|
-
return {
|
|
113
|
-
root: group,
|
|
114
|
-
dispose() {
|
|
115
|
-
for (const control of sound)
|
|
116
|
-
control.dispose();
|
|
117
|
-
},
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
case 'speed':
|
|
121
|
-
return speedMenu(video);
|
|
122
|
-
case 'pip':
|
|
123
|
-
return pipButton(pictureInPicture(video), flag);
|
|
124
|
-
case 'fullscreen':
|
|
125
|
-
return fullscreenButton(screen, flag);
|
|
126
|
-
default: {
|
|
127
|
-
if (!(name in MENUS))
|
|
128
|
-
return null;
|
|
129
|
-
const slot = el('div', `slot ${name}-slot`);
|
|
130
|
-
slots.set(name, slot);
|
|
131
|
-
return { root: slot, dispose() { } };
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
const row = el('div', 'row buttons');
|
|
136
|
-
const cluster = el('div', 'cluster');
|
|
137
|
-
const built = [];
|
|
138
|
-
const [leftNames, rightNames] = clusters(options.layout);
|
|
139
|
-
for (const name of leftNames) {
|
|
140
|
-
const control = build(name);
|
|
141
|
-
if (control === null)
|
|
142
|
-
continue;
|
|
143
|
-
built.push(control);
|
|
144
|
-
row.append(control.root);
|
|
145
|
-
}
|
|
146
|
-
for (const name of rightNames) {
|
|
147
|
-
const control = build(name);
|
|
148
|
-
if (control === null)
|
|
149
|
-
continue;
|
|
150
|
-
built.push(control);
|
|
151
|
-
cluster.append(control.root);
|
|
152
|
-
}
|
|
153
|
-
row.append(cluster);
|
|
154
|
-
root.append(seek.root, row);
|
|
155
|
-
const controls = [
|
|
156
|
-
...built,
|
|
157
|
-
live,
|
|
158
|
-
start,
|
|
159
|
-
failure,
|
|
160
|
-
keys({
|
|
161
|
-
host,
|
|
162
|
-
stage,
|
|
163
|
-
own: [root, start.root, failure.root],
|
|
164
|
-
video,
|
|
165
|
-
step: options.seekStep,
|
|
166
|
-
fullscreen: screen,
|
|
167
|
-
}),
|
|
168
|
-
cues,
|
|
169
|
-
];
|
|
170
|
-
function drop() {
|
|
171
|
-
for (const control of session)
|
|
172
|
-
control.dispose();
|
|
173
|
-
session = [];
|
|
174
|
-
for (const slot of slots.values())
|
|
175
|
-
slot.replaceChildren();
|
|
176
|
-
}
|
|
177
|
-
stage.addEventListener('pointermove', pointer);
|
|
178
|
-
stage.addEventListener('pointerdown', pointer);
|
|
179
|
-
host.addEventListener('keydown', key);
|
|
180
|
-
video.addEventListener('play', wake);
|
|
181
|
-
video.addEventListener('pause', wake);
|
|
182
|
-
video.addEventListener('ended', wake);
|
|
183
|
-
wake();
|
|
184
|
-
cues.lifted(true);
|
|
185
|
-
return {
|
|
186
|
-
root,
|
|
187
|
-
attach(current) {
|
|
188
|
-
drop();
|
|
189
|
-
const engine = current.engine;
|
|
190
|
-
if (engine === null) {
|
|
191
|
-
seek.attach({});
|
|
192
|
-
live.attach(undefined);
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
const found = namespaces(engine);
|
|
196
|
-
seek.attach({
|
|
197
|
-
live: found.live,
|
|
198
|
-
thumbnails: found.thumbnails,
|
|
199
|
-
pdt: found.pdt,
|
|
200
|
-
// The forward buffer goal and the availability window live on the
|
|
201
|
-
// diagnostics snapshot and nowhere else.
|
|
202
|
-
bufferGoal: () => engine.stats.snapshot().scheduling.bufferGoal,
|
|
203
|
-
window: () => engine.stats.snapshot().live?.span ?? null,
|
|
204
|
-
});
|
|
205
|
-
live.attach(found.live);
|
|
206
|
-
for (const [name, slot] of slots) {
|
|
207
|
-
const factory = MENUS[name];
|
|
208
|
-
if (factory === undefined)
|
|
209
|
-
continue;
|
|
210
|
-
const control = factory({ engine, host });
|
|
211
|
-
session.push(control);
|
|
212
|
-
slot.append(control.root);
|
|
213
|
-
}
|
|
214
|
-
},
|
|
215
|
-
detach() {
|
|
216
|
-
drop();
|
|
217
|
-
seek.detach();
|
|
218
|
-
live.detach();
|
|
219
|
-
},
|
|
220
|
-
error(error) {
|
|
221
|
-
failure.show(error);
|
|
222
|
-
start.root.hidden = true;
|
|
223
|
-
},
|
|
224
|
-
clearError() {
|
|
225
|
-
failure.clear();
|
|
226
|
-
start.root.hidden = options.start === 0 || !video.paused;
|
|
227
|
-
},
|
|
228
|
-
dispose() {
|
|
229
|
-
clearTimeout(timer);
|
|
230
|
-
drop();
|
|
231
|
-
seek.dispose();
|
|
232
|
-
for (const control of controls)
|
|
233
|
-
control.dispose();
|
|
234
|
-
stage.removeEventListener('pointermove', pointer);
|
|
235
|
-
stage.removeEventListener('pointerdown', pointer);
|
|
236
|
-
host.removeEventListener('keydown', key);
|
|
237
|
-
video.removeEventListener('play', wake);
|
|
238
|
-
video.removeEventListener('pause', wake);
|
|
239
|
-
video.removeEventListener('ended', wake);
|
|
240
|
-
video.removeEventListener('playing', played);
|
|
241
|
-
root.remove();
|
|
242
|
-
},
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
//# sourceMappingURL=bar.js.map
|
package/dist/controls/bar.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bar.js","sourceRoot":"","sources":["../../src/controls/bar.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Control, Flag } from './control.js';
|
|
2
|
-
import type { Fullscreen } from './fullscreen.js';
|
|
3
|
-
import type { IconName } from './icons.js';
|
|
4
|
-
import type { PictureInPicture } from './pip.js';
|
|
5
|
-
/** A button with its glyph. `control` is the generic name, so `::part(control)` reaches every one. */
|
|
6
|
-
export declare function button(name: string, first: IconName): [HTMLButtonElement, SVGSVGElement];
|
|
7
|
-
export declare function playButton(video: HTMLVideoElement, flag: Flag): Control;
|
|
8
|
-
export declare function muteButton(video: HTMLVideoElement, flag: Flag): Control;
|
|
9
|
-
/** Moves the playhead by `seconds`, negative for back, within what the video can reach. */
|
|
10
|
-
export declare function skipButton(video: HTMLVideoElement, seconds: number): Control;
|
|
11
|
-
export declare function pipButton(api: PictureInPicture, flag: Flag): Control;
|
|
12
|
-
export declare function fullscreenButton(api: Fullscreen, flag: Flag): Control;
|
|
13
|
-
//# sourceMappingURL=buttons.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buttons.d.ts","sourceRoot":"","sources":["../../src/controls/buttons.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,sGAAsG;AACtG,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAMxF;AASD,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAgCvE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAiCvE;AASD,2FAA2F;AAC3F,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAuB5E;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAsBpE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAsBrE"}
|
package/dist/controls/buttons.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The buttons: play/pause, mute, fullscreen. Each reads the video on the
|
|
3
|
-
* events the video already fires, swaps its glyph and its name, and writes
|
|
4
|
-
* one thing back on click. The glyph is decoration; the name is on the
|
|
5
|
-
* button, where a screen reader reads it.
|
|
6
|
-
*/
|
|
7
|
-
import { el } from '../dom.js';
|
|
8
|
-
import { glyph, icon } from './icons.js';
|
|
9
|
-
/** A button with its glyph. `control` is the generic name, so `::part(control)` reaches every one. */
|
|
10
|
-
export function button(name, first) {
|
|
11
|
-
const node = el('button', `control ${name}-button`);
|
|
12
|
-
node.type = 'button';
|
|
13
|
-
const svg = icon(first);
|
|
14
|
-
node.append(svg);
|
|
15
|
-
return [node, svg];
|
|
16
|
-
}
|
|
17
|
-
function listen(target, names, fn) {
|
|
18
|
-
for (const name of names)
|
|
19
|
-
target.addEventListener(name, fn);
|
|
20
|
-
return () => {
|
|
21
|
-
for (const name of names)
|
|
22
|
-
target.removeEventListener(name, fn);
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
export function playButton(video, flag) {
|
|
26
|
-
const [root, svg] = button('play', 'play');
|
|
27
|
-
function render() {
|
|
28
|
-
const paused = video.paused;
|
|
29
|
-
const name = video.ended ? 'replay' : paused ? 'play' : 'pause';
|
|
30
|
-
glyph(svg, name);
|
|
31
|
-
root.setAttribute('aria-label', video.ended ? 'Replay' : paused ? 'Play' : 'Pause');
|
|
32
|
-
flag('playing', !paused);
|
|
33
|
-
}
|
|
34
|
-
function click() {
|
|
35
|
-
if (video.paused) {
|
|
36
|
-
// Rejected outside a user gesture on an unmuted video, which the
|
|
37
|
-
// browser reports on the video's own error path; nothing to add.
|
|
38
|
-
video.play().catch(() => undefined);
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
video.pause();
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
root.addEventListener('click', click);
|
|
45
|
-
const off = listen(video, ['play', 'pause', 'ended', 'emptied'], render);
|
|
46
|
-
render();
|
|
47
|
-
return {
|
|
48
|
-
root,
|
|
49
|
-
dispose() {
|
|
50
|
-
root.removeEventListener('click', click);
|
|
51
|
-
off();
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
export function muteButton(video, flag) {
|
|
56
|
-
const [root, svg] = button('mute', 'volume-high');
|
|
57
|
-
function render() {
|
|
58
|
-
const silent = video.muted || video.volume === 0;
|
|
59
|
-
const name = silent ? 'mute' : video.volume <= 0.5 ? 'volume-low' : 'volume-high';
|
|
60
|
-
glyph(svg, name);
|
|
61
|
-
root.setAttribute('aria-label', silent ? 'Unmute' : 'Mute');
|
|
62
|
-
root.setAttribute('aria-pressed', String(video.muted));
|
|
63
|
-
flag('muted', silent);
|
|
64
|
-
}
|
|
65
|
-
function click() {
|
|
66
|
-
if (video.muted) {
|
|
67
|
-
video.muted = false;
|
|
68
|
-
// Unmuting at zero volume would change nothing the viewer can hear.
|
|
69
|
-
if (video.volume === 0)
|
|
70
|
-
video.volume = 1;
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
video.muted = true;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
root.addEventListener('click', click);
|
|
77
|
-
const off = listen(video, ['volumechange', 'emptied'], render);
|
|
78
|
-
render();
|
|
79
|
-
return {
|
|
80
|
-
root,
|
|
81
|
-
dispose() {
|
|
82
|
-
root.removeEventListener('click', click);
|
|
83
|
-
off();
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
/** The glyph for a skip amount: the set draws 10 and 30, and a plain arrow says the rest. */
|
|
88
|
-
function skipGlyph(back, amount) {
|
|
89
|
-
const side = back ? 'seek-backward' : 'seek-forward';
|
|
90
|
-
if (amount === 10 || amount === 30)
|
|
91
|
-
return `${side}-${amount}`;
|
|
92
|
-
return side;
|
|
93
|
-
}
|
|
94
|
-
/** Moves the playhead by `seconds`, negative for back, within what the video can reach. */
|
|
95
|
-
export function skipButton(video, seconds) {
|
|
96
|
-
const back = seconds < 0;
|
|
97
|
-
const amount = Math.abs(seconds);
|
|
98
|
-
const [root] = button(back ? 'skip-back' : 'skip-forward', skipGlyph(back, amount));
|
|
99
|
-
root.setAttribute('aria-label', `${back ? 'Back' : 'Forward'} ${amount} seconds`);
|
|
100
|
-
function click() {
|
|
101
|
-
const ranges = video.seekable;
|
|
102
|
-
const end = Number.isFinite(video.duration)
|
|
103
|
-
? video.duration
|
|
104
|
-
: ranges.length > 0
|
|
105
|
-
? ranges.end(ranges.length - 1)
|
|
106
|
-
: video.currentTime;
|
|
107
|
-
video.currentTime = Math.min(end, Math.max(0, video.currentTime + seconds));
|
|
108
|
-
}
|
|
109
|
-
root.addEventListener('click', click);
|
|
110
|
-
return {
|
|
111
|
-
root,
|
|
112
|
-
dispose() {
|
|
113
|
-
root.removeEventListener('click', click);
|
|
114
|
-
},
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
export function pipButton(api, flag) {
|
|
118
|
-
const [root, svg] = button('pip', 'picture-in-picture');
|
|
119
|
-
root.hidden = !api.supported;
|
|
120
|
-
function render() {
|
|
121
|
-
const active = api.active();
|
|
122
|
-
glyph(svg, active ? 'picture-in-picture-exit' : 'picture-in-picture');
|
|
123
|
-
root.setAttribute('aria-label', active ? 'Leave picture in picture' : 'Picture in picture');
|
|
124
|
-
flag('pip', active);
|
|
125
|
-
}
|
|
126
|
-
root.addEventListener('click', api.toggle);
|
|
127
|
-
const off = api.watch(render);
|
|
128
|
-
render();
|
|
129
|
-
return {
|
|
130
|
-
root,
|
|
131
|
-
dispose() {
|
|
132
|
-
root.removeEventListener('click', api.toggle);
|
|
133
|
-
off();
|
|
134
|
-
},
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
export function fullscreenButton(api, flag) {
|
|
138
|
-
const [root, svg] = button('fullscreen', 'fullscreen');
|
|
139
|
-
root.hidden = !api.supported;
|
|
140
|
-
function render() {
|
|
141
|
-
const active = api.active();
|
|
142
|
-
glyph(svg, active ? 'fullscreen-exit' : 'fullscreen');
|
|
143
|
-
root.setAttribute('aria-label', active ? 'Exit fullscreen' : 'Enter fullscreen');
|
|
144
|
-
flag('fullscreen', active);
|
|
145
|
-
}
|
|
146
|
-
root.addEventListener('click', api.toggle);
|
|
147
|
-
const off = api.watch(render);
|
|
148
|
-
render();
|
|
149
|
-
return {
|
|
150
|
-
root,
|
|
151
|
-
dispose() {
|
|
152
|
-
root.removeEventListener('click', api.toggle);
|
|
153
|
-
off();
|
|
154
|
-
},
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
//# sourceMappingURL=buttons.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buttons.js","sourceRoot":"","sources":["../../src/controls/buttons.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAI/B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGzC,sGAAsG;AACtG,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,KAAe;IAClD,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,WAAW,IAAI,SAAS,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,MAAM,CAAC,MAAmB,EAAE,KAAwB,EAAE,EAAc;IAC3E,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5D,OAAO,GAAG,EAAE;QACV,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAuB,EAAE,IAAU;IAC5D,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE3C,SAAS,MAAM;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,MAAM,IAAI,GAAa,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1E,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACpF,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,KAAK;QACZ,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,iEAAiE;YACjE,iEAAiE;YACjE,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;IACzE,MAAM,EAAE,CAAC;IAET,OAAO;QACL,IAAI;QACJ,OAAO;YACL,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,GAAG,EAAE,CAAC;QACR,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAuB,EAAE,IAAU;IAC5D,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAElD,SAAS,MAAM;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;QACjD,MAAM,IAAI,GAAa,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;QAC5F,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,SAAS,KAAK;QACZ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YACpB,oEAAoE;YACpE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC;IAET,OAAO;QACL,IAAI;QACJ,OAAO;YACL,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,GAAG,EAAE,CAAC;QACR,CAAC;KACF,CAAC;AACJ,CAAC;AAED,6FAA6F;AAC7F,SAAS,SAAS,CAAC,IAAa,EAAE,MAAc;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;IACrD,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;IAC/D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,UAAU,CAAC,KAAuB,EAAE,OAAe;IACjE,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACpF,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,UAAU,CAAC,CAAC;IAElF,SAAS,KAAK;QACZ,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;YACzC,CAAC,CAAC,KAAK,CAAC,QAAQ;YAChB,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBACjB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC/B,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;QACxB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO;QACL,IAAI;QACJ,OAAO;YACL,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAqB,EAAE,IAAU;IACzD,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;IAE7B,SAAS,MAAM;QACb,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;QACtE,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAC5F,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC;IAET,OAAO;QACL,IAAI;QACJ,OAAO;YACL,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC9C,GAAG,EAAE,CAAC;QACR,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAe,EAAE,IAAU;IAC1D,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;IAE7B,SAAS,MAAM;QACb,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;QACjF,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,CAAC;IAET,OAAO;QACL,IAAI;QACJ,OAAO;YACL,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC9C,GAAG,EAAE,CAAC;QACR,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* What a control is: a root the bar places, and a teardown. The same shape
|
|
3
|
-
* as a panel, kept separate because a control reads the video and a panel
|
|
4
|
-
* reads an engine namespace.
|
|
5
|
-
*/
|
|
6
|
-
export interface Control {
|
|
7
|
-
readonly root: HTMLElement;
|
|
8
|
-
dispose(): void;
|
|
9
|
-
}
|
|
10
|
-
/** Reports a state the bar carries on its part name: `playing`, `muted`, `fullscreen`. */
|
|
11
|
-
export type Flag = (name: string, on: boolean) => void;
|
|
12
|
-
//# sourceMappingURL=control.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/controls/control.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,0FAA0F;AAC1F,MAAM,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,KAAK,IAAI,CAAC"}
|
package/dist/controls/control.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/controls/control.ts"],"names":[],"mappings":""}
|
package/dist/controls/keys.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The shortcuts, live only while focus is inside the element: Space and `k`
|
|
3
|
-
* toggle play, `m` mutes, `f` toggles fullscreen, the arrows seek by the
|
|
4
|
-
* step. They listen on the host, where every key pressed inside the
|
|
5
|
-
* element arrives, and they stand aside twice. A key a control has already
|
|
6
|
-
* handled arrives with its default prevented, so the seek bar's arrows are
|
|
7
|
-
* not seeking twice. And Space on a button is the button's own activation,
|
|
8
|
-
* so it is left to the button.
|
|
9
|
-
*
|
|
10
|
-
* A click on the video toggles play, the way a viewer expects of a player,
|
|
11
|
-
* and only there: clicks on the bar, the start button and the error screen
|
|
12
|
-
* are theirs.
|
|
13
|
-
*/
|
|
14
|
-
import type { Control } from './control.js';
|
|
15
|
-
import type { Fullscreen } from './fullscreen.js';
|
|
16
|
-
export interface KeysOptions {
|
|
17
|
-
readonly host: HTMLElement;
|
|
18
|
-
readonly stage: HTMLElement;
|
|
19
|
-
/** What sits over the picture and takes its own clicks. */
|
|
20
|
-
readonly own: readonly HTMLElement[];
|
|
21
|
-
readonly video: HTMLVideoElement;
|
|
22
|
-
readonly step: number;
|
|
23
|
-
readonly fullscreen: Fullscreen;
|
|
24
|
-
}
|
|
25
|
-
export declare function keys(options: KeysOptions): Control;
|
|
26
|
-
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/controls/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,GAAG,EAAE,SAAS,WAAW,EAAE,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACjC;AAcD,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAoDlD"}
|
package/dist/controls/keys.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
function toggle(video) {
|
|
2
|
-
if (video.paused)
|
|
3
|
-
video.play().catch(() => undefined);
|
|
4
|
-
else
|
|
5
|
-
video.pause();
|
|
6
|
-
}
|
|
7
|
-
/** The end the playhead can reach: the duration, or the seekable end for live. */
|
|
8
|
-
function end(video) {
|
|
9
|
-
if (Number.isFinite(video.duration))
|
|
10
|
-
return video.duration;
|
|
11
|
-
const ranges = video.seekable;
|
|
12
|
-
return ranges.length > 0 ? ranges.end(ranges.length - 1) : video.currentTime;
|
|
13
|
-
}
|
|
14
|
-
export function keys(options) {
|
|
15
|
-
const { host, stage, own, video } = options;
|
|
16
|
-
function onKey(event) {
|
|
17
|
-
if (event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey)
|
|
18
|
-
return;
|
|
19
|
-
const target = event.composedPath()[0];
|
|
20
|
-
const onButton = target instanceof HTMLButtonElement;
|
|
21
|
-
switch (event.key) {
|
|
22
|
-
case ' ':
|
|
23
|
-
if (onButton)
|
|
24
|
-
return;
|
|
25
|
-
toggle(video);
|
|
26
|
-
break;
|
|
27
|
-
case 'k':
|
|
28
|
-
case 'K':
|
|
29
|
-
toggle(video);
|
|
30
|
-
break;
|
|
31
|
-
case 'm':
|
|
32
|
-
case 'M':
|
|
33
|
-
video.muted = !video.muted;
|
|
34
|
-
break;
|
|
35
|
-
case 'f':
|
|
36
|
-
case 'F':
|
|
37
|
-
options.fullscreen.toggle();
|
|
38
|
-
break;
|
|
39
|
-
case 'ArrowLeft':
|
|
40
|
-
video.currentTime = Math.max(0, video.currentTime - options.step);
|
|
41
|
-
break;
|
|
42
|
-
case 'ArrowRight':
|
|
43
|
-
video.currentTime = Math.min(end(video), video.currentTime + options.step);
|
|
44
|
-
break;
|
|
45
|
-
default:
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
event.preventDefault();
|
|
49
|
-
}
|
|
50
|
-
function onClick(event) {
|
|
51
|
-
const path = event.composedPath();
|
|
52
|
-
if (own.some((node) => path.includes(node)))
|
|
53
|
-
return;
|
|
54
|
-
toggle(video);
|
|
55
|
-
}
|
|
56
|
-
host.addEventListener('keydown', onKey);
|
|
57
|
-
stage.addEventListener('click', onClick);
|
|
58
|
-
return {
|
|
59
|
-
root: stage,
|
|
60
|
-
dispose() {
|
|
61
|
-
host.removeEventListener('keydown', onKey);
|
|
62
|
-
stage.removeEventListener('click', onClick);
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=keys.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/controls/keys.ts"],"names":[],"mappings":"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"}
|
package/dist/controls/live.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { LiveApi } from '../namespaces.js';
|
|
2
|
-
import type { Control } from './control.js';
|
|
3
|
-
export interface LiveButton extends Control {
|
|
4
|
-
attach(live: LiveApi | undefined): void;
|
|
5
|
-
detach(): void;
|
|
6
|
-
/** Whether the stream has a seek bar. Without one the button only says live. */
|
|
7
|
-
seekable(on: boolean): void;
|
|
8
|
-
}
|
|
9
|
-
export declare function liveButton(video: HTMLVideoElement): LiveButton;
|
|
10
|
-
//# sourceMappingURL=live.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/controls/live.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,UAAW,SAAQ,OAAO;IACzC,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACxC,MAAM,IAAI,IAAI,CAAC;IACf,gFAAgF;IAChF,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAgD9D"}
|