import { Task } from '@lit/task';
import { LitElement, PropertyValueMap } from 'lit';
export declare const shallowGetTimegroups: (element: Element, groups?: EFTimegroup[]) => EFTimegroup[];
declare const EFTimegroup_base: (new (...args: any[]) => import('./EFTemporal.js').TemporalMixinInterface) & typeof LitElement;
export declare class EFTimegroup extends EFTimegroup_base {
    #private;
    static styles: import('lit').CSSResult;
    _timeGroupContext: this;
    mode: "fit" | "fixed" | "sequence" | "contain";
    overlapMs: number;
    fit: "none" | "contain" | "cover";
    set currentTime(time: number);
    get currentTime(): number;
    get currentTimeMs(): number;
    set currentTimeMs(ms: number);
    /**
     * Determines if this is a root timegroup (no parent timegroups)
     */
    get isRootTimegroup(): boolean;
    render(): import('lit-html').TemplateResult<1>;
    maybeLoadTimeFromLocalStorage(): number;
    connectedCallback(): void;
    disconnectedCallback(): void;
    get storageKey(): string;
    get intrinsicDurationMs(): number | undefined;
    get hasOwnDuration(): boolean;
    get durationMs(): number;
    getPendingFrameTasks(signal?: AbortSignal): Promise<Task<readonly unknown[], unknown>[]>;
    waitForNestedUpdates(signal?: AbortSignal): Promise<void>;
    waitForFrameTasks(signal?: AbortSignal): Promise<void>;
    /**
     * Wait for all media elements to load their initial segments.
     * Ideally we would only need the extracted index json data, but
     * that caused issues with constructing audio data. We had negative durations
     * in calculations and it was not clear why.
     */
    waitForMediaDurations(): Promise<void>;
    get childTemporals(): import('./EFTemporal.js').TemporalMixinInterface[];
    protected updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void;
    private updateAnimations;
    get contextProvider(): import('../gui/ContextMixin.js').ContextMixinInterface | null;
    /**
     * Returns true if the timegroup should be wrapped with a workbench.
     *
     * A timegroup should be wrapped with a workbench if it is the root-most timegroup
     * and EF_INTERACTIVE is true.
     *
     * If the timegroup is already wrappedin a context provider like ef-preview,
     * it should NOT be wrapped in a workbench.
     */
    shouldWrapWithWorkbench(): boolean;
    wrapWithWorkbench(): void;
    get efElements(): Element[];
    renderAudio(fromMs: number, toMs: number): Promise<AudioBuffer>;
    /**
     * TEMPORARY TEST METHOD: Renders audio and immediately plays it back
     * Usage: timegroup.testPlayAudio(0, 5000) // Play first 5 seconds
     */
    testPlayAudio(fromMs: number, toMs: number): Promise<void>;
    loadMd5Sums(): Promise<void>;
    frameTask: Task<readonly [number, number], void>;
    seekTask: Task<readonly [number], void>;
}
declare global {
    interface HTMLElementTagNameMap {
        "ef-timegroup": EFTimegroup & Element;
    }
}
export {};
