@cradokski/fullscreen
Version:
An Angular service and **directives** that provide **fullscreen control**, **reactive state**, and **template-friendly utilities**.
51 lines (50 loc) • 2.13 kB
TypeScript
import { NgZone } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import * as i0 from "@angular/core";
export type FullscreenStatus = 'entered' | 'exited';
export type FullscreenCallback = (isFullscreen: boolean, element: Element | null) => void;
/** Reactive fullscreen state for templates and directives */
export interface FullscreenState {
/** Whether any element is currently fullscreen */
active: boolean;
/** Which element is fullscreen (if any) */
element: Element | null;
}
export declare class FullScreenService {
private zone;
/** Internal flag for synchronous API compatibility */
private isFullscreenFlag;
/** Timestamp for double-tap detection */
private lastTapTime;
/** For testing: allows mocking time */
private nowFn;
/** RxJS state observable for template bindings */
readonly fullscreen$: BehaviorSubject<FullscreenState>;
constructor(zone: NgZone);
/** Returns the currently fullscreen element (cross-browser) */
private getFullscreenElement;
/** Request fullscreen on a specific element (default: <html>) */
private enterFullscreenElement;
/** Exit fullscreen (cross-browser) */
private exitFullscreenElement;
/** Sync check used by directives and consumers */
isFullscreenActive(): boolean;
enterFullscreen(element?: HTMLElement): void;
exitFullscreen(): void;
toggleFullscreen(element?: HTMLElement): Promise<FullscreenStatus>;
ensureFullscreen(element?: HTMLElement): Promise<FullscreenStatus>;
ensureExitedFullscreen(): Promise<FullscreenStatus>;
browserFsToggle(options?: {
requireDoubleTap?: boolean;
delayMs?: number;
}): boolean;
browserFsToggleAsync(options?: {
requireDoubleTap?: boolean;
delayMs?: number;
}): Promise<boolean>;
/** Subscribe to fullscreen changes; returns unwatch() */
watchFullscreen(callback: FullscreenCallback): () => void;
private handleFullscreenEvent;
static ɵfac: i0.ɵɵFactoryDeclaration<FullScreenService, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<FullScreenService>;
}