UNPKG

@aidenlx/player

Version:

Headless web components that make integrating media on the a web a breeze.

64 lines (63 loc) 1.78 kB
import "../../chunks/chunk.LNH2V2XS.js"; import { debounce, DisposalBin, listen, vdsEvent } from "@vidstack/foundation"; class MediaIdleController { constructor(_host, _mediaStore) { this._host = _host; this._mediaStore = _mediaStore; this._idle = false; this._mediaPaused = false; this._idlingPaused = false; this._disposal = new DisposalBin(); this.delay = 2e3; _host.addController(this); } get paused() { return this._idlingPaused || this._mediaPaused; } set paused(paused) { this._idlingPaused = paused; this._handleIdleChange(); } hostConnected() { this._disposal.add(this._mediaStore.paused.subscribe(($paused) => { this._mediaPaused = $paused; this._handleIdleChange(); })); const startIdleTimerEvents = ["pointerdown", "pointermove", "focus", "keydown"]; startIdleTimerEvents.forEach((eventType) => { const off = listen(this._host, eventType, debounce(this._handleIdleChange.bind(this), 250, true)); this._disposal.add(off); }); } hostDisconnected() { this._disposal.empty(); this._stopIdleTimer(); } _handleIdleChange() { if (this.paused) { this._stopIdleTimer(); } else { this._startIdleTimer(); } } _startIdleTimer() { this._stopIdleTimer(); this._idleTimeout = window.setTimeout(() => { this._dispatchIdleChange(!this.paused); }, this.delay); } _stopIdleTimer() { window.clearTimeout(this._idleTimeout); this._idleTimeout = void 0; this._dispatchIdleChange(false); } _dispatchIdleChange(isIdle) { if (this._idle !== isIdle) { this._host.dispatchEvent(vdsEvent("vds-idle-change", { detail: isIdle })); this._idle = isIdle; } } } export { MediaIdleController };