import { default as Plugin } from './Plugins/Base';
import { default as shaka } from 'shaka-player/dist/shaka-player.ui';
import { default as Persister, PersisterOptions } from './util/Persister';
export declare const playerEvents: readonly ["firstPlay", "play", "playing", "pause", "ended", "seeking", "seeked", "volumeChange", "unmute", "mute", "acknowledge", "playAttempt", "fullScreenIn", "fullScreenOut", "timeUpdate", "error", "adStart", "adComplete", "adAllCompleted", "adClick", "adSkip", "adError", "adBlockDetector"];
export type PlayerEvent = (typeof playerEvents)[number] | string;
export type MediaTailor = {
    type: 'media-tailor';
    url: string;
    assetId?: string;
    podDuration?: string;
};
export type ImaDai = {
    adTagParameters?: string;
    apiKey?: string;
    authToken?: string;
    format?: 'hls' | 'dash';
    omidAccessModeRules?: string;
    streamActivityMonitorId?: string;
};
export type ImaDaiVod = ImaDai & {
    type: 'ima-dai';
    stream: 'vod';
    contentSourceId: string;
    videoId: string;
};
export type ImaDaiLive = ImaDai & {
    type: 'ima-dai';
    stream: 'live';
    assetKey: string;
};
export type AdaptiveStreamSource = {
    type: 'm3u8' | 'hls' | 'mpd' | 'dash' | 'application/dash+xml' | 'application/x-mpegurl';
    url: string;
};
export type PlainSource = string;
export type ProgressiveSource = {
    type: 'multi-progressive';
    srcSet: SrcSet[];
};
export type SrcSet = {
    url: string;
    type: string;
    label: string;
    active?: boolean;
};
export type Source = PlainSource | AdaptiveStreamSource | ProgressiveSource | MediaTailor | ImaDaiVod | ImaDaiLive;
export type SetSource = {
    url: string;
    type: string;
    label: string;
    active?: boolean;
} | {
    url: string;
    type: null;
} | {
    url: string;
    type: string;
};
export type Options = Omit<UIConfiguration, 'volumeBarColors' | 'seekBarColors'> & {
    autoplay?: boolean;
    debug?: boolean;
    height?: number;
    language?: string;
    muted?: boolean;
    persister?: PersisterOptions;
    playsInline?: boolean;
    src: Source | Source[];
    width?: number;
};
interface UISeekBarColors {
    adBreaks: string;
    base: string;
    buffered: string;
    played: string;
}
interface UIVolumeBarColors {
    base: string;
    level: string;
}
type TrackLabelFormat = 'LANGUAGE' | 'ROLE' | 'LANGUAGE_ROLE' | 'LABEL';
interface UIConfiguration {
    adStatisticsList?: string[];
    addBigPlayButton?: boolean;
    addSeekBar?: boolean;
    castAndroidReceiverCompatible?: boolean;
    castReceiverAppId?: string;
    clearBufferOnQualityChange?: boolean;
    contextMenuElements?: string[];
    controlPanelElements?: string[];
    customContextMenu?: boolean;
    defaultVrProjectionMode?: 'equirectangular' | 'cubemap';
    displayInVrMode?: boolean;
    doubleClickForFullscreen?: boolean;
    enableFullscreenOnRotation?: boolean;
    enableKeyboardPlaybackControls?: boolean;
    enableTooltips?: boolean;
    fadeDelay?: number;
    fastForwardRates?: number[];
    forceLandscapeOnFullscreen?: boolean;
    fullScreenElement?: HTMLElement;
    keyboardLargeSeekDistance?: number;
    keyboardSeekDistance?: number;
    overflowMenuButtons?: string[];
    playbackRates?: number[];
    preferDocumentPictureInPicture?: boolean;
    refreshTickInSeconds?: number;
    rewindRates?: number[];
    seekBarColors: UISeekBarColors;
    seekOnTaps?: boolean;
    setupMediaSession?: boolean;
    showAudioChannelCountVariants?: boolean;
    showUnbufferedStart?: boolean;
    singleClickForPlayAndPause?: boolean;
    statisticsList?: string[];
    tapSeekDistance?: number;
    textTrackLabelFormat?: TrackLabelFormat;
    trackLabelFormat?: TrackLabelFormat;
    volumeBarColors: UIVolumeBarColors;
}
export declare const multiProgressiveTrack: Map<shaka.ui.Controls, ProgressiveSource>;
declare class Player {
    #private;
    elementId: string;
    basePlayer: shaka.Player;
    overlay: shaka.ui.Overlay;
    controls: shaka.ui.Controls;
    localization: shaka.ui.Localization | null;
    container: HTMLElement;
    videoElement: HTMLVideoElement;
    options: Options;
    uiConfig: UIConfiguration;
    language: string;
    constructor(elementId: string, options: Options);
    initialize(): Promise<void>;
    onError(error: any, isShaka?: boolean): Promise<void>;
    /**
     * Loads a plugin into the player
     * @param plugin
     * @param options
     */
    loadPlugin<P extends Plugin>(Plugin: new (player: this) => P): P;
    loadPlugin<P extends Plugin, O>(Plugin: new (player: this, options: O) => P, options: O): P;
    /**
     * Returns a loaded plugin instance
     * @param PluginClass
     * @returns
     */
    getPlugin<P extends Plugin, O>(PluginClass: new (player: this, options: O) => P): P;
    play(): Promise<void>;
    pause(): void;
    volume(volume: number): void;
    mute(): void;
    unmute(): void;
    on: {
        (event: string, listener: import('./util/EventEmitter').Listener): () => void;
        (event: string[], listener: import('./util/EventEmitter').Listener): (() => void)[];
    };
    once: {
        (event: string, listener: import('./util/EventEmitter').Listener): () => void;
        (event: string[], listener: import('./util/EventEmitter').Listener): (() => void)[];
    };
    all: (listener: import('./util/EventEmitter').Listener) => void;
    removeListener: (event: string | string[], listener: import('./util/EventEmitter').Listener) => void;
    off: (event: string | string[], listener: import('./util/EventEmitter').Listener) => void;
    emit: (event: string, ...args: any[]) => void;
    get persister(): Persister;
    get currentSourceIndex(): number;
}
export default Player;
