/**
 * Humanize an Ability-DSL `effect` tree into plain English — the
 * `ability.print()` of the dataset. Output is an *approximation* generated
 * purely from the structured data (no external rules text), ASCII-only, with
 * a fixed clause order: it is pinned byte-for-byte across the TS and Rust
 * ports by the `conformance/effect-translation` corpus, so any phrasing
 * change here is a semantic corpus change (bump `conformance/SPEC_VERSION`).
 *
 * Container nodes (`sequence`, `conditional`, `choice`, `dice-gated`,
 * `dice-pool-allocation`) render block-style with two-space indentation and
 * an ASCII `-> ` arrow; leaves render as single clauses. Unknown leaf types
 * and unrecognized modifier shapes degrade to a deterministic bracketed form
 * (`[the-type]`) rather than failing — coverage improves as authoring does.
 */
import { type Condition } from "./condition.js";
/**
 * Minimal structural view of an effect node. Matches the ability-dsl effect
 * schema: a single effect carries `type` + `target` + `modifier`; containers
 * carry their own shape (`steps`, `options`, `condition`/`effect`, dice
 * fields).
 */
export interface Effect {
    type?: string;
    target?: string;
    modifier?: Record<string, unknown>;
    condition?: Condition;
    effect?: Effect;
    steps?: Effect[];
    options?: (Effect & {
        name?: string;
        requirement?: Record<string, unknown>;
    })[];
    choice_label?: string;
    dice?: string;
    threshold?: number | string;
    comparison?: string;
    on_success?: Effect | null;
    on_fail?: Effect | null;
    pool?: {
        count: number;
        die: string;
    };
    max_activations?: number;
}
/** Ability scope, as carried on enrichment ability entries. */
export interface AbilityScope {
    range?: string;
    duration?: string;
    range_inches?: number;
}
/** Minimal ability view for `describeAbility`. */
export interface AbilityLike {
    name?: string;
    effect?: Effect;
    scope?: AbilityScope;
}
/** Single-clause translation for leaf effects (and inline container forms). */
export declare function describeEffectInline(e: Effect): string;
/**
 * Block translation of an effect tree. Containers expand over multiple lines
 * with two-space indentation; leaves delegate to `describeEffectInline`.
 */
export declare function describeEffect(e: Effect, depth?: number): string;
/** `Scope: aura (6"). Duration: phase.` — empty string when absent. */
export declare function describeScope(s?: AbilityScope): string;
/**
 * Full generated text for an ability: the effect tree plus a trailing scope
 * line. This is the `ability.print()` consumers render when the dataset
 * carries no rules prose.
 */
export declare function describeAbility(a: AbilityLike): string;
//# sourceMappingURL=effect.d.ts.map