UNPKG

@cradokski/fullscreen

Version:

An Angular service that toggles the browser between Fullscreen and normal view. Includes optional **double-tap support** to prevent accidental toggling — useful on mobile/touch devices.

81 lines (76 loc) 2.57 kB
import * as i0 from '@angular/core'; import { Injectable } from '@angular/core'; class FullScreenService { constructor() { this.isFullscreen = false; this.lastTapTime = null; } enterFullscreen() { if (document.documentElement?.requestFullscreen) { document.documentElement.requestFullscreen(); } } exitFullscreen() { if (document?.fullscreenElement) { document.exitFullscreen(); } } fullscreen() { if (this.isFullscreen) { this.isFullscreen = false; this.exitFullscreen(); } else { this.isFullscreen = true; this.enterFullscreen(); } } /** * Toggle fullscreen with optional double-tap logic. * * @param options Optional. If requireDoubleTap is true, two quick calls are required. * @returns True if fullscreen is now active, false otherwise. */ browserFsToggle(options) { const requireDoubleTap = options?.requireDoubleTap ?? false; const delayMs = options?.delayMs ?? 300; if (!requireDoubleTap) { this.fullscreen(); return this.isFullscreen; } const now = Date.now(); if (this.lastTapTime && now - this.lastTapTime < delayMs) { this.lastTapTime = null; this.fullscreen(); return this.isFullscreen; } else { this.lastTapTime = now; return this.isFullscreen; // unchanged } } /** * True if the document is currently in fullscreen mode. * * @returns True if fullscreen is active, false otherwise. */ isFullscreenActive() { return this.isFullscreen; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FullScreenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FullScreenService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FullScreenService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [] }); /* * Public API Surface of fullscreen */ /** * Generated bundle index. Do not edit. */ export { FullScreenService }; //# sourceMappingURL=cradokski-fullscreen.mjs.map