/**
 * PlayerControllerHost — Lit ReactiveController wrapping the headless PlayerController.
 * Direct port of usePlayerController.ts from player-react.
 */
import type { ReactiveController, ReactiveControllerHost } from "lit";
import { PlayerController, type PlayerControllerConfig, type PlayerState, type StreamState, type StreamInfo, type PlaybackQuality, type ContentEndpoints, type ContentMetadata, type ClassifiedError, type TranslateFn, type I18nConfig, type ThumbnailCue, type LoadingPosterInfo } from "@livepeer-frameworks/player-core";
export interface PlayerControllerHostState {
    state: PlayerState;
    streamState: StreamState | null;
    endpoints: ContentEndpoints | null;
    metadata: ContentMetadata | null;
    videoElement: HTMLVideoElement | null;
    currentTime: number;
    duration: number;
    isPlaying: boolean;
    isPaused: boolean;
    isBuffering: boolean;
    isMuted: boolean;
    volume: number;
    error: string | null;
    errorDetails: ClassifiedError["details"] | null;
    isPassiveError: boolean;
    hasPlaybackStarted: boolean;
    isHoldingSpeed: boolean;
    holdSpeed: number;
    isHovering: boolean;
    shouldShowControls: boolean;
    isLoopEnabled: boolean;
    isFullscreen: boolean;
    isPiPActive: boolean;
    isEffectivelyLive: boolean;
    shouldShowIdleScreen: boolean;
    currentPlayerInfo: {
        name: string;
        shortname: string;
    } | null;
    currentSourceInfo: {
        url: string;
        type: string;
    } | null;
    playbackQuality: PlaybackQuality | null;
    subtitlesEnabled: boolean;
    qualities: Array<{
        id: string;
        label: string;
        bitrate?: number;
        width?: number;
        height?: number;
        isAuto?: boolean;
        active?: boolean;
    }>;
    textTracks: Array<{
        id: string;
        label: string;
        lang?: string;
        active: boolean;
    }>;
    streamInfo: StreamInfo | null;
    toast: {
        message: string;
        timestamp: number;
    } | null;
    thumbnailCues: ThumbnailCue[];
    loadingPoster: LoadingPosterInfo | null;
    shouldShowLoadingPoster: boolean;
}
type HostElement = ReactiveControllerHost & HTMLElement;
export declare class PlayerControllerHost implements ReactiveController {
    host: HostElement;
    private controller;
    private unsubs;
    private currentConfig;
    s: PlayerControllerHostState;
    /** Translation function, updated when locale changes. */
    t: TranslateFn;
    constructor(host: HostElement);
    /** Rebuild the translator when locale or custom translations change. */
    updateTranslator(config: I18nConfig): void;
    configure(config: PlayerControllerConfig): void;
    attach(container: HTMLDivElement): Promise<void>;
    hostConnected(): void;
    hostDisconnected(): void;
    private teardown;
    private update;
    private syncState;
    private subscribeToEvents;
    private dispatchEvent;
    play(): Promise<void>;
    pause(): void;
    togglePlay(): void;
    seek(time: number): void;
    seekBy(delta: number): void;
    jumpToLive(): void;
    setVolume(volume: number): void;
    toggleMute(): void;
    toggleLoop(): void;
    toggleFullscreen(): Promise<void>;
    togglePiP(): Promise<void>;
    toggleSubtitles(): void;
    clearError(): void;
    dismissToast(): void;
    retry(): Promise<void>;
    tryNextSource(): Promise<void>;
    canAttemptFallback(): boolean;
    reload(): Promise<void>;
    getQualities(): {
        id: string;
        label: string;
        bitrate?: number;
        width?: number;
        height?: number;
        isAuto?: boolean;
        active?: boolean;
    }[];
    selectQuality(id: string): void;
    getTextTracks(): {
        id: string;
        label: string;
        lang?: string;
        active: boolean;
    }[];
    selectTextTrack(id: string | null): void;
    setPlaybackRate(rate: number): void;
    getSeekableStart(): number;
    getLiveEdge(): number;
    canSeekStream(): boolean;
    getBufferedRanges(): TimeRanges | null;
    getStats(): Promise<unknown>;
    handleMouseEnter(): void;
    handleMouseLeave(): void;
    handleMouseMove(): void;
    handleTouchStart(): void;
    setDevModeOptions(options: {
        forcePlayer?: string;
        forceType?: string;
        forceSource?: number;
        playbackMode?: "auto" | "low-latency" | "quality" | "vod";
    }): Promise<void>;
    getController(): PlayerController | null;
}
export {};
