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>;
}
