// Type definitions
type LogSymbols = {
    fail: string;
    info: string;
    success: string;
    warn: string;
};
type LoggerMethods = {
    [K in keyof typeof console]: (typeof console)[K] extends (...args: infer A
    // biome-ignore lint/suspicious/noExplicitAny: Console method return types are dynamic.
    ) => any ? (...args: A) => Logger : (typeof console)[K];
};
interface Task {
    run<T>(f: () => T): T;
}
export type { LogSymbols, LoggerMethods, Task };
export declare const LOG_SYMBOLS: Record<string, string>;
export declare const incLogCallCountSymbol: unique symbol;
export declare const lastWasBlankSymbol: unique symbol;
/**
 * Custom Logger class that wraps console with additional features.
 * Supports indentation, symbols, and blank line tracking.
 */
/*@__PURE__*/
export declare class Logger {
    #private;
    static LOG_SYMBOLS: Record<string, string>;
    constructor(...args: unknown[]);
    /**
     * Get a logger instance bound to stderr.
     * All operations on this instance will use stderr.
     */
    get stderr(): Logger;
    /**
     * Get a logger instance bound to stdout.
     * All operations on this instance will use stdout.
     */
    get stdout(): Logger;
    /**
     * Get the current log call count.
     */
    get logCallCount(): number;
    /**
     * Increment the log call count.
     */
    [incLogCallCountSymbol](): this;
    /**
     * Set whether the last logged line was blank.
     */
    [lastWasBlankSymbol](value: unknown): this;
    /**
     * Log an assertion.
     */
    assert(value: unknown, ...message: unknown[]): this;
    /**
     * Clear the visible terminal screen.
     * Only available on the main logger instance.
     */
    clearVisible(): this;
    /**
     * Log a count for the given label.
     */
    count(label?: string): this;
    /**
     * Create a task with a given name.
     */
    createTask(name: string): Task;
    /**
     * Decrease indentation level.
     * If called on main logger, affects both streams.
     * If called on stream-bound logger, affects only that stream.
     */
    dedent(spaces?: number): this;
    /**
     * Display an object's properties.
     */
    dir(obj: unknown, options?: unknown): this;
    /**
     * Display data as XML.
     */
    dirxml(...data: unknown[]): this;
    /**
     * Log an error message.
     */
    error(...args: unknown[]): this;
    /**
     * Log a newline to stderr if last line wasn't blank.
     */
    errorNewline(): this;
    /**
     * Log a failure message with symbol.
     */
    fail(...args: unknown[]): this;
    /**
     * Start a new log group.
     */
    group(...label: unknown[]): this;
    /**
     * Start a new collapsed log group (alias for group).
     */
    // groupCollapsed is an alias of group.
    // https://nodejs.org/api/console.html#consolegroupcollapsed
    groupCollapsed(...label: unknown[]): this;
    /**
     * End the current log group.
     */
    groupEnd(): this;
    /**
     * Increase indentation level.
     * If called on main logger, affects both streams.
     * If called on stream-bound logger, affects only that stream.
     */
    indent(spaces?: number): this;
    /**
     * Log an info message with symbol.
     */
    info(...args: unknown[]): this;
    /**
     * Log a message.
     */
    log(...args: unknown[]): this;
    /**
     * Log a newline to stdout if last line wasn't blank.
     */
    logNewline(): this;
    /**
     * Reset indentation to zero.
     * If called on main logger, resets both streams.
     * If called on stream-bound logger, resets only that stream.
     */
    resetIndent(): this;
    /**
     * Log a main step with blank line before (stateless).
     */
    step(msg: string, ...extras: unknown[]): this;
    /**
     * Log an indented substep (stateless).
     */
    substep(msg: string, ...extras: unknown[]): this;
    /**
     * Log a success message with symbol.
     */
    success(...args: unknown[]): this;
    /**
     * Log a done message (alias for success).
     * Does NOT auto-clear. Call clearLine() first if needed after progress().
     */
    done(...args: unknown[]): this;
    /**
     * Display data in a table format.
     */
    table(tabularData: unknown, properties?: readonly string[]): this;
    /**
     * End a timer and log the elapsed time.
     */
    timeEnd(label?: string): this;
    /**
     * Log the current timer value.
     */
    timeLog(label?: string, ...data: unknown[]): this;
    /**
     * Log a stack trace.
     */
    trace(message?: unknown, ...args: unknown[]): this;
    /**
     * Log a warning message with symbol.
     */
    warn(...args: unknown[]): this;
    /**
     * Write to stdout without a newline or indentation.
     */
    write(text: string): this;
    /**
     * Show a progress indicator (can be cleared with clearLine).
     * Simple status message without spinner animation.
     */
    progress(text: string): this;
    /**
     * Clear the current line.
     */
    clearLine(): this;
}
export declare const logger: Logger;
