import { Tree } from "./Tree";
interface IScheduler {
    performUpdate: (time: number) => void;
}
export declare enum ESchedulerPriority {
    HIGHEST = 0,
    HIGH = 1,
    MEDIUM = 2,
    LOW = 3,
    LOWEST = 4
}
export declare class GlobalScheduler {
    private schedulers;
    private _cAFID;
    private toRemove;
    private visibilityChangeHandler;
    constructor();
    /**
     * Setup listener for page visibility changes.
     * When tab becomes visible after being hidden, force immediate update.
     * This fixes the issue where tabs opened in background don't render HTML until interaction.
     */
    private setupVisibilityListener;
    /**
     * Handle page visibility changes.
     * When page becomes visible, perform immediate update if scheduler is running.
     */
    private handleVisibilityChange;
    /**
     * Cleanup visibility listener
     */
    private cleanupVisibilityListener;
    getSchedulers(): [IScheduler[], IScheduler[], IScheduler[], IScheduler[], IScheduler[]];
    addScheduler(scheduler: IScheduler, index?: ESchedulerPriority): () => void;
    removeScheduler(scheduler: IScheduler, index?: ESchedulerPriority): void;
    start(): void;
    stop(): void;
    /**
     * Cleanup method to be called when GlobalScheduler is no longer needed.
     * Stops the scheduler and removes event listeners.
     */
    destroy(): void;
    tick(): void;
    performUpdate(): void;
}
export declare const globalScheduler: GlobalScheduler;
export declare const scheduler: GlobalScheduler;
export declare class Scheduler {
    private sheduled;
    private root;
    constructor();
    setRoot(root: Tree): void;
    start(): void;
    stop(): void;
    update(): void;
    iterator(node: Tree): boolean;
    scheduleUpdate(): void;
    performUpdate(): void;
}
export {};
