import type { ChoreoStep, PersonControls, PersonPose, PoseOptions } from "./animationHelper";
/** Context passed to choreography runtime (conditions, scoring, etc.). */
export type RunContext = {
    score?: number;
    [k: string]: unknown;
};
type InternalStep = {
    type: "pose";
    pose: PersonPose;
    holdMs?: number;
    options?: PoseOptions;
} | {
    type: "wait";
    ms: number;
} | {
    type: "label";
    name: string;
} | {
    type: "goto";
    name: string;
    when?: (ctx: RunContext) => boolean;
};
/**
 * Builder-pattern DSL for choreography sequences.
 *
 * @example
 * ```ts
 * seq()
 *   .enterFromLeft(0.6)
 *   .happy(300)
 *   .waveHand(600)
 *   .celebrate(500)
 * ```
 */
export declare class ChoreoBuilder {
    private steps;
    private labels;
    private loopCount;
    pose(pose: PersonPose, holdMs?: number, options?: PoseOptions): this;
    wait(ms: number): this;
    tempo(multiplier: number): this;
    repeat(times: number): this;
    loop(times: number | typeof Infinity): this;
    label(name: string): this;
    goto(name: string): this;
    gotoIf(name: string, when: (ctx: RunContext) => boolean): this;
    idle(ms?: number): this;
    enterFromLeft(duration?: number): this;
    enterFromRight(duration?: number): this;
    exitLeft(duration?: number): this;
    exitRight(duration?: number): this;
    hideDown(duration?: number): this;
    happy(ms?: number): this;
    angry(ms?: number): this;
    disappointed(ms?: number): this;
    swearing(ms?: number): this;
    shouting(ms?: number): this;
    rock(ms?: number): this;
    danceA(ms?: number): this;
    danceB(ms?: number): this;
    danceC(ms?: number): this;
    waveHand(ms?: number): this;
    facepalm(ms?: number): this;
    shrug(ms?: number): this;
    nodYes(ms?: number): this;
    shakeNo(ms?: number): this;
    pointRight(ms?: number): this;
    leanBack(ms?: number): this;
    jump(ms?: number): this;
    spin(ms?: number): this;
    celebrate(ms?: number): this;
    raiseCard(score?: number | string, holdMs?: number, duration?: number): this;
    build(): InternalStep[];
    getLoop(): number | typeof Infinity | undefined;
}
/** Create a new ChoreoBuilder. */
export declare const seq: () => ChoreoBuilder;
/** Compile builder or steps into flat ChoreoStep[] (resolving gotos). */
export declare function compile(builderOrSteps: ChoreoBuilder | ChoreoStep[] | InternalStep[], ctx?: RunContext): ChoreoStep[];
/** Run compiled choreography on a single actor (with optional looping). */
export declare function runSeq(fx: PersonControls, builderOrSteps: ChoreoBuilder | ChoreoStep[] | InternalStep[], ctx?: RunContext): Promise<void>;
/** Wave pattern: stagger actors left→right. */
export declare function runWave(actors: PersonControls[], choreo: ChoreoBuilder | ChoreoStep[] | InternalStep[], staggerMs?: number, ctx?: RunContext): Promise<void>;
/** Cannon pattern: wave left→right, then right→left. */
export declare function runCannon(actors: PersonControls[], choreo: ChoreoBuilder | ChoreoStep[] | InternalStep[], staggerMs?: number, ctx?: RunContext): Promise<void>;
/** Assign programs to actors round-robin. */
export declare function runRounds(actors: PersonControls[], programs: Array<ChoreoBuilder | ChoreoStep[] | InternalStep[]>, staggerMs?: number, ctx?: RunContext): Promise<void>;
export {};
