csharp-spectre-console

Mejora tus aplicaciones de consola de C# con Spectre.Console

Spectre.Console es una biblioteca de C# que permite crear interfaces de usuario avanzadas y personalizables en la consola de comandos.

Las interfaces de usuario en la consola han avanzado muchisimo desde los días de simples líneas de texto. Spectre.Console es una biblioteca impresionante que nos permite crear interfaces de usuario ricas y dinámicas en la consola.

Con Spectre.Console, puedes agregar colores, tablas, gráficos de barras, árboles, cuadros de texto y mucho más a tus aplicaciones de consola. Esto nos permite crear mejor experiencia de usuario en la consola de comandos y … en fin… es que quedan que son una monería ❤️

Características de Spectre.Console,

  • Colores y estilos de texto: Personalización completa del texto con colores, negrita, cursiva, subrayado y más.
  • Tablas: Creación de tablas con soporte para alineación y estilos avanzados.
  • Gráficos de barras: Visualización de datos en gráficos de barras horizontales y verticales.
  • Cuadros de texto: Enmarcado de texto con bordes personalizados.
  • Árboles: Representación jerárquica de datos.
  • Prompts interactivos: Entradas de usuario interactivas con validación.
  • Progreso y spinners: Indicadores de progreso y spinners animados.

Spectre.Console es de código abierto, y todo su código y documentación están disponibles en el repositorio del proyecto en GitHub - Spectre.Console.

Instalación de Spectre.Console

Para comenzar a usar Spectre.Console en tu proyecto de .NET, puedes agregar el paquete NuGet correspondiente:

Install-Package Spectre.Console
Install-Package Spectre.Console.Cli

También puedes instalarlo utilizando el Administrador de paquetes NuGet en Visual Studio.

Cómo usar Spectre.Console

A continuación, se presentan varios ejemplos que ilustran cómo utilizar Spectre.Console para crear interfaces de usuario avanzadas en la consola.

Texto con estilo

Este ejemplo muestra cómo aplicar diferentes estilos al texto en la consola.

using Spectre.Console;

class Program
{
    static void Main(string[] args)
    {
        AnsiConsole.Markup("[bold red]Hola[/], [underline blue]mundo[/]!");
        AnsiConsole.WriteLine();
    }
}

spectre-console-helloworld

Creación de tablas

En este ejemplo, se muestra cómo crear y mostrar una tabla en la consola.

using Spectre.Console;

class Program
{
    static void Main(string[] args)
    {
        var table = new Table();
        
        table.AddColumn("Id");
        table.AddColumn("Nombre");
        table.AddColumn("Edad");
        
        table.AddRow("1", "Luis", "25");
        table.AddRow("2", "María", "30");
        table.AddRow("3", "Luis", "28");
        
        AnsiConsole.Write(table);
    }
}

spectre-console-tables

Gráficos de barras

Este ejemplo muestra cómo crear y mostrar un gráfico de barras horizontal.

using Spectre.Console;

class Program
{
    static void Main(string[] args)
    {
        var chart = new BarChart()
            .Width(60)
            .Label("[green bold underline]Gráfico de Barras[/]")
            .AddItem("C#", 12, Color.Yellow)
            .AddItem("Java", 8, Color.Green)
            .AddItem("Python", 14, Color.Blue);
        
        AnsiConsole.Write(chart);
    }
}

spectre-console-bar-chart

Cuadros de texto

Este ejemplo muestra cómo crear y mostrar un cuadro de texto con un borde personalizado.

using Spectre.Console;

class Program
{
    static void Main(string[] args)
    {
        var panel = new Panel("Este es un cuadro de texto con borde personalizado.")
        {
            Border = BoxBorder.Rounded,
            Padding = new Padding(1, 1, 1, 1),
            BorderStyle = new Style(Color.Red)
        };
        
        AnsiConsole.Write(panel);
    }
}

spectre-console-text-box

Indicadores de progreso

Este ejemplo muestra cómo crear y mostrar un indicador de progreso en la consola.

using Spectre.Console;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        AnsiConsole.Progress()
            .Start(ctx =>
            {
                var task = ctx.AddTask("[green]Progreso[/]");
                
                while (!task.IsFinished)
                {
                    task.Increment(1);
                    Thread.Sleep(100);
                }
            });
    }
}

spectre-console-progress-bar