UNPKG

@aidenlx/player

Version:

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

71 lines (70 loc) 2.17 kB
import "../../../chunks/chunk.S6UZ27SZ.js"; import { DisposalBin, isFunction, isNil, listen, LogDispatcher, noop, redispatchEvent, vdsEvent } from "@vidstack/foundation"; class VideoPresentationController { constructor(_host) { this._host = _host; this._logger = true ? new LogDispatcher(this._host) : void 0; this._listenerDisposal = new DisposalBin(); const firstUpdated = _host.firstUpdated; _host.firstUpdated = (changedProperties) => { firstUpdated?.call(_host, changedProperties); this._listenerDisposal.add(this._addPresentationModeChangeEventListener()); }; _host.addController({ hostDisconnected: this._handleHostDisconnected.bind(this) }); } _handleHostDisconnected() { this.setPresentationMode("inline"); this._listenerDisposal.empty(); } get presentationMode() { return this._host.videoElement?.webkitPresentationMode; } get isInlineMode() { return this.presentationMode === "inline"; } get isPictureInPictureMode() { return this.presentationMode === "inline"; } get isFullscreenMode() { return this.presentationMode === "fullscreen"; } get isSupported() { return isFunction(this._host.videoElement?.webkitSetPresentationMode); } setPresentationMode(mode) { this._host.videoElement?.webkitSetPresentationMode?.(mode); } _addPresentationModeChangeEventListener() { if (!this.isSupported || isNil(this._host.videoElement)) return noop; if (true) { this._logger?.debug("adding `webkitpresentationmodechanged` listener"); } return listen(this._host.videoElement, "webkitpresentationmodechanged", this._handlePresentationModeChange.bind(this)); } _handlePresentationModeChange(event) { if (true) { this._logger?.infoGroup("presentation mode change").labelledLog("Event", event).dispatch(); } redispatchEvent(this._host, event); this._host.dispatchEvent(vdsEvent("vds-video-presentation-change", { detail: this.presentationMode, triggerEvent: event })); } } export { VideoPresentationController }; //# sourceMappingURL=VideoPresentationController.js.map