quvyta
Idioma: Português (Brasil)

quvyta-framework

qframe

Um framework em Rust para aplicativos de terminal. Ele dá o runtime, um conjunto de componentes e arquivos de tema, ícones e idiomas, com uma única regra visual: a forma nasce da cor, nunca de colchetes ou caracteres de moldura.

cargo add quvyta-framework
A vitrine em 25 segundos, gravada pelos seus próprios testes: o painel de exemplo em execução passa pelos temas Nordic, Amber e Monochrome, e então a paleta de comandos abre a página de abas e vai da demonstração ao vivo para o código.

Um aplicativo mínimo

Dados, uma vista que os desenha, uma atualização que os muda.

O runtime transforma teclas e cliques em mensagens e só redesenha quando algo mudou. O pacote se chama quvyta-framework e a biblioteca, qframe, então o código a importa com use qframe::prelude::*;.

O mesmo aplicativo roda nos testes sem terminal nenhum: aperte teclas, clique e leia a tela de volta como texto.

O texto que as pessoas veem pertence aos arquivos de idioma e é lido com t!("key"); o exemplo usa cadeias simples para ficar curto. Rust 1.95 ou mais novo.

use qframe::prelude::*;

#[derive(Default)]
struct Counter {
    count: i32,
}

#[derive(Clone)]
enum Msg {
    Increment,
}

impl App for Counter {
    type Msg = Msg;

    fn update(&mut self, msg: Msg) -> Command<Msg> {
        match msg {
            Msg::Increment => self.count += 1,
        }
        Command::none()
    }

    fn view(&self, ui: &mut View<'_, Msg>) {
        ui.column(|ui| {
            ui.add(Text::new(format!("Count: {}", self.count)));
            ui.add(Button::new("Add one").variant("primary").on_press(Msg::Increment));
        })
        .gap(1);
    }
}

// Os testes conduzem o mesmo aplicativo sem terminal.
let mut app = Harness::new(Counter::default(), 30, 4);
app.press("tab").press("enter");
assert!(app.screen().contains("Count: 1"));

O que vem com ele

Tudo o que um aplicativo de terminal cuidadoso precisa.

  • Componentes

    Botões, listas, árvores, tabelas, abas, formulários e assistentes, campos de data, hora e duração, seletores de arquivo e pasta, menus, avisos, dicas, uma paleta de comandos, gráficos, vistas de Markdown, código e log, e um terminal.

  • Temas

    Iris, Nordic, Amber e Monochrome. Cada cor vem do tema, então um aplicativo inteiro muda com um único ajuste.

  • Ícones em três modos

    Nerd Font, Unicode simples e ASCII. Cada glifo ocupa exatamente uma célula em todos os modos.

  • Nove idiomas

    Inglês, turco, alemão, espanhol, francês, português do Brasil, russo, chinês simplificado e japonês, para cada componente; as palavras do seu aplicativo ficam ao lado.

  • Teclado e mouse

    Cada controle responde aos dois, com a mesma escala de tons: em repouso, sob o cursor, com o foco, pressionado.

  • Movimento que sussurra

    As durações vêm do tema, e a preferência por menos movimento é respeitada em todo lugar.

Quatro temas

A mesma tela, em quatro temas.

Cada cor vem do tema, então um aplicativo inteiro muda com um único ajuste. Escolha um abaixo e o mesmo painel assume as cores dele; o seletor são quatro botões de opção, sem script nenhum.

Tema
A vitrine no tema Iris, no mesmo painel: uma linha de CPU, medidores de recursos, uma barra por serviço, selos de estado e um relógio grande
Iris: as cores da família, e as deste site.
A vitrine no tema Nordic, no mesmo painel: uma linha de CPU, medidores de recursos, uma barra por serviço, selos de estado e um relógio grande
Nordic: azuis frios.
A vitrine no tema Amber, no mesmo painel: uma linha de CPU, medidores de recursos, uma barra por serviço, selos de estado e um relógio grande
Amber: tons quentes de ponta a ponta.
A vitrine no tema Monochrome, no mesmo painel: uma linha de CPU, medidores de recursos, uma barra por serviço, selos de estado e um relógio grande
Monochrome: cinzas de ponta a ponta, a cor só para o estado.

A vitrine

Uma página para cada componente.

Instale a vitrine e rode qframe: cada componente tem uma demonstração ao vivo, seu código, um guia e uma referência. Cada imagem desta página é uma das telas de teste dela, desenhada sem terminal.

cargo install quvyta-framework-showcase && qframe

Documentação

Onde ler mais.