import type { SpinnerName } from "cli-spinners"; import type InteractiveManager from "./interactive/interactive-manager.d.ts"; /** * Spinner style configuration using colorize. */ export interface SpinnerStyle { /** Background color name (e.g., "bgRed", "bgBlue") */ bgColor?: string; /** Background color as hex (e.g., "#FF0000") */ bgHex?: `#${string}`; /** Background color as RGB (e.g., [255, 0, 0]) */ bgRgb?: [number, number, number]; /** Apply bold style */ bold?: boolean; /** Foreground color name (e.g., "red", "blue", "green") */ color?: string; /** Apply dim/faint style */ dim?: boolean; /** Foreground color as hex (e.g., "#FF0000") */ hex?: `#${string}`; /** Apply inverse style (swap fg/bg) */ inverse?: boolean; /** Apply italic style */ italic?: boolean; /** Apply overline style */ overline?: boolean; /** Foreground color as RGB (e.g., [255, 0, 0]) */ rgb?: [number, number, number]; /** Apply strikethrough style */ strikethrough?: boolean; /** Apply underline style */ underline?: boolean; } /** * Spinner completion icons. */ export interface SpinnerIcons { /** Icon to show on failure (default: "✖") */ error?: string; /** Icon to show on info (default: "ℹ") */ info?: string; /** Icon to show on success (default: "✓") */ success?: string; /** Icon to show on warning (default: "⚠") */ warning?: string; } /** * Spinner style options. */ export interface SpinnerOptions { /** Custom icons for completion states */ icons?: SpinnerIcons; /** Name of the spinner from cli-spinners */ name?: SpinnerName; /** Prefix text to show before the spinner */ prefixText?: string; /** Style configuration for the spinner */ style?: SpinnerStyle; /** Whether to output spinner (default: true) */ verbose?: boolean; } /** * Options for starting a spinner. */ export interface SpinnerStartOptions { /** Prefix text to show before the spinner */ prefixText?: string; } /** * Spinner class for creating loading indicators in terminal applications. * * Provides an easy-to-use interface for displaying spinners with various styles * from the cli-spinners library. Works seamlessly with interactive terminal features. * @example * ```typescript * const spinner = new Spinner({ name: "dots" }); * spinner.start("Loading..."); * // ... do work ... * spinner.succeed("Done!"); * ``` */ export declare class Spinner { #private; /** * Creates a new Spinner instance. * @param options Configuration options for the spinner * @param interactiveManager Optional interactive manager for terminal control */ constructor(options?: SpinnerOptions, interactiveManager?: InteractiveManager); /** * Current elapsed time in milliseconds. */ get elapsedTime(): number; /** * Get or set the spinner text. */ get getText(): string; set text(value: string); /** * Get or set the prefix text. */ get getPrefixText(): string; set prefixText(value: string); /** * Whether the spinner is currently active. */ get isRunning(): boolean; /** * Set the interactive manager for interactive mode. * @internal */ setInteractiveManager(manager?: InteractiveManager): void; /** * Set the multi spinner reference. * @internal */ setMultiSpinner(multiSpinner?: MultiSpinner): void; /** * Start the spinner with optional text. * @param text Optional text to display * @param options * @param options.prefixText Optional prefix text to display * @returns The spinner instance for chaining */ start(text?: string, options?: SpinnerStartOptions): this; /** * Stop the spinner with a success message. * @param text Optional success text */ succeed(text?: string): void; /** * Stop the spinner with a failure message. * @param text Optional failure text */ failed(text?: string): void; /** * Stop the spinner with a warning message. * @param text Optional warning text */ warn(text?: string): void; /** * Stop the spinner with an info message. * @param text Optional info text */ info(text?: string): void; /** * Pause the spinner without stopping it. */ pause(): void; /** * Resume the spinner if it was paused. */ resume(): void; /** * Get current frame output. * @internal */ getFrameOutput(): string; } /** * Multi-Spinner class for managing multiple spinners concurrently. * * Allows displaying and updating multiple spinners simultaneously with * consistent formatting and management. * @example * ```typescript * const multiSpinner = new MultiSpinner({ name: "dots" }); * * const spinner1 = multiSpinner.create("Task 1"); * const spinner2 = multiSpinner.create("Task 2"); * * spinner1.start(); * spinner2.start(); * * // ... do work ... * * spinner1.succeed(); * spinner2.succeed(); * multiSpinner.stop(); * ``` */ export declare class MultiSpinner { #private; constructor(options?: SpinnerOptions, interactiveManager?: InteractiveManager); /** * Set the interactive manager for interactive mode. * @internal */ setInteractiveManager(manager?: InteractiveManager): void; /** * Create a new spinner instance. * @param text Initial text for the spinner * @param options * @param options.prefixText Optional prefix text to display * @param options.style Optional style for the spinner * @param options.verbose Whether to output spinner (default: true) * @returns A new Spinner instance */ create(text?: string, options?: SpinnerOptions): Spinner; /** * Remove a spinner from the multi-spinner manager. * @param spinner The spinner to remove * @returns True if the spinner was removed, false otherwise */ remove(spinner: Spinner): boolean; /** * Stop all spinners. */ stop(): void; /** * Clear all spinners without stopping them. */ clear(): void; /** * Render all spinners. * @internal */ renderAll(): void; } export type SpinnerType = Record & Spinner;