import type { LoggerFn } from "./types.js";
import type { ErrorLogger, ErrorContext } from "./error-logger.js";
export interface LoggerContext {
    dryRun?: boolean;
    verbose?: boolean;
    scope?: string;
}
export interface ScopedLogger {
    readonly context: Required<Pick<LoggerContext, "dryRun" | "verbose">> & Pick<LoggerContext, "scope">;
    info(message: string): void;
    success(message: string): void;
    warn(message: string): void;
    error(message: string): void;
    errorResolved(label: string, value: string): void;
    errorWithStack(error: Error, context?: ErrorContext): void;
    logException(error: Error, operation: string, context?: ErrorContext): void;
    dryRun(message: string): void;
    verbose(message: string): void;
    intro(title: string): void;
    resolved(label: string, value: string): void;
    nextSteps(steps: string[]): void;
    feedback(label: string, url: string): void;
    child(context: Partial<LoggerContext>): ScopedLogger;
}
export interface LoggerFactory {
    base: LoggerFn;
    errorLogger?: ErrorLogger;
    create(context?: LoggerContext): ScopedLogger;
    setErrorLogger(errorLogger: ErrorLogger): void;
}
export interface LoggerTheme {
    intro?: (text: string) => string;
    resolvedSymbol?: string;
    errorSymbol?: string;
}
export declare function createLoggerFactory(emitter?: LoggerFn, theme?: LoggerTheme): LoggerFactory;
