textyle

Crates.iotextyle
lib.rstextyle
version0.2.0
sourcesrc
created_at2024-02-04 19:32:52.627345
updated_at2024-08-13 19:39:56.333316
descriptionA text-based declarative UI library inspired by SwiftUI
homepagehttps://github.com/louis1001/textyle
repositoryhttps://github.com/louis1001/textyle
max_upload_size
id1126600
size670,533
Luis Gonzalez (louis1001)

documentation

README

Textyle

A layout engine inspired by SwiftUI and declarative UI frameworks. Originally focused on text and terminal graphics.

Examples

I plan on making a DSL for it, but these examples use the rust Enum based API for now:

1- Sidebar layout

This code:

let layout = Layout::HorizontalStack( VerticalAlignment::Top, vec![
        Layout::text("Main content")
            .center_horizontally()
            .align_top()
            .padding_vertical(2)
            .border(2, '.', hash_set!(Edge::Right)),
        Layout::VerticalStack(HorizontalAlignment::Center, vec![
            Layout::text("Side content"),
            Layout::VerticalStack(HorizontalAlignment::Left, vec![
                Layout::text("List of content:")
                .padding(1),
                Layout::text("- Item 1"),
                Layout::text("- Item 2"),
                Layout::text("- Item 3"),
            ])
            .border(1, '-', hash_set![Edge::Top])
        ])
        .center_horizontally()
        .width(24)
        .padding_vertical(2)
    ]);

Produces the following UI:

example_big

If the canvas is given smaller dimensions, the declarative layout adapts:

example_small

Commit count: 0

cargo fmt