import type { Scene } from 'phaser';
import type { JSX } from 'react';
import type { GameObjectNode } from '../types';
/**
 * Stored data for a single effect slot.
 */
interface EffectRecord {
    deps: unknown[] | undefined;
    cleanup: (() => void) | void;
}
/**
 * An effect queued during render, to be flushed after reconciliation.
 */
interface PendingEffect {
    key: number;
    callback: () => (() => void) | void;
    deps: unknown[] | undefined;
}
/**
 * Render context for tracking state and reconciliation.
 */
export interface RenderContext {
    state: Map<number, unknown>;
    effects: Map<number, EffectRecord>;
    pendingEffects: PendingEffect[];
    scene: Scene | null;
    componentFn: ((...args: unknown[]) => JSX.Element) | null;
    componentProps: Record<string, unknown> | null;
    gameObjectTree: GameObjectNode | null;
    getNextStateIndex: () => number;
    resetStateIndex: () => void;
    getNextEffectIndex: () => number;
    resetEffectIndex: () => void;
    flushEffects: () => void;
    rerender: () => void;
}
export declare function getRenderContext(): RenderContext;
export declare function setRenderContext(context: RenderContext): void;
export declare function createRenderContext(element?: JSX.Element | null, scene?: Scene | null, componentFn?: ((...args: unknown[]) => JSX.Element) | null, componentProps?: Record<string, unknown> | null): RenderContext;
export declare function resetRenderContext(): void;
export {};
//# sourceMappingURL=context.d.ts.map