import { type ReactNode } from 'react';
import type { BaseProps } from '@astryxdesign/core';
/** Severity of one log entry. */
export type LogStreamLevel = 'info' | 'warn' | 'error' | 'debug';
/** One row in the stream; all strings are pre-formatted by the caller. */
export interface LogEntry {
    /** Stable unique key, e.g. `"req-1042"`. */
    id: string;
    /** Pre-formatted timestamp, e.g. `"14:02:11.482"`. Deterministic. */
    timestamp: string;
    level: LogStreamLevel;
    message: string;
    /** Emitting service/component, e.g. `"api-gateway"`. */
    source?: string;
    /** When set, the row becomes a disclosure button for this panel. */
    detail?: ReactNode;
}
export interface LogStreamProps extends Omit<BaseProps<HTMLDivElement>, 'children'> {
    /** Ref forwarded to the root element */
    ref?: React.Ref<HTMLDivElement>;
    /** Log rows, oldest first (live tails append at the end). */
    entries: LogEntry[];
    /**
     * Visual treatment. `'terminal'` renders dark chrome regardless of the
     * active color scheme (terminal output is a brand surface, like a real
     * shell — light-mode terminals read as broken builds).
     * @default 'default'
     */
    variant?: 'default' | 'terminal';
    /**
     * Pin scroll to the newest entry as entries append. Unpins when the user
     * scrolls up; re-pin via the "Jump to latest" affordance. Controlled when
     * provided; uncontrolled (initially unpinned) otherwise.
     */
    isFollowing?: boolean;
    /** Called when follow-pinning changes (user scroll-up or "Jump to latest"). */
    onFollowChange?: (following: boolean) => void;
    /** Max height of the scroll area before it scrolls. */
    maxHeight?: number | string;
    /** Show the timestamp column. @default true */
    hasTimestamps?: boolean;
    /** Accessible label for the log region. @default 'Log stream' */
    label?: string;
    /** Escape hatch: fully replace the default row for an entry. */
    renderEntry?: (entry: LogEntry) => ReactNode;
}
/**
 * Experimental streaming log viewer: mono grid rows
 * (timestamp | level | source | message) with token-derived level accents,
 * expandable per-row detail panels, follow-scroll live tailing with a
 * "Jump to latest" affordance, and an always-dark terminal variant.
 *
 * Appended rows fade in via `@starting-style` (instant under
 * prefers-reduced-motion). Follow pinning uses a scroll listener — no
 * polling; rows use `content-visibility: auto` for offscreen skip but are
 * NOT virtualized (window large streams in the caller).
 *
 * Live announcements are tied to follow pinning: the `role="log"` region is
 * `aria-live="polite"` only while following the tail and `aria-live="off"`
 * while unfollowed, so appends never flood assistive tech.
 *
 * @example
 * ```
 * <LogStream
 *   entries={entries}
 *   maxHeight={480}
 *   isFollowing={isFollowing}
 *   onFollowChange={setIsFollowing}
 * />
 * ```
 */
export declare function LogStream({ entries, variant, isFollowing, onFollowChange, maxHeight, hasTimestamps, label, renderEntry, xstyle, className, style, ref, ...rest }: LogStreamProps): import("react").JSX.Element;
export declare namespace LogStream {
    var displayName: string;
}
//# sourceMappingURL=LogStream.d.ts.map