import type { FileChange } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
/** Props for {@link FileChangesView}. */
export interface FileChangesViewProps {
    /**
     * Net file changes to render, typically from {@link useSessionFileChanges}.
     * One entry per changed file.
     */
    readonly changes: readonly FileChange[];
    /** Additional CSS classes for the root container. */
    readonly className?: string;
}
/**
 * Consolidated, GitHub-style view of the files an agent changed: a summary
 * bar, a file selector (when more than one file changed), and the unified diff
 * for the selected file.
 *
 * Renders the runner's authoritative {@link FileChange} captures directly
 * (proto-first). Whole-file captures (native) become a true before/after diff;
 * hunk-only captures (Cursor today) render their unified diff; offloaded bodies
 * are fetched lazily only when their file is opened (see {@link FileChangeDiff}).
 *
 * Zero Console dependencies — safe for platform builder embedding.
 *
 * @example
 * ```tsx
 * const { fileChanges } = useSessionFileChanges(allExecutions);
 * <FileChangesView changes={fileChanges} />
 * ```
 */
export declare function FileChangesView({ changes, className }: FileChangesViewProps): import("react/jsx-runtime").JSX.Element | null;
/** Props for {@link FileChangeDiff}. */
export interface FileChangeDiffProps {
    /** The single file change to render. */
    readonly change: FileChange;
    /** Additional CSS classes for the root container. */
    readonly className?: string;
    /**
     * Optional class applied to the scrolling diff body (the `DiffViewer` table or
     * unified-diff `<pre>`). A raw height cap with no reveal control; prefer
     * {@link bounded} for the consistent clamp-and-reveal used across tool cards.
     */
    readonly bodyClassName?: string;
    /**
     * When `true`, the diff body is wrapped in the shared {@link BoundedContent}
     * primitive: clamped to the standard preview height with a bottom fade and an
     * in-place "Show more" / "Show less", identical to the always-visible
     * edit/write diff body in the timeline. Defaults to `false` so the dedicated
     * Changes view ({@link FileChangesView}) renders the full diff; the approval
     * gate opts in so a large change cannot push the decision buttons off-screen
     * while still letting the reviewer expand the whole diff in place.
     */
    readonly bounded?: boolean;
    /**
     * Whether to render the filename header (the `FilePathLink` + any rename
     * prefix). Defaults to `true`. Set to `false` where an ancestor already names
     * the file — the approval gate header, or a tool-call row — so the diff is not
     * captioned with a path the user just read; the `+N -M` stats still render.
     */
    readonly showFileName?: boolean;
    /**
     * Whether to render the `+N -M` summary. Defaults to `true`. Set to `false`
     * where an ancestor row already shows the result summary (a tool-call row) so
     * the body does not repeat the counts. Orthogonal to {@link showFileName}: the
     * approval gate suppresses the name but keeps the stats.
     */
    readonly showStats?: boolean;
}
/**
 * Renders the diff for a single {@link FileChange}, adapting to how completely
 * the runner captured it:
 *
 * - **Whole-file** (native): a true before/after diff via {@link DiffViewer}.
 *   Offloaded bodies are fetched lazily; loading, error, and too-large
 *   (server-truncated) states are surfaced honestly.
 * - **Hunk-only** (Cursor today): the captured unified diff, labeled as such.
 * - **Binary**: a "binary file changed" notice instead of a text diff.
 *
 * Importable on its own by platform builders composing custom change UIs.
 */
export declare function FileChangeDiff({ change, className, bodyClassName, bounded, showFileName, showStats, }: FileChangeDiffProps): import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=FileChangesView.d.ts.map