import { type ComponentPropsWithoutRef, type ReactNode } from "react";
/** Built-in kinds. Widened with `(string & {})` so consumers can introduce
 *  their own — supply a matching icon via `kindIcons` and target the
 *  generated `ods-trace-step--{kind}` class in their own CSS. */
export type TraceStepKind = "thought" | "tool" | "input" | "output" | "error" | (string & {});
/** Built-in statuses. Also widened — custom statuses get
 *  `ods-trace-step--status-{value}` for CSS targeting. */
export type TraceStepStatus = "running" | "success" | "failed" | "pending" | "idle" | (string & {});
type DivPropsBase = Omit<ComponentPropsWithoutRef<"div">, "onChange" | "children" | "title" | "defaultValue">;
export interface TraceStepProps extends DivPropsBase {
    /** Numeric step index. */
    index?: number;
    /** Kind of step — drives the icon + color. */
    kind?: TraceStepKind;
    /** Status of the step. */
    status?: TraceStepStatus;
    /** Short label, e.g. "search_web" or "Thinking…" */
    title: ReactNode;
    /** Tool name when kind="tool" (rendered as a chip on the right). */
    tool?: string;
    /** Wall-clock duration string. */
    duration?: string;
    /** Token count or cost annotation. */
    tokens?: number;
    /** Body content — collapsed by default. */
    children?: ReactNode;
    /** Initial open state (uncontrolled). */
    defaultOpen?: boolean;
    /** Controlled open state. When provided, `onOpenChange` must update it. */
    open?: boolean;
    /** Fires whenever the user toggles the head (open ↔ closed). */
    onOpenChange?: (open: boolean) => void;
    /** Hide the connecting vertical rail at the left. */
    hideRail?: boolean;
    /** Last step in a chain (skips the trailing rail). */
    isLast?: boolean;
    /**
     * One-off icon override for THIS step. Wins over `kindIcons`. Useful
     * when a single step needs a brand glyph (e.g. "Slack" instead of
     * the generic tool icon).
     */
    icon?: ReactNode;
    /**
     * Per-kind icon overrides — including custom kinds. Built-ins not
     * present in this map fall back to the default glyph.
     *
     *   <TraceStep kind="my-custom" kindIcons={{ "my-custom": <X /> }} ... />
     */
    kindIcons?: Partial<Record<string, ReactNode>>;
    /**
     * Disable the open/close height animation (useful for SSR snapshots,
     * very long trace lists, or jurisdictions where reduced-motion is
     * enforced upstream).
     */
    disableAnimation?: boolean;
}
export declare const TraceStep: import("react").ForwardRefExoticComponent<TraceStepProps & import("react").RefAttributes<HTMLDivElement>>;
export {};
//# sourceMappingURL=TraceStep.d.ts.map