import { default as React } from 'react';
import { CharacterRegistry } from './puppetCharacter';
import { NicePuppetShowDocument, PuppetScene, SceneBackground, SceneCamera as _SceneCamera, CharacterRuntimeState as _CharacterRuntimeState, ActiveEffect as _ActiveEffect } from './puppetShowTypes';

export interface PuppetStageContextValue {
    document: NicePuppetShowDocument | null;
    currentScene: PuppetScene | null;
    currentSceneIndex: number;
    camera: _SceneCamera;
    characterStates: Map<string, _CharacterRuntimeState>;
    activeEffects: _ActiveEffect[];
    stageSize: {
        width: number;
        height: number;
    };
    scale: number;
    setCamera: (camera: Partial<_SceneCamera>) => void;
    updateCharacterState: (instanceId: string, state: Partial<_CharacterRuntimeState>) => void;
}
export declare function usePuppetStage(): PuppetStageContextValue;
export interface BackgroundRendererProps {
    background: SceneBackground;
    width: number;
    height: number;
}
export declare function BackgroundRenderer({ background, width, height, }: BackgroundRendererProps): React.ReactElement;
export interface EffectRendererProps {
    effects: _ActiveEffect[];
    width: number;
    height: number;
}
export declare function EffectRenderer({ effects, width, height, }: EffectRendererProps): React.ReactElement | null;
export interface PuppetStageProps {
    document: NicePuppetShowDocument;
    scene: PuppetScene;
    characterStates: Map<string, _CharacterRuntimeState>;
    camera: _SceneCamera;
    activeEffects: _ActiveEffect[];
    characterRegistry: CharacterRegistry;
    className?: string;
    style?: React.CSSProperties;
    onCharacterClick?: (instanceId: string) => void;
}
export declare function PuppetStage({ document, scene, characterStates, camera, activeEffects, characterRegistry: _characterRegistry, className, style, onCharacterClick, }: PuppetStageProps): React.ReactElement;
export interface DialogueBoxProps {
    text: string;
    speakerName?: string;
    style?: {
        position?: 'bubble' | 'bottom' | 'top' | 'center';
        backgroundColor?: string;
        textColor?: string;
        fontSize?: number;
        maxWidth?: number;
    };
    targetPosition?: {
        x: number;
        y: number;
    };
    visible: boolean;
    typewriterProgress?: number;
}
export declare function DialogueBox({ text, speakerName, style, targetPosition, visible, typewriterProgress, }: DialogueBoxProps): React.ReactElement | null;
export declare function useCameraShake(intensity: number, duration: number, active: boolean): {
    offsetX: number;
    offsetY: number;
};
//# sourceMappingURL=puppetStage.d.ts.map