import type { Progress } from '../../progress';
export interface SpeedOption {
    label: string;
    value: number;
}
export interface PlayerViewRefs {
    player: HTMLDivElement;
    container: HTMLDivElement;
    playerBtn: HTMLDivElement;
    playerController: HTMLDivElement;
    gestureFlash: HTMLDivElement;
    progress: HTMLDivElement;
    progressWrap: HTMLDivElement;
    progressWrapBuffer: HTMLDivElement;
    progressWrapValue: HTMLDivElement;
    progressDot: HTMLDivElement;
    playerControllerBottom: HTMLDivElement;
    playerControllerBottomRight: HTMLDivElement;
    playerControllerBottomLeft: HTMLDivElement;
    playerControllerBottomPlayBtn: HTMLDivElement;
    /** The `<r-icon>` inside `playerControllerBottomPlayBtn` — exposed separately so
     * `syncPlayButtonState` can swap its `name` directly instead of re-querying the
     * button on every play/pause toggle. */
    playerControllerBottomPlayBtnIcon: HTMLElement;
    playerControllerBottomTimeCurrent: HTMLDivElement;
    playerControllerBottomTimeDuration: HTMLDivElement;
    playerControllerBottomTimeDivide: HTMLDivElement;
    playControllerBottomSubtitle: HTMLElement;
    playControllerBottomClarity: HTMLElement;
    playControllerBottomSpeed: HTMLDivElement;
    playControllerBottomVolumeIcon: HTMLDivElement;
    /** The `<r-icon>` inside `playControllerBottomVolumeIcon` — same reasoning as
     * `playerControllerBottomPlayBtnIcon` above, for the mute/unmute swap. */
    playControllerBottomVolumeIconGlyph: HTMLElement;
    playControllerBottomVolumeProgress: Progress;
    playControllerBottomPip: HTMLDivElement;
    playControllerBottomRemote: HTMLDivElement;
    playControllerBottomRightFullScreen: HTMLDivElement;
    playControllerBottomVolume: HTMLDivElement;
    playControllerBottomSpeedPopover: HTMLElement;
    playerTip: HTMLDivElement;
    playerTipThumbnail: HTMLDivElement;
    playerTipTime: HTMLDivElement;
    playerTipText: HTMLDivElement;
}
/**
 * Builds the player's entire shadow DOM subtree in one pass. Every node is created
 * once via the builder and its reference is captured directly in a local — there is
 * no reuse/hydration path (this is called exactly once, from `r-player`'s
 * constructor, and a Custom Element constructor never runs twice for the same
 * instance), so refs are never re-derived by querying the DOM back.
 */
export declare function ensurePlayerView(input: {
    shadowDom: ShadowRoot;
    speedOptions: SpeedOption[];
    onSpeedChange: (e: Event) => void;
}): PlayerViewRefs;
