Sobre o projeto

rui é uma biblioteca de interface declarativa para Rust projetada para consolidar os três pilares do desenvolvimento web — estrutura, estilo e comportamento — em uma única expressão Rust. Ao contrário de frameworks que dependem de motores de renderização externos ou árvores de dependência pesadas, rui é totalmente autossuficiente. Ela inclui seu próprio parser de TrueType, rasterizador de glifos, antialiasing, layout de texto e escritor de PNG, garantindo que uma interface seja renderizada de forma idêntica no macOS, Windows, Linux (X11/Wayland) e WebAssembly, pois o mesmo código desenha cada pixel. A biblioteca adota uma abordagem funcional onde a view é uma função pura do estado, e os manipuladores de eventos são funções que mutam o estado diretamente, eliminando a necessidade de padrões de mutabilidade interior como `Rc` ou `RefCell`. O estilo é integrado diretamente na cadeia de componentes via chamadas de método (por exemplo, `.pad()`, `.center()`, `.hover_fill()`), e as cores são definidas por papéis semânticos (por exemplo, `Tone::Surface`) que se resolvem contra o tema ativo. Isso garante uma aparência consistente entre os modos claro e escuro sem folhas de estilo separadas. rui segue a filosofia de “fundações, não um catálogo”. Ela não vem com widgets complexos pré-construídos, como checkboxes ou sliders. Em vez disso, fornece sete primitivas poderosas (como `draw`, `on_drag` e `ease`) que permitem aos desenvolvedores compor esses controles por conta própria. Essa abordagem garante que os componentes de UI sejam personalizáveis e livres das restrições de uma biblioteca de widgets rígida. Elementos embutidos como `button`, `text` e `row` são eles próprios receitas construídas sobre essas primitivas, servindo como implementações de referência. A acessibilidade é um pilar arquitetônico fundamental. A árvore de elementos serve também como a árvore de acessibilidade, derivando automaticamente papéis, nomes e estados da estrutura da UI. Isso garante que leitores de tela e tecnologias assistivas recebam informações precisas sem exigir anotação manual. A biblioteca impõe convenções de acessibilidade por meio de testes rigorosos, garantindo que elementos interativos tenham identidades adequadas e que o gerenciamento de foco seja consistente. Os testes são suportados por um `Harness` determinístico que dirige o pipeline de renderização real em um ambiente headless. Ele permite afirmações precisas sobre layout, saída de pixels e estados de interação. Uma fonte de teste sintética é usada para garantir que as medições de texto sejam consistentes entre diferentes máquinas, permitindo testes de integração e paridade confiáveis.