import { default as React } from 'react';
import { LiveIndicatorProps } from '../core/LiveIndicator';
import { ActionButtonProps } from '../core/ActionButton';
export type ConsoleTheme = 'light' | 'dark' | 'retro';
export type ConsoleLevel = 'debug' | 'info' | 'success' | 'warning' | 'error';
export type ConsoleLiveStatus = 'live' | 'paused';
export interface ConsoleProps extends React.HTMLAttributes<HTMLElement> {
    /**
     * Visual treatment.
     * - `'light'` (default) — Linen surface, serif title, monospace tags
     * - `'dark'` — Linseed-950 surface, serif title, suited for ops dashboards
     * - `'retro'` — CRT phosphor, scanlines, monospace everywhere
     */
    theme?: ConsoleTheme;
    testId?: string;
}
export interface ConsoleTitleBarProps {
    children?: React.ReactNode;
    className?: string;
}
export interface ConsoleTitleProps {
    children?: React.ReactNode;
    className?: string;
}
/**
 * Re-export of {@link core/LiveIndicator} as `Console.LiveIndicator`. Use either
 * import path; the Console theme overrides the chip tokens so the indicator
 * adopts the surrounding palette automatically.
 */
export type ConsoleLiveIndicatorProps = LiveIndicatorProps;
export interface ConsoleCounterProps {
    children?: React.ReactNode;
    className?: string;
}
/**
 * Re-export of {@link core/ActionButton} as `Console.ActionButton`. The Console
 * theme overrides `--action-button-*` tokens so chrome buttons follow the
 * local palette.
 */
export type ConsoleActionButtonProps = ActionButtonProps;
export interface ConsoleBodyProps {
    children?: React.ReactNode;
    className?: string;
}
export interface ConsoleGroupProps {
    /** Group label (e.g. "18:42"). */
    label: React.ReactNode;
    /** Optional event count — rendered as "· N event(s)" next to the label. */
    count?: number;
    /** Override the auto-rendered count text (e.g. for i18n). */
    countLabel?: React.ReactNode;
    className?: string;
}
export interface ConsoleEntryProps {
    /** Render as time string (e.g. "18:42:11.234"). Use a small subcomponent so
     *  the milliseconds can be visually muted; see {@link Time}. */
    timestamp: React.ReactNode;
    /** Severity. Controls the colored badge on the left. */
    level: ConsoleLevel;
    /** Severity label. Defaults to the `level` value uppercased. */
    levelLabel?: React.ReactNode;
    /** Optional source name (e.g. "SignalR"). Hidden on narrow widths. */
    source?: React.ReactNode;
    /** Inline color for the source swatch + label. */
    sourceColor?: string;
    /** Main message. Can include `<b>` and `<code>` for emphasis. */
    message: React.ReactNode;
    /** Right-aligned meta (e.g. duration, actor). */
    meta?: React.ReactNode;
    /** Expanded detail content. When provided, the row is clickable and shows
     *  a chevron that rotates on expand. */
    children?: React.ReactNode;
    /** Whether the expanded content is visible. Fully controlled. */
    expanded?: boolean;
    /** Called when the row is clicked. Receives the new expanded state. */
    onToggle?: (next: boolean) => void;
    className?: string;
    testId?: string;
}
export interface ConsoleEntryDetailProps {
    children?: React.ReactNode;
    className?: string;
}
/**
 * Themable, presentational log/event console. Compose with `TitleBar`,
 * `LiveIndicator`, `Body`, `Group`, and `Entry`.
 *
 * @beta This component is experimental — prop shape and visual treatment
 * may change before release.
 *
 * @example
 * ```tsx
 * <Console theme="dark" aria-label="System log">
 *   <Console.TitleBar>
 *     <Console.Title>System log</Console.Title>
 *     <Console.Tag>prod</Console.Tag>
 *     <Console.LiveIndicator status={paused ? 'paused' : 'live'} />
 *     <Console.Counter><b>{events.length}</b> events · last 10 min</Console.Counter>
 *   </Console.TitleBar>
 *   <Console.Body ref={bodyRef}>
 *     <Console.Group label="18:42" count={3} />
 *     {events.map((ev) => (
 *       <Console.Entry
 *         key={ev.id}
 *         timestamp={<Console.Time hhmmss={ev.hhmmss} ms={ev.ms} />}
 *         level={ev.level}
 *         source={ev.source}
 *         message={ev.message}
 *         meta={ev.meta}
 *         expanded={expandedId === ev.id}
 *         onToggle={(next) => setExpandedId(next ? ev.id : null)}
 *       >
 *         <Console.EntryDetail>{JSON.stringify(ev.payload, null, 2)}</Console.EntryDetail>
 *       </Console.Entry>
 *     ))}
 *   </Console.Body>
 * </Console>
 * ```
 */
export declare const Console: React.FC<ConsoleProps> & {
    TitleBar: React.FC<ConsoleTitleBarProps>;
    Title: React.FC<ConsoleTitleProps>;
    Tag: React.FC<ConsoleTitleProps>;
    LiveIndicator: React.FC<LiveIndicatorProps>;
    Counter: React.FC<ConsoleCounterProps>;
    ActionButton: React.ForwardRefExoticComponent<ActionButtonProps & React.RefAttributes<HTMLButtonElement>>;
    Body: React.ForwardRefExoticComponent<ConsoleBodyProps & React.RefAttributes<HTMLDivElement>>;
    Group: React.FC<ConsoleGroupProps>;
    Entry: React.FC<ConsoleEntryProps>;
    Time: React.FC<{
        hhmmss: string;
        ms?: string;
        className?: string;
    }>;
    EntryDetail: React.FC<ConsoleEntryDetailProps>;
    RetroCursor: React.FC<{
        className?: string;
    }>;
};
//# sourceMappingURL=Console.d.ts.map